Merge remote-tracking branch 'origin/develop' into HEAD

This commit is contained in:
MacRimi
2026-10-18 15:07:07 +02:00
874 changed files with 111609 additions and 2871 deletions
@@ -1,12 +1,13 @@
{
"meta": {
"title": "Código de conducta | ProxMenux Documentation",
"title": "Código de conducta | Documentación de ProxMenux",
"description": "Código de conducta y buenas prácticas de ProxMenux para colaboradores, testers y usuarios.",
"ogTitle": "Código de conducta | ProxMenux Documentation",
"ogTitle": "Código de conducta | Documentación de ProxMenux",
"ogDescription": "Expectativas sobre responsabilidad del código, divulgación de problemas de seguridad y alcance de los PRs para el proyecto ProxMenux."
},
"errors": {
"notFound": "Error: archivo CODE_OF_CONDUCT.md no encontrado.",
"loadFailed": "Error: no se pudo cargar el contenido del código de conducta."
}
},
"contentMarkdown": "# 📝 Código de conducta y buenas prácticas\n\nEste documento define los **principios y las pautas** de uso de **ProxMenux** para promover el **respeto, la colaboración y la seguridad** durante el desarrollo.\n\n## 📌 1. Autoría del código y reconocimiento\n\n- Si se utilizan **scripts, fragmentos de código o ideas** de otros repositorios o desarrolladores, se reconocerá siempre la autoría original.\n- Se añadirá un comentario en el código o la documentación que indique la fuente y, si es posible, enlace al repositorio original.\n- Al utilizar código con una **licencia** concreta, se deben respetar sus condiciones.\n\n### ✅ Ejemplo de reconocimiento de autoría en el código:\n\n```bash\n# Script basado en el trabajo de [Autor] en [Enlace al repositorio]\n```\n\n## 🔒 2. Seguridad y responsabilidad del código\n\n- Todo el código de este repositorio sigue las buenas prácticas de desarrollo seguro.\n- No se permiten contribuciones que introduzcan vulnerabilidades intencionadas o prácticas inseguras.\n- Los scripts nunca deben comprometer la seguridad del sistema ni los datos de los usuarios.\n- Las contribuciones deben revisarse antes de implementarlas para comprobar su seguridad y estabilidad.\n\n### ⚠️ Divulgación responsable de vulnerabilidades\n\nSi descubres una vulnerabilidad de seguridad, NO la notifiques en incidencias o foros públicos.\n\nComunícala en privado por correo electrónico:\n\n📧 proxmenux@macrimi.pro\n\nPara más información sobre las vulnerabilidades y cómo notificarlas, consulta nuestra [política de seguridad](./SECURITY.md).\n\n## 🤝 3. Normas de la comunidad\n\nPara mantener un entorno respetuoso y profesional, todos los usuarios deben seguir estas pautas:\n\n- ✅ Sé respetuoso y constructivo en las discusiones.\n- ❌ No se tolerarán el acoso, el discurso de odio ni las conductas ofensivas.\n- ✅ Aporta comentarios de forma profesional, sin ataques personales.\n- ❌ El incumplimiento puede dar lugar a advertencias o expulsiones, según la gravedad.\n\n##\n\nEste documento promueve un uso ético del código, la conciencia de seguridad y una comunidad respetuosa.\n\n📢 ¡Construyamos algo grande juntos!\n"
}
+3 -3
View File
@@ -1,6 +1,6 @@
{
"meta": {
"title": "Contribuir a ProxMenux | ProxMenux Documentation",
"title": "Contribuir a ProxMenux | Documentación de ProxMenux",
"description": "Cómo contribuir a ProxMenux — modelo de ramas (main / develop / feature/*), flujo de pull requests, plantilla de cabecera de script con atribución de autor y enlace opcional de patrocinio, política de diseño UI en dos fases, funciones de mensajes y el camino desde una rama de función hasta un release estable.",
"ogTitle": "Contribuir a ProxMenux",
"ogDescription": "Modelo de ramas, flujo de trabajo, atribución en la cabecera del script y política de diseño UI en dos fases que los colaboradores deben seguir."
@@ -129,7 +129,7 @@
"intro": "Todas definidas en <code>utils.sh</code>. Úsalas como el valor por defecto para cualquier salida visible para el usuario — visuales coherentes entre scripts es la idea. Si tu script necesita una función nueva que no encaja en el conjunto existente (un nuevo nivel de severidad, un nuevo helper de layout, etc.), propónla en tu Pull Request — se revisará y se añadirá a <code>utils.sh</code> si es útil de forma amplia.",
"headerFunction": "Función",
"headerWhen": "Cuándo usar",
"headerSpinner": "Spinner",
"headerSpinner": "Indicador de progreso",
"rows": [
{
"function": "msg_info \"text\"",
@@ -163,7 +163,7 @@
},
{
"function": "msg_success \"text\"",
"whenRich": "Prompt final \"Press Enter to return\" al final de la fase 2.",
"whenRich": "Mensaje final «Press Enter to return» al terminar la fase 2.",
"spinner": "Para"
},
{
+9 -9
View File
@@ -1,32 +1,32 @@
{
"meta": {
"title": "Colaboradores | ProxMenux Documentation",
"description": "Reconocimiento a las personas que hacen posible ProxMenux — testers, revisores y desarrolladores que dan forma a cada release.",
"ogTitle": "Colaboradores | ProxMenux Documentation",
"title": "Colaboradores | Documentación de ProxMenux",
"description": "Reconocimiento a las personas que hacen posible ProxMenux: quienes prueban, revisan y desarrollan cada versión.",
"ogTitle": "Colaboradores | Documentación de ProxMenux",
"ogDescription": "Conoce a los colaboradores detrás de ProxMenux."
},
"header": {
"title": "Colaboradores",
"description": "El proyecto ProxMenux crece y prospera gracias a la contribución de sus colaboradores. Este es el merecido reconocimiento a su trabajo — probando builds antes del release, cazando regresiones, revisando PRs y dando forma a la dirección de las nuevas funciones.",
"description": "ProxMenux crece gracias a sus colaboradores. Esta página reconoce su trabajo: probar versiones antes de publicarlas, detectar regresiones, revisar PR y ayudar a orientar las nuevas funciones.",
"section": "Acerca de"
},
"beyond": {
"title": "Más allá de esta lista",
"body": "Mucha más gente contribuye vía reportes de bugs, ideas de funciones en Discussions, pruebas beta y traducciones. La lista completa de colaboradores de código vive en el <extlink>grafo de colaboradores de GitHub</extlink>. La página de abajo destaca a las personas que han estado más activamente involucradas en probar y revisar releases de ProxMenux."
"body": "Muchas más personas contribuyen notificando errores, proponiendo funciones en Discussions, probando versiones beta y traduciendo el proyecto. La lista completa de colaboradores del código está en el <extlink>gráfico de colaboradores de GitHub</extlink>. Esta página destaca a quienes participan más activamente en las pruebas y la revisión de las versiones de ProxMenux."
},
"testers": {
"heading": "Testers y revisores",
"intro": "Estas personas fueron de las primeras en contribuir al proyecto, probando, reportando incidencias y proponiendo mejoras que ayudaron a que ProxMenux haya crecido hasta convertirse en lo que es hoy.",
"heading": "Pruebas y revisión",
"intro": "Estas personas estuvieron entre las primeras en contribuir al proyecto. Sus pruebas, avisos de errores y propuestas de mejora ayudaron a convertir ProxMenux en lo que es hoy.",
"roles": {
"testing": "Pruebas",
"testingReviewer": "Pruebas y revisor"
"testingReviewer": "Pruebas y revisión"
},
"youtube": "YouTube"
},
"contribute": {
"heading": "¿Quieres colaborar?",
"intro": "Cualquier contribución es bienvenida — código, pruebas, diseño, documentación o simplemente compartir tus ideas:",
"tester": "<strong>Tester</strong> — prueba el <beta>canal beta</beta> y reporta qué funciona y qué no antes de los releases estables.",
"tester": "<strong>Pruebas</strong>: prueba el <beta>canal beta</beta> y comunica qué funciona y qué no antes de que se publiquen las versiones estables.",
"developer": "<strong>Desarrollador</strong> — Bash + Next.js (TypeScript) + un poco de Python para el venv de traducción. Los PRs son bienvenidos en <gh>GitHub</gh>.",
"designer": "<strong>Diseñador</strong> — mejoras de UI, iconos, capturas para la documentación.",
"ideas": "<strong>Ideas</strong> — abre un hilo en <disc>GitHub Discussions</disc> antes de abrir una incidencia de petición de función."
+13 -13
View File
@@ -1,8 +1,8 @@
{
"meta": {
"title": "FAQ | ProxMenux Documentation",
"title": "Preguntas frecuentes | Documentación de ProxMenux",
"description": "Preguntas frecuentes sobre ProxMenux: qué es, instalación, compatibilidad (solo PVE 8+), personalización, actualizaciones, seguridad, uso en producción, seguridad de archivos del sistema, contribuir, desinstalación.",
"ogTitle": "FAQ | ProxMenux Documentation",
"ogTitle": "Preguntas frecuentes | Documentación de ProxMenux",
"ogDescription": "Preguntas frecuentes sobre instalación, compatibilidad, seguridad y contribución a ProxMenux."
},
"header": {
@@ -24,7 +24,7 @@
"q1": {
"question": "¿Qué es ProxMenux y para qué sirve?",
"p1Rich": "<strong>ProxMenux</strong> es una herramienta interactiva basada en menús diseñada para hacer <strong>Proxmox VE</strong> accesible a todos los usuarios, independientemente de su experiencia técnica. Simplifica la ejecución de comandos, permitiendo a los usuarios realizar acciones en su sistema sin necesidad de conocimientos avanzados de Linux.",
"p2": "Para usuarios menos experimentados, ProxMenux ofrece una forma intuitiva de ejecutar comandos mediante una interfaz de menús estructurada, reduciendo la necesidad de entrada manual por terminal. Para administradores con experiencia, recorta pulsaciones para flujos repetitivos (hardening post-instalación, passthrough de GPU, importación de VMs OVF, rotaciones de snapshots ZFS).",
"p2": "Para quienes tienen menos experiencia, ProxMenux ofrece menús estructurados que reducen la necesidad de escribir comandos a mano. A los administradores con experiencia les ahorra pasos en tareas repetitivas: reforzar la seguridad tras instalar, pasar una GPU, importar VM en formato OVF o gestionar la rotación de snapshots ZFS.",
"p3": "Proxmox VE se usa ampliamente para:",
"items": [
"Virtualización de nivel empresarial",
@@ -34,7 +34,7 @@
},
"q2": {
"question": "¿Cómo instalo ProxMenux?",
"p1Rich": "Sigue la <installlink>guía de instalación</installlink>. En corto:",
"p1Rich": "Sigue la <installlink>guía de instalación</installlink>. En resumen:",
"stableInstall": "bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"",
"p2": "Una vez instalado, simplemente arráncalo con:",
"menuCmd": "menu"
@@ -45,7 +45,7 @@
},
"q4": {
"question": "¿Puedo personalizar ProxMenux?",
"p1Rich": "Los scripts del núcleo no se pueden modificar directamente porque están alojados en GitHub y se refrescan con el flujo de auto-actualización. Lo que <em>sí</em> puedes personalizar:",
"p1Rich": "Las actualizaciones pueden sobrescribir los cambios locales en los scripts principales, así que evita editar esos archivos directamente. Lo que <em>sí</em> puedes personalizar:",
"items": [
"El banner de la consola vía la herramienta <strong>FastFetch</strong> en las opciones de post-instalación.",
"Qué componentes opcionales se instalan (Monitor, Fail2Ban, Lynis…) — elige durante la instalación o vía el menú correspondiente más tarde."
@@ -53,8 +53,8 @@
},
"q5": {
"question": "¿Cómo actualizo ProxMenux?",
"p1Rich": "Cuando hay una nueva versión disponible, ProxMenux la detecta en el siguiente lanzamiento de <code>menu</code> y te pide actualizar. Aceptar reemplaza los archivos de utilidad y las configuraciones en sitio. No hace falta descarga manual.",
"p2Rich": "Los usuarios estables reciben releases estables; los usuarios beta reciben releases beta. Cuando se publica una versión estable, ProxMenux notifica a los usuarios beta en el siguiente lanzamiento y ofrece cambiar automáticamente — mira la página del <betalink>programa beta</betalink>."
"p1Rich": "Cuando hay una nueva versión, ProxMenux la detecta la próxima vez que ejecutas <code>menu</code> y te propone actualizar. Si aceptas, sustituye los archivos de la herramienta y su configuración en la instalación existente; no necesitas descargar nada a mano.",
"p2Rich": "Los usuarios de la versión estable reciben las actualizaciones estables y los de la beta, las actualizaciones beta. Cuando se publica una versión estable, la beta avisa al volver a abrir el menú y ofrece cambiar automáticamente a la estable. Consulta el <betalink>programa beta</betalink>."
},
"q6": {
"question": "¿Dónde puedo reportar incidencias?",
@@ -63,19 +63,19 @@
},
"q7": {
"question": "¿Puedo contribuir a ProxMenux?",
"p1Rich": "<strong>Absolutamente.</strong> ProxMenux es de código abierto y colaborativo. Las contribuciones pueden ser código (bash, Next.js / TypeScript, el venv de Python de traducción), pruebas, documentación, diseño o simplemente ideas.",
"p1Rich": "<strong>Por supuesto.</strong> ProxMenux es un proyecto de código abierto y colaborativo. Puedes contribuir con código (Bash, Next.js/TypeScript y herramientas de traducción en Python), pruebas, documentación, diseño o ideas.",
"item1Rich": "Discute ideas en <discusslink>GitHub Discussions</discusslink> antes de abrir una petición de función.",
"item2Rich": "Para PRs, lee primero el <coclink>código de conducta y buenas prácticas</coclink>.",
"item3Rich": "Mira la <contriblink>página de colaboradores</contriblink> para los testers y revisores actuales."
},
"q8": {
"question": "¿ProxMenux modifica archivos críticos del sistema?",
"p1Rich": "<strong>No.</strong> ProxMenux instala:",
"item1Rich": "Dependencias vía apt: <code>dialog</code>, <code>curl</code>, <code>jq</code>, <code>git</code> (y <code>python3</code> + <code>googletrans</code> en la instalación con traducción).",
"p1Rich": "<strong>La instalación de ProxMenux añade los siguientes componentes.</strong>",
"item1Rich": "Dependencias mediante apt: <code>dialog</code>, <code>curl</code>, <code>jq</code> y <code>git</code>. Las traducciones usan catálogos JSON pregenerados; el instalador no añade al host un entorno virtual de traducción.",
"item2Rich": "El árbol de scripts en <code>/usr/local/share/proxmenux/</code>.",
"item3Rich": "El lanzador en <code>/usr/local/bin/menu</code>.",
"item4Rich": "Opcional: el servicio systemd del Monitor en <code>proxmenux-monitor.service</code>.",
"p2Rich": "ProxMenux <em>no</em> toca la configuración del núcleo de Proxmox a menos que se lo pidas explícitamente vía un menú dedicado (p. ej. el flujo de reparación de red edita <code>/etc/network/interfaces</code> — pero solo después de que confirmes y se haga un backup)."
"p2Rich": "ProxMenux <em>no</em> modifica la configuración principal de Proxmox salvo que lo solicites expresamente desde un menú específico. Por ejemplo, la reparación de red edita <code>/etc/network/interfaces</code>, pero solo después de tu confirmación y de hacer un backup."
},
"q9": {
"question": "¿Es seguro usar ProxMenux en producción?",
@@ -83,12 +83,12 @@
},
"q10": {
"question": "¿Cómo desinstalo ProxMenux?",
"p1Rich": "Desde dentro de ProxMenux: <strong>Settings → Desinstalar ProxMenux</strong>. El desinstalador elimina el árbol de scripts, el lanzador y el servicio del Monitor, opcionalmente elimina las dependencias seleccionadas y restaura los backups de <code>/root/.bashrc</code> y <code>/etc/motd</code> tomados en el momento de la instalación.",
"p1Rich": "Desde ProxMenux: <strong>Ajustes → Desinstalar ProxMenux</strong>. El desinstalador elimina el árbol de scripts, el lanzador y el servicio Monitor, permite eliminar dependencias seleccionadas y restaura <code>/root/.bashrc</code> y <code>/etc/motd</code> desde los backups que crea Post-Install, si existen (si no, elimina la línea de ProxMenux del MOTD).",
"p2Rich": "Paso a paso completo: <uninstalllink>Desinstalar ProxMenux</uninstalllink>."
},
"q11": {
"question": "VirusTotal marca la URL de instalación — ¿es seguro?",
"p1Rich": "Una detección 1/95 por motores heurísticos (p. ej. <em>Chong Lua Dao</em>) es un falso positivo conocido. El instalador usa el patrón estándar <code>curl | bash</code> y descarga binarios legítimos (como <code>jq</code> desde su release oficial en GitHub), que los escáneres agresivos marcan basándose en el <em>comportamiento</em> y no en código realmente malicioso.",
"p1Rich": "El resultado de 1/95 notificado en el issue #162, de <em>Chong Lua Dao</em>, fue identificado por el mantenedor como un falso positivo. El instalador se ejecuta con una orden que descarga y ejecuta el script (<code>bash -c \"$(wget -qLO - …)\"</code>) y puede descargar <code>jq</code> desde su versión oficial de GitHub. Este <em>comportamiento</em> puede activar análisis heurísticos; aquel informe histórico no determina la seguridad de futuras descargas.",
"p2Rich": "ProxMenux es 100% código abierto y el script de instalación es revisable línea por línea: <scriptlink>install_proxmenux.sh</scriptlink>. Más contexto en la <issuelink>Issue #162</issuelink>."
}
}
+4 -4
View File
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Acerca de | ProxMenux Documentation",
"title": "Acerca del proyecto | Documentación de ProxMenux",
"description": "Acerca de ProxMenux: objetivos del proyecto, colaboradores, FAQ y código de conducta. Herramienta de gestión basada en menús, de código abierto, para Proxmox VE 8+, construida y mantenida por MacRimi con un pequeño equipo de testers y colaboradores.",
"ogTitle": "Acerca de | ProxMenux Documentation",
"ogTitle": "Acerca del proyecto | Documentación de ProxMenux",
"ogDescription": "Acerca de ProxMenux — herramienta de gestión basada en menús, de código abierto, para Proxmox VE 8+."
},
"header": {
@@ -27,7 +27,7 @@
"icon": "Users",
"href": "/docs/about/contributors",
"title": "Colaboradores",
"description": "Reconocimiento a las personas que hacen posible ProxMenux — testers, revisores y desarrolladores que dan forma a cada release."
"description": "Reconocimiento a las personas que hacen posible ProxMenux: quienes prueban, revisan y desarrollan cada versión."
},
{
"icon": "ScrollText",
@@ -38,7 +38,7 @@
]
},
"involved": {
"heading": "Implicarse",
"heading": "Participa",
"intro": "Tres lugares para participar en el proyecto:",
"cards": [
{
@@ -1,20 +1,20 @@
{
"meta": {
"title": "Crear copias — flujo interactivo de copia | ProxMenux",
"description": "El flujo interactivo de copia en ProxMenux. Dos puntos de entrada (menú TUI de Scripts y UI Web del Monitor), tres destinos, dos modos de perfil, un paso común de staging y un diálogo de confirmación. Documenta la matriz de seis opciones, los perfiles Default y Custom, y qué ve el usuario entre seleccionar una copia y ver el archivo aterrizando en el destino.",
"ogTitle": "ProxMenux Backup — crear copias",
"ogDescription": "El flujo interactivo de copia con tres destinos, dos perfiles y un paso común de staging.",
"twitterTitle": "Crear copias | ProxMenux",
"twitterDescription": "Flujo interactivo de copia con tres destinos y dos modos de perfil."
"title": "Crear backups — flujo interactivo de backup | ProxMenux",
"description": "El flujo interactivo de backup en ProxMenux. Dos puntos de entrada (menú TUI de Scripts y UI Web del Monitor), tres destinos, dos modos de perfil, un paso común de staging y un diálogo de confirmación. Documenta la matriz de seis opciones, los perfiles Default y Custom, y qué ve el usuario entre seleccionar un backup y ver el archivo aterrizando en el destino.",
"ogTitle": "ProxMenux Backup — crear backups",
"ogDescription": "El flujo interactivo de backup con tres destinos, dos perfiles y un paso común de staging.",
"twitterTitle": "Crear backups | ProxMenux",
"twitterDescription": "Flujo interactivo de backup con tres destinos y dos modos de perfil."
},
"header": {
"title": "Crear copias",
"description": "El flujo interactivo de copia: elegir un destino y un perfil, revisar el resumen de confirmación, y ver el archivo aterrizando. Dos puntos de entrada comparten el mismo backend y producen archivos idénticos.",
"title": "Crear backups",
"description": "El flujo interactivo de backup: elegir un destino y un perfil, revisar el resumen de confirmación, y ver el archivo aterrizando. Dos puntos de entrada comparten el mismo backend y producen archivos idénticos.",
"section": "Backup & Restore"
},
"intro": {
"title": "Dos puntos de entrada, funcionalidad idéntica",
"body": "El TUI de Scripts y la UI Web del Monitor exponen <strong>exactamente la misma funcionalidad</strong>. Cada copia — manual o programada — pasa por la misma matriz de elección (tres destinos × dos perfiles) e invoca la misma función backend por celda (<code>_bk_pbs</code>, <code>_bk_borg</code> o <code>_bk_local</code>). Los archivos producidos desde uno u otro punto de entrada son indistinguibles. Cuál usar es una cuestión de preferencia: el TUI es amigable por SSH y admite scripting; el Monitor ofrece click-y-elegir y convive con las vistas de notificaciones y de tail del log."
"body": "El TUI de Scripts y la UI Web del Monitor exponen <strong>exactamente la misma funcionalidad</strong>. Cada backup — manual o programado — pasa por la misma matriz de elección (tres destinos × dos perfiles) e invoca la misma función backend por celda (<code>_bk_pbs</code>, <code>_bk_borg</code> o <code>_bk_local</code>). Los archivos producidos desde uno u otro punto de entrada son indistinguibles. Cuál usar es una cuestión de preferencia: el TUI es amigable por SSH y admite scripting; el Monitor ofrece click-y-elegir y convive con las vistas de notificaciones y de tail del log."
},
"entryPoints": {
"heading": "Los dos puntos de entrada",
@@ -32,11 +32,11 @@
]
},
"modes": {
"heading": "Copias manuales vs programadas",
"body": "Las copias se pueden producir en dos modos: <strong>manuales</strong> (el flujo interactivo que documenta esta página — el usuario elige un destino y un perfil desde un menú y ve el archivo aterrizando) o <strong>programadas</strong> (un trabajo desatendido que se ejecuta en un timer estilo cron y aplica la retención configurada en el trabajo). Ambos modos soportan los mismos tres destinos y los mismos dos perfiles, y ambos están disponibles desde los dos puntos de entrada — el menú TUI de Scripts y la pestaña Backups del Monitor. Los trabajos programados usan las mismas funciones backend que el flujo manual a través de <code>run_scheduled_backup.sh</code>; los archivos producidos son indistinguibles.",
"heading": "Backups manuales vs programados",
"body": "Los backups se pueden producir en dos modos: <strong>manuales</strong> (el flujo interactivo que documenta esta página — el usuario elige un destino y un perfil desde un menú y ve el archivo aterrizando) o <strong>programadas</strong> (un trabajo desatendido que se ejecuta en un timer estilo cron y aplica la retención configurada en el trabajo). Ambos modos soportan los mismos tres destinos y los mismos dos perfiles, y ambos están disponibles desde los dos puntos de entrada — el menú TUI de Scripts y la pestaña Backups del Monitor. Los trabajos programados usan las mismas funciones backend que el flujo manual a través de <code>run_scheduled_backup.sh</code>; los archivos producidos son indistinguibles.",
"seeAlso": "La página de trabajos programados cubre el flujo completo, incluyendo cómo crear un trabajo, adjuntarlo a un timer vzdump de PVE existente, y configurar los valores de retención.",
"monitorAlt": "Pestaña Backups del Monitor de ProxMenux mostrando el diálogo New scheduled backup con los campos de destino, perfil, horario y retención.",
"monitorCaption": "Copia programada — Monitor de ProxMenux. El mismo diálogo estilo asistente que crea una copia manual lleva los campos de horario y retención al final para la ruta desatendida."
"monitorCaption": "Backup programado — Monitor de ProxMenux. El mismo diálogo estilo asistente que crea un backup manual lleva los campos de horario y retención al final para la ruta desatendida."
},
"matrix": {
"heading": "La matriz de seis opciones",
@@ -83,13 +83,13 @@
"profiles": {
"heading": "Perfil Default vs Custom",
"defaultTitle": "Perfil Default",
"defaultBody": "El perfil por defecto es la lista curada de <code>hb_default_profile_paths</code> (documentada en <em>Cómo funciona</em> bajo <em>Categorías de rutas</em>) más cada entrada del fichero de extras persistentes <code>/usr/local/share/proxmenux/backup-extra-paths.txt</code>. El usuario confirma el destino y las opciones de cifrado y la copia continúa sin más selección de rutas.",
"defaultBody": "El perfil por defecto es la lista curada de <code>hb_default_profile_paths</code> (documentada en <em>Cómo funciona</em> bajo <em>Categorías de rutas</em>) más cada entrada del fichero de extras persistentes <code>/usr/local/share/proxmenux/backup-extra-paths.txt</code>. El usuario confirma el destino y las opciones de cifrado y el backup continúa sin más selección de rutas.",
"customTitle": "Perfil Custom",
"customBody": "El perfil Custom abre un checklist mostrando cada ruta del perfil por defecto (sin marcar) y cada extra persistente (premarcado, prefijado con <code>[+]</code>). El usuario marca el conjunto para esa ejecución y puede pulsar <em>Add custom path</em> para añadir una nueva ruta absoluta. Cualquier ruta añadida en línea se persiste en <code>backup-extra-paths.txt</code> para que futuras copias la recojan automáticamente sin volver a añadirla. Quitar la marca a un extra persistente lo desmarca para esa ejecución pero no lo elimina del fichero — la eliminación es una acción <em>Manage custom paths</em> separada, fuera del flujo de copia.",
"customBody": "El perfil Custom abre un checklist mostrando cada ruta del perfil por defecto (sin marcar) y cada extra persistente (premarcado, prefijado con <code>[+]</code>). El usuario marca el conjunto para esa ejecución y puede pulsar <em>Add custom path</em> para añadir una nueva ruta absoluta. Cualquier ruta añadida en línea se persiste en <code>backup-extra-paths.txt</code> para que futuros backups la recojan automáticamente sin volver a añadirla. Quitar la marca a un extra persistente lo desmarca para esa ejecución pero no lo elimina del fichero — la eliminación es una acción <em>Manage custom paths</em> separada, fuera del flujo de backup.",
"customPickerAlt": "Checklist del perfil Custom mostrando las rutas del perfil por defecto (sin marcar) y los extras persistentes (premarcados con prefijo [+]), más botones para añadir una ruta nueva o confirmar la selección.",
"customPickerCaption": "Perfil Custom — el path picker. Las rutas del perfil por defecto aparecen sin marcar; los extras persistentes aparecen premarcados con prefijo [+]. El usuario marca el conjunto para esa ejecución.",
"manageCustomAlt": "Menú Manage custom paths mostrando la lista de extras persistentes y opciones para añadirlos, eliminarlos o editarlos.",
"manageCustomCaption": "Manage custom paths — el punto de entrada donde se añaden o eliminan los extras persistentes. Cada ruta listada aquí se incluye automáticamente en las copias en modo Default sin necesidad de abrir el picker Custom."
"manageCustomCaption": "Manage custom paths — el punto de entrada donde se añaden o eliminan los extras persistentes. Cada ruta listada aquí se incluye automáticamente en los backups en modo Default sin necesidad de abrir el picker Custom."
},
"commonPipeline": {
"heading": "Qué se ejecuta con independencia del destino",
@@ -98,7 +98,7 @@
{
"step": "1",
"name": "Ensamblado del rootfs",
"detail": "Ejecuta <code>rsync -a</code> por cada ruta seleccionada hacia <code>staging_root/rootfs/</code>. La base pmxcfs en <code>/var/lib/pve-cluster/config.db</code> se captura aparte con <code>sqlite3 .backup</code> para obtener un snapshot consistente sin parar el clúster, y los sidecars <code>.db-wal</code> / <code>.db-shm</code> se excluyen del rsync; si <code>sqlite3</code> no está disponible, se deposita un <code>config.db.raw-fallback</code> que la restauración promociona al importar. Excluye subrutas volátiles (historial de bash, cachés, papelera) de <code>/root/</code>. Las rutas ausentes en el origen se registran en <code>metadata/missing_paths.txt</code> sin detener la copia."
"detail": "Ejecuta <code>rsync -a</code> por cada ruta seleccionada hacia <code>staging_root/rootfs/</code>. La base pmxcfs en <code>/var/lib/pve-cluster/config.db</code> se captura aparte con <code>sqlite3 .backup</code> para obtener un snapshot consistente sin parar el clúster, y los sidecars <code>.db-wal</code> / <code>.db-shm</code> se excluyen del rsync; si <code>sqlite3</code> no está disponible, se deposita un <code>config.db.raw-fallback</code> que la restauración promociona al importar. Excluye subrutas volátiles (historial de bash, cachés, papelera) de <code>/root/</code>. Las rutas ausentes en el origen se registran en <code>metadata/missing_paths.txt</code> sin detener el backup."
},
{
"step": "2",
@@ -113,7 +113,7 @@
{
"step": "4",
"name": "Info de la ejecución",
"detail": "<code>metadata/run_info.env</code> registra la identidad de la ejecución de copia — hostname, timestamp, versión del kernel — usada por el chequeo de compatibilidad de la restauración para determinar la dirección cross-kernel."
"detail": "<code>metadata/run_info.env</code> registra la identidad de la ejecución de backup — hostname, timestamp, versión del kernel — usada por el chequeo de compatibilidad de la restauración para determinar la dirección cross-kernel."
},
{
"step": "5",
@@ -150,17 +150,17 @@
"<code>ProxMenux-Monitor.AppImage*</code>, <code>install_proxmenux*.sh</code>"
],
"notInProfileTitle": "Rutas fuera del perfil",
"notInProfileBody": "Todo lo que no esté listado en <code>hb_default_profile_paths</code> y no se haya añadido como ruta custom o extra persistente no forma parte de la copia. Ejemplos notables:",
"notInProfileBody": "Todo lo que no esté listado en <code>hb_default_profile_paths</code> y no se haya añadido como ruta custom o extra persistente no forma parte del backup. Ejemplos notables:",
"notInProfileItems": [
"<strong>Discos de VMs y LXCs</strong> — los gestiona <code>vzdump</code>, no esta funcionalidad. Los ficheros de configuración de los invitados bajo <code>/etc/pve/nodes/*/qemu-server/*.conf</code> y <code>lxc/*.conf</code> sí se capturan (viven bajo <code>/etc/pve</code>) para que la restauración reproduzca el inventario; los discos se re-adjuntan desde una copia existente de vzdump/PBS.",
"<strong>Discos de VMs y LXCs</strong> — los gestiona <code>vzdump</code>, no esta funcionalidad. Los ficheros de configuración de los invitados bajo <code>/etc/pve/nodes/*/qemu-server/*.conf</code> y <code>lxc/*.conf</code> sí se capturan (viven bajo <code>/etc/pve</code>) para que la restauración reproduzca el inventario; los discos se re-adjuntan desde un backup existente de vzdump/PBS.",
"<strong><code>/boot</code> y <code>/boot/efi</code></strong> — los binarios del kernel, el initramfs y la partición ESP UEFI los regenera el propio destino con <code>update-initramfs</code>, <code>update-grub</code> o <code>proxmox-boot-tool refresh</code> tras la restauración. El bootloader nunca se copia verbatim.",
"<strong>Filesystems runtime del kernel y sistema</strong> — <code>/proc</code>, <code>/sys</code>, <code>/dev</code> y <code>/run</code> son pseudo-filesystems que produce el kernel y udev; no se persisten en ningún sitio.",
"<strong>Binarios de paquetes bajo <code>/usr/bin</code>, <code>/usr/lib</code>, <code>/lib</code>, <code>/sbin</code></strong> — los reinstala el APT del destino a partir de <code>packages.manual.list</code>.",
"<strong><code>/var/log/</code>, <code>/var/tmp/</code>, <code>/var/cache/</code></strong> — estado runtime por host, no se restaura.",
"<strong><code>/home/USUARIO</code></strong> — no está en el perfil por defecto. Añadirlo como ruta custom cuando un sistema tenga directorios home de usuario que deban sobrevivir a una restauración."
"<strong><code>/home/USER</code></strong> — no está en el perfil por defecto. Añadirlo como ruta custom cuando un sistema tenga directorios home de usuario que deban sobrevivir a una restauración."
],
"customPathsTitle": "Cómo se tratan las rutas custom",
"customPathsBody": "Una ruta custom añadida en línea en modo Custom o persistida en <code>backup-extra-paths.txt</code> pasa por el mismo pipeline de <code>rsync</code> que las rutas del perfil por defecto. Se aplican las exclusiones globales. Si la ruta custom está bajo <code>/root/</code> o <code>/usr/local/share/proxmenux/</code>, siguen aplicando las exclusiones específicas de arriba. Cada ruta archivada — default o custom — queda registrada en <code>metadata/paths_archived.txt</code>. Las rutas que no existen en el origen se registran en <code>metadata/missing_paths.txt</code> sin detener la copia."
"customPathsBody": "Una ruta custom añadida en línea en modo Custom o persistida en <code>backup-extra-paths.txt</code> pasa por el mismo pipeline de <code>rsync</code> que las rutas del perfil por defecto. Se aplican las exclusiones globales. Si la ruta custom está bajo <code>/root/</code> o <code>/usr/local/share/proxmenux/</code>, siguen aplicando las exclusiones específicas de arriba. Cada ruta archivada — default o custom — queda registrada en <code>metadata/paths_archived.txt</code>. Las rutas que no existen en el origen se registran en <code>metadata/missing_paths.txt</code> sin detener el backup."
},
"archiveStructure": {
"heading": "Estructura del archivo",
@@ -169,7 +169,7 @@
},
"confirmation": {
"heading": "Resumen de confirmación",
"body": "Antes de que el backend escriba nada en el destino, ProxMenux muestra un diálogo resumen con el destino, el backup ID o nombre del archivo, el estado del cifrado y la lista de rutas que se copian. Cancelar aquí aborta la copia limpiamente — el directorio de staging se elimina por el hook <code>trap</code> definido en la función backend y ningún dato parcial llega al destino."
"body": "Antes de que el backend escriba nada en el destino, ProxMenux muestra un diálogo resumen con el destino, el backup ID o nombre del archivo, el estado del cifrado y la lista de rutas que se copian. Cancelar aquí aborta el backup limpiamente — el directorio de staging se elimina por el hook <code>trap</code> definido en la función backend y ningún dato parcial llega al destino."
},
"writing": {
"heading": "Escritura en el destino",
@@ -181,7 +181,7 @@
},
{
"topic": "Sidecar (sólo local)",
"detail": "<code>hb_write_archive_sidecar</code> deposita un <code>*.proxmenux.json</code> junto al archivo local para que el Monitor lo identifique como copia de host de ProxMenux incluso tras movimientos o renombrados."
"detail": "<code>hb_write_archive_sidecar</code> deposita un <code>*.proxmenux.json</code> junto al archivo local para que el Monitor lo identifique como backup de host de ProxMenux incluso tras movimientos o renombrados."
},
{
"topic": "Notificación (complete/fail)",
@@ -190,12 +190,12 @@
]
},
"finishedScreens": {
"heading": "Cómo se ve una copia finalizada",
"heading": "Cómo se ve un backup finalizado",
"intro": "El mismo evento de finalización lo exponen los dos puntos de entrada. El TUI escribe un bloque resumen en el terminal; la pestaña Backups del Monitor muestra la ejecución en la lista de archivos con badges de tamaño, duración y estado.",
"scriptsAlt": "TUI de ProxMenux Scripts mostrando una copia de host finalizada — destino, backup ID, ruta del snapshot, tamaño de datos, duración y estado de cifrado.",
"scriptsCaption": "Copia finalizada — ProxMenux Scripts (TUI). El bloque de finalización imprime el destino, backup ID, nombre del snapshot o archivo resultante, tamaño de datos, duración y estado de cifrado.",
"monitorAlt": "Pestaña Backups del Monitor de ProxMenux mostrando una entrada de copia de host finalizada con tamaño, duración, badge del método y indicador de cifrado.",
"monitorCaption": "Copia finalizada — pestaña Backups del Monitor de ProxMenux. La nueva copia aparece en la lista de archivos con el badge del método del destino, tamaño, duración y — cuando aplica — el indicador de cifrado."
"scriptsAlt": "TUI de ProxMenux Scripts mostrando un backup de host finalizado — destino, backup ID, ruta del snapshot, tamaño de datos, duración y estado de cifrado.",
"scriptsCaption": "Backup finalizado — ProxMenux Scripts (TUI). El bloque de finalización imprime el destino, backup ID, nombre del snapshot o archivo resultante, tamaño de datos, duración y estado de cifrado.",
"monitorAlt": "Pestaña Backups del Monitor de ProxMenux mostrando una entrada de backup de host finalizado con tamaño, duración, badge del método y indicador de cifrado.",
"monitorCaption": "Backup finalizado — pestaña Backups del Monitor de ProxMenux. El nuevo backup aparece en la lista de archivos con el badge del método del destino, tamaño, duración y — cuando aplica — el indicador de cifrado."
},
"whereNext": {
"heading": "A dónde seguir",
@@ -208,7 +208,7 @@
{
"label": "Trabajos programados",
"href": "/docs/backup-restore/scheduled-jobs",
"tail": " — ejecutar la misma copia desatendida en un horario en lugar de interactivamente."
"tail": " — ejecutar el mismo backup desatendido en un horario en lugar de interactivamente."
},
{
"label": "Restauración",
@@ -1,55 +1,102 @@
{
"meta": {
"title": "Restauración cross-kernel — detección de dirección, filtro de subconjunto seguro, hidratación | ProxMenux",
"description": "Cómo restaura ProxMenux una copia de host sobre un destino con un kernel de versión mayor distinta. Documenta cómo se detecta la dirección del salto, el filtro de subconjunto seguro que salta rutas críticas del arranque cuando el destino corre un kernel más reciente que la copia, y la hidratación independiente del kernel de cuatro fases que reaplica la configuración del usuario como IOMMU, IDs VFIO y tokens custom del cmdline sin copiar verbatim los ficheros ligados al kernel.",
"description": "Cómo restaura ProxMenux un backup de host sobre un destino con un kernel de versión mayor distinta. Documenta cómo se detecta la dirección del salto, el filtro de subconjunto seguro que salta rutas críticas del arranque cuando el destino corre un kernel más reciente que el backup, y la hidratación independiente del kernel de cuatro fases que reaplica la configuración del usuario como IOMMU, IDs VFIO y tokens custom del cmdline sin copiar verbatim los ficheros ligados al kernel.",
"ogTitle": "ProxMenux Backup — restauración cross-kernel e hidratación",
"ogDescription": "Restauración cross-kernel direccional con filtro de subconjunto seguro e hidratación independiente del kernel.",
"twitterTitle": "Restauración cross-kernel | ProxMenux",
"twitterDescription": "Cómo maneja ProxMenux una restauración cuando el kernel del destino difiere del de la copia."
"twitterDescription": "Cómo maneja ProxMenux una restauración cuando el kernel del destino difiere del del backup."
},
"header": {
"title": "Restauración cross-kernel",
"description": "Cómo maneja ProxMenux una restauración cuando el kernel del host de destino es distinto al kernel que había en el momento de la copia — especialmente cuando el destino ejecuta un kernel más reciente. Documenta cómo se detecta la diferencia, cómo se filtran las rutas críticas del arranque que podrían romper el destino, y cómo se reaplica la configuración propia del usuario sin copiar verbatim los ficheros ligados al kernel.",
"description": "Cómo maneja ProxMenux una restauración cuando el kernel del host de destino es distinto al kernel que había en el momento del backup — especialmente cuando el destino ejecuta un kernel más reciente. Documenta cómo se detecta la diferencia, cómo se filtran las rutas críticas del arranque que podrían romper el destino, y cómo se reaplica la configuración propia del usuario sin copiar verbatim los ficheros ligados al kernel.",
"section": "Backup & Restore"
},
"intro": {
"title": "Cada salto de kernel se maneja de forma distinta",
"body": "Cuando la restauración detecta que la copia y el destino tienen versiones mayores distintas de kernel, el flujo se ramifica en función de la dirección del salto — si la copia es más antigua o más reciente que el destino — porque los dos casos tienen modos de fallo opuestos. Las copias más recientes que el destino se restauran limpiamente tal cual (verificado empíricamente en múltiples pruebas de banco). Las copias más antiguas que el destino necesitan un filtro para evitar romper el arranque del destino con configuración escrita para un kernel que desde entonces ha cambiado."
"body": "El kernel de un host Proxmox se identifica con una cadena de versión como <code>6.17.13-2-pve</code>. Los dos primeros números (<strong>6.17</strong> en este ejemplo) definen la versión mayor: cuando cambian, algunos ficheros de configuración escritos para el kernel anterior pueden no ser válidos en el nuevo. Cuando la restauración detecta que el backup y el destino tienen versiones mayores de kernel distintas, el flujo se ramifica según la dirección del salto —si el backup es más antiguo o más reciente que el destino— porque los dos casos tienen modos de fallo opuestos. Los backups más recientes que el destino se restauran limpiamente tal cual (verificado en banco de pruebas con varios saltos de kernel). Los backups más antiguos que el destino necesitan un filtro para no romper el arranque del destino con configuración escrita para un kernel que desde entonces ha cambiado."
},
"directionCheck": {
"heading": "La comprobación de dirección",
"intro": "Durante la comprobación de compatibilidad, <code>hb_compat_check</code> compara el kernel registrado en el manifiesto de la copia contra el kernel actual del destino (<code>uname -r</code>) y clasifica la restauración en uno de tres casos, guardado en la variable interna <code>HB_COMPAT_KERNEL_DIRECTION</code>:",
"intro": "Durante la comprobación de compatibilidad, <code>hb_compat_check</code> compara el kernel registrado en el manifiesto del backup contra el kernel actual del destino (<code>uname -r</code>) y clasifica la restauración en uno de tres casos, guardado en la variable interna <code>HB_COMPAT_KERNEL_DIRECTION</code>:",
"rows": [
{ "direction": "same", "condition": "La versión mayor del kernel coincide entre la copia y el destino.", "behavior": "El flujo de restauración completo corre sin cambios. Sin filtro adicional, sin hidratación, sin aviso especial en la interfaz." },
{ "direction": "bk_newer", "condition": "El kernel de la copia es más RECIENTE que el del destino (por ejemplo: la copia se hizo con kernel 7.0 y el destino corre kernel 6.17).", "behavior": "El flujo de restauración completo corre sin cambios, exactamente igual que en <code>same</code>. No se aplica ningún filtro. Verificado empíricamente: los controladores se reinstalan contra el kernel del destino, la configuración IOMMU se aplica limpia, las VMs con passthrough GPU arrancan sin problemas." },
{ "direction": "bk_older", "condition": "El kernel de la copia es más ANTIGUO que el del destino (por ejemplo: la copia se hizo con kernel 6.17 y el destino corre kernel 7.0).", "behavior": "Se activan el filtro de subconjunto seguro y la hidratación de cuatro fases descritos más abajo. La restauración procede — el destino reproduce el origen, pero los ficheros críticos del arranque no se copian verbatim." }
{
"direction": "same",
"condition": "La versión mayor del kernel coincide entre el backup y el destino.",
"behavior": "El flujo de restauración completo corre sin cambios. Sin filtro adicional, sin hidratación, sin aviso especial en la interfaz."
},
{
"direction": "bk_newer",
"condition": "El kernel del backup es más RECIENTE que el del destino (por ejemplo: el backup se hizo con kernel 7.0 y el destino corre kernel 6.17).",
"behavior": "El flujo de restauración completo corre sin cambios, exactamente igual que en <code>same</code>. No se aplica ningún filtro. Verificado empíricamente: los controladores se reinstalan contra el kernel del destino, la configuración IOMMU se aplica limpia, las VMs con passthrough GPU arrancan sin problemas."
},
{
"direction": "bk_older",
"condition": "El kernel del backup es más ANTIGUO que el del destino (por ejemplo: el backup se hizo con kernel 6.17 y el destino corre kernel 7.0).",
"behavior": "Se activan el filtro de subconjunto seguro y la hidratación de cuatro fases descritos más abajo. La restauración procede — el destino reproduce el origen, pero los ficheros críticos del arranque no se copian verbatim."
}
]
},
"whyBkNewerIsSafe": {
"heading": "Por qué una copia con kernel más reciente que el destino se restaura sin cambios",
"body": "Cuando la restauración corre contra un destino con un kernel <em>más antiguo</em> que el registrado en la copia, todos los mecanismos de los que depende la restauración son independientes de la versión del kernel. Los instaladores de controladores de GPU y otros dispositivos PCI detectan el kernel en ejecución con <code>uname -r</code> y compilan DKMS contra lo que tenga el destino. La instalación de paquetes por APT trae binarios construidos para la distribución del destino. Los tokens IOMMU del cmdline como <code>intel_iommu=on</code> son estables entre versiones mayores de kernel. La copia lleva rutas escritas bajo un kernel más reciente, pero esas rutas (blacklists de módulos, defaults de GRUB, configuración de initramfs) siguen siendo sintaxis válida en el más antiguo — los kernels ignoran los tokens que no reconocen en lugar de fallar. Este caso es equivalente en la práctica a una restauración con el mismo kernel, y ProxMenux lo trata como tal."
"heading": "Por qué un backup con kernel más reciente que el destino se restaura sin cambios",
"body": "Cuando la restauración corre contra un destino con un kernel <em>más antiguo</em> que el registrado en el backup, todos los mecanismos de los que depende la restauración son independientes de la versión del kernel. Los instaladores de controladores de GPU y otros dispositivos PCI detectan el kernel en ejecución con <code>uname -r</code> y compilan DKMS contra lo que tenga el destino. La instalación de paquetes por APT trae binarios construidos para la distribución del destino. Los tokens IOMMU del cmdline como <code>intel_iommu=on</code> son estables entre versiones mayores de kernel. El backup lleva rutas escritas bajo un kernel más reciente, pero esas rutas (blacklists de módulos, defaults de GRUB, configuración de initramfs) siguen siendo sintaxis válida en el más antiguo — los kernels ignoran los tokens que no reconocen en lugar de fallar. Este caso es equivalente en la práctica a una restauración con el mismo kernel, y ProxMenux lo trata como tal."
},
"safeSubsetFilter": {
"heading": "El filtro de subconjunto seguro (sólo cuando el kernel del destino es más reciente)",
"intro": "Cuando el kernel del destino es más reciente que el de la copia, la comprobación de compatibilidad añade 16 rutas críticas del arranque de <code>hb_unsafe_paths_cross_version</code> a <code>RS_SKIP_PATHS</code>. Estas rutas se excluyen de la restauración porque escribir una versión suya de un kernel más antiguo sobre un destino que corre uno más reciente ha causado kernel panics en pruebas de banco. Las rutas cubren cuatro categorías:",
"intro": "Cuando el kernel del destino es más reciente que el del backup, la comprobación de compatibilidad añade 16 rutas críticas del arranque de <code>hb_unsafe_paths_cross_version</code> a <code>RS_SKIP_PATHS</code>. Estas rutas se excluyen de la restauración porque escribir una versión suya de un kernel más antiguo sobre un destino que corre uno más reciente ha causado kernel panics en pruebas de banco. Las rutas cubren cinco categorías:",
"categoryRows": [
{ "category": "Bootloader", "paths": "<code>/etc/default/grub</code>, <code>/etc/kernel</code>", "reason": "Defaults de GRUB atados al orden previo de kernels, y estado de proxmox-boot-tool (cmdline, UUIDs de ESP, hooks) que referencia rutas e identificadores de la instalación más antigua." },
{ "category": "Módulos del kernel y artefactos de arranque", "paths": "<code>/etc/modules-load.d</code>, <code>/etc/modprobe.d</code>, <code>/etc/initramfs-tools</code>", "reason": "Listas de autocarga que pueden referenciar módulos renombrados entre majors del kernel, opciones de módulo que pueden no aplicar, hooks de initramfs escritos para el kernel más antiguo." },
{ "category": "Stack de almacenamiento e identidad de filesystem", "paths": "<code>/etc/fstab</code>, <code>/etc/multipath</code>, <code>/etc/iscsi</code>, <code>/etc/udev/rules.d</code>, <code>/etc/zfs</code>", "reason": "UUIDs que pueden no existir en esta instalación, drivers de multipath que cambian entre kernels, parámetros iSCSI que evolucionan, reglas udev que pueden atarse a subsistemas inexistentes, estado ZFS (<code>zpool.cache</code> + <code>hostid</code>) que puede bloquear el pool como si no perteneciera al host." },
{ "category": "Fuentes APT", "paths": "<code>/etc/apt</code>", "reason": "Las suites de fuentes APT pueden disparar un downgrade de paquetes críticos en la próxima actualización." },
{ "category": "systemd", "paths": "<code>/etc/systemd/system</code>, <code>/etc/systemd/journald.conf</code>, <code>/etc/systemd/logind.conf</code>, <code>/etc/systemd/system.conf</code>, <code>/etc/systemd/user.conf</code>", "reason": "Overrides de unit y .wants ligados al major de systemd más antiguo; claves de configuración que pueden no parsearse en un systemd más reciente." }
{
"category": "Bootloader",
"paths": "<code>/etc/default/grub</code>, <code>/etc/kernel</code>",
"reason": "Defaults de GRUB atados al orden previo de kernels, y estado de proxmox-boot-tool (cmdline, UUIDs de ESP, hooks) que referencia rutas e identificadores de la instalación más antigua."
},
{
"category": "Módulos del kernel y artefactos de arranque",
"paths": "<code>/etc/modules-load.d</code>, <code>/etc/modprobe.d</code>, <code>/etc/initramfs-tools</code>",
"reason": "Listas de autocarga que pueden referenciar módulos renombrados entre majors del kernel, opciones de módulo que pueden no aplicar, hooks de initramfs escritos para el kernel más antiguo."
},
{
"category": "Stack de almacenamiento e identidad de filesystem",
"paths": "<code>/etc/fstab</code>, <code>/etc/multipath</code>, <code>/etc/iscsi</code>, <code>/etc/udev/rules.d</code>, <code>/etc/zfs</code>",
"reason": "UUIDs que pueden no existir en esta instalación, drivers de multipath que cambian entre kernels, parámetros iSCSI que evolucionan, reglas udev que pueden atarse a subsistemas inexistentes, estado ZFS (<code>zpool.cache</code> + <code>hostid</code>) que puede bloquear el pool como si no perteneciera al host."
},
{
"category": "Fuentes APT",
"paths": "<code>/etc/apt</code>",
"reason": "Las suites de fuentes APT pueden disparar un downgrade de paquetes críticos en la próxima actualización."
},
{
"category": "systemd",
"paths": "<code>/etc/systemd/system</code>, <code>/etc/systemd/journald.conf</code>, <code>/etc/systemd/logind.conf</code>, <code>/etc/systemd/system.conf</code>, <code>/etc/systemd/user.conf</code>",
"reason": "Overrides de unit y .wants ligados al major de systemd más antiguo; claves de configuración que pueden no parsearse en un systemd más reciente."
}
],
"outroBody": "El filtro corre ANTES del diálogo de confirmación para que el usuario vea la lista exacta de rutas que se saltarán, categorizadas por motivo. La restauración procede igualmente — todo lo demás (VMs, LXCs, red, /etc/pve, usuarios, cron, estado de ProxMenux, paquetes, drivers, /root) se restaura con normalidad."
"outroBody": "El filtro corre ANTES del diálogo de confirmación para que el usuario vea la lista exacta de rutas que se saltarán, categorizadas por motivo. La restauración procede igualmente — todo lo demás (configuración de VM/LXC, red, /etc/pve, usuarios, cron, estado de ProxMenux, paquetes, drivers, /root) se restaura con normalidad."
},
"hydration": {
"heading": "Hidratación independiente del kernel",
"intro": "El filtro de subconjunto seguro por sí solo dejaría al destino sin la configuración que el usuario había puesto dentro de esos ficheros críticos del arranque: cmdline IOMMU para passthrough GPU, IDs de dispositivo VFIO, <code>GRUB_TIMEOUT</code> custom, blacklists de nvidia. La pasada de hidratación reaplica esas piezas de forma independiente de la versión del kernel. Corren cuatro fases cuando el kernel del destino es más reciente que el de la copia, cada una aditiva (nunca sobrescribe un valor que el destino ya lleva) e idempotente (correr dos veces es un no-op).",
"intro": "El filtro omite archivos críticos del arranque; la hidratación reaplica ajustes seleccionados: cmdline IOMMU, IDs VFIO, <code>GRUB_TIMEOUT</code> personalizado y listas de bloqueo nvidia. Se ejecuta con un kernel destino más reciente. La fusión de cmdline conserva las claves del destino y añade módulos que faltan. Los valores GRUB y archivos permitidos pueden reemplazar contenido distinto del destino. Repetir la misma entrada es idempotente.",
"phaseRows": [
{ "phase": "1a — Ruta GRUB", "detail": "Para hosts que usan GRUB (instalaciones ext4/lvm). <code>_rs_hyd_grub</code> mergea cada token de <code>manifest.kernel_params.cmdline_extra</code> de la copia en el <code>GRUB_CMDLINE_LINUX_DEFAULT</code> vivo del destino, saltando los tokens cuya clave el destino ya lleva. Después mergea claves whitelisted <code>GRUB_*</code> (<code>GRUB_TIMEOUT</code>, <code>GRUB_TIMEOUT_STYLE</code>, <code>GRUB_DEFAULT</code>, <code>GRUB_TERMINAL</code>, <code>GRUB_DISABLE_OS_PROBER</code>, <code>GRUB_SERIAL_COMMAND</code>, <code>GRUB_GFXMODE</code>, <code>GRUB_GFXPAYLOAD_LINUX</code>) del <code>/etc/default/grub</code> de la copia si difieren de las del destino." },
{ "phase": "1b — Ruta systemd-boot / ZFS", "detail": "Para hosts que usan systemd-boot (típicamente ZFS-on-root). <code>_rs_hyd_kernel_cmdline</code> mergea los tokens del usuario de <code>cmdline_extra</code> en el <code>/etc/kernel/cmdline</code> del destino, manteniendo intacto el boilerplate propio del destino: <code>root=</code>, <code>boot=</code> y <code>rootflags=</code>." },
{ "phase": "2 — Merge en /etc/modules", "detail": "<code>_rs_hyd_modules</code> añade los módulos de <code>manifest.kernel_params.modules_loaded_at_boot</code> que estén en la whitelist (<code>vfio</code>, <code>vfio_pci</code>, <code>vfio_iommu_type1</code>, <code>vfio_virqfd</code>, <code>kvm</code>, <code>kvm_intel</code>, <code>kvm_amd</code>, <code>nvidia</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code>, <code>nvidia_uvm</code>, <code>i915</code>, <code>xe</code>) Y que aún no estén presentes en <code>/etc/modules</code> del destino." },
{ "phase": "3 — Copia de ficheros whitelisted", "detail": "<code>_rs_hyd_files</code> copia ficheros escritos por el usuario del staging rootfs al destino en vivo cuando el contenido difiere. La whitelist cubre ficheros VFIO/nvidia/blacklist bajo <code>/etc/modprobe.d</code>, <code>/etc/modules-load.d</code>, y la regla VFIO bind + reglas udev de nvidia de ProxMenux bajo <code>/etc/udev/rules.d</code>. Los ficheros propiedad de la distro (<code>pve-blacklist.conf</code>, <code>mdadm.conf</code>, <code>nvme.conf</code>) se excluyen intencionadamente — sus contenidos evolucionan entre releases." },
{ "phase": "4 — Forzar reflows post-arranque", "detail": "Las cuatro fases escriben directamente en el destino vivo FUERA del pipeline normal de restauración. Para que los tokens/módulos/ficheros mergeados tengan efecto en el siguiente arranque, <code>HB_HYDRATION_APPLIED=1</code> se propaga a través de <code>plan.env</code> a <code>apply_pending_restore.sh</code>, que fuerza <code>NEEDS_INITRAMFS=1</code> y <code>NEEDS_GRUB=1</code> con independencia de lo que hubiera en la lista de apply. El dispatcher post-arranque después regenera el initramfs y refresca el bootloader." }
{
"phase": "1a — Ruta GRUB",
"detail": "Para hosts que usan GRUB (instalaciones ext4/lvm). <code>_rs_hyd_grub</code> mergea cada token de <code>manifest.kernel_params.cmdline_extra</code> del backup en el <code>GRUB_CMDLINE_LINUX_DEFAULT</code> vivo del destino, saltando los tokens cuya clave el destino ya lleva. Después mergea claves whitelisted <code>GRUB_*</code> (<code>GRUB_TIMEOUT</code>, <code>GRUB_TIMEOUT_STYLE</code>, <code>GRUB_DEFAULT</code>, <code>GRUB_TERMINAL</code>, <code>GRUB_DISABLE_OS_PROBER</code>, <code>GRUB_SERIAL_COMMAND</code>, <code>GRUB_GFXMODE</code>, <code>GRUB_GFXPAYLOAD_LINUX</code>) del <code>/etc/default/grub</code> del backup si difieren de las del destino."
},
{
"phase": "1b — Ruta systemd-boot / ZFS",
"detail": "Para hosts que usan systemd-boot (típicamente ZFS-on-root). <code>_rs_hyd_kernel_cmdline</code> mergea los tokens del usuario de <code>cmdline_extra</code> en el <code>/etc/kernel/cmdline</code> del destino, manteniendo intacto el boilerplate propio del destino: <code>root=</code>, <code>boot=</code> y <code>rootflags=</code>."
},
{
"phase": "2 — Merge en /etc/modules",
"detail": "<code>_rs_hyd_modules</code> añade los módulos de <code>manifest.kernel_params.modules_loaded_at_boot</code> que estén en la whitelist (<code>vfio</code>, <code>vfio_pci</code>, <code>vfio_iommu_type1</code>, <code>vfio_virqfd</code>, <code>kvm</code>, <code>kvm_intel</code>, <code>kvm_amd</code>, <code>nvidia</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code>, <code>nvidia_uvm</code>, <code>i915</code>, <code>xe</code>) Y que aún no estén presentes en <code>/etc/modules</code> del destino."
},
{
"phase": "3 — Copia de ficheros whitelisted",
"detail": "<code>_rs_hyd_files</code> copia ficheros escritos por el usuario del staging rootfs al destino en vivo cuando el contenido difiere. La whitelist cubre ficheros VFIO/nvidia/blacklist bajo <code>/etc/modprobe.d</code>, <code>/etc/modules-load.d</code>, y la regla VFIO bind + reglas udev de nvidia de ProxMenux bajo <code>/etc/udev/rules.d</code>. Los ficheros propiedad de la distro (<code>pve-blacklist.conf</code>, <code>mdadm.conf</code>, <code>nvme.conf</code>) se excluyen intencionadamente — sus contenidos evolucionan entre releases."
},
{
"phase": "4 — Forzar reflows post-arranque",
"detail": "Las cuatro fases escriben directamente en el destino vivo FUERA del pipeline normal de restauración. Para que los tokens/módulos/ficheros mergeados tengan efecto en el siguiente arranque, <code>HB_HYDRATION_APPLIED=1</code> se propaga a través de <code>plan.env</code> a <code>apply_pending_restore.sh</code>, que fuerza <code>NEEDS_INITRAMFS=1</code> y <code>NEEDS_GRUB=1</code> con independencia de lo que hubiera en la lista de apply. El dispatcher post-arranque después regenera el initramfs y refresca el bootloader."
}
]
},
"planCommit": {
@@ -57,7 +104,7 @@
"body": "La hidratación corre en dos modos. Antes del diálogo de confirmación, ProxMenux ejecuta <code>_rs_apply_bk_older_hydration</code> en modo <code>plan</code>: calcula exactamente lo que se mergearía, rellena <code>RS_HYDRATION_SUMMARY</code> con un bloque verde que lista cada acción, y retorna sin escribir nada. El diálogo de confirmación muestra ese bloque verde junto a la lista ámbar de rutas saltadas por el subconjunto seguro, para que el usuario vea POR ADELANTADO qué se reaplicará automáticamente. Tras la confirmación del usuario, ProxMenux vuelve a ejecutar el mismo helper en modo <code>commit</code> — mismas fases, misma lógica, pero esta vez cada fase escribe en el destino vivo. Cancelar el diálogo de confirmación deja el destino intacto."
},
"flowDiagram": {
"heading": "El flujo cuando el kernel del destino es más reciente que el de la copia",
"heading": "El flujo cuando el kernel del destino es más reciente que el del backup",
"intro": "Los pasos específicos que se añaden cuando el kernel del destino es más reciente se insertan dentro del flujo normal de restauración. Todo lo demás — hot apply, prepare pending, instalación de paquetes, dispatcher post-arranque — corre idéntico a una restauración con el mismo kernel.",
"diagram": " ┌────────────────────────────────────────────────────────────┐\n │ hb_compat_check │\n │ HB_COMPAT_KERNEL_DIRECTION = bk_older │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ Añade 16 rutas críticas del arranque a RS_SKIP_PATHS │\n │ /etc/default/grub, /etc/kernel, /etc/modules-load.d, ... │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ _rs_apply_bk_older_hydration \"plan\" │\n │ Calcula qué se mergearía │\n │ Rellena RS_HYDRATION_SUMMARY (bloque verde) │\n │ Sin escrituras │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ Diálogo de confirmación │\n │ Ámbar: rutas saltadas por el filtro de subconjunto seguro │\n │ Verde: tokens/ficheros reaplicados por la hidratación │\n │ El usuario acepta o cancela │\n └───────────────────────────┬────────────────────────────────┘\n │ (aceptado)\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ _rs_apply_bk_older_hydration \"commit\" │\n │ Fase 1a/1b: mergea tokens del cmdline + claves GRUB │\n │ Fase 2: añade módulos a /etc/modules │\n │ Fase 3: copia ficheros whitelisted vfio/nvidia │\n │ Fija HB_HYDRATION_APPLIED=1 │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ El resto de la restauración corre normalmente │\n │ _rs_apply hot (salta RS_SKIP_PATHS) │\n │ _rs_prepare_pending_restore (escribe plan.env con │\n │ HB_HYDRATION_APPLIED=1) │\n │ packages.manual.list install │\n │ Reinicio │\n │ apply_pending_restore.sh (fuerza NEEDS_INITRAMFS=1, │\n │ NEEDS_GRUB=1 por el flag de hidratación) │\n │ apply_cluster_postboot.sh │\n │ update-initramfs -u -k all │\n │ update-grub / proxmox-boot-tool refresh │\n │ component --auto-reinstall │\n └────────────────────────────────────────────────────────────┘"
},
@@ -65,30 +112,59 @@
"heading": "Ejemplos concretos",
"intro": "La pasada de hidratación no es abstracta — produce resultados observables y correctos en escenarios habituales. Dos ejemplos que la hidratación resuelve automáticamente:",
"rows": [
{ "scenario": "GPU passthrough (VFIO)", "detail": "El origen tenía <code>intel_iommu=on iommu=pt</code> en el cmdline, <code>vfio</code>/<code>vfio_pci</code>/<code>vfio_iommu_type1</code> en <code>/etc/modules</code>, un <code>/etc/modprobe.d/vfio.conf</code> con <code>options vfio-pci ids=10de:2216</code>, y un <code>/etc/modprobe.d/blacklist-nvidia.conf</code>. La hidratación mergea los tokens del cmdline en el GRUB o kernel cmdline del destino, añade los módulos vfio a <code>/etc/modules</code>, y copia los dos ficheros modprobe escritos por el usuario. En el siguiente arranque, IOMMU está activo, los módulos VFIO cargan, la GPU queda ligada a vfio-pci y la VM arranca con el passthrough funcionando." },
{ "scenario": "Defaults custom de GRUB", "detail": "El origen tenía <code>GRUB_TIMEOUT=1</code> y <code>GRUB_DISABLE_OS_PROBER=true</code>. La hidratación lee ambas claves del <code>/etc/default/grub</code> de la copia, ve que difieren de los defaults de la instalación fresca, y reescribe esas dos líneas en el fichero del destino (dejando todo lo demás, incluido <code>GRUB_DISTRIBUTOR</code>, intacto)." }
{
"scenario": "GPU passthrough (VFIO)",
"detail": "El origen tenía <code>intel_iommu=on iommu=pt</code> en el cmdline, <code>vfio</code>/<code>vfio_pci</code>/<code>vfio_iommu_type1</code> en <code>/etc/modules</code>, un <code>/etc/modprobe.d/vfio.conf</code> con <code>options vfio-pci ids=10de:2216</code>, y un <code>/etc/modprobe.d/blacklist-nvidia.conf</code>. La hidratación mergea los tokens del cmdline en el GRUB o kernel cmdline del destino, añade los módulos vfio a <code>/etc/modules</code>, y copia los dos ficheros modprobe escritos por el usuario. En el siguiente arranque, IOMMU está activo, los módulos VFIO cargan, la GPU queda ligada a vfio-pci y la VM arranca con el passthrough funcionando."
},
{
"scenario": "Defaults custom de GRUB",
"detail": "El origen tenía <code>GRUB_TIMEOUT=1</code> y <code>GRUB_DISABLE_OS_PROBER=true</code>. La hidratación lee ambas claves del <code>/etc/default/grub</code> del backup, ve que difieren de los defaults de la instalación fresca, y reescribe esas dos líneas en el fichero del destino (dejando todo lo demás, incluido <code>GRUB_DISTRIBUTOR</code>, intacto)."
}
]
},
"callout": {
"warningTitle": "Qué no reaplica la hidratación cuando el kernel del destino es más reciente",
"warningBody": "La hidratación reaplica sólo la configuración que ProxMenux sabe que es segura entre versiones del kernel: tokens IOMMU, IDs VFIO, claves whitelisted de GRUB y módulos de una lista fija (<code>vfio*</code>, <code>nvidia*</code>, <code>i915</code>, <code>xe</code>, <code>kvm*</code>). Todo lo que quede fuera de ese conjunto — hooks custom de initramfs bajo <code>/etc/initramfs-tools/hooks/</code>, ficheros no whitelisted bajo <code>/etc/modprobe.d/</code>, overrides de unit de systemd escritos por el usuario — permanece excluido. El motivo es concreto: esos ficheros pueden invocar interfaces internas del kernel (APIs de módulos, layout de <code>/sys</code>, hooks de <code>udev</code>) que cambian entre versiones mayores, y aplicarlos verbatim sobre el kernel más reciente puede impedir que el destino arranque. Cuando se necesita reproducción exacta de la cadena de arranque, la restauración debe correr sobre un host con la misma versión mayor de kernel que la copia."
"warningBody": "La hidratación reaplica sólo la configuración que ProxMenux sabe que es segura entre versiones del kernel: tokens IOMMU, IDs VFIO, claves whitelisted de GRUB y módulos de una lista fija (<code>vfio*</code>, <code>nvidia*</code>, <code>i915</code>, <code>xe</code>, <code>kvm*</code>). Todo lo que quede fuera de ese conjunto — hooks custom de initramfs bajo <code>/etc/initramfs-tools/hooks/</code>, ficheros no whitelisted bajo <code>/etc/modprobe.d/</code>, overrides de unit de systemd escritos por el usuario — permanece excluido. El motivo es concreto: esos ficheros pueden invocar interfaces internas del kernel (APIs de módulos, layout de <code>/sys</code>, hooks de <code>udev</code>) que cambian entre versiones mayores, y aplicarlos verbatim sobre el kernel más reciente puede impedir que el destino arranque. Cuando se necesita reproducción exacta de la cadena de arranque, la restauración debe correr sobre un host con la misma versión mayor de kernel que el backup."
},
"codeReference": {
"heading": "Dónde viven los mecanismos",
"intro": "Para desarrolladores que quieran trazar o extender el comportamiento cross-kernel:",
"rows": [
{ "component": "Detección de dirección", "location": "<code>hb_compat_check</code> en <code>lib_host_backup_common.sh</code>. Fija <code>HB_COMPAT_KERNEL_DIRECTION</code>." },
{ "component": "Lista de rutas del subconjunto seguro", "location": "<code>hb_unsafe_paths_cross_version</code> en <code>lib_host_backup_common.sh</code>. Emite líneas <code>path\\tmotivo</code> usadas tanto por el filtro CLI como por el endpoint Web <code>/api/host-backups/restore/prepare</code>." },
{ "component": "Fases de hidratación", "location": "<code>_rs_hyd_grub</code>, <code>_rs_hyd_kernel_cmdline</code>, <code>_rs_hyd_modules</code>, <code>_rs_hyd_files</code> en <code>backup_host.sh</code>. Orquestados por <code>_rs_apply_bk_older_hydration</code>." },
{ "component": "Forzado de reflow post-arranque", "location": "<code>apply_pending_restore.sh</code> lee <code>HB_HYDRATION_APPLIED</code> de <code>plan.env</code> y fuerza <code>NEEDS_INITRAMFS=1</code>/<code>NEEDS_GRUB=1</code>." },
{ "component": "Preview Web", "location": "<code>/api/host-backups/restore/prepare</code> en <code>flask_server.py</code>. Fuentea la librería helper, ejecuta <code>_rs_apply_bk_older_hydration</code> en modo plan, devuelve las acciones al modal Web." }
{
"component": "Detección de dirección",
"location": "<code>hb_compat_check</code> en <code>lib_host_backup_common.sh</code>. Fija <code>HB_COMPAT_KERNEL_DIRECTION</code>."
},
{
"component": "Lista de rutas del subconjunto seguro",
"location": "<code>hb_unsafe_paths_cross_version</code> en <code>lib_host_backup_common.sh</code>. Emite líneas <code>path\\treason</code> usadas tanto por el filtro CLI como por el endpoint Web <code>/api/host-backups/restore/prepare</code>."
},
{
"component": "Fases de hidratación",
"location": "<code>_rs_hyd_grub</code>, <code>_rs_hyd_kernel_cmdline</code>, <code>_rs_hyd_modules</code>, <code>_rs_hyd_files</code> en <code>backup_host.sh</code>. Orquestados por <code>_rs_apply_bk_older_hydration</code>."
},
{
"component": "Forzado de reflow post-arranque",
"location": "<code>apply_pending_restore.sh</code> lee <code>HB_HYDRATION_APPLIED</code> de <code>plan.env</code> y fuerza <code>NEEDS_INITRAMFS=1</code>/<code>NEEDS_GRUB=1</code>."
},
{
"component": "Preview Web",
"location": "<code>/api/host-backups/restore/prepare</code> en <code>flask_server.py</code>. Fuentea la librería helper, ejecuta <code>_rs_apply_bk_older_hydration</code> en modo plan, devuelve las acciones al modal Web."
}
]
},
"whereNext": {
"heading": "A dónde seguir",
"items": [
{ "label": "Restaurar", "href": "/docs/backup-restore/restoring", "tail": " — el pipeline completo de restauración en el que se enchufan los mecanismos de esta página." },
{ "label": "Cómo funciona", "href": "/docs/backup-restore/how-it-works", "tail": " — el manifiesto y los colectores que producen el bloque <code>kernel_params</code> del que lee la hidratación." }
{
"label": "Restaurar",
"href": "/docs/backup-restore/restoring",
"tail": " — el pipeline completo de restauración en el que se enchufan los mecanismos de esta página."
},
{
"label": "Cómo funciona",
"href": "/docs/backup-restore/how-it-works",
"tail": " — el manifiesto y los colectores que producen el bloque <code>kernel_params</code> del que lee la hidratación."
}
]
}
}
@@ -1,28 +1,28 @@
{
"meta": {
"title": "Destino Borg — tipos de repositorio, autenticación SSH, cifrado | ProxMenux",
"description": "El destino Borg escribe las copias de host de ProxMenux en un repositorio Borg — local, en un disco externo montado, o en un servidor remoto accedido por SSH. Cubre la cadena de resolución del binario borg, las cuatro estrategias de clave SSH, el cifrado repokey, la configuración de destinos guardados y la retención por trabajo programado.",
"description": "El destino Borg escribe los backups de host de ProxMenux en un repositorio Borg — local, en un disco externo montado, o en un servidor remoto accedido por SSH. Cubre la cadena de resolución del binario borg, las cuatro estrategias de clave SSH, el cifrado repokey, la configuración de destinos guardados y la retención por trabajo programado.",
"ogTitle": "ProxMenux Backup — destino Borg",
"ogDescription": "Cómo escribe ProxMenux las copias de host en repositorios Borg, con estrategias de autenticación SSH y cifrado repokey.",
"twitterTitle": "Destino Borg de copia | ProxMenux",
"twitterDescription": "Repositorios Borg local, USB y servidos por SSH para copias del host."
"ogDescription": "Cómo escribe ProxMenux los backups de host en repositorios Borg, con estrategias de autenticación SSH y cifrado repokey.",
"twitterTitle": "Destino Borg de backup | ProxMenux",
"twitterDescription": "Repositorios Borg local, USB y servidos por SSH para backups del host."
},
"header": {
"title": "Borg",
"description": "El destino Borg escribe las copias del host en un repositorio Borg. Se soportan tres tipos de repositorio: ruta local de sistema de ficheros, disco externo montado o servidor remoto vía SSH. Deduplicación a nivel de chunk entre todos los archivos del repositorio y cifrado opcional repokey.",
"description": "El destino Borg escribe los backups del host en un repositorio Borg. Se soportan tres tipos de repositorio: ruta local de sistema de ficheros, disco externo montado o servidor remoto vía SSH. Deduplicación a nivel de chunk entre todos los archivos del repositorio y cifrado opcional repokey.",
"section": "Backup & Restore"
},
"aboutBorg": {
"heading": "Qué es Borg",
"body": "Borg (también escrito BorgBackup) es una herramienta de copia de seguridad open-source con deduplicación, mantenida por la comunidad Borg Backup. Almacena cada archivo como un conjunto de chunks de longitud variable dentro de un repositorio; los chunks se comparten entre archivos, por lo que volver a copiar datos que no han cambiado tiene un coste de almacenamiento prácticamente nulo. Borg no está atado a Proxmox — es una herramienta de copia de uso general utilizada en muchos entornos. ProxMenux la usa como uno de los tres destinos para copias del host; cada mecanismo específico de Borg descrito en esta página (tipos de repositorio, borg-serve por SSH, cifrado repokey, prune) es comportamiento estándar de Borg."
"body": "Borg (también escrito BorgBackup) es una herramienta de backup open-source con deduplicación, mantenida por la comunidad Borg Backup. Almacena cada archivo como un conjunto de chunks de longitud variable dentro de un repositorio; los chunks se comparten entre archivos, por lo que volver a copiar datos que no han cambiado tiene un coste de almacenamiento prácticamente nulo. Borg no está atado a Proxmox — es una herramienta de backup de uso general utilizada en muchos entornos. ProxMenux la usa como uno de los tres destinos para backups del host; cada mecanismo específico de Borg descrito en esta página (tipos de repositorio, borg-serve por SSH, cifrado repokey, prune) es comportamiento estándar de Borg."
},
"intro": {
"title": "Deduplicación por chunks con repositorios locales o servidos por SSH",
"body": "Un repositorio Borg almacena chunks que se comparten entre cada archivo que contiene, por lo que volver a copiar un fichero que no ha cambiado no transfiere ni almacena nada nuevo. ProxMenux invoca <code>borg create</code> contra el repositorio en el momento de la copia y <code>borg extract</code> en la restauración. El repositorio puede vivir en el mismo sistema de ficheros que el origen, en un disco externo montado, o en un host remoto accedido por SSH."
"body": "Un repositorio Borg almacena chunks que se comparten entre cada archivo que contiene, por lo que volver a copiar un fichero que no ha cambiado no transfiere ni almacena nada nuevo. ProxMenux invoca <code>borg create</code> contra el repositorio en el momento del backup y <code>borg extract</code> en la restauración. El repositorio puede vivir en el mismo sistema de ficheros que el origen, en un disco externo montado, o en un host remoto accedido por SSH."
},
"binarySourcing": {
"heading": "El binario borg",
"intro": "Borg no es una dependencia base del instalador de ProxMenux. Cuando se ejecuta una copia, <code>hb_ensure_borg</code> resuelve el binario desde cuatro fuentes por orden y devuelve la primera que funciona:",
"intro": "Borg no es una dependencia base del instalador de ProxMenux. Cuando se ejecuta un backup, <code>hb_ensure_borg</code> resuelve el binario desde cuatro fuentes por orden y devuelve la primera que funciona:",
"rows": [
{
"priority": "1",
@@ -42,7 +42,7 @@
{
"priority": "4",
"source": "Descarga desde GitHub",
"detail": "<code>wget</code> contra la URL fijada de <code>borg-linux64</code> bajo <code>github.com/borgbackup/borg/releases/</code>, verificado contra un SHA-256 constante en <code>lib_host_backup_common.sh</code> (<code>HB_BORG_LINUX64_SHA256</code>). Si el checksum no coincide, el binario se descarta y la copia se aborta. El fichero descargado se cachea en el state-dir para que las copias posteriores usen el camino 2."
"detail": "<code>wget</code> contra la URL fijada de <code>borg-linux64</code> bajo <code>github.com/borgbackup/borg/releases/</code>, verificado contra un SHA-256 constante en <code>lib_host_backup_common.sh</code> (<code>HB_BORG_LINUX64_SHA256</code>). Si el checksum no coincide, el binario se descarta y el backup se aborta. El fichero descargado se cachea en el state-dir para que los backups posteriores usen el camino 2."
}
]
},
@@ -74,11 +74,11 @@
"hostChoicesBody": "Cualquier host Linux con acceso SSH cumple. Setups habituales:",
"hostChoicesItems": [
"Un NAS dedicado o caja de backup (Debian, Ubuntu, TrueNAS SCALE con shell).",
"Un contenedor LXC dentro de un nodo Proxmox. Huella pequeña, aislado del host que ejecuta las copias.",
"Un contenedor LXC dentro de un nodo Proxmox. Huella pequeña, aislado del host que ejecuta los backups.",
"Otro host Proxmox en la misma LAN, o una VM en cualquier lugar alcanzable por SSH."
],
"lxcWarningTitle": "LXC como servidor Borg",
"lxcWarningBody": "Si el servidor Borg se ejecuta dentro de un LXC, el contenedor debe tener una cuenta de usuario con contraseña.",
"lxcWarningBody": "Si el servidor Borg está en un LXC, generate-auto necesita una cuenta que acepte autenticación SSH por contraseña durante la instalación de la clave. Si no está disponible, utiliza la instalación manual de la clave o la alternativa generate-pct a través del host PVE.",
"requirementsTitle": "Requisitos en el servidor",
"requirementsRows": [
{
@@ -101,18 +101,18 @@
"minimalSetupTitle": "Setup mínimo del servidor",
"minimalSetupBody": "En un servidor Borg Debian o Ubuntu, un baseline funcional son cuatro comandos como root:",
"minimalSetupCmd": "apt install borgbackup\nuseradd -m -d /home/borg -s /bin/bash borg\nmkdir -p /backup/borgbackup\nchown borg:borg /backup/borgbackup",
"minimalSetupNote": "Tras esto, el modo <code>generate-auto</code> de ProxMenux puede conectarse usando la contraseña del usuario borg una vez, instalar su propia clave SSH, y cada copia posterior usa esa clave. No hace falta más configuración en el servidor — la clave se restringe a sí misma a <code>borg serve</code> sobre esa ruta."
"minimalSetupNote": "Con el servidor preparado y la autenticación SSH por contraseña disponible, <code>generate-auto</code> instala la clave mediante una cuenta que pueda escribir en authorized_keys del usuario borg. Los backups posteriores usan esa clave, restringida a <code>borg serve</code> en la ruta configurada. Si no hay acceso por contraseña, instala la clave manualmente o usa la alternativa a través del host PVE."
},
"sshAuth": {
"heading": "Autenticación SSH (lado cliente)",
"intro": "Los repositorios Borg remotos se acceden vía SSH. La conexión va desde el host ProxMenux a una cuenta de usuario en el servidor Borg que ejecuta <code>borg serve</code>. Ese usuario se llama típicamente <code>borg</code>, NO el usuario admin/root del servidor — la línea de comando de borg-serve bloquea la conexión a esa ruta concreta del repositorio (ver las estrategias de clave más abajo).",
"strategiesTitle": "Las cuatro estrategias de clave",
"strategiesIntro": "Al añadir un destino remoto, ProxMenux pregunta por el usuario SSH, host y ruta remota, y a continuación pregunta cómo autenticar. Cuatro modos:",
"strategiesTitle": "Estrategias de clave SSH",
"strategiesIntro": "Al añadir un destino remoto, ProxMenux pide el usuario SSH, el host, el puerto y la ruta remota, y ofrece cuatro opciones de autenticación. Si se rechaza la autenticación por contraseña, también ofrece generate-pct. Los modos se describen a continuación:",
"strategyRows": [
{
"mode": "generate-auto",
"label": "Recomendado",
"detail": "ProxMenux genera una nueva keypair ed25519 en <code>~/.ssh/borg_proxmenux_HOST_ed25519</code>, y a continuación usa <code>sshpass</code> para hacer login UNA VEZ en el servidor con la contraseña de admin y añadir la clave pública a <code>~borg/.ssh/authorized_keys</code>. La contraseña de admin se usa sólo para esa única llamada — nunca se almacena."
"detail": "ProxMenux genera o reutiliza un par de claves ed25519 en <code>~/.ssh/borg_proxmenux_HOST_ed25519</code> y usa <code>sshpass</code> para probar el acceso e instalar la clave pública en <code>~borg/.ssh/authorized_keys</code>. La contraseña es de una cuenta que pueda escribir ese archivo, normalmente root o el usuario borg. Se utiliza durante la configuración y no se guarda."
},
{
"mode": "generate-manual",
@@ -153,11 +153,11 @@
"content": "Passphrase del destino con el NAME dado arriba (<code>chmod 600</code>). Sólo está presente si el usuario eligió cifrado repokey."
}
],
"outro": "Guardar es opcional — el usuario puede rechazar el prompt de guardado para una copia puntual que no deje credenciales en el host."
"outro": "Guardar el destino es opcional. Si se rechaza, no se guarda la configuración del destino con nombre, pero no se elimina una clave SSH generada. Si se activa repokey sin guardar el destino, ProxMenux guarda igualmente la frase de contraseña en el archivo heredado borg-pass.txt."
},
"encryption": {
"heading": "Cifrado",
"body": "Los repositorios se inicializan con un modo de cifrado vía <code>hb_borg_init_if_needed</code>: <code>borg repo-create -e MODE</code> en versiones modernas, o el legacy <code>borg init --encryption=MODE</code>. ProxMenux expone dos modos: <code>repokey</code> (por defecto) y <code>none</code>. En modo <code>repokey</code>, Borg almacena la clave de cifrado dentro del propio repositorio; el acceso requiere una passphrase, que ProxMenux pregunta dos veces con validación de coincidencia y guarda en <code>borg-pass-NAME.txt</code>. Un diálogo de reconocimiento obligatorio se muestra tras guardar la passphrase: la passphrase es la única manera de acceder a los archivos cifrados, y perderla hace irrecuperable todo archivo del repositorio."
"body": "Los repositorios se inicializan con un modo de cifrado vía <code>hb_borg_init_if_needed</code>: <code>borg repo-create -e MODE</code> en versiones modernas, o el legacy <code>borg init --encryption=MODE</code>. ProxMenux expone dos modos: <code>repokey</code> (por defecto) y <code>none</code>. En modo <code>repokey</code>, Borg almacena la clave de cifrado dentro del propio repositorio; el acceso requiere una passphrase, que ProxMenux pregunta dos veces con validación de coincidencia y guarda en <code>borg-pass-NAME.txt</code> para destinos guardados, o en el archivo heredado descrito antes. Un diálogo de reconocimiento obligatorio se muestra tras guardar la passphrase: la passphrase es la única manera de acceder a los archivos cifrados, y perderla hace irrecuperable todo archivo del repositorio."
},
"runtimeEnv": {
"heading": "Entorno de ejecución",
@@ -165,8 +165,8 @@
"rows": [
{
"var": "BORG_RSH",
"value": "ssh -i SSH_KEY_PATH -o StrictHostKeyChecking=accept-new",
"purpose": "El comando de shell remoto que Borg usa para repositorios servidos por SSH. Se fija sólo cuando se seleccionó una clave personalizada; en caso contrario queda sin definir para que Borg use la configuración SSH por defecto."
"value": "ssh -i SSH_KEY_PATH -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new [-p PORT]",
"purpose": "Comando de shell remoto que Borg utiliza para repositorios SSH. Elegir una clave añade las opciones de identidad. Al añadir un destino con un puerto distinto del predeterminado, ProxMenux añade además -p PORT; los destinos guardados, los trabajos programados y el Monitor usan el puerto de la URL ssh://. Sin clave personalizada, y en un destino nuevo con el puerto predeterminado, la variable queda sin definir y Borg usa la configuración SSH del host."
},
{
"var": "BORG_PASSPHRASE",
@@ -192,9 +192,9 @@
},
"archiveFormat": {
"heading": "Nombrado de archivos y retención",
"intro": "Cada copia crea un archivo nuevo dentro del repositorio.",
"intro": "Cada backup crea un archivo nuevo dentro del repositorio.",
"namePattern": "hostcfg-HOSTNAME-YYYYMMDD_HHMMSS",
"retentionBody": "Para trabajos programados, <code>run_scheduled_backup.sh</code> ejecuta <code>borg prune</code> contra el repositorio tras cada copia exitosa con los valores de retención configurados en el trabajo (<code>--keep-last</code>, <code>--keep-daily</code>, <code>--keep-weekly</code>). Las copias interactivas no aplican poda."
"retentionBody": "Para trabajos programados, <code>run_scheduled_backup.sh</code> ejecuta <code>borg prune</code> contra el repositorio tras cada backup exitoso con los valores de retención configurados en el trabajo (<code>--keep-last</code>, <code>--keep-daily</code>, <code>--keep-weekly</code>). Los backups interactivos no aplican poda."
},
"restoreAccess": {
"heading": "Recuperación del lado de la restauración",
@@ -212,7 +212,7 @@
{
"label": "borg create",
"href": "https://borgbackup.readthedocs.io/en/stable/usage/create.html",
"tail": " — el comando que ProxMenux invoca en cada copia, con todas las flags soportadas."
"tail": " — el comando que ProxMenux invoca en cada backup, con todas las flags soportadas."
},
{
"label": "Cifrado del repositorio",
@@ -1,11 +1,11 @@
{
"meta": {
"title": "Destinos de copia — Local, Proxmox Backup Server, Borg | ProxMenux",
"description": "Tres backends de almacenamiento reciben el mismo contenido de una copia de ProxMenux: un archivo local .tar.zst en cualquier sistema de ficheros escribible, un backup en un datastore de Proxmox Backup Server o un archivo en un repositorio local o remoto de Borg. Cada backend tiene sus propias características de compresión, deduplicación, cifrado y red.",
"title": "Destinos de backup — Local, Proxmox Backup Server, Borg | ProxMenux",
"description": "Tres backends de almacenamiento reciben el mismo contenido de un backup de ProxMenux: un archivo local .tar.zst en cualquier sistema de ficheros escribible, un backup en un datastore de Proxmox Backup Server o un archivo en un repositorio local o remoto de Borg. Cada backend tiene sus propias características de compresión, deduplicación, cifrado y red.",
"ogTitle": "Destinos de ProxMenux Backup",
"ogDescription": "Local, Proxmox Backup Server y Borg — tres backends de almacenamiento para el mismo contenido de copia del host.",
"ogDescription": "Local, Proxmox Backup Server y Borg — tres backends de almacenamiento para el mismo contenido de backup del host.",
"twitterTitle": "Destinos de ProxMenux Backup | ProxMenux",
"twitterDescription": "Archivo local, Proxmox Backup Server y Borg como backends para copias del host."
"twitterDescription": "Archivo local, Proxmox Backup Server y Borg como backends para backups del host."
},
"header": {
"title": "Destinos",
@@ -14,7 +14,7 @@
},
"intro": {
"title": "El mismo contenido, tres backends",
"body": "Cada copia produce los mismos tres bloques (rootfs, manifiesto, aplicaciones). Lo que cambia entre destinos es cómo se almacenan esos bloques y cómo el usuario los recupera para una restauración. Cada backend está implementado como una función independiente en <code>backup_host.sh</code> — <code>_bk_local</code>, <code>_bk_pbs</code>, <code>_bk_borg</code> — pero los tres comparten el mismo paso de staging (<code>hb_prepare_staging</code>) y el mismo camino de restauración. La elección del destino sólo afecta a la escritura y la recuperación; no cambia lo que hace una restauración ni cómo consume el archivo."
"body": "Cada backup produce los mismos tres bloques (rootfs, manifiesto, aplicaciones). Lo que cambia entre destinos es cómo se almacenan esos bloques y cómo el usuario los recupera para una restauración. Cada backend está implementado como una función independiente en <code>backup_host.sh</code> — <code>_bk_local</code>, <code>_bk_pbs</code>, <code>_bk_borg</code> — pero los tres comparten el mismo paso de staging (<code>hb_prepare_staging</code>) y el mismo camino de restauración. La elección del destino sólo afecta a la escritura y la recuperación; no cambia lo que hace una restauración ni cómo consume el archivo."
},
"comparison": {
"heading": "Comparativa de características",
@@ -29,12 +29,12 @@
{
"feature": "Compresión",
"local": "zstd (nivel por defecto) mediante <code>tar --zstd</code>. Fallback a gzip.",
"pbs": "Gestionada por PBS. El cliente envía sin comprimir; el servidor chunkiza + comprime.",
"borg": "La integrada de Borg (lz4 por defecto). Configurable al inicializar el repo."
"pbs": "La gestiona proxmox-backup-client. ProxMenux no modifica las opciones de compresión.",
"borg": "La compresión integrada de Borg. ProxMenux ejecuta borg create sin modificar las opciones de compresión."
},
{
"feature": "Deduplicación",
"local": "Ninguna. Cada copia es un archivo completo independiente.",
"local": "Ninguna. Cada backup es un archivo completo independiente.",
"pbs": "Deduplicación completa a nivel de chunk entre todas las backups del datastore.",
"borg": "Deduplicación completa a nivel de chunk entre todos los archivos del repositorio."
},
@@ -46,9 +46,9 @@
},
{
"feature": "Retención / poda",
"local": "Aplicada por trabajo programado vía <code>KEEP_LAST</code>. Los archivos antiguos (y sus sidecars + logs del runner) se eliminan de forma simétrica. Las copias interactivas no aplican poda.",
"pbs": "Aplicada por trabajo programado vía <code>proxmox-backup-client prune --keep-last / --keep-daily / --keep-weekly</code>. Las copias interactivas no aplican poda.",
"borg": "Aplicada por trabajo programado vía <code>borg prune --keep-last / --keep-daily / --keep-weekly</code>. Las copias interactivas no aplican poda."
"local": "Aplicada por trabajo programado vía <code>KEEP_LAST</code>. Los archivos antiguos (y sus sidecars + logs del runner) se eliminan de forma simétrica. Los backups interactivos no aplican poda.",
"pbs": "Aplicada por trabajo programado vía <code>proxmox-backup-client prune --keep-last / --keep-daily / --keep-weekly</code>. Los backups interactivos no aplican poda.",
"borg": "Aplicada por trabajo programado vía <code>borg prune --keep-last / --keep-daily / --keep-weekly</code>. Los backups interactivos no aplican poda."
},
{
"feature": "Red",
@@ -75,11 +75,11 @@
"captionBorg": "Borg"
},
"sameArchive": {
"heading": "El contenido interno de la copia es el mismo en cualquier destino",
"body": "Con independencia de dónde se guarde la copia, dentro siempre están los mismos tres bloques descritos en <em>Cómo funciona</em>: el sistema de ficheros (<code>rootfs/</code>), los metadatos (<code>metadata/</code>) y el manifiesto (<code>manifest.json</code>). Al extraer una copia local <code>.tar.zst</code>, restaurar un archivo <code>.pxar</code> desde PBS o descomprimir un archivo Borg, el árbol de directorios resultante es idéntico en los tres casos. Esto significa que el proceso de restauración lee siempre los mismos ficheros y no le importa desde qué destino provenga la copia."
"heading": "El contenido interno del backup es el mismo en cualquier destino",
"body": "Los tres destinos contienen la misma estructura <code>rootfs/</code> + <code>metadata/</code> + <code>manifest.json</code> descrita en <em>Cómo funciona</em>. Extraer un <code>.tar.zst</code> de un archivo local, restaurar un <code>.pxar</code> desde PBS o extraer un archivo de Borg con <code>borg extract</code> produce el mismo árbol de directorios. El proceso de restauración (<code>_rs_check_layout</code>, <code>_rs_apply</code>, <code>_rs_prepare_pending_restore</code>) lee los mismos tres componentes sin necesitar saber de qué destino proceden."
},
"extractStandalone": {
"heading": "Extraer una copia fuera de ProxMenux",
"heading": "Extraer un backup fuera de ProxMenux",
"intro": "Cualquiera de los tres formatos de archivo se puede leer con herramientas estándar sin tener ProxMenux instalado en el host de lectura. Los comandos siguientes producen el mismo árbol de directorios que consume internamente una restauración.",
"localCmd": "# Desde un archivo local .tar.zst:\ntar --zstd -xf hostcfg-HOST-TIMESTAMP.tar.zst\n\n# Desde el fallback .tar.gz:\ntar -xzf hostcfg-HOST-TIMESTAMP.tar.gz",
"pbsCmd": "# Desde un backup PBS (requiere proxmox-backup-client):\nproxmox-backup-client restore \\\n --repository USER@REALM@HOST:DATASTORE \\\n host/hostcfg-HOST/BACKUP-TIME \\\n hostcfg.pxar /tmp/hostcfg\n\n# Añadir --keyfile KEY-PATH cuando el backup está cifrado.",
@@ -1,11 +1,11 @@
{
"meta": {
"title": "Destino de archivo local — tar.zst en filesystem o unidad USB | ProxMenux",
"description": "El destino local de la copia escribe un único archivo .tar.zst en cualquier directorio escribible: un disco interno, un punto de montaje de Proxmox, un share NFS o una unidad USB. Documenta el flujo de configuración, la lógica de detección y montaje USB, el chequeo de seguridad contra escribir el archivo dentro de una ruta que se está copiando, y el sidecar JSON que identifica el fichero.",
"description": "El destino local del backup escribe un único archivo .tar.zst en cualquier directorio escribible: un disco interno, un punto de montaje de Proxmox, un share NFS o una unidad USB. Documenta el flujo de configuración, la lógica de detección y montaje USB, el chequeo de seguridad contra escribir el archivo dentro de una ruta que se está copiando, y el sidecar JSON que identifica el fichero.",
"ogTitle": "ProxMenux Backup — Destino local",
"ogDescription": "Cómo escribe ProxMenux las copias locales como archivos .tar.zst y cómo configurar el directorio de destino o la unidad USB.",
"twitterTitle": "Destino local de copia | ProxMenux",
"twitterDescription": "Cómo escribe ProxMenux las copias locales como archivos .tar.zst en filesystem o USB."
"ogDescription": "Cómo escribe ProxMenux los backups locales como archivos .tar.zst y cómo configurar el directorio de destino o la unidad USB.",
"twitterTitle": "Destino local de backup | ProxMenux",
"twitterDescription": "Cómo escribe ProxMenux los backups locales como archivos .tar.zst en filesystem o USB."
},
"header": {
"title": "Archivo local",
@@ -14,11 +14,11 @@
},
"intro": {
"title": "Un solo fichero, autocontenido",
"body": "Una copia local produce un único fichero <code>hostcfg-HOST-TIMESTAMP.tar.zst</code> (o <code>.tar.gz</code> cuando <code>zstd</code> no está presente). El fichero contiene el árbol completo del archivo — <code>manifest.json</code>, <code>metadata/</code> y <code>rootfs/</code> — y puede restaurarse en cualquier host Proxmox con el flujo de restauración de ProxMenux, o extraerse a mano con <code>tar --zstd -xf</code> en cualquier sistema Linux. Sin servidor, sin inicialización de repositorio, sin dependencia externa. Es el destino con el camino de recuperación más corto cuando ni PBS ni Borg están disponibles."
"body": "Un backup local produce un único fichero <code>hostcfg-HOST-TIMESTAMP.tar.zst</code> (o <code>.tar.gz</code> cuando <code>zstd</code> no está presente). El fichero contiene el árbol completo del archivo — <code>manifest.json</code>, <code>metadata/</code> y <code>rootfs/</code> — y puede restaurarse en cualquier host Proxmox con el flujo de restauración de ProxMenux, o extraerse a mano con <code>tar --zstd -xf</code> en cualquier sistema Linux. Sin servidor, sin inicialización de repositorio, sin dependencia externa. Es el destino con el camino de recuperación más corto cuando ni PBS ni Borg están disponibles."
},
"targetConfig": {
"heading": "Configurar el directorio de destino",
"intro": "El destino local es un <strong>único directorio de destino persistido</strong> — no una lista. ProxMenux guarda la elección del usuario en <code>/usr/local/share/proxmenux/local-target.conf</code> y la lee en cada copia. Cuando no hay ningún destino configurado, se usa el valor por defecto <code>HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump</code> (el mismo directorio que Proxmox utiliza para las salidas de <code>vzdump</code>). El destino se configura desde <em>Configure backup destinations → Local destinations</em>:",
"intro": "El destino local es un <strong>único directorio de destino persistido</strong> — no una lista. ProxMenux guarda la elección del usuario en <code>/usr/local/share/proxmenux/local-target.conf</code> y la lee en cada backup. Cuando no hay ningún destino configurado, se usa el valor por defecto <code>HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump</code> (el mismo directorio que Proxmox utiliza para las salidas de <code>vzdump</code>). El destino se configura desde <em>Configure backup destinations → Local destinations</em>:",
"options": [
"<strong>Usar el valor por defecto (<code>/var/lib/vz/dump</code>).</strong> El almacenamiento local de Proxmox. Está presente en cualquier instalación de Proxmox; el archivo queda junto a las salidas de vzdump y lo detecta automáticamente la pestaña Backups del Monitor.",
"<strong>Introducir una ruta personalizada.</strong> Cualquier ruta absoluta del sistema de ficheros vale: un montaje NFS, un share SMB montado por <code>fstab</code>, un dataset ZFS dedicado, un segundo disco interno. ProxMenux valida que la ruta existe y es un directorio antes de persistirla.",
@@ -32,7 +32,7 @@
"stateRows": [
{
"state": "mounted",
"shown": "Tamaño · label · [fstype] · → /punto/de/montaje",
"shown": "Tamaño · label · [fstype] · → /mount/point",
"action": "La partición ya está montada en algún sitio. Seleccionarla persiste ese punto de montaje como destino local. No se realiza ningún montaje."
},
{
@@ -50,11 +50,11 @@
},
"safetyCheck": {
"heading": "Chequeo de seguridad — destino dentro de una ruta copiada",
"body": "Antes de escribir el archivo, <code>_bk_local</code> verifica que el directorio de destino <strong>no</strong> sea un subcamino de ninguno de los directorios que se están copiando. Un footgun habitual sería añadir <code>/root</code> al perfil y elegir <code>/root/backups</code> como destino — el archivo se incluiría a sí mismo, produciendo o bien un archivo corrupto o bien crecimiento sin límite hasta llenar el disco. El chequeo resuelve ambos caminos con <code>readlink -m</code>, los compara y, si hay conflicto, aborta la copia con un diálogo que nombra la ruta en conflicto y lista tres formas de resolverlo: elegir un destino fuera de la ruta en conflicto, eliminar la entrada personalizada que contiene el destino, o usar modo Custom para desmarcar la ruta en conflicto en esa ejecución."
"body": "Antes de escribir el archivo, <code>_bk_local</code> verifica que el directorio de destino <strong>no</strong> sea un subcamino de ninguno de los directorios que se están copiando. Un footgun habitual sería añadir <code>/root</code> al perfil y elegir <code>/root/backups</code> como destino — el archivo se incluiría a sí mismo, produciendo o bien un archivo corrupto o bien crecimiento sin límite hasta llenar el disco. El chequeo resuelve ambos caminos con <code>readlink -m</code>, los compara y, si hay conflicto, aborta el backup con un diálogo que nombra la ruta en conflicto y lista tres formas de resolverlo: elegir un destino fuera de la ruta en conflicto, eliminar la entrada personalizada que contiene el destino, o usar modo Custom para desmarcar la ruta en conflicto en esa ejecución."
},
"archiveFormat": {
"heading": "Formato de archivo y compresión",
"intro": "El nombre del fichero de salida incorpora el hostname del origen y el timestamp de la copia para que un directorio con varios archivos se ordene cronológicamente y cada fichero se identifique por sí mismo.",
"intro": "El nombre del fichero de salida incorpora el hostname del origen y el timestamp del backup para que un directorio con varios archivos se ordene cronológicamente y cada fichero se identifique por sí mismo.",
"namePattern": "hostcfg-HOSTNAME-YYYYMMDD_HHMMSS.tar.zst",
"compressionTitle": "Compresión",
"compressionBody": "El camino principal usa <code>tar --zstd -cf</code> — un pipeline de un solo comando que comprime al nivel por defecto de zstd. Cuando <code>zstd</code> no está presente en el origen (raro en Proxmox pero posible en instalaciones minimalistas), ProxMenux cae en <code>gzip</code>. En el camino de fallback, si <code>pv</code> está disponible, se añade una barra de progreso al pipeline para que el usuario vea crecer el tamaño del archivo en tiempo real; sin <code>pv</code>, se usa <code>tar -czf</code> plano en silencio.",
@@ -63,13 +63,13 @@
},
"sidecar": {
"heading": "El sidecar JSON",
"intro": "Cada copia local con éxito produce un fichero compañero: <code>HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json</code>, escrito junto al archivo por <code>hb_write_archive_sidecar</code>. Este pequeño fichero JSON permite al Monitor de ProxMenux identificar el archivo como una copia de host de ProxMenux incluso si posteriormente se mueve, renombra o archiva en otro lugar.",
"intro": "Cada backup local con éxito produce un fichero compañero: <code>HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json</code>, escrito junto al archivo por <code>hb_write_archive_sidecar</code>. Este pequeño fichero JSON permite al Monitor de ProxMenux identificar el archivo como un backup de host de ProxMenux incluso si posteriormente se mueve, renombra o archiva en otro lugar.",
"contentTitle": "Contenido del sidecar",
"contentBody": "El sidecar almacena la versión de schema, si la copia viene de una ejecución interactiva o de un trabajo programado (<code>kind</code>), el ID de trabajo para las ejecuciones programadas, el modo de perfil usado (<code>default</code> o <code>custom</code>), el hostname del origen, el basename original del archivo, un timestamp de creación en ISO-8601 y el tamaño del archivo en bytes.",
"whyBody": "La pestaña Backups del Monitor escanea los directorios locales configurados buscando sidecars <code>*.proxmenux.json</code> — no ficheros <code>*.tar.zst</code> — porque un <code>.tar.zst</code> sin sidecar podría no ser una copia de ProxMenux en absoluto. El escaneo es rápido (los JSON son diminutos) y el emparejamiento es estable frente a renombrados del archivo mientras el sidecar se renombre en paralelo."
"contentBody": "El sidecar almacena la versión de schema, si el backup viene de una ejecución interactiva o de un trabajo programado (<code>kind</code>), el ID de trabajo para las ejecuciones programadas, el modo de perfil usado (<code>default</code> o <code>custom</code>), el hostname del origen, el basename original del archivo, un timestamp de creación en ISO-8601 y el tamaño del archivo en bytes.",
"whyBody": "La pestaña Backups del Monitor escanea los directorios locales configurados buscando sidecars <code>*.proxmenux.json</code> — no ficheros <code>*.tar.zst</code> — porque un <code>.tar.zst</code> sin sidecar podría no ser un backup de ProxMenux en absoluto. El escaneo es rápido (los JSON son diminutos) y el emparejamiento es estable frente a renombrados del archivo mientras el sidecar se renombre en paralelo."
},
"restoreAccess": {
"heading": "Restaurar desde un archivo local",
"body": "El flujo de restauración de ProxMenux descubre los archivos locales escaneando el destino local configurado buscando sidecars y mostrándolos en la lista de copias disponibles. Seleccionar uno dispara <code>_rs_check_layout</code>, que extrae el tarball en un directorio de staging y confirma el layout de tres bloques antes de continuar. Para una extracción manual fuera de ProxMenux, <code>tar --zstd -xf hostcfg-HOSTNAME-TIMESTAMP.tar.zst -C /tmp/hostcfg</code> produce el mismo árbol que consume el código de restauración."
"body": "El flujo de restauración de ProxMenux descubre los archivos locales escaneando el destino local configurado buscando sidecars y mostrándolos en la lista de backups disponibles. Seleccionar uno dispara <code>_rs_check_layout</code>, que extrae el tarball en un directorio de staging y confirma el layout de tres bloques antes de continuar. Para una extracción manual fuera de ProxMenux, <code>tar --zstd -xf hostcfg-HOSTNAME-TIMESTAMP.tar.zst -C /tmp/hostcfg</code> produce el mismo árbol que consume el código de restauración."
}
}
@@ -1,10 +1,10 @@
{
"meta": {
"title": "Destino Proxmox Backup Server — repositorio, cifrado, recuperación | ProxMenux",
"description": "El destino PBS escribe las copias de host de ProxMenux como backups PBS. Documenta la auto-detección del repositorio desde /etc/pve/storage.cfg, la configuración manual de PBS, el comando de subida .pxar, el modelo de cifrado por keyfile del lado del cliente, el blob de escrow con passphrase de recuperación, y la recuperación del keyfile desde PBS en instalaciones frescas.",
"description": "El destino PBS escribe los backups de host de ProxMenux como backups PBS. Documenta la auto-detección del repositorio desde /etc/pve/storage.cfg, la configuración manual de PBS, el comando de subida .pxar, el modelo de cifrado por keyfile del lado del cliente, el blob de escrow con passphrase de recuperación, y la recuperación del keyfile desde PBS en instalaciones frescas.",
"ogTitle": "ProxMenux Backup — destino Proxmox Backup Server",
"ogDescription": "Cómo escribe ProxMenux las copias de host en Proxmox Backup Server con cifrado por keyfile del lado del cliente y escrow de recuperación.",
"twitterTitle": "Destino PBS de copia | ProxMenux",
"ogDescription": "Cómo escribe ProxMenux los backups de host en Proxmox Backup Server con cifrado por keyfile del lado del cliente y escrow de recuperación.",
"twitterTitle": "Destino PBS de backup | ProxMenux",
"twitterDescription": "Destino Proxmox Backup Server con cifrado por keyfile y escrow de passphrase de recuperación."
},
"header": {
@@ -15,15 +15,15 @@
"recommendedBadge": "Destino recomendado",
"aboutPbs": {
"heading": "Qué es Proxmox Backup Server",
"body": "Proxmox Backup Server (PBS) es el producto de servidor de copias propio de Proxmox, desarrollado y mantenido por el mismo equipo que autora Proxmox VE. Es un servidor dedicado diseñado para recibir copias desde hosts Proxmox VE (VMs, LXCs y — vía <code>proxmox-backup-client</code> — directorios arbitrarios del host) con deduplicación a nivel de chunk, cifrado del lado del cliente y políticas de retención aplicadas del lado del servidor. ProxMenux usa PBS como uno de los tres destinos para copias del host; cada mecanismo específico de PBS descrito en esta página (grupos de copia, archivos <code>.pxar</code>, <code>--backup-id</code>, cifrado por keyfile) es comportamiento estándar de PBS."
"body": "Proxmox Backup Server (PBS) es el producto de servidor de backups propio de Proxmox, desarrollado y mantenido por el mismo equipo que autora Proxmox VE. Es un servidor dedicado diseñado para recibir backups desde hosts Proxmox VE (VMs, LXCs y — vía <code>proxmox-backup-client</code> — directorios arbitrarios del host) con deduplicación a nivel de chunk, cifrado del lado del cliente y políticas de retención aplicadas del lado del servidor. ProxMenux usa PBS como uno de los tres destinos para backups del host; cada mecanismo específico de PBS descrito en esta página (grupos de backup, archivos <code>.pxar</code>, <code>--backup-id</code>, cifrado por keyfile) es comportamiento estándar de PBS."
},
"intro": {
"title": "Un backup por ejecución, deduplicación a nivel de chunk",
"body": "Una copia PBS produce una única entrada en el datastore, agrupada bajo el backup ID <code>host/hostcfg-HOSTNAME/BACKUP-TIME</code>. El contenido es un archivo <code>.pxar</code> con el mismo layout de tres bloques descrito en <em>Cómo funciona</em>. PBS deduplica a nivel de chunk en todas las copias del datastore, por lo que las copias siguientes del mismo host transfieren y almacenan sólo los chunks que hayan cambiado. La retención la aplica el propio ProxMenux para los trabajos programados — <code>run_scheduled_backup.sh</code> ejecuta <code>proxmox-backup-client prune</code> con <code>--keep-last</code> / <code>--keep-daily</code> / <code>--keep-weekly</code> tras cada ejecución exitosa usando los valores configurados en el trabajo."
"body": "Un backup PBS produce una única entrada en el datastore, agrupada bajo el backup ID <code>host/hostcfg-HOSTNAME/BACKUP-TIME</code>. El contenido es un archivo <code>.pxar</code> con el mismo layout de tres bloques descrito en <em>Cómo funciona</em>. PBS deduplica a nivel de chunk en todos los backups del datastore, por lo que los backups siguientes del mismo host transfieren y almacenan sólo los chunks que hayan cambiado. La retención la aplica el propio ProxMenux para los trabajos programados — <code>run_scheduled_backup.sh</code> ejecuta <code>proxmox-backup-client prune</code> con <code>--keep-last</code> / <code>--keep-daily</code> / <code>--keep-weekly</code> tras cada ejecución exitosa usando los valores configurados en el trabajo."
},
"repoSelection": {
"heading": "Selección del repositorio",
"intro": "ProxMenux descubre repositorios PBS desde dos fuentes en cada copia. El usuario elige uno desde un menú unificado; esa elección determina, para esa ejecución concreta, contra qué servidor y datastore se envía la copia, con qué contraseña se autentica y con qué huella (<em>fingerprint</em>) valida el certificado.",
"intro": "ProxMenux descubre los repositorios de PBS a partir de dos fuentes en cada backup. El usuario elige uno en un menú unificado; esa elección determina los valores de <code>HB_PBS_REPOSITORY</code>, <code>HB_PBS_SECRET</code> y <code>HB_PBS_FINGERPRINT</code> para esa ejecución.",
"sourceRows": [
{
"source": "storage.cfg de Proxmox (auto-descubierto)",
@@ -33,51 +33,51 @@
{
"source": "Configuración manual de ProxMenux",
"path": "/usr/local/share/proxmenux/pbs-manual-configs.txt + pbs-pass-NAME.txt + pbs-fingerprint-NAME.txt",
"content": "Se añade desde <em>Configure backup destinations → PBS destinations → Add PBS</em>. Pregunta por un nombre, usuario (<code>root@pam</code> o <code>user@pbs!token</code>), host o IP, datastore y contraseña. La contraseña se re-pregunta ante entrada vacía — un guardado vacío persistiría silenciosamente y cada copia posterior fallaría con un error de autenticación opaco. Este camino se usa cuando el PBS objetivo no está registrado como storage de Proxmox."
"content": "Se añade desde <em>Configure backup destinations → PBS destinations → Add PBS</em>. Pregunta por un nombre, usuario (<code>root@pam</code> o <code>user@pbs!token</code>), host o IP, datastore y contraseña. La contraseña se re-pregunta ante entrada vacía — un guardado vacío persistiría silenciosamente y cada backup posterior fallaría con un error de autenticación opaco. Este camino se usa cuando el PBS objetivo no está registrado como storage de Proxmox."
}
],
"menuTitle": "Menú de selección",
"menuBody": "Ambas fuentes se muestran en un único menú, cada fila etiquetada con su origen (<code>[proxmox]</code> o <code>[manual]</code>). Las entradas cuya contraseña no se pudo resolver se marcan con un aviso <code>⚠ no password</code> — seleccionarlas dispara una re-introducción de contraseña antes de iniciar la copia. El fingerprint se pasa a <code>proxmox-backup-client</code> vía la variable de entorno <code>PBS_FINGERPRINT</code>; cuando no está presente, el cliente pide al usuario aceptar el certificado del servidor de forma interactiva en la primera copia."
"menuBody": "Ambas fuentes se muestran en un único menú, cada fila etiquetada con su origen (<code>[proxmox]</code> o <code>[manual]</code>). Las entradas cuya contraseña no se pudo resolver se marcan con un aviso <code>⚠ no password</code> — seleccionarlas dispara una re-introducción de contraseña antes de iniciar el backup. El fingerprint se pasa a <code>proxmox-backup-client</code> vía la variable de entorno <code>PBS_FINGERPRINT</code>; cuando no está presente, el cliente pide al usuario aceptar el certificado del servidor de forma interactiva en el primer backup."
},
"backupCommand": {
"heading": "El comando de copia",
"intro": "La subida es una única invocación de <code>proxmox-backup-client backup</code>. ProxMenux la ejecuta dentro de un envoltorio <code>env</code> para que las credenciales nunca aparezcan en la lista de argumentos del proceso.",
"heading": "El comando de backup",
"intro": "La subida se realiza con una única invocación de <code>proxmox-backup-client backup</code>. ProxMenux utiliza <code>env</code> para pasar al cliente la contraseña, la contraseña de cifrado y el fingerprint como variables de entorno.",
"cmd": "env \\\n PBS_PASSWORD=\"$HB_PBS_SECRET\" \\\n PBS_ENCRYPTION_PASSWORD=\"$HB_PBS_ENC_PASS\" \\\n PBS_FINGERPRINT=\"$HB_PBS_FINGERPRINT\" \\\n proxmox-backup-client backup \\\n hostcfg.pxar:$staging_root \\\n --repository USER@REALM@HOST:DATASTORE \\\n --backup-type host \\\n --backup-id hostcfg-HOSTNAME \\\n --backup-time BACKUP-EPOCH \\\n [--keyfile /usr/local/share/proxmenux/pbs-key.conf]",
"backupIdTitle": "Nombrado del backup ID",
"backupIdBody": "El backup ID por defecto es <code>hostcfg-HOSTNAME</code>. Se pide al usuario que lo confirme o edite antes de la subida; cualquier carácter fuera de <code>[A-Za-z0-9_-]</code> se elimina y los guiones finales se recortan. Reutilizar el mismo ID entre ejecuciones es intencional — PBS trata el ID como un <em>grupo</em>, y cada copia posterior aparece como un nuevo backup dentro de ese grupo, compartiendo dedup con las ejecuciones previas.",
"backupIdBody": "El backup ID por defecto es <code>hostcfg-HOSTNAME</code>. Se pide al usuario que lo confirme o edite antes de la subida; cualquier carácter fuera de <code>[A-Za-z0-9_-]</code> se elimina y los guiones finales se recortan. Reutilizar el mismo ID entre ejecuciones es intencional — PBS trata el ID como un <em>grupo</em>, y cada backup posterior aparece como un nuevo backup dentro de ese grupo, compartiendo dedup con las ejecuciones previas.",
"pxarTitle": "Qué se incluye dentro del archivo .pxar",
"pxarBody": "Al construir el archivo <code>.pxar</code> se empaqueta el directorio de trabajo completo: el sistema de ficheros del host (<code>rootfs/</code>), los metadatos (<code>metadata/</code>) y el manifiesto (<code>manifest.json</code>). Al restaurar, ProxMenux compara la información del manifiesto con la del host destino para detectar si son equivalentes, si cambia el hardware o si se trata de un equipo distinto, y ajustar el proceso en consecuencia. Las copias antiguas —hechas con versiones anteriores de ProxMenux que empaquetaban solo el sistema de ficheros— siguen restaurándose sin problema: el flujo de restauración detecta ese formato heredado y lo reorganiza automáticamente."
"pxarBody": "El origen del <code>.pxar</code> es todo el directorio <code>staging_root</code>, con <code>rootfs/</code>, <code>metadata/</code> y <code>manifest.json</code> juntos. Las versiones anteriores utilizaban <code>$staging_root/rootfs</code> como origen; esto dejaba <code>metadata/</code> fuera del archivo y la comprobación de compatibilidad de la restauración no tenía datos que leer, por lo que mostraba advertencias de restauración entre hosts incluso al restaurar en el mismo host. Los backups antiguos creados solo a partir de rootfs siguen restaurándose correctamente mediante la rama del caso 3 de <code>_rs_check_layout</code>, que vuelve a colocar el árbol plano <code>etc/var/root/usr</code> dentro de una estructura <code>rootfs/</code>."
},
"encryption": {
"heading": "Cifrado del lado del cliente",
"glossaryHint": "En esta sección aparecen los términos <em>clave</em>, <em>passphrase</em> y <em>sobre de recuperación</em>. El <glosarioLink>glosario</glosarioLink> resume las diferencias en una frase por término.",
"intro": "PBS puede cifrar las copias con una clave que vive solo en el host. Los datos se cifran en el host antes de subirse; en PBS llegan ya cifrados. En ProxMenux este cifrado es opcional. Al activarlo, el usuario decide aparte, con una pregunta sí/no, si quiere subir a PBS también una copia de esa clave envuelta con una passphrase (el sobre de recuperación) como red de seguridad. La respuesta se puede cambiar después desde el Monitor. La clave siempre queda en una única ruta del host — <code>/usr/local/share/proxmenux/pbs-key.conf</code> — y se reutiliza sin volver a preguntar en las copias siguientes.",
"intro": "PBS puede cifrar los backups con una clave que vive solo en el host. Los datos se cifran en el host antes de subirse; en PBS llegan ya cifrados. En ProxMenux este cifrado es opcional. Al activarlo, el usuario decide aparte, con una pregunta sí/no, si quiere subir a PBS también una copia de esa clave envuelta con una passphrase (el sobre de recuperación) como red de seguridad. La respuesta se puede cambiar después desde el Monitor. La clave siempre queda en una única ruta del host — <code>/usr/local/share/proxmenux/pbs-key.conf</code> — y se reutiliza sin volver a preguntar en los backups siguientes.",
"keyfileTitle": "Configuración inicial de la clave",
"keyfileBody": "El diálogo aparece en la primera copia cifrada del host y hace dos preguntas. Primero, si se quiere cifrar la copia: <em>No</em> sigue sin cifrado; <em>Sí</em> pasa al segundo paso. Segundo, qué clave usar. Si ya hay una instalada en <code>/usr/local/share/proxmenux/pbs-key.conf</code>, se reutiliza sin preguntar más y las copias posteriores tampoco vuelven a preguntar. Si no la hay, aparecen dos opciones: <em>Generar una clave nueva</em> crea una con <code>proxmox-backup-client key create --kdf none</code>. <em>Usar una clave existente</em> busca primero una gestionada por PVE: si el repositorio PBS elegido tiene una en <code>/etc/pve/priv/storage/&lt;NAME&gt;.enc</code>, ese fichero se copia solo a la ruta canónica. Si no hay ninguna que coincida, el diálogo pide la ruta absoluta donde el usuario ha dejado la clave en este host. En cualquier caso, el fichero termina en la ruta canónica con <code>chmod 600</code>.",
"keyfileBody": "El diálogo aparece en el primer backup cifrado del host y hace dos preguntas. Primero, si se quiere cifrar el backup: <em>No</em> sigue sin cifrado; <em>Sí</em> pasa al segundo paso. Segundo, qué clave usar. Si ya hay una instalada en <code>/usr/local/share/proxmenux/pbs-key.conf</code>, se reutiliza sin preguntar más y los backups posteriores tampoco vuelven a preguntar. Si no la hay, aparecen dos opciones: <em>Generar una clave nueva</em> crea una con <code>proxmox-backup-client key create --kdf none</code>. <em>Usar una clave existente</em> busca primero una gestionada por PVE: si el repositorio PBS elegido tiene una en <code>/etc/pve/priv/storage/&lt;NAME&gt;.enc</code>, ese fichero se copia solo a la ruta canónica. Si no hay ninguna que coincida, el diálogo pide la ruta absoluta donde el usuario ha dejado la clave en este host. En cualquier caso, el fichero termina en la ruta canónica con <code>chmod 600</code>.",
"modesTitle": "Clave por host o compartida",
"modesIntro": "Los dos modos están soportados y ninguno se impone — el usuario elige según cómo tenga organizados sus hosts.",
"modesPerHostTitle": "Clave por host (por defecto)",
"modesPerHostBody": "Cada host genera su propia clave la primera vez que se activa el cifrado. Es el modo con mayor aislamiento: si la clave de un host se ve comprometida, no afecta a las copias de ningún otro. Recomendado para entornos de producción y para escenarios donde cada host tiene su propio responsable o requisitos distintos.",
"modesPerHostBody": "Cada host genera su propia clave la primera vez que se activa el cifrado. Es el modo con mayor aislamiento: si la clave de un host se ve comprometida, no afecta a los backups de ningún otro. Recomendado para entornos de producción y para escenarios donde cada host tiene su propio responsable o requisitos distintos.",
"modesSharedTitle": "Clave compartida (importar la misma en cada host)",
"modesSharedBody": "Se genera una única clave y se importa en todos los hosts mediante la opción <em>Usar una clave existente</em>. La gestión es más sencilla: hay un solo secreto que proteger, y cualquier host puede leer las copias de cualquier otro (útil para verificación centralizada, ejercicios de restauración cruzada o consolidación). A cambio, si la clave compartida se filtra queda expuesto todo el conjunto de hosts a la vez. Recomendado para laboratorios personales y entornos donde todos los hosts pertenecen al mismo responsable y comparten el mismo nivel de confianza.",
"modesSharedBody": "Se genera una única clave y se importa en todos los hosts mediante la opción <em>Usar una clave existente</em>. La gestión es más sencilla: hay un solo secreto que proteger, y cualquier host puede leer los backups de cualquier otro (útil para verificación centralizada, ejercicios de restauración cruzada o consolidación). A cambio, si la clave compartida se filtra queda expuesto todo el conjunto de hosts a la vez. Recomendado para laboratorios personales y entornos donde todos los hosts pertenecen al mismo responsable y comparten el mismo nivel de confianza.",
"recoveryTitle": "¿Subir la clave a PBS? — el usuario decide",
"recoveryBody": "Justo después de elegir la clave, ProxMenux pregunta si se quiere subir una copia de esa clave a PBS como red de seguridad, con dos opciones. <strong>No</strong> (por defecto) mantiene la clave solo en el host; ProxMenux no toca PBS con nada relacionado con la recuperación y el usuario gestiona por su cuenta la copia externa (desde el Monitor, la acción <em>Descargar</em> en la fila del destino PBS la exporta en el acto). <strong>Sí</strong> pide una passphrase de recuperación —dos veces, para comprobar que coincidan—; con esa passphrase, la clave se envuelve localmente con AES-256-CBC y PBKDF2 (600 000 iteraciones, sal aleatoria) en un fichero <code>pbs-key.recovery.enc</code>. A partir de ese momento, cada copia cifrada sube también ese fichero envuelto a PBS. Ni la passphrase ni la clave en claro salen del host. La respuesta se puede cambiar después desde el Monitor en cualquier momento; el interruptor está inline en la fila del destino PBS y el botón que aparece se adapta al estado (empezar a subir, dejar de subir, o cambiar la passphrase).",
"recoveryBody": "Justo después de elegir la clave, ProxMenux pregunta <em>¿Subir clave a PBS?</em>, con dos respuestas. <strong>No se sube ningún artefacto de recuperación a PBS hasta que el usuario responde Sí.</strong> Por defecto se elige <em>No, mantener solo local</em>: la clave queda en su ruta canónica, ProxMenux no sube artefactos de recuperación a PBS y el usuario se encarga de guardarla fuera del host. El botón <em>Descargar archivo clave</em> del Monitor, en la fila del destino PBS, permite obtenerla cuando se necesite. Al elegir <em>Sí, subir</em>, se pide dos veces una frase de contraseña de recuperación y se comprueba que coincidan. ProxMenux protege la clave con AES-256-CBC y PBKDF2 (600.000 iteraciones y sal aleatoria) para generar <code>pbs-key.recovery.enc</code>. Cada backup cifrado posterior sube esa envoltura a PBS como un grupo de backup asociado. En estas subidas no se envían a PBS ni la frase de contraseña ni la clave en texto claro. La elección puede cambiarse en cualquier momento desde el Monitor: el control de custodia de la fila del destino permite elegir Sí o No y aplicar inmediatamente Iniciar subida, Detener subida o Actualizar frase de contraseña, según el estado.",
"blobUploadTitle": "Grupo emparejado en PBS",
"blobUploadBody1": "Cuando el usuario ha respondido Sí, ProxMenux sube el sobre de recuperación a PBS después de cada copia cifrada como un segundo grupo emparejado, con el mismo nombre que el del host pero terminado en <code>-keyrecovery</code>. Los dos grupos aparecen juntos en el listado del datastore: uno con las copias del host, otro con los sobres. <strong>El sobre nunca sale del host en claro</strong>: se cifra en el host con AES-256-CBC y PBKDF2 antes de enviar un solo byte (<code>openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -salt</code>). PBS solo recibe el sobre ya cifrado.",
"blobUploadBody1": "Cuando la respuesta es <em>Sí, subir</em>, ProxMenux sube el sobre de recuperación a PBS después de cada backup cifrado como un segundo grupo emparejado, con el mismo nombre que el del host pero terminado en <code>-keyrecovery</code>. Los dos grupos aparecen juntos en el listado del datastore: uno con los backups del host, otro con los sobres de recuperación. <strong>El sobre nunca sale del host en claro</strong>: se cifra en el propio host con AES-256-CBC y PBKDF2 antes de enviar un solo byte (<code>openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -salt</code>). PBS solo recibe el sobre ya cifrado.",
"envelopeSecurityTitle": "¿No es un riesgo subir el archivo keyrecovery a PBS?",
"envelopeSecurityBody": "El sobre viaja y se guarda cifrado en todo momento. La passphrase de recuperación no sale nunca del host: el cifrado ocurre en local antes de la subida y PBS solo recibe el resultado ya cifrado. Un administrador de PBS —o cualquiera con acceso al datastore— puede descargar el sobre, pero sin la passphrase no puede leer la clave que contiene: son solo bytes cifrados. Para reconstruir la clave hacen falta las dos cosas a la vez, el sobre y la passphrase, y solo el usuario tiene ambas.",
"blobUploadConstraintTitle": "Por qué dos grupos y no uno solo cifrado",
"blobUploadConstraintBody": "Cada subida de <code>proxmox-backup-client backup</code> cifra todos sus archivos con la misma clave —o ninguno—. No hay opción intermedia. La copia del host tiene que ir cifrada con la clave. El sobre de recuperación no puede viajar en esa misma subida: quedaría cifrado con la clave que precisamente contiene, y en un equipo recién reinstalado no habría manera de abrirlo (haría falta la clave para descifrar la clave). Por eso salen dos subidas independientes y aparecen dos grupos separados: la copia del host la cifra PBS con la clave, y el sobre lo cifra ProxMenux con la passphrase antes de subirlo. Dos capas de cifrado distintas para dos cosas distintas.",
"blobUploadConstraintBody": "Una invocación de <code>proxmox-backup-client backup</code> cifra todos sus archivos con la misma clave o no cifra ninguno; no permite mezclar ambos casos. El backup del host se cifra con su archivo de clave, pero la envoltura de recuperación no puede acompañarla en la misma subida porque acabaría cifrada con la propia clave que contiene. En un host recién reinstalado sería imposible abrirla: haría falta la clave para descifrar esa misma clave. Por eso los dos artefactos se suben por separado y aparecen en dos grupos: el cliente PBS cifra el backup del host con el archivo de clave y ProxMenux cifra la envoltura con la frase de contraseña antes de subirla. Dos capas de cifrado distintas protegen dos elementos diferentes.",
"blobUploadImageAlt": "Interfaz de PBS mostrando los grupos hostcfg-HOSTNAME y hostcfg-HOSTNAME-keyrecovery adyacentes en el listado del datastore.",
"blobUploadImageCaption": "Interfaz de PBS — los grupos de copia emparejados. El grupo principal contiene las copias del host; el grupo -keyrecovery contiene la clave envuelta con la passphrase.",
"blobUploadImageCaption": "Interfaz de PBS — los grupos de backup emparejados. El grupo principal contiene los backups del host; el grupo -keyrecovery contiene la clave envuelta con la passphrase.",
"recoverTitle": "Recuperación en un equipo recién instalado",
"recoverBody": "Cuando la clave no está en su sitio —tras reinstalar el host desde cero o después de eliminarla a propósito— el flujo de restauración prueba tres fuentes en orden y se queda con la primera que produce una clave usable. Primero, si el repositorio PBS elegido tiene una clave gestionada por PVE en <code>/etc/pve/priv/storage/&lt;NAME&gt;.enc</code>, se copia sola a la ruta canónica. Segundo, si en PBS hay un grupo <code>-keyrecovery</code>, se descarga la copia más reciente y se pide la passphrase de recuperación para abrirla. Tercero, si ninguna de las dos anteriores funciona o el usuario las descarta, el diálogo pide la ruta absoluta donde ha dejado la clave en este host, y se copia a la ruta canónica. El Monitor expone el mismo flujo dentro del modal de la copia. Si al Restaurar, Descargar o Ver contenido falta la clave, aparece un panel ámbar arriba del modal con las mismas tres vías de importación. Si la clave está instalada pero no es la correcta para esa copia, PBS devuelve un error de tipo <code>wrong key — manifest's key XX does not match provided key YY</code> y el modal muestra un panel estructurado con el fingerprint que PBS espera (el que quedó grabado en el manifest de la copia), para que el usuario sepa qué clave concreta necesita importar.",
"recoverBody": "Cuando la clave no está en su sitio —tras reinstalar el host desde cero o después de eliminarla a propósito— el flujo de restauración prueba tres fuentes en orden y se queda con la primera que produce una clave usable. Primero, si el repositorio PBS elegido tiene una clave gestionada por PVE en <code>/etc/pve/priv/storage/&lt;NAME&gt;.enc</code>, se copia sola a la ruta canónica. Segundo, si en PBS hay un grupo <code>-keyrecovery</code>, se descarga el backup más reciente y se pide la passphrase de recuperación para abrirla. Tercero, si ninguna de las dos anteriores funciona o el usuario las descarta, el diálogo pide la ruta absoluta donde ha dejado la clave en este host, y se copia a la ruta canónica. El Monitor expone el mismo flujo dentro del modal del backup. Si al Restaurar, Descargar o Ver contenido falta la clave, aparece un panel ámbar arriba del modal con las mismas tres vías de importación. Si la clave está instalada pero no es la correcta para ese backup, PBS devuelve un error de tipo <code>wrong key — manifest's key XX does not match provided key YY</code> y el modal muestra un panel estructurado con el fingerprint que PBS espera (el que quedó grabado en el manifest del backup), para que el usuario sepa qué clave concreta necesita importar.",
"monitorManagementTitle": "Gestionar la clave desde el Monitor",
"monitorManagementBody": "En la página de configuración de copias, la fila de cada destino PBS incluye los controles de la clave. Tres acciones directas: <em>Descargar</em> exporta la clave actual al navegador. <em>Subir</em> reemplaza la clave instalada por otra que aporta el usuario (la anterior solo se sobrescribe cuando la nueva ha llegado correctamente a su sitio). <em>Eliminar</em> retira la clave del host. Justo al lado está el interruptor del sobre de recuperación: un Sí/No para subir o no la clave a PBS, un campo de passphrase que aparece al elegir Sí, y un botón que se adapta al estado actual (empezar a subir, dejar de subir, o cambiar la passphrase). Los controles del Monitor y el diálogo del shell hacen lo mismo por dentro, así que el resultado en disco y en PBS es idéntico se use la que se use."
"monitorManagementBody": "En la página de configuración de backups, la fila de cada destino PBS incluye los controles de la clave. Tiene tres acciones: <em>Descargar</em> exporta la clave actual al navegador del usuario, <em>Subir</em> reemplaza la clave instalada por otra que aporta el usuario (la anterior solo se sobrescribe cuando la nueva ha llegado correctamente a su ruta) y <em>Eliminar</em> retira la clave del host. Justo al lado está el interruptor del sobre de recuperación: un Sí/No para <em>¿Subir clave a PBS?</em>, un campo de passphrase que aparece al elegir Sí y un botón que se adapta al estado actual: <em>Empezar a subir</em>, <em>Dejar de subir</em> o <em>Actualizar passphrase</em>. Los controles del Monitor y el diálogo del shell hacen lo mismo por dentro, así que el resultado en disco y en PBS es idéntico se use el que se use."
},
"restoreAccess": {
"heading": "Recuperación del lado de la restauración",
"body": "El flujo de restauración descubre las copias de host de ProxMenux en PBS listando los grupos de backups bajo el repositorio configurado y filtrando por patrón de backup ID. La pestaña Backups del Monitor renderiza la misma lista. Seleccionar un backup dispara <code>proxmox-backup-client restore</code> con el mismo repositorio + contraseña + fingerprint (y <code>--keyfile</code> cuando el backup iba cifrado), extrayendo el <code>.pxar</code> a un directorio de staging que <code>_rs_check_layout</code> alimenta al pipeline estándar de restauración. Para recuperación manual fuera de ProxMenux, el mismo comando extrae el archivo a cualquier ruta — el árbol resultante puede inspeccionarse o alimentar una restauración a mano."
"body": "El flujo de restauración descubre los backups de host de ProxMenux en PBS listando los grupos de backups bajo el repositorio configurado y filtrando por patrón de backup ID. La pestaña Backups del Monitor renderiza la misma lista. Seleccionar un backup dispara <code>proxmox-backup-client restore</code> con el mismo repositorio + contraseña + fingerprint (y <code>--keyfile</code> cuando el backup iba cifrado), extrayendo el <code>.pxar</code> a un directorio de staging que <code>_rs_check_layout</code> alimenta al pipeline estándar de restauración. Para recuperación manual fuera de ProxMenux, el mismo comando extrae el archivo a cualquier ruta — el árbol resultante puede inspeccionarse o alimentar una restauración a mano."
},
"references": {
"heading": "Referencias",
@@ -91,7 +91,7 @@
{
"label": "proxmox-backup-client",
"href": "https://pbs.proxmox.com/docs/backup-client.html",
"tail": " — la herramienta de línea de comandos que ProxMenux invoca en cada copia y restauración. Cubre backup IDs, tipos de backup, archivos, sintaxis del repositorio y variables de entorno."
"tail": " — la herramienta de línea de comandos que ProxMenux invoca en cada backup y restauración. Cubre backup IDs, tipos de backup, archivos, sintaxis del repositorio y variables de entorno."
},
{
"label": "Cifrado del lado del cliente",
@@ -101,7 +101,7 @@
{
"label": "Gestión de datastores",
"href": "https://pbs.proxmox.com/docs/storage.html",
"tail": " — creación y administración de los datastores que reciben las copias de host, incluyendo el layout del chunk-store y permisos."
"tail": " — creación y administración de los datastores que reciben los backups de host, incluyendo el layout del chunk-store y permisos."
},
{
"label": "Poda y recolección de basura",
@@ -1,15 +1,15 @@
{
"meta": {
"title": "Glosario de términos — Backup & Restore | ProxMenux",
"description": "Glosario de términos y definiciones en español para el sistema de copia y restauración de ProxMenux: cifrado, clave, passphrase, sobre de recuperación, PBS, chunks, rootfs, manifiesto, runner y hidratación cross-kernel.",
"description": "Glosario de términos y definiciones en español para el sistema de backup y restauración de ProxMenux: cifrado, clave, passphrase, sobre de recuperación, PBS, chunks, rootfs, manifiesto, runner y hidratación cross-kernel.",
"ogTitle": "Glosario de Backup & Restore | ProxMenux",
"ogDescription": "Definiciones claras en español para los términos que aparecen en la documentación de copia y restauración de ProxMenux.",
"ogDescription": "Definiciones claras en español para los términos que aparecen en la documentación de backup y restauración de ProxMenux.",
"twitterTitle": "Glosario Backup & Restore | ProxMenux",
"twitterDescription": "Passphrase, keyfile, sobre de recuperación, rootfs, manifiesto, PBS, chunks — todo definido en español."
},
"header": {
"title": "Glosario",
"description": "Términos que aparecen a lo largo de la documentación de copia y restauración, con su definición.",
"description": "Términos que aparecen a lo largo de la documentación de backup y restauración, con su definición.",
"section": "Backup & Restore"
},
"intro": {
@@ -18,49 +18,42 @@
"groups": [
{
"title": "Cifrado y recuperación de clave",
"intro": "Terminología del bloque de cifrado de copias en PBS. Incluye dos secretos distintos: una clave binaria y una passphrase escrita.",
"intro": "Terminología del bloque de cifrado de backups en PBS. Incluye dos secretos distintos: una clave binaria y una passphrase escrita.",
"entries": [
{
"id": "passphrase-recuperacion",
"term": "Passphrase de recuperación",
"also": "recovery passphrase",
"def": "Contraseña de texto que elige el usuario para proteger el <a href=\"#sobre-recuperacion\">sobre de recuperación</a>. Se pide dos veces con validación de coincidencia y solo se usa para cifrar el sobre y para descifrarlo si algún día hay que recuperar la clave. <strong>No sirve para desbloquear la clave del keyfile</strong> ni se envía nunca a PBS. Nunca sale del host durante una copia normal."
"def": "Contraseña de texto que elige el usuario para proteger el <a href=\"#sobre-recuperacion\">sobre de recuperación</a>. Se pide dos veces con validación de coincidencia y solo se usa para cifrar el sobre y para descifrarlo si algún día hay que recuperar la clave. <strong>No sirve para desbloquear la clave del keyfile</strong> ni se envía nunca a PBS. Nunca sale del host durante un backup normal."
},
{
"id": "clave-cifrado",
"term": "Clave de cifrado (keyfile)",
"also": "keyfile, PBS encryption key",
"def": "Fichero binario que Proxmox Backup Server utiliza para cifrar los <a href=\"#chunk\">chunks</a> de la copia antes de subirlos. Sin ese fichero, ninguna copia cifrada puede leerse. ProxMenux lo guarda en <code>/usr/local/share/proxmenux/pbs-key.conf</code> con permisos <code>600</code>. Es el activo que hay que proteger; el <a href=\"#sobre-recuperacion\">sobre de recuperación</a> existe precisamente para poder rescatar este fichero si se pierde."
"def": "Archivo de clave que proxmox-backup-client usa para cifrar los <a href=\"#chunk\">chunks</a> antes de subirlos a PBS. Sin la clave correspondiente no se leen los datos cifrados. ProxMenux lo guarda en <code>/usr/local/share/proxmenux/pbs-key.conf</code> con modo <code>600</code>. Protégelo: el <a href=\"#sobre-recuperacion\">sobre de recuperación</a> permite recuperarlo si se pierde."
},
{
"id": "contrasena-keyfile",
"term": "Contraseña de la clave (KDF passphrase)",
"also": "keyfile passphrase, scrypt passphrase",
"def": "Contraseña opcional que puede llevar la propia clave, distinta de la <a href=\"#passphrase-recuperacion\">passphrase de recuperación</a>. Solo aparece si la clave se creó con <code>--kdf scrypt</code> (una clave importada de otro sitio, por ejemplo). Sin ella, la clave no se puede desbloquear en cada uso. ProxMenux la persiste cifrada en el host para que las copias programadas puedan ejecutarse sin diálogo interactivo."
"def": "Contraseña opcional que puede llevar la propia clave, distinta de la <a href=\"#passphrase-recuperacion\">passphrase de recuperación</a>. Solo aparece si la clave se creó con <code>--kdf scrypt</code> (una clave importada de otro sitio, por ejemplo). Sin ella, la clave no se puede desbloquear en cada uso. ProxMenux la persiste cifrada en el host para que los backups programados puedan ejecutarse sin diálogo interactivo."
},
{
"id": "sobre-recuperacion",
"term": "Sobre de recuperación",
"also": "recovery envelope, escrow blob, pbs-key.recovery.enc",
"def": "La propia <a href=\"#clave-cifrado\">clave de cifrado</a> envuelta en una capa adicional: se cifra con la <a href=\"#passphrase-recuperacion\">passphrase de recuperación</a> mediante <a href=\"#aes-256-cbc\">AES-256-CBC</a> y <a href=\"#pbkdf2\">PBKDF2</a> antes de salir del host. Es lo que se sube a PBS en el grupo <code>-keyrecovery</code>. Sin la passphrase, el sobre es opaco: descargarlo desde PBS no revela la clave."
},
{
"id": "cifrado-cliente",
"term": "Cifrado del lado del cliente",
"also": "client-side encryption",
"def": "Modelo en el que los datos se cifran en el host de origen antes de subirse. PBS solo recibe y almacena datos cifrados; ni siquiera un administrador de PBS con acceso al datastore puede leerlos sin la clave. ProxMenux se apoya en este modelo y añade el <a href=\"#sobre-recuperacion\">sobre de recuperación</a> encima."
},
{
"id": "kdf-none",
"term": "--kdf none",
"also": "clave sin contraseña",
"def": "Opción de <code>proxmox-backup-client key create</code> que genera una clave sin contraseña asociada. La clave se puede usar directamente sin ningún diálogo, lo que es imprescindible para que los trabajos programados corran de forma desatendida. Es lo que ProxMenux usa por defecto al generar una clave nueva."
},
{
"id": "kdf-scrypt",
"term": "--kdf scrypt",
"also": "clave con contraseña",
"def": "Opción de <code>proxmox-backup-client key create</code> que genera una clave protegida con una <a href=\"#contrasena-keyfile\">contraseña de la clave</a>. Cada vez que se usa la clave hay que desbloquearla con esa contraseña. ProxMenux acepta este tipo de claves al importarlas y guarda la contraseña cifrada para que las copias programadas puedan correr sin intervención."
"def": "Opción de <code>proxmox-backup-client key create</code> que genera una clave protegida con una <a href=\"#contrasena-keyfile\">contraseña de la clave</a>. Cada vez que se usa la clave hay que desbloquearla con esa contraseña. ProxMenux acepta este tipo de claves al importarlas y guarda la contraseña cifrada para que los backups programados puedan correr sin intervención."
},
{
"id": "aes-256-cbc",
@@ -75,8 +68,8 @@
]
},
{
"title": "Estructura de la copia",
"intro": "Términos que describen lo que hay dentro de una copia, sea cual sea el destino.",
"title": "Estructura del backup",
"intro": "Términos que describen lo que hay dentro de un backup, sea cual sea el destino.",
"entries": [
{
"id": "rootfs",
@@ -86,17 +79,17 @@
{
"id": "manifiesto",
"term": "Manifiesto (manifest.json)",
"def": "Documento JSON estructurado que describe el host de origen en el momento de la copia: hardware, almacenamiento, kernel, componentes instalados por ProxMenux e inventario de VMs y LXCs. Lo genera ProxMenux con seis colectores independientes. La restauración lo utiliza para comparar origen y destino."
"def": "Documento JSON estructurado que describe el host de origen en el momento del backup: hardware, almacenamiento, kernel, componentes instalados por ProxMenux e inventario de VMs y LXCs. Lo genera ProxMenux con seis colectores independientes. La restauración lo utiliza para comparar origen y destino."
},
{
"id": "staging",
"term": "Directorio de staging",
"def": "Directorio temporal donde ProxMenux ensambla los tres bloques (rootfs, metadata y manifiesto) antes de empaquetarlos y subirlos al destino. Se elimina automáticamente al terminar la copia, incluso si se aborta."
"def": "Directorio temporal donde ProxMenux ensambla los tres bloques (rootfs, metadata y manifiesto) antes de empaquetarlos y subirlos al destino. Se elimina automáticamente al terminar el backup, incluso si se aborta."
},
{
"id": "perfil-defecto",
"term": "Perfil por defecto",
"def": "Conjunto curado de rutas que ProxMenux copia por defecto en toda copia. Cubre configuración de PVE, red, SSH, kernel, apt, herramientas ProxMenux y otras. Está definido en el código y se documenta en la página <em>Cómo funciona</em>."
"def": "Conjunto curado de rutas que ProxMenux copia por defecto en todo backup. Cubre configuración de PVE, red, SSH, kernel, apt, herramientas ProxMenux y otras. Está definido en el código y se documenta en la página <em>Cómo funciona</em>."
},
{
"id": "rutas-personalizadas",
@@ -107,22 +100,22 @@
},
{
"title": "Destinos y almacenamiento",
"intro": "Términos ligados al lugar donde acaba la copia — servidor PBS, archivo local o repositorio Borg — y a la forma en que PBS organiza los datos.",
"intro": "Términos ligados al lugar donde acaba el backup — servidor PBS, archivo local o repositorio Borg — y a la forma en que PBS organiza los datos.",
"entries": [
{
"id": "repositorio-pbs",
"term": "Repositorio PBS",
"def": "Combinación de servidor Proxmox Backup Server + <a href=\"#datastore\">datastore</a> + usuario al que se suben las copias. Se identifica con el formato <code>usuario@realm@host:datastore</code>. Un mismo servidor PBS puede alojar varios repositorios."
"def": "Combinación de servidor Proxmox Backup Server + <a href=\"#datastore\">datastore</a> + usuario al que se suben los backups. Se identifica con el formato <code>user@realm@host:datastore</code>. Un mismo servidor PBS puede alojar varios repositorios."
},
{
"id": "datastore",
"term": "Datastore",
"def": "Almacén concreto dentro de un servidor PBS donde se guardan las copias y sus chunks. Cada datastore vive sobre un sistema de ficheros del servidor PBS y tiene sus propios permisos y políticas."
"def": "Almacén concreto dentro de un servidor PBS donde se guardan los backups y sus chunks. Cada datastore vive sobre un sistema de ficheros del servidor PBS y tiene sus propios permisos y políticas."
},
{
"id": "chunk",
"term": "Chunk / deduplicación por chunks",
"def": "PBS divide cada copia en trozos (chunks) de tamaño variable, identifica cada trozo por su hash y solo guarda cada trozo una vez, aunque aparezca en muchas copias distintas. Esto hace que copias sucesivas del mismo host o entre hosts similares consuman muy poco espacio adicional."
"def": "PBS divide cada backup en trozos (chunks) de tamaño variable, identifica cada trozo por su hash y solo guarda cada trozo una vez, aunque aparezca en muchos backups distintos. Esto hace que backups sucesivos del mismo host o entre hosts similares consuman muy poco espacio adicional."
},
{
"id": "fingerprint",
@@ -131,13 +124,13 @@
},
{
"id": "grupo-copia",
"term": "Grupo de copia (backup group)",
"def": "Contenedor lógico dentro de PBS bajo el cual se acumulan todas las copias sucesivas del mismo activo. Cada nueva copia comparte deduplicación con las anteriores del mismo grupo. ProxMenux utiliza dos grupos por host cuando hay cifrado: uno para la copia del host y otro con sufijo <code>-keyrecovery</code> para el <a href=\"#sobre-recuperacion\">sobre de recuperación</a>."
"term": "Grupo de backup (backup group)",
"def": "Contenedor lógico dentro de PBS bajo el cual se acumulan todos los backups sucesivos del mismo activo. Cada nuevo backup comparte deduplicación con los anteriores del mismo grupo. ProxMenux utiliza dos grupos por host cuando hay cifrado: uno para el backup del host y otro con sufijo <code>-keyrecovery</code> para el <a href=\"#sobre-recuperacion\">sobre de recuperación</a>."
},
{
"id": "backup-id",
"term": "Backup ID",
"def": "Nombre del <a href=\"#grupo-copia\">grupo de copia</a>. ProxMenux propone por defecto <code>hostcfg-HOSTNAME</code> y permite editarlo antes de la subida; los caracteres no admitidos se limpian automáticamente."
"def": "Nombre del <a href=\"#grupo-copia\">grupo de backup</a>. ProxMenux propone por defecto <code>hostcfg-HOSTNAME</code> y permite editarlo antes de la subida; los caracteres no admitidos se limpian automáticamente."
},
{
"id": "pxar",
@@ -153,17 +146,17 @@
{
"id": "runner",
"term": "Runner",
"def": "Script <code>run_scheduled_backup.sh</code> que ejecuta una copia programada. Lee la configuración del trabajo, lanza el backend correspondiente (Local, PBS o Borg), aplica la retención al terminar y envía las notificaciones configuradas."
"def": "Script <code>run_scheduled_backup.sh</code> que ejecuta un backup programado. Lee la configuración del trabajo, lanza el backend correspondiente (Local, PBS o Borg), aplica la retención al terminar y envía las notificaciones configuradas."
},
{
"id": "trabajo-programado",
"term": "Trabajo programado",
"def": "Configuración persistida de una copia recurrente. Incluye destino, credenciales, cifrado, horario y retención. Se guarda en <code>/var/lib/proxmenux/backup-jobs/&lt;id&gt;.env</code>."
"def": "Configuración persistida de un backup recurrente. Incluye destino, credenciales, cifrado, horario y retención. Se guarda en <code>/var/lib/proxmenux/backup-jobs/&lt;id&gt;.env</code>."
},
{
"id": "modo-adjunto",
"term": "Modo adjunto (attach mode)",
"def": "Trabajo programado que no lleva horario propio; se dispara automáticamente cada vez que una tarea <code>vzdump</code> de PVE existente se ejecuta. Hereda el horario y la retención de esa tarea padre. Solo compatible con destinos Local y PBS."
"def": "Trabajo sin timer propio. Un hook job-end de <code>vzdump</code> lo ejecuta después de los backups de invitados cuando coincide el almacenamiento. El padre seleccionado aporta el destino y la retención, que se vuelve a leer de la tarea padre en cada ejecución, pero el hook compara almacenamiento, no ID de tarea padre; otra tarea con el mismo destino también puede activarlo. Solo para Local y PBS."
},
{
"id": "timer-systemd",
@@ -173,7 +166,7 @@
{
"id": "retencion",
"term": "Retención (keep-last, keep-daily…)",
"def": "Política que decide qué copias antiguas se conservan y cuáles se eliminan. Se define por trabajo con parámetros como <code>keep-last</code>, <code>keep-daily</code>, <code>keep-weekly</code>, <code>keep-monthly</code>. El runner la aplica después de cada copia exitosa."
"def": "Política que decide qué backups antiguos se conservan y cuáles se eliminan. Se define por trabajo con parámetros como <code>keep-last</code>, <code>keep-daily</code>, <code>keep-weekly</code>, <code>keep-monthly</code>. El runner la aplica después de cada backup exitoso."
}
]
},
@@ -189,7 +182,7 @@
{
"id": "hidratacion",
"term": "Hidratación (cross-kernel)",
"def": "Pasada de restauración que funde la configuración propia del usuario del origen (tokens IOMMU, IDs de dispositivos VFIO, quirks personalizadas, claves de GRUB) sobre la configuración de arranque fresca del destino, sin copiar verbatim los ficheros ligados al kernel del origen. Se ejecuta cuando el kernel del destino es más reciente que el de la copia."
"def": "Pasada de restauración que funde la configuración propia del usuario del origen (tokens IOMMU, IDs de dispositivos VFIO, quirks personalizadas, claves de GRUB) sobre la configuración de arranque fresca del destino, sin copiar verbatim los ficheros ligados al kernel del origen. Se ejecuta cuando el kernel del destino es más reciente que el del backup."
},
{
"id": "cross-kernel",
@@ -209,8 +202,7 @@
{
"id": "equipo-recien-instalado",
"term": "Equipo recién instalado",
"also": "fresh install",
"def": "Host acabado de reinstalar desde cero, sin la <a href=\"#clave-cifrado\">clave de cifrado</a> local. Para restaurar copias cifradas hace falta primero recuperar la clave desde el <a href=\"#sobre-recuperacion\">sobre</a> almacenado en PBS, con la <a href=\"#passphrase-recuperacion\">passphrase de recuperación</a>."
"def": "Host acabado de reinstalar desde cero, sin la <a href=\"#clave-cifrado\">clave de cifrado</a> local. Para restaurar backups cifrados hace falta primero recuperar la clave desde el <a href=\"#sobre-recuperacion\">sobre</a> almacenado en PBS, con la <a href=\"#passphrase-recuperacion\">passphrase de recuperación</a>."
}
]
}
@@ -221,7 +213,7 @@
{
"label": "Cómo funciona",
"href": "/docs/backup-restore/how-it-works",
"tail": " — dónde encajan el rootfs, el manifiesto y el inventario de aplicaciones en cada copia."
"tail": " — dónde encajan el rootfs, el manifiesto y el inventario de aplicaciones en cada backup."
},
{
"label": "Destino Proxmox Backup Server",
@@ -1,38 +1,38 @@
{
"meta": {
"title": "Cómo funciona ProxMenux Backup por dentro — rootfs, manifiesto, aplicaciones",
"description": "Desglose detallado del contenido de una copia de ProxMenux: el rootfs producido por rsync del perfil de rutas por defecto, el manifiesto estructurado construido por seis colectores independientes, y el inventario de aplicaciones que dirige la reinstalación automática de paquetes y componentes tras una restauración.",
"description": "Desglose detallado del contenido de un backup de ProxMenux: el rootfs producido por rsync del perfil de rutas por defecto, el manifiesto estructurado construido por seis colectores independientes, y el inventario de aplicaciones que dirige la reinstalación automática de paquetes y componentes tras una restauración.",
"ogTitle": "Cómo funciona ProxMenux Backup por dentro",
"ogDescription": "Los tres bloques de una copia de ProxMenux explicados: rootfs, manifiesto y aplicaciones.",
"ogDescription": "Los tres bloques de un backup de ProxMenux explicados: rootfs, manifiesto y aplicaciones.",
"twitterTitle": "Cómo funciona ProxMenux Backup | ProxMenux",
"twitterDescription": "Los tres bloques de una copia de ProxMenux y cómo la restauración reproduce el host de origen a partir de ellos."
"twitterDescription": "Los tres bloques de un backup de ProxMenux y cómo la restauración reproduce el host de origen a partir de ellos."
},
"header": {
"title": "Cómo funciona",
"description": "Desglose interno de una copia de seguridad creada con ProxMenux — sistema de ficheros, manifiesto e inventario de aplicaciones — y cómo la restauración consume los tres para reproducir el host de origen sobre un destino que puede no compartir el mismo kernel.",
"description": "Desglose interno de un backup creado con ProxMenux — sistema de ficheros, manifiesto e inventario de aplicaciones — y cómo la restauración consume los tres para reproducir el host de origen sobre un destino que puede no compartir el mismo kernel.",
"section": "Backup & Restore"
},
"intro": {
"title": "Un archivo, tres bloques",
"body": "Cada copia produce un layout de directorio con tres bloques bien definidos bajo una única raíz de staging. El archivo que se sube al destino (archivo local <code>.tar.zst</code>, backup PBS o archivo Borg) contiene ese layout exacto. La restauración lee los tres bloques de forma independiente, en un orden concreto que garantiza la corrección: primero se copia el <strong>rootfs</strong> —el sistema de archivos raíz del host— para colocar la configuración, después se consulta <strong>el manifiesto</strong> para detectar drift y decidir qué omitir, y finalmente <strong>el inventario de aplicaciones</strong> dirige la pasada de reinstalación post-arranque. No hay dependencias entre bloques — cada uno puede inspeccionarse o extraerse de forma independiente."
"body": "Cada backup produce una estructura con tres bloques definidos bajo un único directorio de preparación. El archivo subido al destino (<code>.tar.zst</code> local, backup PBS o archivo Borg) contiene esa misma estructura. La restauración utiliza los tres: consulta <strong>el manifiesto</strong> antes de aplicar cambios para detectar diferencias y decidir qué omitir; <strong>rootfs</strong> aporta los archivos de configuración, que se aplican en vivo o tras el reinicio; y <strong>el inventario de aplicaciones</strong> dirige la instalación de paquetes y la reinstalación de componentes después del arranque. Cada bloque puede inspeccionarse o extraerse de forma independiente."
},
"layout": {
"heading": "Layout del archivo",
"intro": "Cada archivo respeta el mismo layout con independencia del destino. El subdirectorio <code>metadata/</code> contiene los bloques estructurados; el subdirectorio <code>rootfs/</code> contiene la copia del sistema de ficheros.",
"treeCaption": "El directorio de staging generado durante una copia. Todos los destinos reciben el mismo árbol (adaptado a su formato nativo: tar para local, chunks PBS para PBS, segmentos borg para Borg).",
"intro": "Cada archivo respeta el mismo layout con independencia del destino. El subdirectorio <code>metadata/</code> contiene los bloques estructurados; el subdirectorio <code>rootfs/</code> contiene el backup del sistema de ficheros.",
"treeCaption": "El directorio de staging generado durante un backup. Todos los destinos reciben el mismo árbol (adaptado a su formato nativo: tar para local, chunks PBS para PBS, segmentos borg para Borg).",
"tree": "backup-[timestamp]/\n├── manifest.json # estado estructurado del host\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # identidad de la ejecución + versión del kernel + método pmxcfs\n│ ├── paths_archived.txt # lista exacta de rutas que llegaron a rootfs/\n│ └── missing_paths.txt # rutas del perfil ausentes en el origen\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (con subdirs volátiles excluidos)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db vía sqlite3 .backup), /var/spool/cron/…"
},
"rootfs": {
"heading": "El bloque rootfs",
"intro": "El árbol <code>rootfs/</code> es una <strong>copia plana del sistema de ficheros</strong> producida por <code>rsync</code> desde el host de origen. Contiene un <strong>perfil por defecto</strong> curado de rutas que importan para una restauración de Proxmox, más cualquier <strong>ruta personalizada</strong> añadida por el usuario al trabajo de copia o a la sesión interactiva. El conjunto es intencionadamente estrecho: solamente rutas que <em>contienen configuración</em> o <em>contienen estado que Proxmox no puede regenerar por sí solo</em>.",
"intro": "El árbol <code>rootfs/</code> es una <strong>copia plana del sistema de ficheros</strong> producida por <code>rsync</code> desde el host de origen. Contiene un <strong>perfil por defecto</strong> curado de rutas que importan para una restauración de Proxmox, más cualquier <strong>ruta personalizada</strong> añadida por el usuario al trabajo de backup o a la sesión interactiva. El conjunto es intencionadamente estrecho: solamente rutas que <em>contienen configuración</em> o <em>contienen estado que Proxmox no puede regenerar por sí solo</em>.",
"defaultProfileTitle": "El perfil por defecto",
"defaultProfileBody": "El perfil por defecto está definido por <code>hb_default_profile_paths</code> en <code>lib_host_backup_common.sh</code>. Cubre ocho categorías que en conjunto describen un host Proxmox operativo:",
"defaultProfileBody": "El perfil por defecto se define en <code>hb_default_profile_paths</code> de <code>lib_host_backup_common.sh</code>. Incluye ocho categorías fijas y, si corresponde, el estado ZFS, que juntas describen un host Proxmox operativo:",
"categoriesTitle": "Categorías de rutas",
"categoryRows": [
{
"category": "Núcleo PVE",
"paths": "/etc/pve, /var/lib/pve-cluster, /etc/vzdump.conf",
"why": "Contenido del filesystem del clúster y valores por defecto de vzdump. La base pmxcfs (<code>config.db</code>) se captura con un snapshot consistente vía <code>sqlite3 .backup</code> sin parar el clúster, y los sidecars <code>.db-wal</code> y <code>.db-shm</code> quedan excluidos del rsync. Si <code>sqlite3</code> no está disponible, la copia deposita un <code>config.db.raw-fallback</code> que la restauración promociona automáticamente."
"why": "Contenido del filesystem del clúster y valores por defecto de vzdump. La base pmxcfs (<code>config.db</code>) se captura con un snapshot consistente vía <code>sqlite3 .backup</code> sin parar el clúster, y los sidecars <code>.db-wal</code> y <code>.db-shm</code> quedan excluidos del rsync. Si <code>sqlite3</code> no está disponible, el backup deposita un <code>config.db.raw-fallback</code> que la restauración promociona automáticamente."
},
{
"category": "Identidad del host y red",
@@ -62,12 +62,12 @@
{
"category": "Estado ProxMenux y herramientas",
"paths": "/etc/proxmenux, /etc/systemd/system, /etc/log2ram.conf, /etc/logrotate.conf, /etc/logrotate.d, /etc/lm-sensors, /etc/sensors3.conf, /etc/fail2ban, /etc/snmp, /etc/postfix, /etc/wireguard, /etc/openvpn, /etc/grafana, /etc/influxdb, /etc/prometheus, /etc/telegraf, /etc/zabbix",
"why": "Herramientas opcionales pero habituales de Proxmox. Las rutas ausentes se registran en <code>metadata/missing_paths.txt</code> sin detener la copia."
"why": "Herramientas opcionales pero habituales de Proxmox. Las rutas ausentes se registran en <code>metadata/missing_paths.txt</code> sin detener el backup."
},
{
"category": "Binarios ProxMenux y root",
"paths": "/usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux, /var/lib/proxmenux, /root (subdirs volátiles excluidos)",
"why": "Binarios instalados por ProxMenux y configuración por usuario bajo <code>/root</code>. Las rutas volátiles (<code>.bash_history</code>, <code>.cache/</code>, <code>tmp/</code>, <code>.local/share/Trash/</code>) quedan fuera de la copia. <code>/var/lib/proxmenux</code> guarda los trabajos de backup programados y el estado del host que mantiene ProxMenux; quedan fuera la preparación de una restauración, las copias de rollback y las marcas posteriores a la restauración, porque pertenecen al host que la ejecuta."
"why": "Binarios instalados por ProxMenux y configuración por usuario bajo <code>/root</code>. Las rutas volátiles (<code>.bash_history</code>, <code>.cache/</code>, <code>tmp/</code>, <code>.local/share/Trash/</code>) quedan fuera del backup. <code>/var/lib/proxmenux</code> guarda los trabajos de backup programados y el estado del host que mantiene ProxMenux; quedan fuera la preparación de una restauración, los backups de rollback y las marcas posteriores a la restauración, porque pertenecen al host que la ejecuta."
},
{
"category": "Estado ZFS (condicional)",
@@ -76,18 +76,18 @@
}
],
"customTitle": "Ampliar el perfil con rutas propias",
"customBody": "Además del perfil por defecto, ProxMenux ofrece dos maneras de incluir rutas adicionales en una copia. Se combinan sin conflicto y ambas se aplican tanto a copias interactivas como a trabajos programados.",
"customBody": "Además del perfil por defecto, ProxMenux ofrece dos maneras de incluir rutas adicionales en un backup. Se combinan sin conflicto y ambas se aplican tanto a backups interactivos como a trabajos programados.",
"customExtrasTitle": "1. Extras persistentes (fichero por-host)",
"customExtrasBody": "Un fichero de texto en <code>/usr/local/share/proxmenux/backup-extra-paths.txt</code> guarda una lista de rutas absolutas que el usuario ha marcado como \"incluir siempre\" en este host. Cuando una copia se ejecuta en modo <strong>Default</strong>, ProxMenux añade automáticamente estas rutas al perfil por defecto sin preguntar. El fichero se edita desde la interfaz — no hay que tocarlo a mano — y persiste entre reinicios y actualizaciones. Cada línea es una ruta absoluta; se admiten comentarios con <code>#</code>.",
"customExtrasBody": "Un fichero de texto en <code>/usr/local/share/proxmenux/backup-extra-paths.txt</code> guarda una lista de rutas absolutas que el usuario ha marcado como \"incluir siempre\" en este host. Cuando un backup se ejecuta en modo <strong>Default</strong>, ProxMenux añade automáticamente estas rutas al perfil por defecto sin preguntar. El fichero se edita desde la interfaz — no hay que tocarlo a mano — y persiste entre reinicios y actualizaciones. Cada línea es una ruta absoluta; se admiten comentarios con <code>#</code>.",
"customModeTitle": "2. Modo Custom (por ejecución)",
"customModeBody": "Al lanzar una copia en modo <strong>Custom</strong>, en lugar de aplicar el perfil por defecto directamente, se muestra un checklist con todas las rutas: las del perfil por defecto y las de extras persistentes (estas últimas premarcadas con <code>[+]</code>). El usuario marca o desmarca lo que quiera para esa ejecución concreta, y puede además pulsar <em>Add custom path</em> para introducir una ruta nueva — que queda registrada en el fichero de extras persistentes para futuras copias.",
"customModeBody": "Al lanzar un backup en modo <strong>Custom</strong>, en lugar de aplicar el perfil por defecto directamente, se muestra un checklist con todas las rutas: las del perfil por defecto y las de extras persistentes (estas últimas premarcadas con <code>[+]</code>). El usuario marca o desmarca lo que quiera para esa ejecución concreta, y puede además pulsar <em>Add custom path</em> para introducir una ruta nueva — que queda registrada en el fichero de extras persistentes para futuros backups.",
"customMissingTitle": "Rutas ausentes en el origen",
"customMissingBody": "Cualquier ruta del perfil (por defecto o añadida) que no exista en el host de origen se registra en <code>metadata/missing_paths.txt</code> dentro del archivo. La copia no falla ni interrumpe — el usuario ve el resumen de rutas archivadas y rutas ausentes al terminar. En la práctica esto ocurre con las rutas de herramientas opcionales como <code>/etc/wireguard</code> o <code>/etc/prometheus</code> cuando esas herramientas no están instaladas."
"customMissingBody": "Cualquier ruta del perfil (por defecto o añadida) que no exista en el host de origen se registra en <code>metadata/missing_paths.txt</code> dentro del archivo. El backup no falla ni interrumpe — el usuario ve el resumen de rutas archivadas y rutas ausentes al terminar. En la práctica esto ocurre con las rutas de herramientas opcionales como <code>/etc/wireguard</code> o <code>/etc/prometheus</code> cuando esas herramientas no están instaladas."
},
"manifest": {
"heading": "El bloque manifiesto",
"intro": "<code>manifest.json</code> es un documento JSON estructurado que describe el host de origen en el momento de la copia. Se produce mediante <strong>seis colectores independientes</strong> orquestados por <code>build_manifest.sh</code>. Cada colector es de sólo lectura, produce un fragmento JSON bien definido y hace fallback a un valor vacío seguro si falla — el manifiesto sigue siendo utilizable aunque una sección quede incompleta.",
"orchestratorCaption": "Los seis colectores componen el manifiesto. Cada uno corre en su propio subproceso; un fallo en uno hace fallback al valor por defecto documentado y advierte, pero no aborta la copia.",
"intro": "<code>manifest.json</code> es un documento JSON estructurado que describe el host de origen en el momento del backup. Se produce mediante <strong>seis colectores independientes</strong> orquestados por <code>build_manifest.sh</code>. Cada colector es de sólo lectura, produce un fragmento JSON bien definido y hace fallback a un valor vacío seguro si falla — el manifiesto sigue siendo utilizable aunque una sección quede incompleta.",
"orchestratorCaption": "Los seis colectores componen el manifiesto. Cada uno corre en su propio subproceso; un fallo en uno hace fallback al valor por defecto documentado y advierte, pero no aborta el backup.",
"collectorRows": [
{
"collector": "collect_source_host.sh",
@@ -117,15 +117,15 @@
{
"collector": "collect_guests.sh",
"produces": "vms_lxcs_at_backup",
"content": "Enumera VMs (<code>qm list</code>) y LXCs (<code>pct list</code>) presentes en el momento de la copia — VMID, nombre, estado actual. Sólo el inventario: los datos reales del invitado son responsabilidad de <code>vzdump</code> / PBS."
"content": "Enumera VMs (<code>qm list</code>) y LXCs (<code>pct list</code>) presentes en el momento del backup — VMID, nombre, estado actual. Sólo el inventario: los datos reales del invitado son responsabilidad de <code>vzdump</code> / PBS."
}
],
"schemaTitle": "Validación por esquema",
"schemaBody": "ProxMenux incluye una plantilla que describe qué campos debe contener el manifiesto y qué forma tiene cada uno. Cuando se genera una copia se puede comprobar automáticamente que el manifiesto respeta esa plantilla, de modo que si un colector produjera un JSON malformado o con un campo mal escrito se detectaría en el momento. Es una comprobación destinada al desarrollo del propio ProxMenux: si el sistema no la tiene instalada, la copia sigue funcionando con normalidad y el manifiesto se genera igual."
"schemaBody": "El manifiesto se valida con <code>scripts/backup_restore/schema/manifest.schema.json</code>. Ejecutar <code>build_manifest.sh --validate</code> activa una validación JSON Schema en Python (requiere <code>python3</code> y <code>jsonschema</code>). Si el módulo no está instalado, se omite la comprobación sin mostrar ningún aviso: esta validación es principalmente una ayuda para el desarrollo, no una dependencia necesaria durante la ejecución."
},
"applications": {
"heading": "El inventario de aplicaciones",
"intro": "Dos ficheros bajo <code>metadata/</code> catalogan todo lo instalado en el origen que no forma parte del conjunto de paquetes base de Proxmox VE. La restauración los utiliza para reproducir el conjunto exacto de software instalado por el usuario en el destino, usando APT o los instaladores propios de ProxMenux según cómo se instalara originalmente el software.",
"intro": "Dos inventarios registran el software añadido al conjunto base de Proxmox VE: la lista de paquetes en <code>metadata/</code> y el registro de componentes dentro de rootfs, detallados a continuación. La restauración los usa para reproducir el software del usuario con APT o los instaladores de ProxMenux, según cómo se instalara originalmente.",
"packagesTitle": "packages.manual.list",
"packagesBody": "Una lista de texto plano producida por <code>apt-mark showmanual</code>: todos los paquetes APT que fueron <em>instalados explícitamente</em> en el host de origen, ordenados alfabéticamente. Esto excluye los paquetes instalados como dependencias del ISO base de Proxmox VE (que APT del destino vuelve a traer automáticamente). Es leída por <code>_rs_run_complete_extras</code> durante la restauración, filtrada por un filtro <em>cascade-safe</em> de tres pases (<code>dpkg -s</code> para lo ya instalado, detección de sibling-major para librerías, <code>apt-get install --simulate</code> para riesgo de cascade-remove) y después instalada con <code>apt-get install -y</code>.",
"componentsTitle": "components_status.json (parte del rootfs)",
+16 -16
View File
@@ -1,20 +1,20 @@
{
"meta": {
"title": "ProxMenux Backup & Restore — Descripción general | Copia y restauración completa del host Proxmox VE",
"description": "ProxMenux Backup & Restore captura el estado completo de un host Proxmox — sistema de ficheros, manifiesto estructurado de configuración y paquetes/componentes instalados — y lo reproduce en el mismo host o en uno distinto. La copia y la restauración son autocontenidas: sin dependencias externas, y con soporte para restauraciones cross-kernel mediante un filtro direccional de subconjunto seguro y una hidratación kernel-agnóstica.",
"title": "ProxMenux Backup & Restore — Descripción general | Backup y restauración completa del host Proxmox VE",
"description": "ProxMenux Backup & Restore captura el estado completo de un host Proxmox — sistema de ficheros, manifiesto estructurado de configuración y paquetes/componentes instalados — y lo reproduce en el mismo host o en uno distinto. El backup y la restauración son autocontenidos: sin dependencias externas, y con soporte para restauraciones cross-kernel mediante un filtro direccional de subconjunto seguro y una hidratación kernel-agnóstica.",
"ogTitle": "ProxMenux Backup & Restore — Descripción general",
"ogDescription": "Copia y restauración completa del host Proxmox VE con manifiesto estructurado, lista de paquetes y reinstaladores de componentes.",
"ogDescription": "Backup y restauración completa del host Proxmox VE con manifiesto estructurado, lista de paquetes y reinstaladores de componentes.",
"twitterTitle": "ProxMenux Backup & Restore | ProxMenux",
"twitterDescription": "Copia y restauración completa del host Proxmox VE con manifiesto estructurado, lista de paquetes y reinstaladores de componentes."
"twitterDescription": "Backup y restauración completa del host Proxmox VE con manifiesto estructurado, lista de paquetes y reinstaladores de componentes."
},
"header": {
"title": "Backup & Restore",
"description": "Copia y restauración a nivel de host para Proxmox VE. Captura el sistema de ficheros, la configuración y los componentes instalados en un único archivo y reproduce el host sobre la misma instalación de Proxmox o sobre una distinta, sin dependencias externas.",
"description": "Backup y restauración a nivel de host para Proxmox VE. Captura el sistema de ficheros, la configuración y los componentes instalados en un único archivo y reproduce el host sobre la misma instalación de Proxmox o sobre una distinta, sin dependencias externas.",
"section": "Backup & Restore"
},
"intro": {
"title": "Qué es, en un párrafo",
"body": "Una copia de ProxMenux captura el estado completo de un host Proxmox: <strong>el sistema de ficheros</strong> (directorios relevantes bajo <code>/etc</code>, <code>/root</code>, <code>/var/lib/pve-cluster</code>, más rutas personalizadas opcionales), <strong>un manifiesto estructurado</strong> (JSON con el hardware detectado, los parámetros del kernel, la topología de red, el estado de ZFS, los usuarios y las entradas de cron) y <strong>un inventario de aplicaciones</strong> (todos los paquetes marcados como instalados manualmente por APT, más la lista de componentes instalados por ProxMenux con sus versiones exactas). Cualquiera de los tres destinos soportados — archivo local, Proxmox Backup Server (recomendado) o Borg — recibe el mismo contenido autocontenido, y cualquiera de ellos puede hidratar el host de destino sin depender de que el origen esté accesible en el momento de la restauración."
"body": "Un backup de ProxMenux captura el estado completo de un host Proxmox: <strong>el sistema de ficheros</strong> (directorios relevantes bajo <code>/etc</code>, <code>/root</code>, <code>/var/lib/pve-cluster</code>, más rutas personalizadas opcionales), <strong>un manifiesto estructurado</strong> (JSON con el hardware detectado, los parámetros del kernel, la topología de red, el estado de ZFS, los usuarios y las entradas de cron) y <strong>un inventario de aplicaciones</strong> (todos los paquetes marcados como instalados manualmente por APT, más la lista de componentes instalados por ProxMenux con sus versiones exactas). Cualquiera de los tres destinos soportados — archivo local, Proxmox Backup Server (recomendado) o Borg — recibe el mismo contenido autocontenido, y cualquiera de ellos puede hidratar el host de destino sin depender de que el origen esté accesible en el momento de la restauración."
},
"video": {
"heading": "Vídeo demostración",
@@ -24,17 +24,17 @@
},
"whatItIsNot": {
"heading": "Qué no es",
"intro": "La sección cubre copia y restauración <strong>a nivel de host</strong>: la instalación de Proxmox en sí, no las cargas de trabajo que se ejecutan sobre ella.",
"intro": "La sección cubre backup y restauración <strong>a nivel de host</strong>: la instalación de Proxmox en sí, no las cargas de trabajo que se ejecutan sobre ella.",
"items": [
"<strong>No es una herramienta de copia de VMs/CTs.</strong> Los discos de los invitados y su estado de RAM no se capturan en esta función; para eso está <code>vzdump</code>. Los <strong>ficheros de configuración</strong> de los invitados (<code>/etc/pve/nodes/&lt;node&gt;/qemu-server/*.conf</code> y <code>lxc/*.conf</code>) <strong>sí</strong> se capturan, de modo que tras la restauración el inventario de invitados reaparece y sus discos pueden re-adjuntarse desde una copia existente de PBS o local.",
"<strong>No es una herramienta de backup de VMs/CTs.</strong> Los discos de los invitados y su estado de RAM no se capturan en esta función; para eso está <code>vzdump</code>. Los <strong>ficheros de configuración</strong> de los invitados (<code>/etc/pve/nodes/&lt;node&gt;/qemu-server/*.conf</code> y <code>lxc/*.conf</code>) <strong>sí</strong> se capturan, de modo que tras la restauración el inventario de invitados reaparece y sus discos pueden re-adjuntarse desde un backup existente de PBS o local.",
"<strong>No es una operación a nivel de clúster.</strong> Cada nodo se copia a sí mismo. La pertenencia al clúster se captura como parte de <code>/etc/pve</code> para que un nodo restaurado pueda re-incorporarse al clúster, pero restaurar un clúster completo requiere coordinación por nodo.",
"<strong>No es una imagen completa del disco.</strong> Los binarios del kernel, el initramfs y la partición de arranque no se capturan. En la restauración, ProxMenux utiliza los artefactos de arranque propios del host de destino (regenerados automáticamente por <code>update-initramfs</code> y la herramienta de bootloader) e instala los controladores adecuados contra el kernel que el destino tenga en ejecución."
]
},
"threePillars": {
"heading": "Los tres pilares de una copia",
"heading": "Los tres pilares de un backup",
"intro": "Un archivo de ProxMenux se estructura en torno a tres cargas útiles autocontenidas. La restauración utiliza las tres en conjunto para reproducir el host de origen sobre un destino que puede no tener siquiera el mismo kernel instalado.",
"diagramCaption": "Cada copia contiene los mismos tres bloques con independencia del destino. La restauración los consume todos: rootfs para colocar los ficheros, manifiesto para detectar drift y diferencias cross-kernel, e inventario de aplicaciones para reinstalar paquetes y componentes contra el kernel del propio destino.",
"diagramCaption": "Cada backup contiene los mismos tres bloques con independencia del destino. La restauración los consume todos: rootfs para colocar los ficheros, manifiesto para detectar drift y diferencias cross-kernel, e inventario de aplicaciones para reinstalar paquetes y componentes contra el kernel del propio destino.",
"pillar1Label": "Sistema de ficheros",
"pillar1Detail": "rootfs/\n(rsync de /etc,\n/etc/systemd/network,\n/root, más snapshot\nsqlite3 de\n/var/lib/pve-cluster,\n+ rutas opcionales)",
"pillar2Label": "Manifiesto",
@@ -44,11 +44,11 @@
},
"restoreIsUniversal": {
"heading": "La restauración reproduce el host de origen, no el archivo",
"body": "Restaurar una copia de seguridad no consiste solamente en extraer el sistema de ficheros. El flujo de restauración lee el manifiesto para detectar diferencias entre origen y destino (variaciones de hardware, renombrado de NICs, versión de kernel, identidad de la pool ZFS), reproduce el sistema de ficheros y lanza el instalador correspondiente a cada servicio que estuviera instalado en el origen (controlador NVIDIA, Coral TPU, herramientas AMD GPU, herramientas Intel GPU). Cada instalador se ejecuta contra el <strong>kernel actual del destino</strong>, por lo que el host restaurado no depende de que el kernel del origen esté presente. Cuando el kernel del destino es más reciente que el de la copia, una pasada de <strong>hidratación</strong> kernel-agnóstica funde la configuración propia del usuario (tokens IOMMU, IDs de dispositivos VFIO, quirks personalizadas, claves de GRUB) sobre la configuración de arranque fresca del destino, sin copiar verbatim los ficheros ligados al kernel."
"body": "Restaurar un backup no consiste solamente en extraer el sistema de ficheros. El flujo de restauración lee el manifiesto para detectar diferencias entre origen y destino (variaciones de hardware, renombrado de NICs, versión de kernel, identidad de la pool ZFS), reproduce el sistema de ficheros y lanza el instalador correspondiente a cada servicio que estuviera instalado en el origen (controlador NVIDIA, Coral TPU, herramientas AMD GPU, herramientas Intel GPU). Cada instalador se ejecuta contra el <strong>kernel actual del destino</strong>, por lo que el host restaurado no depende de que el kernel del origen esté presente. Cuando el kernel del destino es más reciente que el del backup, una pasada de <strong>hidratación</strong> kernel-agnóstica funde la configuración propia del usuario (tokens IOMMU, IDs de dispositivos VFIO, quirks personalizadas, claves de GRUB) sobre la configuración de arranque fresca del destino, sin copiar verbatim los ficheros ligados al kernel."
},
"twoInterfaces": {
"heading": "Dos interfaces, un único backend",
"intro": "Cada paso del flujo de copia y restauración está disponible desde dos puntos de entrada. Ambos invocan la misma librería de shell, producen archivos idénticos y leen el mismo registro de trabajos.",
"intro": "Cada paso del flujo de backup y restauración está disponible desde dos puntos de entrada. Ambos invocan la misma librería de shell, producen archivos idénticos y leen el mismo registro de trabajos.",
"cliLabel": "ProxMenux Scripts (TUI)",
"cliDetail": "menu → Utilities →\nHost Backup / Restore\n\nFlujo basado en diálogos,\namigable por SSH, admite\nejecución desatendida\ndesde scripts.",
"webLabel": "ProxMenux Monitor (Web UI)",
@@ -56,7 +56,7 @@
},
"whereNext": {
"heading": "A dónde seguir desde aquí",
"intro": "Cada subsección posterior desarrolla en detalle un aspecto del flujo. Se recomienda empezar por <em>Cómo funciona</em> para entender qué contiene el archivo y por qué. Consultar <em>Destinos</em> para configurar el destino de la copia. Leer <em>Restauración</em> y <em>Restauración cross-kernel</em> para el lado de recuperación.",
"intro": "Cada subsección posterior desarrolla en detalle un aspecto del flujo. Se recomienda empezar por <em>Cómo funciona</em> para entender qué contiene el archivo y por qué. Consultar <em>Destinos</em> para configurar el destino del backup. Leer <em>Restauración</em> y <em>Restauración cross-kernel</em> para el lado de recuperación.",
"items": [
{
"label": "Cómo funciona",
@@ -69,9 +69,9 @@
"tail": " — comparativa entre archivo local, Proxmox Backup Server (recomendado) y Borg, y cómo configurar cada uno."
},
{
"label": "Crear copias",
"label": "Crear backups",
"href": "/docs/backup-restore/creating-backups",
"tail": " — copias puntuales, perfil de rutas por defecto, adición de rutas personalizadas, cifrado en PBS."
"tail": " — backups puntuales, perfil de rutas por defecto, adición de rutas personalizadas, cifrado en PBS."
},
{
"label": "Trabajos programados",
@@ -86,7 +86,7 @@
{
"label": "Restauración cross-kernel",
"href": "/docs/backup-restore/cross-kernel",
"tail": " — comportamiento direccional cuando el kernel del destino difiere del de la copia, el filtro de subconjunto seguro y las cuatro fases de hidratación."
"tail": " — comportamiento direccional cuando el kernel del destino difiere del del backup, el filtro de subconjunto seguro y las cuatro fases de hidratación."
}
]
}
@@ -1,32 +1,32 @@
{
"meta": {
"title": "Restaurar una copia — flujos Completo y Personalizado | ProxMenux",
"description": "El flujo completo de restauración. Documenta las tres acciones disponibles sobre cualquier copia (ver, descargar, restaurar), la comprobación de compatibilidad y sus resultados, los modos Completo y Personalizado, la clasificación de rutas que decide qué se aplica en vivo y qué espera al siguiente arranque, el dispatcher de arranque y la pasada de reinstalación post-arranque de componentes.",
"title": "Restaurar un backup — flujos Completo y Personalizado | ProxMenux",
"description": "El flujo completo de restauración. Documenta las tres acciones disponibles sobre cualquier backup (ver, descargar, restaurar), la comprobación de compatibilidad y sus resultados, los modos Completo y Personalizado, la clasificación de rutas que decide qué se aplica en vivo y qué espera al siguiente arranque, el dispatcher de arranque y la pasada de reinstalación post-arranque de componentes.",
"ogTitle": "ProxMenux Backup — restaurar",
"ogDescription": "Flujos de restauración completo y personalizado con la comprobación de compatibilidad, la clasificación de rutas, el dispatcher post-arranque y la reinstalación de componentes.",
"twitterTitle": "Restaurar una copia | ProxMenux",
"twitterDescription": "Cómo se convierte una copia de host de ProxMenux en un host Proxmox operativo."
"twitterTitle": "Restaurar un backup | ProxMenux",
"twitterDescription": "Cómo se convierte un backup de host de ProxMenux en un host Proxmox operativo."
},
"header": {
"title": "Restaurar una copia",
"description": "El flujo completo de restauración: desde elegir una copia hasta un host operativo. Documenta la comprobación de compatibilidad, los dos modos de restauración, el dispatcher post-arranque, la pasada de reinstalación de componentes, y los mecanismos que hacen predecibles las restauraciones cross-host y cross-kernel.",
"title": "Restaurar un backup",
"description": "El flujo completo de restauración: desde elegir un backup hasta un host operativo. Documenta la comprobación de compatibilidad, los dos modos de restauración, el dispatcher post-arranque, la pasada de reinstalación de componentes, y los mecanismos que hacen predecibles las restauraciones cross-host y cross-kernel.",
"section": "Backup & Restore"
},
"intro": {
"title": "La restauración reproduce el origen, no sólo los ficheros",
"body": "Restaurar una copia de ProxMenux no es una extracción. Los ficheros son sólo el primer paso: una vez colocado el sistema de ficheros, la restauración lee el manifiesto para detectar diferencias entre origen y destino, filtra rutas que romperían el arranque del destino, hidrata configuración propia del usuario que no puede copiarse verbatim, y — tras el reinicio obligatorio — reinstala cada componente que tuviera el origen (controlador NVIDIA, Coral TPU, herramientas GPU) contra el kernel actual del destino. Lo que el usuario elige del menú es una única copia; lo que realmente sucede involucra a la comprobación de compatibilidad, la clasificación de rutas, el dispatcher post-arranque y la pasada de reinstalación trabajando juntos para producir un host que se comporta como el origen."
"body": "Restaurar un backup de ProxMenux requiere más que extraer archivos. Antes de aplicar cambios, se consulta el manifiesto para detectar diferencias entre origen y destino, se filtran rutas que podrían impedir el arranque y se adapta la configuración del usuario que no puede copiarse literalmente. Tras el reinicio necesario, se intenta reinstalar los componentes compatibles registrados (controlador NVIDIA, Coral TPU y herramientas GPU) para el kernel que ejecuta el destino. Un único backup dirige la comprobación de compatibilidad, la clasificación de rutas y los procesos de arranque y posteriores. Revisa los resultados de cada componente y los logs para confirmar el resultado."
},
"threeActions": {
"heading": "Tres acciones sobre una copia",
"intro": "Seleccionar una copia de la lista abre un menú con tres acciones.",
"heading": "Tres acciones sobre un backup",
"intro": "Seleccionar un backup de la lista abre un menú con tres acciones.",
"actionRows": [
{
"action": "Ver",
"detail": "Abre una vista de sólo lectura del archivo: contenido de manifest.json (hostname de origen, versión de PVE, kernel, hardware, componentes instalados), la lista de rutas dentro de <code>rootfs/</code>, y un diff de qué cambiaría en el host actual si se aplicara la copia."
"detail": "Abre una vista de sólo lectura del archivo: contenido de manifest.json (hostname de origen, versión de PVE, kernel, hardware, componentes instalados), la lista de rutas dentro de <code>rootfs/</code>, y un diff de qué cambiaría en el host actual si se aplicara el backup."
},
{
"action": "Descargar",
"detail": "Exporta el archivo como un fichero portable <code>.tar.zst</code> (tar comprimido con zstd). Se puede extraer en cualquier sistema Linux con <code>tar --zstd -xf FICHERO.tar.zst</code>, o desde macOS/Windows con herramientas que soporten zstd (7-Zip, PeaZip, Keka…). El árbol extraído contiene <code>manifest.json</code>, <code>metadata/</code> y <code>rootfs/</code>, exactamente el mismo layout que consume la restauración. Es útil para inspección offline o para restaurar en un host que no tiene acceso al destino original (PBS, Borg)."
"detail": "Exporta el archivo como un fichero portable <code>.tar.zst</code> (tar comprimido con zstd). Se puede extraer en cualquier sistema Linux con <code>tar --zstd -xf FILE.tar.zst</code>, o desde macOS/Windows con herramientas que soporten zstd (7-Zip, PeaZip, Keka…). El árbol extraído contiene <code>manifest.json</code>, <code>metadata/</code> y <code>rootfs/</code>, exactamente el mismo layout que consume la restauración. Es útil para inspección offline o para restaurar en un host que no tiene acceso al destino original (PBS, Borg)."
},
{
"action": "Restaurar",
@@ -40,7 +40,7 @@
"outputRows": [
{
"output": "Flag de dirección",
"detail": "<code>HB_COMPAT_KERNEL_DIRECTION</code> — uno de <code>same</code>, <code>bk_newer</code> o <code>bk_older</code>. Compara la versión mayor del kernel de la copia contra la del destino. Dirige el filtro cross-kernel de subconjunto seguro (sólo dispara en <code>bk_older</code>) y la pasada de hidratación documentada en la página cross-kernel."
"detail": "<code>HB_COMPAT_KERNEL_DIRECTION</code> — uno de <code>same</code>, <code>bk_newer</code> o <code>bk_older</code>. Compara la versión mayor del kernel del backup contra la del destino. Dirige el filtro cross-kernel de subconjunto seguro (sólo dispara en <code>bk_older</code>) y la pasada de hidratación documentada en la página cross-kernel."
},
{
"output": "Lista de rutas a saltar",
@@ -52,7 +52,7 @@
},
{
"output": "Plan de rollback",
"detail": "Lo calcula <code>compute_rollback_plan.sh</code>. Lista las VMs, LXCs y componentes presentes en el destino pero no en la copia. El usuario puede optar durante el diálogo de confirmación por eliminarlos como parte de la restauración, de modo que el destino termine casando exactamente con la copia."
"detail": "Lo calcula <code>compute_rollback_plan.sh</code>. Lista las VMs, LXCs y componentes presentes en el destino pero ausentes del backup. La confirmación permite optar por eliminar los invitados adicionales antes del reinicio. Los componentes deben desinstalarse manualmente y la eliminación de invitados puede fallar; no garantiza que el destino coincida exactamente con el backup."
}
],
"reportBody": "La comprobación también emite un informe estructurado (<code>HB_COMPAT_RESULTS</code>) categorizado como PASS / INFO / WARN / FAIL. Las entradas WARN y FAIL aparecen en el panel previo a la restauración; la restauración se niega a continuar sólo cuando hay un FAIL que el usuario no puede resolver pulsando Continuar."
@@ -77,15 +77,15 @@
"rows": [
{
"class": "hot",
"detail": "Rutas que se aplican <strong>de inmediato</strong> sobre el sistema en ejecución. El servicio que las consume detecta el cambio por sí mismo o al siguiente reload, sin necesidad de reiniciar. Son la mayoría del contenido de una copia: <code>/etc/ssh</code>, <code>/etc/apt</code>, <code>/etc/cron.*</code>, <code>/root</code>, <code>/usr/local/bin</code>, ficheros de configuración de servicios generales, etc."
"detail": "Rutas que se aplican <strong>de inmediato</strong> sobre el sistema en ejecución. El servicio que las consume detecta el cambio por sí mismo o al siguiente reload, sin necesidad de reiniciar. Son la mayoría del contenido de un backup: <code>/etc/ssh</code>, <code>/etc/apt</code>, <code>/etc/cron.*</code>, <code>/root</code>, <code>/usr/local/bin</code>, ficheros de configuración de servicios generales, etc."
},
{
"class": "reboot",
"detail": "Rutas que se aplican <strong>de inmediato</strong> también, pero cuyo efecto real sólo se manifiesta en el <strong>siguiente arranque</strong>: el kernel sólo lee <code>/etc/default/grub</code> al iniciar el bootloader, <code>/etc/fstab</code> al montar los filesystems, <code>/etc/modules</code> al cargar módulos, etc. El fichero está en su sitio nada más aplicarse, pero el sistema tiene que reiniciar para consumirlo. Ejemplos: <code>/etc/default/grub</code>, <code>/etc/kernel</code>, <code>/etc/modules</code>, <code>/etc/fstab</code>, <code>/etc/zfs</code>, <code>/etc/initramfs-tools</code>."
"detail": "Rutas que este flujo difiere al <strong>siguiente arranque</strong> en lugar de aplicar <strong>de inmediato</strong>. Afectan a la configuración de arranque: la generación del bootloader lee <code>/etc/default/grub</code>, los montajes usan <code>/etc/fstab</code> y la carga de módulos usa <code>/etc/modules</code>. Los archivos pendientes se aplican tras reiniciar y después se regeneran los artefactos de arranque necesarios. Ejemplos: <code>/etc/default/grub</code>, <code>/etc/kernel</code>, <code>/etc/modules</code>, <code>/etc/fstab</code>, <code>/etc/zfs</code>, <code>/etc/modprobe.d</code>."
},
{
"class": "dangerous",
"detail": "Rutas que <strong>NO se aplican en el sistema en ejecución</strong> — la escritura viva podría corromper estado o cortar la conexión activa. Estas rutas se preparan en el conjunto pendiente y las escribe el dispatcher post-arranque después del reinicio, cuando el clúster está arriba pero antes de que el sistema esté completamente en uso. Ejemplos: <code>/etc/pve</code> (pmxcfs es un FUSE vivo; escribir directo en él lo saltea), <code>/var/lib/pve-cluster</code> (datos vivos del clúster), <code>/etc/network</code> (podría reconfigurar la misma interfaz por la que el usuario está conectado por SSH y cortar la sesión)."
"detail": "Rutas que <strong>NO se aplican en el sistema en ejecución</strong>: escribirlas en caliente podría corromper el estado o cortar la conexión activa. Se preparan en el conjunto pendiente: <code>/etc/network</code> se escribe al principio del siguiente arranque, antes de que se levante la red, y <code>/etc/pve</code> lo escribe el dispatcher post-arranque cuando el sistema de archivos del clúster ya está activo. Ejemplos: <code>/etc/pve</code> (pmxcfs es un montaje FUSE con la configuración activa del clúster), <code>/var/lib/pve-cluster</code> (datos vivos del clúster; se guardan en el directorio de recuperación solo para recuperarlos a mano), <code>/etc/network</code> (podría reconfigurar la misma interfaz por la que el usuario está conectado por SSH y cortar la sesión)."
}
]
},
@@ -131,7 +131,7 @@
},
{
"task": "Reinstalación de componentes",
"detail": "Lee el <code>components_status.json</code> restaurado e itera sobre los instaladores registrados (nvidia_driver, coral_driver, amdgpu_top, intel_gpu_tools). Cada instalador corre en modo <code>--auto-reinstall</code>, lee su versión previamente registrada del state file, y recompila contra el kernel actual del destino. El flujo interactivo no hace esto — reinstalar drivers contra un kernel que aún no ha arrancado carece de sentido."
"detail": "Lee el <code>components_status.json</code> restaurado y recorre los instaladores compatibles registrados (nvidia_driver, coral_driver, amdgpu_top e intel_gpu_tools). Cada uno se ejecuta en modo <code>--auto-reinstall</code>, lee su estado guardado y reinstala para el entorno del destino, recompilando módulos cuando corresponde. Se difiere hasta después del reinicio para utilizar el kernel que ejecute entonces el destino. Los fallos individuales se registran y no detienen el siguiente componente."
},
{
"task": "Comprobación de sanidad del arranque",
@@ -145,7 +145,7 @@
},
"liveProgress": {
"heading": "Progreso en vivo en la pestaña Backups del Monitor",
"body": "Tras el reboot, la pestaña Backups del Monitor de ProxMenux muestra una tarjeta de progreso en vivo que refleja el estado de <code>apply_cluster_postboot.service</code> a medida que avanza. La tarjeta lee <code>/var/lib/proxmenux/restore-state.json</code>, que el dispatcher actualiza en cada hito (aplicar configuración del cluster, reconstruir initramfs, actualizar bootloader, reinstalación por componente, verificación de arranque, finalización).",
"body": "Tras el reboot, la pestaña Backups del Monitor de ProxMenux muestra una tarjeta de progreso en vivo que refleja el estado de <code>proxmenux-apply-cluster-postboot.service</code> a medida que avanza. La tarjeta lee <code>/var/lib/proxmenux/restore-state.json</code>, que el dispatcher actualiza en cada hito (aplicar configuración del cluster, reconstruir initramfs, actualizar bootloader, reinstalación por componente, verificación de arranque, finalización).",
"fields": [
{
"name": "Insignia de estado",
@@ -184,9 +184,9 @@
},
"postbootExample": {
"heading": "Cómo se ve el post-boot en la consola",
"body": "En la consola física del host la ejecución exitosa del dispatcher termina con una línea <code>[ OK ] Finished proxmenux-apply-cluster-postboot.service</code>. Cuando esa línea aparece — normalmente acompañada de los <code>OK</code> del <code>multi-user.target</code> y del <code>graphical.target</code> — la restauración ha terminado por completo: componentes reinstalados, boot artifacts regenerados, cluster reconciliado.",
"body": "En la consola física del host, una ejecución del dispatcher que termina correctamente muestra <code>[ OK ] Finished proxmenux-apply-cluster-postboot.service</code>, a menudo junto a los <code>OK</code> de <code>multi-user.target</code> y <code>graphical.target</code>. Esto señala el final del proceso. Puede haber fallos individuales o avisos de arranque registrados; comprueba los estados de componentes y los logs del Monitor antes de dar el host por totalmente restaurado.",
"imageAlt": "Consola física de Proxmox mostrando el mensaje '[ OK ] Finished proxmenux-apply-cluster-postboot.service - ProxMenux Apply Cluster Configs (post-boot).' seguido del OK de multi-user.target y graphical.target, con el prompt de login del host encima.",
"imageCaption": "Consola física tras un post-boot exitoso. La línea 'Finished proxmenux-apply-cluster-postboot.service' es la señal de que el flujo de restauración ha terminado por completo — el mismo evento que la notificación 'Host restore finished' expone en el Monitor."
"imageCaption": "Consola física al terminar el proceso. 'Finished proxmenux-apply-cluster-postboot.service' señala su finalización, que también comunica 'Host restore finished' en el Monitor. Hay que revisar los resultados de componentes y los avisos."
},
"tenMinutes": {
"heading": "Por qué importan los últimos diez minutos",
@@ -228,11 +228,11 @@
"detail": "Barata. El usuario se entera de que la ejecución ha terminado en el momento en que dispara la notificación."
}
],
"outroBody": "La ventana importa porque el usuario puede hacer login durante este tiempo y ver herramientas ausentes (<code>nvidia-smi</code> no encontrado, <code>coral</code> no detectado). Es esperado — la reinstalación sigue corriendo en background. La notificación de finalización señala cuando todo está listo."
"outroBody": "Durante este intervalo puede que falten herramientas al iniciar sesión (<code>nvidia-smi</code> no encontrado, <code>coral</code> no detectado) porque la reinstalación sigue en segundo plano. La notificación marca el final del proceso; revisa los resultados de componentes, avisos y logs para distinguir los éxitos de los fallos individuales."
},
"destructiveRollback": {
"heading": "El rollback destructivo opcional",
"body": "Una restauración es aditiva por defecto: si el destino tiene VMs, LXCs o componentes que no están en la copia, sobreviven. Esto preserva el trabajo pero puede dejar entradas hostpci obsoletas, componentes huérfanos o VMs que el usuario ya no quiere. Cuando se detecta drift entre destino y copia, el diálogo de confirmación ofrece un segundo yes/no: <em>¿Ejecutar rollback destructivo?</em>. Aceptar dispara <code>_rs_execute_rollback</code>, que elimina las VMs, LXCs y componentes que existen en el destino pero no en la copia. El rollback corre ANTES del reinicio para que la maquinaria de pending-restore vea un estado limpio. Es opt-in — el default es No, y el usuario ve exactamente qué se eliminaría listado por nombre (VMID y CTID) antes de decidir."
"body": "La restauración es aditiva por defecto: se conservan las VMs, LXCs y componentes adicionales del destino. Si hay diferencias, la confirmación ofrece <em>¿Ejecutar el rollback destructivo?</em>, con No por defecto. Aceptar llama a <code>_rs_execute_rollback</code> antes del reinicio para intentar eliminar las VMs y LXCs adicionales indicados. Los componentes se señalan para desinstalación manual porque la automática no está implementada. Los fallos al eliminar invitados se registran y el proceso continúa; no se garantiza una coincidencia exacta con el backup. Revisa nombres y VMID/CTID antes de elegir esta opción destructiva."
},
"logs": {
"heading": "Dónde viven los logs",
@@ -265,7 +265,7 @@
{
"label": "Restauración cross-kernel",
"href": "/docs/backup-restore/cross-kernel",
"tail": " — el filtro direccional de subconjunto seguro y la pasada de hidratación que se invocan cuando el kernel del destino difiere del de la copia."
"tail": " — el filtro direccional de subconjunto seguro y la pasada de hidratación que se invocan cuando el kernel del destino difiere del del backup."
},
{
"label": "Cómo funciona",
@@ -1,15 +1,15 @@
{
"meta": {
"title": "Trabajos programados — timers, modo adjunto, retención | ProxMenux",
"description": "Trabajos de copia de host programados en ProxMenux. Dos modos de creación (timer systemd propio o adjuntarse a un trabajo vzdump de PVE existente), valores de retención aplicados por trabajo vía proxmox-backup-client/borg/local prune, layout de almacenamiento bajo /var/lib/proxmenux/backup-jobs, y el script runner que produce archivos idénticos al flujo interactivo.",
"description": "Trabajos de backup de host programados en ProxMenux. Dos modos de creación (timer systemd propio o adjuntarse a un trabajo vzdump de PVE existente), valores de retención aplicados por trabajo vía proxmox-backup-client/borg/local prune, layout de almacenamiento bajo /var/lib/proxmenux/backup-jobs, y el script runner que produce archivos idénticos al flujo interactivo.",
"ogTitle": "ProxMenux Backup — trabajos programados",
"ogDescription": "Copias de host desatendidas programadas con modo adjunto, retención, y los mismos tres destinos que el flujo interactivo.",
"ogDescription": "Backups de host desatendidos programados con modo adjunto, retención, y los mismos tres destinos que el flujo interactivo.",
"twitterTitle": "Trabajos programados | ProxMenux",
"twitterDescription": "Trabajos de copia de host desatendidos con modo adjunto y retención."
"twitterDescription": "Trabajos de backup de host desatendidos con modo adjunto y retención."
},
"header": {
"title": "Trabajos programados",
"description": "Trabajos de copia de host desatendidos. Dos modelos de creación: un trabajo nuevo e independiente con su propio horario, o un trabajo adjuntado a una tarea vzdump de PVE existente que hereda el horario y la retención de esa tarea. Ambos producen archivos idénticos al flujo interactivo.",
"description": "Trabajos de backup de host desatendidos. Dos modelos de creación: un trabajo nuevo e independiente con su propio horario, o un trabajo adjuntado a una tarea vzdump de PVE existente que hereda el horario y la retención de esa tarea. Ambos producen archivos idénticos al flujo interactivo.",
"section": "Backup & Restore"
},
"intro": {
@@ -22,11 +22,11 @@
},
"attachBadge": {
"title": "Modo adjunto — recomendado cuando ya existe una tarea vzdump de PVE",
"body": "Cuando ya hay una tarea de copia vzdump de PVE configurada para las VMs y los LXCs de este nodo, adjuntar la copia de host a esa tarea garantiza que la configuración del host se captura en la <strong>misma ventana</strong> que los invitados. En la restauración, las configuraciones de los invitados vienen de la copia de host (viven bajo <code>/etc/pve</code>), y los discos de los invitados vienen de la copia vzdump tomada al mismo tiempo — ambos conjuntos son consistentes entre sí, por lo que una recuperación completa del nodo puede reproducir el host y re-adjuntar cada invitado sin drift de versiones."
"body": "Si ya existe una tarea vzdump de PVE para las VM y los LXC de este nodo, adjuntar el backup del host hace que se ejecute después del backup de los invitados, en el <strong>mismo ciclo de backup</strong>. Al restaurar, las configuraciones de los invitados proceden del backup del host (bajo <code>/etc/pve</code>) y sus discos de los backups vzdump de ese ciclo. Esto facilita coordinar la recuperación de todo el nodo, pero no es un snapshot atómico: los cambios durante el ciclo pueden dejar diferencias entre la configuración del host y el estado de los discos de los invitados."
},
"frequencyBadge": {
"title": "Frecuencia recomendada",
"body": "Para garantizar la máxima compatibilidad entre la copia y su posterior restauración se recomienda hacer copias de seguridad del host con frecuencia. Cuanto más reciente sea la copia respecto al estado actual del host, menor será la desviación de configuración, paquetes y componentes que la restauración tendrá que reconciliar."
"body": "Para garantizar la máxima compatibilidad entre el backup y su posterior restauración se recomienda hacer backups del host con frecuencia. Cuanto más reciente sea el backup respecto al estado actual del host, menor será la desviación de configuración, paquetes y componentes que la restauración tendrá que reconciliar."
},
"modes": {
"heading": "Los dos modos",
@@ -35,7 +35,7 @@
"mode": "Nuevo trabajo programado",
"backends": "Local, PBS, Borg",
"schedule": "Expresión <code>OnCalendar</code> propia (sintaxis de calendario systemd — por ejemplo <code>daily</code>, <code>Mon..Fri 03:00</code>).",
"retention": "Se pregunta por separado: <code>keep-last</code>, <code>keep-hourly</code>, <code>keep-daily</code>, <code>keep-weekly</code>, <code>keep-monthly</code>, <code>keep-yearly</code>. La aplica el runner tras cada copia exitosa."
"retention": "Se pregunta por separado: <code>keep-last</code>, <code>keep-hourly</code>, <code>keep-daily</code>, <code>keep-weekly</code>, <code>keep-monthly</code>, <code>keep-yearly</code>. La aplica el runner tras cada backup exitoso."
},
{
"mode": "Adjuntar a un trabajo vzdump de PVE",
@@ -47,7 +47,7 @@
},
"attachDetail": {
"heading": "Cómo funciona el modo adjunto",
"intro": "PVE escribe las tareas <code>vzdump</code> en <code>/etc/pve/jobs.cfg</code> — una entrada por tarea, cada una apuntando a un storage donde caen los dumps de VMs y LXCs. El modo adjunto requiere que ese storage sea un backend que ProxMenux entienda (Local o PBS); cuando la tarea dispara, ProxMenux se ejecuta al mismo tiempo.",
"intro": "PVE guarda las tareas <code>vzdump</code> en <code>/etc/pve/jobs.cfg</code>: una sección por tarea, con el almacenamiento de los backups de VM y LXC. El modo adjunto requiere un backend compatible con ProxMenux (Local o PBS). El backup del host se ejecuta desde el hook job-end cuando termina la tarea de backup de los invitados.",
"steps": [
{
"step": "1",
@@ -59,14 +59,14 @@
},
{
"step": "3",
"detail": "<code>hb_install_vzdump_hook</code> registra un script-hook en <code>/etc/vzdump.conf</code>. Cuando PVE ejecuta cualquier tarea vzdump, el script-hook dispara; si el <code>$STOREID</code> que se le pasa coincide con el <code>PVE_STORAGE</code> de un trabajo adjuntado, el runner se invoca para ese trabajo."
"detail": "<code>hb_install_vzdump_hook</code> registra un hook en <code>/etc/vzdump.conf</code>. En la fase job-end de cualquier tarea vzdump, compara el <code>$STOREID</code> recibido con el <code>PVE_STORAGE</code> de cada trabajo adjunto habilitado y ejecuta el script correspondiente si coincide. La asociación se basa en el almacenamiento, no en el ID de la tarea padre seleccionada."
},
{
"step": "4",
"detail": "El archivo aterriza en el mismo storage donde los dumps de vzdump acaban de escribirse: <code>path/dump/</code> para Local, o el repositorio PBS configurado en la entrada de storage de PVE."
}
],
"outroBody": "El modo adjunto tiene una implicación operativa: desactivar o eliminar la tarea padre de PVE también desactiva la copia de host — no hay timer propio al que recurrir. La entrada del trabajo permanece en disco para poder re-adjuntarla más tarde."
"outroBody": "El modo adjunto no tiene temporizador propio. Desactivar o eliminar la tarea padre seleccionada detiene ese disparador, pero otra tarea vzdump con el mismo almacenamiento aún puede activar el backup del host. Para impedirlo, desactiva o elimina el propio trabajo de ProxMenux. Al desactivarlo, su entrada sigue en disco para poder reactivarla o volver a adjuntarla."
},
"storageLayout": {
"heading": "Ficheros que componen un trabajo",
@@ -94,9 +94,9 @@
"heading": "Qué hace un trabajo cuando se dispara",
"intro": "Cada trabajo — sea del modelo nuevo o adjunto — ejecuta la misma secuencia de tres pasos:",
"steps": [
"<strong>Preparar la copia.</strong> Lee la configuración del trabajo (destino, perfil, rutas) y ensambla el árbol de la copia siguiendo exactamente el mismo procedimiento que el flujo interactivo. El resultado es el mismo archivo que produciría una copia manual con esos ajustes.",
"<strong>Escribir en el destino.</strong> Sube o escribe la copia al destino configurado — un archivo local <code>.tar.zst</code>, un backup PBS o un archivo Borg — usando exactamente las mismas herramientas y credenciales que utilizaría una copia manual al mismo destino.",
"<strong>Aplicar retención.</strong> Elimina las copias antiguas del destino conservando los valores <code>keep-last</code> / <code>keep-daily</code> / <code>keep-weekly</code> configurados en el trabajo. La poda la realiza el propio destino: PBS mantiene la cuenta en su lado, Borg ejecuta <code>borg prune</code>, y en Local ProxMenux borra los archivos que quedan fuera del <code>keep-last</code>."
"<strong>Preparar el backup.</strong> Lee la configuración del trabajo (destino, perfil, rutas) y ensambla el árbol del backup siguiendo exactamente el mismo procedimiento que el flujo interactivo. El resultado es el mismo archivo que produciría un backup manual con esos ajustes.",
"<strong>Escribir en el destino.</strong> Sube o escribe el backup al destino configurado — un archivo local <code>.tar.zst</code>, un backup PBS o un archivo Borg — usando exactamente las mismas herramientas y credenciales que utilizaría un backup manual al mismo destino.",
"<strong>Aplicar retención.</strong> Elimina los backups antiguos del destino conservando los valores <code>keep-last</code> / <code>keep-daily</code> / <code>keep-weekly</code> configurados en el trabajo. La poda la realiza el propio destino: PBS mantiene la cuenta en su lado, Borg ejecuta <code>borg prune</code>, y en Local ProxMenux borra los archivos que quedan fuera del <code>keep-last</code>."
]
},
"management": {
@@ -127,13 +127,13 @@
},
"notifications": {
"heading": "Notificaciones",
"body": "Cada ejecución programada dispara los mismos eventos <code>hb_notify_lifecycle</code> que el flujo interactivo (<code>start</code>, <code>complete</code>, <code>fail</code>). Si hay canales de notificación configurados en el Monitor, los trabajos desatendidos exponen sus resultados igual que las copias manuales — un usuario no necesita revisar el log para saber si un trabajo tuvo éxito."
"body": "Cada ejecución programada dispara los mismos eventos <code>hb_notify_lifecycle</code> que el flujo interactivo (<code>start</code>, <code>complete</code>, <code>fail</code>). Si hay canales de notificación configurados en el Monitor, los trabajos desatendidos exponen sus resultados igual que los backups manuales — un usuario no necesita revisar el log para saber si un trabajo tuvo éxito."
},
"whereNext": {
"heading": "A dónde seguir",
"items": [
{
"label": "Crear copias",
"label": "Crear backups",
"href": "/docs/backup-restore/creating-backups",
"tail": " — el flujo interactivo que comparte backend con el scheduler."
},
+14 -14
View File
@@ -1,12 +1,12 @@
{
"meta": {
"title": "Crear VMs en Proxmox VE — asistentes Synology, Windows, Linux y NAS | ProxMenux",
"description": "Crea y configura máquinas virtuales en Proxmox VE con ProxMenux. Asistentes específicos para appliances NAS (Synology DSM, TrueNAS, OpenMediaVault, UnRAID, etc.), Windows, distribuciones Linux y un instalador externo de macOS. Valores por defecto sensatos de hardware, almacenamiento y red.",
"description": "Crea y configura máquinas virtuales en Proxmox VE con ProxMenux. Asistentes para sistemas NAS (Synology DSM, TrueNAS, OpenMediaVault, XigmaNAS, etc.), Windows, distribuciones Linux y un instalador externo de macOS. Valores predeterminados adecuados de hardware, almacenamiento y red.",
"ogTitle": "Crear VMs en Proxmox VE — asistentes Synology, Windows, Linux y NAS",
"ogDescription": "Asistentes de ProxMenux para crear VMs Synology DSM, TrueNAS, OMV, UnRAID, Windows y Linux en Proxmox VE.",
"ogDescription": "Asistentes de ProxMenux para crear VM de Synology DSM, TrueNAS, OMV, XigmaNAS, Windows y Linux en Proxmox VE.",
"ogImageAlt": "Menú Crear VM de ProxMenux",
"twitterTitle": "Crear VMs en Proxmox VE | ProxMenux",
"twitterDescription": "Asistentes para VMs Synology, TrueNAS, OMV, UnRAID, Windows y Linux en Proxmox VE."
"twitterDescription": "Asistentes para VM Synology, TrueNAS, OMV, XigmaNAS, Windows y Linux en Proxmox VE."
},
"header": {
"title": "Crear VM",
@@ -28,23 +28,23 @@
"routes": [
{
"key": "nas",
"title": "System NAS",
"title": "Sistema NAS",
"icon": "HardDrive",
"href": "/docs/create-vm/system-nas",
"accent": "border-emerald-300 bg-emerald-50",
"iconBg": "bg-emerald-100 text-emerald-700",
"description": "Siete sistemas operativos NAS como VMs específicas. La mayoría usan el flujo auto-ISO; Synology DSM ejecuta el asistente especializado de loader.",
"description": "Ocho sistemas operativos NAS como VM específicas. La mayoría usan el flujo automático de ISO; Synology DSM tiene un asistente especializado de loader.",
"bullets": [
"Synology DSM (loaders ARC / RR / TinyCore)",
"Synology DSM (loaders Arc / RR / Alpine RedPill M-shell)",
"TrueNAS SCALE y CORE (ZFS)",
"OpenMediaVault (basado en Debian)",
"XigmaNAS (FreeBSD ZFS)",
"Rockstor (openSUSE / Btrfs), ZimaOS"
"Rockstor (openSUSE / Btrfs), ZimaOS, FygoOS"
]
},
{
"key": "windows",
"title": "System Windows",
"title": "Sistema Windows",
"icon": "MonitorCog",
"href": "/docs/create-vm/system-windows",
"accent": "border-blue-300 bg-blue-50",
@@ -60,15 +60,15 @@
},
{
"key": "linux",
"title": "System Linux",
"title": "Sistema Linux",
"icon": "Laptop",
"href": "/docs/create-vm/system-linux",
"accent": "border-amber-300 bg-amber-50",
"iconBg": "bg-amber-100 text-amber-700",
"description": "Catálogo curado de ISOs oficiales de Linux descargadas automáticamente desde el upstream, más un selector de ISO local para cualquier otra cosa.",
"bullets": [
"Ubuntu (Desktop / Server, 20.04–25.10)",
"Debian (Desktop / Netinst, 11–13)",
"Ubuntu (Escritorio / Servidor, 20.04–25.10)",
"Debian (Escritorio / Netinst, 11–13)",
"Fedora, Arch, Rocky, Mint, openSUSE",
"Alpine, Kali, Manjaro",
"Ruta de ISO local para imágenes personalizadas"
@@ -106,7 +106,7 @@
},
{
"path": "vm/select_nas_iso.sh",
"role": "Selector de ISO / appliance para sistemas NAS (Synology, TrueNAS, OMV, Rockstor, ZimaOS)."
"role": "Selector de ISO / appliance para sistemas NAS (Synology, TrueNAS, OMV, Rockstor, XigmaNAS, ZimaOS, FygoOS)."
},
{
"path": "vm/select_windows_iso.sh",
@@ -147,12 +147,12 @@
"items": [
{
"href": "/docs/disk-manager",
"label": "Disk Manager",
"label": "Administrador de discos",
"tail": " — adjunta discos físicos existentes o importa imágenes de disco en VMs."
},
{
"href": "/docs/utils/UUp-Dump-ISO-Creator",
"label": "UUP Dump ISO Creator",
"label": "Creador de ISO UUP Dump",
"tail": " — genera ISOs de instalación de Windows listas para usar como medio de arranque."
},
{
+65 -65
View File
@@ -16,7 +16,7 @@
"extra": ""
},
{
"name": "TinyCore RedPill M-shell",
"name": "Alpine RedPill M-shell (proyecto TinyCore)",
"url": "https://github.com/PeterSuh-Q3/tinycore-redpill",
"extra": ""
}
@@ -25,7 +25,7 @@
"simplifiesIntro": "El script simplifica el proceso de creación de la VM ofreciendo las siguientes opciones:",
"simplifies": [
"Selección de configuración por defecto o avanzada",
"Configuración de CPU, RAM, BIOS y machine type",
"Configuración de CPU, RAM, BIOS y tipo de máquina",
"Elección entre disco virtual o passthrough de disco físico"
]
},
@@ -38,35 +38,35 @@
"headerValue": "Valor por defecto",
"defaultRows": [
{
"param": "Machine Type",
"param": "Tipo de máquina",
"value": "q35"
},
{
"param": "BIOS Type",
"param": "Tipo de BIOS",
"value": "OVMF (UEFI)"
},
{
"param": "CPU Type",
"param": "Tipo de procesador",
"value": "Host"
},
{
"param": "Core Count",
"param": "Número de núcleos",
"value": "2"
},
{
"param": "RAM Size",
"param": "Tamaño de RAM",
"value": "4096 MB"
},
{
"param": "Bridge",
"param": "Puente",
"value": "vmbr0"
},
{
"param": "MAC Address",
"param": "Dirección MAC",
"value": "Generada automáticamente"
},
{
"param": "Start VM on Completion",
"param": "Arrancar la VM al terminar",
"value": "No"
}
],
@@ -76,31 +76,31 @@
"headerOptions": "Opciones",
"advancedRows": [
{
"param": "Machine Type",
"param": "Tipo de máquina",
"options": "q35 o i440fx"
},
{
"param": "BIOS Type",
"param": "Tipo de BIOS",
"options": "OVMF (UEFI) o SeaBIOS (Legacy)"
},
{
"param": "CPU Type",
"param": "Tipo de procesador",
"options": "Host o KVM64"
},
{
"param": "Core Count",
"param": "Número de núcleos",
"options": "Número de núcleos de CPU"
},
{
"param": "RAM Size",
"param": "Tamaño de RAM",
"options": "Cantidad de memoria asignada a la VM"
},
{
"param": "Bridge",
"param": "Puente",
"options": "Bridge de red para la conexión"
},
{
"param": "MAC Address",
"param": "Dirección MAC",
"options": "MAC personalizada"
},
{
@@ -115,24 +115,24 @@
},
"diskSelection": {
"heading": "Selección de disco",
"intro": "Una vez configurada la máquina, el script te permite elegir entre dos tipos de discos:",
"intro": "El plan de almacenamiento permite añadir discos virtuales, discos físicos y controladoras PCI o dispositivos NVMe. Las opciones de disco se explican a continuación.",
"virtualHeading": "Disco virtual",
"virtualItems": [
"El script lista las opciones de almacenamiento disponibles en Proxmox",
"El usuario selecciona el disco y el tamaño en GB",
"El disco virtual se asigna automáticamente a la VM. Si se configuran más discos, se añadirán como <strong>SATA</strong> (p. ej., sata0, sata1, etc.), hasta un máximo de 6 discos virtuales."
"Los discos virtuales se conectan como <strong>SATA</strong> (sata0, sata1, etc.). Los discos de datos virtuales y físicos comparten los seis puertos SATA numerados del 0 al 5; el loader usa un puerto IDE aparte."
],
"physicalHeading": "Passthrough de disco físico",
"physicalItems": [
"El script detecta todos los discos físicos disponibles",
"El usuario selecciona el disco o discos físicos que quiere usar.",
"El disco físico se asigna directamente a la VM mediante passthrough. Si se configuran más discos, se añadirán como <strong>SATA</strong> (p. ej., sata0, sata1, etc.), hasta un máximo de 6 discos físicos."
"Los discos físicos se conectan como dispositivos <strong>SATA</strong>. Comparten con los discos de datos virtuales los seis puertos SATA numerados del 0 al 5; no hay un cupo adicional de seis discos físicos."
]
},
"loaderInstall": {
"heading": "Instalación del loader",
"intro1": "El script descarga y extrae automáticamente el loader desde el repositorio del desarrollador. Si la descarga falla, el script mostrará un mensaje de error.",
"intro2Rich": "<strong>AuxXxilium Arc</strong>, <strong>RedPill RR</strong> y <strong>TinyCore RedPill M-shell</strong>. Descarga y extrae automáticamente.",
"intro2Rich": "<strong>AuxXxilium Arc</strong>, <strong>RedPill RR</strong> y <strong>Alpine RedPill M-shell</strong> se descargan y extraen automáticamente.",
"customRich": "Para <strong>Custom Loader</strong>, el script busca archivos en <code>/var/lib/vz/template/iso</code>. Si encuentra varios, te pedirá que selecciones el archivo deseado.",
"uploadIntro": "Puedes subir loaders personalizados desde las opciones de almacenamiento local:",
"imageAlt": "Añadir Custom Loader",
@@ -143,14 +143,14 @@
"intro": "Una vez descargado el loader, el script crea la VM con los siguientes comandos:",
"items": [
"<code>qm create</code> – Crea la máquina virtual con los parámetros configurados",
"<code>qm importdisk</code> – Importa el disco del loader de arranque a la VM. Para mayor compatibilidad el loader se importa como disco IDE",
"<code>qm importdisk</code> importa la imagen del loader al almacenamiento Proxmox. Después el script la conecta a la VM como ide0 para mejorar la compatibilidad.",
"<code>qm set</code> – Asigna valores de configuración como CPU, RAM y almacenamiento",
"<code>qm set -boot</code> – Configura el orden de arranque"
"<code>qm set VMID --boot order=ide0</code> configura el loader como dispositivo de arranque. Sustituye VMID por el ID de la VM."
]
},
"stepGuide": {
"heading": "Guía paso a paso de configuración del loader de arranque",
"intro": "Aunque todos los loaders comparten similitudes, cada uno tiene su propia estructura y métodos de configuración. Esta sección ofrece una guía básica que cubre los 6 pasos para configurar un loader de Synology DSM. Los pasos exactos pueden variar según el loader y los cambios introducidos por el desarrollador. Por eso, entender estos pasos básicos comunes es clave para construir y configurar correctamente el loader que elijas y conseguir que Synology DSM funcione bien.",
"intro": "Cada loader tiene sus propios menús y métodos de configuración. Los seis pasos siguientes explican el proceso común; sigue las indicaciones del loader actual cuando difieran. Las capturas de M-shell muestran una interfaz anterior de TinyCore, mientras que el script actual descarga Alpine RedPill M-shell.",
"selectorHeading": "Selecciona tu tipo de loader:",
"loaderButtons": {
"arc": "Arc Loader",
@@ -168,13 +168,13 @@
{
"htmlBefore": "<strong>Interfaz web</strong>, Para acceder a la interfaz web, abre un navegador y entra en la IP que aparece en la salida de la consola de la VM. Por ejemplo, en nuestro caso: http://192.169.0.32.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_0_1.png",
"alt": "Arc Loader Web Interface",
"alt": "Interfaz web de Arc Loader",
"caption": "Interfaz web de Arc Loader"
},
{
"htmlBefore": "<strong>Interfaz por terminal</strong>, Accede directamente desde la salida de la consola de la VM.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_1_1.png",
"alt": "Arc Loader Terminal Interface",
"alt": "Interfaz por terminal de Arc Loader",
"caption": "Interfaz por terminal de Arc Loader"
}
],
@@ -182,13 +182,13 @@
{
"htmlBefore": "<strong>Interfaz web</strong>, Para acceder a la interfaz web, abre un navegador y entra en la IP que aparece en la salida de la consola de la VM, seguida del puerto <strong>7681</strong>. Por ejemplo, en nuestro caso: <code>http://192.169.0.33:7681</code>.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_0_2.png",
"alt": "RR Command Example",
"alt": "Ejemplo de comando RR",
"caption": "Interfaz web de RR Loader"
},
{
"htmlBefore": "<strong>Interfaz por terminal</strong>, Accede directamente desde la salida de la consola de la VM tecleando <strong>menu.sh</strong> en pantalla",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_1_1.png",
"alt": "RR Loader Interface",
"alt": "Interfaz de RR Loader",
"caption": "Interfaz por terminal de RR Loader"
}
],
@@ -196,13 +196,13 @@
{
"htmlBefore": "<strong>Interfaz web</strong>, Para acceder a la interfaz web, abre un navegador y entra en la IP que aparece en la salida de la consola de la VM, seguida del puerto <strong>7681</strong>. Por ejemplo, en nuestro caso: <code>http://192.169.0.35:7681</code>.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_0_1.png",
"alt": "TinyCore Loader Interface",
"alt": "Interfaz de TinyCore Loader",
"caption": "Interfaz web de TinyCore Loader"
},
{
"htmlBefore": "<strong>Interfaz por terminal</strong>, Accede directamente desde la salida de la consola de la VM. Vigila la pantalla, porque en algún momento puede pedirte que pulses una tecla para continuar o preguntarte si quieres cambiar el idioma.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_1_1.png",
"alt": "TinyCore Loader Interface",
"alt": "Interfaz de TinyCore Loader",
"caption": "Interfaz por terminal de TinyCore Loader"
}
]
@@ -217,21 +217,21 @@
"arc": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_2_1.png",
"alt": "Arc Model Selection",
"alt": "Selección de modelo en Arc",
"caption": "Selección de modelo en Arc"
}
],
"rr": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_2_1.png",
"alt": "RR Model Selection",
"alt": "Selección de modelo en RR",
"caption": "Selección de modelo en RR"
}
],
"tinycore": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_2_1.png",
"alt": "TinyCore Model Selection",
"alt": "Selección de modelo en TinyCore",
"caption": "Selección de modelo en TinyCore"
}
]
@@ -245,41 +245,41 @@
"arc": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_3_1.png",
"alt": "Arc Version Selection - Step 1",
"alt": "Selección de versión en Arc - Paso 1",
"caption": "Selección de versión en Arc - Paso 1"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_3_2.png",
"alt": "Arc Version Selection - Step 2",
"alt": "Selección de versión en Arc - Paso 2",
"caption": "Selección de versión en Arc - Paso 2"
}
],
"rr": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_3_1.png",
"alt": "RR Version Selection - Step 1",
"alt": "Selección de versión en RR - Paso 1",
"caption": "Selección de versión en RR - Paso 1"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_3_2.png",
"alt": "RR Version Selection - Step 2",
"alt": "Selección de versión en RR - Paso 2",
"caption": "Selección de versión en RR - Paso 2"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_3_3.png",
"alt": "RR Version Selection - Step 3",
"alt": "Selección de versión en RR - Paso 3",
"caption": "Selección de versión en RR - Paso 3"
}
],
"tinycore": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_3_1.png",
"alt": "TinyCore Version Selection - Step 1",
"alt": "Selección de versión en TinyCore - Paso 1",
"caption": "Selección de versión en TinyCore - Paso 1"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_3_2.png",
"alt": "TinyCore Version Selection - Step 2",
"alt": "Selección de versión en TinyCore - Paso 2",
"caption": "Selección de versión en TinyCore - Paso 2"
}
]
@@ -294,18 +294,18 @@
{
"htmlBefore": "<strong>Arc</strong> te da la opción de configurar automáticamente o ajustar los parámetros manualmente. Si eliges configuración automática, el loader empezará a aplicar los ajustes necesarios y reiniciará automáticamente al completar el proceso.",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_1.png",
"alt": "Arc Auto Configuration",
"alt": "Configuración automática de Arc",
"caption": "Configuración automática de Arc"
},
{
"htmlBefore": "Si optamos por no usar el modo automático, entramos en el menú para configurar las distintas opciones necesarias del loader:",
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_2.png",
"alt": "Arc Manual Configuration",
"alt": "Configuración manual de Arc",
"caption": "Configuración manual de Arc"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_3.png",
"alt": "Arc SN/Mac Configuration",
"alt": "Configuración de SN/MAC en Arc",
"caption": "Configuración de SN/MAC en Arc"
},
{
@@ -315,46 +315,46 @@
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_4_5.png",
"alt": "Arc Addons Selection",
"alt": "Selección de addons en Arc",
"caption": "Selección de addons en Arc"
}
],
"rr": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_4_1.png",
"alt": "RR Addon Step 1",
"alt": "RR Addon Paso 1",
"caption": "RR Addon Paso 1"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_4_2.png",
"alt": "RR Addon Step 2",
"alt": "RR Addon Paso 2",
"caption": "RR Addon Paso 2 - Pulsa para añadir addons"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_4_3.png",
"alt": "RR Addon Step 3",
"alt": "RR Addon Paso 3",
"caption": "RR Addon Paso 3 - Selecciona el que quieras pulsando sobre él. Si quieres añadir más, repite el proceso de las imágenes 2.4.2 y 2.4.3"
}
],
"tinycore": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_1.png",
"alt": "TinyCore SN Configuration",
"alt": "Configuración de SN en TinyCore",
"caption": "Configuración de SN en TinyCore"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_2.png",
"alt": "TinyCore Random Option",
"alt": "Opción aleatoria de TinyCore",
"caption": "Opción Random de TinyCore - Se recomienda la opción aleatoria"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_3.png",
"alt": "TinyCore MAC Configuration",
"alt": "Configuración de MAC en TinyCore",
"caption": "Configuración de MAC en TinyCore"
},
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_4_4.png",
"alt": "TinyCore VM MAC",
"alt": "MAC de la VM en TinyCore",
"caption": "MAC de la VM en TinyCore - Elige usar la MAC de tu VM o una aleatoria"
}
]
@@ -368,22 +368,22 @@
"arc": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_5_1.png",
"alt": "Arc Build Loader",
"caption": "Build Loader en Arc"
"alt": "Construcción del loader en Arc",
"caption": "Construcción del loader en Arc"
}
],
"rr": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_5_1.png",
"alt": "RR Build Loader",
"caption": "Build Loader en RR"
"alt": "Construcción del loader en RR",
"caption": "Construcción del loader en RR"
}
],
"tinycore": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_5_1.png",
"alt": "TinyCore Build Loader",
"caption": "Build Loader en TinyCore"
"alt": "Construcción del loader en TinyCore",
"caption": "Construcción del loader en TinyCore"
}
]
}
@@ -396,22 +396,22 @@
"arc": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/arc/arc_1_6_1.png",
"alt": "Arc Boot Loader",
"caption": "Boot Loader en Arc"
"alt": "Arranque del loader en Arc",
"caption": "Arranque del loader en Arc"
}
],
"rr": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/rr/rr_2_6_1.png",
"alt": "RR Boot Loader",
"caption": "Boot Loader en RR"
"alt": "Arranque del loader en RR",
"caption": "Arranque del loader en RR"
}
],
"tinycore": [
{
"src": "https://macrimi.github.io/ProxMenux/vm/synology/tinycore/tinycore_3_6_1.png",
"alt": "TinyCore Boot Loader",
"caption": "Boot Loader en TinyCore"
"alt": "Arranque del loader en TinyCore",
"caption": "Arranque del loader en TinyCore"
}
]
}
@@ -421,10 +421,10 @@
"heading": "Iniciar la instalación de DSM",
"intro": "Una vez arrancado el loader, puedes encontrar tu dispositivo Synology usando:",
"afterCode": "Sigue los pasos en pantalla para completar la instalación de DSM.",
"setupAlt": "DSM Setup",
"setupAlt": "Configuración de DSM",
"setupCaption": "Pantalla de setup de DSM",
"patience": "Ten paciencia – El proceso puede tardar unos minutos en completarse. El porcentaje de progreso se actualizará automáticamente conforme avance la instalación. Se iniciará una cuenta atrás cuando la instalación esté a punto de terminar.",
"finishAlt": "Installation Complete",
"finishAlt": "Instalación Completa",
"finishCaption": "Instalación completada"
},
"tips": {
@@ -1,13 +1,13 @@
{
"meta": {
"title": "Crear VM: System Linux | ProxMenux Documentation",
"title": "Crear VM: sistema Linux | Documentación de ProxMenux",
"description": "Crea máquinas virtuales Linux en Proxmox VE con ProxMenux. Cubre el catálogo curado de ISOs oficiales (Ubuntu, Debian, Fedora, Arch, Rocky, Mint, openSUSE, Alpine, Kali, Manjaro), el plan de almacenamiento unificado, el passthrough de GPU opcional y consejos post-instalación.",
"ogTitle": "Crear VM: System Linux | ProxMenux Documentation",
"ogTitle": "Crear VM: sistema Linux | Documentación de ProxMenux",
"ogDescription": "Crea VMs Linux en Proxmox VE con ProxMenux. Catálogo curado de ISOs, plan de almacenamiento unificado, passthrough de GPU opcional y consejos post-instalación.",
"ogImageAlt": "Menú de VM Linux de ProxMenux"
},
"header": {
"title": "Crear VM: System Linux",
"title": "Crear VM: sistema Linux",
"description": "Crea una VM Linux en Proxmox VE. ProxMenux trae un catálogo curado de ISOs oficiales de Linux listas para descargar, más un selector de ISO local, y enruta todo a través del asistente de VM compartido, el plan de almacenamiento unificado y el asistente opcional de passthrough de GPU.",
"section": "Máquinas virtuales"
},
@@ -27,7 +27,7 @@
"headerValue": "Valor por defecto",
"defaultRows": [
{
"param": "Machine type",
"param": "Tipo de máquina",
"valueRich": "<code>q35</code>"
},
{
@@ -35,11 +35,11 @@
"value": "OVMF (UEFI)"
},
{
"param": "CPU type",
"param": "Tipo de CPU",
"value": "Host"
},
{
"param": "Cores",
"param": "Núcleos",
"value": "2"
},
{
@@ -47,15 +47,15 @@
"value": "4096 MB"
},
{
"param": "Bridge",
"param": "Puente",
"valueRich": "<code>vmbr0</code>"
},
{
"param": "MAC address",
"param": "Dirección MAC",
"value": "Generada automáticamente"
},
{
"param": "Start on completion",
"param": "Arrancar al terminar",
"value": "No"
}
],
@@ -64,7 +64,7 @@
"headerOptions": "Opciones",
"advancedRows": [
{
"param": "Machine type",
"param": "Tipo de máquina",
"optionsRich": "<code>q35</code> o <code>i440fx</code>"
},
{
@@ -72,11 +72,11 @@
"options": "OVMF (UEFI) o SeaBIOS (Legacy)"
},
{
"param": "CPU type",
"options": "Host o KVM64"
"param": "Tipo de CPU",
"options": "Host, KVM64 y otros modelos de CPU de la lista"
},
{
"param": "Cores",
"param": "Núcleos",
"options": "Número de núcleos de CPU"
},
{
@@ -84,11 +84,11 @@
"options": "Memoria asignada a la VM"
},
{
"param": "Bridge",
"param": "Puente",
"options": "Bridge de red"
},
{
"param": "MAC address",
"param": "Dirección MAC",
"options": "MAC personalizada"
},
{
@@ -108,19 +108,19 @@
"virtualDiskItems": [
"Lista los volúmenes de almacenamiento Proxmox disponibles en el host.",
"Eliges el almacenamiento destino y el tamaño en GB.",
"El disco se adjunta a la VM como SATA (<code>sata0</code>, <code>sata1</code>, … hasta 6)."
"El disco usa el bus elegido: SCSI (predeterminado), SATA, VirtIO o IDE. Los puertos SATA son <code>sata0</code>, <code>sata1</code>, …, seis puertos numerados del 0 al 5."
],
"importDiskTitle": "b. Añadir disco importado",
"importDiskItems": [
"Detecta los discos físicos que es seguro importar (los discos del sistema y protegidos están ocultos).",
"Seleccionas uno o varios discos mediante una checklist.",
"Los discos importados se adjuntan como SATA mediante <code>qm set</code>."
"Los discos importados usan el bus elegido y se conectan mediante <code>qm set</code>."
],
"pciTitle": "c. Añadir controladora o NVMe (PCI passthrough)",
"pciItems": [
"Detecta HBAs SATA/SAS y dispositivos NVMe del host y te deja pasar una <em>controladora entera</em> a la VM. IOMMU debe estar habilitado; el script se ofrece a habilitarlo y reinicia si hace falta.",
"Un paso de confirmación advierte del riesgo a nivel de controladora (la tarjeta completa, incluidos todos los discos que tenga, deja de estar en el host).",
"Los dispositivos PCI seleccionados se adjuntan mediante <code>qm set hostpciN: …</code>."
"Los dispositivos PCI se conectan con comandos como <code>qm set VMID --hostpci0 PCI_ADDRESS,pcie=1</code>. Sustituye VMID y PCI_ADDRESS por el ID de la VM y la dirección PCI y usa un índice hostpci libre para cada dispositivo."
],
"resetTitle": "Resetear y terminar",
"resetBody": "El menú también ofrece <strong>r</strong> (resetear la selección actual y empezar de nuevo) y <strong>d</strong> (terminar y continuar). No puedes terminar con un plan vacío."
@@ -135,7 +135,7 @@
"efiBody": "Cuando se selecciona OVMF (UEFI), ProxMenux crea un disco EFI de 4 MB en el almacenamiento que elijas para que el firmware tenga dónde guardar sus variables.",
"isoTitle": "Montaje de la ISO",
"isoBody": "La ISO de instalación se adjunta a <code>ide2</code> como CD-ROM, lista para el primer arranque.",
"guestTitle": "QEMU Guest Agent",
"guestTitle": "QEMU Agente invitado",
"guestBody": "El canal del guest agent se habilita en la configuración de la VM. Aún tienes que instalar el agente dentro del guest — mira los consejos más abajo."
},
"installOptions": {
@@ -182,7 +182,7 @@
{
"name": "Arch Linux",
"variants": [
"latest"
"el último"
]
},
{
@@ -227,7 +227,7 @@
"heading": "Qué hace el script de principio a fin",
"items": [
"Obtiene la ISO de Linux (descarga oficial o archivo local).",
"Aplica la configuración por defecto o avanzada de CPU / RAM / BIOS / machine type.",
"Aplica la configuración predeterminada o avanzada de CPU, RAM, BIOS y tipo de máquina.",
"Abre el plan de almacenamiento y adjunta los discos virtuales, discos importados y dispositivos PCI seleccionados.",
"Crea el disco EFI cuando se selecciona UEFI.",
"Monta la ISO de Linux en <code>ide2</code>.",
@@ -241,23 +241,23 @@
"postInstall": {
"heading": "Consejos post-instalación",
"guestAgentHeading": "Instala el QEMU Guest Agent dentro de la VM",
"guestAgentBody": "ProxMenux habilita el canal del guest agent en la configuración de la VM, pero el agente como tal tiene que instalarse dentro del guest. Permite el apagado controlado, el freeze del filesystem para snapshots consistentes y un reporte de memoria preciso en la UI de Proxmox.",
"guestAgentBody": "ProxMenux habilita el canal del agente invitado en la configuración de la VM, pero debes instalar el agente dentro del sistema invitado. Permite el apagado controlado y congelar los sistemas de archivos durante los backups para mejorar la coherencia de los datos.",
"debian": "Debian / Ubuntu",
"fedora": "Fedora / Rocky / RHEL",
"arch": "Arch Linux",
"opensuse": "openSUSE",
"virtioHeading": "Soporte de VirtIO en Linux",
"virtioBody": "Los kernels modernos de Linux (2.6.25+) incluyen los drivers VirtIO de disco y red por defecto, así que puedes cambiar la interfaz del disco a <code>virtio</code> o <code>virtio-scsi</code> en el asistente avanzado y el adaptador de red a <code>virtio</code> sin ningún paso extra de drivers.",
"virtioBody": "Las distribuciones modernas de Linux suelen incluir controladores VirtIO de disco y red. Selecciona <code>virtio</code> para discos de bloques VirtIO o <code>scsi</code> con la controladora VirtIO SCSI configurada; el adaptador de red también usa <code>virtio</code>. Comprueba la compatibilidad en instaladores antiguos.",
"virtioWarnTitle": "Distribuciones muy antiguas",
"virtioWarnBody": "Si vas a instalar algo anterior al kernel 2.6.25, puede que los módulos VirtIO no estén disponibles en el momento de la instalación. En ese caso mantén SATA / SCSI o proporciona un disco de drivers.",
"virtioWarnBody": "Los instaladores muy antiguos pueden carecer de los controladores VirtIO necesarios. En ese caso usa una controladora SATA / SCSI emulada o proporciona los controladores adecuados.",
"trimHeading": "Habilita TRIM / discard en almacenamiento SSD",
"trimBody": "Cuando la VM está sobre almacenamiento Proxmox respaldado por SSD y el disco se adjuntó con el flag <code>discard</code>, puedes propagar los comandos trim desde dentro del guest. Dos opciones:",
"trimItems": [
"Ejecutar <code>fstrim -av</code> periódicamente (o habilitar la unit <code>fstrim.timer</code> en distribuciones systemd).",
"O montar los filesystems con la opción <code>discard</code> en <code>/etc/fstab</code>."
"Ejecuta <code>fstrim -av</code> periódicamente o habilita la unidad <code>fstrim.timer</code> en distribuciones con systemd.",
"O monta los sistemas de archivos con la opción <code>discard</code> en <code>/etc/fstab</code>."
],
"balloonHeading": "Memory ballooning",
"balloonBody": "El driver <code>virtio_balloon</code> viene con los kernels modernos de Linux. Proxmox lo usa para reclamar memoria no usada de la VM y mostrar utilización precisa en la UI — sin configuración del lado del guest."
"balloonHeading": "Asignación dinámica de memoria (ballooning)",
"balloonBody": "Los kernels modernos de Linux suelen incluir el controlador <code>virtio_balloon</code>. Con el dispositivo de ballooning habilitado, Proxmox puede recopilar estadísticas de memoria. La recuperación dinámica requiere además una memoria mínima inferior a la máxima configurada; con valores iguales la asignación permanece fija."
},
"related": {
"heading": "Relacionado",
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Crear VM: System NAS | ProxMenux Documentation",
"title": "Crear VM: sistema NAS | Documentación de ProxMenux",
"description": "Crea máquinas virtuales NAS en Proxmox VE con ProxMenux. Soporta Synology DSM (loader), TrueNAS SCALE / CORE, OpenMediaVault, XigmaNAS, Rockstor, ZimaOS y FygoOS. Umbrel OS está disponible vía community script.",
"ogTitle": "Crear VM: System NAS | ProxMenux Documentation",
"ogTitle": "Crear VM: sistema NAS | Documentación de ProxMenux",
"ogDescription": "Crea máquinas virtuales NAS en Proxmox VE con ProxMenux. Soporta Synology DSM (loader), TrueNAS SCALE / CORE, OpenMediaVault, XigmaNAS, Rockstor, ZimaOS y FygoOS.",
"ogImageAlt": "Menú System NAS de ProxMenux"
},
@@ -13,7 +13,7 @@
},
"intro": {
"title": "Cómo funciona el selector de NAS",
"body": "El selector de NAS detecta la última release estable de cada appliance (consultando su mirror upstream), descarga la ISO — o construye la VM a partir de una imagen pre-empaquetada — y luego cede el control al asistente genérico de VM de ProxMenux para CPU, RAM, disco y configuración de red."
"body": "En el flujo genérico de ISO, el selector NAS intenta detectar la última versión estable en el servidor del proyecto, usa una versión alternativa si hace falta, descarga la ISO y abre la configuración compartida de CPU, RAM, discos y red. Synology DSM y ZimaOS usan instaladores específicos."
},
"image": {
"alt": "Selector System NAS de ProxMenux",
@@ -26,7 +26,7 @@
},
"labels": {
"base": "Base",
"fileSystem": "Filesystem",
"fileSystem": "Sistema de archivos",
"viewDetails": "Ver detalles"
},
"supported": {
@@ -36,14 +36,14 @@
"name": "Synology DSM",
"tagline": "DiskStation Manager con el loader ARC / RR. Requiere configurar el loader antes del primer arranque.",
"icon": "HardDrive",
"base": "Linux (custom)",
"base": "Linux (personalizado)",
"fileSystem": "Btrfs, ext4",
"href": "/docs/create-vm/system-nas/synology",
"flow": "loader"
},
{
"name": "TrueNAS SCALE",
"tagline": "TrueNAS basado en Debian con apps Docker / Kubernetes y ZFS como filesystem principal.",
"tagline": "TrueNAS basado en Debian con apps Docker en las versiones actuales y ZFS como sistema de archivos principal. Las versiones antiguas de SCALE usaban Kubernetes.",
"icon": "Database",
"base": "Debian Linux",
"fileSystem": "ZFS",
@@ -52,7 +52,7 @@
},
{
"name": "TrueNAS CORE",
"tagline": "TrueNAS basado en FreeBSD. Almacenamiento ZFS de nivel empresarial con jails y plugins.",
"tagline": "TrueNAS basado en FreeBSD, centrado en almacenamiento ZFS. Las jails y los plugins de CORE 13.3 están obsoletos y carecen de soporte.",
"icon": "Database",
"base": "FreeBSD",
"fileSystem": "ZFS",
@@ -90,7 +90,7 @@
"name": "ZimaOS",
"tagline": "SO NAS ligero centrado en multimedia, apps Docker y domótica. Usa su propio instalador.",
"icon": "MonitorIcon",
"base": "Debian / CasaOS",
"base": "Buildroot (evolución de CasaOS)",
"fileSystem": "ext4",
"href": "/docs/create-vm/system-nas/system-nas-others#zimaos",
"flow": "dedicated"
@@ -112,7 +112,7 @@
},
"zfsMem": {
"title": "Regla rápida de memoria para ZFS",
"bodyRich": "Si eliges un NAS basado en ZFS (TrueNAS, XigmaNAS), asigna al menos <strong>8 GB de RAM</strong> a la VM — ZFS usa la memoria libre como caché ARC y el rendimiento se degrada notablemente por debajo de eso. Rockstor (Btrfs) y OMV (ext4) son mucho menos exigentes con la memoria."
"bodyRich": "Para TrueNAS, asigna al menos <strong>8 GB de RAM</strong> para el funcionamiento básico y más para cargas exigentes. ZFS usa RAM para la caché ARC, pero no existe un umbral universal de 8 GB para todo NAS ZFS. Comprueba los requisitos de la distribución y dimensiona según discos, servicios y apps; configuraciones ligeras de OMV o Rockstor pueden necesitar menos."
},
"related": {
"heading": "Relacionado",
@@ -1,13 +1,13 @@
{
"meta": {
"title": "Crear VM: Synology DSM | ProxMenux Documentation",
"description": "Crea una máquina virtual Synology DSM en Proxmox VE. ProxMenux descarga el loader que elijas (Arc, RR, TinyCore M-shell o uno personalizado), lo importa como disco de arranque de la VM y prepara CPU, RAM y almacenamiento mediante el asistente por defecto o avanzado.",
"ogTitle": "Crear VM: Synology DSM | ProxMenux Documentation",
"title": "Crear VM: Synology DSM | Documentación de ProxMenux",
"description": "Crea una máquina virtual Synology DSM en Proxmox VE. ProxMenux descarga el loader elegido (Arc, RR, Alpine RedPill M-shell o una imagen propia), lo importa como disco de arranque de la VM y configura CPU, RAM y almacenamiento mediante el asistente predeterminado o avanzado.",
"ogTitle": "Crear VM: Synology DSM | Documentación de ProxMenux",
"ogDescription": "Crea una máquina virtual Synology DSM en Proxmox VE con ProxMenux."
},
"header": {
"title": "Crear VM: Synology DSM",
"description": "Crea una máquina virtual Synology DSM en Proxmox VE. ProxMenux descarga el loader que elijas (Arc, RR, TinyCore M-shell o uno personalizado), lo importa como disco de arranque de la VM y prepara CPU, RAM y almacenamiento mediante el asistente por defecto o avanzado.",
"description": "Crea una máquina virtual Synology DSM en Proxmox VE. ProxMenux descarga el loader elegido (Arc, RR, Alpine RedPill M-shell o una imagen propia), lo importa como disco de arranque de la VM y configura CPU, RAM y almacenamiento mediante el asistente predeterminado o avanzado.",
"section": "Máquinas virtuales · NAS"
},
"loaderLabels": {
@@ -32,7 +32,7 @@
"url": "https://github.com/RROrg/rr"
},
{
"name": "TinyCore RedPill M-shell",
"name": "Alpine RedPill M-shell (proyecto TinyCore)",
"url": "https://github.com/PeterSuh-Q3/tinycore-redpill"
}
],
@@ -46,7 +46,7 @@
"headerValue": "Valor por defecto",
"defaultRowsRich": [
{
"param": "Machine type",
"param": "Tipo de máquina",
"valueRich": "<code>q35</code>"
},
{
@@ -54,11 +54,11 @@
"valueRich": "OVMF (UEFI)"
},
{
"param": "CPU type",
"param": "Tipo de CPU",
"valueRich": "Host"
},
{
"param": "Cores",
"param": "Núcleos",
"valueRich": "2"
},
{
@@ -66,15 +66,15 @@
"valueRich": "4096 MB"
},
{
"param": "Bridge",
"param": "Puente",
"valueRich": "<code>vmbr0</code>"
},
{
"param": "MAC address",
"param": "Dirección MAC",
"valueRich": "Generada automáticamente"
},
{
"param": "Start on completion",
"param": "Arrancar al terminar",
"valueRich": "No"
}
],
@@ -83,7 +83,7 @@
"headerOptions": "Opciones",
"advancedRowsRich": [
{
"param": "Machine type",
"param": "Tipo de máquina",
"optionsRich": "<code>q35</code> o <code>i440fx</code>"
},
{
@@ -91,11 +91,11 @@
"optionsRich": "OVMF (UEFI) o SeaBIOS (Legacy)"
},
{
"param": "CPU type",
"param": "Tipo de CPU",
"optionsRich": "Host o KVM64"
},
{
"param": "Cores",
"param": "Núcleos",
"optionsRich": "Número de núcleos de CPU"
},
{
@@ -103,11 +103,11 @@
"optionsRich": "Memoria asignada a la VM"
},
{
"param": "Bridge",
"param": "Puente",
"optionsRich": "Bridge de red"
},
{
"param": "MAC address",
"param": "Dirección MAC",
"optionsRich": "MAC personalizada"
},
{
@@ -127,7 +127,7 @@
"virtualItemsRich": [
"Lista los volúmenes de almacenamiento Proxmox disponibles en el host.",
"Eliges el almacenamiento destino y el tamaño en GB.",
"El disco se adjunta a la VM como SATA (<code>sata0</code>, <code>sata1</code>, … hasta 6)."
"El disco se conecta como SATA (<code>sata0</code>, <code>sata1</code>, …). Los discos de datos virtuales y físicos comparten los seis puertos SATA numerados del 0 al 5."
],
"importHeading": "b. Añadir disco importado",
"importItemsRich": [
@@ -139,7 +139,7 @@
"pciItemsRich": [
"Detecta HBAs SATA/SAS y dispositivos NVMe del host y te deja pasar una <em>controladora entera</em> a la VM. IOMMU debe estar habilitado; el script se ofrece a habilitarlo y reinicia si hace falta.",
"Un paso de confirmación advierte del riesgo a nivel de controladora (la tarjeta completa, incluidos todos los discos que tenga, deja de estar en el host).",
"Los dispositivos PCI seleccionados se adjuntan mediante <code>qm set hostpciN: …</code>."
"Los dispositivos PCI se conectan con comandos como <code>qm set VMID --hostpci0 PCI_ADDRESS,pcie=1</code>. Sustituye VMID y PCI_ADDRESS por el ID de la VM y la dirección PCI y usa un índice hostpci libre para cada dispositivo."
],
"resetCalloutTitle": "Resetear y terminar",
"resetCalloutBodyRich": "El menú también ofrece <strong>r</strong> (resetear la selección actual y empezar de nuevo) y <strong>d</strong> (terminar y continuar). No puedes terminar con un plan vacío — Synology necesita al menos un disco para instalar DSM."
@@ -150,7 +150,7 @@
},
"loaderInstall": {
"heading": "Instalación del loader",
"intro1Rich": "<strong>Arc</strong>, <strong>RR</strong> y <strong>TinyCore M-shell</strong> se descargan y extraen automáticamente desde sus repositorios upstream de GitHub. Si la descarga falla, el script aborta con un mensaje claro.",
"intro1Rich": "<strong>Arc</strong>, <strong>RR</strong> y <strong>Alpine RedPill M-shell</strong> se descargan y extraen automáticamente desde sus repositorios originales de GitHub. Si la descarga falla, el script se detiene con un mensaje claro.",
"intro2Rich": "Para la opción <strong>Custom Loader</strong>, el script escanea <code>/var/lib/vz/template/iso</code>. Si hay más de un candidato te pedirá que elijas el que quieres.",
"uploadIntro": "Puedes subir loaders personalizados desde el almacenamiento local de Proxmox:",
"imageAlt": "Añadir custom loader",
@@ -160,18 +160,18 @@
"heading": "Creación de la VM — qué ejecuta el script",
"introRich": "Una vez confirmas el loader, ProxMenux ejecuta el equivalente a estos comandos <code>qm</code>:",
"itemsRich": [
"<code>qm create</code> — crea la VM con la CPU, RAM, BIOS y machine type seleccionados.",
"<code>qm importdisk</code> — importa el loader como disco <strong>IDE</strong> (máxima compatibilidad).",
"<code>qm set sataN: …</code> — adjunta los discos virtuales y discos importados del plan de almacenamiento, más la interfaz de red.",
"<code>qm set hostpciN: …</code> — adjunta cualquier dispositivo controladora / NVMe seleccionado para PCI passthrough.",
"<code>qm set --boot</code> — pone el loader como primer dispositivo de arranque."
"<code>qm create</code> — crea la VM con la CPU, RAM, BIOS y tipo de máquina elegidos.",
"<code>qm importdisk</code> importa la imagen del loader al almacenamiento Proxmox. Después el script la conecta a la VM como disco <strong>IDE</strong> en ide0 para mejorar la compatibilidad.",
"<code>qm set VMID --sata0 DISK_REFERENCE</code> conecta un disco de datos del plan. Sustituye VMID y DISK_REFERENCE por el ID de la VM y la referencia del disco; usa un índice SATA libre del 0 al 5. La red se configura mediante qm create.",
"<code>qm set VMID --hostpci0 PCI_ADDRESS,pcie=1</code> conecta una controladora PCI o un dispositivo NVMe seleccionado. Sustituye VMID y PCI_ADDRESS por el ID de la VM y la dirección PCI y usa un índice hostpci libre para cada dispositivo.",
"<code>qm set VMID --boot order=ide0</code> configura el loader como dispositivo de arranque. Sustituye VMID por el ID de la VM."
]
},
"stepByStep": {
"heading": "Configuración del loader paso a paso",
"intro": "Todos los loaders siguen el mismo patrón general — arrancar la VM, elegir un modelo, elegir una versión de DSM, elegir add-ons, construir, arrancar — pero las pantallas y los menús difieren. La guía siguiente recorre los seis pasos comunes con capturas de cada loader. Las opciones exactas pueden cambiar con nuevas releases del loader.",
"intro": "Los seis pasos comunes son: arrancar la VM, elegir modelo, versión de DSM y complementos, construir y arrancar. Los menús y las opciones varían según la versión. Las capturas de M-shell muestran una interfaz anterior de TinyCore; el script actual descarga Alpine RedPill M-shell, por lo que debes seguir sus indicaciones actuales.",
"warnCalloutTitle": "Los loaders no los mantiene ProxMenux",
"warnCalloutBody": "Arc, RR y TinyCore son proyectos de la comunidad con su propia cadencia de release. Si un paso se ve distinto a las capturas de abajo, lo más probable es que el loader se haya actualizado — consulta la documentación del propio loader (enlaces al final de esta página)."
"warnCalloutBody": "Arc, RR y Alpine RedPill M-shell son proyectos de la comunidad con su propia cadencia de release. Si un paso se ve distinto a las capturas de abajo, lo más probable es que el loader se haya actualizado — consulta la documentación del propio loader (enlaces al final de esta página)."
},
"stepBadge": "Paso",
"step1": {
@@ -310,32 +310,32 @@
"title": "Construye el loader",
"introRich": "Con el modelo, la versión de DSM y los addons elegidos, selecciona <strong>Build the Loader</strong>. Esto puede tardar unos minutos según el loader y las opciones elegidas.",
"arc": {
"alt": "Build loader en Arc",
"caption": "Arc — build loader"
"alt": "Construcción del loader en Arc",
"caption": "Construcción del loader en Arc"
},
"rr": {
"alt": "Build loader en RR",
"caption": "RR — build loader"
"alt": "Construcción del loader en RR",
"caption": "Construcción del loader en RR"
},
"tinycore": {
"alt": "Build loader en TinyCore",
"caption": "TinyCore — build loader"
"alt": "Construcción del loader en TinyCore",
"caption": "Construcción del loader en TinyCore"
}
},
"step6": {
"title": "Arranca el loader",
"intro": "Una vez construido el loader, la VM reinicia con la configuración que has creado y empieza la instalación de DSM.",
"arc": {
"alt": "Boot loader en Arc",
"caption": "Arc — boot loader"
"alt": "Arranque del loader en Arc",
"caption": "Arranque del loader en Arc"
},
"rr": {
"alt": "Boot loader en RR",
"caption": "RR — boot loader"
"alt": "Arranque del loader en RR",
"caption": "Arranque del loader en RR"
},
"tinycore": {
"alt": "Boot loader en TinyCore",
"caption": "TinyCore — boot loader"
"alt": "Arranque del loader en TinyCore",
"caption": "Arranque del loader en TinyCore"
}
},
"dsmInstall": {
@@ -377,12 +377,12 @@
"itemsRich": [
{
"href": "/docs/create-vm/system-nas",
"label": "Resumen de System NAS",
"label": "Resumen de sistemas NAS",
"tail": " — comparativa entre Synology y TrueNAS / OMV / Rockstor / XigmaNAS."
},
{
"href": "/docs/create-vm/system-nas/system-nas-others",
"label": "Otros System NAS",
"label": "Otros sistemas NAS",
"tail": " — distribuciones NAS no-Synology."
},
{
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Crear VM: Otros sistemas NAS | ProxMenux Documentation",
"title": "Crear VM: otros sistemas NAS | Documentación de ProxMenux",
"description": "Crea máquinas virtuales de TrueNAS SCALE, TrueNAS CORE, OpenMediaVault, XigmaNAS, Rockstor, ZimaOS y FygoOS en Proxmox VE con ProxMenux. Cubre la configuración por defecto / avanzada, el nuevo plan de almacenamiento, el passthrough de GPU opcional y las specs recomendadas por sistema.",
"ogTitle": "Crear VM: Otros sistemas NAS | ProxMenux Documentation",
"ogTitle": "Crear VM: otros sistemas NAS | Documentación de ProxMenux",
"ogDescription": "Crea VMs de TrueNAS SCALE / CORE, OpenMediaVault, XigmaNAS, Rockstor, ZimaOS y FygoOS en Proxmox VE con ProxMenux.",
"ogImageAlt": "Selector NAS de ProxMenux"
},
@@ -23,7 +23,7 @@
"headerValue": "Valor por defecto",
"defaultRowsRich": [
{
"param": "Machine type",
"param": "Tipo de máquina",
"valueRich": "<code>q35</code>"
},
{
@@ -31,11 +31,11 @@
"valueRich": "OVMF (UEFI)<note> — SeaBIOS para OpenMediaVault</note>"
},
{
"param": "CPU type",
"param": "Tipo de CPU",
"valueRich": "Host"
},
{
"param": "Cores",
"param": "Núcleos",
"valueRich": "2"
},
{
@@ -43,15 +43,15 @@
"valueRich": "8192 MB<note> — 4096 MB para ZimaOS</note>"
},
{
"param": "Bridge",
"param": "Puente",
"valueRich": "<code>vmbr0</code>"
},
{
"param": "MAC address",
"param": "Dirección del MAC",
"valueRich": "Generada automáticamente"
},
{
"param": "Start on completion",
"param": "Arrancar al terminar",
"valueRich": "No"
}
],
@@ -60,7 +60,7 @@
"headerOptions": "Opciones",
"advancedRowsRich": [
{
"param": "Machine type",
"param": "Tipo de máquina",
"optionsRich": "<code>q35</code> o <code>i440fx</code>"
},
{
@@ -68,11 +68,11 @@
"optionsRich": "OVMF (UEFI) o SeaBIOS (Legacy)"
},
{
"param": "CPU type",
"optionsRich": "Host o KVM64"
"param": "Tipo de CPU",
"optionsRich": "Host, KVM64 y otros modelos de CPU de la lista (ZimaOS: Host o KVM64)"
},
{
"param": "Cores",
"param": "Núcleos",
"optionsRich": "Número de núcleos de CPU"
},
{
@@ -80,11 +80,11 @@
"optionsRich": "Memoria asignada a la VM"
},
{
"param": "Bridge",
"param": "Puente",
"optionsRich": "Bridge de red"
},
{
"param": "MAC address",
"param": "Dirección del MAC",
"optionsRich": "MAC personalizada"
},
{
@@ -97,7 +97,7 @@
}
],
"zfsCalloutTitle": "ZFS y RAM",
"zfsCalloutBody": "TrueNAS SCALE / CORE y XigmaNAS están basados en ZFS. ZFS usa la memoria libre como caché ARC, así que los 8 GB por defecto son un mínimo — súbela a 16 GB o más si tienes pensado guardar algo serio. OMV (ext4/XFS), Rockstor (Btrfs) y ZimaOS son mucho menos exigentes con la memoria."
"zfsCalloutBody": "TrueNAS SCALE / CORE y XigmaNAS usan ZFS, cuya caché ARC se beneficia de la RAM. TrueNAS necesita al menos 8 GB para uso básico; 16 GB o más pueden ayudar con servicios y apps exigentes. Dimensiona la VM según la distribución y la carga; 8 GB no es un mínimo universal de ZFS. Las configuraciones ligeras de OMV, Rockstor o ZimaOS pueden necesitar menos."
},
"storagePlan": {
"heading": "Plan de almacenamiento",
@@ -106,19 +106,19 @@
"virtualItemsRich": [
"Lista los volúmenes de almacenamiento Proxmox disponibles en el host.",
"Eliges el almacenamiento destino y el tamaño en GB.",
"El disco se adjunta a la VM como SATA (<code>sata0</code>, <code>sata1</code>, … hasta 6)."
"El disco usa el bus elegido: SCSI (predeterminado), SATA, VirtIO o IDE (ZimaOS: SCSI o SATA). Los puertos SATA son <code>sata0</code>, <code>sata1</code>, …, seis puertos numerados del 0 al 5."
],
"importHeading": "b. Añadir disco importado",
"importItemsRich": [
"Detecta los discos físicos que es seguro importar (los discos del sistema y protegidos están ocultos).",
"Seleccionas uno o varios discos mediante una checklist.",
"Los discos importados se adjuntan como SATA mediante <code>qm set</code>."
"Los discos importados usan el bus elegido y se conectan mediante <code>qm set</code>."
],
"pciHeading": "c. Añadir controladora o NVMe (PCI passthrough)",
"pciItemsRich": [
"Detecta HBAs SATA/SAS y dispositivos NVMe del host y te deja pasar una <em>controladora entera</em> a la VM. IOMMU debe estar habilitado; el script se ofrece a habilitarlo y reinicia si hace falta.",
"Un paso de confirmación advierte del riesgo a nivel de controladora (la tarjeta completa, incluidos todos los discos que tenga, deja de estar en el host).",
"Los dispositivos PCI seleccionados se adjuntan mediante <code>qm set hostpciN: …</code>."
"Los dispositivos PCI se conectan con comandos como <code>qm set VMID --hostpci0 PCI_ADDRESS,pcie=1</code>. Sustituye VMID y PCI_ADDRESS por el ID de la VM y la dirección PCI y usa un índice hostpci libre para cada dispositivo."
],
"resetCalloutTitle": "Resetear y terminar",
"resetCalloutBodyRich": "El menú también ofrece <strong>r</strong> (resetear la selección actual y empezar de nuevo) y <strong>d</strong> (terminar y continuar). No puedes terminar con un plan vacío."
@@ -133,7 +133,7 @@
"efiBody": "Cuando se selecciona OVMF (UEFI), ProxMenux crea automáticamente un disco EFI de 4 MB en el almacenamiento que elijas, formateado para coincidir con el tipo de almacenamiento (raw para almacenamiento basado en directorio).",
"isoTitle": "Montaje de la ISO",
"isoBodyRich": "La ISO de instalación se descarga (si hace falta) y se adjunta a <code>ide2</code> como CD-ROM, lista para el primer arranque.",
"guestTitle": "QEMU Guest Agent",
"guestTitle": "QEMU Agente invitado",
"guestBody": "El canal del guest agent se habilita en la configuración de la VM. Aún tienes que instalar el agente dentro del guest una vez el SO NAS esté arriba."
},
"endToEnd": {
@@ -163,7 +163,7 @@
"icon": "Database",
"officialName": "TrueNAS SCALE",
"officialUrl": "https://www.truenas.com/truenas-scale/",
"description": "TrueNAS basado en Debian con apps Docker / Kubernetes, Linux KVM y ZFS como filesystem principal. El sucesor moderno de FreeNAS para quien quiere ZFS más un ecosistema de contenedores.",
"description": "TrueNAS basado en Debian con apps Docker en las versiones actuales, Linux KVM y ZFS como sistema de archivos principal. Las versiones antiguas de SCALE usaban Kubernetes. Combina almacenamiento ZFS y un ecosistema de contenedores.",
"specs": [
"Interfaz recomendada: SATA o SCSI (ambas soportan discard/trim)",
"RAM mínima: 8 GB (16 GB+ recomendado para cargas reales)",
@@ -182,7 +182,7 @@
"icon": "Database",
"officialName": "TrueNAS CORE",
"officialUrl": "https://www.truenas.com/truenas-core/",
"description": "TrueNAS basado en FreeBSD (el antiguo FreeNAS). Almacenamiento ZFS maduro con jails y plugins, pero sin Docker / Kubernetes. Se está descontinuando en favor de SCALE pero sigue ampliamente desplegado.",
"description": "TrueNAS basado en FreeBSD, antes FreeNAS, centrado en almacenamiento ZFS. Las jails, plugins y funciones de virtualización de CORE 13.3 están obsoletas y sin soporte; el desarrollo actual se centra en las ediciones Linux.",
"specs": [
"Interfaz recomendada: SATA",
"RAM mínima: 8 GB (16 GB+ recomendado)",
@@ -254,7 +254,7 @@
"icon": "MonitorIcon",
"officialName": "zimaspace.com",
"officialUrl": "https://www.zimaspace.com/zimaos",
"description": "SO ligero de NAS / home server construido sobre Debian, con foco en multimedia, apps Docker y domótica. ZimaOS usa un instalador dedicado de ProxMenux (vm/zimaos.sh) que descarga una imagen pre-construida, pero el perfil de la VM sigue el mismo flujo que los otros sistemas NAS.",
"description": "SO ligero para NAS y servidor doméstico construido con Buildroot, evolución de CasaOS, centrado en multimedia, apps Docker y domótica. ZimaOS usa un instalador específico de ProxMenux (vm/zimaos.sh) que descarga una imagen preparada y permite configurar CPU, RAM y almacenamiento.",
"specs": [
"Interfaz recomendada: SATA o VirtIO",
"RAM por defecto: 4 GB (suficiente para multimedia / apps autoalojadas)",
@@ -1,14 +1,14 @@
{
"meta": {
"title": "Crear VM: System Windows | ProxMenux Documentation",
"title": "Crear VM: sistema Windows | Documentación de ProxMenux",
"description": "Crea y configura máquinas virtuales Windows en Proxmox VE con ProxMenux. Incluye rutas de ISO UUP Dump y ISO local, configuración por defecto / avanzada, plan de almacenamiento unificado, passthrough de GPU opcional, configuración de TPM 2.0 e instalación de drivers VirtIO.",
"ogTitle": "Crear VM: System Windows | ProxMenux Documentation",
"ogTitle": "Crear VM: sistema Windows | Documentación de ProxMenux",
"ogDescription": "Crea VMs Windows en Proxmox VE con ProxMenux. UUP Dump o ISO local, plan de almacenamiento unificado, passthrough de GPU opcional, TPM 2.0 y drivers VirtIO.",
"ogImageAlt": "Menú de VM Windows de ProxMenux"
},
"header": {
"title": "Crear VM: System Windows",
"description": "Crea una VM Windows en Proxmox VE. ProxMenux gestiona la selección de ISO (UUP Dump o local), la configuración de CPU / RAM / machine type, el plan de almacenamiento unificado, el passthrough de GPU opcional, la configuración de TPM 2.0 y la instalación de drivers VirtIO.",
"title": "Crear VM: sistema Windows",
"description": "Crea una VM Windows en Proxmox VE. ProxMenux gestiona la selección de ISO (UUP Dump o local), la configuración de CPU, RAM y tipo de máquina, el plan de almacenamiento común, el passthrough de GPU opcional, TPM 2.0 y la instalación de controladores VirtIO.",
"section": "Máquinas virtuales"
},
"intro": {
@@ -27,7 +27,7 @@
"headerValue": "Valor por defecto",
"defaultRows": [
{
"param": "Machine type",
"param": "Tipo de máquina",
"valueRich": "<code>q35</code>"
},
{
@@ -35,11 +35,11 @@
"value": "OVMF (UEFI)"
},
{
"param": "CPU type",
"param": "Tipo de CPU",
"value": "Host"
},
{
"param": "Cores",
"param": "Núcleos",
"value": "4"
},
{
@@ -47,11 +47,11 @@
"value": "8192 MB"
},
{
"param": "Bridge",
"param": "Puente",
"valueRich": "<code>vmbr0</code>"
},
{
"param": "MAC address",
"param": "Dirección MAC",
"value": "Generada automáticamente"
},
{
@@ -59,7 +59,7 @@
"value": "Habilitado (v2.0)"
},
{
"param": "Start on completion",
"param": "Arrancar al terminar",
"value": "No"
}
],
@@ -68,7 +68,7 @@
"headerOptions": "Opciones",
"advancedRows": [
{
"param": "Machine type",
"param": "Tipo de máquina",
"optionsRich": "<code>q35</code> o <code>i440fx</code>"
},
{
@@ -76,11 +76,11 @@
"options": "OVMF (UEFI) o SeaBIOS (Legacy)"
},
{
"param": "CPU type",
"options": "Host o KVM64"
"param": "Tipo de CPU",
"options": "Host, KVM64 y otros modelos de CPU de la lista"
},
{
"param": "Cores",
"param": "Núcleos",
"options": "Número de núcleos de CPU"
},
{
@@ -88,11 +88,11 @@
"options": "Memoria asignada a la VM"
},
{
"param": "Bridge",
"param": "Puente",
"options": "Bridge de red"
},
{
"param": "MAC address",
"param": "Dirección MAC",
"options": "MAC personalizada"
},
{
@@ -105,11 +105,11 @@
},
{
"param": "TPM",
"options": "Habilitar o deshabilitar TPM 2.0"
"options": "TPM 2.0 se añade automáticamente para Windows; este asistente no permite activarlo o desactivarlo."
}
],
"tpmWarnTitle": "Windows 11 y Windows Server 2022 necesitan TPM",
"tpmWarnBody": "Windows 11 y Windows Server 2022 se niegan a instalarse sin un dispositivo TPM 2.0 adjunto a la VM. ProxMenux lo añade por defecto; deshabilítalo en Avanzado solo si sabes que la edición destino no lo requiere."
"tpmWarnTitle": "Los requisitos de TPM dependen de la edición de Windows",
"tpmWarnBody": "Windows 11 normalmente requiere TPM 2.0. Windows Server 2022 lo necesita para determinadas funciones de seguridad, no para todas las instalaciones. ProxMenux añade un TPM virtual para Windows; el asistente avanzado no permite activarlo o desactivarlo."
},
"storagePlan": {
"heading": "Plan de almacenamiento",
@@ -118,19 +118,19 @@
"virtualDiskItems": [
"Lista los volúmenes de almacenamiento Proxmox disponibles en el host.",
"Eliges el almacenamiento destino y el tamaño en GB.",
"El disco se adjunta a la VM como SATA (<code>sata0</code>, <code>sata1</code>, … hasta 6)."
"El disco usa el bus elegido: SCSI (predeterminado), SATA, VirtIO o IDE. Los puertos SATA son <code>sata0</code>, <code>sata1</code>, …, seis puertos numerados del 0 al 5."
],
"importDiskTitle": "b. Añadir disco importado",
"importDiskItems": [
"Detecta los discos físicos que es seguro importar (los discos del sistema y protegidos están ocultos).",
"Seleccionas uno o varios discos mediante una checklist.",
"Los discos importados se adjuntan como SATA mediante <code>qm set</code>."
"Los discos importados usan el bus elegido y se conectan mediante <code>qm set</code>."
],
"pciTitle": "c. Añadir controladora o NVMe (PCI passthrough)",
"pciItems": [
"Detecta HBAs SATA/SAS y dispositivos NVMe del host y te deja pasar una <em>controladora entera</em> a la VM. IOMMU debe estar habilitado; el script se ofrece a habilitarlo y reinicia si hace falta.",
"Un paso de confirmación advierte del riesgo a nivel de controladora (la tarjeta completa, incluidos todos los discos que tenga, deja de estar en el host).",
"Los dispositivos PCI seleccionados se adjuntan mediante <code>qm set hostpciN: …</code>."
"Los dispositivos PCI se conectan con comandos como <code>qm set VMID --hostpci0 PCI_ADDRESS,pcie=1</code>. Sustituye VMID y PCI_ADDRESS por el ID de la VM y la dirección PCI y usa un índice hostpci libre para cada dispositivo."
],
"resetTitle": "Resetear y terminar",
"resetBody": "El menú también ofrece <strong>r</strong> (resetear la selección actual y empezar de nuevo) y <strong>d</strong> (terminar y continuar). No puedes terminar con un plan vacío."
@@ -144,16 +144,16 @@
"efiTitle": "Disco EFI",
"efiBody": "Cuando se selecciona OVMF (UEFI), ProxMenux crea un disco EFI de 4 MB en el almacenamiento que elijas y lo adjunta a la VM para que el firmware UEFI tenga dónde guardar sus variables.",
"tpmTitle": "TPM 2.0",
"tpmBody": "Se añade automáticamente un dispositivo TPM 2.0 virtual para que los instaladores de Windows 11 / Server 2022 pasen el chequeo de compatibilidad de hardware.",
"tpmBody": "ProxMenux añade un dispositivo TPM 2.0 virtual a las VM Windows. Cumple el requisito de TPM de Windows 11 y permite funciones de Windows Server que dependen de TPM.",
"isoTitle": "Montaje de la ISO",
"isoBody": "La ISO de instalación se adjunta a <code>ide2</code>. La ISO de drivers VirtIO se descarga (si hace falta) y se adjunta a <code>ide3</code>, lista para el paso <em>Load driver</em>.",
"guestTitle": "QEMU Guest Agent",
"guestTitle": "QEMU Agente invitado",
"guestBody": "El canal del guest agent se habilita en la configuración de la VM. El agente como tal se instala dentro de Windows ejecutando <code>virtio-win-guest-tools.exe</code> después del setup."
},
"installOptions": {
"heading": "Opciones de instalación de Windows",
"intro": "ProxMenux ofrece dos métodos para obtener el medio de instalación de Windows:",
"uupTitle": "UUP Dump ISO Creator",
"uupTitle": "Creador de ISO UUP Dump",
"uupLogoAlt": "Logo de UUP Dump",
"uupBody": "El script <strong>UUP Dump ISO Creator</strong> es una utilidad de ProxMenux que construye una ISO de Windows al vuelo desde los servidores de Windows Update de Microsoft. Trae archivos de instalación oficiales y limpios (incluyendo builds Insider Preview).",
"uupItems": [
@@ -173,7 +173,7 @@
"heading": "Qué hace el script de principio a fin",
"items": [
"Obtiene la ISO de Windows (build de UUP Dump o copia local).",
"Aplica la configuración por defecto o avanzada de CPU / RAM / BIOS / machine type.",
"Aplica la configuración predeterminada o avanzada de CPU, RAM, BIOS y tipo de máquina.",
"Abre el plan de almacenamiento y adjunta los discos virtuales, discos importados y dispositivos PCI seleccionados.",
"Crea el disco EFI (instalaciones UEFI) y adjunta el dispositivo TPM 2.0.",
"Monta la ISO de Windows en <code>ide2</code>.",
@@ -187,9 +187,9 @@
},
"virtio": {
"heading": "Drivers VirtIO durante la instalación",
"body": "Si dejas almacenamiento y red en los valores por defecto (SATA + e1000), Windows instalará sin pasos extra. Eso sí, el plan de almacenamiento de Proxmox siempre adjunta los discos virtuales como SATA, lo cual funciona por defecto. Donde VirtIO se vuelve relevante es si, durante el asistente avanzado, eliges VirtIO o SCSI para los discos o VirtIO para la NIC — en ese caso Windows no verá esos dispositivos hasta que se cargue el driver correspondiente desde la ISO de VirtIO montada en <code>ide3</code>.",
"warnTitle": "Sin el driver de red VirtIO no hay internet durante la instalación",
"warnBody": "Si elegiste VirtIO (<code>virtio</code>) como interfaz de red y no cargas el driver durante el setup, Windows no tendrá acceso a internet. Eso puede bloquear los pasos de activación y de Windows Update en el primer arranque.",
"body": "El creador de VM usa por defecto discos SCSI con controladora VirtIO SCSI y un adaptador de red VirtIO. Una ISO estándar de Windows puede necesitar sus controladores desde la ISO de VirtIO montada en <code>ide3</code>. Los discos SATA suelen funcionar con los controladores incluidos en Windows; elegir SATA no cambia el adaptador de red VirtIO.",
"warnTitle": "Carga el controlador de red VirtIO si Windows no tiene red",
"warnBody": "La VM usa un adaptador de red VirtIO (<code>virtio</code>). Si Windows no incluye su controlador, cárgalo durante la instalación para obtener acceso a la red. De lo contrario, la activación y Windows Update pueden no estar disponibles en el primer arranque.",
"stepLabel": "Paso",
"steps": [
{
@@ -199,14 +199,14 @@
"caption": "Setup de Windows sin discos visibles"
},
{
"title": "Pulsa \"Load driver\"",
"title": "Pulsa «Cargar controlador»",
"bodyRich": "Pulsa <strong>Load driver</strong> para navegar por la ISO de VirtIO montada y elegir el driver de almacenamiento que corresponda a la interfaz que elegiste.",
"img": "/vm/windows/virtio-step-2.png",
"caption": "Pulsa Load driver para navegar por la ISO de VirtIO"
},
{
"title": "Navega a la carpeta de drivers correcta",
"bodyRich": "En la ISO de VirtIO navega a la carpeta que coincida con la interfaz y la versión de Windows — por ejemplo <code>viostor</code> para VirtIO SCSI, con subcarpetas por edición de Windows (10 / 11 / Server).",
"bodyRich": "En la ISO de VirtIO selecciona <code>vioscsi</code> para la controladora VirtIO SCSI o <code>viostor</code> para discos de bloques VirtIO. Después elige la subcarpeta de tu versión de Windows y arquitectura.",
"img": "/vm/windows/virtio-step-3.png",
"caption": "Navega a la carpeta de drivers adecuada"
},
@@ -231,13 +231,13 @@
"items": [
{
"href": "/docs/utils/UUp-Dump-ISO-Creator",
"label": "UUP Dump ISO Creator",
"label": "Creador de ISO UUP Dump",
"tail": " — genera ISOs de instalación de Windows actualizadas en el host Proxmox."
},
{
"href": "/docs/disk-manager/import-disk-image-vm",
"label": "Importar imagen de disco a VM",
"tail": " — adjunta un .vhdx / .vmdk existente de Windows a una VM nueva."
"tail": " — importa una imagen de disco de Windows existente (.vmdk, .qcow2, .img o .raw) en una VM existente; convierte primero las imágenes .vhdx a un formato compatible."
},
{
"href": "/docs/hardware/gpu-vm-passthrough",
@@ -1,14 +1,14 @@
{
"meta": {
"title": "Añadir controladora o NVMe a VM | ProxMenux Documentation",
"title": "Añadir controladora o NVMe a una VM | Documentación de ProxMenux",
"description": "PCI passthrough de una controladora de almacenamiento (HBA SATA / SAS) o un dispositivo NVMe a una VM Proxmox usando ProxMenux. Gestiona la habilitación de IOMMU, la detección de conflictos y el conexionado con qm set --hostpci.",
"ogTitle": "Añadir controladora o NVMe a VM | ProxMenux Documentation",
"ogTitle": "Añadir controladora o NVMe a una VM | Documentación de ProxMenux",
"ogDescription": "Pasa un HBA SATA / SAS entero o un dispositivo NVMe a una VM Proxmox. ProxMenux gestiona IOMMU, detección de conflictos y conexionado hostpci."
},
"header": {
"title": "Añadir controladora o NVMe a VM",
"description": "Pasa un host bus adapter (HBA) SATA / SAS entero o un dispositivo NVMe a una VM Proxmox mediante PCI passthrough. ProxMenux comprueba — y, con tu consentimiento, habilita — IOMMU, enumera los dispositivos elegibles para passthrough, filtra los conflictos y conecta la asignación con qm set --hostpci.",
"section": "Disk Manager · VM"
"section": "Administrador de discos · VM"
},
"intro": {
"title": "Qué hace (y qué no hace) esto",
@@ -20,7 +20,7 @@
},
"iommu": {
"heading": "Grupos IOMMU — por qué la tarjeta entera sale a la vez",
"body": "El PCI passthrough se hace por <strong>grupo IOMMU</strong>, que es la unidad más pequeña que el IOMMU de la CPU puede aislar. Todo lo que hay dentro de un grupo se mueve junto. Si tu controladora SATA comparte grupo IOMMU con la controladora USB, pasar la tarjeta SATA a una VM se lleva también los puertos USB — algo a menudo no deseado.",
"body": "El límite de aislamiento del passthrough PCI es el <strong>grupo IOMMU</strong>, la unidad más pequeña que puede aislar el IOMMU de la CPU. Los dispositivos del mismo grupo no pueden aislarse entre sí. Si una controladora SATA comparte grupo con una USB, pasar la SATA puede requerir liberar también la USB del host o impedir el passthrough. Esto no asigna automáticamente a la VM todos los dispositivos del grupo.",
"outro": "ProxMenux muestra el grupo IOMMU junto a cada dispositivo y te avisa cuando un grupo lleva algo más que la controladora que quieres. Aún así puedes continuar si los dispositivos extra del grupo son aceptables (todas controladoras de disco, por ejemplo), o echar atrás si no lo son."
},
"prereqs": {
@@ -54,8 +54,8 @@
],
"outro": "Es necesario reiniciar después de este cambio. El script te pide reiniciar ahora o más tarde; el passthrough no puede continuar hasta que la nueva cmdline del kernel esté activa.",
"img": "/disk/nvme-passthrough/iommu-warning.png",
"alt": "Diálogo IOMMU Required",
"caption": "IOMMU Required — propuesta de habilitar y reiniciar"
"alt": "Diálogo que indica que se requiere IOMMU",
"caption": "Se requiere IOMMU: propuesta de habilitarlo y reiniciar"
},
{
"title": "Enumeración de dispositivos",
@@ -97,7 +97,7 @@
"busyBody": "Otro proceso aún retiene el dispositivo PCI. Causas más comunes: una VM anterior que crasheó sin soltarlo, o el kernel del host lo recuperó en el último arranque. Ejecuta <code>lspci -nnk -s &lt;addr&gt;</code> para ver qué driver está vinculado; debería ser <code>vfio-pci</code>. Un reinicio completo del host suele resolverlo.",
"noDisksTitle": "El guest ve la controladora pero no los discos",
"noDisksBody": "El modelo de la controladora no tiene driver en el guest. Linux casi nunca tiene este problema; Windows sí — instala el driver del fabricante (p. ej. LSI / Broadcom para HBAs SAS antiguos) con la tarjeta desconectada y luego reinicia con la tarjeta adjuntada.",
"sharedTitle": "Grupo IOMMU compartido que exporta también un dispositivo no relacionado",
"sharedTitle": "El grupo IOMMU incluye un dispositivo no relacionado",
"sharedBody": "Opciones: (a) mover la tarjeta a un slot PCIe distinto para cambiar su grupo, (b) habilitar <em>ACS override</em> en el kernel para separar grupos (compromiso de seguridad — investiga antes de aplicarlo), o (c) elegir otra tarjeta en un grupo más limpio."
},
"related": {
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Formatear / borrar disco físico | ProxMenux Documentation",
"title": "Formatear o borrar un disco físico | Documentación de ProxMenux",
"description": "Wipe seguro y formateo de disco físico en Proxmox VE usando ProxMenux. Cuatro modos de operación, filtros estrictos de seguridad (discos del sistema / montados / en uso bloqueados) y doble confirmación incluyendo tecleo de la ruta completa.",
"ogTitle": "Formatear / borrar disco físico | ProxMenux Documentation",
"ogTitle": "Formatear o borrar un disco físico | Documentación de ProxMenux",
"ogDescription": "Borra o formatea de forma segura un disco físico en Proxmox. Reglas de visibilidad seguras, 4 modos de operación, doble confirmación."
},
"header": {
@@ -43,31 +43,31 @@
"headerUseCase": "Caso de uso",
"rows": [
{
"mode": "1. Wipe all",
"mode": "1. Borrar todo",
"part": "Destruida",
"data": "Firmas borradas",
"useCase": "Empezar de cero: todo lo del disco se va, listo para una nueva distribución."
"useCase": "Elimina la tabla de particiones y los metadatos de sistemas de archivos y RAID, pone a cero los primeros y los últimos 16 MiB y, en unidades que admiten discard, aplica TRIM a todo el disco. El resto de los datos no se sobrescribe y en un HDD aún podría recuperarse; no es un borrado seguro."
},
{
"mode": "2. Remove FS labels",
"mode": "2. Borrar firmas FS",
"part": "Preservada",
"data": "Preservados",
"useCase": "Limpia firmas obsoletas de ZFS / LVM / RAID para que el disco deje de ser reclamado automáticamente, sin tocar los datos."
"useCase": "Elimina firmas antiguas de ZFS / LVM / RAID para evitar que el disco se reclame automáticamente. No sobrescribe los datos de usuario en bloque, pero borrar las firmas puede dejarlos inaccesibles."
},
{
"mode": "3. Zero all data",
"mode": "3. Poner a cero",
"part": "Preservada",
"data": "Destruidos (zerados)",
"useCase": "Sanear antes de entregar el disco, manteniendo la distribución de particiones existente."
"data": "Destruidos (sobrescritos con ceros)",
"useCase": "Sobrescribir con ceros las particiones existentes conservando la tabla de particiones. No cubre el espacio sin asignar ni las áreas de reserva de los SSD; no garantiza el saneamiento completo del dispositivo."
},
{
"mode": "4. Full format",
"mode": "4. Formato completo",
"part": "Nuevo GPT",
"data": "Destruidos",
"useCase": "Disco listo para usar con una única partición nueva y un filesystem fresco."
}
],
"fullFormatOutro": "<strong>Full format</strong> continúa con dos diálogos extra:",
"fullFormatOutro": "<strong>Formato completo</strong> continúa con dos diálogos más:",
"fullFormatItems": [
"<strong>Filesystem</strong> — <code>ext4</code>, <code>xfs</code>, <code>exfat</code> (portable) o <code>btrfs</code>. Si faltan herramientas (por ejemplo <code>mkfs.btrfs</code>) aborta con un mensaje claro.",
"<strong>Etiqueta</strong> — etiqueta opcional del filesystem para identificación."
@@ -83,10 +83,10 @@
},
{
"title": "Elige un modo de operación",
"bodyRich": "Elige entre <strong>Wipe all</strong>, <strong>Remove FS labels</strong>, <strong>Zero all data</strong> o <strong>Full format</strong> según la tabla de arriba."
"bodyRich": "Elige entre <strong>Borrar todo</strong>, <strong>Borrar firmas FS</strong>, <strong>Poner a cero</strong> o <strong>Formato completo</strong> según la tabla anterior."
},
{
"title": "(Solo Full format) Elige filesystem y etiqueta",
"title": "(Solo Formato completo) Elegir sistema de archivos y etiqueta",
"body": "ext4 / xfs / exfat / btrfs, más una etiqueta opcional."
},
{
@@ -1,14 +1,14 @@
{
"meta": {
"title": "Importar imagen de disco a VM | ProxMenux Documentation",
"title": "Importar imagen de disco a una VM | Documentación de ProxMenux",
"description": "Importa un archivo de imagen de disco (.img / .qcow2 / .vmdk / .raw) a una VM Proxmox existente usando ProxMenux. Interfaz por imagen, emulación SSD y flag bootable, con qm importdisk por debajo.",
"ogTitle": "Importar imagen de disco a VM | ProxMenux Documentation",
"ogTitle": "Importar imagen de disco a una VM | Documentación de ProxMenux",
"ogDescription": "Importa imágenes de disco .img / .qcow2 / .vmdk / .raw a una VM existente con ProxMenux. Usa qm importdisk por debajo."
},
"header": {
"title": "Importar imagen de disco a VM",
"description": "Importa un archivo de imagen de disco (.img, .qcow2, .vmdk o .raw) a una VM Proxmox existente. ProxMenux recopila todas las decisiones por adelantado — VM destino, almacenamiento Proxmox, directorio origen, interfaz, emulación SSD, orden de arranque — y luego ejecuta qm importdisk para cada imagen seleccionada.",
"section": "Disk Manager · VM"
"section": "Administrador de discos · VM"
},
"intro": {
"title": "Qué hace esto",
@@ -52,8 +52,8 @@
"intro": "Para cada imagen seleccionada ProxMenux pregunta:",
"items": [
"<strong>Interfaz</strong> — <code>scsi</code> (por defecto), <code>virtio</code>, <code>sata</code> o <code>ide</code>. Determina cómo verá el disco el guest.",
"<strong>Emulación SSD</strong> — solo se ofrece para interfaces no-VirtIO. Añade <code>ssd=1</code> para que el guest anuncie el disco como solid-state (útil para TRIM / alineación a nivel de SO).",
"<strong>Bootable</strong> — si es sí, ProxMenux añade el disco al orden de arranque para que se convierta en el dispositivo de arranque primario de la VM."
"<strong>Emulación SSD</strong>: solo se ofrece para interfaces que no sean VirtIO. Añade <code>ssd=1</code> para que el invitado reconozca un disco de estado sólido. La compatibilidad con discard/TRIM debe configurarse aparte.",
"<strong>Disco de arranque</strong>: si eliges sí, ProxMenux añade el disco al orden de arranque como dispositivo principal de la VM."
]
},
{
@@ -70,10 +70,10 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
"noImagesTitle": "\"No compatible disk images found\"",
"noImagesTitle": "\"No se encontraron imágenes de disco compatibles\"",
"noImagesBody": "El script escaneó el directorio pero no encontró ningún archivo <code>.img</code> / <code>.qcow2</code> / <code>.vmdk</code> / <code>.raw</code>. Comprueba la extensión (las mayúsculas importan), que el archivo esté directamente en el directorio seleccionado (no se buscan subdirectorios) y que los permisos permitan a root leerlo.",
"slowTitle": "La importación va lenta",
"slowBody": "Las conversiones VMDK → QCOW2 → raw están limitadas por CPU y E/S. La velocidad de importación depende de la velocidad de lectura del origen, la velocidad de escritura del almacenamiento destino y la CPU para descompresión. Prefiere orígenes raw o qcow2 cuando sea posible.",
"slowBody": "Las conversiones entre VMDK, QCOW2 y raw pueden estar limitadas por CPU y E/S. La velocidad depende de la lectura del origen, la escritura del destino y la descompresión necesaria. Prefiere fuentes raw o qcow2 cuando sea posible.",
"uefiTitle": "El disco importado arranca en la UEFI shell",
"uefiBody": "La imagen se construyó para legacy (SeaBIOS) pero la VM usa OVMF (o al revés). O bien cambia la BIOS de la VM en Proxmox para que coincida con la imagen, o reconstruye la imagen en el modo correcto antes de importar."
},
@@ -92,7 +92,7 @@
},
{
"href": "/docs/utils/UUp-Dump-ISO-Creator",
"label": "UUP Dump ISO Creator",
"label": "Creador de ISO UUP Dump",
"tail": " — genera una ISO de Windows si necesitas una para una instalación nueva."
},
{
@@ -1,14 +1,14 @@
{
"meta": {
"title": "Importar disco a LXC | ProxMenux Documentation",
"title": "Importar disco a LXC | Documentación de ProxMenux",
"description": "Adjunta un disco físico a un contenedor LXC existente en Proxmox VE usando ProxMenux. Gestiona la detección / formateo del filesystem, el mount point, la conversión unprivileged → privilegiado y rutas de dispositivo persistentes.",
"ogTitle": "Importar disco a LXC | ProxMenux Documentation",
"ogTitle": "Importar disco a LXC | Documentación de ProxMenux",
"ogDescription": "Adjunta un disco físico a un contenedor LXC existente. Gestiona el filesystem, el mount point y la conversión unprivileged → privilegiado."
},
"header": {
"title": "Importar disco a LXC",
"description": "Adjunta un disco físico a un contenedor LXC existente en el host Proxmox. ProxMenux detecta los discos libres, opcionalmente los formatea con un filesystem soportado y conecta la partición a un mount point dentro del contenedor usando rutas de dispositivo persistentes.",
"section": "Disk Manager · LXC"
"section": "Administrador de discos · LXC"
},
"intro": {
"title": "Passthrough en VM vs passthrough en LXC",
@@ -27,7 +27,7 @@
"Al menos un disco físico que no esté en uso por el host ni por ningún otro guest."
],
"warnTitle": "Se requiere contenedor privilegiado",
"warnBody": "El passthrough directo de dispositivos a un contenedor LXC solo funciona si el contenedor es <strong>privilegiado</strong>. Si el script detecta <code>unprivileged: 1</code> en la config, se ofrece a convertirlo in situ (edita <code>/etc/pve/lxc/&lt;CTID&gt;.conf</code>). Cancela si no puedes aceptar el compromiso de seguridad de un contenedor privilegiado."
"warnBody": "Este script requiere un contenedor <strong>privilegiado</strong> para conectar el disco directamente. Si detecta <code>unprivileged: 1</code>, ofrece editar <code>/etc/pve/lxc/&lt;CTID&gt;.conf</code> in situ. Esto cambia el modelo de seguridad y no reasigna la propiedad de los archivos existentes. Haz una copia del contenedor y comprueba la propiedad antes de aceptar, o recréalo como privilegiado."
},
"steps": {
"heading": "Paso a paso",
@@ -82,10 +82,10 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
"unprivTitle": "\"Cannot continue with an unprivileged container\"",
"unprivBody": "Rechazaste la oferta de conversión. O bien vuelves a ejecutar y aceptas la conversión, o conviertes el contenedor manualmente editando <code>/etc/pve/lxc/&lt;CTID&gt;.conf</code> y reemplazando <code>unprivileged: 1</code> por <code>unprivileged: 0</code>. También puedes reconstruir el contenedor como privilegiado si prefieres no convertirlo in situ.",
"unprivTitle": "\"No se puede continuar con un contenedor sin privilegios\"",
"unprivBody": "Rechazaste la conversión, así que el script se detuvo sin cambiar nada. Para continuar, vuelve a ejecutarlo y acepta: el script detiene el contenedor, guarda una copia de su configuración en <code>/etc/pve/lxc/&lt;CTID&gt;.conf.bak</code> y sustituye <code>unprivileged: 1</code> por <code>unprivileged: 0</code>. Ese cambio por sí solo no convierte los UID/GID de los archivos existentes, así que haz antes un backup del contenedor y corrige los propietarios; como alternativa, restaura o recrea el contenedor como privilegiado.",
"permsTitle": "Los permisos dentro del contenedor están mal",
"permsBody": "Los mounts del host hacia un contenedor privilegiado entran como <code>root:root</code>. Si el servicio dentro del CT corre como otro usuario (p. ej. <code>www-data</code> para Nextcloud), haz <code>chown</code>/<code>chmod</code> dentro del contenedor para que coincida con su UID/GID después del primer mount."
"permsBody": "Al montar una partición en un contenedor privilegiado se conserva la propiedad existente; un sistema de archivos recién formateado suele pertenecer a <code>root:root</code>. Si el servicio usa otro usuario, por ejemplo <code>www-data</code> para Nextcloud, comprueba su UID/GID y ajusta los archivos necesarios con <code>chown</code>/<code>chmod</code>. Los cambios afectan también al disco subyacente."
},
"related": {
"heading": "Relacionado",
@@ -1,18 +1,18 @@
{
"meta": {
"title": "Importar disco a VM | ProxMenux Documentation",
"title": "Importar disco a una VM | Documentación de ProxMenux",
"description": "Adjunta un disco físico a una VM Proxmox existente con ProxMenux. Detección segura de discos (excluye sistema, montados, en uso, ZFS/RAID/LVM), rutas persistentes /dev/disk/by-id e interfaces SATA / SCSI / VirtIO / IDE.",
"ogTitle": "Importar disco a VM | ProxMenux Documentation",
"ogTitle": "Importar disco a una VM | Documentación de ProxMenux",
"ogDescription": "Adjunta un disco físico a una VM Proxmox existente. Usa rutas persistentes /dev/disk/by-id y soporta SATA / SCSI / VirtIO / IDE."
},
"header": {
"title": "Importar disco a VM",
"description": "Adjunta un disco físico ya existente en el host Proxmox a una máquina virtual existente. ProxMenux detecta los discos libres, te deja elegir la VM destino y el tipo de bus (SATA / SCSI / VirtIO / IDE), y lo adjunta todo usando rutas persistentes /dev/disk/by-id para que el mapeo sobreviva a reinicios y cambios en el orden de los dispositivos.",
"section": "Disk Manager · VM"
"section": "Administrador de discos · VM"
},
"intro": {
"title": "Qué hace esto",
"body": "Esto es un passthrough de disco crudo: el SO guest ve la unidad como un block device real (con sus datos SMART y geometría nativa). El disco se adjunta por su ruta <code>/dev/disk/by-id/…</code> — no <code>/dev/sdX</code> — para que la asignación no se rompa si las controladoras de disco enumeran los dispositivos en otro orden en el siguiente arranque."
"body": "Conecta un disco físico como dispositivo subyacente de una interfaz de disco virtual. El invitado no recibe automáticamente los datos SMART nativos ni las funciones de la controladora física; usa passthrough PCI de la controladora si los necesitas. Se conecta mediante su ruta <code>/dev/disk/by-id/…</code> cuando existe, para que un cambio en el orden de enumeración al arrancar no rompa la asignación; si no existe, se usa <code>/dev/sdX</code>."
},
"howRuns": {
"heading": "Cómo se ejecuta el script",
@@ -49,7 +49,7 @@
"items": [
"<strong>SCSI</strong> — opción por defecto moderna para Linux y Windows con drivers VirtIO-SCSI instalados.",
"<strong>SATA</strong> — amplia compatibilidad, funciona por defecto en prácticamente cualquier guest.",
"<strong>VirtIO</strong> — block device paravirtualizado, el más rápido pero requiere drivers en el guest.",
"<strong>VirtIO</strong>: dispositivo de bloques paravirtualizado eficiente; requiere controladores en el invitado.",
"<strong>IDE</strong> — para guests legacy que no tienen ninguno de los drivers anteriores."
]
},
@@ -63,13 +63,13 @@
"heading": "Equivalente manual",
"body": "El script es un wrapper alrededor de <code>qm set</code>. El comando exacto para un solo disco se ve así:",
"migrationTitle": "La migración en vivo no es posible",
"migrationBody": "Una VM con un disco en passthrough está <strong>atada al host que expone ese disco</strong>. La migración en vivo a otro nodo Proxmox fallará porque el nodo destino no ve la misma ruta <code>/dev/disk/by-id/…</code>. Usa replicación o backup/restore en su lugar, o elige discos virtuales en almacenamiento compartido si necesitas movilidad.",
"migrationBody": "Una VM con un disco físico conectado directamente está <strong>ligada al host que expone ese disco</strong>. Otro nodo normalmente no dispone de la misma ruta <code>/dev/disk/by-id/…</code> ni de sus datos. Copia y transfiere esos datos por separado, o usa discos virtuales gestionados en almacenamiento compartido o con replicación compatible para facilitar la movilidad. No presupongas que la replicación de almacenamiento de Proxmox cubre este dispositivo.",
"shareTitle": "No compartas un disco físico entre VMs",
"shareBody": "Adjuntar el mismo disco físico a dos VMs a la vez corromperá los datos en la siguiente escritura. ProxMenux detecta esta situación y la bloquea, pero si te saltas el script (un <code>qm set</code> directo), asegúrate de que solo un guest monte el disco."
},
"troubleshoot": {
"heading": "Solución de problemas",
"noDisksTitle": "\"No disks available for this VM\"",
"noDisksTitle": "\"No hay discos disponibles para esta máquina virtual\"",
"noDisksIntro": "El script encontró discos, pero todos los candidatos se filtraron. Razones comunes:",
"noDisksItems": [
"Cada disco restante ya está referenciado en la config de la VM destino.",
+9 -9
View File
@@ -1,20 +1,20 @@
{
"meta": {
"title": "Disk Manager de Proxmox — adjuntar discos a VMs / LXC, tests SMART, wipe | ProxMenux",
"description": "Gestiona discos físicos en un host Proxmox VE con ProxMenux: pasa discos a VMs o contenedores LXC (qm set scsi/sata/virtio, pct mp), importa imágenes de disco qcow2 / vmdk / vdi, pasa HBAs o controladoras NVMe enteras, borra discos de forma segura y ejecuta self-tests SMART.",
"description": "Gestiona discos físicos en un host Proxmox VE con ProxMenux: conecta discos a VM o contenedores LXC (qm set scsi/sata/virtio, pct mp), importa imágenes img / qcow2 / vmdk / raw, asigna HBA o controladoras NVMe completas, borra discos con controles de seguridad y ejecuta pruebas SMART.",
"ogTitle": "Disk Manager de Proxmox — adjuntar discos a VMs / LXC, tests SMART, wipe",
"ogDescription": "Adjuntar discos a VMs / LXC, importar imágenes de disco, PCI passthrough para controladoras, wipe seguro y tests SMART en Proxmox VE.",
"twitterTitle": "Disk Manager de Proxmox | ProxMenux",
"twitterDescription": "Adjuntar discos a VMs / LXC, importar imágenes, PCI passthrough, wipe seguro y tests SMART."
},
"header": {
"title": "Disk Manager",
"title": "Administrador de discos",
"description": "El menú Disk Manager agrupa las herramientas de ProxMenux para gestionar discos físicos en un host Proxmox: adjuntar discos a VMs y contenedores LXC, importar imágenes de disco, pasar una controladora entera o un dispositivo NVMe, borrar discos de forma segura y ejecutar tests de salud SMART.",
"section": "Disk Manager"
"section": "Administrador de discos"
},
"intro": {
"title": "Para qué sirve este menú",
"body": "Cada opción aquí opera sobre <strong>discos físicos ya visibles para el host Proxmox</strong>. El menú está dividido en tres grupos — <strong>VM</strong> (adjuntar discos o importar imágenes a una máquina virtual), <strong>LXC</strong> (adjuntar discos a un contenedor) y <strong>Utilidades</strong> (format seguro, salud SMART). Los chequeos de seguridad se aplican en todas partes: los discos del sistema y los discos ya en uso están ocultos o bloqueados."
"body": "Estas herramientas trabajan con <strong>discos físicos visibles para el host Proxmox y archivos de imagen guardados en él</strong>. Hay tres grupos: <strong>VM</strong> (conectar discos o importar imágenes), <strong>LXC</strong> (conectar discos a un contenedor) y <strong>Utilidades</strong> (formateo y salud SMART). Las operaciones de conexión y borrado ocultan o bloquean los discos del sistema y en uso; las comprobaciones SMART pueden examinarlos sin borrarlos."
},
"opening": {
"heading": "Abrir el menú",
@@ -32,7 +32,7 @@
"Añadir controladora o NVMe a VM"
],
"lxcTitle": "LXC",
"lxcBody": "Herramientas que operan sobre contenedores existentes. El passthrough directo de dispositivos necesita un contenedor privilegiado; el script se ofrece a convertirlo si hace falta.",
"lxcBody": "Herramientas para contenedores LXC existentes. Este script requiere un contenedor privilegiado y ofrece cambiar la opción cuando hace falta. Lee primero las precauciones sobre conversión y propiedad de archivos en la página de la herramienta.",
"lxcItems": [
"Importar disco a LXC"
],
@@ -69,7 +69,7 @@
},
"lxc": {
"heading": "LXC",
"intro": "Herramientas que operan sobre contenedores LXC existentes. El passthrough directo de dispositivos requiere un contenedor privilegiado; el script se ofrece a convertir el contenedor si hace falta.",
"intro": "Herramientas para contenedores LXC existentes. Este script requiere un contenedor privilegiado y ofrece cambiar la opción cuando hace falta. Lee primero las precauciones sobre conversión y propiedad de archivos en la página de la herramienta.",
"options": [
{
"icon": "Boxes",
@@ -98,8 +98,8 @@
]
},
"safety": {
"title": "Reglas de seguridad comunes a todas las opciones",
"intro": "ProxMenux filtra cualquier cosa que pueda dañar el host:",
"title": "Reglas de seguridad para conectar y borrar discos",
"intro": "Las operaciones de conexión y borrado excluyen los dispositivos que podrían dañar el host:",
"items": [
"El <strong>disco del sistema</strong> (root pool, swap, miembros activos de ZFS / LVM / RAID) está siempre oculto.",
"Los discos <strong>montados</strong> en cualquier punto del host se ocultan o se bloquean en ejecución.",
@@ -112,7 +112,7 @@
"items": [
{
"href": "/docs/storage-share",
"label": "Storage & Share Manager",
"label": "Gestor de almacenamiento y recursos compartidos",
"tail": " — registrar almacenamiento en el propio Proxmox (NFS / Samba / iSCSI / local) y compartir carpetas entre host y CTs."
},
{
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Salud y test SMART de disco | ProxMenux Documentation",
"title": "Salud y pruebas SMART del disco | Documentación de ProxMenux",
"description": "Ejecuta chequeos de salud SMART y tests de disco en Proxmox VE con ProxMenux. Soporta SATA / SAS (smartmontools) y NVMe (nvme-cli). Self-tests cortos y largos, exportación JSON para integración con ProxMenux Monitor.",
"ogTitle": "Salud y test SMART de disco | ProxMenux Documentation",
"ogTitle": "Salud y pruebas SMART del disco | Documentación de ProxMenux",
"ogDescription": "Chequeos de salud SMART y self-tests para unidades SATA / SAS y NVMe en Proxmox. Exportación JSON para el Monitor."
},
"header": {
@@ -49,17 +49,17 @@
"dur": "Horas (depende del tamaño del disco)"
},
{
"action": "Comprobar el progreso del test",
"action": "Progreso de prueba",
"what": "Estado del self-test activo o más reciente.",
"dur": "Instantáneo"
}
],
"tipTitle": "Los tests largos sobreviven al cierre del terminal",
"tipBody": "Un test largo se encola <em>dentro de la unidad</em> — no depende de que el proceso de ProxMenux siga vivo. Puedes cerrar el terminal, reiniciar el host Proxmox (el test continúa donde lo dejó en algunas unidades) o simplemente volver más tarde y usar <strong>Comprobar el progreso del test</strong> para ver el resultado."
"tipBody": "Un test largo se ejecuta <em>dentro de la unidad</em> y no depende de que siga activo el proceso de ProxMenux. Puedes cerrar el terminal y volver después a <strong>Progreso de prueba</strong>. Un reinicio del host, de la controladora o una pérdida de alimentación puede interrumpir el test y su recopilador de resultados; no presupongas que se reanudará automáticamente."
},
"json": {
"heading": "Exportación JSON para el Monitor",
"intro": "Cada ejecución escribe un archivo JSON con marca de tiempo en <code>/usr/local/share/proxmenux/smart/&lt;disk&gt;/</code>. La estructura es:",
"intro": "Las acciones de estado, test corto y progreso guardan un JSON con fecha en <code>/usr/local/share/proxmenux/smart/&lt;disk&gt;/</code>; los resultados del test largo se recopilan en segundo plano. El informe completo solo se muestra. La estructura es:",
"outro": "El ProxMenux Monitor los recoge para renderizar tendencias de salud por disco; los archivos viejos se rotan automáticamente cuando se alcanza el límite de retención."
},
"steps": {
@@ -89,7 +89,7 @@
},
{
"title": "Revisa los resultados",
"bodyRich": "El estado y el informe se imprimen en el terminal y se escriben en JSON. Para los tests largos, vuelve más tarde y ejecuta <strong>Comprobar el progreso del test</strong> en el mismo disco para ver el resultado.",
"bodyRich": "La salida del estado, de las pruebas y del progreso se muestra en el terminal; <strong>Informe completo</strong> se abre en un diálogo desplazable. El JSON se exporta para las acciones indicadas arriba, no para Informe completo. Para las pruebas largas, vuelve después a <strong>Progreso de prueba</strong> en el mismo disco.",
"img": "/disk/smart/quick-status.png",
"alt": "Salida del estado de salud rápido",
"caption": "Salida del estado de salud rápido (SATA — smartctl -H + -A)"
@@ -103,10 +103,10 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
"noSmartTitle": "\"Could not read SMART data from /dev/sdX\"",
"noSmartTitle": "\"No se pudieron leer los datos SMART de /dev/sdX\"",
"noSmartBody": "El disco está probablemente detrás de una controladora RAID / SAS que no pasa SMART. Con tarjetas basadas en megaraid, prueba <code>smartctl -d megaraid,N /dev/sdX</code>. Para HBAs en modo IT la invocación directa funciona.",
"longTitle": "El test largo no termina nunca",
"longBody": "El test se encola en el firmware de la unidad y pausa si el disco tiene carga pesada. Ejecutarlo de noche en un sistema en reposo suele funcionar. También puedes revisar <code>smartctl -c</code> para ver el porcentaje restante; si se queda atascado en un LBA fijo, el disco está fallando en ese sector."
"longBody": "La unidad ejecuta el test en su firmware y la carga de E/S puede retrasarlo. Prueba en un periodo de poca actividad, como de noche. En SATA, <code>smartctl -c</code> muestra el porcentaje restante, y en SAS, <code>smartctl -l selftest</code>; revisa el registro de tests para ver el resultado y posibles LBA con fallos. Un error de lectura requiere investigación; la lentitud por sí sola no demuestra un sector defectuoso."
},
"related": {
"heading": "Relacionado",
@@ -124,7 +124,7 @@
{
"href": "/docs/help-info/zfs-commands",
"label": "Comandos de gestión de ZFS",
"tail": " — zpool scrub como equivalente a los tests SMART a nivel de capa de almacenamiento."
"tail": " — zpool scrub comprueba las sumas de verificación de los datos ZFS y complementa los tests SMART del hardware."
},
{
"href": "/docs/monitor/dashboard/storage",
+21 -21
View File
@@ -1,58 +1,58 @@
{
"meta": {
"title": "Repositorios externos | ProxMenux Documentation",
"description": "ProxMenux integra repositorios de scripts externos seleccionados (community-scripts, ZimaOS) como alternativas en algunas secciones del menú. Cada script externo se etiqueta claramente con su origen; los reportes de bugs van al mantenedor original.",
"ogTitle": "Repositorios externos | ProxMenux Documentation",
"ogDescription": "Repositorios de scripts externos integrados en ProxMenux como opciones alternativas en los menús."
"title": "Repositorios externos | Documentación de ProxMenux",
"description": "ProxMenux integra repositorios externos de scripts seleccionados (community-scripts y ZimaOS) como alternativas en algunas secciones del menú. Cada script indica su procedencia; los errores se notifican al mantenedor original.",
"ogTitle": "Repositorios externos | Documentación de ProxMenux",
"ogDescription": "Repositorios externos de scripts integrados como alternativas en los menús de ProxMenux."
},
"header": {
"title": "Repositorios externos",
"description": "ProxMenux integra repositorios de scripts externos seleccionados como opciones alternativas en algunas secciones del menú. Estos scripts vienen de fuentes de terceros confiables y se etiquetan claramente con su origen cuando se muestran en el menú.",
"description": "ProxMenux integra repositorios externos de scripts seleccionados como alternativas en algunas secciones del menú. Estos scripts proceden de terceros de confianza y el menú indica claramente su origen.",
"section": "Repositorios externos"
},
"practice": {
"title": "Qué significa esto en la práctica",
"body": "Cuando una opción del menú está respaldada por un script externo (en lugar del código propio de ProxMenux), el menú dice explícitamente de dónde viene y qué repositorio carga. ProxMenux actúa como lanzador — no modifica los scripts externos. Las incidencias con lo que hace un script externo corresponden al mantenedor de ese repositorio, no a ProxMenux."
"body": "Cuando una opción usa un script externo en lugar de código propio, el menú indica de dónde procede y qué repositorio carga. ProxMenux actúa como lanzador y no modifica esos scripts. Los problemas de su funcionamiento corresponden al mantenedor del repositorio de origen, no a ProxMenux."
},
"integrated": {
"heading": "Actualmente integrados",
"heading": "Integrados actualmente",
"usedInLabel": "Usado en:",
"items": [
{
"name": "community-scripts / ProxmoxVE",
"url": "https://community-scripts.github.io/ProxmoxVE/",
"description": "Sucesor espiritual de los helper scripts de tteck. Gran catálogo de scripts de un tirón para desplegar LXCs (Home Assistant, Plex, Frigate, …), VMs, addons y ajustes de PVE.",
"usedIn": "Lanzador de helper scripts, Red (arreglo de offloading de NIC para Intel e1000e)"
"description": "Continúa el trabajo de los helper scripts de tteck. Incluye un amplio catálogo de scripts para desplegar en una sola ejecución LXC (Home Assistant, Plex, Frigate…), VM, complementos y ajustes de PVE.",
"usedIn": "Lanzador de Helper Scripts y Red (corrección de offloading de la NIC Intel e1000e)"
}
]
},
"attribution": {
"heading": "Atribución y reconocimiento",
"heading": "Autoría y reconocimiento",
"items": [
"El crédito siempre se da a los autores originales en el menú y en la página de documentación que envuelve el script.",
"Se muestra un enlace al repositorio fuente — tanto antes de ejecutar el script como en la página de docs correspondiente.",
"Se anima a los usuarios a apoyar a los desarrolladores de estos proyectos externos (dar una ⭐, patrocinar, presentar reportes de bugs de calidad)."
"Los autores originales aparecen siempre en el menú y en la página que documenta el uso del script desde ProxMenux.",
"Se muestra un enlace al repositorio de origen antes de ejecutar el script y en su página de documentación.",
"Puedes apoyar a los desarrolladores de estos proyectos externos con una ⭐, patrocinándolos o enviando informes de errores bien documentados."
]
},
"report": {
"title": "Dónde reportar problemas con scripts externos",
"body": "Si un script de uno de estos repositorios externos no funciona como se espera, <strong>repórtalo directamente a ese repositorio</strong> — no a ProxMenux. ProxMenux solo descarga y ejecuta el script tal cual; no modifica la fuente. El mantenedor original es la persona indicada para triarlo y arreglarlo. Las incidencias de ProxMenux son para problemas con el propio lanzador o con cómo ProxMenux integra el script externo."
"body": "Si un script externo no funciona como debería, <strong>notifícalo directamente en su repositorio</strong>, no en ProxMenux. ProxMenux lo descarga y ejecuta sin modificar su código. El mantenedor original es quien debe analizar y corregir el fallo. Usa las incidencias de ProxMenux para problemas del lanzador o de la integración del script."
},
"suggest": {
"heading": "Sugerir nuevos repositorios externos",
"intro": "¿Has encontrado un script o repositorio que encajaría bien en un menú de ProxMenux? Sugiérelo vía:",
"discussionTitle": "💬 Abrir una Discussion",
"discussionBody": "Mejor para ideas — recibe input de la comunidad antes de convertirse en una petición de función.",
"issueTitle": "🐛 Abrir una Issue",
"issueBody": "Para peticiones de función concretas con un alcance claro."
"discussionTitle": "💬 Abrir una discusión",
"discussionBody": "Ideal para ideas: recoge opiniones de la comunidad antes de convertirlas en una petición de funcionalidad.",
"issueTitle": "🐛 Abrir una incidencia",
"issueBody": "Para peticiones de funcionalidades concretas con un alcance claro."
},
"candidate": {
"title": "Qué hace un buen candidato a integración",
"items": [
"Código abierto con un mantenedor activo.",
"Idempotente / seguro de ejecutar más de una vez.",
"No modifica silenciosamente la configuración del núcleo de Proxmox.",
"Resuelve un problema que ProxMenux no cubre ya (evita duplicación de funciones)."
"Idempotente: seguro de ejecutar más de una vez.",
"No modifica la configuración principal de Proxmox sin avisar.",
"Resuelve un problema que ProxMenux todavía no cubre, evitando duplicar funciones."
]
}
}
+107 -107
View File
@@ -1,35 +1,35 @@
{
"meta": {
"title": "Glosario | ProxMenux Documentation",
"description": "Definiciones de los términos técnicos usados a lo largo de la documentación de ProxMenux — conceptos de Proxmox (VM, LXC, qm, pct, pmxcfs), fundamentos de virtualización (KVM, IOMMU, VFIO, OVMF), almacenamiento (ZFS, ARC, LVM, vzdump, PBS), red (bridge, VLAN, nftables) y terminología específica de ProxMenux.",
"ogTitle": "Glosario | ProxMenux Documentation",
"title": "Glosario | Documentación de ProxMenux",
"description": "Definiciones de los términos usados en la documentación de ProxMenux: Proxmox, almacenamiento, redes y virtualización.",
"ogTitle": "Glosario | Documentación de ProxMenux",
"ogDescription": "Referencia rápida para los términos técnicos usados en la documentación de ProxMenux."
},
"header": {
"title": "Glosario",
"description": "Definiciones de los términos técnicos usados a lo largo de la documentación de ProxMenux. Cubre conceptos de Proxmox, fundamentos de virtualización, almacenamiento, red, internals de Linux y terminología específica de ProxMenux.",
"description": "Definiciones breves de los términos usados en ProxMenux y el funcionamiento interno de Proxmox.",
"section": "Glosario"
},
"callout": {
"title": "Cómo usar esta página",
"bodyRich": "Cada entrada tiene un badge de categoría y una definición corta. Los enlaces <em>Ver también</em> saltan a la página de docs donde el término es más relevante. Usa la navegación A–Z de abajo para desplazarte directamente a una letra."
"bodyRich": "Cada entrada incluye su categoría y una definición breve. Los enlaces <em>Ver también</em> llevan a la documentación relacionada. Usa la navegación A–Z para ir directamente a una letra."
},
"jumpHeading": "Saltar a la letra",
"seeAlsoLabel": "Ver también:",
"aliasesLabel": "también:",
"missingCallout": {
"title": "¿Falta un término?",
"leadRich": "Si un término en las docs no está definido aquí, abre una incidencia o PR en <ext>GitHub</ext> — el glosario vive en <code>web/app/docs/glossary/page.tsx</code> como un simple array de datos."
"leadRich": "Si falta un término, abre un issue o PR en <ext>GitHub</ext>. El glosario está en <code>web/messages/en/docs/glossary.json</code>, con sus catálogos para cada idioma."
},
"entries": [
{
"term": "ACS",
"aliases": [
"Access Control Services",
"ACS override"
"Anulación de ACS"
],
"category": "Virtualización",
"definitionRich": "Extensión de PCIe que evita el tráfico peer-to-peer directo entre dispositivos, asegurando que cada dispositivo está en su propio grupo IOMMU. El parche del kernel <em>ACS override</em> afloja esto para que dispositivos del mismo grupo IOMMU puedan pasarse a VMs distintas — útil pero con compromiso de seguridad.",
"definitionRich": "Funciones de control de acceso PCIe que ayudan a aislar el tráfico entre dispositivos. Los grupos IOMMU dependen del hardware y la topología. El parche <em>ACS override</em> puede dividir los grupos que muestra Linux, pero no añade aislamiento físico; asignarlos a VM distintas implica un riesgo de seguridad.",
"seeAlso": [
{
"label": "Añadir controlador o NVMe a una VM",
@@ -43,10 +43,10 @@
"Adaptive Replacement Cache"
],
"category": "Almacenamiento",
"definitionRich": "Caché de lectura en memoria de ZFS. Mantiene los bloques de datos usados recientemente y con frecuencia; el tamaño escala con la RAM disponible del host. Los valores por defecto son agresivos — la post-instalación de Proxmox te deja limitarlo.",
"definitionRich": "Caché de lectura de ZFS en la RAM del host, con bloques de uso reciente y frecuente. El límite predeterminado depende de la versión y la instalación de Proxmox. La postinstalación de ProxMenux permite limitarla.",
"seeAlso": [
{
"label": "Post-instalación: Almacenamiento",
"label": "Postinstalación: almacenamiento",
"href": "/docs/post-install/storage"
},
{
@@ -56,9 +56,9 @@
]
},
{
"term": "Bind mount",
"term": "Montaje bind",
"category": "Linux",
"definitionRich": "Función de Linux que expone una parte del sistema de archivos en otra ruta. ProxMenux usa bind mounts para compartir directorios del host con contenedores LXC vía <code>pct set -mpN</code>.",
"definitionRich": "Función de Linux que hace accesible una parte del sistema de archivos desde otra ruta. ProxMenux la usa para compartir directorios del host con contenedores LXC mediante <code>pct set -mpN</code>.",
"seeAlso": [
{
"label": "Puntos de montaje LXC",
@@ -67,23 +67,23 @@
]
},
{
"term": "Bond",
"term": "Bond de red",
"aliases": [
"Network bond",
"Link aggregation"
"Agrupación de interfaces de red",
"Agregación de enlaces"
],
"category": "Red",
"definitionRich": "Combina múltiples interfaces de red físicas en una interfaz lógica — para redundancia (active-backup), throughput (LACP / 802.3ad) o ambas. Se configura en <code>/etc/network/interfaces</code>."
"definitionRich": "Agrupa varias interfaces físicas en una lógica para ofrecer redundancia (active-backup), rendimiento agregado (LACP / 802.3ad) o ambos. Se configura en <code>/etc/network/interfaces</code>."
},
{
"term": "Bridge",
"term": "Puente",
"aliases": [
"vmbrX",
"vmbr0",
"Linux bridge"
"Puente de Linux"
],
"category": "Red",
"definitionRich": "Un switch virtual de capa 2 en el host. <code>vmbr0</code> es el bridge por defecto de Proxmox que conecta VMs y contenedores a la red física. Múltiples bridges (<code>vmbr1</code>, <code>vmbr2</code>...) aíslan grupos de guests.",
"definitionRich": "Conmutador virtual de capa 2 en el host. <code>vmbr0</code> suele conectar los invitados a la red física. Otros bridges (<code>vmbr1</code>, <code>vmbr2</code>...) permiten separar redes según sus conexiones físicas y configuración.",
"seeAlso": [
{
"label": "Análisis de bridges y reparación guiada",
@@ -94,7 +94,7 @@
{
"term": "Ceph",
"category": "Almacenamiento",
"definitionRich": "Sistema de almacenamiento distribuido fuertemente integrado con Proxmox para clústeres hiperconvergentes. Proporciona almacenamiento de objetos, bloques y archivos respaldado por OSDs (Object Storage Daemons). PVE 9 requiere Ceph 19.x (Squid).",
"definitionRich": "Almacenamiento distribuido integrado con Proxmox para clústeres hiperconvergentes. Los OSD (Object Storage Daemons) sustentan el almacenamiento de objetos, bloques y archivos. La versión de Ceph requerida depende de la versión de Proxmox y la actualización; consulta su guía.",
"seeAlso": [
{
"label": "Actualizar PVE 8 a PVE 9",
@@ -105,14 +105,14 @@
{
"term": "CT",
"aliases": [
"Container",
"LXC container"
"Contenedor",
"Contenedor LXC"
],
"category": "Proxmox",
"definitionRich": "Abreviatura de \"contenedor\" — terminología de Proxmox para una instancia LXC. Tiene un CTID numérico que mapea a <code>/etc/pve/lxc/&lt;CTID&gt;.conf</code>. Mira también <strong>LXC</strong>.",
"definitionRich": "Abreviatura de «contenedor» en Proxmox para una instancia LXC. Su CTID numérico corresponde a <code>/etc/pve/lxc/&lt;CTID&gt;.conf</code>. Véase también <strong>LXC</strong>.",
"seeAlso": [
{
"label": "Gestión de VMs y CTs",
"label": "Gestión de VM y contenedores",
"href": "/docs/help-info/vm-ct-commands"
}
]
@@ -120,7 +120,7 @@
{
"term": "deb822",
"category": "Linux",
"definitionRich": "Formato moderno para fuentes de repositorios APT, usando archivos <code>.sources</code> con bloques estructurados clave/valor (Types, URIs, Suites, Components, Signed-By). Reemplaza el formato heredado de una línea <code>.list</code>. Estándar desde PVE 9 / Debian Trixie en adelante.",
"definitionRich": "Formato moderno de fuentes APT: archivos <code>.sources</code> con bloques estructurados y campos Types, URIs, Suites, Components y Signed-By. Sustituye el formato de una línea <code>.list</code> y es el estándar desde PVE 9 / Debian Trixie.",
"seeAlso": [
{
"label": "Actualizar PVE 8 a PVE 9",
@@ -131,13 +131,13 @@
{
"term": "dGPU",
"aliases": [
"Discrete GPU"
"GPU dedicada"
],
"category": "Virtualización",
"definitionRich": "Una tarjeta gráfica independiente en su propio slot PCIe (p. ej. NVIDIA RTX, AMD Radeon). Contrasta con <strong>iGPU</strong>. Típicamente se usa para passthrough VFIO a una única VM, no para compartir entre LXCs.",
"definitionRich": "Tarjeta gráfica independiente, normalmente conectada por PCIe, a diferencia de una <strong>iGPU</strong>. Puede asignarse a una VM con VFIO o compartirse entre LXC mediante dispositivos y el controlador del host, según la compatibilidad del hardware y las aplicaciones.",
"seeAlso": [
{
"label": "Añadir GPU a una VM (passthrough)",
"label": "Añadir GPU a una VM (acceso directo)",
"href": "/docs/hardware/gpu-vm-passthrough"
}
]
@@ -145,15 +145,15 @@
{
"term": "Dialog",
"category": "Linux",
"definitionRich": "Herramienta basada en ncurses para dibujar menús, prompts y barras de progreso en un terminal. ProxMenux está construido alrededor de menús dialog."
"definitionRich": "Herramienta basada en ncurses para mostrar menús, preguntas y barras de progreso en la terminal. ProxMenux utiliza menús de dialog."
},
{
"term": "DKMS",
"aliases": [
"Dynamic Kernel Module Support"
"Soporte de módulo de núcleo dinámico"
],
"category": "Linux",
"definitionRich": "Framework que reconstruye automáticamente los módulos del kernel fuera del árbol (NVIDIA, ZFS, drivers propios) cuando el kernel se actualiza. Evita que los módulos se queden atrás tras actualizaciones del kernel.",
"definitionRich": "Sistema para recompilar módulos externos registrados, como NVIDIA o ZFS, al cambiar el kernel. La compilación requiere código del módulo compatible y las cabeceras correspondientes.",
"seeAlso": [
{
"label": "Instalar Coral TPU (host)",
@@ -164,7 +164,7 @@
{
"term": "Fail2Ban",
"category": "Linux",
"definitionRich": "Servicio de prevención de intrusiones que vigila los archivos de log en busca de fallos repetidos de autenticación y banea las IPs ofensoras en la capa del firewall. ProxMenux entrega jails preconfigurados para SSH, la UI de Proxmox y el Monitor.",
"definitionRich": "Servicio que detecta fallos repetidos de autenticación en los registros y bloquea las IP responsables mediante el cortafuegos. ProxMenux incluye filtros y reglas de bloqueo (jails) para SSH, la interfaz Proxmox y Monitor.",
"seeAlso": [
{
"label": "Fail2Ban",
@@ -175,7 +175,7 @@
{
"term": "Fastfetch",
"category": "Linux",
"definitionRich": "Herramienta de info del sistema en ASCII-art que se ejecuta en el login del shell (el \"banner de resumen del sistema\"). Reemplaza al antiguo <code>neofetch</code>; disponible como opción opt-in en la post-instalación de ProxMenux.",
"definitionRich": "Herramienta de información del sistema con arte ASCII que aparece al iniciar sesión en la consola. Sustituye a <code>neofetch</code> y se puede activar en la postinstalación de ProxMenux.",
"seeAlso": [
{
"label": "Post-instalación: opcional",
@@ -189,7 +189,7 @@
"GRand Unified Bootloader"
],
"category": "Linux",
"definitionRich": "Cargador de arranque para la mayoría de distribuciones Linux. La configuración vive en <code>/etc/default/grub</code> + <code>/boot/grub/</code>. Se modifica para habilitar IOMMU, parámetros del kernel y entradas de arranque EFI. Ejecuta <code>update-grub</code> tras editar.",
"definitionRich": "Gestor de arranque de instalaciones Linux basadas en GRUB. Se configura en <code>/etc/default/grub</code> y <code>/boot/grub/</code>; aplica los cambios con <code>update-grub</code>. Proxmox también puede usar systemd-boot: comprueba el gestor activo antes de cambiar parámetros del kernel.",
"seeAlso": [
{
"label": "Comandos de passthrough de GPU",
@@ -200,10 +200,10 @@
{
"term": "iGPU",
"aliases": [
"Integrated GPU"
"GPU integrada"
],
"category": "Virtualización",
"definitionRich": "Procesador gráfico integrado en el paquete de CPU (Intel UHD / Iris, AMD Radeon Vega en APUs Ryzen). Típicamente compartido entre múltiples contenedores LXC vía <code>/dev/dri</code> en lugar de pasarse a una única VM.",
"definitionRich": "Procesador gráfico integrado en el encapsulado de la CPU, como Intel UHD / Iris o el Radeon de las APU Ryzen. Suele compartirse entre varios LXC mediante <code>/dev/dri</code>, en lugar de asignarse en exclusiva a una VM.",
"seeAlso": [
{
"label": "Añadir GPU a LXC",
@@ -214,37 +214,37 @@
{
"term": "ifupdown / ifupdown2",
"category": "Red",
"definitionRich": "El clásico sistema de configuración de red de Debian que lee <code>/etc/network/interfaces</code>. <code>ifupdown2</code> es la versión reescrita que Proxmox usa por defecto — soporta recarga en vivo vía <code>ifreload -a</code>."
"definitionRich": "Sistema clásico de configuración de red de Debian, basado en <code>/etc/network/interfaces</code>. Proxmox utiliza su versión reescrita <code>ifupdown2</code>, que permite recargar la configuración en vivo con <code>ifreload -a</code>."
},
{
"term": "initramfs",
"category": "Linux",
"definitionRich": "Sistema de archivos en RAM inicial que el kernel usa al arrancar antes de montar el sistema de archivos raíz real. Contiene drivers necesarios pronto (almacenamiento, cifrado, RAID). Reconstruido con <code>update-initramfs -u -k all</code> tras cambios de VFIO, IOMMU o driver de almacenamiento."
"definitionRich": "Sistema de archivos inicial en RAM que usa el kernel antes de montar la raíz real. Contiene controladores necesarios al arrancar. Tras cambiar VFIO, IOMMU o los controladores de almacenamiento, se regenera con <code>update-initramfs -u -k all</code>."
},
{
"term": "IOMMU",
"aliases": [
"Input/Output Memory Management Unit",
"Unidad de gestión de memoria de entrada/salida",
"VT-d",
"AMD-Vi"
],
"category": "Virtualización",
"definitionRich": "Función de hardware (Intel VT-d / AMD-Vi) que permite asignar dispositivos PCIe de forma segura directamente a VMs guest. Requerido para passthrough de GPU y controladores de disco. Debe habilitarse tanto en BIOS / UEFI como en la línea de comandos del kernel (<code>intel_iommu=on</code> o <code>amd_iommu=on</code>).",
"definitionRich": "Función de hardware (Intel VT-d / AMD-Vi) necesaria para asignar dispositivos PCIe a VM. Actívala en el firmware y comprueba que el kernel la usa. Según la plataforma y sus valores predeterminados, pueden necesitarse <code>intel_iommu=on</code> o <code>amd_iommu=on</code>.",
"seeAlso": [
{
"label": "Post-instalación: virtualización",
"href": "/docs/post-install/virtualization"
},
{
"label": "Añadir GPU a una VM (passthrough)",
"label": "Añadir GPU a una VM (acceso directo)",
"href": "/docs/hardware/gpu-vm-passthrough"
}
]
},
{
"term": "IOMMU group",
"term": "Grupo IOMMU",
"category": "Virtualización",
"definitionRich": "La unidad más pequeña de dispositivos que el IOMMU puede aislar entre sí. Todos los dispositivos de un grupo deben pasarse juntos — normalmente un dispositivo, pero las tarjetas multi-función o los dispositivos que comparten root-port aterrizan en el mismo grupo. Se listan vía <code>find /sys/kernel/iommu_groups/ -type l | sort -V</code>."
"definitionRich": "Conjunto de dispositivos que forma la unidad mínima de aislamiento IOMMU. Sus miembros no están necesariamente aislados entre sí; revisa todos antes de asignar dispositivos con VFIO. Se listan con <code>find /sys/kernel/iommu_groups/ -type l | sort -V</code>."
},
{
"term": "iSCSI",
@@ -252,7 +252,7 @@
"Internet SCSI"
],
"category": "Almacenamiento",
"definitionRich": "Protocolo de red que expone almacenamiento de bloques sobre IP — un disco remoto aparece como un dispositivo SCSI local. Se registra como almacenamiento de Proxmox vía <code>pvesm add iscsi</code>.",
"definitionRich": "Protocolo de almacenamiento por bloques sobre IP: el disco remoto aparece como un dispositivo SCSI local. Se registra en Proxmox con <code>pvesm add iscsi</code>.",
"seeAlso": [
{
"label": "Añadir target iSCSI como almacenamiento de Proxmox",
@@ -263,10 +263,10 @@
{
"term": "KVM",
"aliases": [
"Kernel-based Virtual Machine"
"Máquina Virtual basada en kernel"
],
"category": "Virtualización",
"definitionRich": "Módulo del kernel de Linux que convierte el host en un hipervisor. Combinado con <strong>QEMU</strong> para emulación de dispositivos, es la base que Proxmox usa para ejecutar VMs."
"definitionRich": "Módulo del kernel Linux que convierte el host en hipervisor. Junto con <strong>QEMU</strong>, que emula dispositivos, constituye la base de las VM de Proxmox."
},
{
"term": "LVM",
@@ -274,7 +274,7 @@
"Logical Volume Manager"
],
"category": "Almacenamiento",
"definitionRich": "Stack de almacenamiento de Linux que abstrae los discos físicos en grupos de volumen (VG) de volúmenes lógicos (LV). Proxmox usa pools LVM-thin para discos de VM por defecto. Herramientas concisas: <code>pvs</code>, <code>vgs</code>, <code>lvs</code>.",
"definitionRich": "Gestión de volúmenes Linux que agrupa almacenamiento físico en grupos (VG) con volúmenes lógicos (LV). Las instalaciones Proxmox basadas en LVM suelen usar LVM-thin para discos de invitados; existen otros backends. Herramientas: <code>pvs</code>, <code>vgs</code> y <code>lvs</code>.",
"seeAlso": [
{
"label": "Comandos de almacenamiento y discos",
@@ -288,10 +288,10 @@
"Linux Containers"
],
"category": "Linux",
"definitionRich": "Tecnología de virtualización a nivel de SO — múltiples instancias aisladas de espacio de usuario comparten el kernel del host. Más ligera y rápida que las VMs pero menos aislada. Proxmox gestiona los contenedores LXC vía la CLI <code>pct</code>.",
"definitionRich": "Virtualización del sistema operativo: instancias aisladas del espacio de usuario comparten el kernel del host. Suele tener menos sobrecarga que una VM, con un aislamiento distinto. Proxmox gestiona los LXC con <code>pct</code>.",
"seeAlso": [
{
"label": "Gestión de VMs y CTs",
"label": "Gestión de VM y contenedores",
"href": "/docs/help-info/vm-ct-commands"
}
]
@@ -299,7 +299,7 @@
{
"term": "Lynis",
"category": "Linux",
"definitionRich": "Auditor de seguridad de código abierto (de CISOfy) que escanea el host e imprime una puntuación de hardening más pistas concretas de remediación. ProxMenux instala el último de GitHub upstream en lugar del paquete (más antiguo) de Debian.",
"definitionRich": "Auditor de seguridad de código abierto de CISOfy. Analiza el host y presenta una puntuación de seguridad y recomendaciones concretas. ProxMenux instala la versión del repositorio original de GitHub en lugar del paquete más antiguo de Debian.",
"seeAlso": [
{
"label": "Lynis",
@@ -308,12 +308,12 @@
]
},
{
"term": "MAC address",
"term": "Dirección MAC",
"aliases": [
"Hardware address"
"Dirección de hardware"
],
"category": "Red",
"definitionRich": "Identificador de 48 bits grabado en el firmware de una NIC. Usado por los <em>nombres de red persistentes</em> de Proxmox para fijar nombres de interfaz (<code>eno1</code>, <code>enp3s0</code>) para que sobrevivan a la reenumeración PCI.",
"definitionRich": "Identificador de una interfaz Ethernet, normalmente de 48 bits, asignado por hardware o software. <em>Nombres de red persistentes</em> de ProxMenux asocia las MAC a nombres estables (<code>eno1</code>, <code>enp3s0</code>) para conservarlos tras cambios en la enumeración PCI.",
"seeAlso": [
{
"label": "Nombres de interfaz persistentes",
@@ -324,18 +324,18 @@
{
"term": "MOTD",
"aliases": [
"Message of the Day"
"Mensaje del día"
],
"category": "Linux",
"definitionRich": "Texto mostrado tras el login SSH. Almacenado en <code>/etc/motd</code>. La post-instalación de ProxMenux puede añadir un banner aquí; el desinstalador restaura el backup si lo aplicaste."
"definitionRich": "Texto mostrado tras iniciar sesión por SSH, guardado en <code>/etc/motd</code>. La postinstalación de ProxMenux puede añadir una cabecera; el desinstalador restaura el archivo anterior si existe una copia."
},
{
"term": "NFS",
"aliases": [
"Network File System"
"Sistema de archivos de red"
],
"category": "Almacenamiento",
"definitionRich": "Protocolo de compartición de archivos en red nativo de Unix. Se registra como almacenamiento de Proxmox vía <code>pvesm add nfs</code>; también usable como cliente / servidor LXC vía flujos dedicados de ProxMenux.",
"definitionRich": "Protocolo de archivos en red originado en Unix. Se registra como almacenamiento Proxmox con <code>pvesm add nfs</code>; ProxMenux también permite configurar clientes y servidores NFS en LXC.",
"seeAlso": [
{
"label": "Almacenamiento y compartición",
@@ -346,7 +346,7 @@
{
"term": "nftables / iptables",
"category": "Red",
"definitionRich": "Sistemas de firewall de Linux. <code>nftables</code> es el motor moderno; <code>iptables</code> es el front-end heredado (sigue funcionando como capa de traducción). El <code>pve-firewall</code> de Proxmox emite reglas nftables desde la configuración del firewall del clúster.",
"definitionRich": "Herramientas de cortafuegos Linux. <code>nftables</code> es el sistema moderno; <code>iptables</code> puede usar el backend clásico o uno compatible con nft. <code>pve-firewall</code> usa iptables; el backend alternativo proxmox-firewall usa nftables.",
"seeAlso": [
{
"label": "Comandos de red",
@@ -357,7 +357,7 @@
{
"term": "nouveau",
"category": "Linux",
"definitionRich": "Driver NVIDIA de código abierto incluido con el kernel de Linux. Debe ponerse en blacklist antes de instalar el driver propietario NVIDIA, si no ambos cargan y la instalación falla.",
"definitionRich": "Controlador gráfico NVIDIA de código abierto incluido en Linux. Al instalar el controlador propietario, evita que nouveau controle la misma GPU, normalmente bloqueando su carga y regenerando initramfs.",
"seeAlso": [
{
"label": "Guía de instalación de NVIDIA",
@@ -366,9 +366,9 @@
]
},
{
"term": "no-subscription repo",
"term": "Repositorio no-subscription",
"category": "Proxmox",
"definitionRich": "Repositorio gratuito de Proxmox para usuarios sin suscripción enterprise. QA menos pulido que el repo enterprise (ligeramente más arriesgado para producción) pero gratis. Se configura automáticamente por la post-instalación de ProxMenux.",
"definitionRich": "Repositorio de paquetes Proxmox disponible sin suscripción empresarial. Sus paquetes reciben menos validación que los del repositorio enterprise, recomendado por Proxmox para producción. La postinstalación de ProxMenux permite configurar los repositorios.",
"seeAlso": [
{
"label": "Post-instalación: ajustes básicos",
@@ -382,7 +382,7 @@
"Open Virtualization Format"
],
"category": "Virtualización",
"definitionRich": "Formatos de empaquetado estándar DMTF para VMs portables. <strong>OVA</strong> es un único archivo TAR; <strong>OVF</strong> es un directorio con un descriptor XML + archivos VMDK externos. Importables en VMware, VirtualBox y Proxmox.",
"definitionRich": "Formatos DMTF para distribuir VM. <strong>OVA</strong> reúne los archivos en un TAR; <strong>OVF</strong> describe la VM en XML acompañado de discos, habitualmente VMDK. La compatibilidad de importación depende del hipervisor y la configuración.",
"seeAlso": [
{
"label": "Exportar VM a OVA / OVF",
@@ -397,14 +397,14 @@
{
"term": "OVMF",
"aliases": [
"UEFI firmware",
"Firmware UEFI",
"Open Virtual Machine Firmware"
],
"category": "Virtualización",
"definitionRich": "Implementación de firmware UEFI para VMs. Se establece con <code>qm set &lt;vmid&gt; -bios ovmf</code>. Requerido para Windows 11, Secure Boot y la mayoría de instalaciones modernas de SO. Combínalo con un <code>efidisk0</code> para persistir las variables EFI.",
"definitionRich": "Firmware UEFI para VM, seleccionado con <code>qm set &lt;vmid&gt; -bios ovmf</code>. Se usa para invitados UEFI, como Windows 11 y configuraciones con Secure Boot. <code>efidisk0</code> conserva variables EFI; muchos otros invitados admiten BIOS clásico.",
"seeAlso": [
{
"label": "Añadir GPU a una VM (passthrough)",
"label": "Añadir GPU a una VM (acceso directo)",
"href": "/docs/hardware/gpu-vm-passthrough"
}
]
@@ -415,15 +415,15 @@
"Proxmox Backup Server"
],
"category": "Proxmox",
"definitionRich": "Producto independiente de Proxmox para backups incrementales, deduplicados y cifrados de VMs / CTs. Recomendado sobre vzdump plano cuando tienes una máquina aparte donde alojarlo."
"definitionRich": "Producto de copias de Proxmox con transferencias incrementales, deduplicación y cifrado opcional en el cliente para VM y CT. Puede ser destino de vzdump; es preferible un servidor separado a guardar copias en el propio host protegido."
},
{
"term": "pct",
"category": "Proxmox",
"definitionRich": "Herramienta CLI para gestionar contenedores LXC en Proxmox: <code>pct list / start / stop / shutdown / config / enter / exec / push / pull / destroy</code>.",
"definitionRich": "Herramienta de terminal para gestionar contenedores LXC en Proxmox: <code>pct list / start / stop / shutdown / config / enter / exec / push / pull / destroy</code>.",
"seeAlso": [
{
"label": "Gestión de VMs y CTs",
"label": "Gestión de VM y contenedores",
"href": "/docs/help-info/vm-ct-commands"
}
]
@@ -434,25 +434,25 @@
"Proxmox Cluster Filesystem"
],
"category": "Proxmox",
"definitionRich": "Sistema de archivos virtual basado en FUSE montado en <code>/etc/pve/</code>. Replica los cambios de configuración entre todos los nodos del clúster en tiempo real. Editar un archivo bajo <code>/etc/pve/</code> se propaga automáticamente."
"definitionRich": "Sistema de archivos virtual basado en FUSE, montado en <code>/etc/pve/</code>. Replica cambios de configuración entre nodos del clúster: las ediciones en <code>/etc/pve/</code> se propagan automáticamente."
},
{
"term": "pveam",
"aliases": [
"Proxmox VE Appliance Manager"
"Gestor de dispositivos virtuales de Proxmox VE"
],
"category": "Proxmox",
"definitionRich": "CLI para gestionar el catálogo local de plantillas de CT. <code>pveam update</code> refresca el índice; <code>pveam available</code> lista plantillas; <code>pveam download &lt;storage&gt; &lt;template&gt;</code> descarga una."
"definitionRich": "Herramienta del catálogo local de plantillas CT. <code>pveam update</code> actualiza el índice; <code>pveam available</code> lista plantillas y <code>pveam download &lt;storage&gt; &lt;template&gt;</code> descarga una."
},
{
"term": "pveproxy",
"category": "Proxmox",
"definitionRich": "El servicio HTTPS que sirve la UI web de Proxmox en el puerto 8006 y el terminal web. Se reinicia automáticamente durante los upgrades mayores — por eso ProxMenux se niega a ejecutar el upgrade PVE 8 → 9 desde el terminal web."
"definitionRich": "Servicio HTTPS de la interfaz web de Proxmox y su terminal, en el puerto 8006. Se reinicia durante las actualizaciones mayores; por eso ProxMenux impide ejecutar la actualización PVE 8 → 9 desde la terminal web."
},
{
"term": "pvesm",
"aliases": [
"Proxmox Storage Manager"
"Gestor de almacenamiento de Proxmox"
],
"category": "Proxmox",
"definitionRich": "Herramienta CLI para gestionar el almacenamiento de Proxmox. <code>pvesm status</code> muestra todos los almacenamientos configurados; <code>pvesm add &lt;type&gt;</code> registra nuevos (NFS, Samba, iSCSI, dir, ZFS, LVM, …).",
@@ -464,14 +464,14 @@
]
},
{
"term": "Privileged container",
"term": "Contenedor privilegiado",
"category": "Linux",
"definitionRich": "Contenedor LXC donde el usuario root dentro del contenedor <em>es</em> root en el host (UIDs no desplazados). Requerido para passthrough de hardware (dispositivos USB, compartición de GPU) y servidor Samba / NFS dentro del CT. Menos seguro que unprivileged — úsalo solo cuando sea necesario."
"definitionRich": "Contenedor LXC cuyo usuario root <em>corresponde al UID 0 del host</em>, aunque conserva namespaces y otras restricciones. Ofrece menos aislamiento que uno sin privilegios. GPU, USB y Samba no siempre requieren este modo: importan los permisos y el mapeo de UID."
},
{
"term": "ProxMenux Monitor",
"category": "ProxMenux",
"definitionRich": "Panel web opcional instalado junto a ProxMenux. Sirve estadísticas del host en tiempo real (CPU / RAM / disco / red), resumen de VMs y LXC, login + 2FA, en el puerto TCP <code>8008</code>.",
"definitionRich": "Panel web opcional instalado junto a ProxMenux. Muestra estadísticas del host en tiempo real (CPU, RAM, discos y red), un resumen de VM y LXC, e inicio de sesión con 2FA, en el puerto TCP <code>8008</code>.",
"seeAlso": [
{
"label": "ProxMenux Monitor",
@@ -485,18 +485,18 @@
"QEMU Copy-On-Write v2"
],
"category": "Almacenamiento",
"definitionRich": "Formato de imagen de disco de VM por defecto en el almacenamiento de directorio de Proxmox. Soporta thin provisioning, snapshots y copy-on-write. Convierte con <code>qemu-img convert -O qcow2 ...</code>."
"definitionRich": "Formato de imagen de disco VM habitual en almacenamiento de directorio. Admite asignación de espacio bajo demanda, snapshots y copia en escritura. Convierte una imagen con <code>qemu-img convert -O qcow2 ...</code>."
},
{
"term": "qm",
"aliases": [
"QEMU Manager"
"Gestor de QEMU"
],
"category": "Proxmox",
"definitionRich": "Herramienta CLI para gestionar VMs en Proxmox: <code>qm list / start / stop / shutdown / config / set / destroy / importdisk / migrate</code>. Comando hermano de <code>pct</code> para contenedores.",
"definitionRich": "Herramienta para gestionar VM en Proxmox: <code>qm list / start / stop / shutdown / config / set / destroy / importdisk / migrate</code>. Equivale a <code>pct</code> para contenedores.",
"seeAlso": [
{
"label": "Gestión de VMs y CTs",
"label": "Gestión de VM y contenedores",
"href": "/docs/help-info/vm-ct-commands"
}
]
@@ -504,20 +504,20 @@
{
"term": "Q35",
"category": "Virtualización",
"definitionRich": "Tipo de máquina moderno de QEMU que emula un chipset Intel Q35 con soporte PCIe. Recomendado sobre el antiguo i440FX para VMs que necesitan passthrough PCIe o soporte de SO guest moderno. Se establece con <code>qm set &lt;vmid&gt; -machine q35</code>."
"definitionRich": "Tipo de máquina QEMU que emula el chipset Intel Q35 con PCIe. Recomendado frente a i440FX para VM con asignación directa PCIe o sistemas modernos. Se configura con <code>qm set &lt;vmid&gt; -machine q35</code>."
},
{
"term": "QEMU",
"category": "Virtualización",
"definitionRich": "Emulador y virtualizador de máquinas genérico, de código abierto. Combinado con KVM en Proxmox para ejecutar VMs a velocidad casi nativa."
"definitionRich": "Emulador y virtualizador de máquinas de código abierto. Proxmox lo combina con KVM para ejecutar VM con rendimiento cercano al nativo."
},
{
"term": "rclone",
"category": "Linux",
"definitionRich": "Herramienta de línea de comandos que habla con ~50 proveedores de almacenamiento en la nube (Google Drive, Dropbox, OneDrive, Mega, S3, …). Usada en la guía de backup en la nube de Proxmox para montar una nube personal como un directorio en el que el host pueda escribir archivos vzdump.",
"definitionRich": "Herramienta de terminal compatible con numerosos proveedores de almacenamiento, como Google Drive, Dropbox, OneDrive, Mega y S3. La guía de copias en la nube la usa para montar un directorio remoto donde guardar archivos vzdump.",
"seeAlso": [
{
"label": "Backup a nube personal",
"label": "Copias a la nube personal",
"href": "/guides/backup_cloud"
}
]
@@ -525,7 +525,7 @@
{
"term": "Samba / SMB / CIFS",
"category": "Almacenamiento",
"definitionRich": "Familia de protocolos de compartición de archivos de Microsoft. <strong>SMB</strong> es el protocolo; <strong>Samba</strong> es la implementación de código abierto en Linux; <strong>CIFS</strong> es un dialecto SMB más antiguo. Se registra como almacenamiento de Proxmox vía <code>pvesm add cifs</code>.",
"definitionRich": "Familia de protocolos de archivos de Microsoft. <strong>SMB</strong> es el protocolo; <strong>Samba</strong>, su implementación abierta para Linux; y <strong>CIFS</strong>, un dialecto antiguo de SMB. Se registra en Proxmox con <code>pvesm add cifs</code>.",
"seeAlso": [
{
"label": "Almacenamiento y compartición",
@@ -536,7 +536,7 @@
{
"term": "SeaBIOS",
"category": "Virtualización",
"definitionRich": "Implementación de código abierto de BIOS heredado usada por QEMU. Firmware por defecto para nuevas VMs salvo que cambies a OVMF. Apropiado para SO más antiguos e instalaciones simples de Linux que no necesitan UEFI."
"definitionRich": "Implementación abierta de BIOS clásico utilizada por QEMU. Firmware predeterminado de VM nuevas salvo que elijas OVMF. Adecuado para sistemas antiguos e instalaciones Linux que no necesitan UEFI."
},
{
"term": "smartctl / SMART",
@@ -544,7 +544,7 @@
"Self-Monitoring, Analysis and Reporting Technology"
],
"category": "Almacenamiento",
"definitionRich": "Diagnósticos de disco integrados que reportan salud del drive, conteos de errores y resultados de self-tests. <code>smartctl</code> (de <code>smartmontools</code>) es la CLI; para drives NVMe, el paquete <code>nvme-cli</code> añade comandos específicos de NVMe.",
"definitionRich": "Diagnóstico integrado de discos que informa del estado, los errores y las pruebas internas. La herramienta es <code>smartctl</code>, del paquete <code>smartmontools</code>; <code>nvme-cli</code> añade comandos específicos para NVMe.",
"seeAlso": [
{
"label": "Salud y test SMART de discos",
@@ -559,12 +559,12 @@
{
"term": "systemd / systemctl / journalctl",
"category": "Linux",
"definitionRich": "Sistema init moderno usado por Debian / Proxmox. <code>systemctl</code> gestiona servicios (start / stop / enable / status). <code>journalctl</code> lee el log binario escrito por <code>systemd-journald</code>."
"definitionRich": "Sistema de inicio de Debian / Proxmox. <code>systemctl</code> gestiona servicios (iniciar, detener, habilitar y consultar el estado). <code>journalctl</code> lee el registro binario de <code>systemd-journald</code>."
},
{
"term": "sysctl",
"category": "Linux",
"definitionRich": "Gestión de parámetros del kernel. Lee <code>/etc/sysctl.conf</code> + <code>/etc/sysctl.d/*.conf</code> al arrancar. La post-instalación de ProxMenux entrega un perfil curado de tuning de sysctl.",
"definitionRich": "Herramienta para leer y cambiar parámetros del kernel. Los ajustes persistentes suelen ir en <code>/etc/sysctl.d/*.conf</code>; la lectura de <code>/etc/sysctl.conf</code> depende del cargador. La postinstalación de ProxMenux ofrece un perfil de ajustes sysctl.",
"seeAlso": [
{
"label": "Post-instalación: red",
@@ -575,7 +575,7 @@
{
"term": "trixie",
"category": "Linux",
"definitionRich": "Codename para Debian 13, la base de SO para Proxmox VE 9. Predecesor: <em>bookworm</em> (Debian 12 / PVE 8).",
"definitionRich": "Nombre en clave de Debian 13, base de Proxmox VE 9. Su predecesor es <em>bookworm</em> (Debian 12 / PVE 8).",
"seeAlso": [
{
"label": "Actualizar PVE 8 a PVE 9",
@@ -586,15 +586,15 @@
{
"term": "udev",
"category": "Linux",
"definitionRich": "Gestor de dispositivos de Linux. Reacciona a eventos de hardware y crea / elimina entradas bajo <code>/dev</code>. Reglas propias en <code>/etc/udev/rules.d/</code> mapean persistentemente direcciones MAC a nombres de interfaz, configuran nodos de dispositivo NVIDIA al cargar el driver, etc."
"definitionRich": "Gestor de dispositivos Linux. Responde a eventos de hardware y crea o elimina entradas en <code>/dev</code>. Las reglas de <code>/etc/udev/rules.d/</code> permiten fijar nombres por MAC, crear dispositivos NVIDIA al cargar el controlador y otras tareas."
},
{
"term": "UID / GID idmap",
"aliases": [
"UID shift"
"Cambio UID"
],
"category": "Linux",
"definitionRich": "En contenedores LXC <strong>unprivileged</strong>, los UIDs y GIDs se desplazan en <code>+100000</code> en el host. UID 0 del contenedor = UID 100000 del host, UID 1000 del contenedor = UID 101000 del host, etc. Afecta a la propiedad de archivos en bind mounts.",
"definitionRich": "Con el mapeo predeterminado de LXC <strong>sin privilegios</strong>, los UID y GID del host se desplazan <code>+100000</code>: UID 0 corresponde a 100000 y 1000 a 101000. Los mapeos personalizados pueden variar; los propietarios en montajes bind deben corresponder al mapeo elegido.",
"seeAlso": [
{
"label": "Puntos de montaje LXC",
@@ -603,17 +603,17 @@
]
},
{
"term": "Unprivileged container",
"term": "Contenedor sin privilegios",
"category": "Linux",
"definitionRich": "Contenedor LXC donde root dentro está mapeado a un UID sin privilegios en el host (desplazamiento de UID +100000). Más seguro que privileged pero no puede hacer passthrough de hardware ni ejecutar servicios a nivel de kernel. Por defecto para la mayoría de casos de uso."
"definitionRich": "Contenedor LXC cuyo root corresponde a un UID sin privilegios del host, normalmente 100000. Reduce sus privilegios aunque comparte el kernel. El acceso al hardware puede configurarse con permisos y mapeos adecuados; el modo privilegiado no siempre es necesario."
},
{
"term": "VFIO",
"aliases": [
"Virtual Function I/O"
"Función Virtual I/O"
],
"category": "Virtualización",
"definitionRich": "Framework del kernel de Linux para drivers de dispositivo seguros en espacio de usuario — usado para asociar dispositivos PCIe a VMs para passthrough directo. Se habilita cargando los módulos del kernel <code>vfio</code>, <code>vfio_iommu_type1</code> y <code>vfio_pci</code>, configurados vía <code>/etc/modprobe.d/vfio.conf</code>.",
"definitionRich": "Sistema del kernel Linux para controladores seguros en espacio de usuario, usado al asignar dispositivos PCIe directamente a VM. Intervienen <code>vfio</code>, <code>vfio_iommu_type1</code> y <code>vfio_pci</code>, con configuración en <code>/etc/modprobe.d/vfio.conf</code>.",
"seeAlso": [
{
"label": "Post-instalación: virtualización",
@@ -624,26 +624,26 @@
{
"term": "VirtIO",
"category": "Virtualización",
"definitionRich": "Familia de drivers de dispositivo paravirtualizados (red, almacenamiento, balloon, GPU) que corren más rápido que el hardware heredado emulado (p. ej. NICs e1000, discos IDE). El guest necesita el driver VirtIO correspondiente — nativo del kernel en Linux, instalación separada de ISO en Windows."
"definitionRich": "Familia de controladores paravirtualizados de red, almacenamiento, memoria dinámica y GPU. Evitan la sobrecarga de emular hardware antiguo como e1000 o IDE. El invitado necesita los controladores: integrados en Linux y disponibles en una ISO para Windows."
},
{
"term": "VLAN",
"aliases": [
"Virtual LAN"
"Red de área local virtual"
],
"category": "Red",
"definitionRich": "Tags 802.1Q que segmentan una red física en múltiples redes lógicas. Se configura por bridge o por NIC en <code>/etc/network/interfaces</code>."
"definitionRich": "Etiquetas 802.1Q para dividir una red física en varias redes lógicas. Se configuran por bridge o interfaz en <code>/etc/network/interfaces</code>."
},
{
"term": "VM",
"aliases": [
"Virtual Machine"
"Máquina virtual"
],
"category": "Proxmox",
"definitionRich": "Una emulación completa de máquina gestionada por Proxmox vía QEMU/KVM. Tiene un VMID numérico que mapea a <code>/etc/pve/qemu-server/&lt;VMID&gt;.conf</code>. Más pesada que los contenedores LXC pero totalmente aislada.",
"definitionRich": "Máquina virtual gestionada por Proxmox con QEMU/KVM, con su propio kernel. Su VMID numérico corresponde a <code>/etc/pve/qemu-server/&lt;VMID&gt;.conf</code>. Suele tener más sobrecarga que LXC, con aislamiento mediante un kernel separado.",
"seeAlso": [
{
"label": "Gestión de VMs y CTs",
"label": "Gestión de VM y contenedores",
"href": "/docs/help-info/vm-ct-commands"
}
]
@@ -651,10 +651,10 @@
{
"term": "vzdump",
"category": "Proxmox",
"definitionRich": "Herramienta de backup integrada de Proxmox para VMs y CTs. <strong>No incremental</strong> — cada backup es un snapshot completo. Configura modos (snapshot / suspend / stop), compresión (zstd / pigz / lzo), retención y notificación por trabajo.",
"definitionRich": "Herramienta de copias de VM y CT de Proxmox. Los archivos de copia <strong>no son incrementales</strong>; los destinos PBS admiten transferencias incrementales. Cada tarea configura modo (snapshot / suspend / stop), compresión (como zstd, gzip o lzo), retención y avisos.",
"seeAlso": [
{
"label": "Comandos de backup y restauración",
"label": "Comandos de copias y restauración",
"href": "/docs/help-info/backup-commands"
}
]
@@ -665,10 +665,10 @@
"Zettabyte File System"
],
"category": "Almacenamiento",
"definitionRich": "Sistema de archivos combinado con gestor de volúmenes conocido por sus snapshots, replicación send/receive, checksums end-to-end, compresión y auto-reparación. Hambriento de memoria (mira <strong>ARC</strong>) pero extremadamente robusto.",
"definitionRich": "Sistema de archivos y gestor de volúmenes con snapshots, replicación send/receive, sumas de comprobación y compresión. Puede reparar datos dañados si dispone de una copia redundante válida. La caché <strong>ARC</strong> usa RAM y puede limitarse.",
"seeAlso": [
{
"label": "Comandos de gestión de ZFS",
"label": "Comandos de gestión ZFS",
"href": "/docs/help-info/zfs-commands"
}
]
@@ -110,7 +110,7 @@
},
"apply": {
"title": "Aplicar cambios del host + workloads",
"body": "Una vez confirmas, el script escribe los cambios del lado del host — <code>vfio.conf</code>, blacklist, módulos y (para NVIDIA) la regla udev por BDF en <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> más el estado BDF en <code>/etc/proxmenux/vfio-bind.bdfs</code>. También aplica la política de conflicto elegida a cada VM/LXC afectada. Si la config del host realmente cambió, ejecuta <code>update-initramfs -u -k all</code> — si no, salta ese paso."
"body": "Tras confirmar, el script escribe los cambios en el host: <code>vfio.conf</code>, la lista de módulos bloqueados, los módulos y, para NVIDIA, la regla udev por BDF en <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> y el estado BDF en <code>/etc/proxmenux/vfio-bind.bdfs</code>. También aplica la política de conflictos elegida a cada VM/LXC afectado. Si la configuración del host ha cambiado, ejecuta <code>update-initramfs -u -k all</code> y después <code>proxmox-boot-tool refresh</code>; si no ha cambiado, omite ambos comandos."
},
"reboot": {
"title": "Reiniciar",
@@ -9,12 +9,12 @@
},
"header": {
"title": "Backup y restauración",
"description": "Referencia curada de comandos vzdump, qmrestore y pct restore para los flujos de backup de Proxmox. Incluye programación, opciones avanzadas como hook scripts / rutas excluidas / prioridad de E/S, y gestión de ficheros de backup.",
"description": "Selección de comandos vzdump, qmrestore y pct restore para backups en Proxmox. Incluye programación, opciones avanzadas como hooks, rutas excluidas y prioridad de E/S, y gestión de archivos de copia.",
"section": "Ayuda e información"
},
"intro": {
"title": "Tres modos de backup",
"body": "<strong>snapshot</strong> usa un snapshot en vivo — el guest sigue funcionando, pausa brevemente la E/S. <strong>suspend</strong> congela la VM durante el backup (más seguro que snapshot para FS que no soportan snapshots). <strong>stop</strong> apaga la VM, hace el backup en frío y la vuelve a arrancar. Elige según la tolerancia del guest y la capacidad del almacenamiento."
"body": "En VM, <strong>snapshot</strong> realiza una copia en vivo y no necesita snapshots del almacenamiento. <strong>suspend</strong> pausa la VM antes de la copia y no mejora necesariamente la consistencia. <strong>stop</strong> la apaga primero; si estaba encendida, puede reanudarse una vez iniciada la copia. En LXC es distinto: snapshot requiere almacenamiento con snapshots, suspend usa dos pasadas de rsync y stop mantiene el contenedor parado durante toda la copia."
},
"commandGroups": [
{
@@ -34,18 +34,18 @@
},
{
"command": "vzdump <vmid> --mode suspend",
"description": "Suspender la VM durante el backup"
"description": "Pausar la VM antes de la copia en vivo, modo suspend heredado"
},
{
"command": "vzdump <vmid> --mode stop",
"description": "Apagar la VM durante el backup"
"description": "Apagar la VM antes de iniciar la copia"
},
{
"command": "vzdump --all",
"description": "Backup de todas las VMs y contenedores"
},
{
"command": "vzdump --exclude <vmid1>,<vmid2>",
"command": "vzdump --all --exclude <vmid1>,<vmid2>",
"description": "Backup de todas excepto las VMs especificadas"
}
]
@@ -58,11 +58,11 @@
"description": "Usar compresión zstd para el backup"
},
{
"command": "vzdump <vmid> --pigz <threads>",
"command": "vzdump <vmid> --compress gzip --pigz <threads>",
"description": "Usar pigz con varios hilos"
},
{
"command": "vzdump <vmid> --notes <text>",
"command": "vzdump <vmid> --storage <storage> --notes-template <text>",
"description": "Añadir notas al backup"
},
{
@@ -70,7 +70,7 @@
"description": "Enviar email de notificación"
},
{
"command": "vzdump <vmid> --maxfiles <n>",
"command": "vzdump <vmid> --prune-backups keep-last=<n>",
"description": "Conservar solo n backups por VM"
},
{
@@ -96,7 +96,7 @@
},
{
"command": "qmrestore <backup-file> <vmid> --unique",
"description": "Crear una VM con ID único"
"description": "Restaurar la VM generando nuevas direcciones MAC aleatorias"
},
{
"command": "pct restore <vmid> <backup-file>",
@@ -107,8 +107,8 @@
"description": "Restaurar contenedor a un almacenamiento concreto"
},
{
"command": "pct restore <vmid> <backup-file> --rootfs <storage>",
"description": "Restaurar a un rootfs concreto"
"command": "pct restore <vmid> <backup-file> --rootfs <storage>:<size-GiB>",
"description": "Restaurar asignando el disco raíz al almacenamiento y tamaño elegidos"
},
{
"command": "pct restore <vmid> <backup-file> --unprivileged 1",
@@ -132,7 +132,7 @@
"description": "Buscar backups de contenedor"
},
{
"command": "pvesm list <storage>",
"command": "pvesm list <storage> --content backup",
"description": "Listar backups en un almacenamiento concreto"
},
{
@@ -149,7 +149,7 @@
"title": "Backups programados",
"commands": [
{
"command": "cat /etc/cron.d/vzdump",
"command": "cat /etc/pve/jobs.cfg",
"description": "Mostrar la programación de backups"
},
{
@@ -158,19 +158,19 @@
},
{
"command": "systemctl list-timers",
"description": "Listar todas las tareas programadas"
"description": "Listar temporizadores de systemd"
},
{
"command": "systemctl status cron",
"description": "Comprobar el estado del servicio cron"
},
{
"command": "grep vzdump /var/log/syslog",
"description": "Buscar logs de backup en syslog"
"command": "pvenode task list --typefilter vzdump",
"description": "Listar tareas de backup finalizadas"
},
{
"command": "tail -f /var/log/vzdump.log",
"description": "Seguir el log de backup en tiempo real"
"command": "pvenode task log <upid>",
"description": "Mostrar el registro de una tarea de copia mediante su UPID"
}
]
},
@@ -202,15 +202,15 @@
"description": "Esperar al lock"
},
{
"command": "qm importdisk <vmid> <backup> <storage>",
"description": "Importar un disco desde un backup"
"command": "qm importdisk <vmid> <disk-image> <storage>",
"description": "Importar un archivo de imagen de disco (por ejemplo raw, qcow2 o vmdk) como disco sin usar, no un archivo de backup de vzdump"
}
]
}
],
"testRestores": {
"title": "Prueba tus restauraciones",
"bodyRich": "Un backup que nunca has restaurado no es un backup. Periódicamente coge un backup, restáuralo a un VMID de prueba con <code>qmrestore --unique</code>, arranca la VM resultante y confirma que el contenido está intacto. La misma idea para contenedores con <code>pct restore</code>."
"bodyRich": "Restaura periódicamente una copia en un VMID de prueba libre con <code>qmrestore --unique</code>, arranca la VM en una red aislada y comprueba su contenido. La opción unique genera nuevas direcciones MAC; no cambia las IP estáticas ni la configuración de las aplicaciones. Prueba igual los contenedores con <code>pct restore</code>."
},
"related": {
"heading": "Relacionado",
@@ -14,7 +14,7 @@
},
"intro": {
"title": "IOMMU debe estar activado en BIOS / UEFI",
"body": "Antes de que ninguno de estos comandos importe, IOMMU tiene que estar activado a nivel de firmware (busca <em>VT-d</em>, <em>AMD-Vi</em> o <em>IOMMU</em> en BIOS / UEFI). Parámetros habituales de GRUB para activarlo del lado de Linux: <code>intel_iommu=on</code> (Intel) o <code>amd_iommu=on</code> (AMD), a menudo combinados con <code>iommu=pt video=efifb:off video=vesa:off</code>."
"body": "Activa primero IOMMU en el firmware: busca <em>VT-d</em>, <em>AMD-Vi</em> o <em>IOMMU</em> en BIOS/UEFI. En Linux está activado por defecto en AMD y en Intel con kernels Proxmox 6.8 o posteriores. Los kernels Intel anteriores pueden necesitar <code>intel_iommu=on</code>. La opción <code>iommu=pt</code> controla el modo passthrough de IOMMU; no justifica desactivar indiscriminadamente el framebuffer del host."
},
"commandGroups": [
{
@@ -130,14 +130,14 @@
},
{
"command": "qm set <vmid> -bios ovmf",
"description": "Hacer que la VM use UEFI/OVMF (necesario para passthrough de GPU)"
"description": "Configurar UEFI/OVMF en la VM, recomendado si la ROM de la GPU admite UEFI"
}
]
}
],
"afterChangesTip": {
"title": "Después de cambiar GRUB o configs de modprobe",
"bodyRich": "Ejecuta <code>update-grub</code> + <code>update-initramfs -u</code> y reinicia. Verifica con <code>cat /proc/cmdline</code> (parámetros del kernel), <code>dmesg | grep -i iommu</code> (IOMMU inicializado) y <code>find /sys/kernel/iommu_groups/ -type l | sort -V</code> (grupos presentes)."
"bodyRich": "En hosts que usan GRUB, aplica los cambios de arranque con <code>update-grub</code>. Actualiza los módulos con <code>update-initramfs -u -k all</code> y reinicia. Otros cargadores de arranque requieren su propio procedimiento. Comprueba <code>cat /proc/cmdline</code> (parámetros del kernel), <code>dmesg | grep -i iommu</code> (IOMMU inicializado) y <code>find /sys/kernel/iommu_groups/ -type l | sort -V</code> (grupos presentes)."
},
"related": {
"heading": "Relacionado",
@@ -150,7 +150,7 @@
{
"href": "/docs/hardware/igpu-acceleration-lxc",
"label": "Añadir GPU a LXC",
"tail": " — passthrough a un contenedor en lugar de a una VM."
"tail": " — compartir acceso a los dispositivos GPU del host con un contenedor LXC."
},
{
"href": "/docs/help-info",
+12 -12
View File
@@ -1,15 +1,15 @@
{
"meta": {
"title": "Referencia de comandos de Proxmox — qm, pct, vzdump, zpool, pveversion | ProxMenux",
"description": "Referencia curada de comandos esenciales de Proxmox VE y Linux organizados por tema: inspección del sistema, gestión de VMs y LXC (qm / pct), almacenamiento y discos, red, actualizaciones, passthrough de GPU, ZFS, backup y restauración, y herramientas CLI del día a día.",
"description": "Selección de comandos esenciales de Proxmox VE y Linux por tema: inspección del sistema, gestión de VM y LXC (qm / pct), almacenamiento y discos, red, actualizaciones, passthrough de GPU, ZFS, backup y restauración, y herramientas de terminal para el día a día.",
"ogTitle": "Referencia de comandos de Proxmox — qm, pct, vzdump, zpool",
"ogDescription": "Referencia curada de los comandos más útiles de Proxmox VE y Linux, agrupados por tema — sistema, VM/CT, almacenamiento, red, actualizaciones, passthrough de GPU, ZFS, backup y herramientas CLI.",
"ogDescription": "Selección de comandos útiles de Proxmox VE y Linux por tema: sistema, VM/CT, almacenamiento, red, actualizaciones, passthrough de GPU, ZFS, backups y herramientas CLI.",
"twitterTitle": "Referencia de comandos de Proxmox | ProxMenux",
"twitterDescription": "Referencia curada de los comandos más útiles de Proxmox VE y Linux, agrupados por tema."
"twitterDescription": "Selección de comandos útiles de Proxmox VE y Linux, agrupados por tema."
},
"header": {
"title": "Ayuda e información",
"description": "Compendio curado de comandos útiles de Linux y Proxmox VE organizados por tema. Nueve categorías — cubre desde una comprobación rápida con pveversion hasta un zfs send/receive multilínea — pensado para convivir con las secciones de GPU, disco y compartición de ProxMenux como una referencia única.",
"description": "Selección de comandos útiles de Linux y Proxmox VE organizados por tema. Las nueve categorías abarcan desde una consulta rápida con pveversion hasta una secuencia de zfs send/receive en varias líneas. Sirve de referencia junto a las secciones de GPU, discos y recursos compartidos de ProxMenux.",
"section": "Ayuda e información"
},
"intro": {
@@ -27,14 +27,14 @@
{
"icon": "Terminal",
"href": "/docs/help-info/system-commands",
"title": "Comandos de sistema útiles",
"description": "pveversion, uptime, free, journalctl, hostnamectl, información del usuario actual, auditoría de lynis, fastfetch."
"title": "Comandos útiles del sistema",
"description": "pveversion, uptime, free, journalctl, hostnamectl, información del usuario actual, auditoría con lynis y fastfetch."
},
{
"icon": "Cpu",
"href": "/docs/help-info/vm-ct-commands",
"title": "Gestión de VM y CT",
"description": "qm list / config / start / stop / migrate, pct list / config / enter, snapshots, clonación."
"description": "qm list / config / start / stop / migrate, pct list / config / enter, snapshots y clonación."
},
{
"icon": "HardDrive",
@@ -46,25 +46,25 @@
"icon": "Network",
"href": "/docs/help-info/network-commands",
"title": "Comandos de red",
"description": "ip / ss / nmcli, inspección de bridges, ping / traceroute, consultas DNS, fail2ban-client."
"description": "ip / ss / nmcli, inspección de bridges, ping / traceroute, consultas DNS y fail2ban-client."
},
{
"icon": "Package",
"href": "/docs/help-info/update-commands",
"title": "Actualizaciones y paquetes",
"description": "apt update / dist-upgrade, apt-cache policy, consultas dpkg, comprobación de ficheros de repositorio."
"description": "apt update / dist-upgrade, apt-cache policy, consultas con dpkg y revisión de archivos de repositorios."
},
{
"icon": "Cpu",
"href": "/docs/help-info/gpu-commands",
"title": "Passthrough de GPU",
"description": "comprobaciones con lspci / dmesg, verificación de IOMMU, binding de vfio-pci, uso de GPU desde el host."
"description": "Comprobaciones con lspci / dmesg, verificación de IOMMU, vinculación a vfio-pci y uso de GPU desde el host."
},
{
"icon": "Database",
"href": "/docs/help-info/zfs-commands",
"title": "Gestión de ZFS",
"description": "comandos zpool / zfs para estado, datasets, snapshots, send/receive, ajuste de ARC, trimming."
"description": "Comandos zpool / zfs para estado, datasets, snapshots, send/receive, ajuste de ARC y TRIM."
},
{
"icon": "Archive",
@@ -76,7 +76,7 @@
"icon": "Wrench",
"href": "/docs/help-info/tools-commands",
"title": "Herramientas CLI del sistema",
"description": "tmux, screen, htop / btop, ncdu, jq, dig, lsof, watch — herramientas de administración del día a día."
"description": "tmux, screen, htop / btop, ncdu, jq, dig, lsof, watch: herramientas de administración para el día a día."
}
]
},
@@ -9,7 +9,7 @@
},
"header": {
"title": "Comandos de red",
"description": "Referencia curada para la red del host Proxmox: información de interfaces, pruebas de conectividad, configuración, monitorización de tráfico y gestión del firewall. Combina ip / ss / nmcli / ethtool / tcpdump / pve-firewall.",
"description": "Selección de comandos de red para el host Proxmox: información de interfaces, pruebas de conectividad, configuración, monitorización de tráfico y gestión del firewall. Incluye ip / ss / nmcli / ethtool / tcpdump / pve-firewall.",
"section": "Ayuda e información"
},
"intro": {
@@ -88,11 +88,11 @@
},
{
"command": "ip link set <iface> up",
"description": "Levantar una interfaz de red"
"description": "Activar una interfaz de red"
},
{
"command": "ip link set <iface> down",
"description": "Bajar una interfaz de red"
"description": "Desactivar una interfaz de red"
}
]
},
@@ -149,7 +149,7 @@
],
"iptablesTip": {
"title": "iptables vs nftables",
"bodyRich": "Debian / Proxmox modernos usan <strong>nftables</strong> como motor de firewall subyacente. El clásico <code>iptables -L -n -v</code> sigue funcionando como capa de traducción, pero la fuente de verdad es <code>nft list ruleset</code>. Los comandos <code>pve-firewall</code> son el wrapper de Proxmox que emite reglas nftables a partir de la configuración del firewall del clúster."
"bodyRich": "El servicio clásico <code>pve-firewall</code> genera reglas de iptables. El servicio alternativo proxmox-firewall usa <strong>nftables</strong>. Consulta el backend iptables con <code>iptables -L -n -v</code> y el backend nftables con <code>nft list ruleset</code>. Usa las herramientas del backend activado; estos listados no son intercambiables."
},
"related": {
"heading": "Relacionado",
@@ -1,20 +1,20 @@
{
"meta": {
"title": "Comandos de almacenamiento y disco en Proxmox — lsblk, LVM, pvesm, qm importdisk | ProxMenux",
"title": "Comandos de almacenamiento y discos de Proxmox — lsblk, LVM, pvesm, qm importdisk | ProxMenux",
"description": "Referencia de comandos de almacenamiento y disco en Proxmox VE: lsblk, blkid, parted, lvdisplay, vgdisplay, pvs, mount, df, du, ncdu, pvesm status, qm importdisk y qemu-img convert para operaciones de disco de VM.",
"ogTitle": "Comandos de almacenamiento y disco en Proxmox — lsblk, LVM, pvesm, qm importdisk",
"ogTitle": "Comandos de almacenamiento y discos de Proxmox — lsblk, LVM, pvesm, qm importdisk",
"ogDescription": "Referencia de comandos de almacenamiento y disco en Proxmox VE — inspección de discos, LVM, montajes, gestión de almacenamiento de Proxmox, importación de disco de VM y conversión de imágenes.",
"twitterTitle": "Comandos de almacenamiento de Proxmox | ProxMenux",
"twitterDescription": "Inspección de discos, información de montajes, gestión LVM, almacenamiento de Proxmox y comandos de importación / conversión de discos de VM."
},
"header": {
"title": "Almacenamiento y discos",
"description": "Referencia curada para inspección de almacenamiento en hosts Proxmox: dispositivos de bloque, particiones, montajes, volúmenes LVM, configuración de almacenamiento de Proxmox y algunas operaciones de disco de VM (importdisk, qemu-img convert).",
"description": "Selección de comandos para inspeccionar el almacenamiento de hosts Proxmox: dispositivos de bloque, particiones, montajes, volúmenes LVM, configuración de Proxmox y operaciones con discos de VM (importdisk, qemu-img convert).",
"section": "Ayuda e información"
},
"intro": {
"title": "Inventario rápido de discos",
"body": "<code>lsblk</code> es la forma más rápida de ver todos los dispositivos de bloque y sus particiones en árbol. Para identificadores persistentes (que sobreviven entre reinicios y cambios de hardware) usa <code>ls -lh /dev/disk/by-id/</code>."
"body": "<code>lsblk</code> muestra los dispositivos de bloque y sus particiones en árbol. Consulta los identificadores persistentes con <code>ls -lh /dev/disk/by-id/</code>: para un mismo disco suelen mantenerse tras reinicios o cambios en el orden de detección de los dispositivos. Sustituir el disco o cambiar cómo la controladora expone su identidad puede modificar su ruta by-id."
},
"commandGroups": [
{
@@ -104,16 +104,16 @@
"description": "Mostrar el estado de todos los pools de almacenamiento"
},
{
"command": "pvesm list",
"description": "Listar todo el almacenamiento disponible"
"command": "pvesm status --enabled 1",
"description": "Listar los almacenamientos configurados y habilitados"
},
{
"command": "pvesm list <storage>",
"description": "Listar el contenido de un almacenamiento concreto"
},
{
"command": "pvesm scan <storage>",
"description": "Escanear el almacenamiento en busca de contenido nuevo"
"command": "pvesm scan nfs <server>",
"description": "Descubrir las exportaciones NFS de un servidor"
}
]
},
@@ -122,7 +122,7 @@
"commands": [
{
"command": "qm importdisk <vmid> <image_path> <storage>",
"description": "Adjuntar una imagen de disco a una VM"
"description": "Importar la imagen como disco sin usar de la VM; hay que conectarlo después"
},
{
"command": "qm set <vmid> -<bus><index> <disk_path>",
@@ -130,7 +130,7 @@
},
{
"command": "qemu-img convert -O <format> <input> <output>",
"description": "Convertir el formato de una imagen de disco"
"description": "Convertir el formato de una imagen de disco sin uso activo"
}
]
},
@@ -199,15 +199,15 @@
],
"lvmTip": {
"title": "LVM: comandos cortos vs largos",
"bodyRich": "Existen ambas formas por compatibilidad. <code>pvs</code> / <code>vgs</code> / <code>lvs</code> dan una tabla limpia de una línea por volumen; <code>pvdisplay</code> / <code>vgdisplay</code> / <code>lvdisplay</code> dan un volcado verboso de varias líneas por volumen. Para el día a día prefiere las versiones cortas."
"bodyRich": "Existen ambas formas. <code>pvs</code> / <code>vgs</code> / <code>lvs</code> muestran tablas compactas con una fila por volumen físico, grupo de volúmenes o volumen lógico, respectivamente. <code>pvdisplay</code> / <code>vgdisplay</code> / <code>lvdisplay</code> ofrecen más detalle en varias líneas. Las formas cortas resultan prácticas para las consultas habituales."
},
"smartInfo": {
"title": "SMART para discos mecánicos vs NVMe",
"bodyRich": "<strong>Discos mecánicos / SATA / SAS</strong> usan la familia <code>smartctl</code> de <code>smartmontools</code> (instalada por defecto en Proxmox). Pasa el dispositivo como <code>/dev/sda</code>, <code>/dev/sdb</code>, etc. <strong>Los discos NVMe</strong> tienen su propio protocolo nativo — <code>smartctl</code> funciona contra ellos (pasa la mayoría de datos), pero la herramienta <code>nvme</code> de <code>nvme-cli</code> reporta más campos específicos de NVMe (wear levelling, errores de medio, info de namespace). Instala con <code>apt install nvme-cli</code> si no está."
"title": "SMART en SATA/SAS frente a NVMe",
"bodyRich": "<strong>Los discos SATA / SAS, incluidos los SSD,</strong> se pueden consultar con <code>smartctl</code> de <code>smartmontools</code>, instalado por defecto en Proxmox. Indica el dispositivo, por ejemplo <code>/dev/sda</code> o <code>/dev/sdb</code>. <strong>Los discos NVMe</strong> usan otro protocolo nativo. <code>smartctl</code> también los admite, mientras que <code>nvme</code> de <code>nvme-cli</code> ofrece consultas específicas de controladoras, namespaces y salud NVMe. Instálalo con <code>apt install nvme-cli</code> si falta."
},
"selfTestWarn": {
"title": "Los self-tests se ejecutan en segundo plano",
"bodyRich": "<code>smartctl -t short</code> y <code>-t long</code> retornan inmediatamente — el disco ejecuta el test por su cuenta. Comprueba el progreso con <code>smartctl -a /dev/&lt;disk&gt;</code> (busca la línea \"Self-test routine in progress\") o espera a que termine y lee <code>smartctl -l selftest /dev/&lt;disk&gt;</code>. Los tests cortos tardan ~2 min; los largos pueden tardar horas en mecánicos grandes. El disco sigue usable durante la prueba, pero el rendimiento de E/S baja."
"bodyRich": "En discos compatibles, <code>smartctl -t short /dev/&lt;disk&gt;</code> y <code>smartctl -t long /dev/&lt;disk&gt;</code> inician pruebas en segundo plano y devuelven el control enseguida. Consulta el progreso con <code>smartctl -a /dev/&lt;disk&gt;</code>, buscando \"Self-test routine in progress\", o espera y lee <code>smartctl -l selftest /dev/&lt;disk&gt;</code>. Las cortas suelen tardar unos dos minutos; las largas pueden durar horas. El disco sigue disponible, aunque puede bajar el rendimiento de E/S."
},
"related": {
"heading": "Relacionado",
@@ -219,7 +219,7 @@
},
{
"href": "/docs/disk-manager",
"label": "Disk Manager",
"label": "Administrador de discos",
"tail": " — flujos interactivos de ProxMenux para passthrough de disco, importación, formateo y SMART."
},
{
@@ -1,20 +1,20 @@
{
"meta": {
"title": "Comandos de sistema de Proxmox VE — pveversion, uptime, journalctl, systemctl | ProxMenux",
"description": "Referencia de comandos esenciales de Proxmox VE y Linux: pveversion, pveperf, uptime, journalctl, systemctl, lscpu, lsblk, df, free, last, who. Todos son de solo lectura y seguros de ejecutar en cualquier host.",
"description": "Comandos de Proxmox VE y Linux para versiones, tiempo de actividad, memoria, servicios, registros y usuarios, además de herramientas de auditoría y resumen. Incluye un comando de reinicio de servicio; los ejemplos no son todos de solo lectura.",
"ogTitle": "Comandos de sistema de Proxmox VE — pveversion, uptime, journalctl, systemctl",
"ogDescription": "Referencia de comandos esenciales de Proxmox VE y Linux — versión, uptime, servicios, logs, información de usuarios, exploración de hardware. Todos de solo lectura.",
"ogDescription": "Comandos de Proxmox VE y Linux para versión, tiempo de actividad, servicios, registros y usuarios, con gestión de servicios y herramientas de auditoría.",
"twitterTitle": "Comandos de sistema de Proxmox VE | ProxMenux",
"twitterDescription": "Comandos esenciales de inspección del sistema para Proxmox VE — versión, estado, servicios, logs, información de usuarios."
},
"header": {
"title": "Comandos de sistema útiles",
"description": "Comandos de solo lectura para inspeccionar el host Proxmox: versión, kernel, uptime, memoria, estado de la interfaz web, últimas líneas de log, usuarios conectados y un par de herramientas de auditoría y resumen. Ninguno modifica el sistema.",
"title": "Comandos útiles del sistema",
"description": "Comandos para inspeccionar el host Proxmox: versión, kernel, tiempo de actividad, memoria, estado de la interfaz web, registros recientes y usuarios conectados, además de herramientas de auditoría y resumen. La mayoría consultan el estado, pero systemctl restart pveproxy reinicia el proxy web y las auditorías pueden escribir informes y registros.",
"section": "Ayuda e información"
},
"intro": {
"title": "Qué es esto",
"body": "La misma lista numerada que ProxMenux muestra cuando eliges <em>Comandos de sistema útiles</em>. Usa el botón Copiar para llevarte cualquier comando, o consúltalo para recordar el flag exacto."
"body": "Es la misma lista numerada que ProxMenux muestra al elegir <em>Comandos útiles del sistema</em>. Usa el botón Copiar para copiar un comando o consulta la lista para recordar la opción exacta."
},
"commandGroups": [
{
@@ -141,12 +141,12 @@
{
"href": "/docs/help-info/update-commands",
"label": "Actualizaciones y paquetes",
"tail": " — comandos de apt y de actualización de pve."
"tail": " — comandos de apt y de actualización de PVE."
},
{
"href": "/docs/help-info/tools-commands",
"label": "Herramientas CLI del sistema",
"tail": " — htop, btop, ncdu y similares."
"tail": " — htop, btop, ncdu y herramientas similares."
},
{
"href": "/docs/help-info",
@@ -63,7 +63,7 @@
},
{
"command": "tcpdump -i <interface>",
"description": "Volcar tráfico de red"
"description": "Capturar tráfico de red"
},
{
"command": "netstat -tuln",
@@ -191,7 +191,7 @@
},
{
"command": "scp <file> <user>@<host>:<path>",
"description": "Copiar ficheros de forma segura"
"description": "Copiar archivos de forma segura"
},
{
"command": "rsync -avz <src> <dest>",
@@ -228,15 +228,15 @@
},
{
"command": "timedatectl",
"description": "Controlar la hora y fecha del sistema"
"description": "Gestionar la hora y la fecha del sistema"
},
{
"command": "hostnamectl",
"description": "Controlar el hostname del sistema"
"description": "Gestionar el nombre del host"
},
{
"command": "localectl",
"description": "Controlar el locale y el teclado del sistema"
"description": "Gestionar la configuración regional y el teclado del sistema"
},
{
"command": "update-alternatives --config <name>",
@@ -251,7 +251,7 @@
],
"tmuxTip": {
"title": "Usa tmux / screen para comandos de larga duración",
"bodyRich": "Cualquier cosa que tarde más que un café — un backup, una actualización larga, un rsync grande — debería correr dentro de <code>tmux</code> o <code>screen</code>. Las desconexiones SSH no matan la sesión, y puedes reengancharte desde cualquier sitio con <code>tmux attach</code>."
"bodyRich": "Ejecuta las tareas largas, como un backup, una actualización o una transferencia grande con rsync, dentro de <code>tmux</code> o <code>screen</code> para que una desconexión SSH no termine la sesión del terminal. En una sesión tmux, vuelve a conectarte al mismo host con el mismo usuario y ejecuta <code>tmux attach</code>. Las sesiones screen tienen su propio comando de reconexión."
},
"related": {
"heading": "Relacionado",
@@ -263,7 +263,7 @@
},
{
"href": "/docs/help-info/system-commands",
"label": "Comandos de sistema útiles",
"label": "Comandos útiles del sistema",
"tail": " — comandos de inspección específicos de Proxmox."
},
{
@@ -1,15 +1,15 @@
{
"meta": {
"title": "Comandos de actualización y paquetes en Proxmox — apt, pveupgrade, dpkg | ProxMenux",
"title": "Comandos de actualización y paquetes de Proxmox — apt, pveupgrade, dpkg | ProxMenux",
"description": "Referencia de comandos de actualización y paquetes para Proxmox VE: apt update, apt upgrade, apt dist-upgrade, pveupgrade, dpkg -l, consultas de información de paquetes y configuración de repositorios en /etc/apt/sources.list.d/.",
"ogTitle": "Comandos de actualización y paquetes en Proxmox — apt, pveupgrade, dpkg",
"ogTitle": "Comandos de actualización y paquetes de Proxmox — apt, pveupgrade, dpkg",
"ogDescription": "Comandos apt, pveupgrade y dpkg para mantener Proxmox VE al día — actualizaciones del sistema, gestión de paquetes, configuración de repositorios.",
"twitterTitle": "Comandos de actualización de Proxmox | ProxMenux",
"twitterDescription": "Comandos apt y pveupgrade para gestionar actualizaciones y paquetes en hosts Proxmox VE."
},
"header": {
"title": "Actualizaciones y paquetes",
"description": "Referencia curada de comandos apt y de actualización específicos de Proxmox: actualizaciones del sistema, instalación / eliminación / purga de paquetes, consultas (apt-cache policy, dpkg -l) e inspección de la configuración de repositorios.",
"description": "Selección de comandos apt y específicos de Proxmox: actualización del sistema, instalación, eliminación y purga de paquetes, consultas con apt-cache policy y dpkg -l, y revisión de repositorios.",
"section": "Ayuda e información"
},
"intro": {
@@ -22,7 +22,7 @@
"commands": [
{
"command": "apt update && apt upgrade -y",
"description": "Actualizar y mejorar todos los paquetes del sistema"
"description": "Actualizar las listas y los paquetes instalados (apt upgrade)"
},
{
"command": "apt dist-upgrade -y",
@@ -51,15 +51,15 @@
},
{
"command": "pveupgrade",
"description": "Mostrar las actualizaciones disponibles de Proxmox"
"description": "Iniciar la actualización interactiva de paquetes de Proxmox"
},
{
"command": "pve-upgrade",
"description": "Realizar la actualización de Proxmox VE"
"command": "pve8to9 --full",
"description": "Comprobar si está preparado para pasar de PVE 8 a 9, sin realizar la actualización"
},
{
"command": "pveceph upgrade",
"description": "Actualizar los paquetes de Ceph (si Ceph está instalado)"
"command": "ceph versions",
"description": "Mostrar versiones de los demonios de Ceph antes de planificar su actualización"
}
]
},
@@ -134,18 +134,18 @@
},
{
"command": "cat /etc/apt/sources.list.d/pve-enterprise.list",
"description": "Mostrar la configuración del repo Proxmox Enterprise"
"description": "Mostrar la configuración de Proxmox Enterprise del archivo .list de PVE 8"
},
{
"command": "apt-key list",
"description": "Listar las claves de firma de los repositorios"
"description": "Listar claves de repositorios del sistema antiguo donde esté disponible apt-key"
}
]
}
],
"backupWarn": {
"title": "Haz un backup antes de actualizaciones mayores",
"bodyRich": "Para releases puntuales (8.4.1 → 8.4.5) el clásico <code>apt update &amp;&amp; apt upgrade</code> es seguro. Para <strong>actualizaciones de versión mayor</strong> (PVE 8 → 9) usa el flujo dedicado de ProxMenux: <upgradeLink>Actualizar PVE 8 a PVE 9</upgradeLink> — añade comprobaciones previas, migración de repositorios y validación post-actualización."
"title": "Haz un backup antes de las actualizaciones mayores",
"bodyRich": "Para las actualizaciones habituales, Proxmox recomienda <code>apt update &amp;&amp; apt full-upgrade</code>; revisa los cambios de paquetes antes de confirmar. Para <strong>actualizaciones de versión mayor</strong> (PVE 8 → 9), usa el procedimiento específico de ProxMenux: <upgradeLink>Actualizar PVE 8 a PVE 9</upgradeLink>. Añade comprobaciones previas, migración de repositorios y validación posterior. Haz un backup antes."
},
"related": {
"heading": "Relacionado",
@@ -153,7 +153,7 @@
{
"href": "/docs/utils/system-update",
"label": "Actualización del sistema Proxmox (interactivo)",
"tail": " — wrapper que hace todo esto con un diálogo de confirmación, una recompilación DKMS automática de los drivers gestionados por ProxMenux cuando se instala un kernel nuevo y un prompt de reinicio. También lanzable desde el botón Update Now del dashboard de ProxMenux Monitor."
"tail": " — realiza estas tareas con confirmación, recompila mediante DKMS los controladores gestionados por ProxMenux cuando se instala un kernel nuevo y propone reiniciar. También se puede abrir desde Actualizar ahora en el panel de ProxMenux Monitor."
},
{
"href": "/docs/utils/upgrade-pve8-pve9",
@@ -5,11 +5,11 @@
"ogTitle": "Comandos qm y pct de Proxmox — gestión de VM y contenedores LXC",
"ogDescription": "Referencia de comandos qm y pct de Proxmox VE — gestiona máquinas virtuales y contenedores LXC desde la CLI: arrancar, parar, configurar, snapshot, migrar, clonar, destruir.",
"twitterTitle": "Comandos qm / pct de Proxmox | ProxMenux",
"twitterDescription": "Comandos qm / pct curados para gestionar máquinas virtuales y contenedores LXC en Proxmox VE."
"twitterDescription": "Selección de comandos qm / pct para gestionar VM y contenedores LXC en Proxmox VE."
},
"header": {
"title": "Gestión de VM y CT",
"description": "Referencia curada de los comandos qm (VMs) y pct (contenedores LXC). Listado, ciclo de vida (start / stop / shutdown / destroy), inspección de configuración y operaciones específicas de contenedor como exec, enter, push y pull.",
"description": "Selección de comandos qm para VM y pct para contenedores LXC. Listados, ciclo de vida (start / stop / shutdown / destroy), consulta de configuración y operaciones de contenedor como exec, enter, push y pull.",
"section": "Ayuda e información"
},
"intro": {
@@ -30,11 +30,11 @@
},
{
"command": "qm config <vmid>",
"description": "Mostrar la configuración de la VM (parseada por qm)"
"description": "Mostrar la configuración de la VM interpretada por qm"
},
{
"command": "pct config <ctid>",
"description": "Mostrar la configuración del contenedor (parseada por pct)"
"description": "Mostrar la configuración del contenedor interpretada por pct"
}
]
},
@@ -84,7 +84,7 @@
},
{
"command": "qm reset <vmid>",
"description": "Resetear una máquina virtual (reinicio en caliente)"
"description": "Forzar un reinicio de la máquina virtual (reset)"
},
{
"command": "qm suspend <vmid>",
@@ -116,7 +116,7 @@
"description": "Apagar un contenedor de forma ordenada"
},
{
"command": "pct restart <ctid>",
"command": "pct reboot <ctid>",
"description": "Reiniciar un contenedor"
},
{
@@ -153,18 +153,18 @@
],
"destroyWarn": {
"title": "Destroy es irreversible",
"bodyRich": "<code>qm destroy</code> y <code>pct destroy</code> eliminan la VM / CT y todos sus discos. No hay confirmación por defecto. Haz un backup primero si hay alguna posibilidad de que quieras recuperar los datos — ver <backupLink>Backup y restauración</backupLink>."
"bodyRich": "<code>qm destroy</code> y <code>pct destroy</code> eliminan la configuración del guest y sus volúmenes de disco gestionados. No supongas que borran los datos externos o montados por bind mount. La CLI no pide confirmación por defecto. Guarda antes cualquier dato que puedas necesitar; consulta <backupLink>Backup & Restore</backupLink>."
},
"qmConfigTip": {
"title": "qm config vs editar el fichero .conf directamente",
"bodyRich": "<code>qm config &lt;vmid&gt;</code> y <code>pct config &lt;ctid&gt;</code> leen el fichero a través del parser de Proxmox — la salida está normalizada, sin comentarios, y los cambios pendientes se muestran aparte. Editar <code>/etc/pve/qemu-server/&lt;vmid&gt;.conf</code> o <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code> directamente salta el parser. Útil para arreglar una config corrupta o aplicar un ajuste que <code>qm set</code> no acepte, pero detén antes el guest para evitar races. El sistema de ficheros del clúster (<code>pmxcfs</code>) se encarga de propagar el cambio a los demás nodos."
"title": "qm config frente a editar directamente el archivo .conf",
"bodyRich": "<code>qm config &lt;vmid&gt;</code> y <code>pct config &lt;ctid&gt;</code> muestran la configuración mediante los analizadores de Proxmox. Para cambios normales, usa <code>qm set</code> o su equivalente de pct. Editar directamente <code>/etc/pve/qemu-server/&lt;vmid&gt;.conf</code> o <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code> evita la validación y los bloqueos de los comandos de gestión; el archivo debe seguir siendo válido. Detén el guest y guarda una copia antes de repararlo a mano. <code>pmxcfs</code> sincroniza la configuración entre nodos del clúster, no el contenido de sus discos."
},
"related": {
"heading": "Relacionado",
"items": [
{
"href": "/docs/help-info/backup-commands",
"label": "Backup y restauración",
"label": "Backup & Restore",
"tail": " — vzdump y qmrestore / pct restore."
},
{
@@ -9,7 +9,7 @@
},
"header": {
"title": "Gestión de ZFS",
"description": "Referencia curada de comandos zpool y zfs: inspección de pools, CRUD de datasets, snapshots, clone y send/receive (incremental y recursivo), scrub / clear / replace para mantenimiento, además de estadísticas de E/S y resumen de ARC.",
"description": "Selección de comandos zpool y zfs: consulta de pools, creación, lectura, modificación y borrado de datasets, snapshots, clone y send/receive incremental y recursivo, mantenimiento con scrub / clear / replace, estadísticas de E/S y resumen de ARC.",
"section": "Ayuda e información"
},
"intro": {
@@ -104,16 +104,16 @@
},
{
"command": "zfs hold <tag> <pool>/<dataset>@<snapshot-name>",
"description": "Poner un hold en un snapshot"
"description": "Proteger un snapshot del borrado mediante un hold"
},
{
"command": "zfs release <tag> <pool>/<dataset>@<snapshot-name>",
"description": "Liberar un hold en un snapshot"
"description": "Liberar la protección hold de un snapshot"
}
]
},
{
"title": "Clone y send/receive",
"title": "Clonación y send/receive",
"commands": [
{
"command": "zfs clone <pool>/<dataset>@<snapshot> <pool>/<clone-name>",
@@ -142,15 +142,15 @@
"commands": [
{
"command": "zpool scrub <pool>",
"description": "Iniciar un scrub sobre un pool"
"description": "Iniciar una comprobación scrub del pool"
},
{
"command": "zpool scrub -s <pool>",
"description": "Parar un scrub en curso"
"description": "Detener el scrub en curso"
},
{
"command": "zpool clear <pool>",
"description": "Limpiar los contadores de error de un pool"
"description": "Reiniciar los contadores de errores del pool"
},
{
"command": "zpool clear <pool> <device>",
@@ -202,7 +202,7 @@
],
"bestPractices": {
"title": "Buenas prácticas operativas",
"bodyRich": "Ejecuta <code>zpool scrub</code> semanal o mensualmente para detectar corrupción silenciosa. Mantén al menos un 10-15% del pool libre — el rendimiento de ZFS cae con fuerza por encima del 80% lleno. Reemplaza siempre los dispositivos fallidos con <code>zpool replace</code> (in-place) en lugar de detach + add (que pierde la redundancia temporalmente)."
"bodyRich": "Programa <code>zpool scrub</code> periódicamente para verificar las sumas de comprobación y revisa el resultado. Mantén espacio libre: el impacto de llenar el pool depende de la carga y la distribución. Usa <code>zpool replace</code> para sustituir un dispositivo fallido y sigue el procedimiento de su tipo de vdev. Detach + add no equivale a sustituirlo y puede cambiar la topología o eliminar redundancia."
},
"related": {
"heading": "Relacionado",
@@ -214,7 +214,7 @@
},
{
"href": "/docs/help-info/backup-commands",
"label": "Backup y restauración",
"label": "Backup & Restore",
"tail": " — vzdump, qmrestore."
},
{
+16 -16
View File
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Instalar ProxMenux | ProxMenux Documentation",
"description": "Instalador de una línea para ProxMenux en hosts Proxmox VE 8+. Incluye ficheros de traducción pre-generados para seis idiomas (inglés, español, francés, alemán, italiano, portugués) — el idioma se elige una vez durante la instalación. Canal beta también disponible para acceso temprano a nuevas funciones.",
"ogTitle": "Instalar ProxMenux | ProxMenux Documentation",
"title": "Instalar ProxMenux | Documentación de ProxMenux",
"description": "Instala ProxMenux con un comando en hosts Proxmox VE 8+. Incluye catálogos JSON pregenerados en ocho idiomas: inglés, español, francés, alemán, italiano, portugués, eslovaco y sueco. Elige el idioma durante la instalación o cámbialo después en Configuración. El canal beta permite probar antes las nuevas funciones.",
"ogTitle": "Instalar ProxMenux | Documentación de ProxMenux",
"ogDescription": "Instala ProxMenux en Proxmox VE 8+ con un comando. Canales estable y beta disponibles."
},
"header": {
@@ -42,50 +42,50 @@
"imageAlt": "Instalación de ProxMenux en progreso"
},
"first": {
"heading": "Primer lanzamiento",
"heading": "Primer inicio",
"intro": "Una vez instalado, ejecuta:",
"code": "menu",
"outro": "ProxMenux arranca y aterrizas en el menú principal. Desde aquí puedes ejecutar cualquiera de los flujos documentados en este sitio — <postlink>Post-instalación</postlink> es una buena primera parada en un host Proxmox recién hecho."
"outro": "ProxMenux se abre en el menú principal. Desde ahí puedes ejecutar cualquiera de los procedimientos documentados en esta web. En un host Proxmox recién instalado, conviene empezar por <postlink>Postinstalación</postlink>."
},
"beta": {
"heading": "Canal beta",
"calloutTitle": "¿Qué es el programa beta?",
"calloutBody": "¿Quieres probar las últimas funciones antes del release oficial y ayudar a dar forma a la versión final? El programa beta de ProxMenux da acceso temprano a la nueva funcionalidad — incluyendo los builds más nuevos de ProxMenux Monitor — directamente desde la rama <code>develop</code>. Los builds beta pueden contener bugs o funciones incompletas. Tu feedback ayuda a arreglarlos antes del release estable.",
"calloutBody": "¿Quieres probar las nuevas funciones antes de su publicación oficial y ayudar a dar forma a la versión final? El programa beta de ProxMenux da acceso anticipado a las novedades, incluidas las últimas compilaciones de ProxMenux Monitor, desde la rama <code>develop</code>. Las versiones beta pueden contener errores o funciones incompletas. Tus comentarios ayudan a corregirlos antes de la versión estable.",
"intro": "Instala la versión beta en lugar de la estable con:",
"code": "bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/develop/install_proxmenux_beta.sh)\"",
"outro": "La beta es opt-in — tienes que ejecutar explícitamente el instalador beta. Cuando se publica una release estable, ProxMenux te notifica en el siguiente lanzamiento de <code>menu</code> y ofrece cambiar automáticamente. Para salir antes, usa la opción <betalink>Desactivar programa beta</betalink> en Settings."
"outro": "La beta es voluntaria: debes ejecutar expresamente su instalador. Cuando se publica una versión estable, ProxMenux avisa al volver a ejecutar <code>menu</code> y ofrece cambiar automáticamente. Para salir antes de la beta, usa <betalink>Desactivar programa beta</betalink> en Configuración."
},
"updating": {
"heading": "Actualizar",
"body": "ProxMenux se autoactualiza. Cuando hay una nueva versión disponible, el siguiente lanzamiento de <code>menu</code> ofrece la actualización; al aceptar se reemplazan los archivos de utilidad y las configuraciones en sitio. No hace falta descarga manual. Los usuarios estables reciben releases estables; los usuarios beta reciben releases beta (y el prompt de auto-cambio de arriba cuando una estable se publica). La forma del prompt depende de dónde se ejecute <code>menu</code>: por SSH o desde la consola de Proxmox aparece el diálogo clásico sí / no y al aceptar la actualización se aplica de inmediato. Dentro del terminal WebSocket de ProxMenux Monitor se sustituye por un msgbox informativo — ese terminal no puede sobrevivir a una autoactualización en curso, así que el msgbox muestra el instalador canónico de una línea (<code>bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"</code> para el canal estable, o la URL equivalente de <code>install_proxmenux_beta.sh</code> para beta) para lanzarlo desde SSH o consola."
"body": "ProxMenux gestiona sus actualizaciones. Si hay una nueva versión, al ejecutar <code>menu</code> ofrece actualizar: si aceptas, sustituye los archivos y la configuración de la herramienta en la instalación existente. No necesitas descargar nada a mano. La versión estable recibe actualizaciones estables y la beta, actualizaciones beta, con la opción de cambiar a estable descrita arriba. El aviso depende de dónde ejecutes <code>menu</code>: por SSH o desde la consola de Proxmox aparece un diálogo de sí o no, y al aceptar se aplica la actualización. En el terminal WebSocket de ProxMenux Monitor aparece un mensaje informativo, porque ese terminal se interrumpiría durante la actualización. El mensaje muestra el instalador de una línea (<code>bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"</code> para estable, o la URL equivalente de <code>install_proxmenux_beta.sh</code> para beta), que debes ejecutar por SSH o desde la consola."
},
"uninstall": {
"heading": "Desinstalar",
"body": "Desde dentro de ProxMenux: <strong>Settings → Desinstalar ProxMenux</strong>. Elimina el árbol de scripts, el lanzador y el servicio del Monitor, opcionalmente elimina las dependencias seleccionadas, restaura los backups de <code>/root/.bashrc</code> y <code>/etc/motd</code> tomados en el momento de la instalación. Paso a paso completo: <uninstalllink>Desinstalar ProxMenux</uninstalllink>."
"body": "Desde ProxMenux: <strong>Ajustes → Desinstalar ProxMenux</strong>. El desinstalador elimina el árbol de scripts, el lanzador y el servicio Monitor, permite eliminar dependencias seleccionadas y restaura <code>/root/.bashrc</code> y <code>/etc/motd</code> desde los backups que crea Post-Install, si existen (si no, elimina la línea de ProxMenux del MOTD). Procedimiento completo: <uninstalllink>Desinstalar ProxMenux</uninstalllink>."
},
"troubleshoot": {
"heading": "Solución de problemas",
"virustotalTitle": "VirusTotal marca la URL de instalación",
"virustotalBody": "Una detección 1/95 por motores heurísticos (p. ej. <em>Chong Lua Dao</em>) es un falso positivo conocido. El instalador usa el patrón estándar <code>curl | bash</code> y descarga binarios legítimos (como <code>jq</code> desde su release oficial en GitHub), que los escáneres agresivos marcan basándose en el <em>comportamiento</em> y no en código realmente malicioso. El instalador es 100% código abierto y revisable. Más contexto en la <issuelink>Issue #162</issuelink>.",
"virustotalBody": "El resultado de 1/95 notificado en el issue #162, de <em>Chong Lua Dao</em>, fue identificado por el mantenedor como un falso positivo. El instalador se ejecuta con una orden que descarga y ejecuta el script (<code>bash -c \"$(wget -qLO - …)\"</code>) y puede descargar <code>jq</code> desde su versión oficial de GitHub. Este <em>comportamiento</em> puede activar análisis heurísticos; aquel informe histórico no determina la seguridad de futuras descargas. El código del instalador es abierto y se puede revisar. Más contexto en el <issuelink>issue #162</issuelink>.",
"aptTitle": "La instalación falla con errores de apt",
"aptBody": "Normalmente un repo de Proxmox faltante o mal configurado. El instalador trae las dependencias vía apt; si la configuración del repo está rota (común en instalaciones de Proxmox 8 a pelo que no se han actualizado aún), apt falla. Ejecuta <code>apt-get update</code> manualmente primero y resuelve cualquier error, después vuelve a ejecutar el instalador.",
"aptBody": "Suele deberse a un repositorio de Proxmox ausente o mal configurado. El instalador obtiene las dependencias mediante apt: si los repositorios están mal configurados, apt falla. Es habitual en instalaciones mínimas de Proxmox 8 que aún no se han actualizado. Ejecuta primero <code>apt-get update</code> a mano, resuelve los errores y vuelve a ejecutar el instalador.",
"menuTitle": "`menu: command not found` tras la instalación",
"menuBody": "El lanzador vive en <code>/usr/local/bin/menu</code>. Comprueba que esté ahí: <code>ls -lh /usr/local/bin/menu</code>. Si falta, la instalación terminó antes — vuelve a ejecutar el instalador. Si está pero no se encuentra, tu PATH no incluye <code>/usr/local/bin</code>; o arreglas el PATH o invocas el lanzador directamente: <code>/usr/local/bin/menu</code>.",
"menuBody": "El lanzador está en <code>/usr/local/bin/menu</code>. Comprueba que exista con <code>ls -lh /usr/local/bin/menu</code>. Si falta, la instalación se interrumpió: vuelve a ejecutar el instalador. Si existe pero no se encuentra el comando, PATH no incluye <code>/usr/local/bin</code>. Corrige PATH o ejecuta directamente <code>/usr/local/bin/menu</code>.",
"stuckTitle": "La instalación se queda colgada o no avanza",
"stuckBody": "Si una instalación, reinstalación o actualización se queda congelada por un problema de conexión, cancela el proceso con <strong>Ctrl + C</strong> y vuelve a lanzar el instalador a mano.",
"otherTitle": "Otros problemas",
"otherBody": "Mira las <issueslink>GitHub Issues</issueslink> en busca de problemas conocidos o abre una nueva con la salida de log relevante. Usuarios beta: incluye <code>journalctl -u proxmenux-monitor -n 50</code> si está relacionado con el Monitor."
"otherBody": "Consulta <issueslink>GitHub Issues</issueslink> para buscar problemas conocidos o abre una incidencia con los registros relevantes. Si usas la beta y el problema afecta a Monitor, incluye la salida de <code>journalctl -u proxmenux-monitor -n 50</code>."
},
"next": {
"heading": "Por dónde seguir",
"postInstall": "<postlink>Script de post-instalación</postlink> — ajustes y hardening para un host Proxmox recién hecho.",
"introduction": "<introlink>Introducción</introlink> — el tour completo de funciones.",
"postInstall": "<postlink>Script de postinstalación</postlink>: ajustes y refuerzo de seguridad para un host Proxmox recién instalado.",
"introduction": "<introlink>Introducción</introlink>: repaso completo de las funciones.",
"monitor": "<monitorlink>ProxMenux Monitor</monitorlink> — panel web para el host (instalado automáticamente junto al menú)."
},
"requirements": {
"heading": "Requisitos y buenas prácticas",
"reqTitle": "Requisitos",
"reqBody": "Proxmox VE <strong>8.x o posterior</strong>. PVE 7 y anteriores no están soportados. Acceso a internet desde el host (el instalador descarga scripts, dependencias y la AppImage de ProxMenux Monitor). Ejecuta como <strong>root</strong> en el host Proxmox.",
"reqBody": "Proxmox VE <strong>8.x o posterior</strong>. PVE 7 y versiones anteriores no son compatibles. El host necesita acceso a internet para descargar scripts, dependencias y la AppImage de ProxMenux Monitor. Ejecuta el instalador como <strong>root</strong> en el host Proxmox.",
"inspectTitle": "Revisa siempre los scripts que ejecutas desde internet",
"inspectReview": "<sourcelink>Revisa la fuente del instalador</sourcelink> antes de ejecutarlo.",
"inspectCoc": "Todos los enlaces ejecutables siguen el <coclink>código de conducta de ProxMenux</coclink>."
+31 -31
View File
@@ -9,7 +9,7 @@
},
"header": {
"title": "Introducción",
"description": "ProxMenux es una herramienta de código abierto basada en menús para Proxmox VE. Dos piezas comparten el mismo proyecto: una CLI/TUI que envuelve los flujos más comunes del host, VMs, contenedores, almacenamiento, red y seguridad; y un panel web autoalojado con monitor de salud proactivo, notificaciones, un gancho de reescritura con IA y una API REST.",
"description": "ProxMenux es una herramienta de código abierto para Proxmox VE que se maneja mediante menús. El proyecto reúne dos componentes: una CLI/TUI para las tareas habituales del host, las VM, los contenedores, el almacenamiento, la red y la seguridad; y un panel web autoalojado con supervisión proactiva, notificaciones, reformulación opcional mediante IA y una API REST.",
"section": "Introducción"
},
"hero": {
@@ -18,7 +18,7 @@
},
"twoProducts": {
"heading": "Dos productos, un solo proyecto",
"intro": "ProxMenux se distribuye como dos piezas independientes que comparten el mismo árbol de código. El instalador despliega ambas — conviven en el host y no dependen entre sí:",
"intro": "ProxMenux tiene dos componentes en el mismo árbol de código fuente. El instalador despliega ambos en el host: Scripts ofrece la interfaz de terminal y Monitor el panel web:",
"scripts": {
"title": "ProxMenux Scripts",
"body": "La CLI/TUI original que se lanza con <code>menu</code>. Nueve áreas funcionales que cubren optimizaciones post-instalación, creación de VMs y LXC, passthrough de GPU y Coral TPU, discos, almacenamiento, red, seguridad, utilidades, además de una referencia curada de comandos. Funciona en cualquier terminal — local, SSH o web."
@@ -58,7 +58,7 @@
"href": "/docs/create-vm"
},
{
"title": "Disk Manager",
"title": "Administrador de discos",
"description": "Importar discos físicos a VMs y LXC, formatear y borrar, tests SMART, importación de imágenes qcow2 / vmdk / vdi — todo desde un menú.",
"icon": "HardDrive",
"href": "/docs/disk-manager"
@@ -71,13 +71,13 @@
},
{
"title": "Red",
"description": "Diagnósticos de solo lectura, flujos de análisis-y-sugerencia y reparaciones guiadas de /etc/network/interfaces. Copias de seguridad obligatorias antes de cualquier cambio.",
"description": "Diagnósticos de solo lectura, flujos de análisis-y-sugerencia y reparaciones guiadas de /etc/network/interfaces. Backups obligatorios antes de cualquier cambio.",
"icon": "Network",
"href": "/docs/network"
},
{
"title": "Seguridad",
"description": "Fail2Ban (prevención de intrusiones para SSH y las interfaces web) y Lynis (auditoría de hardening) — instalación y gestión con valores por defecto sensatos.",
"description": "Fail2Ban para prevenir intrusiones por SSH y las interfaces web, y Lynis para auditar el refuerzo de la seguridad: instalación y gestión con valores predeterminados adecuados.",
"icon": "Shield",
"href": "/docs/security"
},
@@ -89,7 +89,7 @@
},
{
"title": "Referencia de comandos",
"description": "Catálogo curado de comandos de Linux y Proxmox organizados por tema — sistema, VM/CT (qm, pct), almacenamiento, red, ZFS, passthrough de GPU, backup, herramientas CLI del día a día.",
"description": "Selección de comandos de Linux y Proxmox organizada por temas: sistema, VM/CT con qm y pct, almacenamiento, red, ZFS, acceso directo a GPU, backups y herramientas CLI de uso diario.",
"icon": "BookOpen",
"href": "/docs/help-info"
}
@@ -113,7 +113,7 @@
},
{
"title": "Asistente de IA",
"description": "Reescritura opcional de notificaciones en lenguaje natural. Seis proveedores: OpenAI, Anthropic Claude, Google Gemini, Groq, OpenRouter, Ollama local. Doce idiomas.",
"description": "Reescritura opcional de notificaciones en lenguaje natural. Seis proveedores: OpenAI, Anthropic Claude, Google Gemini, Groq, OpenRouter, Ollama local. Trece idiomas en el selector de idioma de la IA.",
"icon": "Sparkles",
"href": "/docs/monitor/ai-assistant"
},
@@ -138,32 +138,32 @@
]
},
"installPaths": {
"heading": "Rutas de instalación",
"intro": "El instalador despliega Scripts y Monitor en un solo paso. Scripts tiene dos variantes — con traducción o ligera — y el Monitor se instala como AppImage independiente que se activa después desde el menú:",
"headerPath": "Ruta de instalación",
"heading": "Opciones de instalación",
"intro": "Los dos instaladores despliegan Scripts y Monitor. Scripts utiliza catálogos JSON pregenerados en ocho idiomas, sin traducción en línea. Puedes elegir el canal estable o beta; Monitor se distribuye como AppImage y se ejecuta desde su entorno extraído:",
"headerPath": "Install path",
"headerBundles": "Qué incluye",
"headerWhen": "Cuándo elegirla",
"headerWhen": "Cuándo elegirlo",
"rows": [
{
"pathRich": "<strong>Scripts: con traducción</strong>",
"bundles": "CLI/TUI + entorno virtual de Python + googletrans (inglés, español, francés, alemán, italiano, portugués)",
"when": "Menús multi-idioma, usuarios no anglófonos"
"pathRich": "<strong>Scripts: estable</strong>",
"bundles": "CLI/TUI con traducciones JSON pregeneradas en ocho idiomas, sin entorno virtual ni servicio de traducción en línea.",
"when": "Uso habitual con el canal de versiones estables."
},
{
"pathRich": "<strong>Scripts: normal (ligera)</strong>",
"bundles": "CLI/TUI solo en inglés, huella menor, sin entorno virtual de Python",
"when": "La mayoría de usuarios — la documentación de Proxmox está en inglés de todos modos"
"pathRich": "<strong>Scripts: beta</strong>",
"bundles": "La misma interfaz multilingüe, instalada desde la rama develop para probar los próximos cambios.",
"when": "Pruebas anticipadas de nuevas funciones, con mayor riesgo de errores."
},
{
"pathRich": "<strong>Monitor</strong>",
"bundles": "AppImage autocontenido en el puerto TCP 8008. Instalación independiente — se puede activar desde el menú de Scripts o ejecutar el AppImage directamente.",
"when": "Cuando un panel web del host resulta útil — móvil, tablet, pestaña del navegador"
"bundles": "AppImage autónoma con panel web en el puerto TCP 8008. El instalador extrae su entorno de ejecución y gestiona el servicio; Monitor se controla desde Ajustes.",
"when": "Cuando te resulte útil consultar el host desde un panel web: móvil, tableta o navegador."
}
],
"outro": "Los comandos de instalación detallados y los requisitos están en la <link>página de instalación</link>."
"outro": "Los comandos y requisitos detallados están en la <link>página de instalación</link>."
},
"warnSource": {
"title": "Revisa siempre los scripts que ejecutas desde internet",
"title": "Revisa siempre los scripts de Internet antes de ejecutarlos",
"body": "ProxMenux es de código abierto y cada script se puede revisar en GitHub. Antes de ejecutar el comando de instalación, mira el código fuente. Haz lo mismo con cualquier otra herramienta de automatización.",
"sourceLabel": "Ver el código fuente de ProxMenux",
"cocLabel": "Código de conducta"
@@ -172,34 +172,34 @@
"heading": "Por dónde seguir",
"items": [
{
"lead": "<strong>¿Nuevo en ProxMenux?</strong> ",
"lead": "<strong>¿Es tu primera vez con ProxMenux?</strong> ",
"linkHref": "/docs/installation",
"linkLabel": "Instálalo con un solo comando",
"linkLabel": "Instálalo con un comando",
"tailRich": " y ejecuta <code>menu</code>."
},
{
"lead": "<strong>¿Acabas de instalar Proxmox?</strong> Empieza por el ",
"linkHref": "/docs/post-install",
"linkLabel": "script Post-Install",
"linkLabel": "script de postinstalación",
"tail": "."
},
{
"lead": "<strong>¿Quieres un panel web?</strong> ",
"linkHref": "/docs/monitor",
"linkLabel": "ProxMenux Monitor",
"tail": " cubre lo que muestra, cómo está construido y cómo asegurarlo."
"tail": " tiene una documentación que explica qué muestra, cómo está construido y cómo protegerlo."
},
{
"lead": "<strong>¿Buscas un comando concreto?</strong> ",
"lead": "<strong>¿Buscas un comando concreto?</strong> La ",
"linkHref": "/docs/help-info",
"linkLabel": "Referencia de comandos",
"tail": " es un catálogo curado organizado por tema, con botones de copia."
"linkLabel": "referencia de comandos",
"tail": " reúne una selección organizada por temas, con botones para copiar."
},
{
"lead": "<strong>¿Quieres guías más largas paso a paso?</strong> La ",
"lead": "<strong>¿Quieres guías más detalladas?</strong> La ",
"linkHref": "/guides",
"linkLabel": "sección de Guías",
"tail": " cubre Coral TPU, passthrough de NVIDIA, Kodi en LXC y más."
"linkLabel": "sección de guías",
"tail": " trata Coral TPU, acceso directo a NVIDIA, Kodi en LXC y mucho más."
}
]
}
@@ -257,7 +257,7 @@
"<strong>Hecho.</strong> El 2FA está ahora activo. La próxima vez que te logues, el panel pide primero la contraseña; una vez aceptada pide el código actual de 6 dígitos."
],
"setupStep4Sub": [
"<em>Camino fácil:</em> en la app, pulsa <em>Añadir cuenta</em> → <em>Escanear código QR</em>, apunta la cámara al QR en la pantalla. La app nombra la entrada automáticamente (algo como <code>ProxMenux Monitor (tu-usuario)</code>) y empieza a mostrar un código de 6 dígitos que se refresca cada 30 segundos.",
"<em>Camino fácil:</em> en la app, pulsa <em>Añadir cuenta</em> → <em>Escanear código QR</em>, apunta la cámara al QR en la pantalla. La app nombra la entrada automáticamente (algo como <code>ProxMenux Monitor (your-username)</code>) y empieza a mostrar un código de 6 dígitos que se refresca cada 30 segundos.",
"<em>Plan B manual</em> (cuando escanear no es posible — p. ej. configurando en el mismo móvil con el que abriste el panel): pulsa <em>Añadir cuenta</em> → <em>Introducir clave de setup</em>. Escribe cualquier nombre (p. ej. <em>Proxmox Monitor</em>), pega la cadena Base32 del diálogo, deja <em>Tipo</em> como <em>Basado en tiempo</em>, guarda."
],
"testTitle": "Prueba antes de hacer logout",
@@ -319,7 +319,7 @@
"heading": "Secure Gateway (Tailscale)",
"intro": "Los reverse proxies son la respuesta clásica a \"llegar al panel desde fuera\" pero requieren un dominio público, certificado y un puerto abierto en el borde. <strong>Secure Gateway</strong> es la alternativa cero-puertos que viene dentro del propio Monitor — una app desplegable preconstruida que levanta un LXC Alpine ejecutando <a>Tailscale</a> como subnet router. Una vez unido a tu tailnet, cada dispositivo en él puede llegar al Monitor en la propia IP LAN del host — desde un portátil de vacaciones, un móvil con 5G u otro nodo — sin exponer TCP 8008 a internet.",
"calloutTitle": "Por qué esto es cómodo",
"calloutBody": "La URL se mantiene igual que en la LAN — <code>http://&lt;ip-lan-proxmox&gt;:8008</code> funciona donde Tailscale funcione. Sin certificados, sin DNS, sin port forwarding. El propio Monitor ve la petición viniendo de una IP de tailnet (típicamente <code>100.x.y.z</code>), así que el log de auth y el hook de Fail2Ban siguen funcionando como en la LAN.",
"calloutBody": "La URL se mantiene igual que en la LAN — <code>http://&lt;proxmox-lan-ip&gt;:8008</code> funciona donde Tailscale funcione. Sin certificados, sin DNS, sin port forwarding. El propio Monitor ve la petición viniendo de una IP de tailnet (típicamente <code>100.x.y.z</code>), así que el log de auth y el hook de Fail2Ban siguen funcionando como en la LAN.",
"deployBody": "El flujo de despliegue es una sola pantalla — elige el storage LXC del host, pega un auth-key de Tailscale (generado en <a>login.tailscale.com/admin/settings/keys</a>), elige qué subnets anunciar, pulsa Deploy. El LXC tarda ~30 segundos en arrancar y se registra en el tailnet automáticamente.",
"outro": "El despliegue paso a paso, la configuración de subnet-routes, las ACLs de Tailscale y el modo Exit Node se documentan por separado en <link>Dashboard → Security → Secure Gateway</link> — ahí vive el wizard de despliegue en la UI del panel. Esta página solo cubre el patrón de acceso."
},
@@ -55,7 +55,7 @@
"heading": "Convenciones",
"items": [
"Todas las peticiones y respuestas son JSON salvo que se indique explícitamente (la descarga de logs es texto plano, <code>/api/prometheus</code> es text/plain en formato OpenMetrics, el log de tareas es texto plano).",
"Los endpoints que modifican estado con éxito devuelven <code>'{'\"success\": true, ...'}'</code>. Las respuestas de error usan un estado HTTP no-2xx con <code>'{'\"success\": false, \"error\": \"'<'motivo'>'\"'}'</code>.",
"Los endpoints que modifican estado con éxito devuelven <code>'{'\"success\": true, ...'}'</code>. Las respuestas de error usan un estado HTTP no-2xx con <code>'{'\"success\": false, \"error\": \"'<'reason'>'\"'}'</code>.",
"Los endpoints de listado aceptan <code>limit</code>, <code>offset</code>, <code>since</code> opcionales y filtros específicos por categoría vía query string.",
"Los campos de tiempo se devuelven como segundos epoch Unix o ISO-8601 con zona horaria explícita, nunca como cadenas de locale."
]
@@ -174,7 +174,7 @@
"syncVsAsyncBody": "Las acciones a nivel de sistema (power del host, PVE update, self-update de ProxMenux) pueden tardar minutos — corren en su propia unit systemd transitoria y exponen un endpoint <code>.../status</code> más un <code>DELETE</code> para cancelar. Las acciones VM / LXC (start, stop, shutdown, reboot, backup) son rápidas y usan el estilo fire-and-return que la UI del Monitor ya expone: el POST devuelve el resultado directo. Ambos estilos comparten el mismo modelo de autenticación (JWT o token de API de larga duración).",
"curlTitle": "Ejemplo con curl",
"curlBody": "Disparar una actualización de PVE y hacer polling hasta que termine — exactamente la misma secuencia que ejecutaría una automatización de Home Assistant o un playbook de Ansible:",
"curlCode": "TOKEN=<tu token full_admin>\n\ncurl -sSf -X POST \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://<host>:8008/api/system/pve-update/run\n\nwhile true; do\n state=$(curl -sSf -H \"Authorization: Bearer $TOKEN\" \\\n https://<host>:8008/api/system/pve-update/status | jq -r .state)\n [ \"$state\" != \"running\" ] && break\n sleep 30\ndone\necho \"estado final: $state\"",
"curlCode": "TOKEN=<your full_admin token>\n\ncurl -sSf -X POST \\\n -H \"Authorization: Bearer $TOKEN\" \\\n https://<host>:8008/api/system/pve-update/run\n\nwhile true; do\n state=$(curl -sSf -H \"Authorization: Bearer $TOKEN\" \\\n https://<host>:8008/api/system/pve-update/status | jq -r .state)\n [ \"$state\" != \"running\" ] && break\n sleep 30\ndone\necho \"final state: $state\"",
"haTitle": "Snippet de integración con Home Assistant",
"haBody": "Un sensor <code>rest</code> hace polling del estado y un <code>rest_command</code> dispara la actualización. Conecta ambos a un botón del dashboard y a las automatizaciones que quieras:",
"haCode": "# configuration.yaml\nsensor:\n - platform: rest\n resource: https://pve.local:8008/api/system/pve-update/status\n name: pve_update_state\n value_template: \"{{ value_json.state }}\"\n scan_interval: 60\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\nrest_command:\n pve_update:\n url: https://pve.local:8008/api/system/pve-update/run\n method: POST\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\n # Encender VM 100 (funciona igual para LXC — mismo endpoint)\n vm_100_start:\n url: https://pve.local:8008/api/vms/100/control\n method: POST\n content_type: 'application/json'\n payload: '{\"action\": \"start\"}'\n headers:\n Authorization: \"Bearer !secret proxmenux_token\"\n\n # Backup de la VM 100 al storage 'pbs-main'\n vm_100_backup:\n url: https://pve.local:8008/api/vms/100/backup\n method: POST\n content_type: 'application/json'\n payload: '{\"storage\": \"pbs-main\", \"mode\": \"snapshot\", \"compress\": \"zstd\"}'\n headers:\n Authorization: \"Bearer !secret proxmenux_token\""
@@ -101,7 +101,7 @@
],
"sourcesHeading": "Fuentes para la versión disponible",
"sources": [
"<strong>Repositorio de GitHub</strong>: último lanzamiento o etiqueta de un repositorio público <code>propietario/nombre</code>.",
"<strong>Repositorio de GitHub</strong>: último lanzamiento o etiqueta de un repositorio público <code>owner/name</code>.",
"<strong>HTTP JSON</strong>: un punto final público y una ruta como <code>data.version</code> o <code>releases[0].tag_name</code>.",
"<strong>Docker Hub</strong>: etiquetas versionadas filtradas con una expresión regular. La vista previa muestra etiquetas reales coincidentes antes de guardar.",
"Las etiquetas móviles como <code>latest</code>, <code>stable</code> o <code>lts</code> no contienen una versión. Esas imágenes se siguen por digest desde las actualizaciones de imágenes Docker."
@@ -110,8 +110,8 @@
"No incluyas <code>pct exec</code>; ProxMenux ya entra en el contenedor y ejecuta el comando como root."
],
"exampleLead": "Ejemplo de procedimiento completo dentro del contenedor:",
"example": "cd /opt/mi-app && ./update.sh",
"callout": "Un comando de versión como <code>miapp --version</code> solo lee una versión; no instala nada. Los comandos se ejecutan con privilegios administrativos y deben revisarse con el mismo cuidado que un comando de shell como root."
"example": "cd /opt/my-app && ./update.sh",
"callout": "Un comando de versión como <code>myapp --version</code> solo lee una versión; no instala nada. Los comandos se ejecutan con privilegios administrativos y deben revisarse con el mismo cuidado que un comando de shell como root."
},
"bulk": {
"heading": "Actualización en bloque",
@@ -142,7 +142,7 @@
"La espera tras una versión solo se aplica a las apps seleccionadas con seguimiento. Las apps sin seguimiento ejecutan su actualizador cuando vence la programación.",
"El estado de la última ejecución diferencia entre éxito, finalización parcial, error, retención de seguridad y ausencia de elementos pendientes. Después de la primera ejecución programada, <strong>Actualizaciones → Actualizaciones programadas → Ver log</strong> abre la salida completa capturada del actualizador y de los scripts secundarios que haya ejecutado.",
"Después de cada ejecución, ProxMenux comprueba el marcador estándar de Debian que indica si es necesario reiniciar. Cuando hace falta, la pestaña Actualizaciones y la notificación de finalización lo indican; el aviso se elimina cuando ese LXC se inicia o reinicia.",
"En el host Proxmox, los logs de las ejecuciones programadas se guardan en <code>/usr/local/share/proxmenux/logs/lxc-updates/</code> con el nombre <code>&lt;VMID&gt;-scheduled-&lt;id-de-ejecución&gt;.log</code>. Se conservan los diez últimos logs de cada LXC y los archivos más antiguos se eliminan automáticamente.",
"En el host Proxmox, los logs de las ejecuciones programadas se guardan en <code>/usr/local/share/proxmenux/logs/lxc-updates/</code> con el nombre <code>&lt;VMID&gt;-scheduled-&lt;run-id&gt;.log</code>. Se conservan los diez últimos logs de cada LXC y los archivos más antiguos se eliminan automáticamente.",
"Este historial corresponde a las actualizaciones programadas. Una actualización manual muestra su salida en tiempo real en la ventana de ejecución del Monitor y no crea un log de ejecución programada en ese directorio.",
"Las programaciones externas detectadas de Proxmox VE Helper-Scripts se muestran aparte para hacer visible cualquier automatización coincidente."
],
@@ -186,7 +186,7 @@
},
{
"problem": "Una actualización programada indica que es necesario reiniciar",
"resolution": "Abre <strong>Ver log</strong> para revisar la ejecución completada y reinicia ese LXC. ProxMenux elimina el aviso mediante el evento de ciclo de vida existente cuando el contenedor vuelve a arrancar."
"resolution": "Abre Ver registro para revisar la ejecución completada y después reinicia ese LXC. ProxMenux borra el aviso cuando el evento de ciclo de vida detecta el nuevo arranque."
}
]
},
@@ -37,7 +37,7 @@
"headingHref": "https://gethomepage.dev",
"intro": "Homepage es un panel de aplicaciones totalmente estático y personalizable. ProxMenux Monitor se enchufa vía el widget <code>customapi</code> integrado — pega una entrada de servicio en <code>services.yaml</code>, reinicia Homepage y la tarjeta aparece con números en vivo.",
"iconCalloutTitle": "El logo oficial de ProxMenux está en dashboardicons.com",
"iconCalloutBody": "Las guías de abajo usan <code>icon: proxmenux.png</code>. Homepage resuelve automáticamente los nombres de archivo simples contra <a1>dashboardicons.com</a1> — una librería de iconos curada para paneles autoalojados. La entrada de ProxMenux vive en <a2>dashboardicons.com/icons/external/proxmenux</a2> y Homepage la descarga en el primer render. La misma búsqueda funciona para miles de otras herramientas (Telegram, Discord, Grafana, Tailscale, etc.) — basta con escribir <code>icon: &lt;nombre&gt;.png</code> en cualquier entrada de servicio.",
"iconCalloutBody": "Las guías de abajo usan <code>icon: proxmenux.png</code>. Homepage resuelve automáticamente los nombres de archivo simples contra <a1>dashboardicons.com</a1> — una librería de iconos curada para paneles autoalojados. La entrada de ProxMenux vive en <a2>dashboardicons.com/icons/external/proxmenux</a2> y Homepage la descarga en el primer render. La misma búsqueda funciona para miles de otras herramientas (Telegram, Discord, Grafana, Tailscale, etc.) — basta con escribir <code>icon: &lt;name&gt;.png</code> en cualquier entrada de servicio.",
"imageAlt": "Panel Homepage mostrando tres tarjetas de ProxMenux Monitor (EDGE, VOID, DREAM) con uptime, CPU, RAM y temperatura para cada host Proxmox",
"imageCaption": "Tres instancias de ProxMenux Monitor renderizadas como tarjetas Homepage — uptime, CPU, RAM y temperatura de CPU leídas en vivo desde <code>/api/system</code> en cada host cada 10 s.",
"basicTitle": "Widget básico — sin autenticación",
@@ -94,7 +94,7 @@
"twoColTipBody": "Reemplaza cualquier par de tarjetas (p. ej. <em>Sistema</em> + <em>VMs</em>, o <em>Almacenamiento</em> + <em>Red</em>) con un único <code>horizontal-stack</code> envolviendo ambas, para que siempre se rendericen lado a lado independientemente del ancho de pantalla:",
"twoColTipOutro": "En móvil la fila se mantiene comprimida; el auto layout de HA (sin horizontal-stack) refluye mejor a anchos estrechos.",
"step6Title": "6 · Automatizaciones",
"step6Body": "Tres automatizaciones que cubren los escenarios reactivos más comunes — reemplaza <code>notify.mobile_app_&lt;tu_movil&gt;</code> por el servicio notify que uses:",
"step6Body": "Tres automatizaciones que cubren los escenarios reactivos más comunes — reemplaza <code>notify.mobile_app_&lt;your_phone&gt;</code> por el servicio notify que uses:",
"logoTitle": "Sobre el logo de ProxMenux",
"logoBody": "La tarjeta picture-entity en la parte superior del YAML Lovelace descarga el logo oficial de ProxMenux desde <a1>dashboardicons.com</a1> — una librería de iconos gratuita curada para paneles autoalojados. La entrada de ProxMenux vive en <a2>dashboardicons.com/icons/external/proxmenux</a2>. Home Assistant descarga el SVG sobre HTTPS en el primer render y lo cachea.",
"logoBrokenTitle": "Si la tarjeta del logo muestra una imagen rota",
@@ -120,7 +120,7 @@
"tokenTipTitle": "Token vía archivo o env, no inline",
"tokenTipBody": "Para despliegues en producción evita poner el token inline. Prometheus soporta <code>credentials_file: /etc/prometheus/secrets/proxmenux.token</code> como alternativa — guarda el token en un archivo 0600 y deja que Prometheus lo lea.",
"step2Title": "2 · Verifica el scrape con un par de queries",
"step2Body": "Antes de configurar Grafana, confirma que Prometheus realmente tiene los datos. Abre la propia UI de Prometheus en <code>http://&lt;host-prometheus&gt;:9090</code>, pulsa <em>Query</em> y ejecuta cualquiera de estas — deberías obtener números en vivo de tu host Proxmox:",
"step2Body": "Antes de configurar Grafana, confirma que Prometheus realmente tiene los datos. Abre la propia UI de Prometheus en <code>http://&lt;prometheus-host&gt;:9090</code>, pulsa <em>Query</em> y ejecuta cualquiera de estas — deberías obtener números en vivo de tu host Proxmox:",
"headerQuery": "Query",
"headerConfirms": "Qué confirma",
"verifyRows": [
@@ -44,7 +44,7 @@
"Arranca el hilo de fondo de despacho. El hilo hace polling de la cola de eventos y camina cada evento por la pipeline diagramada arriba."
],
"activeAlt": "Tarjeta de notificaciones activada con pestañas de canales, nombre visible y opciones avanzadas de IA",
"activeCaption": "Estado activo: pestañas Telegram, Gotify, Discord, Email, Pushover y Apprise, nombre visible, categorías por canal y opciones avanzadas de IA."
"activeCaption": "Estado activo: pestañas de canales en la parte superior (Telegram / Gotify / Discord / correo electrónico / Pushover / Apprise), campo Nombre para mostrar, lista de categorías de cada canal y sección desplegable <em>Avanzado: mejora con IA</em>."
},
"sources": {
"heading": "Fuentes de eventos",
@@ -119,7 +119,7 @@
"groupItems": [
"Añade el bot al grupo como miembro (y hazlo admin si el grupo lo requiere para publicar).",
"Envía cualquier mensaje en el grupo.",
"Abre <code>https://api.telegram.org/bot&lt;TU_TOKEN&gt;/getUpdates</code> en un navegador. Busca <code>chat.id</code> en la respuesta JSON — para grupos es un número negativo, para supergrupos empieza con <code>-100</code>.",
"Abre <code>https://api.telegram.org/bot&lt;YOUR_TOKEN&gt;/getUpdates</code> en un navegador. Busca <code>chat.id</code> en la respuesta JSON — para grupos es un número negativo, para supergrupos empieza con <code>-100</code>.",
"Para supergrupos con <em>Topics</em> activado, anota también el <code>message_thread_id</code> del tema al que quieres apuntar — eso va en el campo opcional <em>Topic ID</em>."
],
"groupAlt": "Formulario de canal Telegram con Bot Token (enmascarado), Chat ID negativo prefijado con -100 indicando un supergrupo, y Topic ID 3 configurado para entregar a un tema específico",
@@ -203,7 +203,7 @@
"stepsTitle": "Pasos",
"steps": [
"Elige el servicio destino en la <a>wiki de Apprise</a> y copia la plantilla de URL para él. Cada página de servicio muestra el esquema exacto a usar (<code>ntfy://</code>, <code>matrix://</code>, <code>pover://</code>, <code>slack://</code>…) más cualquier token, canal u hostname requerido.",
"Rellena los placeholders con tus propias credenciales. Por ejemplo, un topic de ntfy.sh tiene aspecto de <code>ntfy://ntfy.sh/mi-topic</code>; una URL de Pushover tiene aspecto de <code>pover://user@token</code>; una URL de Matrix tiene aspecto de <code>matrix://user:pass@host:port/#room</code>.",
"Sustituye los marcadores por tus credenciales. Ejemplos: ntfy.sh <code>ntfy://ntfy.sh/my-topic</code>; Pushover <code>pover://user@token</code>; Matrix <code>matrix://user:pass@host:port/#room</code>.",
"Pega la URL final en el campo <em>Apprise URL</em> en la pestaña Apprise del panel Notifications y guarda.",
"Pulsa <em>Send Test</em> para verificar que la URL es alcanzable y las credenciales se aceptan."
],
@@ -295,7 +295,7 @@
"rows": [
{
"stage": "1. Deduplicación por huella",
"what": "Cada evento genera una huella (<code>event_type + campos clave de data</code>). Las huellas idénticas dentro de una ventana corta se consideran duplicados del primero.",
"what": "Cada evento genera una huella (<code>event_type + key fields from data</code>). Las huellas idénticas dentro de una ventana corta se consideran duplicados del primero.",
"tunable": "No — lógica interna del dispatcher."
},
{
@@ -339,7 +339,7 @@
"<strong>Llamadores remotos.</strong> Cinco capas se apilan encima del rate-limiting: un shared secret en la cabecera <code>X-Webhook-Secret</code>, un timestamp de frescura en <code>X-ProxMenux-Timestamp</code> (rechazado si se desvía más allá de la ventana configurada), una búsqueda de caché de replay y una allowlist de IP opcional. El shared secret vive en la tabla de ajustes SQLite del Monitor — no en <code>/etc/pve/priv/notifications.cfg</code> — y se genera en el primer setup. Este camino existe para integraciones personalizadas que hacen POST desde fuera del host; el destino configurado por PVE nunca lo ejercita."
],
"practiceTitle": "En la práctica",
"practiceBody": "El setup de PVE escribe el destino como <code>http://127.0.0.1:8008</code>, así que las notificaciones emitidas por PVE siempre pasan por el camino loopback con seguridad solo rate-limit. El camino de llamador remoto con shared secret es opt-in para integraciones personalizadas — apunta un servicio externo a <code>https://&lt;host-monitor&gt;:&lt;port&gt;/api/notifications/webhook</code> y suministra la cabecera <code>X-Webhook-Secret</code> para usarlo.",
"practiceBody": "El setup de PVE escribe el destino como <code>http://127.0.0.1:8008</code>, así que las notificaciones emitidas por PVE siempre pasan por el camino loopback con seguridad solo rate-limit. El camino de llamador remoto con shared secret es opt-in para integraciones personalizadas — apunta un servicio externo a <code>https://&lt;monitor-host&gt;:&lt;port&gt;/api/notifications/webhook</code> y suministra la cabecera <code>X-Webhook-Secret</code> para usarlo.",
"actionsIntro": "El Monitor gestiona este destino a través de tres acciones en la pestaña Settings:",
"actionsItems": [
"<strong>Setup</strong> — corre automáticamente cuando activas Notifications. Crea la entrada en <code>/etc/pve/notifications.cfg</code>. El archivo solo se escribe cuando su contenido tiene que cambiar, y se guarda un backup del anterior en <code>/usr/local/share/proxmenux/backups/pve-notifications/</code> (los tres más recientes). No se escribe nada mientras <code>/etc/pve</code> no está montado: un Monitor que arranca durante un reinicio de <code>pve-cluster</code> registra la entrada cuando vuelve.",
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Backup y reinicio de interfaces | ProxMenux Documentation",
"title": "Backup y reinicio de interfaces | Documentación de ProxMenux",
"description": "Snapshot manual, navegación y restauración de backups de /etc/network/interfaces almacenados en /var/backups/proxmenux/. Incluye un reinicio del servicio de red con confirmación y una vista rápida de la configuración en vivo.",
"ogTitle": "Backup y reinicio de interfaces | ProxMenux Documentation",
"ogTitle": "Backup y reinicio de interfaces | Documentación de ProxMenux",
"ogDescription": "Snapshot y restauración de la configuración de red de Proxmox; reinicia el servicio de red con confirmación."
},
"header": {
@@ -27,7 +27,7 @@
"heading": "Crear backup de red",
"body": "Copia el <code>/etc/network/interfaces</code> actual al directorio de backups con un timestamp nuevo. Ya está — sin análisis, sin prompts, solo un snapshot.",
"whenTitle": "Cuándo hacer un backup manual",
"whenBody": "Antes de editar <code>/etc/network/interfaces</code> a mano, antes de instalar un paquete que pueda tocar la stack de red (p. ej. NetworkManager, Open vSwitch) o antes de cualquier cambio de hardware. Las reparaciones guiadas ya hacen snapshot automáticamente — esta opción es para los momentos <em>manuales</em>."
"whenBody": "Antes de editar <code>/etc/network/interfaces</code> a mano, antes de instalar un paquete que pueda modificar la pila de red (p. ej. NetworkManager, Open vSwitch) o antes de cualquier cambio de hardware. Las reparaciones guiadas ya hacen un backup automáticamente; esta opción es para las operaciones <em>manuales</em>."
},
"restore": {
"heading": "Restaurar backup de red",
@@ -96,7 +96,7 @@
"tail": " — la razón más habitual por la que un backup acaba aquí."
},
{
"label": "Análisis de config y limpieza guiada",
"label": "Análisis de configuración y limpieza guiada",
"href": "/docs/network/config-analysis",
"tailRich": " — también escribe en <code>/var/backups/proxmenux/</code> automáticamente."
},
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Análisis de bridges y reparación guiada | ProxMenux Documentation",
"title": "Análisis de bridges y reparación guiada | Documentación de ProxMenux",
"description": "Detecta bridges vmbrX con puertos físicos ausentes o inválidos (típico tras una re-enumeración PCI), los reporta con comandos de shell propuestos y ofrece una reparación guiada de 5 pasos con backup obligatorio.",
"ogTitle": "Análisis de bridges y reparación guiada | ProxMenux Documentation",
"ogTitle": "Análisis de bridges y reparación guiada | Documentación de ProxMenux",
"ogDescription": "Auditar y reparar los puertos de bridge de Proxmox tras cambios de hardware, con flujo guiado y rollback seguro."
},
"header": {
@@ -35,7 +35,7 @@
"bridgeLabel": "Analizar (solo lectura)",
"bridgeDetail": "ip link show enp3s0\n→ no existe",
"targetLabel": "Informe + sugerencia",
"targetDetail": "❌ enp3s0: NOT FOUND\nReemplazar por: eno1\n(aún sin cambios)"
"targetDetail": "❌ enp3s0: NO ENCONTRADO\nReemplazar por: eno1\n(aún sin cambios)"
}
},
"diagram2": {
@@ -50,7 +50,7 @@
},
"step1": {
"heading": "Paso 1: análisis (solo lectura)",
"intro": "Seleccionar <strong>Analizar configuración de bridges</strong> aborta inmediatamente si el host no usa la stack clásica de Debian/Proxmox. Si no, recorre cada bridge y reporta:",
"intro": "Al seleccionar <strong>Analizar configuración de bridges</strong>, la herramienta se detiene inmediatamente si el host no usa la pila clásica de Debian/Proxmox. En caso contrario, recorre todos los bridges e informa de:",
"items": [
"Nombre del bridge, estado actual (UP / DOWN), IP asignada.",
"Cada puerto declarado y si existe actualmente (<code>ip link show &lt;port&gt;</code>).",
@@ -76,7 +76,7 @@
},
{
"title": "3. Previsualizar los cambios propuestos",
"body": "Lista exactamente qué bridges se van a tocar y qué sustituciones de puerto se van a hacer. Si el análisis decide que en realidad no hay que arreglar nada (race condition: el puerto volvió), el flujo sale limpio con <em>\"No changes needed.\"</em>",
"body": "Lista exactamente qué bridges se modificarán y qué sustituciones de puertos se harán. Si el análisis determina que no hay nada que reparar porque el puerto ha reaparecido entre las comprobaciones, el proceso termina con <em>«No se necesitan cambios»</em>.",
"tone": "blue"
},
{
@@ -90,7 +90,7 @@
"tone": "emerald"
}
],
"restartTitle": "Reiniciar networking ≠ un undo gratis",
"restartTitle": "Reiniciar la red ≠ deshacer los cambios sin riesgo",
"restartBody": "La reparación se escribe en disco independientemente de si reinicias el servicio. <code>systemctl restart networking</code> aplica el cambio <em>ahora</em>, lo que puede cortar tu sesión SSH si el nuevo puerto es incorrecto. Si rechazas el reinicio, el cambio sigue surtiendo efecto en el siguiente reinicio — confirma antes la nueva config o haz rollback con el comando impreso."
},
"edits": {
@@ -99,8 +99,8 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
"unsupportedTitle": "El análisis aborta con \"Unsupported Network Stack\"",
"unsupportedBody": "El host usa netplan, systemd-networkd o NetworkManager. La herramienta solo soporta <code>/etc/network/interfaces</code>. Cambia el host a la stack clásica primero, o edita la configuración con las herramientas nativas del gestor (p. ej. <code>netplan apply</code>).",
"unsupportedTitle": "El análisis se detiene con «Unsupported Network Stack»",
"unsupportedBody": "El host usa netplan, systemd-networkd o NetworkManager. La herramienta solo admite <code>/etc/network/interfaces</code>. Cambia primero el host a la pila clásica o edita la configuración con las herramientas nativas del gestor (p. ej. <code>netplan apply</code>).",
"noSuggestTitle": "No se imprime sugerencia para un puerto inválido",
"noSuggestBody": "El host no tiene ninguna interfaz física libre (todas están ya en otro bridge o no existen). El análisis cae a sugerir <code>bridge-ports none</code> para que el bridge al menos pueda levantar sin puerto. Añade una NIC o migra puertos entre bridges manualmente antes de volver a ejecutar.",
"stillDownTitle": "La reparación termina pero el bridge sigue DOWN",
@@ -118,7 +118,7 @@
"tail": " — fija los nombres a direcciones MAC para que esto deje de pasar."
},
{
"label": "Análisis de config y limpieza guiada",
"label": "Análisis de configuración y limpieza guiada",
"href": "/docs/network/config-analysis",
"tailRich": " — para bloques <code>iface</code> huérfanos (la otra mitad del mismo problema)."
},
@@ -1,12 +1,12 @@
{
"meta": {
"title": "Análisis de config y limpieza guiada | ProxMenux Documentation",
"title": "Análisis de configuración y limpieza guiada | Documentación de ProxMenux",
"description": "Detecta bloques iface en /etc/network/interfaces que referencian NICs físicas que ya no están en el host. Los reporta y ofrece una eliminación guiada de 5 pasos con backup obligatorio y previsualización por bloque.",
"ogTitle": "Análisis de config y limpieza guiada | ProxMenux Documentation",
"ogTitle": "Análisis de configuración y limpieza guiada | Documentación de ProxMenux",
"ogDescription": "Encuentra y elimina bloques de interfaz huérfanos dejados por cambios de hardware, con previsualización completa y rollback."
},
"header": {
"title": "Análisis de config y limpieza guiada",
"title": "Análisis de configuración y limpieza guiada",
"description": "Recorre cada bloque iface en /etc/network/interfaces y verifica que la NIC física subyacente sigue existiendo. Reporta los bloques huérfanos dejados por cambios de hardware y ofrece una eliminación guiada con backup, previsualización y confirmación por bloque.",
"section": "Red"
},
@@ -18,7 +18,7 @@
"heading": "En qué se diferencia del análisis de bridges",
"headerAspect": "Aspecto",
"headerBridge": "Análisis de bridges",
"headerConfig": "Análisis de config",
"headerConfig": "Análisis de configuración",
"rows": [
{
"aspect": "Mira",
@@ -45,7 +45,7 @@
},
"step1": {
"heading": "Paso 1: análisis (solo lectura)",
"intro": "Aborta inmediatamente si el host no usa la stack clásica. Si no, lista cada interfaz configurada que no sea loopback y reporta su estado:",
"intro": "Se detiene inmediatamente si el host no usa la pila clásica. En caso contrario, lista todas las interfaces configuradas salvo loopback e indica su estado:",
"virtTitle": "Las interfaces virtuales están protegidas",
"virtBody": "Los bridges (<code>vmbrX</code>) y los bonds (<code>bondX</code>) son construcciones virtuales. Pueden no existir legítimamente en el momento de la inspección (p. ej. un bridge aún sin puertos), por lo que el análisis nunca propone eliminarlos — solo NICs físicas."
},
@@ -60,7 +60,7 @@
},
{
"title": "2. Confirmar la lista a eliminar",
"body": "Lista exactamente qué bloques de interfaz física se van a eliminar. Si, entre el análisis y la limpieza, las NICs han reaparecido (p. ej. has reasentado una tarjeta), el flujo sale con <em>\"No cleanup needed.\"</em>",
"body": "Lista exactamente qué bloques de interfaz física se eliminarán. Si las NIC han reaparecido entre el análisis y la limpieza, por ejemplo al volver a insertar una tarjeta, el proceso termina con <em>«No se necesita limpieza»</em>.",
"tone": "blue"
},
{
@@ -91,7 +91,7 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
"notFoundTitle": "El análisis muestra mi NIC nueva como \"NOT FOUND\"",
"notFoundTitle": "El análisis muestra mi NIC nueva como «NO ENCONTRADO»",
"notFoundBody": "El kernel ve el dispositivo con un nombre distinto al que hay en el fichero. Ejecuta <code>ip link show</code> para obtener el nombre real. Este es exactamente el caso en el que <link>Nombres persistentes de interfaz</link> evitaría el problema de aquí en adelante.",
"tooMuchTitle": "La limpieza eliminó demasiado (un bloque que quería conservar)",
"tooMuchBody": "Restaura desde el backup impreso en el paso 5:",
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Diagnóstico | ProxMenux Documentation",
"description": "Tres comprobaciones de diagnóstico puntuales de solo lectura: Mostrar tabla de rutas, Test de conectividad y Diagnóstico avanzado. Pura inspección — nunca escribe en /etc/network/interfaces y nunca ejecuta un comando modificador (con una excepción explícita y opt-in para purgar NetworkManager cuando se detecta).",
"ogTitle": "Diagnóstico | ProxMenux Documentation",
"title": "Diagnóstico | Documentación de ProxMenux",
"description": "Tres comprobaciones de diagnóstico puntuales de solo lectura: Mostrar tabla de rutas, Test de conectividad y Diagnóstico avanzado. Pura inspección: nunca escribe en /etc/network/interfaces ni ejecuta comandos modificadores, con una excepción explícita que requiere tu aceptación para purgar NetworkManager si se detecta.",
"ogTitle": "Diagnóstico | Documentación de ProxMenux",
"ogDescription": "Diagnóstico de red de solo lectura para el host Proxmox: rutas, alcanzabilidad, estadísticas avanzadas."
},
"header": {
@@ -21,12 +21,12 @@
"connectivity": {
"heading": "Test de conectividad",
"intro": "Envía dos sondas ICMP a tres destinos en secuencia y reporta cada uno. Luego ejecuta un <code>nslookup google.com</code> para verificar la resolución DNS independientemente de ICMP.",
"headerTest": "Test",
"headerTest": "Prueba",
"headerTarget": "Destino",
"headerConfirms": "Qué confirma",
"rows": [
{
"test": "Google DNS",
"test": "DNS de Google",
"target": "8.8.8.8",
"confirms": "Alcanzabilidad externa por IP anycast conocida"
},
@@ -36,7 +36,7 @@
"confirms": "Segunda opinión independiente si Google bloquea ICMP"
},
{
"test": "Gateway",
"test": "Pasarela",
"target": "(ruta por defecto)",
"confirms": "Conectividad L2 / L3 con el router local"
},
@@ -53,7 +53,7 @@
"heading": "Diagnóstico avanzado",
"intro": "Agrega estadísticas de red a nivel global y ejecuta una batería de comprobaciones de problemas comunes. Reporta el número de conexiones activas, puertos en escucha, total de interfaces y señala dos antipatrones explícitamente:",
"items": [
"<strong>NetworkManager corriendo en un host Proxmox.</strong> NetworkManager y el <code>ifupdown</code> de Proxmox entran en conflicto — los dos intentan gestionar interfaces, lo que provoca bridges que flapean o se niegan a levantar. Si se detecta, la herramienta ofrece un prompt interactivo para detenerlo, deshabilitarlo y purgarlo (es el <em>único</em> diagnóstico que puede modificar el sistema, y solo tras consentimiento explícito).",
"<strong>NetworkManager ejecutándose en un host Proxmox.</strong> NetworkManager y el <code>ifupdown</code> de Proxmox entran en conflicto: ambos intentan gestionar las interfaces, lo que provoca bridges con caídas intermitentes o que no se activan. Si se detecta, la herramienta ofrece una confirmación interactiva para detenerlo, deshabilitarlo y purgarlo (es el <em>único</em> diagnóstico que puede modificar el sistema, y solo tras consentimiento explícito).",
"<strong>Direcciones IP duplicadas en distintas interfaces.</strong> Dos interfaces con la misma IPv4 causan conectividad intermitente extremadamente difícil de depurar desde dentro de la VM. Se detecta vía <code>ip -4 addr show | sort | uniq -d</code>."
],
"nmTitle": "El prompt de NetworkManager es la única acción modificadora aquí",
@@ -80,7 +80,7 @@
"tail": " — cuando un vmbrX se queda sin su puerto físico."
},
{
"label": "Análisis de config y limpieza guiada",
"label": "Análisis de configuración y limpieza guiada",
"href": "/docs/network/config-analysis",
"tail": " — cuando una NIC antigua sigue declarada pero ya no está."
},
+8 -8
View File
@@ -1,15 +1,15 @@
{
"meta": {
"title": "Gestión de red en Proxmox — bridges, bonds, diagnóstico, reparación | ProxMenux",
"description": "Diagnóstico de solo lectura, flujos de analizar-y-sugerir y reparaciones guiadas para la stack de red Debian / Proxmox (/etc/network/interfaces). Inspecciona bridges y bonds, ejecuta herramientas de monitorización en vivo, persiste nombres de interfaz, hace backup y reinicia la red de forma segura — con backups obligatorios y previsualizaciones paso a paso.",
"description": "Diagnóstico de solo lectura, análisis con propuestas y reparaciones guiadas para la pila de red Debian / Proxmox (/etc/network/interfaces). Inspecciona bridges y bonds, ejecuta herramientas de monitorización en vivo, fija nombres de interfaz, crea backups y reinicia la red de forma segura, con backups obligatorios y vistas previas paso a paso.",
"ogTitle": "Gestión de red en Proxmox — bridges, bonds, diagnóstico, reparación",
"ogDescription": "Diagnóstico, análisis y reparaciones guiadas para la stack de red de Proxmox con backups obligatorios y previsualizaciones paso a paso.",
"ogDescription": "Diagnóstico, análisis y reparaciones guiadas para la pila de red de Proxmox con backups obligatorios y vistas previas paso a paso.",
"twitterTitle": "Gestión de red en Proxmox | ProxMenux",
"twitterDescription": "Bridges, bonds, diagnóstico y reparaciones guiadas para la stack de red de Proxmox con backups obligatorios."
"twitterDescription": "Bridges, bonds, diagnóstico y reparaciones guiadas para la pila de red de Proxmox con backups obligatorios."
},
"header": {
"title": "Gestión de red",
"description": "Diagnóstico de solo lectura, informes de analizar-y-sugerir y reparaciones guiadas para la stack clásica de red Debian/Proxmox. Cada flujo destructivo hace primero un backup y previsualiza los cambios exactos antes de aplicarlos.",
"description": "Diagnóstico de solo lectura, informes de análisis con propuestas y reparaciones guiadas para la pila de red clásica de Debian/Proxmox. Cada operación destructiva hace primero un backup y muestra los cambios exactos antes de aplicarlos.",
"section": "Red"
},
"intro": {
@@ -52,8 +52,8 @@
]
}
},
"classicTitle": "Solo stack clásica",
"classicBody": "Cada función de análisis y reparación comprueba el gestor de red activo antes de tocar nada. Si el host usa <strong>netplan</strong>, <strong>systemd-networkd</strong> o <strong>NetworkManager</strong>, la herramienta aborta inmediatamente con un mensaje claro — el menú solo soporta la stack clásica de Debian/Proxmox en <code>/etc/network/interfaces</code>. Es intencional: editar un fichero de netplan con reglas escritas para <code>ifupdown</code> corrompería silenciosamente la configuración.",
"classicTitle": "Solo la pila de red clásica",
"classicBody": "Cada función de análisis y reparación comprueba el gestor de red activo antes de tocar nada. Si el host usa <strong>netplan</strong>, <strong>systemd-networkd</strong> o <strong>NetworkManager</strong>, la herramienta se detiene inmediatamente con un mensaje claro: el menú solo admite la pila clásica de Debian/Proxmox en <code>/etc/network/interfaces</code>. Es intencional: editar un fichero de netplan con reglas escritas para <code>ifupdown</code> corrompería silenciosamente la configuración.",
"backups": {
"heading": "Dónde van los backups",
"intro": "Cada reparación guiada, restauración o backup manual escribe una copia con timestamp de <code>/etc/network/interfaces</code> en <code>/var/backups/proxmenux/</code>:",
@@ -61,7 +61,7 @@
},
"readOnlySection": {
"heading": "Inspección de solo lectura",
"body": "El punto de partida cuando algo huele raro. Pura inspección — nunca escribe en <code>/etc/network/interfaces</code> y nunca ejecuta un comando modificador (con una única excepción explícita y opt-in para purgar NetworkManager cuando se detecta). Seguro de usar por SSH en cualquier momento.",
"body": "El punto de partida cuando algo parece ir mal. Pura inspección: nunca escribe en <code>/etc/network/interfaces</code> ni ejecuta comandos que modifiquen el sistema (con una única excepción explícita, que requiere tu aceptación, para purgar NetworkManager cuando se detecta). Se puede usar por SSH en cualquier momento de forma segura.",
"options": [
{
"title": "Diagnóstico",
@@ -82,7 +82,7 @@
"description": "Detecta bridges vmbrX con puertos ausentes o inválidos (típico tras una re-enumeración PCI). Muestra primero un informe; solo repara cuando aceptas el flujo guiado de 5 pasos."
},
{
"title": "Análisis de config y limpieza guiada",
"title": "Análisis de configuración y limpieza guiada",
"description": "Encuentra interfaces físicas declaradas en /etc/network/interfaces que ya no existen (configs huérfanas que dejan cambios de hardware). Las reporta y ofrece una eliminación guiada."
}
]
+9 -9
View File
@@ -1,13 +1,13 @@
{
"meta": {
"title": "Herramientas de monitorización en vivo | ProxMenux Documentation",
"title": "Herramientas de monitorización en vivo | Documentación de ProxMenux",
"description": "Tres lanzadores interactivos de monitorización de red: iftop (ancho de banda en tiempo real por par de hosts), iptraf-ng (monitor de tráfico multimodo) e iperf3 (test de ancho de banda, modo servidor / cliente). Cada uno se instala la primera vez que se usa.",
"ogTitle": "Herramientas de monitorización en vivo | ProxMenux Documentation",
"ogTitle": "Herramientas de monitorización en vivo | Documentación de ProxMenux",
"ogDescription": "Monitorización interactiva de red y test de ancho de banda para el host Proxmox: iftop, iptraf-ng, iperf3."
},
"header": {
"title": "Herramientas de monitorización en vivo",
"description": "Tres lanzadores interactivos para observación de red en tiempo real y medición de ancho de banda: iftop, iptraf-ng e iperf3. Cada herramienta se autoinstala desde apt la primera vez que se usa, corre en primer plano y se sale con la tecla documentada. De solo lectura sobre la configuración del host — solo observan el tráfico.",
"description": "Tres lanzadores interactivos para observar la red en tiempo real y medir el ancho de banda: iftop, iptraf-ng e iperf3. Cada herramienta se instala automáticamente desde apt la primera vez que se usa, se ejecuta en primer plano y se cierra con la tecla indicada. No cambian la configuración de red del host; iperf3 genera tráfico de prueba.",
"section": "Red"
},
"intro": {
@@ -69,7 +69,7 @@
}
],
"exit": "<strong>Salir:</strong> pulsa <kbd>x</kbd> desde cualquier vista (o <kbd>Q</kbd> desde el menú principal). ProxMenux muestra un diálogo recordatorio antes de lanzarlo.",
"logTitle": "El logging captura a fichero",
"logTitle": "Guardar las capturas en un fichero",
"logBody": "Cada modo ofrece registrar las estadísticas capturadas en <code>/var/log/iptraf-ng/</code>. Útil si necesitas un registro de un pico de tráfico — déjalo corriendo, vuelca al fichero, revisa el fichero después en lugar de intentar leer la pantalla en vivo."
},
"iperf3": {
@@ -81,24 +81,24 @@
"headerCli": "CLI equivalente",
"rows": [
{
"mode": "Server",
"mode": "Servidor",
"behaviour": "Escucha en TCP 5201 e imprime resultados de cada test entrante. Se detiene con Ctrl+C.",
"cli": "iperf3 -s"
},
{
"mode": "Client",
"mode": "Cliente",
"behaviour": "Pide la IP / hostname del servidor, conecta, ejecuta un test por defecto de 10 segundos e imprime el informe.",
"cli": "iperf3 -c <target>"
}
],
"workflowIntro": "Flujo típico para probar un enlace 10 GbE entre dos hosts Proxmox:",
"workflow": [
"En el host A, abre el menú Red → <em>Test de ancho de banda (iperf3)</em> → elige <strong>Server</strong>.",
"En el host B, abre la misma entrada de menú → elige <strong>Client</strong> → introduce la IP del host A.",
"En el host A, abre el menú Red → <em>Test de ancho de banda (iperf3)</em> → elige <strong>Servidor</strong>.",
"En el host B, abre la misma entrada de menú → elige <strong>Cliente</strong> → introduce la IP del host A.",
"Espera 10 segundos. Compara la tasa reportada con el máximo teórico del enlace."
],
"sample": "Salida de ejemplo del cliente:",
"flagsTitle": "Flags útiles a mano (desde una shell)",
"flagsTitle": "Opciones útiles para ejecutar a mano desde una shell",
"flagsBody": "<code>-t 60</code> test más largo (60s en lugar de los 10s por defecto), <code>-P 4</code> 4 streams en paralelo (satura más rápido), <code>-R</code> dirección inversa (servidor → cliente), <code>-u -b 100M</code> test UDP a 100 Mbit/s (para mediciones de jitter / pérdida de paquetes), <code>-p 5202</code> usa un puerto distinto (varios tests en paralelo). <code>man iperf3</code> para el set completo.",
"firewallTitle": "Abre el puerto del firewall en el servidor",
"firewallBody": "El servidor escucha en TCP <strong>5201</strong> por defecto. Si corres el servidor dentro de un host Proxmox con un firewall estricto (a nivel de datacenter o de host), permite entrada TCP 5201 desde la IP del cliente durante el test y luego ciérralo. Lo mismo aplica a <code>nftables</code> / <code>iptables</code> en hosts bare metal."
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Nombres persistentes de interfaz | ProxMenux Documentation",
"title": "Nombres persistentes de interfaz | Documentación de ProxMenux",
"description": "Fija los nombres de interfaz de Proxmox (eno1, enp3s0, …) a direcciones MAC mediante ficheros .link de systemd para que los nombres sobrevivan a la re-enumeración PCI, actualizaciones de kernel y al añadir / quitar otras NICs.",
"ogTitle": "Nombres persistentes de interfaz | ProxMenux Documentation",
"ogTitle": "Nombres persistentes de interfaz | Documentación de ProxMenux",
"ogDescription": "Evita que los nombres de interfaz de Proxmox cambien al modificar el hardware. Usa ficheros .link de systemd basados en la dirección MAC."
},
"header": {
@@ -16,7 +16,7 @@
},
"problem": {
"heading": "El problema que resuelve",
"intro": "Linux deriva los nombres de interfaz por defecto a partir de la topología PCI — <code>eno1</code> = onboard, <code>enp3s0</code> = la tarjeta en el bus PCI 3, slot 0, etc. El esquema de naming es determinista <em>dado el mismo layout de hardware</em>. Cambia el layout y los nombres se mueven:",
"intro": "Linux obtiene los nombres de interfaz predeterminados a partir de la topología PCI: <code>eno1</code> = integrada en placa, <code>enp3s0</code> = la tarjeta en el bus PCI 3, slot 0, etc. El esquema de nombres es determinista <em>con la misma disposición de hardware</em>. Si cambia la disposición, cambian los nombres:",
"items": [
"Añade una GPU delante de una NIC existente → el número de bus de la NIC puede cambiar → el nombre cambia.",
"Mueve una tarjeta a otro slot PCIe → el nombre cambia.",
@@ -46,7 +46,7 @@
"headerWhy": "Por qué",
"rows": [
{
"type": "NIC onboard / PCIe",
"type": "NIC integrada / PCIe",
"behaviour": "Se escribe fichero <code>.link</code>",
"why": "Respaldada por un dispositivo PCI real — el caso para el que está la herramienta"
},
@@ -56,7 +56,7 @@
"why": "Tiene una MAC real y se beneficia de la estabilidad de nombre"
},
{
"type": "Bridges (vmbrX)",
"type": "Puentes (vmbrX)",
"behaviour": "Se omite",
"why": "Virtual; el nombre viene de <code>/etc/network/interfaces</code>"
},
@@ -87,7 +87,7 @@
"intro": "Si <code>/etc/systemd/network/</code> ya contiene ficheros <code>.link</code> (de una ejecución anterior u otra herramienta), se copian a un directorio de backup con timestamp antes de generar los nuevos:",
"outro": "Para hacer rollback: copia los ficheros desde el directorio de backup y reinicia.",
"rebootTitle": "Tiene efecto en el siguiente reinicio, no inmediatamente",
"rebootBody": "Los cambios en ficheros <code>.link</code> solo se aplican en el arranque, cuando udev re-enumera los dispositivos. La herramienta reporta <em>\"Changes will apply after reboot\"</em> por este motivo. Renombrar una interfaz en vivo es arriesgado y no se intenta: un <code>vmbr0</code> activo con miembros tendría que reconfigurarse atómicamente, por eso la operación se difiere al siguiente arranque limpio."
"rebootBody": "Los cambios en ficheros <code>.link</code> solo se aplican en el arranque, cuando udev vuelve a enumerar los dispositivos. Por eso la herramienta indica <em>«Los cambios se aplicarán después del reinicio»</em>. No intenta renombrar una interfaz en vivo por el riesgo que supone: un <code>vmbr0</code> activo con interfaces miembro tendría que reconfigurarse de forma atómica, así que la operación se aplaza al siguiente arranque limpio."
},
"afterReboot": {
"heading": "Tras el reinicio",
@@ -100,11 +100,11 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
"emptyTitle": "\"No physical interfaces found\" tras ejecutar la herramienta",
"emptyTitle": "«No se encontraron interfaces físicas» tras ejecutar la herramienta",
"emptyBody": "El host no tiene interfaces respaldadas por PCI / phy80211 visibles para el kernel. Confirma con <code>ls -l /sys/class/net/</code> — cada entrada debería tener un symlink <code>device</code> (PCI) o una entrada <code>phy80211</code> (Wi-Fi). Si faltan ambos para lo que debería ser una NIC real, el driver no está cargado.",
"noChangeTitle": "Tras el reinicio, los nombres no han cambiado como esperaba",
"noChangeBody": "Comprueba que el fichero está presente y bien formado: <code>cat /etc/systemd/network/10-&lt;iface&gt;.link</code>. Después mira los logs de udev: <code>journalctl -u systemd-udevd -b | grep -i link</code>. Una causa habitual es un parámetro de kernel <code>net.ifnames=0</code> residual que deshabilita el naming predictivo por completo — quítalo de <code>/etc/default/grub</code>, ejecuta <code>update-grub</code> y reinicia.",
"undoTitle": "Quiero deshacer el naming persistente",
"undoTitle": "Quiero deshacer los nombres persistentes",
"undoBody": "O bien borra los ficheros <code>.link</code> (<code>rm /etc/systemd/network/10-*.link</code>) o restaura desde el directorio de backup generado en la ejecución anterior. Reinicia para aplicar."
},
"related": {
@@ -116,7 +116,7 @@
"tailRich": " — el camino de recuperación cuando los nombres <em>ya</em> se han movido."
},
{
"label": "Análisis de config y limpieza guiada",
"label": "Análisis de configuración y limpieza guiada",
"href": "/docs/network/config-analysis",
"tail": " — para eliminar bloques huérfanos dejados por los cambios de nombre."
},
@@ -1,17 +1,17 @@
{
"meta": {
"title": "Cómo se traduce una imagen OCI | ProxMenux",
"description": "Del repositorio de la imagen y su archivo Compose a una plantilla revisable, un plan de despliegue y un LXC nativo de Proxmox VE, sin Docker dentro."
"title": "Cómo se adapta una imagen OCI | ProxMenux",
"description": "Del repositorio de la imagen y su archivo Compose a una plantilla que puedes revisar, un plan de despliegue y un LXC nativo de Proxmox VE, sin Docker dentro."
},
"header": {
"title": "Cómo se traduce una imagen OCI",
"description": "Del repositorio de la imagen y su archivo Compose a una plantilla revisable, un plan de despliegue y un LXC nativo, sin instalar Docker dentro.",
"title": "Cómo se adapta una imagen OCI",
"description": "Del repositorio de la imagen y su archivo Compose a una plantilla que puedes revisar, un plan de despliegue y un LXC nativo, sin instalar Docker dentro.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "pipeline",
"title": "La cadena de traducción",
"title": "El proceso de adaptación",
"blocks": [
{
"mermaid": {
@@ -20,7 +20,7 @@
"repo": "Repositorio de la imagen",
"converter": "Conversor",
"template": "Plantilla JSON",
"blockers": "¿Sin bloqueos?",
"blockers": "¿Sin impedimentos?",
"no": "No",
"yes": "Sí",
"review": "Revisión / overlay",
@@ -30,7 +30,7 @@
}
},
{
"p": "El conversor lee la imagen y el archivo Compose que publica su proyecto y escribe una plantilla JSON. Una plantilla con bloqueos sin traducir pasa por revisión, donde un overlay curado los resuelve, antes de publicarse en el catálogo. Solo las plantillas sin bloqueos se ofrecen para instalar."
"p": "El conversor lee la imagen y el archivo Compose publicados por el proyecto y genera una plantilla JSON. Si quedan requisitos que no se han podido adaptar y que impiden la instalación, la plantilla pasa por una revisión: un archivo de ajustes revisados, llamado overlay, los resuelve antes de publicarla en el catálogo. Solo se ofrecen para instalar las plantillas que no tienen impedimentos pendientes."
}
]
},
@@ -41,10 +41,26 @@
{
"cards": {
"items": [
{ "icon": "archive", "title": "Identidad de la imagen", "body": "Repositorio, etiqueta rolling, arquitectura, digest resuelto y revisión del origen." },
{ "icon": "braces", "title": "Contrato del contenedor", "body": "Entrypoint, Cmd, entorno, usuario, directorio de trabajo, señal de parada, puertos y volúmenes." },
{ "icon": "layers", "title": "Traducción a Proxmox VE", "body": "Recursos, seguridad, puntos de montaje, dispositivos, sysctls, healthchecks y las adaptaciones que necesita cada uno, con su motivo." },
{ "icon": "shield", "title": "Compatibilidad", "body": "Claves admitidas, bloqueos sin traducir y el estado de cada validación." }
{
"icon": "archive",
"title": "Identidad de la imagen",
"body": "Repositorio, etiqueta de actualización continua, arquitectura, digest resuelto y revisión de origen."
},
{
"icon": "braces",
"title": "Contrato del contenedor",
"body": "Entrypoint, Cmd, entorno, usuario, directorio de trabajo, señal de parada, puertos y volúmenes."
},
{
"icon": "layers",
"title": "Adaptación a Proxmox VE",
"body": "Recursos, seguridad, puntos de montaje, dispositivos, sysctls, comprobaciones de estado y las adaptaciones necesarias en cada caso, con su justificación."
},
{
"icon": "shield",
"title": "Compatibilidad",
"body": "Claves compatibles, requisitos pendientes de adaptar que impiden la instalación y estado de cada validación."
}
]
}
}
@@ -56,12 +72,32 @@
"blocks": [
{
"table": {
"headers": ["Origen", "Ejemplo", "Resultado nativo"],
"headers": [
"Origen",
"Ejemplo",
"Resultado nativo"
],
"rows": [
["Metadatos OCI", "<code>Entrypoint</code>, <code>Cmd</code>, <code>User</code>", "Proxmox VE los importa al crear el CT"],
["Docker Compose", "<code>environment</code>, <code>volumes</code>, <code>devices</code>", "entradas de entorno del LXC, <code>mpN</code> y <code>devN</code>"],
["Perfil de ProxMenux", "GPU, healthcheck, credenciales", "preguntas y adaptaciones revisadas"],
["Usuario", "VMID, almacenamiento, red", "el contrato de la instancia"]
[
"Metadatos OCI",
"<code>Entrypoint</code>, <code>Cmd</code>, <code>User</code>",
"Proxmox VE los importa al crear el CT"
],
[
"Docker Compose",
"<code>environment</code>, <code>volumes</code>, <code>devices</code>",
"Entradas de entorno de LXC, <code>mpN</code> y <code>devN</code>"
],
[
"Perfil de ProxMenux",
"GPU, comprobación de estado, credenciales",
"Preguntas y adaptaciones revisadas"
],
[
"Usuario",
"VMID, almacenamiento, red",
"El contrato de la instancia"
]
]
}
}
@@ -69,18 +105,39 @@
},
{
"id": "install",
"title": "Qué ocurre durante una instalación",
"title": "Qué ocurre durante la instalación",
"blocks": [
{
"steps": {
"items": [
{ "title": "Resolver", "body": "Se consulta el registro, se selecciona la arquitectura del host y se fija el digest efectivo de la etiqueta rolling." },
{ "title": "Descargar y verificar", "body": "Skopeo descarga la imagen como archivo OCI, y cada capa se comprueba contra su digest y se descomprime antes de crear nada. Una descarga dañada se repite una vez antes de detener la instalación." },
{ "title": "Construir", "body": "<code>pct create</code> construye el rootfs a partir del archivo y conserva los metadatos oficiales de proceso de la imagen." },
{ "title": "Conectar", "body": "Se añaden los volúmenes, la red, el entorno, los dispositivos y los perfiles de seguridad declarados." },
{ "title": "Consola", "body": "La salida de consola del contenedor se guarda en el host, y la consola de Proxmox VE abre un shell cuando la imagen incluye uno." },
{ "title": "Comprobar", "body": "El primer arranque espera una dirección y la respuesta del servicio; un fallo no se presenta como instalación correcta." },
{ "title": "Registrar", "body": "La configuración efectiva se escribe en el contrato de la instancia que usan las actualizaciones y las recreaciones." }
{
"title": "Resolver la referencia",
"body": "Se consulta el registro, se selecciona la arquitectura del host y se fija el digest concreto al que apunta la etiqueta de actualización continua."
},
{
"title": "Descargar y verificar",
"body": "Skopeo descarga la imagen como un archivo OCI. Antes de crear nada, se verifica el digest de cada capa y se descomprimen todas las capas. Si la descarga está dañada, se vuelve a descargar una vez antes de detener la instalación."
},
{
"title": "Crear el sistema de archivos",
"body": "<code>pct create</code> crea el rootfs a partir del archivo y conserva los metadatos oficiales del proceso de la imagen."
},
{
"title": "Conectar los recursos",
"body": "Se aplican los volúmenes, la red, el entorno, los dispositivos y los perfiles de seguridad declarados."
},
{
"title": "Consola",
"body": "La salida de consola del contenedor se guarda en el host. La consola de Proxmox VE abre una shell si la imagen incluye una."
},
{
"title": "Comprobar",
"body": "En el primer arranque se espera a que el contenedor tenga una dirección y el servicio responda. Si falla, la instalación no se da por completada correctamente."
},
{
"title": "Registrar la configuración",
"body": "La configuración efectiva se guarda en el contrato de la instancia que utilizan las actualizaciones y las recreaciones."
}
]
}
}
@@ -89,7 +146,7 @@
{
"id": "example",
"title": "Ejemplo: una imagen con /config y /downloads",
"intro": "Una definición habitual de Compose y la configuración de Proxmox VE en la que se convierte. Las rutas que espera la aplicación no cambian.",
"intro": "Una definición Compose habitual y la configuración de Proxmox VE que se genera a partir de ella. Las rutas que espera la aplicación no cambian.",
"blocks": [
{
"codeGrid": {
@@ -99,14 +156,14 @@
"code": "image: lscr.io/linuxserver/example:latest\nenvironment:\n - PUID=1000\n - PGID=1000\nvolumes:\n - config:/config\n - /srv/downloads:/downloads\nports:\n - 8080:8080"
},
{
"title": "/etc/pve/lxc/VMID.conf (extracto)",
"title": "/etc/pve/lxc/VMID.conf (fragmento)",
"code": "entrypoint: /init\nmp0: local-lvm:vm-VMID-disk-1,mp=/config,backup=1,size=8G\nmp1: /srv/downloads,mp=/downloads\nnet0: name=eth0,bridge=vmbr0,ip=dhcp,type=veth\nlxc.environment.runtime: PUID=1000\nlxc.environment.runtime: PGID=1000"
}
]
}
},
{
"p": "<code>mp0</code> es un segundo disco que pertenece al contenedor, con el nombre <code>vm-VMID-disk-N</code> en el almacenamiento elegido. Se monta en <code>/config</code> y, con <code>backup=1</code>, forma parte del backup del contenedor. <code>mp1</code> no crea ningún disco: enlaza el directorio del host <code>/srv/downloads</code> con <code>/downloads</code> dentro del LXC. El puerto 8080 no se mapea: el LXC tiene una dirección propia y el servicio responde en ella."
"p": "<code>mp0</code> es un segundo disco que pertenece al contenedor, con el nombre <code>vm-VMID-disk-N</code> en el almacenamiento seleccionado. Se monta en <code>/config</code> y, con <code>backup=1</code>, forma parte del backup del contenedor. <code>mp1</code> no crea ningún disco: monta el directorio del host <code>/srv/downloads</code> en <code>/downloads</code> dentro del LXC. El puerto 8080 no se mapea: el LXC tiene su propia dirección y el servicio responde en ella."
}
]
}
@@ -1,11 +1,11 @@
{
"meta": {
"title": "Instalar una imagen que no está en el catálogo | ProxMenux",
"description": "Traducción de una imagen OCI desde un archivo Compose, una URL, un comando docker run o una referencia de imagen, con revisión de lo que ProxMenux puede reproducir antes de instalarla."
"title": "Instalar una imagen fuera del catálogo | ProxMenux",
"description": "Adapta una imagen OCI a partir de un archivo Compose, una URL, un comando docker run o una referencia de imagen, y revisa qué puede reproducir ProxMenux antes de instalarla."
},
"header": {
"title": "Instalar una imagen que no está en el catálogo",
"description": "Una imagen propia se traduce desde su archivo Compose, un comando docker run o solo su referencia, y el resultado se presenta para revisión antes de crear ningún LXC.",
"title": "Instalar una imagen que no esté en el catálogo",
"description": "Tu imagen se adapta a partir de su archivo Compose, de un comando docker run o de su referencia. El resultado se muestra para que lo revises antes de crear ningún LXC.",
"section": "OCI manager Apps"
},
"sections": [
@@ -14,8 +14,8 @@
"blocks": [
{
"calloutInfo": {
"title": "El mismo conversor, el mismo instalador",
"body": "La opción <strong>Instalar una imagen que no está en el catálogo</strong> utiliza el conversor y el instalador de las plantillas del catálogo. La diferencia es que el contrato se genera en ese momento a partir de la definición aportada y se valida antes de crear ningún LXC."
"title": "El mismo conversor y el mismo instalador",
"body": "La opción <strong>Instalar una imagen que no esté en el catálogo</strong> utiliza el mismo conversor y el mismo instalador que las plantillas del catálogo. La diferencia es que el contrato se genera en ese momento a partir de la definición proporcionada y se valida antes de crear ningún LXC."
}
}
]
@@ -23,45 +23,92 @@
{
"id": "sources",
"title": "Cómo se describe la imagen",
"intro": "La primera pantalla pregunta cómo se describe la imagen. Cuatro formas aportan una definición que se traduce, una quinta usa solo el nombre de la imagen y tres reciben un oci-compose ya escrito.",
"intro": "La primera pantalla pregunta cómo vas a describir la imagen. Cuatro opciones reciben una definición que se adapta, una quinta usa solo el nombre de la imagen y otras tres leen un oci-compose ya escrito.",
"blocks": [
{
"table": {
"headers": ["Opción", "Qué lee"],
"headers": [
"Opción",
"Qué lee"
],
"rows": [
["Pegar su archivo Compose en la terminal", "El YAML se pega en la terminal y termina con Ctrl+D."],
["Leer su archivo Compose desde un archivo de este host", "Una ruta del nodo, <code>/root/docker-compose.yml</code> por defecto. El archivo debe existir y ocupar como máximo 256 KiB."],
["Descargar su archivo Compose desde una dirección", "Una dirección <code>http://</code> o <code>https://</code> que sirva el YAML sin procesar. Se descargan como máximo 256 KiB."],
["Pegar su comando docker run en la terminal", "El comando que publica el proyecto. Se traducen puertos, entorno, volúmenes, dispositivos, capacidades, usuario, memoria compartida y el resto de opciones admitidas."],
["Solo la referencia de la imagen, sin archivo Compose", "Una referencia como <code>ghcr.io/user/application:latest</code>. Se consulta el registro y se conservan los metadatos OCI de la imagen."],
["Pegar un oci-compose en la terminal", "El JSON se pega en la terminal y termina con Ctrl+D. No se traduce: se comprueba y se instala tal como está escrito."],
["Leer un oci-compose desde un archivo de este host", "Un archivo JSON del nodo, <code>/root/oci-compose.json</code> por defecto, de 2 MiB como máximo."],
["Descargar un oci-compose desde una dirección", "Una dirección <code>http://</code> o <code>https://</code> que sirva el archivo JSON. Se descargan como máximo 2 MiB."]
[
"Pegar su archivo Compose en la terminal",
"Pega el YAML en la terminal y termina con Ctrl+D."
],
[
"Leer su archivo Compose desde este host",
"Una ruta del nodo; la predeterminada es <code>/root/docker-compose.yml</code>. El archivo debe existir y no superar los 256 KiB."
],
[
"Descargar su archivo Compose desde una dirección",
"Una dirección <code>http://</code> o <code>https://</code> que sirva el YAML sin procesar. Se descargan como máximo 256 KiB."
],
[
"Pegar su comando docker run en la terminal",
"El comando publicado por el proyecto. Se adaptan los puertos, el entorno, los volúmenes, los dispositivos, las capabilities, el usuario, la memoria compartida y las demás opciones compatibles."
],
[
"Solo la referencia de imagen, sin archivo Compose",
"Una referencia como <code>ghcr.io/user/application:latest</code>. Se consulta el registro y se conservan los metadatos OCI de la imagen."
],
[
"Pegar un oci-compose en la terminal",
"Pega el JSON en la terminal y termina con Ctrl+D. No se convierte: se valida y se instala tal como está escrito."
],
[
"Leer un oci-compose desde este host",
"Un archivo JSON del nodo, <code>/root/oci-compose.json</code> por defecto, de un máximo de 2 MiB."
],
[
"Descargar un oci-compose desde una dirección",
"Una dirección <code>http://</code> o <code>https://</code> que sirva el archivo JSON. Se descargan como máximo 2 MiB."
]
]
}
},
{
"figure": {
"src": "/oci-manager/custom-source-menu.png",
"alt": "Menú que pregunta cómo se describe una imagen que no está en el catálogo",
"caption": "Las formas de describir una imagen que no está en el catálogo."
"alt": "Menú para elegir cómo describir una imagen que no está en el catálogo",
"caption": "Formas de describir una imagen fuera del catálogo."
}
}
]
},
{
"id": "reference-only",
"title": "Qué aporta solo la referencia de la imagen",
"intro": "Una imagen lleva sus metadatos de proceso, pero no todo lo que un archivo Compose suele añadir a su alrededor.",
"title": "Qué aporta una referencia de imagen por sí sola",
"intro": "La imagen contiene los metadatos de su proceso, pero no todo el entorno que suele añadir un archivo Compose.",
"blocks": [
{
"table": {
"headers": ["Se lee de la imagen", "No está en la imagen", "Consecuencia"],
"headers": [
"Se lee de la imagen",
"No está en la imagen",
"Consecuencia"
],
"rows": [
["<code>Entrypoint</code>, <code>Cmd</code>, <code>User</code>, <code>WorkingDir</code> y entorno integrado", "Variables que solo aparecen en la documentación", "Se añaden durante la instalación o con Modificar"],
["Volúmenes declarados por la imagen", "Directorios del host que solo nombra un archivo Compose", "Las rutas adicionales se añaden antes de instalar"],
["Puertos <code>EXPOSE</code>", "La URL, el protocolo o un healthcheck funcional", "Se confirman el puerto y la forma de comprobar el servicio"],
["Arquitecturas y digest del registro", "Dispositivos, privilegios o dependencias externas", "Ninguno se activa sin una definición que lo pida"]
[
"<code>Entrypoint</code>, <code>Cmd</code>, <code>User</code>, <code>WorkingDir</code> y el entorno incorporado",
"Variables que solo figuran en la documentación",
"Se añaden durante la instalación o desde Modificar"
],
[
"Volúmenes declarados por la imagen",
"Directorios del host que solo se indican en Compose",
"Las rutas adicionales se añaden antes de instalar"
],
[
"Puertos <code>EXPOSE</code>",
"La URL, el protocolo o la comprobación funcional del servicio",
"Se confirman el puerto y la forma de comprobar el servicio"
],
[
"Arquitecturas y digest del registro",
"Dispositivos, privilegios o dependencias externas",
"No se habilitan sin una definición que los solicite"
]
]
}
}
@@ -69,29 +116,44 @@
},
{
"id": "review",
"title": "Revisión antes de instalar",
"intro": "Tras traducir la definición, ProxMenux muestra lo que ha entendido antes de pedir VMID, recursos o almacenamiento.",
"title": "Revisar antes de instalar",
"intro": "Tras adaptar la definición, ProxMenux muestra cómo la ha interpretado antes de preguntar el VMID, los recursos o el almacenamiento.",
"blocks": [
{
"steps": {
"items": [
{ "title": "Analizar", "body": "Se leen servicios, imagen, puertos, rutas, entorno, dispositivos, seguridad y healthcheck." },
{ "title": "Consultar el registro", "body": "La imagen debe existir en su registro, y se enumeran las arquitecturas que publica. Un registro privado se lee con la cuenta guardada para él." },
{ "title": "Enumerar lo que no se aplica", "body": "Se enumeran las etiquetas, las redes Docker, los ajustes de Swarm y el resto de claves que no tienen efecto en un LXC." },
{ "title": "Bloquear lo que no puede traducirse", "body": "Una clave sin equivalencia segura aparece en <strong>Lo que no puede traducirse</strong> y la instalación no continúa. Nada se descarta en silencio." },
{ "title": "Pedir los secretos", "body": "Las variables cuyo nombre corresponde a una contraseña, un token o una clave se convierten en preguntas sensibles de la instalación." }
{
"title": "Analizar",
"body": "Se leen servicios, imagen, puertos, rutas, entorno, dispositivos, seguridad y comprobaciones de estado."
},
{
"title": "Consultar el registro",
"body": "La imagen debe existir en el registro y se muestran las arquitecturas publicadas. Si el registro es privado, se utiliza la cuenta guardada para él."
},
{
"title": "Enumerar lo que no se aplica",
"body": "Se enumeran las etiquetas, redes de Docker, ajustes de Swarm y otras claves que no tienen efecto en un LXC."
},
{
"title": "Bloquear opciones sin equivalente seguro",
"body": "Las claves sin equivalente seguro aparecen en <strong>Opciones sin equivalente</strong> e impiden continuar con la instalación. No se descartan silenciosamente."
},
{
"title": "Solicitar secretos",
"body": "Las variables cuyo nombre indica una contraseña, token o clave se solicitan como datos sensibles durante la instalación."
}
]
}
},
{
"figure": {
"src": "/oci-manager/custom-review.png",
"alt": "Resumen de lo que ProxMenux ha entendido de un archivo Compose",
"caption": "El resumen que se muestra antes de que la instalación pida VMID y recursos."
"alt": "Resumen de cómo ProxMenux ha interpretado el archivo Compose",
"caption": "Resumen mostrado antes de que el instalador pregunte el VMID y los recursos."
}
},
{
"p": "Tras aceptar el resumen, el recorrido es el del catálogo: nombre, modo predeterminado o avanzado, VMID, CPU, memoria, red, arranque con el nodo, rutas persistentes, rutas adicionales, dispositivos compatibles y resumen final."
"p": "Tras aceptar el resumen se sigue el mismo asistente que en el catálogo: nombre, modo predeterminado o avanzado, VMID, CPU, memoria, red, arranque con el nodo, rutas persistentes, rutas adicionales, dispositivos compatibles y resumen final."
}
]
},
@@ -118,68 +180,79 @@
{
"id": "oci-compose",
"title": "Un oci-compose escrito a mano",
"intro": "Un oci-compose es el archivo JSON desde el que se instala una aplicación. El catálogo guarda uno por cada aplicación, y el mismo formato puede escribirse a mano e instalarse con esta opción.",
"intro": "Un oci-compose es el archivo JSON a partir del cual se instala una aplicación. El catálogo conserva uno por aplicación. Puedes escribir el mismo formato a mano e instalarlo con esta opción.",
"blocks": [
{
"p": "El que se escribe a mano indica lo que decide su autor: la imagen, sus puertos, variables y volúmenes, y lo que pregunta la instalación. ProxMenux completa el resto al leer el archivo. Puede decir lo que un archivo Compose no puede: el texto de una pregunta, una contraseña generada durante la instalación, un perfil de GPU, el propietario de cada volumen, la comprobación del primer arranque o las credenciales que se muestran al terminar."
"p": "Al escribirlo a mano, el autor decide la imagen, los puertos, las variables, los volúmenes y las preguntas de la instalación. ProxMenux completa el resto al leer el archivo. Permite expresar lo que Compose no incluye: el texto de una pregunta, una contraseña generada durante la instalación, un perfil de GPU, el propietario de cada volumen, la comprobación del primer arranque o las credenciales mostradas al final."
},
{
"steps": {
"items": [
{
"title": "Comprobar",
"body": "Un archivo con errores no se instala. Cada error indica el campo en el que está, y un archivo que no es JSON válido indica la línea y la columna."
"body": "Los archivos con errores no se instalan. Cada error indica el campo afectado; si el JSON no es válido, se muestran la línea y la columna."
},
{
"title": "Revisar",
"body": "Un archivo válido muestra lo que instala: imagen, dirección web, puertos, rutas persistentes, las variables que pide la instalación y los archivos que escribe."
"body": "Si el archivo es válido, se muestra lo que instalará: imagen, dirección web, puertos, rutas persistentes, variables que solicitará el instalador y archivos que escribirá."
},
{
"title": "Instalar",
"body": "La instalación es la de cualquier aplicación del catálogo, con ajustes por defecto o avanzados."
"body": "Se utiliza el mismo instalador que para cualquier aplicación del catálogo, con ajustes predeterminados o avanzados."
}
]
}
},
{
"calloutWarning": {
"title": "Un archivo que decide privilegios",
"body": "Un oci-compose decide qué se monta en el contenedor y con qué privilegios. El resumen lo indica antes de instalar: instala solo archivos que vengan de una fuente de confianza."
"title": "Un archivo que decide los privilegios",
"body": "El oci-compose determina qué se monta dentro del contenedor y con qué privilegios. La revisión lo muestra antes de instalar: utiliza únicamente archivos de fuentes de confianza."
}
},
{
"p": "El formato se describe bloque a bloque, con dos ejemplos completos, en el <readmeLink>README del motor OCI</readmeLink>. El registro de una instalación se lee de la misma forma: solo se usa la plantilla con la que se instaló, y ninguna de las respuestas de esa instalación."
"p": "El <readmeLink>README del motor OCI</readmeLink> explica el formato bloque a bloque e incluye dos ejemplos completos. También se puede leer el registro de una instalación: solo se utiliza la plantilla original, sin incorporar ninguna de las respuestas de aquella instalación."
}
]
},
{
"id": "private-registries",
"title": "Imágenes en registros privados",
"intro": "Una imagen en un registro privado, como un paquete privado de GitHub o un repositorio privado de Docker Hub, se lee con una cuenta guardada en ProxMenux.",
"title": "Imágenes de registros privados",
"intro": "Las imágenes de registros privados, como un paquete privado de GitHub o un repositorio privado de Docker Hub, se consultan con una cuenta guardada en ProxMenux.",
"blocks": [
{
"steps": {
"items": [
{ "title": "El registro rechaza la imagen", "body": "Cuando el registro responde que la imagen necesita una cuenta, la revisión ofrece iniciar sesión en ese registro y vuelve a leer la imagen." },
{ "title": "Iniciar sesión", "body": "Un usuario y una contraseña o un token de acceso que puedan descargar la imagen. El registro los comprueba y solo se guardan si los acepta." },
{ "title": "Instalar y mantener al día", "body": "La instalación descarga la imagen con esa cuenta, y también las actualizaciones, Modificar, Recrear, la vigilancia y la comprobación de actualizaciones del Monitor, en cualquier nodo del clúster." }
{
"title": "El registro deniega el acceso a la imagen",
"body": "Si el registro indica que la imagen requiere una cuenta, la revisión ofrece iniciar sesión en ese registro y vuelve a consultar la imagen."
},
{
"title": "Iniciar sesión",
"body": "Un usuario y una contraseña o token con permiso para descargar la imagen. El registro los comprueba y solo se guardan si los acepta."
},
{
"title": "Instalar y mantener al día",
"body": "Esa cuenta se utiliza para descargar la imagen durante la instalación y también en las actualizaciones, Modificar, Recrear, la vigilancia y la comprobación de actualizaciones del Monitor, en cualquier nodo del clúster."
}
]
}
},
{ "p": "<strong>Cuentas de registro</strong>, en el menú principal de OCI manager Apps, lista las cuentas guardadas por registro y usuario, nunca su secreto. Desde cada cuenta se puede comprobar, descargar o instalar una imagen, y actualizar o eliminar la cuenta." },
{
"p": "<strong>Cuentas de registros</strong>, en el menú principal de OCI manager Apps, muestra las cuentas guardadas por registro y usuario, nunca sus secretos. Desde cada cuenta puedes comprobar, descargar o instalar una imagen, actualizar las credenciales o eliminarlas."
},
{
"list": {
"items": [
"GitHub (<code>ghcr.io</code>): el usuario es la cuenta de GitHub, y la contraseña un token de acceso personal con el permiso <code>read:packages</code>.",
"Docker Hub (<code>docker.io</code>): el usuario es la cuenta de Docker Hub, y la contraseña un token de acceso con permiso de lectura.",
"Otros registros, también uno con su propio puerto como <code>registry.example.com:5000</code>: el usuario y la contraseña o token que da ese registro."
"GitHub (<code>ghcr.io</code>): el usuario es la cuenta de GitHub y la contraseña es un token de acceso personal con permiso <code>read:packages</code>.",
"Docker Hub (<code>docker.io</code>): el usuario es la cuenta de Docker Hub y la contraseña es un token con permiso de lectura.",
"Otros registros, incluidos los que usan un puerto propio como <code>registry.example.com:5000</code>: el usuario y la contraseña o token que proporcione ese registro."
]
}
},
{
"calloutInfo": {
"title": "Dónde se guardan",
"body": "En <code>/etc/pve/priv/proxmenux/registry-auth.json</code>, legible solo por root, en la misma carpeta donde Proxmox guarda las contraseñas de sus almacenamientos. <code>/etc/pve</code> lo comparten todos los nodos del clúster, así que una cuenta añadida en un nodo se usa en todos. El backup del host lo incluye, y al desinstalar ProxMenux se elimina de todos los nodos."
"title": "Dónde se guardan las cuentas",
"body": "En <code>/etc/pve/priv/proxmenux/registry-auth.json</code>, accesible solo por root, en la misma carpeta donde Proxmox guarda las contraseñas de almacenamiento. <code>/etc/pve</code> se comparte entre los nodos del clúster, de modo que una cuenta añadida en un nodo se utiliza en todos. El backup del host incluye ese archivo y desinstalar ProxMenux lo elimina de todos los nodos."
}
}
]
@@ -191,11 +264,11 @@
{
"list": {
"items": [
"Un Dockerfile sin imagen publicada: la imagen debe construirse y publicarse antes en un registro OCI.",
"Un archivo Compose con varios servicios: queda bloqueado porque describe más de una imagen. Esta opción instala un único contenedor.",
"<code>configs</code>, secretos externos o formatos de dispositivo que no pueden traducirse sin ambigüedad.",
"Sustituciones del shell como <code>$(command)</code>: debe escribirse el valor resultante.",
"Opciones de <code>docker run</code> no reconocidas y <code>--env-file</code>: se lee en su lugar un archivo Compose explícito."
"Un Dockerfile sin imagen publicada: primero hay que construir la imagen y publicarla en un registro OCI.",
"Un archivo Compose con varios servicios: se bloquea porque esta opción instala un único servicio por contenedor, aunque varios servicios utilicen la misma imagen.",
"<code>configs</code>, secretos externos o formatos de dispositivo que no puedan adaptarse de forma inequívoca.",
"Sustituciones de shell como <code>$(command)</code>: hay que escribir directamente el valor resultante.",
"Opciones de <code>docker run</code> no reconocidas y <code>--env-file</code>: utiliza un archivo Compose con los valores explícitos."
]
}
}
+203 -44
View File
@@ -19,9 +19,18 @@
{
"flow": {
"nodes": [
{ "label": "Inventario del host", "detail": "/dev/dri/renderD128\nGID 993 · Intel" },
{ "label": "ProxMenux", "detail": "fabricante y\npermisos comprobados" },
{ "label": "LXC", "detail": "mismo dispositivo\nGID efectivo" }
{
"label": "Inventario del host",
"detail": "/dev/dri/renderD128\nGID 993 · Intel"
},
{
"label": "ProxMenux",
"detail": "fabricante y\npermisos comprobados"
},
{
"label": "LXC",
"detail": "mismo dispositivo\nGID efectivo"
}
]
}
}
@@ -33,12 +42,32 @@
"blocks": [
{
"table": {
"headers": ["Origen", "Qué se lee", "Qué hace el instalador"],
"headers": [
"Origen",
"Qué se lee",
"Qué hace el instalador"
],
"rows": [
["Docker Compose", "<code>devices</code>, <code>group_add</code>, <code>deploy.resources</code> y peticiones NVIDIA", "Cada requisito se convierte en una petición de dispositivo que se muestra para revisión"],
["Perfil del catálogo", "El soporte de GPU, Coral, OpenCL, USB o FUSE que tiene realmente la aplicación", "Solo se ofrecen las opciones validadas para esa imagen"],
["Metadatos y documentación de la imagen", "VA-API, Selkies, mods de LinuxServer o el runtime NVIDIA", "Se añaden las variables y la preparación documentadas"],
["Selección del usuario", "Solo CPU, Intel/AMD, OpenCL, NVIDIA o un dispositivo opcional", "La selección se guarda en el contrato de la instancia"]
[
"Docker Compose",
"<code>devices</code>, <code>group_add</code>, <code>deploy.resources</code> y peticiones NVIDIA",
"Cada requisito se convierte en una petición de dispositivo que se muestra para revisión"
],
[
"Perfil del catálogo",
"El soporte de GPU, Coral, OpenCL, USB o FUSE que tiene realmente la aplicación",
"Solo se ofrecen las opciones validadas para esa imagen"
],
[
"Metadatos y documentación de la imagen",
"VA-API, Selkies, mods de LinuxServer o el runtime NVIDIA",
"Se añaden las variables y la preparación documentadas"
],
[
"Selección del usuario",
"Solo CPU, Intel/AMD, OpenCL, NVIDIA o un dispositivo opcional",
"La selección se guarda en el contrato de la instancia"
]
]
}
},
@@ -57,16 +86,52 @@
"blocks": [
{
"table": {
"headers": ["Tipo", "Identificación", "Validación"],
"headers": [
"Tipo",
"Identificación",
"Validación"
],
"rows": [
["Intel/AMD DRM", "<code>/dev/dri/renderD*</code> y <code>/sys/class/drm/NODO/device/vendor</code>", "Un dispositivo de caracteres con fabricante <code>0x8086</code> (Intel) o <code>0x1002</code> (AMD)"],
["OpenCL AMD", "El render node, más <code>/dev/kfd</code> cuando el perfil lo necesita", "Existencia, tipo, fabricante, permisos y compatibilidad declarada"],
["AMD ROCm", "El nodo de render, <code>/dev/kfd</code> y la generación que declara el driver de cómputo en <code>/sys/class/kfd/kfd/topology/nodes/*/properties</code>", "Una generación para la que la imagen ROCm de la aplicación trae kernels, las GPU RDNA2 que incluye y las posteriores, se ofrece tal cual. Las demás GPU de esas familias, como las Radeon 680M y 780M, se ofrecen como experimentales y nunca son la opción propuesta: ROCm no las soporta oficialmente, la aplicación las presenta como la generación de su familia (<code>HSA_OVERRIDE_GFX_VERSION</code>) y el instalador pide confirmación antes de descargar la imagen, que es más grande. Una GPU anterior, como los gráficos integrados de un Ryzen 5000U, no se ofrece e Immich deja el reconocimiento en la CPU"],
["NVIDIA", "<code>nvidia-smi</code> y <code>nvidia-container-cli</code>", "GPU, UUID, bus PCI, versión del driver, Toolkit, nodos <code>/dev/nvidia*</code>, binarios y librerías"],
["Coral PCIe/M.2", "<code>/dev/apex_N</code> y su enlace en <code>/sys/dev/char/MAJOR:MINOR</code>", "Nodo de caracteres, major/minor, propietario, GID y permisos"],
["USB y serie", "<code>/dev/ttyUSB*</code>, <code>/dev/ttyACM*</code> o <code>/dev/bus/usb/BBB/DDD</code>", "Nodo de caracteres; en USB también fabricante, producto y número de serie cuando sysfs los publica"],
["KVM, TUN, FUSE, vídeo y SCSI genérico", "<code>/dev/kvm</code>, <code>/dev/net/tun</code>, <code>/dev/fuse</code>, <code>/dev/videoN</code> o <code>/dev/sgN</code>", "Ruta admitida, tipo de nodo y permisos efectivos"],
["Unidad óptica", "<code>/dev/srN</code>", "Un dispositivo de bloques"]
[
"Intel/AMD DRM",
"<code>/dev/dri/renderD*</code> y <code>/sys/class/drm/NODE/device/vendor</code>",
"Un dispositivo de caracteres con fabricante <code>0x8086</code> (Intel) o <code>0x1002</code> (AMD)"
],
[
"OpenCL AMD",
"El render node, más <code>/dev/kfd</code> cuando el perfil lo necesita",
"Existencia, tipo, fabricante, permisos y compatibilidad declarada"
],
[
"AMD ROCm",
"El nodo de render, <code>/dev/kfd</code> y la generación que declara el driver de cómputo en <code>/sys/class/kfd/kfd/topology/nodes/*/properties</code>",
"Una generación para la que la imagen ROCm de la aplicación trae kernels, las GPU RDNA2 que incluye y las posteriores, se ofrece tal cual. Las demás GPU de esas familias, como las Radeon 680M y 780M, se ofrecen como experimentales y nunca son la opción propuesta: ROCm no las soporta oficialmente, la aplicación las presenta como la generación de su familia (<code>HSA_OVERRIDE_GFX_VERSION</code>) y el instalador pide confirmación antes de descargar la imagen, que es más grande. Una GPU anterior, como los gráficos integrados de un Ryzen 5000U, no se ofrece e Immich deja el reconocimiento en la CPU"
],
[
"NVIDIA",
"<code>nvidia-smi</code> y <code>nvidia-container-cli</code>",
"GPU, UUID, bus PCI, versión del driver, Toolkit, nodos <code>/dev/nvidia*</code>, binarios y librerías"
],
[
"Coral PCIe/M.2",
"<code>/dev/apex_N</code> y su enlace en <code>/sys/dev/char/MAJOR:MINOR</code>",
"Nodo de caracteres, major/minor, propietario, GID y permisos"
],
[
"USB y serie",
"<code>/dev/ttyUSB*</code>, <code>/dev/ttyACM*</code> o <code>/dev/bus/usb/BBB/DDD</code>",
"Nodo de caracteres; en USB también fabricante, producto y número de serie cuando sysfs los publica"
],
[
"KVM, TUN, FUSE, vídeo y SCSI genérico",
"<code>/dev/kvm</code>, <code>/dev/net/tun</code>, <code>/dev/fuse</code>, <code>/dev/videoN</code> o <code>/dev/sgN</code>",
"Ruta admitida, tipo de nodo y permisos efectivos"
],
[
"Unidad óptica",
"<code>/dev/srN</code>",
"Un dispositivo de bloques"
]
]
}
}
@@ -79,12 +144,30 @@
{
"steps": {
"items": [
{ "title": "La plantilla ofrece sus perfiles", "body": "Por ejemplo solo CPU, Intel/AMD VA-API, OpenCL AMD, OpenCL Intel o NVIDIA. Las opciones pertenecen a la imagen, no a un menú común." },
{ "title": "Se elige un perfil", "body": "Define los nodos de dispositivo, el entorno, los mods o el runtime que necesita la aplicación." },
{ "title": "Se propone una ruta", "body": "Para DRM, <code>/dev/dri/renderD128</code>, que puede cambiarse en un host con varios render nodes. Para USB o serie se selecciona el nodo concreto." },
{ "title": "Validación", "body": "Se comprueban existencia, tipo, fabricante admitido, permisos y GID. Una discrepancia detiene la operación." },
{ "title": "Se escribe el contrato", "body": "Ruta, modo, GID, acceso de escritura y perfil quedan registrados para las actualizaciones y las recreaciones." },
{ "title": "Conexión y prueba", "body": "<code>pct set</code> añade la entrada <code>devN</code> y después se comprueba el acceso dentro del LXC. Las imágenes de LinuxServer se comprueban también como usuario <code>abc</code>." }
{
"title": "La plantilla ofrece sus perfiles",
"body": "Por ejemplo solo CPU, Intel/AMD VA-API, OpenCL AMD, OpenCL Intel o NVIDIA. Las opciones pertenecen a la imagen, no a un menú común."
},
{
"title": "Se elige un perfil",
"body": "Define los nodos de dispositivo, el entorno, los mods o el runtime que necesita la aplicación."
},
{
"title": "Se propone una ruta",
"body": "Para DRM, <code>/dev/dri/renderD128</code>, que puede cambiarse en un host con varios render nodes. Para USB o serie se selecciona el nodo concreto."
},
{
"title": "Validación",
"body": "Se comprueban existencia, tipo, fabricante admitido, permisos y GID. Una discrepancia detiene la operación."
},
{
"title": "Se escribe el contrato",
"body": "Ruta, modo, GID, acceso de escritura y perfil quedan registrados para las actualizaciones y las recreaciones."
},
{
"title": "Conexión y prueba",
"body": "<code>pct set</code> añade la entrada <code>devN</code> y después se comprueba el acceso dentro del LXC. Las imágenes de LinuxServer se comprueban también como usuario <code>abc</code>."
}
]
}
}
@@ -98,10 +181,22 @@
{
"codeGrid": {
"items": [
{ "title": "Intel/AMD VA-API", "code": "dev0: path=/dev/dri/renderD128,mode=0660,gid=993,deny-write=0" },
{ "title": "Coral PCIe/M.2", "code": "dev0: path=/dev/apex_0,mode=0660,gid=GID,deny-write=0" },
{ "title": "Un dispositivo USB concreto", "code": "dev0: path=/dev/bus/usb/003/004,mode=0660,gid=GID,deny-write=0" },
{ "title": "OpenCL AMD", "code": "dev0: path=/dev/dri/renderD128,mode=0660,gid=GID,deny-write=0\ndev1: path=/dev/kfd,mode=0660,gid=GID,deny-write=0" }
{
"title": "Intel/AMD VA-API",
"code": "dev0: path=/dev/dri/renderD128,mode=0660,gid=993,deny-write=0"
},
{
"title": "Coral PCIe/M.2",
"code": "dev0: path=/dev/apex_0,mode=0660,gid=GID,deny-write=0"
},
{
"title": "Un dispositivo USB concreto",
"code": "dev0: path=/dev/bus/usb/003/004,mode=0660,gid=GID,deny-write=0"
},
{
"title": "OpenCL AMD",
"code": "dev0: path=/dev/dri/renderD128,mode=0660,gid=GID,deny-write=0\ndev1: path=/dev/kfd,mode=0660,gid=GID,deny-write=0"
}
]
}
},
@@ -116,13 +211,37 @@
"blocks": [
{
"table": {
"headers": ["Perfil", "Traducción", "Se ofrece cuando"],
"headers": [
"Perfil",
"Configuración resultante",
"Se ofrece cuando"
],
"rows": [
["Intel/AMD VA-API", "Render node de <code>/dev/dri</code>", "La aplicación admite aceleración de vídeo"],
["OpenCL", "Render node, <code>/dev/kfd</code> si hace falta y el mod oficial", "La imagen o el perfil lo documentan"],
["NVIDIA", "Dispositivos y librerías del driver del host", "El host tiene un driver operativo y NVIDIA Container Toolkit"],
["Coral", "<code>/dev/apex_0</code> o el bus USB", "El perfil declara soporte de Coral (Frigate)"],
["USB, serie, FUSE", "Un dispositivo concreto, un árbol validado o una función LXC", "El contrato lo pide"]
[
"Intel/AMD VA-API",
"Render node de <code>/dev/dri</code>",
"La aplicación admite aceleración de vídeo"
],
[
"OpenCL",
"Render node, <code>/dev/kfd</code> si hace falta y el mod oficial",
"La imagen o el perfil lo documentan"
],
[
"NVIDIA",
"Dispositivos y librerías del driver del host",
"El host tiene un driver operativo y NVIDIA Container Toolkit"
],
[
"Coral",
"<code>/dev/apex_0</code> o el bus USB",
"El perfil declara soporte de Coral (Frigate)"
],
[
"USB, serie, FUSE",
"Un dispositivo concreto, un árbol validado o una función LXC",
"El contrato lo pide"
]
]
}
}
@@ -145,7 +264,9 @@
"p": "Estos dos comandos, en el host, muestran si el driver y el Toolkit están disponibles:"
},
{
"shell": { "code": "nvidia-smi -L\nnvidia-container-cli --version" }
"shell": {
"code": "nvidia-smi -L\nnvidia-container-cli --version"
}
},
{
"p": "En un host cuyo driver se instaló por otros medios, el Toolkit se instala desde el repositorio estable oficial:"
@@ -159,7 +280,9 @@
"p": "El inventario que usa OCI manager Apps es la salida de:"
},
{
"shell": { "code": "nvidia-container-cli list --device all --libraries --binaries --firmwares --ipcs" }
"shell": {
"code": "nvidia-container-cli list --device all --libraries --binaries --firmwares --ipcs"
}
},
{
"calloutInfo": {
@@ -170,10 +293,26 @@
{
"cards": {
"items": [
{ "icon": "cpu", "title": "Inventario desde el driver", "body": "<code>nvidia-container-cli</code> enumera los nodos de dispositivo, los binarios, el firmware y las librerías del driver instalado." },
{ "icon": "refresh", "title": "Sin versión fija", "body": "La plantilla no nombra archivos de librería. El perfil se genera a partir del host actual." },
{ "icon": "shield", "title": "Montajes de solo lectura", "body": "Las librerías del host se montan en solo lectura en lugar de copiarse dentro del contenedor." },
{ "icon": "hardDrive", "title": "Cambios de driver", "body": "Tras un cambio de driver, el inventario se genera de nuevo antes de que arranquen los LXC afectados." }
{
"icon": "cpu",
"title": "Inventario desde el driver",
"body": "<code>nvidia-container-cli</code> enumera los nodos de dispositivo, los binarios, el firmware y las librerías del driver instalado."
},
{
"icon": "refresh",
"title": "Sin versión fija",
"body": "La plantilla no nombra archivos de librería. El perfil se genera a partir del host actual."
},
{
"icon": "shield",
"title": "Montajes de solo lectura",
"body": "Las librerías del host se montan en solo lectura en lugar de copiarse dentro del contenedor."
},
{
"icon": "hardDrive",
"title": "Cambios de driver",
"body": "Tras un cambio de driver, el inventario se genera de nuevo antes de que arranquen los LXC afectados."
}
]
}
},
@@ -209,12 +348,32 @@
"blocks": [
{
"table": {
"headers": ["Petición", "Traducción", "Alcance"],
"headers": [
"Petición",
"Configuración resultante",
"Alcance"
],
"rows": [
["<code>/dev/dvb</code>, <code>/dev/snd</code> o <code>/dev/bus/usb</code>", "Cada nodo de caracteres del árbol recibe su propia entrada <code>devN</code> con el modo y el GID del host", "Solo el árbol pedido, no el resto de <code>/dev</code>"],
["<code>/dev/fuse</code>", "El nodo y, cuando el perfil lo necesita, la función <code>fuse=1</code>", "FUSE por sí solo no publica montajes a otros LXC"],
["<code>/dev/net/tun</code>", "Una entrada <code>devN</code> en la misma ruta dentro del LXC", "La configuración de la VPN o de la red queda en la aplicación"],
["<code>/dev/kvm</code>", "Una entrada <code>devN</code> validada", "Solo se ofrece cuando el contrato lo pide"]
[
"<code>/dev/dvb</code>, <code>/dev/snd</code> o <code>/dev/bus/usb</code>",
"Cada nodo de caracteres del árbol recibe su propia entrada <code>devN</code> con el modo y el GID del host",
"Solo el árbol pedido, no el resto de <code>/dev</code>"
],
[
"<code>/dev/fuse</code>",
"El nodo y, cuando el perfil lo necesita, la función <code>fuse=1</code>",
"FUSE por sí solo no publica montajes a otros LXC"
],
[
"<code>/dev/net/tun</code>",
"Una entrada <code>devN</code> en la misma ruta dentro del LXC",
"La configuración de la VPN o de la red queda en la aplicación"
],
[
"<code>/dev/kvm</code>",
"Una entrada <code>devN</code> validada",
"Solo se ofrece cuando el contrato lo pide"
]
]
}
}
+125 -40
View File
@@ -1,11 +1,11 @@
{
"meta": {
"title": "OCI manager Apps | ProxMenux",
"description": "Imágenes OCI oficiales ejecutadas como contenedores LXC nativos de Proxmox VE, con datos persistentes, dispositivos, aplicaciones multicontenedor y actualizaciones transaccionales."
"description": "Ejecuta imágenes OCI oficiales como contenedores LXC nativos de Proxmox VE, con datos persistentes, acceso a dispositivos, aplicaciones con varios contenedores y actualizaciones transaccionales."
},
"header": {
"title": "OCI manager Apps",
"description": "Las imágenes OCI oficiales se ejecutan como contenedores LXC nativos de Proxmox VE. La imagen sigue siendo la que publica su responsable; ProxMenux reproduce el entorno que Docker Compose habría creado a su alrededor.",
"description": "Las imágenes OCI oficiales se ejecutan como contenedores LXC nativos de Proxmox VE. Se utiliza la misma imagen que publica su desarrollador; ProxMenux reproduce el entorno que Docker Compose habría creado a su alrededor.",
"section": "OCI manager Apps"
},
"sections": [
@@ -15,34 +15,43 @@
{
"calloutInfo": {
"title": "Una imagen OCI, un LXC nativo",
"body": "Dentro de los contenedores no se ejecuta ningún motor Docker. Proxmox VE importa el sistema de archivos de la imagen y sus metadatos OCI, y la aplicación pasa a ser el proceso principal de un LXC nativo, gestionado con las mismas herramientas que cualquier otro contenedor del nodo."
"body": "No se ejecuta Docker Engine dentro de los contenedores. Proxmox VE importa el sistema de archivos de la imagen y sus metadatos OCI; la aplicación pasa a ser el proceso principal de un LXC nativo, administrado con las mismas herramientas que cualquier otro contenedor del nodo."
}
},
{
"flow": {
"nodes": [
{ "label": "Origen", "detail": "Imagen OCI\nCompose y documentación" },
{ "label": "ProxMenux", "detail": "Contrato JSON\nvalidación y plan" },
{ "label": "Proxmox VE", "detail": "LXC nativo\nvolúmenes y dispositivos" }
{
"label": "Origen",
"detail": "Imagen OCI\nCompose y documentación"
},
{
"label": "ProxMenux",
"detail": "Contrato JSON\nvalidación y planificación"
},
{
"label": "Proxmox VE",
"detail": "LXC nativo\nvolúmenes y dispositivos"
}
],
"caption": "La aplicación no se reconstruye: su entorno se reproduce de forma declarativa."
"caption": "Se utiliza la aplicación original; su entorno se define de forma declarativa y se reproduce."
}
}
]
},
{
"id": "where",
"title": "Dónde se encuentra",
"intro": "OCI manager Apps se abre desde la opción <strong>OCI manager Apps (Technology Preview)</strong> del menú principal de ProxMenux, en el nodo Proxmox y como root. Su primera pantalla ofrece:",
"title": "Dónde encontrarlo",
"intro": "OCI manager Apps se abre desde la opción <strong>OCI manager Apps (Technology Preview)</strong> del menú principal de ProxMenux, en el nodo Proxmox y como root. La primera pantalla ofrece:",
"blocks": [
{
"list": {
"items": [
"<strong>Buscar aplicaciones</strong>: búsqueda por nombre en todo el catálogo.",
"<strong>Todas las aplicaciones</strong>: el catálogo completo, con el número de aplicaciones.",
"<strong>Gestionar aplicaciones OCI instaladas</strong>: actualizar, modificar, eliminar o recuperar lo instalado.",
"<strong>Cuentas de registro</strong>: las cuentas con las que se instalan y actualizan imágenes de registros privados.",
"<strong>Instalar una imagen que no está en el catálogo</strong>: traducción de un archivo Compose, un comando <code>docker run</code> o una referencia de imagen.",
"<strong>Buscar aplicaciones</strong>: busca por nombre en todo el catálogo.",
"<strong>Todas las aplicaciones</strong>: muestra el catálogo completo y su número de aplicaciones.",
"<strong>Gestionar aplicaciones OCI instaladas</strong>: actualiza, modifica, elimina o recupera las aplicaciones que ya has instalado.",
"<strong>Cuentas de registros</strong>: administra las cuentas utilizadas para instalar y actualizar imágenes de registros privados.",
"<strong>Instalar una imagen que no esté en el catálogo</strong>: adapta un archivo Compose, un comando <code>docker run</code> o una referencia de imagen.",
"Las categorías del catálogo, cada una con su número de aplicaciones."
]
}
@@ -50,40 +59,72 @@
{
"figure": {
"src": "/oci-manager/main-menu.png",
"alt": "Pantalla principal de OCI manager Apps con la búsqueda, todas las aplicaciones, la gestión, la imagen propia y las categorías del catálogo",
"alt": "Pantalla principal de OCI manager Apps con búsqueda, listado completo, gestión de aplicaciones, imágenes fuera del catálogo y categorías.",
"caption": "Pantalla principal de OCI manager Apps."
}
},
{
"p": "Al seleccionar una aplicación se muestra su descripción, la imagen que ejecuta y dos modos de instalación: <strong>Instalar con la configuración predeterminada</strong>, que pregunta solo lo que decide toda instalación (almacenamiento, dónde van los datos, dirección e inicio), e <strong>Instalar con la configuración avanzada</strong>, que abre cada decisión en orden: VMID y recursos, el almacenamiento de cada ruta, el bridge y los dispositivos."
"p": "Al seleccionar una aplicación se muestran su descripción, la imagen que utiliza y dos modos de instalación. <strong>Instalar con ajustes predeterminados</strong> solo pregunta lo esencial de cada instalación: almacenamiento, ubicación de los datos, dirección y arranque. <strong>Instalar con ajustes avanzados</strong> recorre todas las decisiones en orden: VMID y recursos, almacenamiento de cada ruta, puente de red y dispositivos."
},
{
"p": "Una aplicación probada en real muestra <strong>Verificado</strong> en esa vista y aparece marcada con ✓ en las listas, tanto si se probó en el laboratorio de ProxMenux como si la probó la comunidad."
"p": "Las aplicaciones que se han probado realmente muestran <strong>Verificado</strong> en esa vista y una marca ✓ en las listas, tanto si la prueba se hizo en el laboratorio de ProxMenux como si la realizó la comunidad."
}
]
},
{
"id": "beta",
"title": "Por qué es una Technology Preview",
"title": "Por qué lleva la etiqueta Technology Preview",
"blocks": [
{ "p": "OCI manager Apps lleva la etiqueta <strong>Technology Preview</strong> que Proxmox VE da a los contenedores de aplicación creados a partir de imágenes OCI, introducidos en Proxmox VE 9.1. Se refiere a aquello sobre lo que funciona OCI manager Apps, no al motor de ProxMenux: el comportamiento de esos contenedores todavía puede cambiar entre versiones de Proxmox VE. La etiqueta se mantiene hasta que Proxmox VE dé ese soporte por estable." },
{ "p": "El motor de OCI manager Apps (instalación, actualización, modificación, recreación, backups, restauración, migración y vigilancia) está probado en el laboratorio de ProxMenux. Cada aplicación se prueba por separado: las que se han probado de verdad muestran <strong>Verified</strong> y llevan una ✓ en las listas." }
{
"p": "OCI manager Apps mantiene la etiqueta <strong>Technology Preview</strong> que Proxmox VE asigna a los contenedores de aplicaciones creados a partir de imágenes OCI, cuyo soporte se introdujo en Proxmox VE 9.1. La etiqueta se refiere a la tecnología sobre la que funciona OCI manager Apps, no al motor de ProxMenux: el comportamiento de estos contenedores puede cambiar entre versiones de Proxmox VE. Se mantendrá hasta que Proxmox VE considere estable ese soporte."
},
{
"p": "El motor de OCI manager Apps se prueba en el laboratorio de ProxMenux: instalación, actualización, modificación, recreación, backups, restauración, migración y vigilancia. Cada aplicación se verifica por separado. Las que se han probado realmente muestran <strong>Verificado</strong> y llevan un ✓ en las listas."
}
]
},
{
"id": "translation",
"title": "Lo que Docker expresa y en qué lo convierte OCI manager Apps",
"title": "Cómo describe Docker los requisitos y cómo los aplica OCI manager Apps",
"blocks": [
{
"table": {
"headers": ["Necesidad", "Docker la expresa como", "OCI manager Apps la convierte en"],
"headers": [
"Requisito",
"Cómo lo expresa Docker",
"Cómo lo aplica OCI manager Apps"
],
"rows": [
["Ejecutar la aplicación", "<code>image</code>, <code>entrypoint</code>, <code>command</code>", "rootfs OCI y proceso principal del LXC"],
["Conservar la configuración", "<code>volumes: /config</code>", "un disco <code>mpN</code> persistente incluido en el backup, o un directorio del host"],
["Publicar el servicio", "<code>ports</code>", "una dirección propia del LXC y la URL de acceso al servicio"],
["Usar hardware", "<code>devices</code>, <code>group_add</code>", "entradas <code>devN</code> con el GID efectivo del host y un perfil validado"],
["Conectar dependencias", "<code>networks</code>, <code>depends_on</code>", "un bridge privado, direcciones fijas, orden de arranque y healthchecks"],
["Actualizar", "<code>pull</code> y recrear", "un rootfs nuevo con el mismo contrato persistente"]
[
"Ejecutar la aplicación",
"<code>image</code>, <code>entrypoint</code>, <code>command</code>",
"El rootfs de la imagen OCI y el proceso principal del LXC"
],
[
"Conservar la configuración",
"<code>volumes: /config</code>",
"Un volumen persistente <code>mpN</code> incluido en el backup, o bien un directorio del host."
],
[
"Publicar el servicio",
"<code>ports</code>",
"Una dirección propia para el LXC y la URL de acceso al servicio."
],
[
"Usar hardware",
"<code>devices</code>, <code>group_add</code>",
"Entradas <code>devN</code> con el GID efectivo del host y un perfil validado."
],
[
"Conectar las dependencias",
"<code>networks</code>, <code>depends_on</code>",
"Un puente de red privado, direcciones fijas, orden de arranque y comprobaciones de estado."
],
[
"Actualizar",
"Descargar con <code>pull</code> y recrear",
"Un rootfs nuevo que mantiene el mismo contrato de persistencia."
]
]
}
}
@@ -91,15 +132,31 @@
},
{
"id": "kept",
"title": "Qué se mantiene y qué cambia",
"title": "Qué se conserva y qué cambia",
"blocks": [
{
"cards": {
"items": [
{ "icon": "archive", "title": "Se mantiene", "body": "La imagen oficial, sus rutas internas, su entorno, su proceso de arranque y su documentación funcional." },
{ "icon": "boxes", "title": "Se adapta", "body": "El entorno de ejecución: red, persistencia, dispositivos, permisos y dependencias usan primitivas LXC nativas de Proxmox VE." },
{ "icon": "shield", "title": "No se traduce", "body": "Una clave de Compose sin equivalencia segura figura como bloqueo. Las plantillas con bloqueos no se ofrecen, y las opciones sensibles se confirman durante la instalación." },
{ "icon": "refresh", "title": "Se registra", "body": "Digest de la imagen, recursos, rutas, red, dispositivos y pertenencia a una pila quedan en el contrato de la instancia, que las actualizaciones y las recreaciones reproducen." }
{
"icon": "archive",
"title": "Se conserva",
"body": "La imagen oficial, sus rutas internas, su entorno, su proceso de arranque y su documentación de uso."
},
{
"icon": "boxes",
"title": "Se adapta",
"body": "El entorno de ejecución: la red, la persistencia, los dispositivos, los permisos y las dependencias utilizan los mecanismos nativos de LXC de Proxmox VE."
},
{
"icon": "shield",
"title": "Sin equivalente",
"body": "Una opción de Compose sin una equivalencia segura se registra como un impedimento para la instalación. Las plantillas con impedimentos no se ofrecen para instalar, y las opciones sensibles requieren confirmación durante el asistente."
},
{
"icon": "refresh",
"title": "Se registra",
"body": "El digest de la imagen, los recursos, las rutas, la red, los dispositivos y la pertenencia a una pila se guardan en el contrato de la instancia. Las actualizaciones y recreaciones reproducen ese contrato."
}
]
}
}
@@ -112,13 +169,41 @@
{
"next": {
"items": [
{ "label": "Cómo se traduce una imagen OCI", "href": "/docs/oci-manager/architecture", "tail": "de la imagen y su archivo Compose a un LXC nativo." },
{ "label": "Instalar una imagen que no está en el catálogo", "href": "/docs/oci-manager/custom-image", "tail": "Compose, docker run o una referencia de imagen." },
{ "label": "Datos, rutas y red", "href": "/docs/oci-manager/storage-network", "tail": "discos del contenedor, directorios del host, montajes Rclone y direcciones." },
{ "label": "Dispositivos y aceleración", "href": "/docs/oci-manager/hardware", "tail": "GPU, NVIDIA, Coral, USB y otros dispositivos." },
{ "label": "Aplicaciones multicontenedor", "href": "/docs/oci-manager/stacks", "tail": "aplicación, base de datos y caché como LXC coordinados." },
{ "label": "Instalar, actualizar y modificar", "href": "/docs/oci-manager/lifecycle", "tail": "el contrato de la instancia y sus operaciones." },
{ "label": "En ProxMenux Monitor", "href": "/docs/oci-manager/monitor", "tail": "versiones, actualizaciones, salida de consola y terminal." }
{
"label": "Cómo se adapta una imagen OCI",
"href": "/docs/oci-manager/architecture",
"tail": "De la imagen y su archivo Compose a un LXC nativo."
},
{
"label": "Instalar una imagen que no esté en el catálogo",
"href": "/docs/oci-manager/custom-image",
"tail": "Un archivo Compose, un comando docker run o una referencia de imagen."
},
{
"label": "Datos, rutas y red",
"href": "/docs/oci-manager/storage-network",
"tail": "Volúmenes del contenedor, directorios del host, montajes con rclone y direcciones."
},
{
"label": "Dispositivos y aceleración",
"href": "/docs/oci-manager/hardware",
"tail": "GPU, NVIDIA, Coral, USB y otros dispositivos."
},
{
"label": "Aplicaciones con varios contenedores",
"href": "/docs/oci-manager/stacks",
"tail": "Aplicación, base de datos y caché en varios LXC coordinados."
},
{
"label": "Instalar, actualizar y modificar",
"href": "/docs/oci-manager/lifecycle",
"tail": "El contrato de la instancia y sus operaciones."
},
{
"label": "En ProxMenux Monitor",
"href": "/docs/oci-manager/monitor",
"tail": "Versiones, actualizaciones, salida de consola y terminal."
}
]
}
}
@@ -18,7 +18,7 @@
},
{
"code": {
"code": "instances/\n└── 105/\n └── oci-compose.json\n ├── imagen y digest resuelto\n ├── recursos y red\n ├── entorno (secretos protegidos)\n ├── discos del contenedor y directorios del host\n ├── perfil de hardware y dispositivos\n ├── log de consola y modo de terminal\n └── pertenencia a una pila y ciclo de vida"
"code": "instances/\n└── 105/\n └── oci-compose.json\n ├── image and resolved digest\n ├── resources and network\n ├── environment (secrets protected)\n ├── container disks and host directories\n ├── hardware profile and devices\n ├── console log and terminal mode\n └── stack membership and lifecycle"
}
},
{
@@ -86,7 +86,7 @@
"registry": "Registro OCI",
"update": "Actualizar la instancia",
"resolve": "Resolver la etiqueta",
"verify": "Verificar el archivo y preflight",
"verify": "Verificar el archivo y realizar las comprobaciones previas",
"backup": "Detener y respaldar el CT",
"import": "Importar el rootfs nuevo",
"reapply": "Aplicar de nuevo el contrato",
@@ -215,7 +215,7 @@
{
"id": "restore",
"title": "Backup, restauración y otro host",
"intro": "Un backup hecho con vzdump o Proxmox Backup Server incluye el contenedor, sus discos y la copia de su contrato. Lo que la instalación guarda en el host no forma parte de él. <strong>Gestionar aplicaciones OCI instaladas</strong> detecta los contenedores restaurados en un host que no tiene su contrato, un Proxmox recién instalado u otro host, y ofrece registrarlos de nuevo.",
"intro": "Un backup hecho con vzdump o Proxmox Backup Server incluye el contenedor, los discos del contenedor seleccionados para el backup y la copia de su contrato. Lo que la instalación guarda en el host no forma parte de él. <strong>Gestionar aplicaciones OCI instaladas</strong> detecta los contenedores restaurados en un host que no tiene su contrato, un Proxmox recién instalado u otro host, y ofrece registrarlos de nuevo.",
"blocks": [
{
"steps": {
@@ -462,7 +462,7 @@
],
[
"Discos del contenedor",
"Proxmox los mueve con el contenedor. HA necesita que estén en un almacenamiento compartido."
"Proxmox los mueve con el contenedor. HA necesita sus datos disponibles en el nodo de destino, mediante almacenamiento compartido o una configuración de replicación compatible."
],
[
"Directorios del host y dispositivos",
@@ -52,7 +52,7 @@
},
{
"id": "app",
"title": "App",
"title": "Aplicación",
"intro": "La pestaña <appLink>App</appLink> ofrece la aplicación instalada como una detección, con el nombre, el logo, el puerto y el esquema del registro. Al registrarla se abre el editor con el método <strong>Imagen OCI (instalada por ProxMenux)</strong>, que no necesita configuración.",
"blocks": [
{
+200 -46
View File
@@ -4,7 +4,7 @@
"description": "Cómo convierte OCI manager Apps una aplicación con su base de datos y su caché en LXC nativos coordinados: plan, red privada, hook de dependencias, validación y actualizaciones transaccionales."
},
"header": {
"title": "Aplicaciones multicontenedor",
"title": "Aplicaciones con varios contenedores",
"description": "Una aplicación con su base de datos, su caché y otros servicios se convierte en varios LXC nativos coordinados, que se instalan y actualizan como uno solo.",
"section": "OCI manager Apps"
},
@@ -21,7 +21,14 @@
{
"mermaid": {
"chartCode": "flowchart LR\n C[\"Docker Compose\"] --> O[\"{{plan}}\"]\n O --> A[\"{{app}}<br/>{{appNet}}\"]\n O --> D[\"{{db}}<br/>{{private}}\"]\n O --> R[\"{{cache}}<br/>{{private}}\"]\n V1[(\"config\")] --> A\n V2[(\"database\")] --> D\n V3[(\"cache\")] --> R\n D --> A\n R --> A",
"labels": { "plan": "Plan de la pila", "app": "LXC de la aplicación", "appNet": "LAN + privada", "db": "LXC PostgreSQL", "cache": "LXC Valkey", "private": "privada" }
"labels": {
"plan": "Plan de la pila",
"app": "LXC de la aplicación",
"appNet": "LAN + privada",
"db": "LXC PostgreSQL",
"cache": "LXC Valkey",
"private": "privada"
}
}
}
]
@@ -35,14 +42,42 @@
},
{
"table": {
"headers": ["Elemento del plan", "Contenido", "Comprobado antes de crear nada"],
"headers": [
"Elemento del plan",
"Contenido",
"Comprobado antes de crear nada"
],
"rows": [
["Miembros", "Aplicación principal, base de datos, caché, aprendizaje automático y demás dependencias", "VMID únicos, roles conocidos y exactamente un miembro principal"],
["Imágenes", "Referencia rolling, arquitectura y digest resuelto de cada servicio", "Todas existen, admiten la arquitectura y superan la verificación de integridad OCI"],
["Red", "Bridge privado, subred, una dirección fija por servicio y acceso LAN para el miembro principal", "Sin colisión con bridges o subredes existentes y sin direcciones repetidas"],
["Persistencia", "Discos del contenedor, directorios del host, propietarios y backup", "Rutas sin solapamientos, almacenamiento disponible y permisos declarados"],
["Secretos", "Contraseña de la base de datos, claves de la aplicación y credenciales iniciales", "Se generan una vez y solo se entregan a los miembros que los usan"],
["Ciclo de vida", "Orden de arranque, orden de parada y una comprobación de salud por miembro", "La aplicación principal arranca la última y se detiene la primera"]
[
"Miembros",
"Aplicación principal, base de datos, caché, aprendizaje automático y demás dependencias",
"VMID únicos, roles conocidos y exactamente un miembro principal"
],
[
"Imágenes",
"Referencia rolling, arquitectura y digest resuelto de cada servicio",
"Todas existen, admiten la arquitectura y superan la verificación de integridad OCI"
],
[
"Red",
"Bridge privado, subred, una dirección fija por servicio y acceso LAN para el miembro principal",
"Sin colisión con bridges o subredes existentes y sin direcciones repetidas"
],
[
"Persistencia",
"Discos del contenedor, directorios del host, propietarios y backup",
"Rutas sin solapamientos, almacenamiento disponible y permisos declarados"
],
[
"Secretos",
"Contraseña de la base de datos, claves de la aplicación y credenciales iniciales",
"Se generan una vez y solo se entregan a los miembros que los usan"
],
[
"Ciclo de vida",
"Orden de arranque, orden de parada y una comprobación de salud por miembro",
"La aplicación principal arranca la última y se detiene la primera"
]
]
}
}
@@ -55,13 +90,34 @@
{
"steps": {
"items": [
{ "title": "Reservar todos los VMID", "body": "Se comprueban el inventario de Proxmox VE y el registro de instancias. No se adopta un CT existente ni se reutiliza un contrato que todavía pertenece a otra instancia." },
{ "title": "Preparar todas las imágenes", "body": "Todas las imágenes se resuelven, descargan y verifican antes de crear el primer contenedor." },
{ "title": "Crear cada rootfs", "body": "Se importan los metadatos OCI oficiales y se añaden la identidad de instancia de ProxMenux y el rol del miembro." },
{ "title": "Red privada", "body": "Se crean un bridge y una subred y cada miembro recibe su dirección fija; solo el miembro principal recibe además la interfaz de la LAN." },
{ "title": "Persistencia", "body": "Cada base de datos y configuración recibe su propio disco del contenedor; solo los datos destinados a compartirse usan directorios del host." },
{ "title": "Entorno", "body": "Se escriben los endpoints internos, los secretos compartidos y las variables de servicio. La aplicación llega a sus dependencias en sus direcciones privadas reservadas." },
{ "title": "Registro", "body": "Cada miembro registra su configuración nativa, los cambios del rootfs que las actualizaciones deben reproducir y su relación con la pila." }
{
"title": "Reservar todos los VMID",
"body": "Se comprueban el inventario de Proxmox VE y el registro de instancias. No se adopta un CT existente ni se reutiliza un contrato que todavía pertenece a otra instancia."
},
{
"title": "Preparar todas las imágenes",
"body": "Todas las imágenes se resuelven, descargan y verifican antes de crear el primer contenedor."
},
{
"title": "Crear cada rootfs",
"body": "Se importan los metadatos OCI oficiales y se añaden la identidad de instancia de ProxMenux y el rol del miembro."
},
{
"title": "Red privada",
"body": "Se crean un bridge y una subred y cada miembro recibe su dirección fija; solo el miembro principal recibe además la interfaz de la LAN."
},
{
"title": "Persistencia",
"body": "Cada base de datos y configuración recibe su propio disco del contenedor; solo los datos destinados a compartirse usan directorios del host."
},
{
"title": "Entorno",
"body": "Se escriben los endpoints internos, los secretos compartidos y las variables de servicio. La aplicación llega a sus dependencias en sus direcciones privadas reservadas."
},
{
"title": "Registro",
"body": "Cada miembro registra su configuración nativa, los cambios del rootfs que las actualizaciones deben reproducir y su relación con la pila."
}
]
}
}
@@ -74,20 +130,48 @@
"blocks": [
{
"table": {
"headers": ["Servicio", "Comprobación", "Qué demuestra"],
"headers": [
"Servicio",
"Comprobación",
"Qué demuestra"
],
"rows": [
["PostgreSQL", "<code>pg_isready</code> en el CT con el host, el usuario y la base de datos esperados", "El servidor acepta conexiones para la base de datos configurada"],
["Redis / Valkey", "<code>redis-cli</code> o <code>valkey-cli</code> <code>PING</code> contra su dirección privada", "El broker escucha y responde"],
["Aprendizaje automático de Immich", "HTTP <code>GET /ping</code>, más una comprobación del runtime GPU seleccionado", "El servicio responde y la aceleración pedida no ha pasado a CPU"],
["Nextcloud", "<code>GET /status.php</code> con <code>installed=true</code>, <code>maintenance=false</code> y <code>needsDbUpgrade=false</code>", "La inicialización terminó sin migraciones pendientes"],
["Paperless-ngx / Tandoor", "HTTP en la dirección de la LAN y el puerto real del servicio", "El frontend y sus dependencias sirven la aplicación"],
["Aplicación principal", "El endpoint de su plantilla, por ejemplo <code>/api/server/ping</code> en Immich", "La pila completa funciona a través de la aplicación que usa las dependencias"]
[
"PostgreSQL",
"<code>pg_isready</code> en el CT con el host, el usuario y la base de datos esperados",
"El servidor acepta conexiones para la base de datos configurada"
],
[
"Redis / Valkey",
"<code>redis-cli</code> o <code>valkey-cli</code> <code>PING</code> contra su dirección privada",
"El broker escucha y responde"
],
[
"Aprendizaje automático de Immich",
"HTTP <code>GET /ping</code>, más una comprobación del runtime GPU seleccionado",
"El servicio responde y la aceleración pedida no ha pasado a CPU"
],
[
"Nextcloud",
"<code>GET /status.php</code> con <code>installed=true</code>, <code>maintenance=false</code> y <code>needsDbUpgrade=false</code>",
"La inicialización terminó sin migraciones pendientes"
],
[
"Paperless-ngx / Tandoor",
"HTTP en la dirección de la LAN y el puerto real del servicio",
"El frontend y sus dependencias sirven la aplicación"
],
[
"Aplicación principal",
"El endpoint de su plantilla, por ejemplo <code>/api/server/ping</code> en Immich",
"La pila completa funciona a través de la aplicación que usa las dependencias"
]
]
}
},
{
"calloutWarning": {
"title": "running no significa healthy",
"title": "En ejecución no significa que funcione correctamente",
"body": "El estado running solo indica que existe el proceso del LXC. Cuando el servicio ofrece una comprobación mejor, se usa una comprobación exec o HTTP con un tiempo límite. Si un miembro se detiene o no supera su comprobación, la pila no se declara instalada."
}
}
@@ -103,8 +187,14 @@
{
"codeGrid": {
"items": [
{ "title": "Configuración del CT principal", "code": "hookscript: local:snippets/proxmenux-stack-dependencies.sh" },
{ "title": "Contrato privado (ejemplo)", "code": "/etc/pve/priv/proxmenux-stack-VMID.json\n{\n \"schema\": 1,\n \"stack\": \"immich\",\n \"dependencies\": [\n {\"vmid\": 107, \"label\": \"PostgreSQL\", \"healthcheck\": {...}},\n {\"vmid\": 108, \"label\": \"Valkey\", \"healthcheck\": {...}},\n {\"vmid\": 106, \"label\": \"Machine Learning\", \"healthcheck\": {...}}\n ]\n}" }
{
"title": "Configuración del CT principal",
"code": "hookscript: local:snippets/proxmenux-stack-dependencies.sh"
},
{
"title": "Contrato privado (ejemplo)",
"code": "/etc/pve/priv/proxmenux-stack-VMID.json\n{\n \"schema\": 1,\n \"stack\": \"immich\",\n \"dependencies\": [\n {\"vmid\": 107, \"label\": \"PostgreSQL\", \"healthcheck\": {...}},\n {\"vmid\": 108, \"label\": \"Valkey\", \"healthcheck\": {...}},\n {\"vmid\": 106, \"label\": \"Machine Learning\", \"healthcheck\": {...}}\n ]\n}"
}
]
}
},
@@ -121,12 +211,30 @@
{
"steps": {
"items": [
{ "title": "Proxmox VE llama a pre-start", "body": "Antes de arrancar el CT principal, el hook se ejecuta con su VMID y la fase del ciclo de vida." },
{ "title": "Un bloqueo por pila", "body": "<code>flock</code> sobre <code>/run/lock/proxmenux-stack-VMID.lock</code> impide dos secuencias de arranque a la vez." },
{ "title": "Se lee y valida el contrato", "body": "Se exigen un esquema conocido, dependencias numéricas, etiquetas, una comprobación exec, http o running y un tiempo límite positivo." },
{ "title": "Dependencias en orden", "body": "Cada CT debe existir; uno detenido se arranca y uno que ya está en marcha no se reinicia." },
{ "title": "Espera de salud", "body": "La comprobación se ejecuta cada dos segundos y se confirma además que el CT sigue en marcha." },
{ "title": "Arranca el CT principal", "body": "Cuando todas las dependencias están listas, pre-start termina y Proxmox VE arranca la aplicación." }
{
"title": "Proxmox VE llama a pre-start",
"body": "Antes de arrancar el CT principal, el hook se ejecuta con su VMID y la fase del ciclo de vida."
},
{
"title": "Un bloqueo por pila",
"body": "<code>flock</code> sobre <code>/run/lock/proxmenux-stack-VMID.lock</code> impide dos secuencias de arranque a la vez."
},
{
"title": "Se lee y valida el contrato",
"body": "Se exigen un esquema conocido, dependencias numéricas, etiquetas, una comprobación exec, http o running y un tiempo límite positivo."
},
{
"title": "Dependencias en orden",
"body": "Cada CT debe existir; uno detenido se arranca y uno que ya está en marcha no se reinicia."
},
{
"title": "Esperar a que el servicio esté listo",
"body": "La comprobación se ejecuta cada dos segundos y se confirma además que el CT sigue en marcha."
},
{
"title": "Arranca el CT principal",
"body": "Cuando todas las dependencias están listas, pre-start termina y Proxmox VE arranca la aplicación."
}
]
}
},
@@ -138,11 +246,27 @@
},
{
"table": {
"headers": ["Tipo", "Ejemplo", "Arranques posteriores"],
"headers": [
"Tipo",
"Ejemplo",
"Arranques posteriores"
],
"rows": [
["Pila dependiente", "Immich, Nextcloud, aplicación con PostgreSQL", "El hook del CT principal arranca las dependencias y las espera"],
["Suite de aplicaciones", "Suite Arr", "Sin miembro principal: cada LXC sigue su propio <code>onboot</code>"],
["Aplicación simple", "Jellyfin", "Proxmox VE arranca directamente ese LXC"]
[
"Pila dependiente",
"Immich, Nextcloud, aplicación con PostgreSQL",
"El hook del CT principal arranca las dependencias y las espera"
],
[
"Suite de aplicaciones",
"Suite Arr",
"Sin miembro principal: cada LXC sigue su propio <code>onboot</code>"
],
[
"Aplicación simple",
"Jellyfin",
"Proxmox VE arranca directamente ese LXC"
]
]
}
}
@@ -176,21 +300,51 @@
{
"steps": {
"items": [
{ "title": "Cualquier miembro", "body": "El contrato del miembro indica el VMID principal y la lista completa de miembros." },
{ "title": "La pila es reproducible", "body": "Se validan identidades, contratos, hook, adaptaciones y la existencia de una reproducción coordinada para esa receta." },
{ "title": "Primero las imágenes", "body": "La aplicación no se detiene hasta que todos los digests están resueltos, descargados y verificados." },
{ "title": "Detener y respaldar el conjunto", "body": "Los backups nativos verificados se toman con la pila detenida, de modo que aplicación y bases de datos corresponden al mismo momento." },
{ "title": "Actualizar y comprobar cada miembro", "body": "Adaptación, red, montajes, secretos y dispositivos se aplican de nuevo antes de la comprobación de salud de cada miembro." },
{ "title": "Publicar o recuperar todo", "body": "Los contratos nuevos solo se publican cuando todos los miembros pasan. Si uno falla, se restauran todos." }
{
"title": "Cualquier miembro",
"body": "El contrato del miembro indica el VMID principal y la lista completa de miembros."
},
{
"title": "La pila es reproducible",
"body": "Se validan identidades, contratos, hook, adaptaciones y la existencia de una reproducción coordinada para esa receta."
},
{
"title": "Primero las imágenes",
"body": "La aplicación no se detiene hasta que todos los digests están resueltos, descargados y verificados."
},
{
"title": "Detener y respaldar el conjunto",
"body": "Los backups nativos verificados se toman con la pila detenida, de modo que aplicación y bases de datos corresponden al mismo momento."
},
{
"title": "Actualizar y comprobar cada miembro",
"body": "Adaptación, red, montajes, secretos y dispositivos se aplican de nuevo antes de la comprobación de salud de cada miembro."
},
{
"title": "Publicar o recuperar todo",
"body": "Los contratos nuevos solo se publican cuando todos los miembros pasan. Si uno falla, se restauran todos."
}
]
}
},
{
"table": {
"headers": ["Modificar", "Qué cambia", "Qué se conserva"],
"headers": [
"Modificar",
"Qué cambia",
"Qué se conserva"
],
"rows": [
["Rutas y dispositivos extra", "Se añaden al contenedor de la aplicación o se eliminan de él, y el contenedor se reinicia. No se reconstruye nada", "Los datos de la aplicación, su base de datos y los demás contenedores"],
["Qué ejecuta el reconocimiento (Immich)", "El contenedor Machine learning toma la imagen y los dispositivos de la CPU o de una GPU del host. Toda la aplicación se detiene y se actualiza, como en una actualización", "La caché de modelos, la biblioteca y la base de datos. Si algo falla, se restauran los contenedores y la opción anteriores"]
[
"Rutas y dispositivos extra",
"Se añaden al contenedor de la aplicación o se eliminan de él, y el contenedor se reinicia. No se reconstruye nada",
"Los datos de la aplicación, su base de datos y los demás contenedores"
],
[
"Qué ejecuta el reconocimiento (Immich)",
"El contenedor Machine learning toma la imagen y los dispositivos de la CPU o de una GPU del host. Toda la aplicación se detiene y se actualiza, como en una actualización",
"La caché de modelos, la biblioteca y la base de datos. Si algo falla, se restauran los contenedores y la opción anteriores"
]
]
}
},
@@ -220,7 +374,7 @@
"stop": "Detener, primero el principal",
"backup": "Backup verificado de cada CT",
"replace": "Sustituir el rootfs",
"healthy": "¿Todos sanos?",
"healthy": "¿Todos funcionan correctamente?",
"yes": "Sí",
"no": "No",
"commit": "Publicar los contratos",
@@ -1,11 +1,11 @@
{
"meta": {
"title": "Datos, rutas y red | ProxMenux",
"description": "Cómo conserva OCI manager Apps los datos de un contenedor OCI: discos del contenedor, directorios del host, montajes Rclone, direcciones y redes privadas."
"description": "Cómo conserva OCI manager Apps los datos de un contenedor OCI: discos del contenedor, directorios del host, montajes con rclone, direcciones y redes privadas."
},
"header": {
"title": "Datos, rutas y red",
"description": "Qué vive en el rootfs, qué sobrevive a su sustitución, cómo se comparten datos entre contenedores y cómo obtiene cada contenedor su dirección.",
"description": "Qué se guarda en el rootfs, qué sobrevive a su sustitución, cómo se comparten datos entre contenedores y cómo obtiene cada uno su dirección.",
"section": "OCI manager Apps"
},
"sections": [
@@ -14,8 +14,8 @@
"blocks": [
{
"calloutInfo": {
"title": "La persistencia se decide antes de que exista el LXC",
"body": "Los volúmenes que publican la imagen y su archivo Compose se leen antes de crear el contenedor. Cada ruta que debe sobrevivir a una actualización se convierte en un punto de montaje independiente del rootfs, de modo que el rootfs solo contiene lo que pertenece a la imagen y puede sustituirse."
"title": "La persistencia se decide antes de crear el LXC",
"body": "Antes de crear el contenedor se leen los volúmenes declarados por la imagen y por su archivo Compose. Cada ruta que deba conservarse tras una actualización se convierte en un punto de montaje independiente del rootfs. Así, el rootfs solo contiene lo que pertenece a la imagen y puede sustituirse."
}
}
]
@@ -23,17 +23,35 @@
{
"id": "questions",
"title": "Qué pregunta el instalador",
"intro": "La plantilla aporta las rutas que necesita la aplicación. Cada una se sitúa en un disco del contenedor o en un directorio del host, y pueden añadirse más rutas antes del resumen.",
"intro": "La plantilla proporciona las rutas que necesita la aplicación. Cada una se ubica en un disco del contenedor o en un directorio del host, y se pueden añadir más rutas antes del resumen.",
"blocks": [
{
"steps": {
"items": [
{ "title": "Rutas requeridas", "body": "Se enumeran <code>/config</code>, <code>/data</code>, bibliotecas, descargas y cualquier volumen que declare la aplicación." },
{ "title": "Ubicación", "body": "Cada ruta se sitúa en un disco del contenedor o en un directorio existente del host." },
{ "title": "Almacenamiento y tamaño", "body": "Un disco del contenedor se crea en un almacenamiento de Proxmox VE con el tamaño indicado. La instalación por defecto usa <code>local-lvm</code>; la instalación avanzada pregunta el almacenamiento de cada ruta justo antes de su tamaño y propone el del rootfs. Aparece como <code>vm-VMID-disk-N</code> y se conecta como <code>mpN</code>." },
{ "title": "Directorio del host", "body": "Un directorio del host se indica por su ruta. Si no existe, se crea con el propietario que mapea el contenedor." },
{ "title": "Rutas adicionales", "body": "Antes de instalar pueden añadirse más pares de ruta del host o volumen y ruta del contenedor." },
{ "title": "Resumen", "body": "La relación completa se muestra antes de crear el CT y se guarda en su contrato de instancia." }
{
"title": "Rutas necesarias",
"body": "Se enumeran <code>/config</code>, <code>/data</code>, bibliotecas, descargas y todos los volúmenes declarados por la aplicación."
},
{
"title": "Ubicación",
"body": "Cada ruta se ubica en un disco del contenedor o en un directorio del host ya existente."
},
{
"title": "Almacenamiento y tamaño",
"body": "Se crea un disco del contenedor en un almacenamiento de Proxmox VE con el tamaño indicado. La instalación predeterminada usa <code>local-lvm</code>; la avanzada pregunta el almacenamiento de cada ruta justo antes de su tamaño y propone el del rootfs. El disco aparece como <code>vm-VMID-disk-N</code> y se conecta como <code>mpN</code>."
},
{
"title": "Directorio del host",
"body": "El directorio del host se indica mediante su ruta. Si no existe, se crea con el usuario al que se mapea el del contenedor como propietario."
},
{
"title": "Rutas adicionales",
"body": "Antes de instalar se pueden añadir más pares de ruta o volumen del host y ruta dentro del contenedor."
},
{
"title": "Resumen",
"body": "Antes de crear el CT se muestra la correspondencia completa de rutas y se guarda en el contrato de la instancia."
}
]
}
}
@@ -45,44 +63,85 @@
"blocks": [
{
"table": {
"headers": ["Propiedad", "Disco del contenedor", "Directorio del host"],
"headers": [
"Propiedad",
"Disco del contenedor",
"Directorio del host"
],
"rows": [
["En la configuración", "<code>mpN: STORAGE:vm-VMID-disk-N,mp=/config,backup=1,size=16G</code>", "<code>mpN: /mnt/oci-shared/media,mp=/data/media</code>"],
["Backup del contenedor (vzdump)", "Incluido, con <code>backup=1</code>", "No incluido"],
["Tamaño", "Fijo; crece con un redimensionado del punto de montaje", "El espacio libre del sistema de archivos o dataset del host"],
["Otros contenedores", "Solo lo monta su propio contenedor", "El mismo directorio puede montarse en varios contenedores"],
["Snapshots y restauración", "Los gestiona Proxmox VE junto con el CT", "Se gestionan en el almacenamiento del host"],
["Al eliminar la aplicación", "Se elimina con el contenedor", "Se conserva, con su contenido"],
["Al mover el CT a otro nodo", "Se mueve con el CT", "La misma ruta debe existir en el otro nodo"]
[
"En la configuración",
"<code>mpN: STORAGE:vm-VMID-disk-N,mp=/config,backup=1,size=16G</code>",
"<code>mpN: /mnt/oci-shared/media,mp=/data/media</code>"
],
[
"Backup del contenedor (vzdump)",
"Incluido, con <code>backup=1</code>",
"No incluido"
],
[
"Tamaño",
"Fijo; se amplía redimensionando el punto de montaje",
"El espacio libre del sistema de archivos o dataset del host"
],
[
"Otros contenedores",
"Solo lo monta el contenedor al que pertenece",
"El mismo directorio se puede montar en varios contenedores"
],
[
"Snapshots y restauración",
"Los gestiona Proxmox VE junto con el CT",
"Se gestionan en el almacenamiento del host"
],
[
"Al eliminar la aplicación",
"Se elimina con el contenedor",
"Se conserva con su contenido"
],
[
"Al mover el CT a otro nodo",
"Se mueve con el CT",
"La misma ruta debe existir en el otro nodo"
]
]
}
},
{
"p": "El rootfs queda reservado para los binarios y el contenido de la imagen. Una actualización o una recreación lo sustituye sin tocar ninguno de los dos tipos de punto de montaje."
"p": "El rootfs se reserva para los binarios y el contenido de la imagen. Una actualización o recreación lo sustituye sin tocar ninguno de los dos tipos de punto de montaje."
}
]
},
{
"id": "example",
"title": "Ejemplo: un contenedor con las dos ubicaciones",
"title": "Ejemplo: un contenedor con ambas ubicaciones",
"blocks": [
{
"code": {
"title": "Jellyfin instalado como CT 151 en local-lvm (extracto)",
"code": "rootfs: local-lvm:vm-151-disk-0,size=8G\n# Disco del contenedor, incluido en el backup del CT\nmp0: local-lvm:vm-151-disk-1,mp=/config,backup=1,size=16G\n\n# Directorio del host, fuera del backup del CT\nmp1: /mnt/oci-shared/media,mp=/data/media"
"title": "Jellyfin instalado como CT 151 en local-lvm (fragmento)",
"code": "rootfs: local-lvm:vm-151-disk-0,size=8G\n# Container disk, part of the CT backup\nmp0: local-lvm:vm-151-disk-1,mp=/config,backup=1,size=16G\n\n# Host directory, outside the CT backup\nmp1: /mnt/oci-shared/media,mp=/data/media"
}
},
{
"p": "Una actualización o una recreación sustituye solo el rootfs: <code>mp0</code> conserva usuarios, bibliotecas y ajustes, y <code>mp1</code> sigue mostrando los mismos archivos multimedia. Restaurar el backup del CT devuelve <code>/config</code>; el directorio multimedia se restaura, si hace falta, desde el backup del almacenamiento del host."
"p": "Una actualización o recreación solo sustituye el rootfs: <code>mp0</code> conserva usuarios, bibliotecas y ajustes, y <code>mp1</code> sigue mostrando los mismos archivos multimedia. Al restaurar el backup del CT se recupera <code>/config</code>; si hace falta restaurar el directorio multimedia, se utiliza el backup del almacenamiento del host."
},
{
"flow": {
"nodes": [
{ "label": "Contrato", "detail": "/config" },
{ "label": "Ubicación", "detail": "disco del contenedor\no directorio del host" },
{ "label": "LXC", "detail": "siempre /config\npara la aplicación" }
{
"label": "Contrato",
"detail": "/config"
},
{
"label": "Ubicación",
"detail": "Disco del contenedor\no directorio del host"
},
{
"label": "LXC",
"detail": "Siempre /config\npara la aplicación"
}
],
"caption": "La aplicación ve la ruta que publica la imagen; solo cambia dónde se guarda."
"caption": "La aplicación ve la ruta declarada por la imagen; solo cambia dónde se almacena."
}
}
]
@@ -94,33 +153,48 @@
{
"mermaid": {
"chartCode": "flowchart TB\n H[\"{{host}}<br/>/mnt/oci-shared/media\"]\n H --> Q[\"qBittorrent<br/>/data\"]\n H --> J[\"Jellyfin<br/>/data\"]\n H --> R[\"Radarr / Sonarr<br/>/data\"]\n Q -. \"{{config}}\" .-> QV[(\"/config mpN\")]\n J -. \"{{config}}\" .-> JV[(\"/config mpN\")]\n R -. \"{{config}}\" .-> RV[(\"/config mpN\")]",
"labels": { "host": "Directorio del host", "config": "configuración propia" }
"labels": {
"host": "Directorio del host",
"config": "Configuración propia"
}
}
},
{
"p": "Cada contenedor guarda su configuración en su propio disco. La biblioteca o las descargas son un único directorio del host montado en la misma ruta interna de todos los contenedores, de modo que la ruta en la que escribe una aplicación es la misma en la que lee otra."
"p": "Cada contenedor guarda su configuración en su propio disco. La biblioteca o las descargas se guardan en un único directorio del host, montado en la misma ruta interna en todos los contenedores. Así, una ruta en la que escribe una aplicación es la misma desde la que lee otra."
}
]
},
{
"id": "rclone",
"title": "Almacenamiento en la nube con la aplicación Rclone",
"intro": "La aplicación Rclone del catálogo ofrece, además de su instalación, <strong>Activar un montaje en un contenedor Rclone OCI existente</strong>. Monta un remoto ya creado y autorizado en la interfaz web de Rclone y lo publica en el host, donde otros contenedores pueden usarlo como directorio del host.",
"title": "Almacenamiento en la nube mediante la aplicación rclone",
"intro": "Además de instalarla, la ficha de rclone en el catálogo permite <strong>Activar un montaje en un contenedor OCI de rclone existente</strong>. Se monta un remoto ya creado y autorizado en la interfaz web de rclone y se publica en el host. Otros contenedores pueden usarlo como un directorio del host.",
"blocks": [
{
"steps": {
"items": [
{ "title": "Contenedor y remoto", "body": "El VMID del contenedor Rclone, el nombre exacto del remoto y, opcionalmente, una ruta dentro de él." },
{ "title": "Nombre y caché", "body": "El nombre del montaje y el modo de caché VFS: <code>off</code>, <code>minimal</code>, <code>writes</code> o <code>full</code> (por defecto)." },
{ "title": "Vistas publicadas", "body": "Una raíz común, <code>/mnt/oci-shared</code> por defecto, contiene una vista de lectura y escritura en <code>/mnt/oci-shared/remotes/NOMBRE</code> y una de solo lectura en <code>/mnt/oci-shared/remotes-ro/NOMBRE</code>." },
{ "title": "Activación", "body": "Tras una confirmación, el CT se detiene, se configuran su orden de arranque y un hookscript de Proxmox VE, y se vuelve a iniciar. La operación espera hasta que las dos vistas están montadas en el host." }
{
"title": "Contenedor y remoto",
"body": "El VMID del contenedor de rclone, el nombre exacto del remoto y, opcionalmente, una ruta dentro de él."
},
{
"title": "Nombre del montaje y caché",
"body": "El nombre del montaje y el modo de caché VFS: <code>off</code>, <code>minimal</code>, <code>writes</code> o <code>full</code> (predeterminado)."
},
{
"title": "Vistas publicadas",
"body": "Una raíz común, <code>/mnt/oci-shared</code> de forma predeterminada, contiene una vista de lectura y escritura en <code>/mnt/oci-shared/remotes/NAME</code> y otra de solo lectura en <code>/mnt/oci-shared/remotes-ro/NAME</code>."
},
{
"title": "Activación",
"body": "Tras confirmar, se detiene el CT, se configuran su comando de arranque y un hookscript de Proxmox VE y se vuelve a iniciar. La operación espera a que ambas vistas estén montadas en el host."
}
]
}
},
{
"calloutInfo": {
"title": "Si el montaje no llega a activarse",
"body": "Se restaura la configuración anterior del contenedor y se vuelve a iniciar, de modo que una activación fallida deja Rclone como estaba."
"title": "Si el montaje no se activa",
"body": "Se restaura la configuración anterior del contenedor y se vuelve a iniciar. Así, si la activación falla, rclone queda como estaba."
}
}
]
@@ -128,41 +202,58 @@
{
"id": "network",
"title": "Direcciones y redes",
"intro": "Una aplicación simple necesita una dirección. Una aplicación multicontenedor necesita además una red estable entre sus miembros.",
"intro": "Una aplicación de un solo contenedor necesita una dirección. Una aplicación con varios contenedores también necesita una red estable entre sus miembros.",
"blocks": [
{
"cards": {
"items": [
{ "icon": "network", "title": "Aplicación simple", "body": "Se eligen el bridge y DHCP o una dirección CIDR fija. El LXC tiene una dirección propia y el resumen muestra las URL completas de los servicios." },
{ "icon": "waypoints", "title": "Aplicación multicontenedor", "body": "Se busca una subred libre, se crea un bridge privado persistente y cada miembro (aplicación, base de datos, caché) recibe en él una dirección fija." }
{
"icon": "network",
"title": "Aplicación de un contenedor",
"body": "Se elige el puente de red y DHCP o una dirección fija en formato CIDR. El LXC tiene su propia dirección y el resumen muestra las URL completas de los servicios."
},
{
"icon": "waypoints",
"title": "Aplicación con varios contenedores",
"body": "Se busca una subred libre, se crea un puente privado persistente y cada miembro —aplicación, base de datos y caché— recibe una dirección fija en él."
}
]
}
},
{
"flow": {
"nodes": [
{ "label": "LAN", "detail": "dirección accesible\nsolo el servicio principal" },
{ "label": "LXC principal", "detail": "web / API\nLAN + red privada" },
{ "label": "Red privada", "detail": "PostgreSQL · Valkey · ML\ndirecciones fijas" }
{
"label": "LAN",
"detail": "Dirección accesible\nsolo para el servicio principal"
},
{
"label": "LXC principal",
"detail": "Web / API\nLAN + red privada"
},
{
"label": "Red privada",
"detail": "PostgreSQL · Valkey · ML\ndirecciones fijas"
}
],
"caption": "Las dependencias se comunican por la red privada y no tienen dirección en la LAN."
"caption": "Las dependencias se comunican por la red privada y no tienen una dirección en la LAN."
}
},
{
"p": "El contrato de la pila guarda el bridge, la subred, las direcciones y las relaciones entre servicios. La actualización de la aplicación reutiliza la misma topología en todos sus miembros. ProxMenux Monitor abre el contenedor principal en su dirección de la LAN, no en la de la red privada."
"p": "El contrato de la pila guarda el puente, la subred, las direcciones y las relaciones entre servicios. Al actualizar la aplicación se reutiliza la misma topología para todos sus miembros. ProxMenux Monitor abre el contenedor principal en su dirección de la LAN, no en la de la red privada."
}
]
},
{
"id": "ownership",
"title": "Propietarios",
"title": "Propietarios de archivos y directorios",
"blocks": [
{
"list": {
"items": [
"Los directorios nuevos se crean con el UID y el GID que mapea el LXC no privilegiado.",
"Los directorios existentes no cambian de propietario de forma recursiva.",
"Los sockets, los archivos del sistema y las rutas sensibles no se ofrecen como directorios del host genéricos."
"Los directorios nuevos se crean con el UID y el GID a los que se mapea el LXC sin privilegios.",
"No se cambia recursivamente el propietario de los directorios existentes.",
"Los sockets, archivos del sistema y rutas sensibles no se ofrecen como directorios genéricos del host."
]
}
}
@@ -174,13 +265,37 @@
"blocks": [
{
"table": {
"headers": ["Elemento", "En el vzdump del CT", "Dónde se conserva"],
"headers": [
"Elemento",
"En el backup vzdump del CT",
"Dónde se conserva"
],
"rows": [
["rootfs OCI", "Sí", "El backup del CT; también puede reconstruirse desde la imagen y el contrato"],
["Disco del contenedor con <code>backup=1</code>", "Sí", "El backup del CT"],
["Directorio del host", "No", "El backup del almacenamiento del host"],
["Contrato de la instancia", "No", "<code>/usr/local/share/proxmenux/oci/instances/VMID/</code> en el host"],
["Aplicación multicontenedor", "Cada miembro en su propio backup", "Los backups de cada miembro, más el contrato de la pila y su bridge en el host"]
[
"Rootfs OCI",
"Sí",
"En el backup del CT; también se puede reconstruir a partir de la imagen y el contrato"
],
[
"Disco del contenedor con <code>backup=1</code>",
"Sí",
"El backup del CT"
],
[
"Directorio del host",
"No",
"El backup del almacenamiento del host"
],
[
"Contrato de la instancia",
"Sí, la copia que guarda el CT",
"<code>/.proxmenux/oci-record.json</code> dentro del CT; las copias adicionales del host y del clúster se guardan por separado"
],
[
"Aplicación con varios contenedores",
"Cada miembro en su propio backup",
"Los backups de todos los miembros, más el contrato de la pila y su puente de red en el host"
]
]
}
}
@@ -1,14 +1,14 @@
{
"meta": {
"title": "Script Automatizado post-instalación | ProxMenux Documentation",
"description": "El script Automatizado post-instalación de ProxMenux aplica un conjunto seleccionado de 14 optimizaciones seguras y adaptadas al hardware a un host Proxmox VE recién instalado, sin preguntas. Los cambios de configuración reversibles quedan registrados para restaurarlos después.",
"ogTitle": "Script Automatizado post-instalación | ProxMenux Documentation",
"ogDescription": "14 optimizaciones aplicadas a un host Proxmox VE recién instalado sin preguntas. Adaptadas al hardware y con los cambios reversibles registrados."
"title": "Script automatizado post-instalación | Documentación de ProxMenux",
"description": "El script automatizado post-instalación de ProxMenux ejecuta un conjunto fijo de 14 optimizaciones adaptadas al hardware en un host Proxmox VE recién instalado. No ofrece una lista de funciones para elegir, pero puede pedir confirmación para la actualización del sistema, ocultar el aviso de suscripción, instalar Log2RAM en ciertos casos y reiniciar. Los cambios reversibles se registran para restaurarlos después.",
"ogTitle": "Script automatizado post-instalación | Documentación de ProxMenux",
"ogDescription": "14 optimizaciones fijas adaptadas al hardware para un host Proxmox VE nuevo, con confirmaciones para algunas acciones y registro de cambios reversibles."
},
"header": {
"title": "Script Automatizado post-instalación",
"description": "Un clic, sin preguntas: ProxMenux aplica 14 optimizaciones seguras de las que se beneficia casi cualquier host Proxmox. Los cambios de configuración reversibles quedan registrados para Uninstall Optimizations; las actualizaciones de paquetes no se describen como reversibles.",
"section": "Post-Install · Automated"
"description": "ProxMenux ejecuta 14 optimizaciones de base sin lista de funciones para elegir. Algunas acciones piden confirmación. Los cambios reversibles se registran para Desinstalar optimizaciones; las actualizaciones de paquetes no se describen como reversibles.",
"section": "Post-instalación · Automatizada"
},
"intro": {
"title": "Cuándo elegir Automatizado",
@@ -24,91 +24,91 @@
},
"optimizations": [
{
"tool": "Repositorios APT + full upgrade",
"tool": "Repositorios APT + actualización completa",
"what": "Desactiva pve-enterprise.sources y ceph.sources enterprise, escribe una fuente limpia sin suscripción para el codename Debian del host, y luego ejecuta apt update && apt full-upgrade -y (el comando oficial de upgrade de Proxmox).",
"category": "Basic Settings",
"category": "Ajustes básicos",
"categorySlug": "basic-settings"
},
{
"tool": "Eliminación del banner de suscripción",
"what": "Parchea la UI web para ocultar el banner 'No valid subscription'. Pide confirmación antes de aplicar; reversible desde Uninstall Optimizations.",
"category": "Customization",
"what": "Modifica la interfaz web para ocultar el aviso «No valid subscription». Pide confirmación antes de aplicarlo; reversible desde Desinstalar optimizaciones.",
"category": "Personalización",
"categorySlug": "customization"
},
{
"tool": "Forzar IPv4",
"what": "Escribe /etc/apt/apt.conf.d/99-force-ipv4 para que apt use solo IPv4 — esquiva setups de mirror IPv6 inestables.",
"category": "Network",
"category": "Red",
"categorySlug": "network"
},
{
"tool": "Saltar paquetes de idioma",
"what": "Escribe /etc/apt/apt.conf.d/99-disable-translations para dejar de descargar paquetes específicos de locale. Updates de apt más rápidos y ligeros.",
"category": "Basic Settings",
"what": "Escribe /etc/apt/apt.conf.d/99-disable-translations para dejar de descargar índices de descripciones traducidas de paquetes y reducir los datos de las actualizaciones de apt.",
"category": "Ajustes básicos",
"categorySlug": "basic-settings"
},
{
"tool": "Aumentar límites del sistema",
"what": "Sube los inotify watches, los límites nofile/nproc, los límites del keyring del kernel y fs.file-max en sysctl.d, limits.d, pam y systemd — lo bastante altos para hosts con muchos contenedores.",
"category": "System",
"category": "Sistema",
"categorySlug": "system"
},
{
"tool": "Tuning de memoria",
"tool": "Ajuste de memoria",
"what": "Establece vm.swappiness=10, dirty ratios balanceados, vm.max_map_count=262144 y compaction proactiveness cuando es soportado. La política de memory-overcommit del kernel se deja en el valor por defecto de Proxmox.",
"category": "System",
"category": "Sistema",
"categorySlug": "system"
},
{
"tool": "Comportamiento ante kernel panic",
"what": "Configura el host para reiniciar 10 segundos después de un panic / oops / hardlockup en lugar de quedarse congelado indefinidamente.",
"category": "System",
"category": "Sistema",
"categorySlug": "system"
},
{
"tool": "Tuning del stack de red",
"what": "Dimensionado de buffers TCP, hardening IPv4 (redirects off, rp_filter=2, martian log off), rango de puertos locales 1024-65535, TCP MTU probing, RFC 1337, más un helper en /usr/local/sbin/proxmenux-fwbr-tune conectado a una unit systemd oneshot y a una regla udev, de forma que rp_filter=0 / log_martians=0 se reapliquen a las interfaces fwbr*/fwln*/fwpr*/tap* cada vez que Proxmox las recrea al iniciar/parar VMs, en reinicios o en migraciones en vivo.",
"category": "Network",
"category": "Red",
"categorySlug": "network"
},
{
"tool": "Customización de bashrc (root)",
"what": "PS1 con colores, aliases comunes (l/la/ll/ls/grep), historial con marcas de tiempo y sourcing de bash-completion, todo dentro de un bloque PMX_CORE_BASHRC delimitado para que sea fácil de quitar.",
"category": "Customization",
"category": "Personalización",
"categorySlug": "customization"
},
{
"tool": "Log2RAM (consciente de SSD, automático)",
"tool": "Log2RAM (según el SSD, automático)",
"what": "Reduce el desgaste del SSD/NVMe moviendo /var/log a una ramdisk tmpfs con sync periódico al disco. Se instala desde el proyecto oficial cuando el disco raíz es SSD o NVMe. Dimensiona la ramdisk según la RAM (128M / 256M / 512M), programa el sync periódico y un guardián de auto-sync que compacta al 80% y trunca los logs calientes al 92% antes de escribir. Ajusta los límites de journald para caber en la ramdisk. Detalle completo en <link>Log2RAM</link>.",
"category": "Storage",
"category": "Almacenamiento",
"categorySlug": "storage"
},
{
"tool": "ZFS autotrim (solo SSD)",
"what": "Activa zpool autotrim=on en cada pool ZFS cuyos vdevs sean todos SSD/NVMe con soporte TRIM (comprueba /sys/block/[dev]/queue/rotational y discard_granularity). Los pools respaldados por HDDs se saltan automáticamente. Solo los pools realmente cambiados por ProxMenux quedan registrados para el uninstall — los pools en los que activaste autotrim a mano se dejan en paz.",
"category": "Storage",
"category": "Almacenamiento",
"categorySlug": "storage"
},
{
"tool": "Límites de tamaño de journald",
"what": "Fuerza almacenamiento persistente, capa SystemMaxUse=64M / RuntimeMaxUse=60M, activa compresión, logging a nivel info (requerido para el Monitor). Se salta automáticamente cuando Log2RAM está activo (hace su propio ajuste).",
"category": "System",
"what": "Fuerza almacenamiento persistente, limita SystemMaxUse=64M / RuntimeMaxUse=60M, activa compresión y registros de nivel info (necesarios para Monitor). Se omite cuando Log2RAM está activo, pues hace su propio ajuste.",
"category": "Sistema",
"categorySlug": "system"
},
{
"tool": "Tuning de logrotate",
"what": "Rotación diaria con tope de tamaño 10M, 7 rotaciones, compresión y copytruncate — amigable con Log2RAM.",
"category": "System",
"tool": "Ajuste de logrotate",
"what": "Configura globalmente daily y después size 10M, conserva 7 rotaciones y activa compresión y copytruncate. El criterio de tamaño posterior prevalece; las reglas particulares pueden cambiarlo. Adecuado para Log2RAM, pero la frecuencia depende de reglas y temporizador.",
"category": "Sistema",
"categorySlug": "system"
},
{
"tool": "Nombres de interfaz persistentes",
"what": "Escribe un <code>/etc/systemd/network/10-proxmenux-&lt;iface&gt;.link</code> por NIC física (cada uno comenzando con la cabecera 'Managed by ProxMenux') que fija el MAC al nombre actual, de forma que los nombres <code>eth0</code> / <code>enp…</code> se mantengan estables tras reinicios y al añadir nuevas NICs.",
"category": "Network",
"category": "Red",
"categorySlug": "network"
}
],
"hardwareTitle": "Valores por defecto conscientes del hardware",
"hardwareTitle": "Valores predeterminados adaptados al hardware",
"hardwareBody": "El script lee el hardware del host antes de aplicar los ajustes. Log2RAM solo se instala en discos raíz SSD / NVMe por defecto (pregunta si la detección dice lo contrario). El tamaño del ramdisk de Log2RAM se elige a partir de la RAM total (<code>≤ 8 GB → 128M</code>, <code>≤ 16 GB → 256M</code>, <code>'>' 16 GB → 512M</code>). Los límites de journald se ajustan al tamaño del ramdisk cuando Log2RAM está activo, para no llenarlo.",
"upgrade": {
"heading": "Actualizar y hacer upgrade del sistema",
@@ -118,9 +118,9 @@
"Desactiva enterprise <code>pve-enterprise.sources</code> / <code>ceph.sources</code>, elimina archivos de repos legacy, escribe una fuente limpia sin suscripción para el codename del host.",
"Ejecuta el upgrade de forma no interactiva con <code>DEBIAN_FRONTEND=noninteractive</code> y <code>--force-confdef --force-confold</code> — los archivos de configuración que has customizado siguen siendo tuyos cuando upstream también ha cambiado.",
"Instala paquetes esenciales de Proxmox si faltan (<code>zfsutils-linux</code>, <code>proxmox-backup-restore-image</code>, <code>chrony</code>).",
"Comprobación de cordura de metadatos LVM, <code>apt-get autoremove -y</code> + <code>apt-get autoclean -y</code>, y prompt de reinicio solo si el kernel realmente cambió."
"Comprobación de coherencia de metadatos LVM, <code>apt-get autoremove -y</code> + <code>apt-get autoclean -y</code> y solicitud de reinicio solo si cambió el núcleo."
],
"sameTitle": "Mismo updater, dos puntos de entrada",
"sameTitle": "Mismo actualizador, dos puntos de entrada",
"sameBody": "El bundle Automatizado y la utilidad independiente <link>Proxmox System Update</link> comparten los mismos scripts subyacentes (<code>update-pve8.sh</code> / <code>update-pve9_2.sh</code>). Usa la utilidad por separado cuando solo quieras hacer upgrade del host sin aplicar el resto de las optimizaciones."
},
"endResult": {
@@ -142,18 +142,18 @@
"xshokBody": "Si el host ha ejecutado previamente el script <code>xshok-proxmox</code>, ProxMenux detecta el archivo marcador y te avisa antes de continuar. Algunos tweaks pueden solaparse. El script complementario está deprecado — si decides continuar de todos modos, revisa <link>el resumen</link> para contexto.",
"revert": {
"heading": "Revertir",
"body": "Cada herramienta de la tabla anterior se registra a sí misma en <code>/usr/local/share/proxmenux/installed_tools.json</code>. Abre <link>Uninstall Optimizations</link> para elegir items individuales que revertir. Los backups de los archivos de configuración modificados se dejan junto a los originales con sufijo <code>.bak</code>."
"body": "Cada herramienta de la tabla se registra en <code>/usr/local/share/proxmenux/installed_tools.json</code>. Abre <link>Desinstalar optimizaciones</link> para elegir los elementos que quieras revertir. Las copias de los archivos modificados se guardan junto a los originales con sufijo <code>.bak</code>."
},
"related": {
"heading": "Relacionado",
"items": [
{
"label": "Customizable Post-Install",
"label": "Post-instalación personalizable",
"href": "/docs/post-install/customizable",
"tail": " — elige exactamente qué quieres del mismo catálogo."
},
{
"label": "Uninstall Optimizations",
"label": "Desinstalar optimizaciones",
"href": "/docs/post-install/uninstall",
"tail": " — revierte cualquier subconjunto de lo aplicado aquí."
},
@@ -163,7 +163,7 @@
"tail": " — verifica los cambios (uptime, free, journalctl, etc.)."
},
{
"label": "Resumen de Post-Install",
"label": "Resumen de post-instalación",
"href": "/docs/post-install",
"tail": "."
}
@@ -1,11 +1,11 @@
{
"meta": {
"title": "Post-instalación: Basic Settings | ProxMenux Documentation",
"title": "Post-instalación: Ajustes básicos | Documentación de ProxMenux",
"description": "Opciones post-instalación fundamentales: cambiar a los repositorios sin suscripción de Proxmox y hacer upgrade, autodetectar la zona horaria y activar NTP, saltar la descarga de idiomas de APT, y elegir entre 25 utilidades de sistema comunes para instalar."
},
"header": {
"title": "Post-instalación: Basic Settings",
"section": "Settings post-install Proxmox"
"title": "Post-instalación: Ajustes básicos",
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Qué cubre esta categoría",
@@ -15,8 +15,8 @@
"heading": "Actualizar y hacer upgrade del sistema",
"intro": "Reconfigura APT para usar el repositorio gratuito <em>pve-no-subscription</em> (en lugar del repo enterprise que requiere suscripción) y ejecuta un upgrade completo del sistema. Los pasos exactos dependen de la versión mayor de Proxmox VE: ProxMenux la detecta y despacha al script correcto.",
"headerVersion": "Versión PVE",
"headerScript": "Script despachador",
"headerCodename": "Codename Debian",
"headerScript": "Script de selección por versión",
"headerCodename": "Nombre en clave de Debian",
"rows": [
{
"version": "9.x",
@@ -31,7 +31,7 @@
],
"officialTitle": "La recomendación oficial de Proxmox",
"officialBody": "La guía oficial de upgrade de Proxmox es ejecutar, exactamente en este orden:",
"officialOutro": "Esa única línea es todo lo que necesitas en cualquier release actual de Proxmox. El reto no es el comando en sí — es asegurarse de que los repositorios del host están sanos <em>antes</em> de ejecutarlo.",
"officialOutro": "Este es el comando habitual para actualizaciones dentro de la misma versión mayor de Proxmox VE. Comprueba los repositorios del host y revisa los cambios de paquetes propuestos <em>antes</em> de continuar. Cambiar de versión mayor requiere el procedimiento oficial de migración.",
"doesTitle": "Qué hace la opción de ProxMenux — verificado contra el script",
"doesIntro": "El update de ProxMenux envuelve los comandos apt exactos de arriba y añade una serie de pasos pre/post que tendrías que recordar tú a mano. Cada item de abajo es lo que el script despachador realmente hace (mira <link>Proxmox System Update</link> para el desglose completo):",
"doesItems": [
@@ -39,37 +39,37 @@
"<strong>Repos Debian reescritos</strong> con main / updates / security, incluyendo <code>non-free-firmware</code>, para que la advertencia de firmware durante el upgrade desaparezca.",
"<strong>Ejecuta el upgrade oficial.</strong> <code>apt-get update</code> seguido de <code>apt full-upgrade -y</code> (PVE 9) o <code>apt dist-upgrade -y</code> (PVE 8), ambos lanzados de forma no interactiva con <code>--force-confdef --force-confold</code> para que cualquier archivo de configuración que hayas customizado siga siendo tuyo.",
"<strong>Instala paquetes esenciales</strong> si faltan: <code>zfsutils-linux</code>, <code>proxmox-backup-restore-image</code>, <code>chrony</code>.",
"<strong>Comprobación de cordura de metadatos LVM.</strong> Busca VMs con passthrough de disco que puedan haber garabateado cabeceras stale de physical-volume sobre discos en bruto; avisa si hay algo raro (no hay fix automático).",
"<strong>Comprueba los metadatos LVM.</strong> Busca VM con passthrough de disco que puedan haber dejado cabeceras antiguas de volúmenes físicos en discos en bruto; avisa si detecta anomalías, sin corregirlas automáticamente.",
"<strong>Limpia al final:</strong> <code>apt-get autoremove -y</code> + <code>apt-get autoclean -y</code>, y luego pregunta por un reinicio si el kernel fue actualizado o si está presente <code>/var/run/reboot-required</code>."
],
"shortTitle": "En resumen",
"shortBody": "La opción ejecuta el exacto <code>apt update && apt full-upgrade -y</code> que Proxmox recomienda, lo envuelve con la limpieza de repos y la limpieza post-upgrade que la guía oficial también te dice que hagas, y pregunta por el reinicio al final. Mira <link>Proxmox System Update</link> — el mismo updater también está disponible como utilidad independiente en el menú principal, con el diagrama completo del proceso.",
"subTitle": "No apliques esto a un host con suscripción",
"subBody": "Si tienes una suscripción de Proxmox y quieres seguir usando los repositorios enterprise, omite esta opción. Al ejecutarla se desactiva el repositorio enterprise y el host pasa al canal comunitario. La actualización de paquetes y la reescritura de repositorios no se presentan como reversibles en Uninstall Optimizations; restaura deliberadamente la configuración de repositorios si más adelante necesitas cambiar de canal.",
"subBody": "Si tienes una suscripción de Proxmox y quieres mantener los repositorios Enterprise, omite esta opción. Al ejecutarla, el host pasa al canal comunitario. La actualización de paquetes y la reescritura de repositorios no se pueden revertir desde Desinstalar optimizaciones; si quieres cambiar de canal después, debes configurar los repositorios expresamente.",
"safetyTitle": "Comprobación de seguridad post-update",
"safetyBody": "Tras el upgrade, el script comprueba si hay discos con metadatos PV (Physical Volume) obsoletos — un caso límite que puede pasar cuando una VM con passthrough de disco garabatea cabeceras LVM sobre un disco en bruto. Si encuentra algo sospechoso verás un aviso sugiriendo <code>pvs</code> para inspeccionarlo. No se toma ninguna acción automáticamente."
"safetyBody": "Tras actualizar, el script busca discos con metadatos antiguos de volúmenes físicos (PV). Puede ocurrir si una VM con passthrough de disco escribe cabeceras LVM en un disco en bruto. Si encuentra algo sospechoso, avisa y sugiere inspeccionarlo con <code>pvs</code>. No modifica nada automáticamente."
},
"time": {
"heading": "Sincronizar la hora automáticamente",
"intro": "Detecta la IP pública del servidor vía <code>dig myip.opendns.com @resolver1.opendns.com</code>, luego consulta <code>ipapi.co/'{'ip'}'/timezone</code> para buscar la zona horaria IANA correspondiente, y la aplica con <code>timedatectl set-timezone</code>. Finalmente activa NTP con <code>timedatectl set-ntp true</code>.",
"depTitle": "Depende de dos servicios externos",
"depBody": "El lookup depende de que OpenDNS e <code>ipapi.co</code> sean accesibles, y de que sus respuestas sean correctas. Si ejecutas Proxmox detrás de una VPN o en una VLAN que sale por una región distinta, la zona horaria autodetectada puede ser incorrecta. En ese caso sáltate esta opción y configura la zona horaria a mano:",
"revertTitle": "Reversible desde el menú Uninstall",
"revertBody": "<link>Uninstall Optimizations</link> resetea la zona horaria a UTC (un valor por defecto seguro). No desactiva NTP — tu reloj sigue sincronizándose, solo anclado a UTC hasta que pongas una nueva zona horaria manualmente."
"revertTitle": "Reversible desde el menú Desinstalar",
"revertBody": "<link>Desinstalar optimizaciones</link> restablece la zona horaria a UTC, un valor predeterminado seguro. No desactiva NTP: el reloj sigue sincronizándose y muestra UTC hasta que configures otra zona manualmente."
},
"languages": {
"heading": "Saltar la descarga de idiomas adicionales",
"intro": "En cada <code>apt update</code>, Debian por defecto descarga archivos de traducción para cada locale que distribuye — mucho tráfico y espacio en disco para algo que rara vez verás. Esta opción le dice a APT que solo descargue los metadatos principales. Antes de desactivarlo, ProxMenux <strong>se asegura de que el propio locale del host está realmente generado</strong> (lee <code>/etc/default/locale</code> o <code>/etc/environment</code>, lo añade a <code>/etc/locale.gen</code> si falta, y ejecuta <code>locale-gen</code>). Así no pierdes tu locale de shell como efecto colateral.",
"intro": "Durante <code>apt update</code>, APT puede descargar descripciones de paquetes traducidas además de los metadatos principales. Esta opción desactiva esas traducciones para ahorrar ancho de banda y disco. Antes, ProxMenux <strong>comprueba que la configuración regional del host está generada</strong>: lee <code>/etc/default/locale</code> o <code>/etc/environment</code>, la añade a <code>/etc/locale.gen</code> si falta y ejecuta <code>locale-gen</code>. Así se conserva la configuración regional de la shell.",
"writtenTitle": "Qué se escribe",
"revertTitle": "Reversible desde el menú Uninstall",
"revertTitle": "Reversible desde el menú Desinstalar",
"revertBody": "Borrar <code>/etc/apt/apt.conf.d/99-disable-translations</code> (manualmente o desde el menú Uninstall) restaura el comportamiento por defecto y APT vuelve a descargar los archivos de idioma."
},
"utilities": {
"heading": "Instalar utilidades de sistema comunes",
"intro": "Abre un checklist con <strong>25 utilidades curadas</strong> organizadas en grupos. Elige las que quieras, confirma, y ProxMenux instala cada una vía <code>apt</code>, verificando que el paquete funcionó y mostrando un resumen al final.",
"imageAlt": "Diálogo de checklist mostrando la lista de utilidades de sistema de ProxMenux con espacio para seleccionar y enter para confirmar",
"intro": "Abre una lista con <strong>25 utilidades seleccionadas</strong> organizadas en grupos. Elige las que quieras y confirma; ProxMenux las instala mediante <code>apt</code>, comprueba el resultado y muestra un resumen final.",
"imageAlt": "Diálogo de selección de utilidades de ProxMenux: Espacio selecciona y Entrar confirma",
"reuseTitle": "La misma lista se reutiliza en otro sitio",
"reuseBody": "El catálogo de 25 utilidades vive en una única fuente de verdad (<code>PROXMENUX_UTILS</code> en <code>scripts/global/utils-install-functions.sh</code>). El menú <em>Utilities and Tools → System Utilities</em> del menú principal de ProxMenux expone la misma lista, así que puedes volver más tarde e instalar más sin volver a ejecutar la post-instalación.",
"reuseBody": "El catálogo de 25 utilidades tiene una única definición: <code>PROXMENUX_UTILS</code> en <code>scripts/global/utils-install-functions.sh</code>. El menú <em>Utilidades y herramientas → Utilidades del sistema</em> ofrece la misma lista para instalar más adelante sin repetir la post-instalación.",
"listTitle": "Qué hay en la lista",
"groups": [
{
@@ -177,7 +177,7 @@
},
{
"pkg": "tmux",
"desc": "Multiplexador de terminal — sesiones que se separan, paneles divididos, sobrevive a desconexiones"
"desc": "Multiplexador de terminal: separa sesiones, divide paneles y mantiene las sesiones tras desconectarte"
}
]
},
@@ -210,18 +210,18 @@
],
"actionTitle": "Algunas de ellas en acción",
"noBulkTitle": "Solo se eliminan las utilidades instaladas por ProxMenux",
"noBulkBody": "ProxMenux registra únicamente los paquetes seleccionados que no estaban instalados antes de esta acción. Uninstall Optimizations puede purgar después esos paquetes, mientras que las utilidades que ya existían en el host permanecen intactas. La actualización general mediante APT no se registra como reversible porque los paquetes actualizados no disponen de una restauración atómica segura."
"noBulkBody": "ProxMenux registra únicamente los paquetes seleccionados que no estaban ya instalados. Al ejecutar Desinstalar optimizaciones, purga esos paquetes y conserva los que ya tenías. Las actualizaciones de APT no tienen una reversión atómica segura: desinstalar utilidades no deshace la actualización del sistema."
},
"related": {
"heading": "Relacionado",
"items": [
{
"label": "Proxmox System Update",
"label": "Actualización del sistema Proxmox",
"href": "/docs/utils/system-update",
"tail": " — vuelve a ejecutar el ciclo apt update + dist-upgrade bajo demanda."
},
{
"label": "System Utilities Installer",
"label": "Instalador de utilidades del sistema",
"href": "/docs/utils/system-utils",
"tail": " — instala (o reinstala) utilidades individualmente tras la post-instalación."
},
@@ -231,7 +231,7 @@
"tail": " — referencia de apt."
},
{
"label": "Customizable Post-Install",
"label": "Post-instalación personalizable",
"href": "/docs/post-install/customizable",
"tail": " — volver al menú padre."
}
@@ -1,103 +1,103 @@
{
"meta": {
"title": "Script Personalizable post-instalación | ProxMenux Documentation",
"title": "Script post-instalación personalizable | Documentación de ProxMenux",
"description": "Elige exactamente qué optimizaciones aplicar a un host Proxmox VE con ProxMenux. 10 categorías, ~35 herramientas individuales, UI de selección. Incluye todo lo que hace el script Automatizado, más funcionalidades opcionales (IOMMU, Fastfetch, Figurine, Ceph, HA, ajustes de AMD…).",
"ogTitle": "Script Personalizable post-instalación | ProxMenux Documentation",
"ogTitle": "Script post-instalación personalizable | Documentación de ProxMenux",
"ogDescription": "10 categorías, ~35 optimizaciones individuales. Elige exactamente qué quieres en un host Proxmox VE. Los cambios reversibles quedan registrados."
},
"header": {
"title": "Script Personalizable post-instalación",
"description": "Elige exactamente qué optimizaciones aplicar a un host Proxmox VE. ProxMenux agrupa ~35 herramientas individuales en 10 categorías, cada una con su propio diálogo de selección. Mismo motor que el Automatizado, pero con control total sobre qué se aplica.",
"section": "Post-Install · Customizable"
"description": "Elige exactamente qué optimizaciones aplicar a un host Proxmox VE. ProxMenux agrupa unas 35 herramientas en 10 categorías dentro de un único diálogo de selección. Usa el mismo motor que Automatizado, con control total sobre lo que se aplica.",
"section": "Post-instalación · Personalizable"
},
"intro": {
"title": "Cuándo elegir Personalizable",
"body": "Elige esta ruta cuando ya sabes qué ajustes quieres en el host — o cuáles definitivamente no quieres. El script presenta una selección por categoría para que puedas combinar optimizaciones. Las opciones se pueden volver a aplicar y los cambios de configuración reversibles quedan registrados para <link>Uninstall Optimizations</link>. Las actualizaciones de paquetes no se presentan como reversibles."
"body": "Elige esta opción si ya sabes qué ajustes quieres en el host o cuáles no quieres. El script muestra una lista con casillas agrupada por categorías para seleccionar, desmarcar y combinar optimizaciones. Puedes volver a aplicarlas después; los cambios reversibles se registran para <link>Desinstalar optimizaciones</link>. Las actualizaciones de paquetes no se presentan como reversibles."
},
"compare": {
"heading": "Comparación con el Automatizado",
"body": "Personalizable es un superset del <link>script Automatizado</link>. Cubre las mismas 14 optimizaciones de baseline más una larga lista de opt-ins que el Automatizado se salta a propósito — cosas que solo son útiles en hardware específico (fixes de AMD), hosting específico (OVH RTM), o cargas específicas (IOMMU/VFIO, repo de Ceph, High Availability, Fastfetch, Figurine, tuning del ARC de ZFS, pigz, ZFS auto-snapshot, límites de velocidad de vzdump, Open vSwitch, TCP BBR + TCP Fast Open, refresco del índice del PVE Appliance Manager…)."
"body": "Personalizable incluye todo el <link>script Automatizado</link>. Cubre las mismas 14 optimizaciones básicas y una larga lista de opciones que Automatizado omite deliberadamente, útiles para hardware específico (correcciones AMD), alojamiento específico (OVH RTM) o cargas concretas (IOMMU/VFIO, repositorio Ceph, alta disponibilidad, Fastfetch, Figurine, ajuste del ARC de ZFS, pigz, snapshots automáticos de ZFS, límites de velocidad vzdump, Open vSwitch, TCP BBR…)."
},
"categoriesSection": {
"heading": "Las 10 categorías",
"body": "El script Personalizable agrupa optimizaciones en 10 categorías. Cada categoría tiene su propio diálogo de selección y su propia página de documentación — abre una de las tarjetas para consultar el razonamiento, los valores predeterminados y los pasos de verificación."
"body": "El script Personalizable agrupa las optimizaciones en 10 categorías dentro de un único diálogo de selección. Cada categoría tiene su propia página de documentación; abre una tarjeta para consultar la justificación, los valores predeterminados y la verificación de cada opción."
},
"categories": [
{
"name": "Basic Settings",
"name": "Ajustes básicos",
"description": "Sanea las fuentes APT, ejecuta el upgrade oficial de Proxmox y fija zona horaria, locale y utilidades básicas. Es la base sobre la que apoyan todas las demás categorías."
},
{
"name": "System",
"name": "Sistema",
"description": "Ajusta el subsistema de logs y los límites del kernel para un host que aloja muchas VMs y contenedores. Cubre journald, logrotate, sysctl (memoria, límites de ficheros), comportamiento en panic y reinicios rápidos."
},
{
"name": "Virtualization",
"description": "Prepara el host para virtualización avanzada. Auto-instala el guest agent en las plantillas y activa IOMMU/VFIO para passthrough de dispositivos PCI (GPU, controladoras, TPU)."
"name": "Virtualización",
"description": "Prepara el host para virtualización avanzada. Instala el agente invitado correspondiente si el propio Proxmox se ejecuta dentro de una VM compatible y activa IOMMU/VFIO para el passthrough PCI de GPU, controladoras y TPU."
},
{
"name": "Network",
"name": "Red",
"description": "Endurece y afina la pila de red del host. Fuerza APT sobre IPv4, aplica sysctl con hardening y tuning de buffers TCP, ofrece Open vSwitch, TCP BBR + TCP Fast Open, y fija nombres persistentes de interfaces por MAC."
},
{
"name": "Storage",
"name": "Almacenamiento",
"description": "Configura los subsistemas de almacenamiento habituales de Proxmox: ARC de ZFS, auto-snapshots, ZFS autotrim para pools SSD/NVMe y límites de velocidad de vzdump para evitar saturar el disco durante backups."
},
{
"name": "Security",
"name": "Seguridad",
"description": "Reduce la superficie de ataque expuesta por defecto. Desactiva los servicios RPC (portmapper/rpcbind) que Proxmox no necesita pero deja escuchando."
},
{
"name": "Customization",
"name": "Personalización",
"description": "Cambia la experiencia visual y de shell del host: colores y aliases en bashrc, banner MOTD y eliminación del aviso de suscripción del web UI."
},
{
"name": "Monitoring",
"description": "Integra el host con Real-Time Monitoring de OVH. Sólo aparece cuando ProxMenux detecta un servidor OVH."
"name": "Monitorización",
"description": "Integra el host con OVH Real-Time Monitoring. Solo instala RTM cuando ProxMenux detecta un servidor OVH; en otros hosts no hace cambios."
},
{
"name": "Performance",
"name": "Rendimiento",
"description": "Acelera las operaciones de compresión (backups, transferencias) sustituyendo gzip por su versión paralela pigz."
},
{
"name": "Optional",
"name": "Opcional",
"description": "Opciones que no necesita todo host: ajustes de CPU AMD, banner Fastfetch, nombre 3D con Figurine, actualización del índice de PVE Appliance Manager, repositorio Ceph, servicios de alta disponibilidad, Log2RAM para reducir el desgaste del SSD y un perfil de swap con ZRAM."
}
],
"mixTip": {
"title": "Mezcla Automatizado y Personalizable",
"body": "Un patrón común: ejecutar primero <strong>Automatizado</strong> para fijar el baseline sensato, luego abrir <strong>Personalizable</strong> y elegir solo las herramientas opt-in que te interesan (por ejemplo, IOMMU en un host que va a hacer passthrough de GPU). Los cambios se registran de forma independiente; el menú Uninstall muestra todo lo que has aplicado independientemente de qué ruta lo añadió."
"body": "Un uso habitual: ejecuta primero <strong>Automatizado</strong> para aplicar una base sensata, abre después <strong>Personalizable</strong> y elige solo las herramientas opcionales que necesitas, como IOMMU para passthrough de GPU. Los cambios se registran por separado; Desinstalar muestra lo aplicado con independencia de la opción que lo añadió."
},
"related": {
"heading": "Relacionado",
"items": [
{
"label": "Automated Post-Install",
"label": "Post-instalación automatizada",
"href": "/docs/post-install/automated",
"tail": " — valores por defecto sensatos aplicados sin preguntas."
},
{
"label": "Uninstall Optimizations",
"label": "Desinstalar optimizaciones",
"href": "/docs/post-install/uninstall",
"tail": " — revierte cualquier selección de forma limpia."
},
{
"label": "Basic Settings",
"label": "Ajustes básicos",
"href": "/docs/post-install/basic-settings",
"tail": " — repos, hora, idioma, utilidades."
},
{
"label": "Virtualization",
"label": "Virtualización",
"href": "/docs/post-install/virtualization",
"tail": " — IOMMU + VFIO para passthrough."
},
{
"label": "Security",
"label": "Seguridad",
"href": "/docs/post-install/security",
"tailRich": " · <storageLink>Storage</storageLink> · <networkLink>Network</networkLink> · <customLink>Customization</customLink> — otras categorías."
"tailRich": " · <storageLink>Almacenamiento</storageLink> · <networkLink>Red</networkLink> · <customLink>Personalización</customLink> — otras categorías."
},
{
"label": "Resumen de Post-Install",
"label": "Resumen de post-instalación",
"href": "/docs/post-install",
"tail": "."
}
@@ -1,24 +1,24 @@
{
"meta": {
"title": "Post-instalación: Customización | ProxMenux Documentation",
"description": "Opciones de customización en el script post-instalación Customizable de ProxMenux: un prompt de bash con colores y aliases útiles, un banner de ProxMenux en el MOTD, y la opción de eliminar el aviso de suscripción de Proxmox de la interfaz web."
"title": "Post-instalación: Personalización | Documentación de ProxMenux",
"description": "Opciones de personalización en el script post-instalación Personalizable de ProxMenux: un prompt de bash con colores y alias útiles, un banner de ProxMenux en el MOTD y la opción de eliminar el aviso de suscripción de la interfaz web de Proxmox."
},
"header": {
"title": "Post-instalación: Customización",
"description": "Ajustes estéticos y de comodidad para el host Proxmox. Hacen más agradable el uso de la consola y ocultan el aviso de suscripción de la interfaz web. Bashrc, MOTD y el banner de suscripción quedan registrados y son reversibles desde el menú Uninstall.",
"section": "Settings post-install Proxmox"
"title": "Post-instalación: Personalización",
"description": "Ajustes estéticos y de comodidad para el host Proxmox. Mejoran el uso de la shell y ocultan el aviso de suscripción de la interfaz web. Bashrc, MOTD y el banner de suscripción se registran y se pueden revertir desde Desinstalar.",
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Qué cubre esta categoría",
"body": "Tres opciones pequeñas e independientes: un <strong>prompt de bash con colores + aliases</strong> para la shell de root, un <strong>banner MOTD</strong> de una línea visible al hacer login por SSH, y la eliminación del <strong>popup \"No valid subscription\"</strong> que Proxmox muestra en cada login a la UI web."
},
"bashrc": {
"heading": "Customizar bashrc",
"heading": "Personalizar bashrc",
"intro": "Inyecta un bloque curado en <code>/root/.bashrc</code> con un prompt con colores, historial con marcas de tiempo, aliases estándar de <code>ls</code> / <code>grep</code> y un <code>source</code> para autocompletado de bash. Hace que trabajar sobre SSH sea bastante más agradable y deja claro en qué host estás cuando tienes muchas pestañas abiertas.",
"writesTitle": "Qué añade ProxMenux a .bashrc",
"writesOutro": "El bloque está delimitado por los marcadores <code>PMX_CORE_BASHRC</code>. Ejecutar el script de nuevo reemplaza el bloque anterior en lugar de duplicarlo. El <code>.bashrc</code> original se respalda una vez en <code>/root/.bashrc.bak</code>, y se añade una línea <code>source /root/.bashrc</code> a <code>/root/.bash_profile</code> para que el prompt también se aplique en shells de login (p. ej. tras <code>su -</code>).",
"rootTitle": "Solo se aplica a root",
"rootBody": "La customización apunta a la shell de la cuenta root. Otros usuarios que crees en el host conservan sus propios valores por defecto. Si administras Proxmox exclusivamente por la UI web y nunca usas la shell, esta opción es pura estética y puedes saltártela."
"rootBody": "La personalización afecta a la shell de la cuenta root. Otros usuarios del host conservan sus propios valores predeterminados. Si administras Proxmox exclusivamente desde la interfaz web y nunca usas la shell, puedes omitir esta opción estética."
},
"motd": {
"heading": "Configurar banner MOTD personalizado",
@@ -29,43 +29,43 @@
"banner": {
"heading": "Eliminar banner de suscripción",
"intro": "Elimina el modal <em>\"You do not have a valid subscription for this server\"</em> que aparece cada vez que alguien entra en la UI web de Proxmox sin una suscripción enterprise. El parche es consciente de la versión: las distintas versiones mayores de Proxmox tienen distintos bundles de UI, así que ProxMenux despacha al script correcto.",
"versionTitle": "Despacho consciente de la versión",
"versionTitle": "Selección de script según la versión",
"versionItems": [
"<strong>PVE 9.x</strong> → ejecuta <code>remove-banner-pve-v3.sh</code> (parchea tanto el <code>proxmoxlib.js</code> de escritorio como la nueva UI móvil basada en Yew).",
"<strong>PVE 8.x</strong> → ejecuta <code>remove-banner-pve8.sh</code> (solo escritorio)."
],
"versionOutro": "Antes de parchear, ProxMenux respalda los archivos JS/template originales en <code>/usr/local/share/proxmenux/backups/</code> con una marca de tiempo. El flujo Uninstall usa esos backups para restaurar los archivos originales, y como fallback reinstala los paquetes de la UI de Proxmox si el backup falta o está corrupto.",
"breakTitle": "Puede romperse tras actualizaciones de Proxmox",
"breakBody": "Proxmox publica regularmente actualizaciones de UI que sobrescriben <code>proxmoxlib.js</code>. Cuando eso pasa, el banner vuelve. Puedes reaplicar esta opción tras cada actualización de Proxmox para volver a parchear el archivo, o simplemente aceptar el aviso hasta que la vuelvas a aplicar. ProxMenux también instala un hook APT que vuelve a parchear automáticamente en los upgrades de paquetes — mira <link>Uninstall Optimizations</link> para ver cómo se revierte ese hook.",
"breakBody": "Las actualizaciones de la interfaz de Proxmox pueden sobrescribir <code>proxmoxlib.js</code> y hacer que vuelva el aviso. Puedes volver a aplicar esta opción para parchearlo o mantener el aviso hasta entonces. ProxMenux también instala un hook de APT para volver a parchear tras las actualizaciones de paquetes; consulta <link>Desinstalar optimizaciones</link> para saber cómo se elimina.",
"legalTitle": "Nota legal (siempre conviene repetirla)",
"legalBody": "Esta opción solo oculta el aviso de la UI. <strong>No</strong> te concede soporte enterprise, acceso al repositorio enterprise, ni derecho alguno a distribuir Proxmox comercialmente sin suscripción. Si ejecutas Proxmox en un entorno que genera ingresos, compra una suscripción — apoya al proyecto y te da el canal enterprise estable."
"legalBody": "Esta opción solo oculta el aviso de la interfaz. <strong>No</strong> concede soporte Enterprise ni acceso al repositorio Enterprise, y no cambia la licencia del software. Proxmox VE se distribuye bajo GNU AGPLv3. Una suscripción apoya el proyecto y da acceso al canal de actualizaciones Enterprise; elige el nivel de soporte adecuado para tu entorno."
},
"verify": {
"heading": "Verificación",
"intro": "Tras aplicar los tres:",
"reversibleTitle": "Los tres cambios de personalización quedan registrados",
"reversibleBody": "<link>Uninstall Optimizations</link> restaura <code>/root/.bashrc</code>, devuelve MOTD exactamente al contenido anterior a ProxMenux (o elimina el archivo si antes no existía) y restaura los archivos parcheados de la interfaz desde sus copias o reinstala los paquetes de Proxmox afectados cuando sea necesario."
"reversibleBody": "<link>Desinstalar optimizaciones</link> restaura <code>/root/.bashrc</code>, devuelve MOTD al contenido exacto anterior a ProxMenux o elimina el archivo si antes no existía, y restaura los archivos de interfaz parcheados desde sus copias o reinstala los paquetes afectados cuando sea necesario."
},
"related": {
"heading": "Relacionado",
"items": [
{
"label": "Optional",
"label": "Opcional",
"href": "/docs/post-install/optional",
"tail": " — Fastfetch y Figurine (otras customizaciones visuales)."
"tail": " — Fastfetch y Figurine, otras personalizaciones visuales."
},
{
"label": "Mostrar información de versión",
"href": "/docs/settings/show-version-information",
"tail": " — confirma que las customizaciones están registradas como instaladas."
"tail": " — confirma que las personalizaciones están registradas como instaladas."
},
{
"label": "Uninstall Optimizations",
"label": "Desinstalar optimizaciones",
"href": "/docs/post-install/uninstall",
"tail": " — revierte bashrc, motd, aviso de suscripción."
},
{
"label": "Customizable Post-Install",
"label": "Post-instalación personalizable",
"href": "/docs/post-install/customizable",
"tail": " — volver al menú padre."
}
+26 -15
View File
@@ -1,7 +1,7 @@
{
"meta": {
"title": "Script post-instalación de Proxmox VE — Automatizado y personalizable | ProxMenux",
"description": "Resumen de los scripts post-instalación de ProxMenux para Proxmox VE. Ejecuta el script Automatizado para aplicar valores recomendados sin preguntas, usa Personalizable para elegir entre 10 categorías o restaura los cambios reversibles compatibles mediante Uninstall Optimizations.",
"description": "Resumen de los scripts post-instalación de ProxMenux para Proxmox VE. Ejecuta el script Automatizado para aplicar valores recomendados sin preguntas, usa Personalizable para elegir exactamente lo que quieres entre 10 categorías o restaura los cambios reversibles compatibles mediante Desinstalar optimizaciones.",
"ogTitle": "Script post-instalación de Proxmox VE — Automatizado y personalizable",
"ogDescription": "Aplica optimizaciones comunes post-instalación de Proxmox VE en 10 categorías — automatizadas o a la carta, con opciones reversibles.",
"twitterTitle": "Script post-instalación de Proxmox VE | ProxMenux",
@@ -10,7 +10,7 @@
"header": {
"title": "Scripts post-instalación",
"description": "Configura un host de Proxmox VE recién instalado con las optimizaciones post-instalación de ProxMenux. Aplica la configuración base automáticamente, elige opciones individuales, actualiza funciones instaladas o restaura cambios reversibles compatibles. Las actualizaciones de paquetes no se presentan como reversibles.",
"section": "Settings post-install Proxmox"
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Para qué sirve este menú",
@@ -18,8 +18,8 @@
},
"openingMenu": {
"heading": "Abrir el menú",
"body": "Desde el menú principal de ProxMenux, selecciona <strong>Settings post-install Proxmox</strong>. Verás esto:",
"imageAlt": "Menú de scripts post-instalación — Automatizado, Personalizable, la entrada condicional Aplicar Actualizaciones Disponibles (solo cuando hay updates pendientes) y Uninstall, seguidos de la sección Community Scripts"
"body": "Desde el menú principal de ProxMenux, selecciona <strong>Configuración post instalación de Proxmox</strong>. Verás esto:",
"imageAlt": "Menú de scripts post-instalación: Automatizado, Personalizable, la entrada condicional Aplicar actualizaciones disponibles (solo cuando hay actualizaciones pendientes) y Desinstalar, seguidos de la sección Scripts de la comunidad"
},
"threeWays": {
"heading": "Cuatro formas de aplicar optimizaciones",
@@ -34,29 +34,29 @@
"Tuning de memoria, kernel y red",
"Log2RAM (autodetectado en SSD/NVMe)",
"Límites de tamaño de journald + logrotate",
"Nombres de interfaz persistentes"
"Nombres persistentes de interfaz"
]
},
{
"title": "Personalizable",
"description": "~35 optimizaciones individuales en 10 categorías. Eliges exactamente cuáles aplicar. Mismo motor que el Automatizado, pero con control total.",
"bullets": [
"UI de checklist por categoría",
"Incluye todo lo que hace el Automatizado, más opciones opt-in (IOMMU, Fastfetch, Figurine, Ceph, HA, fixes de AMD…)",
"Interfaz con casillas de selección por categoría",
"Incluye todo lo que hace Automatizado, más opciones que debes activar expresamente (IOMMU, Fastfetch, Figurine, Ceph, HA, correcciones de AMD…)",
"Ejecuta tantas veces como quieras — los cambios son idempotentes"
]
},
{
"title": "Apply Available Updates",
"description": "Cuando una optimización post-instalación (Log2Ram, Memory Settings, Logrotate…) tiene en disco una versión más nueva que la registrada en el host, esta entrada muestra solo las que se han movido. Re-ejecuta la función correspondiente y refresca el registro — no toca nada más.",
"title": "Aplicar actualizaciones disponibles",
"description": "Cuando una optimización post-instalación (Log2Ram, ajustes de memoria, Logrotate…) tiene en disco una versión más nueva que la registrada en el host, esta entrada muestra solo las optimizaciones que han cambiado. Vuelve a ejecutar la función correspondiente y actualiza el registro, sin tocar nada más.",
"bullets": [
"Opt-in por optimización (solo lo que ha cambiado)",
"Aceptación individual por optimización (solo lo que ha cambiado)",
"Mismo selector disponible desde el panel del Monitor",
"Una única notificación agrupada cuando llegan actualizaciones nuevas"
]
},
{
"title": "Uninstall Optimizations",
"title": "Desinstalar optimizaciones",
"description": "Los cambios reversibles compatibles quedan registrados en un JSON y asociados a una función de restauración. Las acciones sin reversión segura, como una actualización completa de paquetes, se excluyen deliberadamente.",
"bullets": [
"Detecta automáticamente las optimizaciones aplicadas previamente",
@@ -66,7 +66,7 @@
}
],
"whichTitle": "¿Cuál deberías elegir?",
"whichBody": "Si es una instalación recién hecha de Proxmox y quieres el baseline sensato sin tener que decidir: <autoLink><strong>Automatizado</strong></autoLink>. Si ya sabes qué tweaks quieres (o cuáles definitivamente no quieres): <customLink><strong>Personalizable</strong></customLink>. Si algo que ya aplicaste tiene una versión más nueva en disco y solo quieres subir esa: <updatesLink><strong>Apply Available Updates</strong></updatesLink>. Si aplicaste algo antes y quieres revertirlo de forma limpia: <uninstallLink><strong>Uninstall Optimizations</strong></uninstallLink>. Puedes mezclarlas — aplicar primero Automatizado, luego abrir Personalizable para añadir opt-ins como Fastfetch o IOMMU, y revertir cualquier item individual más tarde.",
"whichBody": "Si acabas de instalar Proxmox y quieres una base sensata sin tomar decisiones: <autoLink><strong>Automatizado</strong></autoLink>. Si ya sabes qué ajustes quieres o cuáles no quieres: <customLink><strong>Personalizable</strong></customLink>. Si una optimización aplicada tiene una versión más nueva en disco y solo quieres actualizar esa: <updatesLink><strong>Aplicar actualizaciones disponibles</strong></updatesLink>. Para revertir algo aplicado anteriormente: <uninstallLink><strong>Desinstalar optimizaciones</strong></uninstallLink>. Puedes combinarlos: aplica primero Automatizado, abre después Personalizable para añadir opciones como Fastfetch o IOMMU y revierte cualquier elemento individual más adelante.",
"mixing": {
"heading": "Mezclar con otros scripts post-instalación",
"stackTitle": "No apiles varios scripts post-instalación",
@@ -75,14 +75,25 @@
"xshokBody": "Versiones anteriores de ProxMenux referenciaban <a>xshok-proxmox</a> como herramienta post-instalación complementaria. Ese proyecto ahora está deprecado y ya no se ofrece desde ProxMenux. Si una ejecución anterior de xshok-proxmox dejó marcadores en el host, ProxMenux todavía los detecta y te avisa — pero no es algo que debas instalar junto a ProxMenux hoy."
},
"community": {
"heading": "Community scripts",
"body": "El menú también expone dos scripts de terceros del proyecto <a>community-scripts</a>: <em>Proxmox VE Post Install</em> y <em>Proxmox VE Microcode</em>. Son wrappers que hacen <code>wget | bash</code> de los scripts de los autores originales. No los mantiene ProxMenux. Mira <link>External Repositories</link> para detalles y consideraciones de confianza antes de ejecutarlos."
"heading": "Scripts de la comunidad",
"body": "El menú también ofrece dos scripts de terceros del proyecto <a>community-scripts</a>: <em>Proxmox VE Post Install</em> y <em>Proxmox VE Microcode</em>. Son envoltorios que descargan y ejecutan los scripts originales mediante <code>wget | bash</code>. ProxMenux no los mantiene. Consulta <link>Repositorios externos</link> para conocer los detalles y valorar la confianza antes de ejecutarlos."
},
"pbs": {
"heading": "En Proxmox Backup Server",
"body": "En un host Proxmox Backup Server, el mismo menú se abre desde <strong>Configuración post instalación de Proxmox</strong> en el menú de PBS. Automatizado, Personalizable, Aplicar actualizaciones disponibles y Desinstalar optimizaciones funcionan igual que en Proxmox VE, con estas diferencias:",
"items": [
"<strong>Repositorios y actualización:</strong> cuando el servidor no tiene suscripción y solo está activo el repositorio Enterprise de PBS, ProxMenux pregunta antes de cambiar al repositorio sin suscripción de PBS. El cambio se hace con la API de repositorios del propio servidor, la misma que usa <em>Administration > Repositories</em>. Con una suscripción activa, o con un repositorio sin suscripción o de pruebas ya configurado, las fuentes se mantienen como están.",
"<strong>Lista personalizable:</strong> no aparecen las opciones que solo se aplican a Proxmox VE: agente de invitado, VFIO IOMMU, Open vSwitch, velocidad de backups vzdump, pigz, Appliance Manager, Ceph, alta disponibilidad y OVH Real Time Monitoring.",
"<strong>Banner de suscripción:</strong> el parche se aplica a la interfaz web de Proxmox Backup Server, y Desinstalar optimizaciones lo restaura.",
"<strong>Figurine:</strong> se instala sin los alias de Proxmox VE.",
"<strong>Scripts comunitarios:</strong> la sección ofrece <em>Proxmox Backup Server Post Install</em> y <em>Proxmox Backup Server Microcode</em> en lugar de los scripts de Proxmox VE."
]
},
"related": {
"heading": "Relacionado",
"items": [
{
"label": "Proxmox System Update",
"label": "Actualización del sistema Proxmox",
"href": "/docs/utils/system-update",
"tail": " — mantiene el host actualizado una vez ya se ha hecho la post-instalación."
},
@@ -1,12 +1,12 @@
{
"meta": {
"title": "Post-instalación: Monitorización | ProxMenux Documentation",
"description": "Opciones de monitorización en el script post-instalación Customizable de ProxMenux. Por ahora una sola opción: instalar OVH Real-Time Monitoring (RTM), que solo se activa si se detecta que el host es un servidor OVH."
"title": "Post-instalación: Monitorización | Documentación de ProxMenux",
"description": "Opciones de monitorización en el script post-instalación Personalizable de ProxMenux. Por ahora una sola opción: instalar OVH Real-Time Monitoring (RTM), que solo se activa si se detecta que el host es un servidor OVH."
},
"header": {
"title": "Post-instalación: Monitorización",
"description": "Opciones de monitorización dentro del script post-instalación Customizable. Esta categoría es pequeña y específica del proveedor — instala el agente OVH Real-Time Monitoring en servidores dedicados de OVH y no hace nada en cualquier otro sitio.",
"section": "Settings post-install Proxmox"
"description": "Opciones de monitorización del script post-instalación Personalizable. Esta categoría es pequeña y específica del proveedor: instala el agente OVH Real-Time Monitoring en servidores dedicados de OVH y no hace nada en otros servidores.",
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Alcance estrecho a propósito",
@@ -23,15 +23,15 @@
"Si el resultado <em>no</em> menciona OVH, no se instala nada. La opción es un no-op."
],
"remoteTitle": "Script remoto pasado por tubería a bash",
"remoteBody": "La instalación ejecuta <code>wget -qO - https://…apply.sh | bash</code>. Si el mirror de OVH se ve comprometido alguna vez, el script se ejecuta como root en tu host. Antes de activar esta opción, decide si confías más en la cadena de mirrors de OVH que en la monitorización que ganas. Para la mayoría de usuarios de home-lab o no-OVH esta opción debería quedarse simplemente apagada.",
"remoteBody": "La instalación ejecuta <code>wget -qO - https://…apply.sh | bash</code>. Si el servidor espejo de OVH se ve comprometido, el script se ejecutará como root en tu host. Antes de activar esta opción, valora la confianza en la cadena de servidores espejo de OVH frente al beneficio de monitorización. Para la mayoría de usuarios de laboratorios domésticos o servidores ajenos a OVH, la opción debe permanecer desactivada.",
"noOpTitle": "Actívalo solo si el host está realmente en OVH",
"noOpBody": "La opción es un no-op en servidores no-OVH, así que marcarla en un Proxmox de home-lab no rompe nada. En un host no-OVH el script imprime <em>\"Not an OVH server, skipping RTM installation\"</em> y termina limpiamente; no se instala ningún paquete.",
"noOpBody": "La opción no hace cambios en servidores ajenos a OVH, así que marcarla en un Proxmox doméstico no rompe nada. El script muestra <em>«No es un servidor OVH, se omite la instalación de RTM»</em> y termina sin instalar paquetes.",
"runsTitle": "Qué ejecuta ProxMenux",
"verifyTitle": "Verificación",
"verifyBody": "En un host OVH real, tras un reinicio deberías ver el <a>panel de RTM</a> en tu OVH Manager con datos en vivo del host. En el lado de Proxmox, el colector RTM es un servicio systemd — compruébalo directamente:",
"troubleTitle": "Solución de problemas",
"revertTitle": "No reversible desde el menú Uninstall",
"revertBody": "No hay una entrada de uninstall dedicada para RTM. En un host OVH real, elimina los paquetes a mano con <code>apt purge ovh-*</code> y borra cualquier manifest puppet bajo <code>/etc/puppet/</code> que RTM haya instalado. En un host no-OVH no se instaló nada, así que no hay nada que revertir."
"revertTitle": "Eliminar RTM desde el menú Desinstalar",
"revertBody": "Cuando RTM está registrado como instalado, Desinstalar optimizaciones ofrece una entrada OVH Real-Time Monitoring. Ejecuta <code>apt-get purge -y ''ovh-rtm*'' ''rtm'' ''rtm-*''</code>, elimina /etc/rtm y marca RTM como desinstalado. Los restos de Puppet pueden requerir limpieza manual; revisa los manifiestos específicos de RTM en <code>/etc/puppet/</code>. En un host ajeno a OVH no se instalaron paquetes RTM, así que no hay nada que eliminar."
},
"related": {
"heading": "Relacionado",
@@ -47,7 +47,7 @@
"tail": " — referencia de monitorización del host local."
},
{
"label": "Customizable Post-Install",
"label": "Post-instalación personalizable",
"href": "/docs/post-install/customizable",
"tail": " — volver al menú padre."
}
+18 -18
View File
@@ -1,11 +1,11 @@
{
"meta": {
"title": "Post-instalación: Red | ProxMenux Documentation",
"description": "Optimizaciones relacionadas con la red en el script post-instalación Customizable de ProxMenux: forzar APT sobre IPv4, aplicar un perfil curado de tuning de sysctl, instalar Open vSwitch, activar TCP BBR + Fast Open, y fijar nombres de interfaz a sus direcciones MAC."
"title": "Post-instalación: Red | Documentación de ProxMenux",
"description": "Opciones de red de la post-instalación personalizable de ProxMenux: forzar APT sobre IPv4, aplicar un perfil sysctl seleccionado, instalar Open vSwitch, activar TCP BBR + Fast Open y vincular los nombres de interfaz a sus direcciones MAC."
},
"header": {
"title": "Post-instalación: Red",
"section": "Settings post-install Proxmox"
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Qué cubre esta categoría",
@@ -19,13 +19,13 @@
},
"sysctl": {
"heading": "Aplicar optimizaciones de red",
"intro": "Escribe un perfil sysctl curado en <code>/etc/sysctl.d/99-network.conf</code> que cubre buffers de socket core, hardening de ICMP, protección básica contra spoof y tamaños de buffer TCP que tienen sentido en un hipervisor con muchos flujos concurrentes.",
"tunedTitle": "Qué se tunea",
"intro": "Escribe un perfil sysctl seleccionado en <code>/etc/sysctl.d/99-network.conf</code> que ajusta los búferes de sockets del núcleo, refuerza ICMP, añade protección básica contra suplantación y configura búferes TCP adecuados para un hipervisor con muchos flujos simultáneos.",
"tunedTitle": "Qué se ajusta",
"headerArea": "Área",
"headerSettings": "Ajustes clave",
"rows": [
{
"area": "Buffers de socket core",
"area": "Búferes de sockets del núcleo",
"settings": "<code>netdev_max_backlog=8192</code>, <code>rmem_max=16M</code>, <code>wmem_max=16M</code>, <code>somaxconn=8192</code>"
},
{
@@ -37,7 +37,7 @@
"settings": "<code>accept_redirects=0</code>, <code>accept_source_route=0</code>, <code>secure_redirects=0</code>, <code>send_redirects=0</code>, <code>log_martians=0</code>"
},
{
"area": "Reverse path filter",
"area": "Filtro de ruta inversa",
"settings": "<code>rp_filter=2</code> (modo loose, mira la nota abajo)"
},
{
@@ -64,17 +64,17 @@
"intro": "Instala <code>openvswitch-switch</code> + <code>openvswitch-common</code>. Estos paquetes añaden OVS como implementación alternativa de bridges a los bridges Linux estándar que Proxmox usa por defecto. La instalación por sí sola no cambia ninguna configuración de red — los bridges <code>vmbrX</code> existentes siguen funcionando. OVS pasa a estar disponible en la UI de Proxmox cuando <em>creas</em> un bridge nuevo y lo eliges del desplegable de tipo.",
"tipTitle": "Cuándo tiene sentido OVS",
"tipBody": "Considera OVS si necesitas <strong>trunking VLAN con IDs de VLAN no contiguos</strong>, <strong>LACP con LLDP en modos específicos</strong>, <strong>programación de flujos granular</strong> (OpenFlow), o interoperación con controladores SDN. Para un home lab con un par de VLANs y un único uplink LACP, los bridges Linux estándar + <code>vmbrX.VID</code> son más simples y van perfectamente bien.",
"revertTitle": "Reversible desde el menú Uninstall",
"revertBody": "OVS está registrado. <link>Uninstall Optimizations</link> ejecuta <code>apt purge</code> sobre <code>openvswitch-switch</code> y <code>openvswitch-common</code>. Migra cualquier bridge OVS de vuelta a bridges Linux <em>antes</em> de desinstalar, si no las VMs sobre esos bridges pierden red en el próximo arranque. Equivalente manual:"
"revertTitle": "Reversible desde el menú Desinstalar",
"revertBody": "OVS queda registrado. <link>Desinstalar optimizaciones</link> ejecuta <code>apt purge</code> sobre <code>openvswitch-switch</code> y <code>openvswitch-common</code>. Migra los bridges OVS a bridges Linux <em>antes</em> de desinstalar; de lo contrario, sus VM perderán la red en el próximo arranque. Equivalente manual:"
},
"bbr": {
"heading": "Activar TCP BBR + TCP Fast Open",
"intro": "Escribe dos archivos sysctl y los recarga. BBR sustituye el control de congestión por defecto CUBIC por el algoritmo basado en ancho de banda de Google, que maneja long-fat pipes y enlaces con pérdidas mucho mejor. TCP Fast Open (TFO) elimina un round trip en conexiones TCP repetidas al transportar datos en el SYN.",
"intro": "Escribe dos archivos sysctl y los recarga. BBR sustituye el control de congestión CUBIC por el algoritmo de Google basado en ancho de banda, que gestiona mejor los enlaces de gran capacidad y alta latencia y los enlaces con pérdidas. TCP Fast Open (TFO) elimina un intercambio de ida y vuelta en conexiones TCP repetidas enviando datos en el SYN.",
"verifyTitle": "Verificación",
"impactTitle": "El impacto depende de la carga",
"impactBody": "BBR brilla en enlaces de alta latencia o con pérdidas (replicación intercontinental, túneles VPN, clientes móviles). En una LAN entre dos máquinas en el mismo switch, la diferencia a menudo está dentro del ruido. TFO ayuda más a conexiones HTTP cortas y repetidas.",
"revertTitle": "Reversible desde el menú Uninstall",
"revertBody": "BBR/TFO están registrados. <link>Uninstall Optimizations</link> elimina los dos ficheros sysctl (<code>/etc/sysctl.d/99-tcp-bbr.conf</code> y <code>99-tcp-fastopen.conf</code>) y recarga sysctl para que el kernel vuelva a <code>cubic</code> y a <code>tcp_fastopen=1</code>. Equivalente manual:"
"revertTitle": "Reversible desde el menú Desinstalar",
"revertBody": "BBR/TFO quedan registrados. <link>Desinstalar optimizaciones</link> elimina los dos archivos sysctl (<code>/etc/sysctl.d/99-kernel-bbr.conf</code> y <code>99-tcp-fastopen.conf</code>) y recarga la configuración restante. Borrar un archivo no restablece sus valores activos en el núcleo. Los valores predeterminados como <code>cubic</code> y <code>tcp_fastopen=1</code> vuelven tras reiniciar, salvo que otra configuración los sobrescriba. Equivalente manual:"
},
"names": {
"heading": "Nombres de interfaz (persistentes)",
@@ -83,17 +83,17 @@
"whyItems": [
"Añadir o quitar dispositivos PCIe puede desplazar la numeración del bus, convirtiendo <code>enp3s0</code> en <code>enp4s0</code>. Si tu <code>/etc/network/interfaces</code> referencia el nombre antiguo, el bridge desaparece al reiniciar.",
"Actualizaciones de BIOS / firmware a veces cambian cómo se enumeran los dispositivos, con el mismo efecto.",
"Contenedores LXC con NICs <code>hotplug</code> y enlaces bonded pueden hacer race en el arranque y acabar nombrados de forma inconsistente. Fijarlos lo soluciona."
"El auxiliar escribe archivos <code>.link</code> para las NIC físicas, incluidos los puertos de los bonds, con la MAC que muestra sysfs en ese momento; en los puertos de un bond puede ser la MAC compartida del bond, así que comprueba sus nombres tras reiniciar. Omite interfaces virtuales como veth de LXC y los propios dispositivos bond; no corrige carreras de nombres de NIC virtuales <code>hotplug</code>."
],
"writtenTitle": "Qué se escribe",
"writtenIntro": "Un archivo por NIC física, en <code>/etc/systemd/network/10-proxmenux-&lt;iface&gt;.link</code>. Cada archivo comienza con la cabecera <code># Managed by ProxMenux — do not edit</code>, marca que permite a ProxMenux distinguir sus propios archivos de los <code>.link</code> provistos por el usuario o por otros paquetes.",
"writtenOutro": "Los archivos <code>.link</code> de otros paquetes o escritos a mano por el usuario se dejan intactos — solo se gestionan los archivos que llevan la cabecera de ProxMenux. En cada nueva ejecución la función reconcilia su propio conjunto: relee <code>MACAddress=</code> de cada <code>10-proxmenux-*.link</code> y elimina los cuya MAC ya no aparece en <code>/sys/class/net/</code>. Los archivos escritos por una versión antigua de ProxMenux en el formato <code>10-&lt;iface&gt;.link</code> se migran automáticamente en la primera ejecución.",
"pveTitle": "PVE 9 vs PVE 8",
"pveBody": "En Proxmox VE 9 (<code>systemd-networkd</code> nativo), el script recarga las reglas udev tras escribir los archivos <code>.link</code> para que las nuevas NICs hotplug cojan el nombre correcto sin reiniciar. En PVE 8 (<code>ifupdown2</code>), el naming de interfaz se resuelve en el arranque de todos modos — se requiere un reinicio para que los cambios surtan efecto. El script activa el flag de reinicio en cualquier caso para que Personalizable te lo pregunte.",
"pveBody": "El script utiliza archivos <code>.link</code> de systemd para los nombres persistentes. En Proxmox VE 9 también recarga las reglas udev al escribirlos, para que una NIC ya fijada que se vuelva a conectar o detectar aplique su regla sin reiniciar. Comprueba las interfaces existentes tras reiniciar tanto en PVE 8 como en PVE 9. Esto no sustituye <code>ifupdown2</code> en el host. El script marca el reinicio como necesario en ambos casos para que la post-instalación personalizable lo solicite.",
"reviewTitle": "Revisa antes el /etc/network/interfaces existente",
"reviewBody": "Si tu host tiene configuración legacy en <code>/etc/network/interfaces</code> que referencia nombres de NIC generados por el esquema por defecto del kernel, fijar los nombres <em>de hoy</em> es exactamente lo que quieres. Pero si ya has customizado manualmente la configuración alrededor de nombres específicos, comprueba dos veces que el pinning coincide con lo que el archivo interfaces espera antes de reiniciar.",
"revertTitle": "Reversible desde el menú Uninstall",
"revertBody": "<link>Uninstall Optimizations</link> solo borra los archivos <code>10-proxmenux-*.link</code> que llevan la cabecera de ProxMenux en <code>/etc/systemd/network/</code>. Cualquier archivo <code>.link</code> añadido por el usuario o por otro paquete se preserva. Los nombres de interfaz vuelven al comportamiento por defecto de systemd en el siguiente reinicio."
"revertTitle": "Reversible desde el menú Desinstalar",
"revertBody": "<link>Desinstalar optimizaciones</link> elimina solo los archivos <code>10-proxmenux-*.link</code> con cabecera ProxMenux de <code>/etc/systemd/network/</code>. Conserva cualquier <code>.link</code> añadido por el usuario u otro paquete. Los nombres vuelven al comportamiento predeterminado de systemd al reiniciar."
},
"related": {
"heading": "Relacionado",
@@ -114,12 +114,12 @@
"tail": " — ip, ss, ethtool, sysctl."
},
{
"label": "Uninstall Optimizations",
"label": "Desinstalar optimizaciones",
"href": "/docs/post-install/uninstall",
"tail": " — revierte cualquiera de estos cambios de red."
},
{
"label": "Customizable Post-Install",
"label": "Post-instalación personalizable",
"href": "/docs/post-install/customizable",
"tail": " — volver al menú padre."
}
+19 -19
View File
@@ -1,13 +1,13 @@
{
"meta": {
"title": "ProxMenux Post-instalación: Optional Settings",
"description": "Guía de Optional Settings en el script post-instalación de ProxMenux para funcionalidades y optimizaciones adicionales de Proxmox VE.",
"ogTitle": "ProxMenux Post-instalación: Optional Settings",
"ogDescription": "Guía de Optional Settings en el script post-instalación de ProxMenux para funcionalidades y optimizaciones adicionales de Proxmox VE.",
"ogImageAlt": "ProxMenux Post-instalación Optional Settings"
"title": "Post-instalación de ProxMenux: Ajustes opcionales",
"description": "Guía de los ajustes opcionales del script post-instalación de ProxMenux para añadir funciones y optimizaciones a Proxmox VE.",
"ogTitle": "Post-instalación de ProxMenux: Ajustes opcionales",
"ogDescription": "Guía de los ajustes opcionales del script post-instalación de ProxMenux para añadir funciones y optimizaciones a Proxmox VE.",
"ogImageAlt": "Ajustes opcionales post-instalación de ProxMenux"
},
"title": "Optional Settings",
"intro": "La categoría <strong>Optional Settings</strong> ofrece funcionalidades y optimizaciones adicionales que puedes elegir aplicar a tu instalación de Proxmox VE. Estos ajustes no son esenciales pero pueden mejorar las capacidades de tu sistema en escenarios específicos.",
"title": "Ajustes opcionales",
"intro": "La categoría <strong>Ajustes opcionales</strong> ofrece funciones y optimizaciones adicionales para tu instalación de Proxmox VE. No son esenciales, pero pueden mejorar las capacidades del sistema en situaciones concretas.",
"available": "Funcionalidades opcionales disponibles",
"stepLabel": "Paso",
"ceph": {
@@ -24,7 +24,7 @@
"automates": "Este ajuste automatiza los siguientes comandos:"
},
"amd": {
"title": "Aplicar fixes para CPUs AMD",
"title": "Aplicar correcciones para CPU AMD",
"intro": "Esta opción aplica fixes específicos para CPUs AMD EPYC y Ryzen para mejorar la estabilidad y la compatibilidad.",
"doesIntro": "Qué hace:",
"doesItems": [
@@ -32,11 +32,11 @@
"Aplica el parámetro de kernel 'idle=nomwait' para prevenir crashes aleatorios (vía /etc/kernel/cmdline en hosts con systemd-boot, o /etc/default/grub en hosts con GRUB — con un .bak del original)",
"Configura KVM para que ignore ciertos MSRs (Model Specific Registers) y mejorar la compatibilidad con guests Windows"
],
"howUse": "Cómo usarlo: Estos fixes se aplican automáticamente y requieren un reinicio del sistema para surtir efecto.",
"howUse": "Cómo usarlo: Estas correcciones se aplican automáticamente y requieren reiniciar el sistema para surtir efecto.",
"automates": "Este ajuste automatiza los siguientes comandos:"
},
"ha": {
"title": "Activar servicios High Availability",
"title": "Activar servicios de alta disponibilidad",
"intro": "Esta opción activa los servicios High Availability (HA) en Proxmox VE, permitiendo failover automático de VMs y contenedores en caso de fallo de un nodo.",
"doesIntro": "Qué hace:",
"doesItems": [
@@ -64,8 +64,8 @@
"doesLabel": "Qué hace:",
"doesItems": [
"Descarga e instala silenciosamente la última versión de Fastfetch",
"Te permite elegir un logo personalizado (<strong>ProxMenux, Proxmox, Helper-Scripts, Home-Labs-Club, Proxmology</strong>, o uno custom)",
"Configura Fastfetch para mostrar <em>\"System optimised by ProxMenux\"</em>",
"Permite elegir un logo (<strong>ProxMenux, Proxmox, Helper-Scripts, Home-Labs-Club, Proxmology</strong> o uno personalizado)",
"Configura Fastfetch para mostrar <em>«Sistema optimizado por ProxMenux»</em>",
"Configura Fastfetch para que se ejecute automáticamente al hacer login en consola"
],
"importantLabel": "Importante:",
@@ -133,7 +133,7 @@
},
"log2ram": {
"title": "Instalar Log2RAM (reducción de desgaste en SSD/NVMe)",
"intro": "Log2RAM monta <code>/var/log</code> sobre una ramdisk tmpfs y sincroniza periódicamente el contenido al disco subyacente. En un hipervisor el churn de journald golpea el SSD del sistema cada pocos segundos; mover las escrituras a RAM reduce el desgaste y la I/O de disco sin perder logs — la sincronización periódica los vuelca a disco y un apagado limpio también los vuelca.",
"intro": "Log2RAM monta <code>/var/log</code> en una ramdisk tmpfs y lo sincroniza periódicamente al disco. Almacenar temporalmente en RAM las escrituras frecuentes de journald puede reducir el desgaste del SSD y la E/S. La sincronización y un apagado limpio guardan los registros, pero un corte brusco puede perder las entradas posteriores a la última sincronización.",
"upstreamLabel": "Proyecto oficial:",
"upstreamUrl": "https://github.com/azlux/log2ram",
"upstreamLinkLabel": "azlux/log2ram en GitHub",
@@ -146,12 +146,12 @@
"Instala un guardián de auto-sync en <code>/usr/local/bin/log2ram-check.sh</code>, conectado a <code>/etc/cron.d/log2ram-auto-sync</code> para ejecutarse cada 10 minutos. Cuando <code>/var/log</code> alcanza el 80% del tamaño de la ramdisk el guardián compacta journald; al 92% primero ejecuta <code>logrotate -f /etc/logrotate.d/proxmox-backup-api</code> si ese archivo existe (para forzar la rotación de los logs del API de PBS, que suelen ser los que más crecen en un host con PBS) y a continuación trunca <code>pveproxy access/error</code> y <code>pveam.log</code> antes de sincronizar. El comando <code>log2ram write</code> por sí solo copia tmpfs a disco pero NO reduce la tmpfs, así que este guardián evita que PVE caiga con <em>No space left on device</em> cuando los logs crecen sin control.",
"Detecta si <code>proxmox-backup-server</code> corre como servicio en el host. Cuando está presente, deposita <code>/etc/logrotate.d/proxmox-backup-api</code> (rotación de 20 MB × 3) y <code>/etc/cron.hourly/proxmox-backup-logrotate</code>, de forma que los logs del API de PBS — el origen habitual del crecimiento en un host con PBS — queden acotados incluso entre las sincronizaciones periódicas de Log2RAM. En hosts sin PBS este paso es un no-op.",
"Ajusta los límites de systemd-journald (<code>SystemMaxUse</code>, <code>RuntimeMaxUse</code>) para que quepan en la ramdisk y así una ráfaga puntual no la llene.",
"Se registra en <code>installed_tools.json</code> para poder revertirlo desde Uninstall Optimizations."
"Se registra en <code>installed_tools.json</code> para poder revertirlo desde Desinstalar optimizaciones."
],
"howUseLabel": "Cómo se usa:",
"howUseBody": "En el flujo Automatizado Log2RAM se aplica sin intervención cuando se detecta un disco raíz SSD/NVMe. En el flujo Personalizable el script pregunta por el tamaño, el intervalo de sincronización y si activar el guardián de auto-sync al 90%.",
"howUseBody": "En el flujo automatizado Log2RAM se instala sin intervención al detectar un disco raíz SSD/NVMe. El personalizable pregunta por tamaño, intervalo y activación del auxiliar de sincronización. El mensaje indica 90%, pero el auxiliar generado usa los umbrales de limpieza del 80% y actuación intensiva del 92% descritos arriba.",
"verifyLabel": "Verificar y gestionar desde la shell:",
"verifyCode": "# Estado del servicio y timers configurados\nsystemctl status log2ram\nsystemctl list-timers log2ram*\n\n# Uso actual de la ramdisk — /var/log ES la tmpfs\ndf -h /var/log\n\n# Forzar sincronización ahora (tmpfs → disco); NO reduce la tmpfs\nlog2ram write\n\n# Disparar el guardián de auto-sync manualmente (compacta + sincroniza si el uso es alto)\n/usr/local/bin/log2ram-check.sh\n\n# Configuración actual: SIZE, mail, path\ncat /etc/log2ram.conf\n\n# Crons específicos de ProxMenux\ncat /etc/cron.d/log2ram /etc/cron.d/log2ram-auto-sync\n\n# Actividad reciente de Log2RAM\njournalctl -u log2ram -n 50 --no-pager"
"verifyCode": "# Service state and configured timers\nsystemctl status log2ram\nsystemctl list-timers log2ram*\n\n# Current ramdisk usage — /var/log IS the tmpfs itself\ndf -h /var/log\n\n# Force a sync now (tmpfs → disk); does NOT shrink the tmpfs\nlog2ram write\n\n# Trigger the auto-sync guard on demand (vacuum + sync when usage is high)\n/usr/local/bin/log2ram-check.sh\n\n# Current config: SIZE, mail settings, path\ncat /etc/log2ram.conf\n\n# ProxMenux-specific cron jobs\ncat /etc/cron.d/log2ram /etc/cron.d/log2ram-auto-sync\n\n# Recent Log2RAM activity\njournalctl -u log2ram -n 50 --no-pager"
},
"zram": {
"title": "Activar el perfil de swap con ZRAM",
@@ -163,15 +163,15 @@
"Con esa prioridad el kernel llena primero ZRAM. Un swap en disco que ya exista conserva su prioridad y recibe las páginas que ya no caben en ZRAM.",
"Antes de cambiar nada, busca otra configuración de ZRAM: un swap zram activo, una línea zram en <code>/etc/fstab</code>, una unidad de systemd u otro fichero del generador. Si encuentra una, la opción se detiene y la deja como está.",
"Arranca <code>dev-zram0.swap</code> y comprueba que el dispositivo activo coincide con el perfil. Si no coincide, se restaura el estado anterior.",
"Se registra en <code>installed_tools.json</code> para poder revertirlo desde Uninstall Optimizations."
"Se registra en <code>installed_tools.json</code> para poder revertirlo desde Desinstalar optimizaciones."
],
"howUseLabel": "Cómo se usa:",
"howUseBody": "La opción solo forma parte del flujo Personalizable; el flujo Automatizado no la aplica. El dispositivo se crea de nuevo en cada arranque. Mientras está activo, la tarjeta de Memoria del ProxMenux Monitor muestra su capacidad, el swap usado, el algoritmo, la relación de compresión y la memoria física que ocupa.",
"verifyLabel": "Verificar desde la shell:",
"verifyCode": "# Dispositivos de swap activos y su prioridad\nswapon --show\n\n# Dispositivo ZRAM: algoritmo, tamaño y datos comprimidos\nzramctl\n\n# Perfil escrito por ProxMenux\ncat /etc/systemd/zram-generator.conf.d/90-proxmenux.conf\n\n# Estado de la unidad de swap\nsystemctl status dev-zram0.swap"
"verifyCode": "# Active swap devices and their priority\nswapon --show\n\n# ZRAM device: algorithm, size and compressed data\nzramctl\n\n# Profile written by ProxMenux\ncat /etc/systemd/zram-generator.conf.d/90-proxmenux.conf\n\n# State of the swap unit\nsystemctl status dev-zram0.swap"
},
"autoApplication": {
"title": "Aplicación automática",
"body": "Estas funcionalidades opcionales solo se aplican cuando se seleccionan específicamente durante el proceso post-instalación. Cada funcionalidad puede elegirse individualmente según tus necesidades y preferencias específicas."
"body": "En el flujo personalizable, selecciona cada función opcional según tus necesidades. Log2RAM también forma parte del automatizado con detección de hardware; ZRAM es exclusivo del personalizable. Revisa cada sección para conocer las preguntas y requisitos."
}
}
@@ -1,12 +1,12 @@
{
"meta": {
"title": "Post-instalación: Rendimiento | ProxMenux Documentation",
"description": "Opciones de rendimiento en el script post-instalación Customizable de ProxMenux. Sustituye gzip de un solo hilo por pigz (gzip paralelo) para backups y compresión más rápidos en hosts multinúcleo."
"title": "Post-instalación: Rendimiento | Documentación de ProxMenux",
"description": "Opciones de rendimiento en el script post-instalación Personalizable de ProxMenux. Sustituye gzip de un solo hilo por pigz (gzip paralelo) para backups y compresión más rápidos en hosts multinúcleo."
},
"header": {
"title": "Post-instalación: Rendimiento",
"description": "Opciones de rendimiento dentro del script post-instalación Customizable. Por ahora esta categoría contiene una sola optimización: sustituir gzip por pigz para que los backups y la compresión usen todos los núcleos de la CPU en lugar de uno.",
"section": "Settings post-install Proxmox"
"description": "Opciones de rendimiento del script post-instalación Personalizable. Esta categoría contiene una sola optimización: sustituir gzip por pigz para que los backups y la compresión usen todos los núcleos de la CPU en lugar de uno.",
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Qué cubre esta categoría",
@@ -16,7 +16,7 @@
"heading": "Usar pigz para compresión gzip más rápida",
"intro": "El <code>gzip</code> estándar comprime datos usando <strong>un solo núcleo de CPU</strong>. En hosts Proxmox modernos con 8, 16 o 32 núcleos, eso es un cuello de botella enorme durante backups <code>vzdump</code> de VM/CT, rotación de logs y cualquier otra cosa que pase por <code>gzip</code>. <a>pigz</a> es un reemplazo paralelo drop-in: misma salida compatible con gzip, pero reparte el trabajo entre todos los núcleos.",
"doesTitle": "Qué hace ProxMenux",
"doesIntro": "Cuatro pasos, todos idempotentes:",
"doesIntro": "Cinco pasos, todos idempotentes:",
"doesItems": [
"Establece <code>pigz: 1</code> en <code>/etc/vzdump.conf</code> para que la herramienta de backup de Proxmox use pigz de forma nativa.",
"Instala el paquete apt <code>pigz</code> si no está presente.",
@@ -26,8 +26,8 @@
],
"replacesTitle": "Esto sustituye un binario del sistema",
"replacesBody": "Colocar un wrapper en el lugar de <code>gzip</code> es inusual. Es seguro (el wrapper produce salida compatible con gzip), pero conviene saberlo: scripts que tengan paths hardcodeados, que se ejecuten dentro de chroots restrictivos o que verifiquen hashes de binarios pueden comportarse de forma distinta. El binario real se conserva como <code>gzip.distrib</code> y, al ser una desviación de dpkg, una actualización del paquete <code>gzip</code> — o la actualización de Proxmox VE 8 a 9 — actualiza ese fichero y deja el wrapper en su sitio.",
"revertTitle": "Reversible desde el menú Uninstall",
"revertBody": "Esta optimización está registrada. <link>Uninstall Optimizations</link> copia el binario real desde <code>gzip.distrib</code> sobre el wrapper, elimina la desviación y el <code>pigzwrapper</code>, comenta la línea <code>pigz</code> de <code>/etc/vzdump.conf</code> y ejecuta <code>apt purge pigz</code> una vez verificado que gzip funciona. Equivalente manual en Proxmox VE 9:",
"revertTitle": "Reversible desde el menú Desinstalar",
"revertBody": "Esta optimización está registrada. <link>Desinstalar optimizaciones</link> copia el binario real desde <code>gzip.distrib</code> sobre el wrapper, elimina la desviación y el <code>pigzwrapper</code>, comenta la línea <code>pigz</code> de <code>/etc/vzdump.conf</code> y ejecuta <code>apt purge pigz</code> tras verificar que gzip funciona. Equivalente manual en Proxmox VE 9:",
"verifyTitle": "Verificación",
"verifyBody": "Tras aplicar, <code>gzip --version</code> debería mencionar pigz. Un benchmark rápido también muestra la diferencia de velocidad en un host multinúcleo:",
"whenTitle": "Cuándo importa más",
@@ -52,7 +52,7 @@
"tail": " — tuning de descriptores de fichero y de memoria."
},
{
"label": "Customizable Post-Install",
"label": "Post-instalación personalizable",
"href": "/docs/post-install/customizable",
"tail": " — volver al menú padre."
}
@@ -1,15 +1,15 @@
{
"meta": {
"title": "Post-instalación: Seguridad | ProxMenux Documentation",
"description": "Opciones de seguridad disponibles en el script post-instalación Customizable de ProxMenux. Por ahora una sola opción: desactivar el servicio portmapper/rpcbind para reducir la superficie de ataque del host."
"title": "Post-instalación: Seguridad | Documentación de ProxMenux",
"description": "Opciones de seguridad disponibles en el script post-instalación Personalizable de ProxMenux. Por ahora una sola opción: desactivar el servicio portmapper/rpcbind para reducir la superficie de ataque del host."
},
"header": {
"title": "Post-instalación: Seguridad",
"section": "Settings post-install Proxmox"
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Qué cubre esta categoría",
"body": "La seguridad post-instalación se limita al <strong>hardening del host que es seguro aplicar sin supervisión</strong> — cosas que desactivan servicios que casi nadie necesita y que se pueden deshacer desde el menú Uninstall. Las herramientas de seguridad activa (Fail2Ban para prevención de intrusiones, Lynis para auditoría) viven bajo la entrada dedicada <em>Seguridad</em> del menú principal de ProxMenux, no aquí en post-instalación."
"body": "La seguridad post-instalación se limita al <strong>refuerzo del host que se puede aplicar sin supervisión de forma segura</strong>: desactivar servicios que casi nadie necesita y poder revertirlo desde Desinstalar. Las herramientas de seguridad activa (Fail2Ban para prevenir intrusiones y Lynis para auditorías) están en la entrada <em>Seguridad</em> del menú principal de ProxMenux, fuera de la post-instalación."
},
"rpcbind": {
"heading": "Desactivar portmapper / rpcbind",
@@ -27,7 +27,7 @@
"verifyTitle": "Verificación",
"verifyBody": "Tras aplicar, confirma que <code>rpcbind</code> está apagado y que nada escucha en el puerto 111:",
"reversibleTitle": "Restaura el estado original del servicio",
"reversibleBody": "El cambio queda registrado en <code>installed_tools.json</code>. <link>Uninstall Optimizations</link> devuelve cada unidad de rpcbind al estado habilitado o deshabilitado y activo o inactivo que tenía antes de aplicar ProxMenux; no presupone que rpcbind estuviera habilitado en todos los hosts."
"reversibleBody": "El cambio queda registrado en <code>installed_tools.json</code>. <link>Desinstalar optimizaciones</link> devuelve cada unidad de rpcbind al estado habilitado o deshabilitado y activo o inactivo que tenía antes de aplicar ProxMenux; no presupone que rpcbind estuviera habilitado en todos los hosts."
},
"related": {
"heading": "Relacionado",
@@ -48,7 +48,7 @@
"tail": " — estado de servicios, journalctl, referencia de lynis audit."
},
{
"label": "Customizable Post-Install",
"label": "Post-instalación personalizable",
"href": "/docs/post-install/customizable",
"tail": " — volver al menú padre."
}
+27 -27
View File
@@ -1,24 +1,24 @@
{
"meta": {
"title": "Post-instalación: Almacenamiento | ProxMenux Documentation",
"title": "Post-instalación: Almacenamiento | Documentación de ProxMenux",
"description": "Optimizaciones de almacenamiento en el script post-instalación Customizable de ProxMenux: dimensionado del ARC de ZFS basado en la RAM del host, zfs-auto-snapshot para snapshots periódicas, y eliminación de los límites de velocidad de backups vzdump."
},
"header": {
"title": "Post-instalación: Almacenamiento",
"section": "Settings post-install Proxmox"
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Qué cubre esta categoría",
"body": "Cuatro optimizaciones relacionadas con almacenamiento: tunear el tamaño de la caché <strong>ARC de ZFS</strong> a una fracción sensata de la RAM del host, instalar y programar <strong>auto-snapshots de ZFS</strong>, activar <strong>autotrim de ZFS</strong> en pools SSD/NVMe y eliminar throttles de <strong>vzdump</strong> para que los backups corran a máxima velocidad. Las cuatro son independientes — elige las que se ajusten a tu setup. Una quinta optimización cercana al almacenamiento, <link>Log2RAM</link>, reduce el desgaste del SSD/NVMe moviendo <code>/var/log</code> a una ramdisk — vive en la página Optional porque el menú Personalizable de ProxMenux la agrupa allí."
},
"trackedTitle": "Las cuatro están registradas en el menú Uninstall",
"trackedBody": "Cada una de estas opciones registra un tool en <code>installed_tools.json</code>, así que aparecen en <link>Uninstall Optimizations</link>. Revertir <code>zfs_arc</code> elimina <code>/etc/modprobe.d/99-zfsarc.conf</code> y reconstruye initramfs; <code>zfs_auto_snapshot</code> revierte la programación cron y ofrece purgar el paquete; <code>zfs_autotrim</code> pone <code>autotrim=off</code> en los pools que activó; <code>vzdump_speed</code> restaura <code>/etc/vzdump.conf</code> desde el <code>.bak</code> que la instalación creó.",
"trackedTitle": "Las cuatro se registran en el menú Desinstalar",
"trackedBody": "Cada una de estas opciones registra un tool en <code>installed_tools.json</code>, así que aparecen en <link>Desinstalar optimizaciones</link>. Revertir <code>zfs_arc</code> elimina <code>/etc/modprobe.d/99-zfsarc.conf</code> y reconstruye initramfs; <code>zfs_auto_snapshot</code> revierte la programación cron y ofrece purgar el paquete; <code>zfs_autotrim</code> pone <code>autotrim=off</code> en los pools que activó; <code>vzdump_speed</code> restaura <code>/etc/vzdump.conf</code> desde el <code>.bak</code> que la instalación creó.",
"arc": {
"heading": "Optimizar el tamaño del ARC de ZFS",
"intro": "El <strong>Adaptive Replacement Cache (ARC)</strong> es la caché de lectura en memoria de ZFS. Sin tuning explícito, ZFS coge alegremente hasta la mitad de la RAM del host para sí mismo, lo que es excesivo en un host Proxmox que también necesita memoria para VMs y LXCs. Esta opción limita el ARC a una fracción sensata de la RAM total según el tamaño de la máquina.",
"intro": "La <strong>Adaptive Replacement Cache (ARC)</strong> es la caché de lectura en memoria de ZFS. Las instalaciones Proxmox VE desde 8.1 fijan un límite del 10% de RAM, con máximo 16 GiB; hosts antiguos o actualizados pueden diferir. Esta opción escribe esa misma política de forma explícita (RAM/10, con un máximo de 16 GiB y un mínimo de 64 MiB) en su propio archivo, lo que cubre también hosts antiguos o actualizados. Revisa ajustes y carga: una caché menor no siempre es más rápida.",
"sizingTitle": "Reglas de dimensionado",
"headerRam": "RAM del host",
"headerMax": "Cap ARC",
"headerMax": "Límite del ARC",
"rows": [
{
"ram": "Fórmula",
@@ -41,12 +41,12 @@
"max": "16 GiB (tope)"
}
],
"after": "El archivo <code>/etc/modprobe.d/99-zfsarc.conf</code> contiene una única directiva — <code>options zfs zfs_arc_max=…</code>. El resto de parámetros del módulo (<code>zfs_arc_min</code>, prefetch/write throttle de L2ARC, timeout de TXG) se dejan en los valores por defecto de OpenZFS. Antes de escribir, un paso de reconciliación escanea otros <code>*.conf</code> en <code>/etc/modprobe.d/</code> que definan <code>zfs_arc_min</code> / <code>zfs_arc_max</code>, los respalda a <code>/usr/local/share/proxmenux/backups/zfs_arc/</code> con un manifest, y elimina las líneas en conflicto para que solo quede activo el fichero de ProxMenux. Tras escribir el archivo, ProxMenux ejecuta <code>update-initramfs -u -k all</code> y, cuando corresponde, <code>proxmox-boot-tool refresh</code>, para que el cap llegue también al initramfs que usan las instalaciones con ZFS-on-root.",
"after": "El archivo <code>/etc/modprobe.d/99-zfsarc.conf</code> contiene solo <code>options zfs zfs_arc_max=…</code>. Esta opción no ajusta otros parámetros ZFS (<code>zfs_arc_min</code>, lectura anticipada/límite de escritura L2ARC, tiempo de espera TXG). Antes busca otros <code>*.conf</code> en <code>/etc/modprobe.d/</code> que definan <code>zfs_arc_min</code> / <code>zfs_arc_max</code>, los copia con un manifiesto a <code>/usr/local/share/proxmenux/backups/zfs_arc/</code> y elimina de ellos los valores <code>zfs_arc_min</code> / <code>zfs_arc_max</code> en conflicto (el resto de opciones de esas líneas se conserva), para que solo el archivo ARC de ProxMenux fije el límite. Después ejecuta <code>update-initramfs -u -k all</code> y, si procede, <code>proxmox-boot-tool refresh</code> para incorporar el límite al initramfs de los sistemas con raíz ZFS.",
"rebootTitle": "Requiere reinicio para surtir efecto",
"rebootBody": "Los ajustes del ARC se leen cuando se carga el módulo del kernel <code>zfs</code>. Para que el cap se aplique en hosts ZFS-on-root, ProxMenux regenera el initramfs con <code>update-initramfs -u -k all</code> y, cuando corresponde, refresca el cargador de arranque con <code>proxmox-boot-tool refresh</code>. Un reinicio sigue siendo necesario para que el módulo relea el parámetro; el flag de \"se requiere reinicio\" se activa automáticamente.",
"safeTitle": "Seguro en hosts sin ZFS",
"safeBody": "La función solo escribe la configuración cuando <code>zpool list</code> reporta al menos un pool ZFS importado. En hosts Proxmox solo ext4 / LVM, o en máquinas con las utilidades ZFS instaladas pero sin ningún pool importado, marcar esta opción es un no-op — no se escribe nada.",
"verifyTitle": "Verificación y rollback manual"
"verifyTitle": "Verificación y reversión manual"
},
"autoSnap": {
"heading": "Instalar ZFS auto-snapshot",
@@ -57,27 +57,27 @@
"headerKept": "Snapshots conservadas",
"rows": [
{
"label": "frequent",
"label": "frecuentes",
"runs": "cada 15 min",
"kept": "4"
},
{
"label": "hourly",
"label": "horaria",
"runs": "cada hora",
"kept": "1"
},
{
"label": "daily",
"label": "diario",
"runs": "una vez al día",
"kept": "1"
},
{
"label": "weekly",
"label": "semanales",
"runs": "una vez por semana",
"kept": "1"
},
{
"label": "monthly",
"label": "mensual",
"runs": "una vez al mes",
"kept": "1"
}
@@ -86,26 +86,26 @@
"conservativeBody": "ProxMenux viene con una retención conservadora (solo 4 frequent + 1 de cada intervalo más largo) para que el almacenamiento de snapshots de ZFS no se infle. Si quieres una retención mayor, edita los números en <code>/etc/cron.d/zfs-auto-snapshot</code>, <code>/etc/cron.hourly/zfs-auto-snapshot</code>, etc. después de ejecutar el script.",
"onlyZfsTitle": "Solo útil en pools ZFS",
"onlyZfsBody": "Instalar el paquete en un host solo ext4 es inofensivo pero inútil — no hay datasets ZFS de los que tomar snapshot. Sáltate esta opción si no usas ZFS.",
"verifyTitle": "Verificación y rollback manual"
"verifyTitle": "Verificación y reversión manual"
},
"autotrim": {
"heading": "Activar ZFS autotrim (pools SSD/NVMe)",
"intro": "Activa la propiedad <code>autotrim</code> en cada pool ZFS que esté respaldado exclusivamente por SSDs o NVMe con soporte TRIM. Los pools que incluyen un solo vdev HDD se saltan automáticamente — TRIM en discos rotacionales no tiene sentido y ZFS lo rechazará. Los pools que ya estaban configurados con <code>autotrim=on</code> se dejan como están.",
"intro": "Activa <code>autotrim</code> en pools ZFS formados exclusivamente por SSD o NVMe compatibles con TRIM. El script omite por precaución los pools con algún dispositivo rotacional. Conserva los pools que ya tenían <code>autotrim=on</code>.",
"trimTitle": "Qué hace TRIM, y por qué importa en ZFS",
"trimBody1": "Las SSDs / NVMe gestionan el almacenamiento interno en erase blocks de tamaño fijo que son mucho mayores que los sectores lógicos con los que habla el sistema de archivos. Cuando un sistema de archivos borra un archivo, el disco no lo sabe — sigue pensando que esos sectores están en uso, así que su garbage collector interno sigue moviendo datos obsoletos para liberar nuevos erase blocks. <strong>TRIM</strong> es el comando estándar que el SO usa para decirle al disco \"estos sectores ya están libres, puedes borrarlos por adelantado\".",
"trimBody2": "Sin TRIM, el rendimiento de la SSD se degrada con el tiempo a medida que el disco se queda sin bloques pre-borrados y tiene que hacer erase-on-write, y la amplificación de escritura aumenta — ambas cosas acortan la vida útil del disco. Con TRIM activado, el disco puede mantener un pool saludable de bloques vacíos listos para escribir.",
"trimBody3": "En ZFS, <code>autotrim=on</code> es el equivalente moderno del comando periódico <code>zpool trim &lt;pool&gt;</code> — en lugar de tener que acordarte de ejecutar un trim manualmente (o programar uno), el pool emite comandos TRIM automáticamente y de forma continua a medida que los bloques se liberan. Es de bajo overhead y es el ajuste recomendado para pools respaldados por SSD.",
"trimBody3": "Con <code>autotrim=on</code>, ZFS aplica TRIM en segundo plano al espacio liberado recientemente, agrupando rangos. Otra opción es <code>zpool trim &lt;pool&gt;</code> periódico. Autotrim evita otra programación, pero su impacto depende del dispositivo; el TRIM manual periódico puede ir mejor en algunas unidades modestas.",
"practicalTitle": "¿Por qué es práctico activarlo?",
"practicalItems": [
"<strong>Rendimiento de escritura sostenido.</strong> Las SSDs que nunca ven comandos TRIM se ralentizan de forma medible con los meses. Autotrim le facilita el trabajo a la controladora.",
"<strong>Longevidad del disco.</strong> Menor amplificación de escritura significa menos escrituras NAND totales para la misma cantidad de datos — medible en años de vida útil del disco.",
"<strong>Rendimiento de escritura sostenido.</strong> TRIM puede ayudar al disco a recuperar bloques sin uso. El beneficio y el impacto en latencia dependen del dispositivo y la carga.",
"<strong>Vida útil del disco.</strong> Evitar copias internas innecesarias puede reducir la amplificación de escritura y el desgaste NAND. No garantiza una cantidad concreta de vida adicional.",
"<strong>Sin cron programado que recordar.</strong> A diferencia de un <code>zpool trim</code> periódico, autotrim es fire-and-forget — el pool lo maneja por su cuenta."
],
"whenTitle": "¿Cuándo es necesario?",
"whenIntro1": "<strong>Deberías activarlo</strong> en cualquier pool ZFS cuyos vdevs sean todos SSD o NVMe con soporte TRIM — la instalación típica de Proxmox sobre SSDs de consumo o enterprise.",
"whenIntro1": "<strong>Considera activarlo</strong> en pools ZFS solo con SSD/NVMe compatibles con TRIM. Comprueba el comportamiento y la latencia; algunos equipos funcionan mejor con TRIM manual programado.",
"whenIntro2": "<strong>El script se lo salta automáticamente</strong> en:",
"whenSkipItems": [
"Pools que contienen cualquier vdev HDD (rotacional) — TRIM no tiene sentido allí.",
"Pools con algún vdev HDD rotacional: un filtro conservador de hardware del script.",
"Discos sin <code>discard_granularity</code> expuesto en sysfs — normalmente SSDs viejas sin TRIM, o rutas pass-through donde el SO no puede ver el dispositivo subyacente.",
"Pools donde ZFS mismo reporta la propiedad como no soportada (raro; pools muy antiguos).",
"Pools ya configurados con <code>autotrim=on</code> (no-op)."
@@ -115,19 +115,19 @@
"recordedBody": "La función solo escribe un pool en su archivo de estado interno (<code>/usr/local/share/proxmenux/zfs_autotrim_pools</code>) cuando ha cambiado activamente ese pool de <code>off</code> a <code>on</code>. Los pools que ya tenías con autotrim antes de ejecutar el script se dejan fuera de la lista, para que un futuro Uninstall no apague ajustes que tú mismo configuraste — solo se revierten los cambios propios de ProxMenux.",
"manualTitle": "Equivalente manual (ejecuta en tu servidor)",
"manualIntro": "La secuencia completa que el script ejecuta contra cada pool es replicable a mano. Esto es lo que escribirías si quisieras hacer lo mismo en un solo pool sin ProxMenux:",
"verifyTitle": "Verificación y rollback manual",
"verifyTitle": "Verificación y reversión manual",
"oneShotTitle": "¿Necesitas un trim puntual en lugar de continuo?",
"oneShotBody": "Algunos operadores prefieren un trim manual durante horas de baja carga en lugar de actividad de trim continua. Desactiva autotrim y programa un cron que ejecute <code>zpool trim &lt;pool&gt;</code> — mismo objetivo final, distinta cadencia."
"oneShotBody": "Algunos usuarios prefieren un trim manual durante horas de baja carga en lugar de actividad de trim continua. Desactiva autotrim y programa un cron que ejecute <code>zpool trim &lt;pool&gt;</code> — mismo objetivo final, distinta cadencia."
},
"vzdump": {
"heading": "Aumentar la velocidad de backup de vzdump",
"intro": "Por defecto, vzdump de Proxmox throttlea los backups para proteger las VMs/CTs en ejecución de inanición de IO. En muchos setups ese throttle es más conservador de lo necesario. Esta opción quita el cap de ancho de banda y baja la prioridad de I/O para que vzdump pueda saturar el path de almacenamiento durante las ventanas de backup.",
"intro": "Escribe bwlimit: 0 e ionice: 5 en la configuración global de vzdump. Proxmox ya usa ancho de banda sin límite por defecto: solo elimina un límite si estaba configurado. Frente al ionice: 7 predeterminado, 5 da mayor prioridad de E/S de mejor esfuerzo cuando el planificador la respeta. Puede afectar a los huéspedes y no garantiza backups más rápidos.",
"changedTitle": "Qué se cambia en /etc/vzdump.conf",
"backupTitle": "La primera ejecución crea un .bak de vzdump.conf",
"backupBody": "La primera vez que se ejecuta esta opción, ProxMenux copia <code>/etc/vzdump.conf</code> a <code>/etc/vzdump.conf.bak</code> antes de tocarlo. Las ejecuciones siguientes reutilizan ese backup y no lo sobrescriben, para que una configuración editada a mano previa a la primera aplicación se pueda recuperar. Los cambios sobre <code>bwlimit</code> y <code>ionice</code> se hacen con <code>sed</code>, y cualquier otra opción del fichero (compress, pigz, tmpdir, exclude-path, etc.) se preserva.",
"skipTitle": "Cuándo saltárselo",
"skipBody": "En un host con almacenamiento local lento y VMs sensibles a la latencia, quitar el cap de ancho de banda puede causar ralentizaciones notables durante los backups. Si previamente has puesto un <code>bwlimit</code> específico por esa razón, mantenlo — sáltate esta opción.",
"verifyTitle": "Verificación y rollback manual"
"verifyTitle": "Verificación y reversión manual"
},
"related": {
"heading": "Relacionado",
@@ -145,10 +145,10 @@
{
"label": "Comandos de backup y restauración",
"href": "/docs/help-info/backup-commands",
"tail": " — referencia de la CLI de vzdump (ahora sin los caps legacy de bwlimit / ionice)."
"tail": " — referencia de la CLI de vzdump para ancho de banda y prioridad de E/S."
},
{
"label": "Uninstall Optimizations",
"label": "Desinstalar optimizaciones",
"href": "/docs/post-install/uninstall",
"tail": " — revierte cambios de ARC / vzdump."
},
@@ -158,7 +158,7 @@
"tail": " — reduce el desgaste del SSD/NVMe usando una ramdisk para /var/log; documentado en Optional."
},
{
"label": "Customizable Post-Install",
"label": "Post-instalación personalizable",
"href": "/docs/post-install/customizable",
"tail": " — volver al menú padre."
}
+11 -11
View File
@@ -1,11 +1,11 @@
{
"meta": {
"title": "Post-instalación: Sistema | ProxMenux Documentation",
"title": "Post-instalación: Sistema | Documentación de ProxMenux",
"description": "Optimizaciones a nivel de sistema en el script post-instalación Customizable de ProxMenux: límites de tamaño de journald y logrotate, límites de kernel y descriptores de fichero más altos, tuning de memoria balanceado, kexec para reinicios rápidos, y recuperación ante kernel panic."
},
"header": {
"title": "Post-instalación: Sistema",
"section": "Settings post-install Proxmox"
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Qué cubre esta categoría",
@@ -17,10 +17,10 @@
"keyTitle": "Valores clave",
"keyItems": [
"<code>Storage=persistent</code> — conservar logs en disco entre reinicios.",
"<code>SystemMaxUse=64M</code> / <code>RuntimeMaxUse=60M</code> — caps duros sobre el uso de disco/memoria del journal.",
"<code>SystemMaxUse=64M</code> / <code>RuntimeMaxUse=60M</code> — límites de uso de disco y memoria del journal.",
"<code>Compress=yes</code>, <code>Seal=no</code> — comprimir logs, saltar el forward-secure sealing (ahorra CPU).",
"<code>MaxLevelStore=info</code> — almacenar info y superiores (requerido para el visor de logs del ProxMenux Monitor y para que Fail2Ban detecte fallos de autenticación SSH/Proxmox desde el journal).",
"Rate-limits: <code>1000 eventos / 30 s</code> para prevenir flooding de logs.",
"Límite de frecuencia: <code>1000 events / 30 s</code> para evitar una avalancha de registros.",
"<code>ForwardToSyslog=no</code>, <code>ForwardToWall=no</code> — no duplicar mensajes a syslog ni broadcastear a consolas."
],
"tipTitle": "Por qué importa MaxLevelStore=info",
@@ -28,9 +28,9 @@
},
"logrotate": {
"heading": "Optimizar logrotate",
"intro": "Reescribe <code>/etc/logrotate.conf</code> con una política más estricta adecuada para un host que también forma parte de un setup Log2RAM de protección de SSD: rotación diaria, retención de 7 días, trigger de tamaño 10 MB, compresión, y <code>copytruncate</code> para que los servicios activos sigan escribiendo sin reabrir sus archivos de log. El <code>logrotate.conf</code> original se respalda en <code>.bak</code> en la primera aplicación.",
"intro": "Reescribe <code>/etc/logrotate.conf</code> con ajustes globales de frecuencia diaria y tamaño, 7 rotaciones conservadas, compresión y <code>copytruncate</code> para que los servicios sigan escribiendo sin reabrir los archivos. El tamaño aparece después de la frecuencia diaria y prevalece salvo que una regla particular lo cambie. El <code>logrotate.conf</code> original se copia a <code>.bak</code> la primera vez.",
"tipTitle": "Amigable con Log2RAM",
"tipBody": "El trigger <code>size 10M</code> significa que los logs rotan por tamaño <em>o</em> diariamente, lo que ocurra primero. Combinado con el <code>/var/log</code> respaldado en RAM de Log2RAM, esto mantiene el working set pequeño para que los flushes a disco sean baratos."
"tipBody": "La directiva <code>size 10M</code> prevalece sobre el ajuste diario anterior; <em>no</em> significa lo que ocurra primero. Logrotate comprueba el umbral al ejecutarse y las reglas particulares pueden cambiar los valores globales. Con <code>/var/log</code> en la RAM de Log2RAM, revisa las reglas y la frecuencia del temporizador para controlar el espacio."
},
"limits": {
"heading": "Aumentar varios límites del sistema",
@@ -72,7 +72,7 @@
}
],
"tipTitle": "Por qué importa inotify",
"tipBody": "Aplicaciones como Docker, Syncthing, watchers de Node.js, el escáner de biblioteca de Plex y muchas más pegan rápido contra <code>max_user_watches</code>. El valor por defecto en Debian es 8192 — un solo Plex en ejecución puede agotarlo. 1M es generoso y cuesta ~1 KB de RAM por watch, lo que es despreciable."
"tipBody": "Docker, Syncthing, los observadores de archivos de Node.js y los análisis de bibliotecas de Plex pueden agotar <code>max_user_watches</code>. El valor predeterminado depende del núcleo y la memoria; no siempre es 8192. Subirlo a 1M permite más observadores, sin preasignarlos. Los observadores activos consumen memoria del núcleo: vigila el uso en hosts con poca RAM."
},
"memory": {
"heading": "Optimizar ajustes de memoria",
@@ -102,8 +102,8 @@
"verify": {
"heading": "Verificación",
"intro": "Tras aplicar las optimizaciones de Sistema:",
"tipTitle": "Totalmente reversible",
"tipBody": "Las seis opciones están registradas en <code>installed_tools.json</code>, así que aparecen en <link>Uninstall Optimizations</link> si quieres revertir alguna. Las reversiones restauran los valores por defecto de los archivos sysctl, eliminan la unit systemd y el alias de kexec, y resetean journald/logrotate a las configuraciones stock de Debian."
"tipTitle": "Restauración y limitaciones",
"tipBody": "Las seis opciones se registran en <code>installed_tools.json</code> y aparecen en <link>Desinstalar optimizaciones</link>. La restauración elimina los archivos de configuración, la unidad y el alias de kexec, reescribe journald.conf con los valores predeterminados de systemd y restaura logrotate.conf desde su backup. Algunos límites activos requieren otra sesión o reinicio."
},
"related": {
"heading": "Relacionado",
@@ -119,12 +119,12 @@
"tail": " — tuning adicional a nivel de sistema (pigz)."
},
{
"label": "Uninstall Optimizations",
"label": "Desinstalar optimizaciones",
"href": "/docs/post-install/uninstall",
"tail": " — revierte cualquiera de estos cambios."
},
{
"label": "Customizable Post-Install",
"label": "Post-instalación personalizable",
"href": "/docs/post-install/customizable",
"tail": " — volver al menú padre."
}
@@ -1,12 +1,12 @@
{
"meta": {
"title": "Uninstall Optimizations | ProxMenux Documentation",
"title": "Desinstalar optimizaciones | Documentación de ProxMenux",
"description": "Restaura los cambios reversibles de post-instalación aplicados por ProxMenux. Las herramientas registradas usan desinstaladores específicos que conservan el estado anterior del host cuando es posible."
},
"header": {
"title": "Uninstall Optimizations",
"title": "Desinstalar optimizaciones",
"description": "Restaura los cambios reversibles realizados por los scripts de post-instalación Automatizado o Personalizable. ProxMenux registra cada optimización compatible con su función de restauración; las actualizaciones de paquetes quedan excluidas deliberadamente.",
"section": "Settings post-install Proxmox"
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Por qué existe",
@@ -14,8 +14,8 @@
},
"openMenu": {
"heading": "Cómo abrirlo",
"body": "Desde el menú principal de ProxMenux, <strong>Settings post-install Proxmox → Uninstall optimizations</strong>. Verás un checklist de optimizaciones <em>actualmente aplicadas</em> — los items que no has aplicado no aparecen.",
"imageAlt": "Checklist de Uninstall Optimizations mostrando los items actualmente aplicados en el host, con checkboxes para seleccionar cuáles revertir"
"body": "Desde el menú principal, abre <strong>Configuración post instalación de Proxmox → Desinstalar optimizaciones</strong>. Verás una lista de optimizaciones <em>actualmente aplicadas</em>; las no aplicadas no aparecen.",
"imageAlt": "Lista de Desinstalar optimizaciones con las opciones activas del host y casillas para elegir cuáles revertir"
},
"howWorks": {
"heading": "Cómo funciona la reversión",
@@ -40,7 +40,7 @@
"body2": "Cada reversión registra su progreso. Los items que requieren un reinicio (VFIO, nombres de interfaz persistentes) activan un flag que dispara el prompt de reinicio al final."
},
{
"title": "Prompt de reinicio al final",
"title": "Solicitud de reinicio al final",
"body1": "Al terminar la reversión el menú muestra un prompt de reinicio. Los items que cambiaron parámetros del kernel, módulos del kernel o naming de red (VFIO, nombres de interfaz persistentes) sí necesitan el reinicio para surtir efecto; otros no lo necesitan, y el prompt es un valor por defecto de seguridad más que una comprobación por item."
}
]
@@ -53,15 +53,15 @@
"title": "Repositorios y APT",
"items": [
{
"tool": "Subscription Banner Removal",
"tool": "Eliminación del aviso de suscripción",
"restores": "Primero intenta restaurar los archivos de la UI desde los backups propios de ProxMenux (/usr/local/share/proxmenux/backups/proxmoxlib.js.backup.* y, cuando la UI móvil está parcheada, index.html.tpl.backup.*). Solo si un backup falta o está corrupto, cae al reinstalado de pve-manager, proxmox-widget-toolkit, libjs-extjs y libpve-http-server-perl con force-confnew. También limpia las copias .js / .gz cacheadas."
},
{
"tool": "APT Language Skip",
"restores": "Elimina /etc/apt/apt.conf.d/99-disable-translations. APT volverá a descargar paquetes de idioma."
"tool": "Omitir idiomas de APT",
"restores": "Elimina /etc/apt/apt.conf.d/99-disable-translations para que APT pueda descargar índices de descripciones traducidas según el resto de ajustes de idioma."
},
{
"tool": "APT IPv4 Force",
"tool": "Forzar IPv4 en APT",
"restores": "Elimina /etc/apt/apt.conf.d/99-force-ipv4."
},
{
@@ -74,16 +74,16 @@
"title": "Kernel, memoria y límites del sistema",
"items": [
{
"tool": "Memory Settings",
"tool": "Ajustes de memoria",
"restores": "Elimina /etc/sysctl.d/99-memory.conf y recarga sysctl."
},
{
"tool": "Kernel Panic Configuration",
"tool": "Configuración de kernel panic",
"restores": "Elimina /etc/sysctl.d/99-kernelpanic.conf."
},
{
"tool": "System Limits Increase",
"restores": "Elimina /etc/sysctl.d/99-maxwatches.conf, 99-maxkeys.conf, 99-swap.conf, 99-fs.conf y /etc/security/limits.d/99-limits.conf. Revierte los límites PAM y DefaultLimitNOFILE de systemd, y elimina la línea ulimit -n 256000 de /root/.profile."
"tool": "Aumento de los límites del sistema",
"restores": "Elimina /etc/sysctl.d/99-maxwatches.conf, 99-maxkeys.conf, 99-swap.conf, 99-fs.conf y /etc/security/limits.d/99-limits.conf. Revierte límites PAM y DefaultLimitNOFILE de systemd. En /root/.profile solo limpia la línea antigua ulimit -n 256000; la actual ulimit -n 1048576 puede permanecer y requerir eliminación manual."
},
{
"tool": "Perfil de swap con ZRAM",
@@ -95,7 +95,7 @@
"title": "Red",
"items": [
{
"tool": "Network Optimizations",
"tool": "Optimización de la red",
"restores": "Elimina /etc/sysctl.d/99-network.conf, 97-proxmenux-fwbr.conf y 98-proxmenux-rpf.conf junto con la unit proxmenux-fwbr-tune.service, el helper /usr/local/sbin/proxmenux-fwbr-tune y la regla /etc/udev/rules.d/99-zz-proxmenux-fwbr-tune.rules. También elimina la línea source /etc/network/interfaces.d/* de /etc/network/interfaces. Recarga sysctl, systemd y el conjunto de reglas udev."
},
{
@@ -104,23 +104,23 @@
},
{
"tool": "TCP BBR + TCP Fast Open",
"restores": "Elimina /etc/sysctl.d/99-tcp-bbr.conf y 99-tcp-fastopen.conf y recarga sysctl para que el kernel vuelva al control de congestión cubic y a tcp_fastopen=1."
"restores": "Elimina /etc/sysctl.d/99-kernel-bbr.conf y 99-tcp-fastopen.conf y recarga el resto de sysctl. Borrar archivos no restablece valores activos; los predeterminados como cubic y tcp_fastopen=1 vuelven al reiniciar salvo otra configuración."
},
{
"tool": "Persistent Interface Names",
"tool": "Nombres de la interfaz persistentes",
"restores": "Elimina solo los archivos 10-proxmenux-*.link que llevan la cabecera de ProxMenux en /etc/systemd/network/. Cualquier archivo .link provisto por otro paquete o escrito por el usuario se mantiene intacto. Los nombres de interfaz vuelven al comportamiento por defecto de systemd en el siguiente reinicio."
}
]
},
{
"title": "Logging",
"title": "Registro",
"items": [
{
"tool": "Journald Optimization",
"restores": "Reescribe /etc/systemd/journald.conf con los valores por defecto vanilla y reinicia systemd-journald."
"tool": "Optimización de journald",
"restores": "Reescribe /etc/systemd/journald.conf con valores estándar y reinicia systemd-journald."
},
{
"tool": "Logrotate Optimization",
"tool": "Optimización de logrotate",
"restores": "Restaura /etc/logrotate.conf desde el archivo .bak capturado antes del cambio."
},
{
@@ -128,7 +128,7 @@
"restores": "Para y desactiva el servicio y el timer. Purga cron jobs, units systemd, binarios, archivos de configuración y el directorio /var/log.hdd. También desinstala el paquete apt si se instaló por esa vía."
},
{
"tool": "ZFS autotrim",
"tool": "TRIM automático de ZFS",
"restores": "Lee /usr/local/share/proxmenux/zfs_autotrim_pools (la lista de pools que ProxMenux realmente cambió) y ejecuta zpool set autotrim=off en cada uno. Los pools en los que tú activaste autotrim manualmente antes de ejecutar ProxMenux no se tocan."
}
]
@@ -137,7 +137,7 @@
"title": "Shell y apariencia",
"items": [
{
"tool": "Bashrc Customization",
"tool": "Personalización de Bashrc",
"restores": "Restaura /root/.bashrc desde el backup .bak. Si no existe backup, elimina el bloque PMX_CORE_BASHRC por marcadores."
},
{
@@ -162,28 +162,28 @@
"restores": "Elimina los módulos vfio de /etc/modules, las entradas de blacklist nouveau / radeon / nvidia, y los parámetros intel_iommu=on / amd_iommu=on / iommu=pt / pcie_acs_override de /etc/kernel/cmdline (ZFS) o GRUB. Reconstruye initramfs."
},
{
"tool": "AMD CPU fixes (Ryzen/EPYC)",
"tool": "Correcciones para CPU AMD (Ryzen/EPYC)",
"restores": "Elimina idle=nomwait de la cmdline del kernel (ZFS) o GRUB, y las opciones ignore_msrs / report_ignored_msrs de /etc/modprobe.d/kvm.conf."
},
{
"tool": "QEMU Guest Agent (templates)",
"restores": "Lee /usr/local/share/proxmenux/guest_agent.pkg (registrado en tiempo de instalación) y hace apt purge del paquete que se instaló (qemu-guest-agent en hosts estándar, spice-vdagent cuando se usa modo Spice)."
"tool": "Agente invitado para un host Proxmox virtualizado",
"restores": "Lee /usr/local/share/proxmenux/guest_agent.pkg y purga el paquete registrado del host. El instalador elige qemu-guest-agent, open-vm-tools o virtualbox-guest-utils según el hipervisor. Si falta el registro, el desinstalador prueba esos tres paquetes. Actúa en el host Proxmox anidado, no en plantillas de huéspedes."
}
]
},
{
"title": "Storage",
"title": "Almacenamiento",
"items": [
{
"tool": "ZFS ARC sizing",
"tool": "Ajuste del tamaño de ARC de ZFS",
"restores": "Elimina /etc/modprobe.d/99-zfsarc.conf, restaura cualquier *.conf externo en conflicto que se dejó apartado en /usr/local/share/proxmenux/backups/zfs_arc/, reconstruye initramfs y ejecuta proxmox-boot-tool refresh en hosts con systemd-boot."
},
{
"tool": "ZFS auto-snapshot",
"tool": "Instantáneas automáticas de ZFS",
"restores": "Elimina las entradas cron que el script escribió y ofrece hacer apt purge zfs-auto-snapshot. Los datasets de snapshots existentes en los pools se dejan intactos — bórralos por separado si los quieres fuera."
},
{
"tool": "vzdump speed limits",
"tool": "Límites de velocidad de vzdump",
"restores": "Restaura /etc/vzdump.conf desde el .bak que creó la instalación, devolviendo bwlimit e ionice a sus valores previos a ProxMenux."
}
]
@@ -192,15 +192,15 @@
"title": "Servicios y extras",
"items": [
{
"tool": "Time Synchronization",
"tool": "Sincronización del tiempo",
"restores": "Devuelve la zona horaria a UTC (valor por defecto seguro) vía timedatectl."
},
{
"tool": "Entropy Generation (haveged)",
"tool": "Generación de entropía (haveged)",
"restores": "Para, desactiva y purga el paquete haveged."
},
{
"tool": "kexec (fast reboots)",
"tool": "kexec (reinicios rápidos)",
"restores": "Desactiva kexec-pve.service, elimina el archivo de unit y el alias reboot-quick de /root/.bash_profile, purga kexec-tools."
},
{
@@ -212,16 +212,16 @@
"restores": "Copia el gzip real desde gzip.distrib, elimina la desviación de dpkg y /bin/pigzwrapper, comenta la línea pigz en /etc/vzdump.conf y hace apt purge pigz una vez verificado gzip."
},
{
"tool": "High Availability services",
"tool": "Servicios de alta disponibilidad",
"restores": "Para y desactiva pve-ha-lrm, pve-ha-crm y corosync. Los grupos HA y las definiciones de recursos existentes no se eliminan — quítalos desde la UI web si ya no los necesitas."
},
{
"tool": "Ceph repository",
"tool": "Repositorio Ceph",
"restores": "Purga los paquetes Ceph instalados por esta opción, elimina /etc/apt/sources.list.d/ceph.sources en PVE 9 (o la lista Ceph tradicional en PVE 8) y actualiza la caché de APT."
},
{
"tool": "OVH RTM (monitoring)",
"restores": "Ejecuta apt purge sobre cualquier paquete ovh-* que el instalador RTM añadió y borra los manifests puppet que dejó bajo /etc/puppet/. En hosts no-OVH nunca se instaló nada, así que no se elimina nada."
"tool": "OVH RTM (monitorización)",
"restores": "Purga paquetes que coincidan con ovh-rtm*, rtm y rtm-*, elimina /etc/rtm y borra el registro de RTM. Los restos de Puppet en /etc/puppet/ pueden requerir revisión y limpieza manual; el desinstalador no elimina ese directorio. En hosts no OVH el instalador normalmente no hace cambios."
}
]
}
@@ -229,10 +229,10 @@
},
"edge": {
"heading": "Casos límite y matices",
"packageTitle": "La reinstalación de paquetes toca paquetes vivos de Proxmox",
"packageBody": "Revertir <strong>Subscription Banner Removal</strong> reinstala <code>pve-manager</code>, <code>proxmox-widget-toolkit</code>, <code>libjs-extjs</code> y <code>libpve-http-server-perl</code> con <code>--force-confnew</code>. Es generalmente seguro pero sí toca la UI web en ejecución — refresca tu navegador después, y espera unos segundos de reconexión. No lo ejecutes a mitad de una migración o una operación de clonado.",
"packageTitle": "La reinstalación afecta a paquetes de Proxmox en uso",
"packageBody": "Si las copias de ProxMenux no pueden revertir <strong>Eliminación del aviso de suscripción</strong>, la alternativa reinstala <code>pve-manager</code>, <code>proxmox-widget-toolkit</code>, <code>libjs-extjs</code> y <code>libpve-http-server-perl</code> con <code>--force-confnew</code>. Afecta a la interfaz web en uso: recarga el navegador y espera unos segundos de reconexión. Evítalo durante migraciones o clonados.",
"rebootTitle": "Los nombres persistentes y VFIO necesitan reinicio",
"rebootBody": "Eliminar los archivos <code>10-proxmenux-*.link</code> propios de ProxMenux (<em>Persistent Interface Names</em>) y revertir <em>IOMMU/VFIO</em> no afectan al sistema en ejecución — solo importan tras un reinicio. ProxMenux activa el flag de reinicio automáticamente para estos.",
"rebootBody": "Eliminar los archivos <code>10-proxmenux-*.link</code> de ProxMenux (<em>Nombres de interfaz persistentes</em>) y revertir <em>IOMMU/VFIO</em> no cambia el sistema ya arrancado: los cambios se aplican tras reiniciar. ProxMenux marca el reinicio como necesario.",
"perItemTitle": "Puedes revertir una cosa y mantener el resto",
"perItemBody": "El uninstaller opera por item. Si solo quieres eliminar Log2RAM pero mantener el tuning de red y los cambios de bashrc, marca solo <em>Log2RAM</em>. Nada más se toca, y el registro se actualiza en consecuencia."
},
@@ -240,19 +240,19 @@
"heading": "Inspeccionar el registro manualmente",
"intro": "Si quieres ver qué está registrado sin abrir el menú:",
"outro": "Cada entrada <code>\"tool\": true</code> se corresponde con algo que ProxMenux aplicó y puede revertir. Eliminar una entrada manualmente no se recomienda — usa siempre el menú, que también ejecuta la función de reversión en lugar de simplemente olvidarse del cambio.",
"reinstallTitle": "Reinstalación tras uninstall",
"reinstallTitle": "Reinstalar tras desinstalar",
"reinstallBody": "Revertir una optimización no te impide volver a aplicarla más tarde. Abre <link>el menú Post-Install</link> de nuevo y ejecuta Automatizado o Personalizable — el registro recogerá el nuevo estado."
},
"related": {
"heading": "Relacionado",
"items": [
{
"label": "Automated Post-Install",
"label": "Post-instalación automatizada",
"href": "/docs/post-install/automated",
"tail": " — vuelve a aplicar el baseline de valores por defecto sensatos."
},
{
"label": "Customizable Post-Install",
"label": "Post-instalación personalizable",
"href": "/docs/post-install/customizable",
"tail": " — elige un subconjunto distinto."
},
@@ -262,7 +262,7 @@
"tail": " — operación distinta: elimina el propio ProxMenux, no sus optimizaciones aplicadas."
},
{
"label": "Resumen de Post-Install",
"label": "Resumen de post-instalación",
"href": "/docs/post-install",
"tail": "."
}
+22 -22
View File
@@ -1,12 +1,12 @@
{
"meta": {
"title": "Apply Available Updates — Optimizaciones post-instalación | ProxMenux Documentation",
"description": "Cómo ProxMenux detecta cuándo una optimización post-instalación (Log2Ram, Memory Settings, System Limits, Logrotate, tuning de red…) se ha actualizado upstream, y cómo aplicar la nueva versión — desde el menú Post-Install o desde el panel del Monitor."
"title": "Aplicar actualizaciones disponibles — Optimizaciones post-instalación | Documentación de ProxMenux",
"description": "Cómo ProxMenux detecta las nuevas versiones de optimizaciones post-instalación (Log2Ram, ajustes de memoria, límites del sistema, Logrotate, red…) y cómo aplicarlas desde el menú post-instalación o el panel de Monitor."
},
"header": {
"title": "Apply Available Updates",
"title": "Aplicar actualizaciones disponibles",
"description": "Cuando una optimización post-instalación (Log2Ram, Memory Settings, System Limits, Logrotate…) tiene en disco una versión más nueva que la registrada actualmente en el host, ProxMenux la muestra como una actualización disponible. Puedes aplicarla desde el menú Post-Install (lado Scripts) o desde el panel del Monitor — ambas rutas vuelven a ejecutar la misma función post-instalación y refrescan el registro.",
"section": "Settings post-install Proxmox"
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Qué es esto",
@@ -14,7 +14,7 @@
},
"why": {
"heading": "Por qué existe",
"body": "Las optimizaciones post-instalación reciben mejoras de vez en cuando — un mejor tuning de sysctl, un límite de Logrotate más estricto, una nueva heurística de tamaño de Log2RAM, un fix para un caso límite reportado por un tester. Sin una ruta de actualización el operador solo tenía dos opciones: volver a ejecutar manualmente el script post-instalación (lo que reaplica <em>cada</em> optimización) o saltarse la mejora por completo. Apply Available Updates es el término medio: una re-ejecución opt-in por optimización que sube solo las versiones que realmente se han movido."
"body": "Las optimizaciones post-instalación reciben mejoras: ajustes de sysctl, límites Logrotate más estrictos, nuevas reglas para dimensionar Log2RAM o correcciones de casos límite. Sin esta vía había que repetir el script, que reaplica <em>todas</em> las optimizaciones, o renunciar a la mejora. Aplicar actualizaciones disponibles permite elegir individualmente solo las optimizaciones cuya versión ha cambiado."
},
"detection": {
"heading": "Cómo se detectan las actualizaciones",
@@ -25,7 +25,7 @@
},
{
"title": "Registro versionado en el host",
"body": "Cuando el operador aplicó cada optimización, la llamada <code>register_tool</code> correspondiente escribió la versión activa en <code>/usr/local/share/proxmenux/installed_tools.json</code>. Ese archivo es la fuente de verdad de \"qué está activo en este host ahora mismo\"."
"body": "Cuando el usuario aplicó cada optimización, la llamada <code>register_tool</code> correspondiente escribió la versión activa en <code>/usr/local/share/proxmenux/installed_tools.json</code>. Ese archivo es la fuente de verdad de \"qué está activo en este host ahora mismo\"."
},
{
"title": "El Monitor compara ambos lados",
@@ -33,24 +33,24 @@
},
{
"title": "Una notificación por versión nueva",
"body": "Cuando al menos una optimización tiene una actualización pendiente, el Monitor emite una única notificación agrupada — por ejemplo <em>\"4 ProxMenux optimization update(s) available\"</em> — con una línea por herramienta en el mismo formato <code>name (vX → vY)</code> que se usa para las actualizaciones de paquetes de Proxmox. La notificación es anti-cascada para que no se repita día tras día con el mismo conjunto; solo una versión nueva (o una herramienta nueva que entra en la lista) la vuelve a disparar."
"body": "Cuando hay al menos una actualización pendiente, Monitor envía una única notificación agrupada, por ejemplo <em>«4 actualizaciones de optimizaciones de ProxMenux disponibles»</em>, con una línea por herramienta en formato <code>name (vX → vY)</code>, igual que para los paquetes Proxmox. Evita repeticiones diarias del mismo conjunto: solo una versión nueva o una nueva herramienta en la lista vuelve a activarla."
}
]
},
"pathA": {
"heading": "Ruta A — Desde el menú Post-Install",
"intro": "Desde el menú principal de ProxMenux, abre <strong>Settings post-install Proxmox</strong>. Cuando hay actualizaciones pendientes, una entrada nueva <strong>Apply available updates (N)</strong> aparece justo encima de <em>Uninstall optimizations</em>. El número refleja cuántas optimizaciones tienen una versión más nueva en disco que la que el host tiene registrada actualmente. Cuando todo está al día la entrada simplemente no aparece, así el menú se mantiene limpio.",
"menuAlt": "Menú de Post-Install Scripts mostrando la entrada condicional 'Apply available updates (N)' posicionada justo encima de 'Uninstall optimizations', con el contador indicando cuántas optimizaciones tienen una versión más nueva en disco",
"menuCaption": "La entrada <em>Apply available updates (N)</em> solo se renderiza cuando al menos una optimización tiene una actualización pendiente — se oculta cuando el host está al día.",
"heading": "Ruta A — Desde el menú post-instalación",
"intro": "Desde el menú principal de ProxMenux, abre <strong>Configuración post instalación de Proxmox</strong>. Si hay actualizaciones pendientes, aparece <strong>Aplicar actualizaciones disponibles (N)</strong> justo encima de <em>Desinstalar optimizaciones</em>. El número indica cuántas optimizaciones tienen una versión en disco más reciente que la registrada. Si todo está al día, la entrada se oculta.",
"menuAlt": "Menú de scripts post-instalación con la entrada condicional Aplicar actualizaciones disponibles (N) encima de Desinstalar optimizaciones; el contador indica cuántas optimizaciones tienen una versión más nueva en disco",
"menuCaption": "La entrada <em>Aplicar actualizaciones disponibles (N)</em> solo aparece cuando al menos una optimización tiene una actualización pendiente; se oculta si el host está al día.",
"checklistBody": "Seleccionar la entrada abre un checklist con cada actualización pendiente, cada fila formateada como <code>name (vX → vY)</code>. Todas las filas están pre-marcadas por defecto; desmarca las que no quieras aplicar esta ronda.",
"checklistAlt": "Diálogo checklist Apply Available Updates con una fila por optimización pendiente, cada una etiquetada con el nombre de la optimización y la transición de versión (actual → disponible). Todas las filas pre-marcadas.",
"checklistCaption": "Opt-in por optimización: elige exactamente qué versiones subir. El mismo motor que alimenta Automatizado y Personalizable post-instalación se ejecuta en segundo plano para reaplicar cada función y refrescar su versión en el registro."
"checklistAlt": "Diálogo Aplicar actualizaciones disponibles con una fila por optimización pendiente, su nombre y el cambio de versión (actual → disponible). Todas las filas están seleccionadas.",
"checklistCaption": "Selección individual por optimización: elige qué versiones actualizar. El mismo motor de Automatizado y Personalizable vuelve a aplicar cada función en segundo plano y actualiza su versión en el registro."
},
"pathB": {
"heading": "Ruta B — Desde el panel del Monitor",
"intro": "Las mismas actualizaciones aparecen en el Monitor bajo <link>Settings → ProxMenux Optimizations</link>. Cuando se detectan actualizaciones pendientes la tarjeta muestra un banner \"Updates available\" con el contador y una acción <strong>Apply</strong> que abre el mismo selector por optimización.",
"imageAlt": "Tarjeta de ProxMenux Optimizations en el panel del Monitor con un banner Updates available arriba mostrando el contador de actualizaciones pendientes y un botón Apply que abre el selector por optimización",
"imageCaption": "La tarjeta Optimizations en el Monitor — cuando al menos una optimización tiene una versión más nueva en disco, el banner lo muestra sin necesidad de acceso por shell."
"intro": "Las mismas actualizaciones aparecen en Monitor, en <link>Ajustes → Optimizaciones de ProxMenux</link>. Si hay actualizaciones pendientes, la tarjeta muestra un <strong>contador de actualizaciones</strong> que abre el selector por optimización. Cada herramienta también ofrece su propia acción de actualización.",
"imageAlt": "Tarjeta Optimizaciones de ProxMenux en los ajustes de Monitor, con un contador de actualizaciones pendientes que abre el selector por optimización y acciones de actualización por herramienta",
"imageCaption": "La tarjeta Optimizaciones de Monitor permite acceder a las actualizaciones mediante su contador cuando hay una versión más nueva en disco, sin entrar en la shell."
},
"applying": {
"heading": "Qué pasa cuando aplicas",
@@ -69,7 +69,7 @@
},
{
"title": "Refresco del registro enviado al Monitor",
"body": "Al terminar el batch, el menú hace POST a <code>http://127.0.0.1:8008/api/updates/post-install/scan</code> para reconstruir <code>/usr/local/share/proxmenux/updates_available.json</code>. Eso hace que la tarjeta de Optimizations del Monitor y la entrada del menú de shell desaparezcan inmediatamente tras la actualización, sin esperar al siguiente escaneo programado."
"body": "Al terminar el lote, el menú envía una petición POST a <code>http://127.0.0.1:8008/api/updates/post-install/scan</code> para reconstruir <code>/usr/local/share/proxmenux/updates_available.json</code>. Tras aplicar todo lo pendiente, desaparecen el contador de actualizaciones de la tarjeta Optimizaciones y la entrada condicional de la shell, sin esperar al siguiente análisis. La tarjeta Optimizaciones sigue disponible."
}
],
"jqTitle": "jq es obligatorio",
@@ -77,7 +77,7 @@
},
"differs": {
"heading": "En qué se diferencia de las otras rutas",
"headerPath": "Ruta",
"headerPath": "Path",
"headerScope": "Alcance",
"headerWhen": "Cuándo tiene sentido",
"rows": [
@@ -85,7 +85,7 @@
"pathLabel": "Automatizado",
"pathHref": "/docs/post-install/automated",
"scope": "Reaplica <em>cada</em> optimización del bundle.",
"when": "Host recién instalado, o re-baseline completo de un nodo totalmente gestionado."
"when": "Host recién instalado o reaplicación completa de la base de un nodo totalmente gestionado."
},
{
"pathLabel": "Personalizable",
@@ -94,13 +94,13 @@
"when": "Selecciona qué optimizaciones están activas en el host."
},
{
"pathLabel": "Apply available updates",
"pathLabel": "Aplicar actualizaciones disponibles",
"pathHref": null,
"scope": "Solo las optimizaciones cuya versión ha subido en disco.",
"when": "Mantén las optimizaciones ya instaladas al día sin tocar el resto."
},
{
"pathLabel": "Uninstall optimizations",
"pathLabel": "Desinstalar optimizaciones",
"pathHref": "/docs/post-install/uninstall",
"scope": "Revierte la optimización y elimina su entrada del registro.",
"when": "Hacer rollback de un cambio específico."
@@ -108,5 +108,5 @@
]
},
"notifTitle": "Filtro de notificación",
"notifBody": "La notificación que anuncia actualizaciones pendientes es el evento <em>ProxMenux optimization updates available</em>. Está activada por defecto en cada canal, se puede silenciar por canal desde <link>Settings → Notifications</link>, y es anti-cascada — se dispara una vez por conjunto distinto de actualizaciones pendientes, no en cada escaneo de 24h."
"notifBody": "El evento que anuncia las actualizaciones pendientes es <em>Actualizaciones de optimizaciones de ProxMenux disponibles</em>. Se activa por defecto en todos los canales y se puede silenciar por canal en <link>Ajustes → Notificaciones</link>. Evita repeticiones: se envía una vez por conjunto distinto de actualizaciones pendientes, no en cada análisis de 24 horas."
}
@@ -1,19 +1,19 @@
{
"meta": {
"title": "Post-instalación: Virtualización | ProxMenux Documentation",
"description": "Opciones de virtualización en el script post-instalación Customizable de ProxMenux: auto-instalar el guest agent correcto si Proxmox corre dentro de una VM, y activar IOMMU / VFIO para que puedas pasar dispositivos PCI (GPUs, NICs, HBAs) directamente a tus propias VMs."
"title": "Post-instalación: Virtualización | Documentación de ProxMenux",
"description": "Opciones de virtualización del script post-instalación Personalizable de ProxMenux: instala automáticamente el agente invitado correcto si Proxmox se ejecuta dentro de una VM y activa IOMMU / VFIO para pasar dispositivos PCI (GPU, NIC, HBA) directamente a tus VM."
},
"header": {
"title": "Post-instalación: Virtualización",
"section": "Settings post-install Proxmox"
"section": "Configuración post instalación de Proxmox"
},
"intro": {
"title": "Qué cubre esta categoría",
"body": "Dos opciones independientes. <strong>Install relevant guest agent</strong> es una red de seguridad para cuando Proxmox mismo corre anidado dentro de otro hipervisor. <strong>Enable VFIO IOMMU support</strong> es la que le importa a la mayoría: activa las funcionalidades del kernel que necesitas para pasar una GPU, HBA o NIC directamente a una VM con rendimiento casi nativo."
"body": "Dos opciones independientes. <strong>Instalar el guest agent correspondiente</strong> ayuda cuando el propio Proxmox se ejecuta anidado dentro de otro hipervisor. <strong>Activar soporte VFIO IOMMU</strong> es la opción que más usuarios necesitan: activa las funciones del kernel para asignar una GPU, HBA o NIC directamente a una VM con rendimiento casi nativo."
},
"guestAgent": {
"heading": "Instalar guest agent relevante",
"intro": "Detecta el entorno de virtualización en el que corre el host Proxmox (usando <code>systemd-detect-virt</code> y <code>dmidecode</code>) e instala el paquete de guest-tools correspondiente para que el hipervisor exterior pueda comunicarse con Proxmox de forma limpia (shutdown elegante, sincronización de reloj, reporte de IP, etc.).",
"heading": "Instalar el guest agent correspondiente",
"intro": "Detecta el entorno de virtualización del host Proxmox mediante <code>systemd-detect-virt</code> y <code>dmidecode</code> e instala el paquete de herramientas de invitado correspondiente para comunicarse correctamente con el hipervisor exterior: apagado ordenado, sincronización del reloj, información de IP, etc.",
"headerDetected": "Host detectado",
"headerPackage": "Paquete instalado",
"rows": [
@@ -76,23 +76,23 @@
"<strong>Dos GPUs:</strong> una puede ir a una VM y la otra a un LXC, pero necesitarás una configuración más granular (vincular solo una tarjeta a <code>vfio-pci</code> por ID PCI). La blacklist por defecto es demasiado amplia para este caso — edita <code>blacklist.conf</code> después."
],
"acsTitle": "Sobre pcie_acs_override — sé consciente de lo que estás activando",
"acsBody": "<code>pcie_acs_override=downstream,multifunction</code> relaja el chequeo de PCIe Access Control Services. Permite al kernel partir grupos IOMMU que el firmware reporta como monolíticos, que a veces es la única forma de hacer passthrough de un dispositivo de un grupo sin arrastrar el resto. El trade-off es <strong>aislamiento reducido entre dispositivos</strong>: una VM maliciosa o comprometida con passthrough tiene una superficie de ataque mayor vía DMA. Bien para un home lab; piénsatelo dos veces antes de activarlo en un host que ejecuta cargas no confiables. Si no lo necesitas, quita ese token de <code>/etc/kernel/cmdline</code> o <code>/etc/default/grub</code> tras ejecutar el script y vuelve a ejecutar el paso de actualización del cargador de arranque.",
"acsBody": "<code>pcie_acs_override=downstream,multifunction</code> relaja el chequeo de PCIe Access Control Services. Permite al kernel partir grupos IOMMU que el firmware reporta como monolíticos, que a veces es la única forma de hacer passthrough de un dispositivo de un grupo sin arrastrar el resto. El trade-off es <strong>aislamiento reducido entre dispositivos</strong>: una VM maliciosa o comprometida con passthrough tiene una superficie de ataque mayor vía DMA. Bien para un home lab; piénsatelo dos veces antes de activarlo en un host que ejecuta cargas no confiables. Si no lo necesitas, elimina ese token de <code>/etc/kernel/cmdline</code> o <code>/etc/default/grub</code> tras ejecutar el script y vuelve a ejecutar el paso de actualización del cargador de arranque.",
"rebootTitle": "Se requiere reinicio",
"rebootBody": "IOMMU, los módulos VFIO y la blacklist solo surten efecto tras un reinicio + regeneración del initramfs. El script dispara <code>update-initramfs -u -k all</code> y el refresh del cargador de arranque, y activa el flag de \"se requiere reinicio\" para que Personalizable te lo pregunte al final.",
"verifyTitle": "Verificación tras el reinicio",
"revertTitle": "Reversible desde el menú Uninstall",
"revertBody": "<link>Uninstall Optimizations</link> revierte todos los cambios: quita los tokens IOMMU de <code>/etc/kernel/cmdline</code> o GRUB, quita los módulos VFIO de <code>/etc/modules</code>, quita las entradas de blacklist de drivers y reconstruye el initramfs. Se requiere un reinicio para aplicar realmente la reversión."
"revertTitle": "Reversible desde el menú Desinstalar",
"revertBody": "<link>Desinstalar optimizaciones</link> revierte todos los cambios: elimina los parámetros IOMMU de <code>/etc/kernel/cmdline</code> o GRUB, elimina los módulos VFIO de <code>/etc/modules</code>, elimina las entradas de bloqueo de controladores y reconstruye initramfs. Debes reiniciar para aplicar la reversión."
},
"related": {
"heading": "Relacionado",
"items": [
{
"label": "Add GPU to VM (Passthrough)",
"label": "Añadir GPU a VM (Passthrough)",
"href": "/docs/hardware/gpu-vm-passthrough",
"tail": " — siguiente paso natural una vez IOMMU + VFIO están activos."
},
{
"label": "Add Controller or NVMe to VM",
"label": "Añadir Controlador o NVMe a VM",
"href": "/docs/disk-manager/add-controller-nvme-vm",
"tail": " — misma infraestructura de passthrough para controladoras de almacenamiento."
},
@@ -102,12 +102,12 @@
"tail": " — referencia de verificación de IOMMU."
},
{
"label": "Uninstall Optimizations",
"label": "Desinstalar optimizaciones",
"href": "/docs/post-install/uninstall",
"tail": " — revierte IOMMU / VFIO de forma limpia."
},
{
"label": "Customizable Post-Install",
"label": "Post-instalación personalizable",
"href": "/docs/post-install/customizable",
"tail": " — volver al menú padre."
}
+17 -17
View File
@@ -1,30 +1,30 @@
{
"meta": {
"title": "Fail2Ban | ProxMenux Documentation",
"title": "Fail2Ban | Documentación de ProxMenux",
"description": "Instala Fail2Ban con tres jails afinados para Proxmox (SSH agresivo, Proxmox UI 8006, ProxMenux Monitor 8008). Incluye el arreglo de journald MaxLevelStore, servicios de log propios para fiabilidad, backend nftables/iptables autodetectado y hardening de SSH MaxAuthTries.",
"ogTitle": "Fail2Ban | ProxMenux Documentation",
"ogDescription": "Protección contra fuerza bruta para SSH y las UIs web de Proxmox, con arreglos específicos de journald y backend para Proxmox."
"ogTitle": "Fail2Ban | Documentación de ProxMenux",
"ogDescription": "Protección contra fuerza bruta para SSH y las interfaces web de Proxmox, con correcciones de journald y del backend específicas para Proxmox."
},
"header": {
"title": "Fail2Ban",
"description": "Instala Fail2Ban con una configuración específica para Proxmox: tres jails (SSH agresivo, Proxmox UI en puerto 8006, ProxMenux Monitor en puerto 8008 + proxy inverso), un arreglo del nivel de log de journald para que los eventos de autenticación SSH se almacenen de verdad, dos servicios logger journal-a-archivo que rodean un problema conocido del backend systemd de Fail2Ban, backend de firewall autodetectado y hardening de SSH MaxAuthTries.",
"description": "Instala Fail2Ban con configuración para Proxmox: tres jails (SSH agresivo, Proxmox en 8006 y ProxMenux Monitor en 8008 y proxy inverso), corrección del nivel de journald para guardar fallos SSH, dos servicios que copian el journal a archivos para evitar un problema del backend systemd de Fail2Ban, detección del backend de firewall y refuerzo SSH mediante MaxAuthTries.",
"section": "Seguridad"
},
"intro": {
"title": "Qué hace",
"body": "Instala Fail2Ban desde los repos de Debian y escribe una configuración completa afinada para Proxmox que protege tres superficies de ataque (SSH, Proxmox UI, ProxMenux Monitor) por defecto. Detecta una instalación existente y ofrece un menú de gestión (reinstalar / eliminar) en lugar de volver a ejecutar el instalador."
"body": "Instala Fail2Ban desde los repositorios Debian y escribe una configuración para Proxmox que protege SSH, Proxmox UI y ProxMenux Monitor desde el primer momento. Si detecta una instalación existente, ofrece un menú para reinstalar o eliminar."
},
"firstLaunch": {
"heading": "Diálogo de primer lanzamiento",
"body": "En un host sin Fail2Ban, el script muestra un diálogo de confirmación que resume todo lo que va a instalar y configurar. Cancelar sale sin cambios; confirmar arranca el flujo de instalación.",
"imageAlt": "Diálogo de confirmación de instalación de Fail2Ban listando los tres jails, el arreglo de journald y el hardening de SSH"
"body": "Sin Fail2Ban instalado, el script muestra un diálogo con lo que instalará y configurará. Cancelar termina sin cambios; confirmar inicia la instalación.",
"imageAlt": "Confirmación de instalación de Fail2Ban con las tres jails, corrección de journald y refuerzo SSH"
},
"jails": {
"heading": "Los tres jails",
"headerJail": "Jail",
"headerProtects": "Protege",
"headerRetries": "Reintentos / Ventana",
"headerBan": "Tiempo de ban",
"headerBan": "Tiempo de bloqueo",
"rows": [
{
"jail": "[sshd]",
@@ -49,12 +49,12 @@
},
"journald": {
"heading": "Por qué importa el arreglo de journald",
"intro": "Proxmox entrega <code>/etc/systemd/journald.conf</code> con <codeNw>MaxLevelStore=warning</codeNw>. journald descarta cada mensaje de log <em>por debajo</em> de warning antes de almacenarlo. SSH y PAM emiten fallos de autenticación a niveles <em>info</em> / <em>notice</em>, así que:",
"intro": "Proxmox incluye <code>/etc/systemd/journald.conf</code> con <codeNw>MaxLevelStore=warning</codeNw>. journald descarta los mensajes de nivel <em>inferior</em> a warning antes de guardarlos. SSH y PAM emiten fallos de autenticación en los niveles <em>info</em> / <em>notice</em>, por lo que:",
"diagram": {
"sshLabel": "SSH / PAM",
"sshDetail": "fallo de autenticación\n(nivel info / notice)",
"journaldLabel": "journald",
"journaldDetail": "MaxLevelStore=warning\n→ evento descartado en silencio",
"journaldDetail": "MaxLevelStore=warning\n→ evento descartado sin aviso",
"fail2banLabel": "Fail2Ban",
"fail2banDetail": "no ve nada\n→ nunca banea nada",
"arrowLabel": "Proxmox por defecto"
@@ -65,8 +65,8 @@
},
"loggers": {
"heading": "Por qué dos servicios logger propios",
"intro1": "Fail2Ban puede leer directamente del journal de systemd (<code>backend = systemd</code>), pero en Proxmox este backend tiene problemas conocidos de fiabilidad con los procesos worker de <code>pvedaemon</code> (los eventos de autenticación aparecen en el journal pero Fail2Ban no siempre los recoge) e intermitentemente con <code>sshd</code>.",
"intro2": "La solución alternativa: ProxMenux crea dos pequeños servicios systemd que hacen <code>journalctl -f</code> de las unidades relevantes y añaden cada línea a un archivo. Fail2Ban entonces lee esos archivos con el sólido como una roca <code>backend = auto</code> (modo archivo):",
"intro1": "Fail2Ban puede leer directamente el journal de systemd (<code>backend = systemd</code>), pero en Proxmox este backend presenta problemas de fiabilidad con procesos worker de <code>pvedaemon</code> (los eventos aparecen en el journal pero Fail2Ban no siempre los recoge) y ocasionalmente con <code>sshd</code>.",
"intro2": "ProxMenux crea dos pequeños servicios systemd que siguen las unidades correspondientes con <code>journalctl -f</code> y añaden cada línea a un archivo. Fail2Ban lee esos archivos con el fiable <code>backend = auto</code> (modo archivo):",
"headerService": "Servicio",
"headerSource": "Unidad origen",
"headerOutput": "Archivo de salida",
@@ -91,12 +91,12 @@
},
"hardening": {
"heading": "Hardening de SSH: MaxAuthTries",
"intro": "El control de Lynis <strong>SSH-7408</strong> recomienda <code>MaxAuthTries 3</code> en <code>sshd_config</code>. Con el <code>maxretry = 2</code> de Fail2Ban en el jail SSH, un cliente malicioso nunca llega a tres intentos de todas formas — pero el ajuste explícito satisface la auditoría y añade defensa en profundidad (p. ej. si Fail2Ban está parado por mantenimiento).",
"intro": "El control Lynis <strong>SSH-7408</strong> recomienda <code>MaxAuthTries 3</code> en <code>sshd_config</code>. La jail SSH usa <code>maxretry = 2</code> para bloquear tras fallos repetidos; MaxAuthTries limita los intentos dentro de una conexión. Este ajuste SSH añade defensa en profundidad, también cuando Fail2Ban está detenido por mantenimiento.",
"installerIntro": "El instalador:",
"items": [
"Lee el valor actual de <code>MaxAuthTries</code> (o por defecto 6 si está ausente).",
"Lo guarda en <code>/usr/local/share/proxmenux/sshd_maxauthtries_backup</code>.",
"Edita <code>sshd_config</code> en sitio — reemplaza la línea existente, descomenta la línea comentada o la añade.",
"Edita <code>sshd_config</code> directamente: sustituye la línea existente, descomenta la comentada o añade una nueva.",
"Recarga <code>sshd</code> (reload, no restart, para mantener vivas las sesiones existentes)."
],
"outro": "Al desinstalar, el valor original guardado se restaura y se recarga <code>sshd</code> otra vez."
@@ -109,7 +109,7 @@
"rows": [
{
"action": "Reinstalar",
"what": "Vuelve a ejecutar el instalador completo — reescribe todos los jails con los valores por defecto actuales de ProxMenux. Úsalo cuando una actualización de ProxMenux suba los valores recomendados."
"what": "Repite la instalación completa y reescribe todas las jails con los valores actuales de ProxMenux. Úsalo cuando una actualización cambie las recomendaciones."
},
{
"action": "Eliminar",
@@ -125,7 +125,7 @@
"troubleshoot": {
"heading": "Solución de problemas",
"neverBansTitle": "Fail2Ban corre pero nunca banea nada",
"neverBansBody": "Comprueba que los archivos de log de autenticación reciben entradas de verdad: <code>tail -f /var/log/ssh-auth.log</code> y prueba un intento SSH con contraseña incorrecta desde otra máquina. Si el log se queda vacío, el servicio logger no está corriendo: <code>systemctl status ssh-auth-logger.service</code>. Si está activo pero el log está vacío, comprueba que el drop-in de journald surtió efecto: <code>journalctl --dump-catalog | head</code> — eventos a nivel <em>info</em> deberían ser visibles.",
"neverBansBody": "Comprueba que <code>tail -f /var/log/ssh-auth.log</code> recibe una entrada tras intentar acceder por SSH con contraseña incorrecta desde otra máquina. Si sigue vacío, consulta <code>systemctl status ssh-auth-logger.service</code>. Si el logger está activo, mira los eventos SSH recientes con <code>journalctl -u ssh.service -n 50 --no-pager -p info</code> y comprueba que el drop-in de journald admite el nivel <em>info</em>.",
"monitorEmptyTitle": "El jail del Monitor de ProxMenux no tiene entradas ni siquiera tras logins fallidos",
"monitorEmptyBody": "El jail <code>[proxmenux]</code> lee <code>/var/log/proxmenux-auth.log</code>, que lo escribe la app Flask del Monitor de ProxMenux — no un logger de journald. Si no usas el Monitor, el archivo se queda vacío y el jail nunca dispara. Eso es lo esperado; la configuración del jail es inocua. Si sí usas el Monitor y el log está vacío, comprueba la configuración de logging de Flask.",
"selfBanTitle": "Me he baneado a mí mismo",
@@ -143,7 +143,7 @@
"related": {
"heading": "Relacionado",
"monitorLabel": "ProxMenux Monitor → pestaña de Seguridad",
"monitorTail": " — misma instalación accesible desde el panel, más estado en vivo de los jails, IPs baneadas y ajuste por jail de reintentos / tiempo de ban desde el navegador.",
"monitorTail": " — instalación desde el panel, estado de las jails en directo, IP bloqueadas y ajuste de reintentos y duración de bloqueo por jail desde el navegador.",
"lynisLabel": "Lynis",
"lynisTail": " — ejecuta una auditoría de seguridad antes/después para confirmar que el control SSH-7408 se satisface.",
"securityLabel": "Resumen de Seguridad",
+18 -18
View File
@@ -1,24 +1,24 @@
{
"meta": {
"title": "Seguridad de Proxmox — Fail2Ban, auditoría de hardening con Lynis | ProxMenux",
"description": "Dos herramientas de seguridad instalables para Proxmox VE: Fail2Ban (prevención de intrusiones para SSH, la UI web de Proxmox y el Monitor de ProxMenux) y Lynis (escáner de auditoría y hardening de seguridad instalado desde GitHub upstream).",
"ogTitle": "Seguridad de Proxmox — Fail2Ban, auditoría de hardening con Lynis",
"ogDescription": "Fail2Ban y Lynis para Proxmox VE — prevención de intrusiones más una auditoría de hardening instaladas y gestionadas por ProxMenux.",
"title": "Seguridad de Proxmox — Fail2Ban y auditoría de refuerzo con Lynis | ProxMenux",
"description": "Dos herramientas de seguridad para Proxmox VE: Fail2Ban (prevención de intrusiones para SSH, la interfaz web de Proxmox y ProxMenux Monitor) y Lynis (auditor de seguridad y refuerzo del sistema instalado desde el repositorio original en GitHub).",
"ogTitle": "Seguridad de Proxmox — Fail2Ban y auditoría de refuerzo con Lynis",
"ogDescription": "Fail2Ban y Lynis para Proxmox VE: prevención de intrusiones y auditoría de refuerzo, instaladas y gestionadas por ProxMenux.",
"twitterTitle": "Seguridad de Proxmox | ProxMenux",
"twitterDescription": "Fail2Ban y Lynis para Proxmox VE — prevención de intrusiones y auditoría de hardening."
"twitterDescription": "Fail2Ban y Lynis para Proxmox VE: prevención de intrusiones y auditoría de refuerzo."
},
"header": {
"title": "Seguridad",
"description": "Dos herramientas de seguridad complementarias para Proxmox VE: una defensa activa (Fail2Ban — banea IPs que atacan SSH o las UIs web) y una auditoría offline (Lynis — escanea el sistema en busca de huecos de hardening y da una puntuación 0–100). Ambas se instalan y gestionan mediante su propio menú dedicado, con detección de una instalación existente antes de cualquier acción.",
"description": "Dos herramientas complementarias para Proxmox VE: defensa activa (Fail2Ban bloquea IP que atacan SSH o las interfaces web) y auditoría local (Lynis busca carencias de seguridad y da una puntuación de 0 a 100). Cada una tiene su propio menú de instalación y gestión, que detecta instalaciones existentes antes de actuar.",
"section": "Seguridad"
},
"intro": {
"title": "Defensa activa vs. auditoría offline",
"body": "Estas dos herramientas responden a preguntas distintas. <strong>Fail2Ban</strong> responde a <em>\"¿hay algo atacándonos ahora mismo?\"</em> vigilando los logs de autenticación y baneando las IPs ofensoras. <strong>Lynis</strong> responde a <em>\"¿cómo de hardened está este host?\"</em> ejecutando una auditoría de un tirón e imprimiendo recomendaciones concretas. Úsalas juntas: Lynis te dice qué arreglar, Fail2Ban gestiona el abuso en vivo."
"title": "Defensa activa y auditoría local",
"body": "Responden a preguntas distintas. <strong>Fail2Ban</strong> contesta <em>«¿nos están atacando ahora?»</em> vigilando registros de autenticación y bloqueando las IP responsables. <strong>Lynis</strong> contesta <em>«¿qué nivel de refuerzo tiene este host?»</em> mediante una auditoría puntual con recomendaciones concretas. Usa ambas: Lynis indica qué mejorar y Fail2Ban responde a los ataques en curso."
},
"opening": {
"heading": "Abrir el menú",
"body": "Desde el menú principal de ProxMenux, selecciona <strong>Seguridad</strong>. Verás esto:",
"body": "Desde el menú principal de ProxMenux, selecciona <strong>Seguridad</strong>. Verás lo siguiente:",
"imageAlt": "Menú de Seguridad con opciones de Fail2Ban y Lynis"
},
"pick": {
@@ -28,7 +28,7 @@
"cards": {
"fail2ban": {
"title": "Fail2Ban",
"body": "Prevención de intrusiones activa. Vigila los logs de autenticación de SSH y las UIs web y banea IPs tras fallos repetidos.",
"body": "Prevención activa de intrusiones. Vigila los registros de autenticación de SSH y las interfaces web y bloquea IP tras fallos repetidos.",
"bullets": [
"Tres jails: SSH, Proxmox UI (8006), ProxMenux Monitor (8008)",
"Arregla los valores por defecto de journald de Proxmox que bloquean los logs de autenticación",
@@ -38,28 +38,28 @@
},
"lynis": {
"title": "Lynis",
"body": "Auditor de seguridad offline. Escanea el host e imprime una puntuación de hardening más pistas concretas de remediación.",
"body": "Auditor local de seguridad. Analiza el host y muestra una puntuación de refuerzo y recomendaciones concretas para corregir problemas.",
"bullets": [
"Instalado desde el GitHub upstream de CISOfy (siempre el último)",
"Puntuación de hardening 0–100 + lista de warnings y sugerencias",
"Acciones de ejecutar auditoría y actualizar dentro del menú",
"De solo lectura por diseño — nunca cambia el sistema"
"Instalado desde el repositorio original de CISOfy en GitHub (última versión)",
"Puntuación de refuerzo 0–100 y lista de advertencias y sugerencias",
"Acciones de auditoría y actualización desde el menú",
"De solo lectura: nunca modifica el sistema"
]
}
},
"workflowTip": {
"title": "Flujo de trabajo que usa ambos",
"body": "Ejecuta primero una auditoría de Lynis para ver tu puntuación de partida y las recomendaciones principales. Aplica los arreglos que quieras. Después instala Fail2Ban — implementa una de las recomendaciones más comunes de Lynis (protección contra fuerza bruta SSH) automáticamente y ajusta <code>MaxAuthTries</code> en <code>sshd_config</code> para satisfacer el control SSH-7408. Vuelve a ejecutar Lynis después para confirmar que la puntuación mejoró."
"body": "Ejecuta primero una auditoría Lynis para ver la puntuación inicial y las recomendaciones principales. Aplica las correcciones que elijas. Instala Fail2Ban: implementa automáticamente la protección contra fuerza bruta SSH y ajusta <code>MaxAuthTries</code> en <code>sshd_config</code> para cumplir el control SSH-7408. Vuelve a ejecutar Lynis para comprobar la mejora."
},
"fail2banSection": {
"heading": "Fail2Ban",
"body": "ProxMenux instala Fail2Ban con una configuración afinada específicamente para Proxmox. Más allá del jail estándar de SSH, añade protección para la UI web de Proxmox y el Monitor de ProxMenux, y rodea dos rarezas específicas de Proxmox: un valor por defecto de journald que descarta eventos de autenticación, y el problema del backend systemd que impide a Fail2Ban leer de forma fiable ciertas fuentes del journal. La página de detalle cubre el flujo de instalación completo, los tres jails, el arreglo de journald, el cambio de hardening SSH y la chuleta de solución de problemas.",
"optionTitle": "Fail2Ban — instalar y gestionar",
"optionDescription": "Tres jails preconfigurados (sshd agresivo, Proxmox UI puerto 8006, ProxMenux Monitor puerto 8008 + proxy inverso), backend nftables/iptables autodetectado, arreglo de journald y hardening de SSH MaxAuthTries."
"optionDescription": "Tres jails preconfiguradas (sshd agresivo, Proxmox en 8006, ProxMenux Monitor en 8008 y proxy inverso), detección de nftables/iptables, corrección de journald y refuerzo SSH mediante MaxAuthTries."
},
"lynisSection": {
"heading": "Lynis",
"body": "ProxMenux clona Lynis desde <code>github.com/CISOfy/lynis</code> en <code>/opt/lynis</code> y lo expone como <code>/usr/local/bin/lynis</code>. El paquete de Debian se evita intencionadamente porque va varias versiones mayores por detrás de upstream. La página de detalle cubre el flujo de instalar / auditar / actualizar / desinstalar, cómo leer el informe y cómo actuar sobre los hallazgos.",
"body": "ProxMenux clona Lynis de <code>github.com/CISOfy/lynis</code> en <code>/opt/lynis</code> y lo expone como <code>/usr/local/bin/lynis</code>. Evita el paquete Debian porque va varias versiones principales por detrás del proyecto original. La página detallada explica instalación, auditoría, actualización, desinstalación, lectura del informe y aplicación de sus recomendaciones.",
"optionTitle": "Lynis — instalar, auditar y gestionar",
"optionDescription": "Instala el último Lynis desde el repo oficial de CISOfy en GitHub (no el paquete más antiguo de Debian), ejecuta auditorías del sistema con puntuación de hardening y actualiza vía git pull."
},
+19 -19
View File
@@ -1,37 +1,37 @@
{
"meta": {
"title": "Lynis | ProxMenux Documentation",
"description": "Instala Lynis desde el repositorio oficial de CISOfy en GitHub (siempre el último), ejecuta una auditoría del sistema con puntuación de hardening 0–100, actualiza vía git pull. De solo lectura por diseño — nunca modifica el sistema.",
"ogTitle": "Lynis | ProxMenux Documentation",
"ogDescription": "Instala y ejecuta el auditor de seguridad Lynis en Proxmox VE. Instalación desde GitHub upstream, auditoría, actualización."
"title": "Lynis | Documentación de ProxMenux",
"description": "Instala Lynis desde el repositorio oficial CISOfy de GitHub, ejecuta una auditoría con puntuación de refuerzo de 0 a 100 y actualiza mediante git pull. Auditor de solo lectura: no modifica el sistema.",
"ogTitle": "Lynis | Documentación de ProxMenux",
"ogDescription": "Instala y ejecuta el auditor de seguridad Lynis en Proxmox VE. Instalación desde el repositorio original GitHub, auditoría y actualización."
},
"header": {
"title": "Lynis",
"description": "Clona el último Lynis desde el repositorio oficial de CISOfy en GitHub, lo expone como /usr/local/bin/lynis y ofrece acciones de ejecutar auditoría / actualizar / reinstalar / desinstalar desde el menú. Auditor de solo lectura por diseño — nunca modifica el sistema, solo reporta.",
"description": "Clona el último Lynis del repositorio oficial CISOfy en GitHub, lo expone como /usr/local/bin/lynis y ofrece auditoría, actualización, reinstalación y desinstalación desde el menú. El auditor es de solo lectura: informa sin modificar el sistema.",
"section": "Seguridad"
},
"intro": {
"title": "Qué hace",
"body": "Instala Lynis (el auditor de seguridad de código abierto de CISOfy) desde GitHub upstream en <code>/opt/lynis</code> y crea un wrapper en <code>/usr/local/bin/lynis</code> para que esté en tu <code>PATH</code>. Detecta una instalación existente al arrancar y muestra un menú de gestión (auditoría / actualizar / reinstalar / eliminar) en su lugar."
"body": "Instala Lynis, el auditor de código abierto de CISOfy, desde su repositorio GitHub en <code>/opt/lynis</code> y crea un script lanzador en <code>/usr/local/bin/lynis</code> para incluirlo en <code>PATH</code>. Si detecta una instalación existente al abrirlo, muestra un menú de auditoría, actualización, reinstalación o eliminación."
},
"manageMenu": {
"heading": "Menú de gestión (tras la instalación)",
"heading": "Menú de gestión (tras instalar)",
"intro": "Una vez instalado Lynis, cada invocación posterior abre el menú de gestión en lugar de volver a ejecutar el instalador. Desde aquí lanzas una auditoría, actualizas vía git pull, reinstalas o desinstalas:",
"imageAlt": "Menú de gestión de Lynis con opciones de auditoría, actualizar, reinstalar y eliminar"
},
"whyUpstream": {
"heading": "Por qué GitHub upstream, no apt",
"intro": "Debian entrega Lynis vía apt, pero el paquete suele ir varias versiones mayores por detrás de upstream. Los controles más nuevos, los arreglos para nuevos vectores de ataque y las recomendaciones refinadas solo aterrizan en el repo de GitHub. El propio Lynis es un script de shell autocontenido — sin compilación, sin dependencias más allá de <code>git</code> para la instalación — así que clonar el repo es el método de instalación canónico recomendado por la propia CISOfy.",
"heading": "Por qué el repositorio oficial de GitHub y no apt",
"intro": "Debian distribuye Lynis mediante apt, pero el paquete suele ir varias versiones principales por detrás del proyecto original. GitHub recibe antes los controles, correcciones de nuevos vectores de ataque y mejoras de las recomendaciones. Lynis es un script de shell autocontenido, sin compilación ni dependencias de instalación aparte de <code>git</code>; por eso clonar el repositorio es el método recomendado por CISOfy.",
"headerSource": "Origen",
"headerPath": "Ruta de instalación",
"headerPath": "Install path",
"headerUpdate": "Método de actualización",
"headerFresh": "Frescura de versión",
"headerFresh": "Actualidad de la versión",
"rows": [
{
"sourceRich": "<strong>ProxMenux (este script)</strong>",
"path": "/opt/lynis/",
"update": "git pull (desde el menú)",
"fresh": "Última versión upstream"
"fresh": "Última versión del proyecto original"
},
{
"sourceRich": "<strong>Debian apt</strong>",
@@ -59,13 +59,13 @@
"<code>/opt/lynis/lynis</code> — ruta directa (por si el wrapper se eliminó)",
"<code>/usr/bin/lynis</code> — versión instalada por apt, si el usuario la instaló así anteriormente"
],
"outro": "Si se encuentra cualquiera de estas, se abre el menú de gestión. El script <strong>no</strong> desinstala un Lynis instalado por apt — solo el que él mismo gestiona (<code>/opt/lynis</code> + el wrapper)."
"outro": "Si encuentra cualquiera de estas rutas, abre el menú de gestión. El script <strong>no</strong> desinstala Lynis instalado por apt; solo el que gestiona en <code>/opt/lynis</code> y su lanzador."
},
"audit": {
"heading": "Ejecutar una auditoría",
"intro": "Desde el menú de gestión, elige <strong>Ejecutar auditoría de seguridad ahora</strong>. Esto equivale a ejecutar:",
"intro": "En el menú de gestión, elige <strong>Ejecutar auditoría de seguridad ahora</strong>. Equivale a ejecutar:",
"code": "lynis audit system --no-colors",
"outro": "La auditoría tarda de 30 segundos a unos minutos según el tamaño del host. La salida fluye directamente al terminal — no hay spinner. Lynis imprime secciones por cada categoría de control, marcando cada test como <ok>[ OK ]</ok>, <warn>[ WARNING ]</warn> o <sugg>[ SUGGESTION ]</sugg>. El resumen al final tiene los números titulares:",
"outro": "La auditoría tarda de 30 segundos a varios minutos según el tamaño del host. La salida se muestra directamente en el terminal, sin indicador giratorio. Lynis organiza los controles por categoría y marca cada prueba como <ok>[ OK ]</ok>, <warn>[ WARNING ]</warn> o <sugg>[ SUGGESTION ]</sugg>. El resumen final muestra las cifras principales:",
"summary": "================================================================================\n\n Lynis security scan details:\n\n Hardening index : 76 [############ ]\n Tests performed : 247\n Plugins enabled : 0\n\n Components:\n - Firewall [V]\n - Malware scanner [X]\n\n Lynis modules:\n - Compliance status [?]\n - Security audit [V]\n - Vulnerability scan [V]\n\n================================================================================"
},
"report": {
@@ -99,7 +99,7 @@
},
"update": {
"heading": "Actualizar Lynis",
"body": "Desde el menú de gestión, <strong>Actualizar Lynis a la última versión</strong> ejecuta <code>git pull --quiet</code> dentro de <code>/opt/lynis</code>. Si el directorio existe pero no es un checkout de Git (p. ej. alguien copió los archivos a mano), el script recae en una reinstalación completa."
"body": "En el menú, <strong>Actualizar Lynis a la última versión</strong> ejecuta <code>git pull --quiet</code> en <code>/opt/lynis</code>. Si el directorio existe pero no es una copia Git (por ejemplo, se copiaron archivos manualmente), el script reinstala por completo."
},
"reinstall": {
"heading": "Reinstalar / desinstalar",
@@ -108,7 +108,7 @@
"rows": [
{
"actionRich": "<strong>Reinstalar</strong>",
"whatRich": "Elimina <code>/opt/lynis</code>, vuelve a clonar desde GitHub, recrea el wrapper. Úsalo si el checkout local está corrupto."
"whatRich": "Elimina <code>/opt/lynis</code>, clona de nuevo desde GitHub y recrea el lanzador. Úsalo si la copia local está dañada."
},
{
"actionRich": "<strong>Eliminar</strong>",
@@ -128,7 +128,7 @@
"notFoundTitle": "lynis: command not found tras la instalación",
"notFoundIntro": "El wrapper en <code>/usr/local/bin/lynis</code> no se creó o se eliminó. Arreglo más rápido: reinstalar desde el menú. Arreglo manual:",
"notFoundCode": "cat > /usr/local/bin/lynis <<'EOF'\n#!/bin/bash\ncd /opt/lynis && ./lynis \"$@\"\nEOF\nchmod +x /usr/local/bin/lynis",
"sshTitle": "La auditoría imprime \"Warning: Test SSH-7408 — MaxAuthTries set incorrectly\"",
"sshTitle": "La auditoría muestra \"Warning: Test SSH-7408 — MaxAuthTries set incorrectly\"",
"sshIntro": "El demonio SSH permite demasiados intentos de autenticación por conexión. O bien instala <link>Fail2Ban</link> desde ProxMenux (que establece <code>MaxAuthTries=3</code> automáticamente) o edita <code>/etc/ssh/sshd_config</code> a mano:",
"sshCode": "sed -i 's/^#?MaxAuthTries.*/MaxAuthTries 3/' /etc/ssh/sshd_config\nsystemctl reload sshd",
"scoreTitle": "La puntuación bajó tras una actualización de Proxmox",
@@ -140,7 +140,7 @@
},
"sample": {
"heading": "Informe de ejemplo",
"intro": "ProxMenux Monitor empaqueta cada ejecución de Lynis en un PDF de varias páginas disponible desde la <link>pestaña de Seguridad</link> en el panel. La primera página es el resumen ejecutivo — puntuación de hardening, info del sistema, vista general de la postura de seguridad. Las páginas siguientes listan cada warning con explicación y cada sugerencia rankeada por impacto, más el inventario de paquetes usado durante la auditoría.",
"intro": "ProxMenux Monitor genera un PDF de varias páginas para cada ejecución de Lynis desde la <link>pestaña Seguridad</link>. La primera página resume puntuación de refuerzo, información del sistema y estado de seguridad. Las siguientes detallan cada advertencia, las sugerencias ordenadas por impacto y el inventario de paquetes utilizado en la auditoría.",
"imageAlt": "Primera página del PDF del Lynis Security Audit Report — resumen ejecutivo con Hardening Index 71/100, bloque de información del sistema y vista general de la postura de seguridad con firewall, escáner de malware y recuento de paquetes instalados",
"captionPrefix": "Primera página de un informe de ejemplo. El PDF completo (",
"captionLink": "ejemplo",
@@ -1,13 +1,13 @@
{
"meta": {
"title": "HTTPS para ProxMenux Monitor — certificado del host Proxmox o rutas personalizadas | ProxMenux",
"description": "Sirve ProxMenux Monitor sobre HTTPS usando o bien el certificado del host Proxmox (autodetectado, incluyendo el certificado Let's Encrypt subido vía la pestaña ACME de Proxmox) o un certificado personalizado en cualquier ruta del disco.",
"description": "Sirve ProxMenux Monitor por HTTPS con el certificado del host Proxmox (detectado automáticamente, incluido el de Let’s Encrypt instalado mediante ACME de Proxmox) o un certificado personalizado en cualquier ruta del disco.",
"ogTitle": "HTTPS para ProxMenux Monitor — certificado del host Proxmox o personalizado",
"ogDescription": "Habilita HTTPS en el puerto 8008 con el certificado del host Proxmox o cualquier par .pem / .key personalizado."
},
"header": {
"title": "HTTPS para ProxMenux Monitor",
"description": "Activa HTTPS para el Monitor (puerto 8008) usando o bien el certificado del host Proxmox que el Monitor autodetecta, o un certificado personalizado ubicado en cualquier sitio del disco. La opción de Proxmox elige de forma transparente el certificado subido por ACME cuando está presente, así que un certificado Let's Encrypt gestionado por la UI de Proxmox se reutiliza sin un trabajo de renovación extra.",
"description": "Activa HTTPS para Monitor en 8008 con el certificado del host Proxmox detectado automáticamente o uno personalizado en disco. La opción Proxmox prefiere el certificado instalado mediante ACME, si existe, y reutiliza el Let’s Encrypt gestionado por Proxmox sin otra tarea de renovación.",
"section": "Seguridad"
},
"intro": {
@@ -15,20 +15,20 @@
"body": "Cómo cambiar el Monitor de HTTP a HTTPS en el panel Settings → Security, a qué apunta realmente cada fuente de certificado en disco, cómo se comporta la opción de Proxmox cuando el host tiene un certificado Let's Encrypt y cómo establecer rutas personalizadas si gestionas certificados fuera de Proxmox."
},
"wheresetting": {
"heading": "Dónde vive el ajuste",
"body": "Abre el Monitor y ve a <strong>Settings → Security → HTTPS / SSL</strong>. El panel muestra el estado actual (HTTP o HTTPS), y en un host sin HTTPS aún lista las fuentes de certificado que el Monitor ha podido detectar.",
"heading": "Ubicación del ajuste",
"body": "Abre Monitor y ve a <strong>Ajustes → Seguridad → HTTPS / SSL</strong>. El panel muestra HTTP o HTTPS y, si HTTPS no está activo, las fuentes de certificados detectadas.",
"imageAlt": "Panel Settings → Security → HTTPS / SSL en el Monitor mostrando el estado HTTPS desactivado, el certificado de Proxmox autodetectado (subject, issuer, expiry) y la opción Use Custom Certificate",
"caption": "Panel Settings → Security → HTTPS / SSL antes de la activación. El Monitor saca a la luz el certificado que el propio Proxmox está usando y lo ofrece como una fuente de un solo clic."
"caption": "Panel Ajustes → Seguridad → HTTPS / SSL antes de activar HTTPS. Monitor muestra el certificado que usa Proxmox y permite elegirlo con un clic."
},
"twoways": {
"heading": "Dos formas de habilitar HTTPS",
"proxmox": {
"title": "Usar el certificado de Proxmox",
"summary": "Un clic. El Monitor reutiliza el certificado que el propio Proxmox VE sirve en el puerto 8006.",
"summary": "Un clic: Monitor reutiliza el certificado que Proxmox VE presenta en el puerto 8006.",
"items": [
"Autodetectado — no hay ruta que teclear",
"Elige el certificado subido por ACME si está presente, recae en el self-signed por defecto",
"La renovación pasa por Proxmox; el Monitor sigue automáticamente en el siguiente arranque"
"Detectado automáticamente, sin introducir rutas",
"Prefiere el certificado ACME si existe; si no, usa el autofirmado predeterminado",
"Proxmox renueva; Monitor valida y carga el certificado en la siguiente conexión TLS nueva"
]
},
"custom": {
@@ -37,7 +37,7 @@
"items": [
"Solo rutas absolutas (el proceso del Monitor debe poder leer ambos)",
"Útil cuando los certificados vienen de <code>certbot</code>, <code>acme.sh</code> o un wildcard",
"La renovación es tuya — reinicia el servicio del Monitor tras que el archivo cambie"
"La renovación queda a tu cargo: reinicia Monitor cuando cambien los archivos"
]
}
},
@@ -54,7 +54,7 @@
{
"fileRich": "<code>pveproxy-ssl.pem</code><br /><code>pveproxy-ssl.key</code>",
"originRich": "Certificado personalizado subido vía la UI de Proxmox — incluyendo el certificado Let's Encrypt emitido en <em>Datacenter → Node → Certificates → ACME</em>.",
"when": "Preferido siempre que existan ambos archivos. El Monitor seguirá el certificado que el propio Proxmox está sirviendo."
"when": "Se prefiere cuando existen ambos archivos; Monitor usa el certificado presentado por Proxmox."
},
{
"fileRich": "<code>pve-ssl.pem</code><br /><code>pve-ssl.key</code>",
@@ -65,17 +65,17 @@
},
"callout": {
"title": "Misma prioridad que el propio Proxmox",
"bodyRich": "<code>pveproxy</code> usa la misma regla de selección, así que elegir la opción de Proxmox en el Monitor siempre sirve el certificado que la UI web de Proxmox ya está sirviendo en el puerto 8006. Sin copias, sin pipeline de renovación aparte."
"bodyRich": "<code>pveproxy</code> aplica la misma selección: al elegir Proxmox, Monitor usa el certificado que la interfaz de Proxmox presenta en 8006, sin copiarlo ni mantener otro proceso de renovación."
}
},
"letsencrypt": {
"heading": "Obtener un certificado Let's Encrypt vía Proxmox ACME",
"intro": "Proxmox VE entrega su propio cliente ACME. Pulsar <em>\"Order Certificate Now\"</em> escribe el resultado en <code>/etc/pve/local/pveproxy-ssl.pem</code>, que es exactamente lo que el Monitor lee. La receta de cinco pasos de abajo es el mismo procedimiento que la <extlink1>guía oficial de Proxmox</extlink1> — destilada a los comandos que realmente necesitas ejecutar.",
"intro": "Proxmox VE incluye su propio cliente ACME. <em>«Order Certificate Now»</em> guarda el resultado en <code>/etc/pve/local/pveproxy-ssl.pem</code>, que Monitor lee. Los cinco pasos siguientes condensan el procedimiento de la <extlink1>guía oficial de Proxmox</extlink1> en los comandos necesarios.",
"prereqs": {
"title": "Prerrequisitos",
"items": [
"El nodo tiene un nombre DNS real (no solo una IP) apuntándole.",
"<strong>O bien</strong> puerto 80 alcanzable desde la internet pública (challenge HTTP-01, el más simple), <strong>o bien</strong> un proveedor de DNS con credenciales API (challenge DNS-01 — funciona detrás de NAT, soporta wildcards).",
"<strong>O bien</strong> puerto 80 accesible desde Internet (verificación HTTP-01, la más sencilla), <strong>o bien</strong> proveedor DNS con credenciales API (DNS-01, funciona tras NAT y admite comodines).",
"Una dirección de email para la cuenta ACME."
]
},
@@ -90,7 +90,7 @@
"http01Rich": "<strong>HTTP-01</strong> es el más fácil: está integrado, sin plugin extra. Let's Encrypt se conecta a <code>http://&lt;your-host&gt;/.well-known/acme-challenge/...</code> en el puerto 80, así que el puerto 80 debe estar abierto desde la internet pública a tu nodo — típicamente un port forward en tu router.",
"dns01Rich": "<strong>DNS-01</strong> funciona sin exponer el puerto 80 (bueno para homelabs detrás de CG-NAT) y es la única opción para certificados wildcard. Añades un plugin DNS una vez con el token API de tu proveedor. Ejemplo con Cloudflare:",
"code": "pvenode acme plugin add dns cf \\\n --api cloudflare \\\n --data CF_Token=YOUR_CLOUDFLARE_API_TOKEN",
"outroRich": "Para otros proveedores (Gandi, OVH, AWS Route 53, etc.) consulta <code>pvenode acme plugin add dns --help</code> — Proxmox entrega <extlink2>todos los plugins DNS de acme.sh</extlink2>."
"outroRich": "Para otros proveedores (Gandi, OVH, AWS Route 53, etc.), consulta <code>pvenode acme plugin add dns --help</code>. Proxmox incluye <extlink2>todos los plugins DNS de acme.sh</extlink2>."
},
"step3": {
"heading": "Paso 3 — Asocia el dominio a tu nodo",
@@ -112,19 +112,19 @@
},
"gui": {
"title": "¿Prefieres la GUI? Los mismos cinco pasos",
"bodyRich": "<em>Datacenter → ACME</em> registra la cuenta, <em>Datacenter → ACME → Plugins</em> añade el plugin DNS, <em>Node → Certificates → ACME</em> asocia el dominio y <em>Order Certificates Now</em> ejecuta el paso 4. Los comandos CLI de arriba son útiles para scriptar y para setups headless / solo CLI."
"bodyRich": "<em>Datacenter → ACME</em> registra la cuenta; <em>Datacenter → ACME → Plugins</em> añade DNS; <em>Node → Certificates → ACME</em> vincula el dominio; <em>Order Certificates Now</em> ejecuta el paso 4. Los comandos anteriores sirven para automatizar y trabajar sin interfaz gráfica."
}
},
"switchToHttps": {
"heading": "Cambiar el Monitor a HTTPS",
"bodyRich": "Una vez que <code>/etc/pve/local/pveproxy-ssl.pem</code> está firmado por Let's Encrypt, en el Monitor solo hace falta un clic: abre <strong>Ajustes → Seguridad → HTTPS / SSL</strong>, confirma que el emisor mostrado en el panel del certificado detectado sea <em>Let's Encrypt</em> (y no la CA local de Proxmox) y pulsa <strong>Usar certificado de Proxmox</strong>. El servicio del Monitor se reinicia y la siguiente carga del navegador usa HTTPS en el puerto 8008, sin advertencias porque la cadena es de confianza pública. Las renovaciones posteriores de Proxmox ACME se validan y seleccionan durante la siguiente conexión TLS nueva; no existe un comprobador periódico del certificado ni se reinicia el servicio durante la renovación. <strong>Actualizar certificado</strong> permanece disponible en Seguridad como acción explícita de diagnóstico y recuperación."
"bodyRich": "Una vez que <code>/etc/pve/local/pveproxy-ssl.pem</code> está firmado por Let's Encrypt, abre <strong>Ajustes → Seguridad → HTTPS / SSL</strong>, comprueba que el emisor sea <em>Let's Encrypt</em> y no la CA local de Proxmox, y pulsa <strong>Usar certificado de Proxmox</strong>. Monitor se reinicia y la siguiente carga usa HTTPS en 8008 con una cadena de confianza pública. Las renovaciones ACME posteriores se validan y seleccionan en la siguiente conexión TLS nueva, sin sondeo periódico ni reinicio del servicio por renovación. <strong>Actualizar certificado</strong> sigue disponible en Seguridad como acción explícita de diagnóstico y recuperación."
},
"custom": {
"heading": "Certificado personalizado — cuándo usarlo",
"intro": "Pulsa <strong>Use Custom Certificate</strong> para introducir dos rutas absolutas:",
"intro": "Pulsa <strong>Usar certificado personalizado</strong> e introduce dos rutas absolutas:",
"items": [
"<strong>Certificado</strong> — cadena completa en PEM (<code>.pem</code> o <code>.crt</code>).",
"<strong>Clave privada</strong> — clave correspondiente en PEM (<code>.key</code>)."
"<strong>Clave privada</strong>: clave correspondiente en PEM (<code>.key</code>)."
],
"outro": "Ambos archivos los lee el proceso del Monitor al arrancar. Asegúrate de que se mantengan legibles por el usuario con el que corre la unidad systemd (root por defecto). Ubicaciones comunes cuando ACME se gestiona fuera de Proxmox:",
"code": "# certbot\n/etc/letsencrypt/live/<your-host>/fullchain.pem\n/etc/letsencrypt/live/<your-host>/privkey.pem\n\n# acme.sh\n~/.acme.sh/<your-host>_ecc/fullchain.cer\n~/.acme.sh/<your-host>_ecc/<your-host>.key",
@@ -143,15 +143,15 @@
},
"trustCa": {
"heading": "Confiar en la CA self-signed de Proxmox",
"intro1Rich": "Si prefieres mantener el certificado por defecto generado por Proxmox (sin ACME), puedes parar el warning del navegador importando la CA raíz del clúster en el almacén de confianza del SO o navegador. El Monitor seguirá autodetectando el mismo <code>/etc/pve/local/pveproxy-ssl.pem</code>; lo único que cambia es que el dispositivo que ve el panel ahora reconoce el issuer.",
"intro1Rich": "Para conservar el certificado predeterminado de Proxmox sin ACME, importa la CA raíz del clúster en el almacén de confianza del sistema o navegador. Monitor detecta <code>/etc/pve/local/pve-ssl.pem</code> como certificado alternativo. El cliente confiará en su emisor; la URL aún debe coincidir con un nombre del certificado.",
"intro2Rich": "El archivo de la CA vive en <code>/etc/pve/pve-root-ca.pem</code> en cada nodo. En un clúster la ruta está en el sistema de archivos compartido <code>pmxcfs</code>, así que todos los nodos comparten la misma raíz, y una sola importación cubre el datacenter entero. Cópialo a tu máquina:",
"code": "scp root@<your-host>:/etc/pve/pve-root-ca.pem ./pve-root-ca.pem",
"thenImport": "Después impórtalo en el lado del cliente:",
"items": [
"<strong>Linux (todo el sistema):</strong> <code>sudo cp pve-root-ca.pem /usr/local/share/ca-certificates/pve-root-ca.crt</code> seguido de <code>sudo update-ca-certificates</code>. Los navegadores que usan el almacén del sistema (Chromium, Edge) lo toman tras reiniciar; Firefox usa su propio almacén y necesita la importación manual de abajo.",
"<strong>macOS:</strong> doble clic en el archivo <code>.pem</code>, se abre Keychain Access → añádelo al keychain del <em>Sistema</em> → establece <em>Trust → Always Trust</em>.",
"<strong>Windows:</strong> clic derecho en el archivo → <em>Install Certificate</em> → colócalo en <em>Trusted Root Certification Authorities</em>.",
"<strong>Firefox (cualquier SO):</strong> <em>Settings → Privacy y Security → Certificates → View Certificates → Authorities → Import</em>, marca <em>Trust this CA to identify websites</em>."
"<strong>Linux (todo el sistema):</strong> ejecuta <code>sudo cp pve-root-ca.pem /usr/local/share/ca-certificates/pve-root-ca.crt</code> y después <code>sudo update-ca-certificates</code>. Los navegadores que usan el almacén del sistema (Chromium, Edge) lo reconocen tras reiniciar; Firefox usa su propio almacén y requiere la importación manual siguiente.",
"<strong>macOS:</strong> abre el archivo <code>.pem</code> con doble clic en Acceso a Llaveros, añádelo al llavero <em>Sistema</em> y configura <em>Confiar → Confiar siempre</em>.",
"<strong>Windows:</strong> clic derecho en el archivo → <em>Instalar certificado</em> → guárdalo en <em>Entidades de certificación raíz de confianza</em>.",
"<strong>Firefox (cualquier SO):</strong> <em>Ajustes → Privacidad y seguridad → Certificados → Ver certificados → Autoridades → Importar</em>; marca <em>Confiar en esta CA para identificar sitios web</em>."
],
"standalone": {
"title": "Nodos standalone fuera de un clúster",
@@ -160,9 +160,9 @@
},
"disable": {
"heading": "Deshabilitar HTTPS",
"bodyRich": "Pulsa <strong>Disable HTTPS</strong> en el mismo panel. El servicio del Monitor reinicia de vuelta en HTTP plano — útil si un archivo de certificado personalizado se vuelve no legible y el servicio no vuelve a levantarse. No hay paso de desinstalación aparte; los propios archivos de certificado no se tocan.",
"bodyRich": "Pulsa <strong>Deshabilitar HTTPS</strong> en el mismo panel. Monitor reinicia con HTTP sin cifrar, útil si un certificado personalizado no se puede leer y el servicio no arranca. No hay otra desinstalación y los archivos de certificado no se modifican.",
"stateCallout": {
"title": "Dónde vive el estado",
"title": "Dónde se guarda el estado",
"bodyRich": "<code>/etc/proxmenux/ssl_config.json</code> almacena las rutas de certificado activas y la fuente (<code>none</code>, <code>proxmox</code>, <code>custom</code>). Borrar el archivo equivale a deshabilitar HTTPS — en el siguiente arranque el Monitor recae en HTTP."
}
}
+24 -24
View File
@@ -1,36 +1,36 @@
{
"meta": {
"title": "Cambiar canal de release | ProxMenux Documentation",
"description": "Cambia ProxMenux entre los canales estable (main) y beta (develop) en un diálogo. Bidireccional, idempotente, ejecuta el instalador oficial para el canal elegido y normaliza el servicio del Monitor.",
"ogTitle": "Cambiar canal de release | ProxMenux Documentation",
"ogDescription": "Una opción de Settings para cambiar entre los canales estable y beta — sin volver a ejecutar instaladores a mano."
"title": "Cambiar canal de versiones | Documentación de ProxMenux",
"description": "Cambia entre los canales estable (main) y beta (develop) de ProxMenux en un diálogo. Es bidireccional e idempotente, ejecuta el instalador oficial del canal elegido y normaliza el servicio Monitor.",
"ogTitle": "Cambiar canal de versiones | Documentación de ProxMenux",
"ogDescription": "Una opción de Ajustes permite cambiar entre estable y beta sin ejecutar instaladores a mano."
},
"header": {
"title": "Cambiar canal de release",
"description": "Una opción unificada de Settings para cambiar ProxMenux entre los canales estable (rama main) y beta (rama develop). La antigua \"Desactivar programa beta\" unidireccional se ha sustituido por un diálogo bidireccional que siempre ofrece ambas direcciones y ejecuta el instalador oficial del canal que elijas.",
"section": "Settings"
"title": "Cambiar canal de versiones",
"description": "Una opción de Ajustes cambia ProxMenux entre estable (rama main) y beta (rama develop). La antigua opción unidireccional «Desactivar programa beta» se sustituye por un diálogo bidireccional que ofrece ambos sentidos y ejecuta el instalador oficial del canal elegido.",
"section": "Ajustes"
},
"intro": {
"title": "Qué ha cambiado",
"body": "Versiones anteriores de ProxMenux exponían dos flujos separados — \"Desactivar programa beta\" (solo visible cuando beta estaba activo) y una nueva ejecución manual del instalador beta para volver a unirte. Se han fusionado en una única entrada <strong>Cambiar canal de release</strong> siempre presente, que muestra el canal actual y te deja saltar entre estable y beta en cualquier dirección."
"body": "Antes había dos procedimientos: «Desactivar programa beta», visible solo con beta activa, y volver a ejecutar manualmente el instalador beta para entrar de nuevo. Ahora se unen en <strong>Cambiar canal de versiones</strong>, una opción siempre disponible que muestra el canal actual y permite cambiar entre estable y beta en ambos sentidos."
},
"why": {
"heading": "Por qué existe esta opción",
"intro": "ProxMenux se entrega desde dos ramas git:",
"intro": "ProxMenux se distribuye desde dos ramas de Git:",
"items": [
"<strong>Estable</strong> — la rama <code>main</code>. A donde apunta el README, lo que la mayoría de operadores quieren, con una cadencia de releases más lenta y solo cambios que ya han pasado por validación beta.",
"<strong>Beta</strong> — la rama <code>develop</code>. Funciones nuevas y builds del Monitor; lleva el tag que la próxima release estable heredará. Algunas cosas pueden no funcionar perfectamente — ese es el trato al que te apuntas y la forma en que las funciones nuevas se prueban antes de salir."
"<strong>Estable</strong>: la rama <code>main</code>, enlazada desde el README y adecuada para la mayoría de administradores. Publica con menor frecuencia e incluye cambios que ya han pasado por la validación beta.",
"<strong>Beta</strong>: la rama <code>develop</code>. Incluye funciones y compilaciones de Monitor más recientes y la etiqueta que heredará la siguiente versión estable. Puede haber fallos: al elegirla participas en las pruebas previas al lanzamiento."
],
"outro": "Saltar entre canales requería antes recordar la URL del instalador correcta, copiarla del README y editar <code>config.json</code> a mano si algo se desincronizaba. La opción unificada hace todo el flujo como una única acción guiada."
"outro": "Antes, cambiar de canal exigía recordar la URL correcta del instalador, copiarla del README y editar <code>config.json</code> si algo se desincronizaba. La opción unificada realiza todo el proceso mediante una acción guiada."
},
"dialog": {
"heading": "El diálogo",
"intro": "Desde el menú principal, <strong>Settings → Cambiar canal de release</strong>. Aparece un menú de dos líneas:",
"intro": "Desde el menú principal: <strong>Ajustes → Cambiar canal de versiones</strong>. Aparece un menú de dos líneas:",
"options": [
"<code>stable</code> — Estable (rama main)",
"<code>beta</code> — Beta (rama develop)"
],
"behaviour": "El canal actual aparece preseleccionado y mostrado en la parte superior del menú. Elegir el mismo canal devuelve un mensaje amable de \"Este canal de release ya está activo\" — el diálogo es totalmente idempotente. Elegir un canal distinto saca una confirmación con texto específico del canal:",
"behaviour": "El canal actual aparece preseleccionado y se muestra arriba. Si eliges el mismo, aparece «Este canal de versiones ya está activo»: el diálogo es idempotente. Si eliges otro, aparece una confirmación específica del canal:",
"directions": [
"<strong>Estable → Beta:</strong> avisa de que los builds beta pueden contener bugs o funciones incompletas.",
"<strong>Beta → Estable:</strong> avisa de que las comprobaciones de actualizaciones beta cesarán y el instalador estable reinstalará los componentes del canal estable."
@@ -39,11 +39,11 @@
"confirm": {
"heading": "Qué pasa al confirmar",
"items": [
"<strong>Descarga el instalador oficial</strong> del canal de destino:<ul><li>Estable: <code>install_proxmenux.sh</code> desde <code>main</code></li><li>Beta: <code>install_proxmenux_beta.sh</code> desde <code>develop</code></li></ul>Se verifica que la descarga existe y se hace ejecutable antes del siguiente paso.",
"<strong>Ejecuta el instalador</strong> de principio a fin. El instalador es el mismo que publica el README — sin ruta propia, sin atajos. Eso significa que la detección de componentes existentes, backups de archivos, instalación de dependencias, preservación de idioma, etc. se comportan idénticamente a una instalación recién hecha del canal de destino.",
"<strong>Descarga el instalador oficial</strong> del canal de destino:<ul><li>Estable: <code>install_proxmenux.sh</code> desde <code>main</code></li><li>Beta: <code>install_proxmenux_beta.sh</code> desde <code>develop</code></li></ul>Se comprueba que la descarga existe y se hace ejecutable antes de continuar.",
"<strong>Ejecuta el instalador</strong> completo, el mismo que enlaza el README. La detección de componentes, los backups, las dependencias y la conservación del idioma siguen el procedimiento oficial de instalación del canal elegido.",
"Al cambiar a <strong>estable</strong>, el menú poda después cualquier metadato beta sobrante de <code>config.json</code>: <code>beta_program</code>, <code>beta_version</code>, <code>install_branch</code>, <code>update_available.beta*</code> se borran, y <code>proxmenux_monitor.status = beta_updated</code> se normaliza a <code>updated</code>. El archivo sobrante <code>beta_version.txt</code> y cualquier instalador beta descargado se eliminan.",
"Al cambiar a estable, el archivo de la unidad systemd del Monitor también se reescribe desde la plantilla estable (elimina el sufijo \"Beta\" de la descripción de la unidad, apunta <code>ExecStart</code> de vuelta al directorio de runtime) para que un <code>systemctl status</code> fresco refleje el canal en el que estás.",
"Recarga el menú de configuración. La siguiente visita a <em>Mostrar información de versión</em> mostrará el nuevo canal."
"Al cambiar a estable, se reescribe la unidad systemd de Monitor con la plantilla estable: se quita «Beta» de la descripción y <code>ExecStart</code> vuelve a apuntar al directorio de ejecución. Así, <code>systemctl status</code> refleja el canal actual.",
"Recarga el menú de configuración. <em>Mostrar información de versión</em> mostrará el nuevo canal."
]
},
"switching": {
@@ -54,7 +54,7 @@
"Un Monitor que estaba activo antes del cambio sigue activo después; uno que estaba desactivado sigue desactivado.",
"El <code>auth.json</code>, los tokens de API y el secreto JWT de ProxMenux Monitor se preservan entre cambios de canal. Las sesiones no se cierran.",
"Puedes saltar de canal tantas veces como quieras — el diálogo lo aceptará cada vez y volverá a ejecutar el instalador. No hace falta reiniciar Proxmox.",
"El instalador de cambio de canal reemplaza el propio árbol de scripts de ProxMenux, así que no puede correr dentro del terminal del navegador del Monitor (esa PTY sería desmontada a mitad de la actualización y dejaría el diálogo colgado). Si lanzas la opción desde ahí, la confirmación se sustituye por un msgbox informativo con el instalador canónico de una línea para el canal de destino; ejecuta ese comando desde una sesión SSH o desde la consola del host Proxmox."
"El instalador de cambio de canal sustituye el árbol de scripts de ProxMenux, por lo que no puede ejecutarse desde el terminal del navegador de Monitor: la PTY se cerraría a mitad de la actualización y dejaría el diálogo bloqueado. Si lo abres desde allí, aparece un cuadro informativo con el comando oficial de una línea del canal elegido. Ejecútalo desde SSH o la consola del host Proxmox."
]
},
"feedback": {
@@ -66,16 +66,16 @@
"Los logs relevantes del Monitor:"
],
"logsCommand": "journalctl -u proxmenux-monitor -n 50 --no-pager",
"versionLine": "La versión actual de ProxMenux (Settings → <link>Mostrar información de versión</link>).",
"versionLine": "La versión actual de ProxMenux (Ajustes → <link>Mostrar información de versión</link>).",
"issueLine": "Abre una <ghlink>incidencia en GitHub</ghlink> con esa información y llegamos al arreglo más rápido."
},
"manual": {
"heading": "Equivalente manual",
"intro": "Si prefieres el shell o estás scriptando el cambio de canal, el diálogo no es más que un wrapper fino sobre estos comandos:"
"intro": "Si prefieres el shell o automatizas el cambio de canal, el diálogo ejecuta estos comandos:"
},
"unifiedCallout": {
"title": "Por qué ahora ambas direcciones son una sola opción",
"body": "La antigua \"Desactivar programa beta\" solo existía si el host se había unido alguna vez a la beta. Los operadores que querían <em>unirse</em> tenían que encontrar la URL del instalador beta en otro sitio; los que querían <em>salir</em> a veces tenían que limpiar manualmente los metadatos <code>beta_*</code> para asegurarse. La opción unificada <strong>Cambiar canal de release</strong> siempre aparece, hace explícito el canal actual y trata ambas direcciones como el mismo tipo de operación — ejecutable, repetible, idempotente."
"body": "La antigua opción «Desactivar programa beta» solo aparecía si el host se había unido a la beta. Para <em>entrar</em> había que buscar el instalador en otro lugar; para <em>salir</em> a veces había que limpiar los metadatos <code>beta_*</code> a mano. <strong>Cambiar canal de versiones</strong> siempre aparece, muestra el canal actual y aplica el mismo procedimiento ejecutable, repetible e idempotente en ambos sentidos."
},
"troubleshoot": {
"heading": "Solución de problemas",
@@ -84,7 +84,7 @@
"downloadCmd": "curl -fsSL -o /tmp/test https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh && head -1 /tmp/test",
"downloadOutro": "Si esto falla fuera de ProxMenux, es un problema de red / proxy en el host.",
"errorsTitle": "\"El instalador terminó con errores\"",
"errorsBody": "El instalador devolvió un código de salida distinto de cero. El canal anterior y los componentes ya instalados se quedan como estaban antes del cambio. Vuelve a ejecutar la acción; si sigue fallando, ejecuta el instalador manualmente desde un shell (mira el equivalente manual de arriba) — eso te da la salida completa en lugar del resumen del diálogo.",
"errorsBody": "El instalador devolvió un código distinto de cero. No hay reversión automática: algunos archivos o componentes pueden haber cambiado. Lee la salida del instalador que aparece encima del error antes de pulsar Intro y comprueba el estado actual; después reintenta desde el menú o ejecuta el instalador a mano por SSH o desde la consola del host.",
"configTitle": "\"No se pudo actualizar el archivo de configuración\" tras cambiar a estable",
"configBody": "La limpieza post-instalación de metadatos beta falló — normalmente porque <code>config.json</code> tiene un error de sintaxis por una edición manual. Valídalo:",
"configCmd": "jq . /usr/local/share/proxmenux/config.json",
@@ -105,7 +105,7 @@
},
{
"href": "/docs/settings",
"label": "Resumen de Settings",
"label": "Resumen de Ajustes",
"tail": "."
}
]
@@ -1,26 +1,26 @@
{
"meta": {
"title": "Cambiar idioma | ProxMenux Documentation",
"description": "Cambia la UI de ProxMenux entre inglés, español, francés, alemán, italiano o portugués. Solo instalación con traducción — usa googletrans + una tabla de traducción precacheada. El menú se recarga automáticamente con el nuevo idioma.",
"ogTitle": "Cambiar idioma | ProxMenux Documentation",
"ogDescription": "Elige el idioma de la interfaz de ProxMenux desde el menú Settings. Seis idiomas soportados."
"title": "Cambiar idioma | Documentación de ProxMenux",
"description": "Elige entre ocho idiomas de la interfaz de ProxMenux. Todas las instalaciones incluyen catálogos JSON de traducciones pregenerados; el host no necesita servicios de traducción ni un entorno Python. El menú se recarga automáticamente.",
"ogTitle": "Cambiar idioma | Documentación de ProxMenux",
"ogDescription": "Elige uno de los ocho idiomas de ProxMenux en Ajustes. Disponible en todas las instalaciones."
},
"header": {
"title": "Cambiar idioma",
"description": "Cambia la UI de ProxMenux entre seis idiomas soportados. Guarda la elección en config.json y vuelve a ejecutar el menú con el nuevo idioma. Solo disponible en el tipo de instalación con traducción — la instalación normal (ligera) es solo en inglés por diseño.",
"section": "Settings"
"description": "Cambia la interfaz de ProxMenux entre ocho idiomas. La elección se guarda en config.json y el menú se reinicia en el nuevo idioma. Todas las instalaciones incluyen los catálogos de traducciones.",
"section": "Ajustes"
},
"intro": {
"title": "Qué es esto",
"body": "Un menú de diálogo que lista los seis idiomas soportados. Elige uno, ProxMenux lo guarda en <code>config.json</code> como <code>.language</code>, después vuelve a ejecutar <code>config_menu.sh</code> para que el nuevo idioma surta efecto inmediatamente."
"body": "Un diálogo enumera los ocho idiomas admitidos. ProxMenux guarda tu elección en <code>config.json</code> como <code>.language</code> y reinicia <code>config_menu.sh</code> para aplicarla inmediatamente."
},
"warn": {
"title": "Solo instalación con traducción",
"body": "Esta opción solo aparece en Settings si pasan ambas comprobaciones: existe <code>/opt/googletrans-env/bin/activate</code> (venv de Python con googletrans) <em>y</em> <code>config.json</code> tiene un <code>.language</code> no vacío. En la instalación normal (solo inglés) ninguno está presente y el selector de idioma no se muestra."
"title": "Disponible en todas las instalaciones",
"body": "Ajustes siempre muestra Cambiar idioma. Los catálogos se instalan en <code>/usr/local/share/proxmenux/lang/</code> <em>y</em> el idioma seleccionado se guarda en <code>config.json</code>. No se necesita el antiguo entorno Python de traducción."
},
"supported": {
"heading": "Idiomas soportados",
"headerCode": "Código",
"headerCode": "Code",
"headerLang": "Idioma",
"headerNotes": "Notas",
"rows": [
@@ -32,42 +32,52 @@
{
"code": "es",
"lang": "Español",
"notes": "Cacheado + autotraducido"
"notes": "Catálogo JSON pregenerado"
},
{
"code": "fr",
"lang": "Francés",
"notes": "Cacheado + autotraducido"
"notes": "Catálogo JSON pregenerado"
},
{
"code": "de",
"lang": "Alemán",
"notes": "Cacheado + autotraducido"
"notes": "Catálogo JSON pregenerado"
},
{
"code": "it",
"lang": "Italiano",
"notes": "Cacheado + autotraducido"
"notes": "Catálogo JSON pregenerado"
},
{
"code": "pt",
"lang": "Portugués",
"notes": "Cacheado + autotraducido"
"notes": "Catálogo JSON pregenerado"
},
{
"code": "sk",
"lang": "Eslovaco",
"notes": "Catálogo JSON pregenerado"
},
{
"code": "sv",
"lang": "Sueco",
"notes": "Catálogo JSON pregenerado"
}
]
},
"englishTip": {
"title": "El inglés es el más preciso",
"body": "Las cadenas en otros idiomas se producen mediante una tabla precacheada sembrada desde googletrans. Cadenas de casos límite (opciones que se disparan raramente, añadidos recientes) pueden caer en una llamada en vivo a googletrans o en el original inglés. Si una traducción no encaja, el inglés es siempre la fuente de verdad."
"body": "Los textos de otros idiomas proceden de catálogos JSON pregenerados incluidos con ProxMenux. Si falta una traducción se usa el inglés; el host no realiza llamadas de traducción en directo. El inglés sigue siendo la referencia ante una traducción dudosa."
},
"underHood": {
"heading": "Cómo funciona por dentro",
"items": [
"El menú de diálogo lista los 6 códigos; eliges uno.",
"El diálogo enumera ocho códigos de idioma; elige uno.",
"Si <code>config.json</code> existe: <code>jq --arg lang \"$new_language\" '.language = $lang''</code> actualiza el campo en sitio.",
"Si <code>config.json</code> no existe: se crea uno nuevo con el código de idioma en un objeto de un solo campo.",
"Diálogo de confirmación: <em>\"Idioma cambiado a [code]\"</em>.",
"<code>exec bash config_menu.sh</code> recarga el menú Settings con el nuevo idioma activo."
"<code>exec bash config_menu.sh</code> recarga el menú Ajustes con el nuevo idioma activo."
]
},
"manual": {
@@ -75,10 +85,10 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
"noOptionTitle": "La opción no aparece en Settings",
"noOptionBody": "Estás en la instalación normal (solo inglés). Para obtener soporte de idiomas, reinstala ProxMenux eligiendo la opción de instalación con traducción (trae venv de Python + googletrans).",
"noOptionTitle": "La opción no aparece en Ajustes",
"noOptionBody": "Cambiar idioma siempre está disponible en las versiones actuales. Si no aparece, actualiza ProxMenux con el instalador oficial y vuelve a abrir Ajustes.",
"stillEnglishTitle": "Cambié de idioma pero la UI sigue mostrando inglés",
"stillEnglishBody": "El menú se vuelve a ejecutar tras el cambio. Si abriste un shell nuevo y arrancaste un entrypoint distinto de ProxMenux, ejecuta <code>menu</code> de nuevo para tomar el nuevo idioma. Confirma: <code>jq -r '.language' /usr/local/share/proxmenux/config.json</code>."
"stillEnglishBody": "El menú se vuelve a ejecutar tras el cambio. Si abriste una nueva sesión de shell e iniciaste otro punto de entrada de ProxMenux, ejecuta <code>menu</code> de nuevo para aplicar el nuevo idioma. Compruébalo con <code>jq -r '.language' /usr/local/share/proxmenux/config.json</code>."
},
"related": {
"heading": "Relacionado",
@@ -86,11 +96,11 @@
{
"href": "/docs/settings/show-version-information",
"label": "Mostrar información de versión",
"tail": " — confirma el tipo de instalación y el idioma actual."
"tail": " — confirma el canal de versiones, los archivos de traducción y el idioma actual."
},
{
"href": "/docs/settings",
"label": "Resumen de Settings",
"label": "Resumen de Ajustes",
"tail": "."
}
]
+28 -28
View File
@@ -1,70 +1,70 @@
{
"meta": {
"title": "Settings de ProxMenux — Activación del Monitor, canal de release, idiomas | ProxMenux",
"description": "Menú de configuración de ProxMenux: activación de ProxMenux Monitor y conmutador del servicio, restablecer contraseña del Monitor, cambiar canal de release entre estable y beta, selección de idioma (instalación con traducción), información de versión y desinstalación. Las opciones aparecen condicionalmente según lo que esté instalado y activo.",
"ogTitle": "Settings de ProxMenux — Activación del Monitor, canal de release, idiomas",
"ogDescription": "Configura ProxMenux — servicio del Monitor, canal de release, idioma, info de versión y desinstalación.",
"twitterTitle": "Settings de ProxMenux",
"twitterDescription": "Activación del Monitor, cambio de canal de release, idiomas, info de versión y desinstalación."
"title": "Ajustes de ProxMenux — Activación del Monitor, canal de versiones e idiomas | ProxMenux",
"description": "Ajustes de ProxMenux: servicio Monitor y restablecimiento de contraseña, canal estable/beta, ocho idiomas de interfaz, diagnóstico de versión y desinstalación. Las opciones de Monitor aparecen cuando su servicio está instalado.",
"ogTitle": "Ajustes de ProxMenux — Activación del Monitor, canal de versiones e idiomas",
"ogDescription": "Configura ProxMenux: servicio Monitor, canal de versiones, idioma, versión y desinstalación.",
"twitterTitle": "Ajustes de ProxMenux",
"twitterDescription": "Activación de Monitor, cambio de canal de versiones, idiomas, versión y desinstalación."
},
"header": {
"title": "Settings",
"description": "Menú de configuración de ProxMenux. Lista lo que está instalado, te deja conmutar el servicio del Monitor, restablecer la contraseña de login del Monitor, cambiar entre canales de release estable y beta en cualquier dirección, cambiar el idioma de la UI (solo instalación con traducción) y proporciona un desinstalador limpio. Las opciones aparecen condicionalmente — lo que ves depende de tu tipo de instalación y del estado actual.",
"section": "Settings"
"title": "Ajustes",
"description": "Configura ProxMenux: activa o desactiva Monitor, restablece sus credenciales de acceso, cambia entre estable y beta en ambos sentidos, elige uno de ocho idiomas, consulta el diagnóstico de versión y desinstala. Las acciones de Monitor requieren su servicio instalado; el cambio de idioma siempre está disponible.",
"section": "Ajustes"
},
"intro": {
"title": "Para qué sirve este menú",
"body": "Auto-administración del propio ProxMenux: servicio del Monitor, salida del canal beta, idioma, diagnósticos de versión y el desinstalador. Nada en este menú toca tus VMs, contenedores ni almacenamiento."
"body": "Administración del propio ProxMenux: servicio Monitor, salida del canal beta, idioma, diagnóstico de versión y desinstalador. Ninguna opción modifica tus máquinas virtuales, contenedores ni almacenamiento."
},
"opening": {
"heading": "Abrir el menú",
"body": "Desde el menú principal de ProxMenux, pulsa <kbd>s</kbd>. Las opciones mostradas dependen de tu tipo de instalación y de lo que esté actualmente activo:",
"imageAlt": "Menú Settings de ProxMenux con opciones condicionales según el tipo de instalación y el estado de los componentes"
"body": "Desde el menú principal de ProxMenux, pulsa <kbd>s</kbd>. Las acciones de Monitor aparecen si su servicio está instalado; los demás ajustes siempre están disponibles:",
"imageAlt": "Menú Ajustes de ProxMenux con acciones de Monitor condicionales"
},
"installTypes": {
"heading": "Dos tipos de instalación, menús distintos",
"intro": "ProxMenux se entrega en dos sabores. El menú Settings se adapta al que tengas:",
"heading": "Una instalación, todos los idiomas",
"intro": "Las versiones actuales incluyen catálogos JSON estáticos de traducciones en todas las instalaciones. Las antiguas ofrecían modalidades separadas con traducción y normal:",
"headerType": "Tipo de instalación",
"headerBundles": "Qué incluye",
"headerMenu": "El menú muestra",
"rows": [
{
"type": "Con traducción",
"bundles": "venv de Python + googletrans + configuración multi-idioma",
"type": "Instalación actual",
"bundles": "Catálogos JSON estáticos para siete idiomas, más el inglés integrado; sin entorno Python de traducción",
"menuRich": "<strong>Cambiar idioma</strong> + Mostrar versión + Desinstalar"
},
{
"type": "Normal (ligera)",
"bundles": "Solo inglés, sin venv, huella menor",
"menu": "Mostrar versión + Desinstalar (sin selector de idioma)"
"type": "Modalidades antiguas con traducción / normal",
"bundles": "Antigua separación entre entorno de traducción e instalación solo en inglés",
"menu": "Actualiza con el instalador oficial para usar el menú unificado actual"
}
],
"detectionTitle": "La detección es automática",
"detectionBody": "El script comprueba <code>/opt/googletrans-env/bin/activate</code> y una clave <code>language</code> no vacía en <code>config.json</code>. Ambas presentes → instalación con traducción. Falta alguna → instalación normal. No eliges; el menú se adapta."
"detectionTitle": "La selección de idioma siempre está disponible",
"detectionBody": "El menú ya no comprueba un entorno de traducción. Todas las instalaciones incluyen <code>/usr/local/share/proxmenux/lang/</code> y guardan el <code>language</code> seleccionado en <code>config.json</code>."
},
"options": {
"heading": "Opciones del menú",
"intro": "Cinco herramientas. Los badges de <em>Condicional</em> significan que la opción solo aparece cuando se cumple el prerrequisito (Monitor instalado; programa beta activo; instalación con traducción).",
"intro": "Las herramientas siguientes gestionan el propio ProxMenux. <em>Condicional</em> indica que las acciones de Monitor solo aparecen si su servicio systemd está instalado. Canal de versiones, idioma, diagnóstico de versión y desinstalación siempre están disponibles.",
"list": [
{
"icon": "Activity",
"href": "/docs/settings/proxmenux-monitor",
"title": "ProxMenux Monitor",
"title": "Monitor de ProxMenux",
"description": "Activa / desactiva la unidad systemd proxmenux-monitor.service, comprueba su estado actual y restablece la contraseña de login del panel si se ha perdido. UI web disponible en TCP 8008.",
"badge": "Condicional"
},
{
"icon": "TestTube",
"href": "/docs/settings/beta-program",
"title": "Cambiar canal de release",
"description": "Cambia entre estable (main) y beta (develop) en cualquier dirección desde un único diálogo. Ejecuta el instalador oficial para el canal elegido; idempotente y siempre visible.",
"title": "Cambiar canal de versiones",
"description": "Cambia entre estable (main) y beta (develop) en ambos sentidos desde un único diálogo. Ejecuta el instalador oficial del canal elegido; es idempotente y siempre está visible.",
"badge": "Siempre disponible"
},
{
"icon": "Info",
"href": "/docs/settings/show-version-information",
"title": "Mostrar información de versión",
"description": "Versión de ProxMenux, tipo de instalación, componentes instalados, rutas de archivos, estado del entorno virtual e idioma actual."
"description": "Versión de ProxMenux, canal de versiones, componentes instalados, rutas de archivos, archivos de traducción e idioma actual."
},
{
"icon": "Trash2",
@@ -75,7 +75,7 @@
]
},
"configTip": {
"title": "Dónde vive la configuración",
"bodyRich": "La mayor parte del estado gestionado por este menú vive en <code>/usr/local/share/proxmenux/config.json</code> — <code>language</code>, <code>beta_program.status</code> y flags de instalación por componente. El estado del servicio del Monitor vive en systemd (<code>proxmenux-monitor.service</code>), no aquí. La versión se lee de <code>/usr/local/share/proxmenux/version.txt</code>."
"title": "Dónde se guarda la configuración",
"bodyRich": "La mayor parte del estado gestionado por este menú se guarda en <code>/usr/local/share/proxmenux/config.json</code>: <code>language</code>, <code>beta_program.status</code> e indicadores de instalación por componente. El estado del servicio Monitor se guarda en systemd (<code>proxmenux-monitor.service</code>), no aquí. La versión se lee de <code>/usr/local/share/proxmenux/version.txt</code>."
}
}
@@ -1,14 +1,14 @@
{
"meta": {
"title": "ProxMenux Monitor | ProxMenux Documentation",
"title": "ProxMenux Monitor | Documentación de ProxMenux",
"description": "Activa o desactiva la unidad systemd proxmenux-monitor.service e inspecciona su estado actual. El Monitor expone una UI web en TCP 8008 para monitorización visual del host.",
"ogTitle": "ProxMenux Monitor | ProxMenux Documentation",
"ogDescription": "Conmuta el servicio systemd proxmenux-monitor y comprueba su estado desde el menú Settings."
"ogTitle": "ProxMenux Monitor | Documentación de ProxMenux",
"ogDescription": "Activa o desactiva el servicio systemd proxmenux-monitor y consulta su estado en Ajustes."
},
"header": {
"title": "ProxMenux Monitor",
"description": "Dos acciones relacionadas dentro del menú Settings: conmutar la unidad systemd proxmenux-monitor.service (start / stop y enable / disable en un clic) y ver su estado detallado actual. El Monitor expone una UI web en TCP 8008 para monitorización visual del host.",
"section": "Settings"
"description": "Dos acciones relacionadas en Ajustes: activar o desactivar la unidad systemd proxmenux-monitor.service (iniciar/detener y habilitar/deshabilitar el arranque automático a la vez) y ver su estado detallado. Monitor ofrece una interfaz web en TCP 8008 para monitorizar el host.",
"section": "Ajustes"
},
"intro": {
"title": "¿Qué es ProxMenux Monitor?",
@@ -32,7 +32,7 @@
"outro": "El Monitor se instala automáticamente como parte de la instalación estándar de ProxMenux y corre como un servicio systemd (<code>proxmenux-monitor.service</code>) que arranca automáticamente al iniciar."
},
"warnConditional": {
"title": "Las opciones de Settings solo son visibles cuando el Monitor está instalado",
"title": "Las opciones de Ajustes solo aparecen cuando Monitor está instalado",
"body": "Las dos entradas de menú descritas debajo solo aparecen en Settings si <code>proxmenux-monitor.service</code> está registrado en systemd. Si no las ves, el Monitor no se instaló (es opcional durante la instalación de ProxMenux). Para añadirlo más tarde, reinstala ProxMenux con la última versión y elige la opción de Monitor."
},
"toggle": {
@@ -43,17 +43,17 @@
"headerAction": "Acción al confirmar",
"rows": [
{
"state": "active",
"state": "activo",
"label": "Desactivar ProxMenux Monitor",
"action": "systemctl stop + disable"
},
{
"state": "inactive",
"state": "inactivo",
"label": "Activar ProxMenux Monitor",
"action": "systemctl enable + start"
}
],
"outro": "Cada conmutación requiere un diálogo explícito sí/no antes de ejecutarse. Activar / Desactivar es simétrico: desactivar para el servicio <em>y</em> deshabilita el auto-arranque al iniciar; activar habilita el auto-arranque <em>y</em> arranca el servicio inmediatamente."
"outro": "Cada cambio requiere confirmación sí/no. Desactivar detiene el servicio <em>y</em> deshabilita su inicio automático; activar habilita el inicio automático <em>y</em> arranca el servicio inmediatamente."
},
"status": {
"heading": "Mostrar estado del servicio del Monitor",
@@ -70,21 +70,21 @@
"code": "systemctl status proxmenux-monitor.service # detailed status\nsystemctl is-active proxmenux-monitor.service # one-word status\nsystemctl enable --now proxmenux-monitor.service # enable + start\nsystemctl disable --now proxmenux-monitor.service # stop + disable\njournalctl -u proxmenux-monitor.service -f # follow live logs"
},
"reset": {
"heading": "Restablecer contraseña del Monitor",
"intro": "Ruta de recuperación para el operador que perdió la contraseña del panel (o el dispositivo 2FA). La opción solo aparece cuando el Monitor está instalado en el host. Al seleccionarla:",
"heading": "Restablecer la contraseña de ProxMenux Monitor",
"intro": "Ruta de recuperación para el usuario que perdió la contraseña del panel (o el dispositivo 2FA). La opción solo aparece cuando el Monitor está instalado en el host. Al seleccionarla:",
"items": [
"Pide confirmación con un diálogo sí/no — la acción es destructiva para las credenciales de login.",
"Hace backup del <code>/root/.config/proxmenux-monitor/auth.json</code> existente a <code>auth.json.bak-&lt;UTC timestamp&gt;</code> (modo <code>0600</code>) para que el estado previo se pueda restaurar manualmente si el reset fue un error.",
"Para el servicio <code>proxmenux-monitor</code> para que la edición en disco no compita con un login en vuelo.",
"Detiene el servicio <code>proxmenux-monitor</code> para evitar conflictos entre la edición del archivo y un inicio de sesión en curso.",
"Limpia los campos de identidad en <code>auth.json</code>: <code>enabled=false</code>, <code>configured=false</code>, vacía <code>username</code>, <code>password_hash</code>, <code>totp_secret</code> y el array de códigos de backup.",
"<strong>Preserva</strong> el <code>jwt_secret</code> y los <code>api_tokens</code> / <code>revoked_tokens</code> registrados — para que los tokens de API de larga vida usados por Home Assistant u otros scripts <em>sigan autenticando</em> tras el reset.",
"<strong>Conserva</strong> <code>jwt_secret</code> y los <code>api_tokens</code> / <code>revoked_tokens</code> registrados para que los tokens de larga duración de Home Assistant u otros scripts <em>sigan autenticándose</em> tras el restablecimiento.",
"Reinicia el servicio. La siguiente visita a <code>http://&lt;host&gt;:8008</code> muestra el asistente de configuración de primer lanzamiento para que se pueda crear una nueva cuenta de administrador."
],
"preservedTitle": "Qué sobrevive al reset, qué no",
"preservedBody": "<strong>Borrado:</strong> nombre de usuario, hash de contraseña, secreto TOTP de 2FA, códigos de backup. <strong>Preservado:</strong> <code>jwt_secret</code>, metadatos de <code>api_tokens</code>, lista de <code>revoked_tokens</code>. Si quieres activamente invalidar también todo token de API existente (pizarra limpia total), borra <code>auth.json</code> manualmente en lugar de usar esta opción de menú — el siguiente arranque del servicio regenera el secreto JWT y todo lo demás desde cero.",
"preservedBody": "<strong>Borra:</strong> usuario, hash de contraseña, secreto TOTP de 2FA y códigos de recuperación. <strong>Conserva:</strong> <code>jwt_secret</code>, metadatos de <code>api_tokens</code> y lista <code>revoked_tokens</code>. Para invalidar también todos los tokens API y empezar de cero, elimina <code>auth.json</code> manualmente en lugar de usar esta opción. Al reiniciar el servicio se regeneran el secreto JWT y los demás datos.",
"trustTitle": "El acceso al host físico es el ancla de confianza",
"trustBody": "Esta ruta de reset requiere shell root en el host. Cualquiera que pueda ejecutar el comando <code>menu</code> como root ya controla la máquina, así que darle la recuperación de contraseña no es una escalada de privilegios — es coherente con cómo funciona cualquier otra herramienta de administración en Proxmox. El corolario: el login del Monitor no protegerá nada de alguien a quien ya hayas dejado entrar al shell de Proxmox.",
"seeAlso": "Mira también <link>Monitor → Access y Auth → Recuperar una contraseña perdida</link> para el mismo flujo descrito desde el lado del panel, además del contexto más amplio sobre cómo se hashean las contraseñas y cómo se genera el secreto JWT."
"seeAlso": "Consulta también <link>Monitor → Acceso y autenticación → Recuperar una contraseña perdida</link> para ver este procedimiento desde el panel y conocer cómo se calculan los hashes de contraseñas y se genera el secreto JWT."
},
"files": {
"heading": "Archivos implicados",
@@ -95,7 +95,7 @@
"missingTitle": "Ambas opciones del menú faltan",
"missingBody": "El Monitor no está registrado en systemd. Confirma con <code>systemctl list-unit-files | grep proxmenux-monitor</code> — si no hay salida, reinstala ProxMenux desde el instalador oficial con la última versión y elige la opción de Monitor durante la instalación.",
"unreachableTitle": "Servicio activado pero la URL es inalcanzable",
"unreachableBody": "La salida del estado en Settings te da la IP. Confirma:",
"unreachableBody": "El estado en Ajustes muestra la IP. Comprueba:",
"unreachableCmd": "ss -tlnp | grep 8008 # is anything listening?\njournalctl -u proxmenux-monitor -n 100 --no-pager # recent errors\ncurl -sI http://localhost:8008 # local reachability",
"unreachableOutro": "Si localhost funciona pero el externo no, comprueba el firewall del host (<code>pve-firewall</code> o nftables) para TCP 8008 entrante.",
"stopsTitle": "Activé el servicio pero se para solo unos segundos después",
@@ -111,7 +111,7 @@
},
{
"href": "/docs/settings",
"label": "Resumen de Settings",
"label": "Resumen de Ajustes",
"tail": "."
}
]
@@ -1,14 +1,14 @@
{
"meta": {
"title": "Mostrar información de versión | ProxMenux Documentation",
"description": "Autodiagnóstico de ProxMenux de solo lectura: número de versión, tipo de instalación (con traducción / normal), componentes instalados desde config.json, rutas de archivos, estado del entorno virtual e idioma actual.",
"ogTitle": "Mostrar información de versión | ProxMenux Documentation",
"ogDescription": "Volcado de diagnóstico de versión de ProxMenux, tipo de instalación, componentes, archivos e idioma."
"title": "Mostrar información de versión | Documentación de ProxMenux",
"description": "Diagnóstico de ProxMenux de solo lectura: versión, canal de versiones, componentes registrados en config.json, rutas de archivos, catálogos de traducción e idioma actual.",
"ogTitle": "Mostrar información de versión | Documentación de ProxMenux",
"ogDescription": "Datos de diagnóstico de ProxMenux: versión, canal de versiones, componentes, archivos e idioma."
},
"header": {
"title": "Mostrar información de versión",
"description": "Diagnóstico de solo lectura. Lee version.txt, config.json y unas pocas rutas de archivos conocidas, después renderiza un cuadro de texto desplazable con la versión, tipo de instalación, componentes instalados, presencia de archivos, estado del entorno virtual e idioma actual.",
"section": "Settings"
"description": "Diagnóstico de solo lectura. Lee version.txt, config.json y rutas de archivos conocidas; muestra un cuadro de texto desplazable con la versión, el canal de versiones, los componentes instalados, la presencia de archivos, los archivos de traducción y el idioma actual.",
"section": "Ajustes"
},
"intro": {
"title": "Qué es esto",
@@ -26,14 +26,14 @@
"contentRich": "Número de versión de una sola línea; <code>Unknown</code> si el archivo falta"
},
{
"section": "Tipo de instalación",
"source": "comprobaciones de venv + config.json",
"content": "Con traducción (multi-idioma) o Normal (solo inglés)"
"section": "Canal de versiones",
"source": "Estado del programa beta en config.json",
"content": "Estable (main) o beta (develop); versión beta si está disponible"
},
{
"section": "Componentes instalados",
"source": "config.json",
"content": "Estado por componente (✓ instalado / creado / actualizado, ✗ faltante)"
"content": "Estado de cada componente (✓ instalado / creado / actualizado, ✗ ausente)"
},
{
"section": "Archivos de ProxMenux",
@@ -41,14 +41,14 @@
"contentRich": "Presencia y rutas de <code>menu</code>, <code>utils.sh</code>, <code>config.json</code>, <code>version.txt</code>"
},
{
"section": "Entorno virtual",
"source": "/opt/googletrans-env",
"content": "Solo instalación con traducción — presencia de venv + pip"
"section": "Archivos de traducción",
"source": "/usr/local/share/proxmenux/lang/",
"content": "Presencia del directorio lang/ incluido en todas las instalaciones"
},
{
"section": "Idioma actual",
"source": "config.json",
"contentRich": "Con traducción: código de idioma desde <code>.language</code>; Normal: <code>English (Fixed)</code>"
"contentRich": "Código de idioma de <code>.language</code>; usa <code>en</code> por defecto si no está definido"
}
]
},
@@ -60,7 +60,7 @@
"unknownBody": "<code>/usr/local/share/proxmenux/version.txt</code> falta o no es legible. Lo más habitual es por una instalación parcial. Reinstala desde la fuente oficial de ProxMenux.",
"noConfigTitle": "No hay información de instalación disponible",
"noConfigBody": "<code>config.json</code> falta. El script no puede enumerar los componentes sin él. Reinstala para regenerarlo.",
"wrongStatusTitle": "Un componente muestra ✗ y estoy seguro de haberlo instalado",
"wrongStatusTitle": "Un componente muestra ✗ aunque estoy seguro de haberlo instalado",
"wrongStatusBody": "Significa que <code>config.json</code> no registra ese componente como instalado — podría ser un script que aún no se registra a sí mismo, o una instalación manual que se saltó ProxMenux. El diálogo refleja lo que dice <code>config.json</code>, no lo que hay realmente en disco."
},
"related": {
@@ -73,7 +73,7 @@
},
{
"href": "/docs/settings",
"label": "Resumen de Settings",
"label": "Resumen de Ajustes",
"tail": "."
}
]
@@ -1,55 +1,55 @@
{
"meta": {
"title": "Desinstalar ProxMenux | ProxMenux Documentation",
"description": "Desinstalador limpio de ProxMenux con eliminación opcional de dependencias (jq, dialog, python3-*) y restauración automática de los backups de /root/.bashrc y /etc/motd creados en el momento de la instalación. También elimina el servicio proxmenux-monitor si está presente.",
"ogTitle": "Desinstalar ProxMenux | ProxMenux Documentation",
"title": "Desinstalar ProxMenux | Documentación de ProxMenux",
"description": "Desinstalador de ProxMenux con eliminación opcional de jq y dialog, limpieza de archivos de traducción antiguos y del servicio Monitor, y restauración de copias de archivos del sistema.",
"ogTitle": "Desinstalar ProxMenux | Documentación de ProxMenux",
"ogDescription": "Elimina limpiamente ProxMenux de un host Proxmox con limpieza opcional de dependencias."
},
"header": {
"title": "Desinstalar ProxMenux",
"description": "Elimina ProxMenux del host Proxmox con un flujo interactivo: confirmación, eliminación opcional de dependencias, limpieza del servicio ProxMenux Monitor, restauración de los backups de /root/.bashrc y /etc/motd. Muestra una barra de progreso todo el tiempo.",
"section": "Settings"
"description": "Elimina ProxMenux del host Proxmox mediante un proceso interactivo: confirmación, eliminación opcional de dependencias, limpieza del servicio ProxMenux Monitor y restauración de las copias de /root/.bashrc y /etc/motd. Muestra una barra de progreso durante todo el proceso.",
"section": "Ajustes"
},
"scopeWarn": {
"title": "Afecta solo a la instalación de ProxMenux — no a tus VMs / CTs / almacenamiento",
"body": "Desinstalar ProxMenux elimina los scripts de ProxMenux, el lanzador del menú, el servicio opcional Monitor y cualquier backup que ProxMenux hizo de archivos del sistema cuando lo instalaste. <strong>No toca tus VMs, contenedores, almacenamiento, configuración de red, Fail2Ban, driver NVIDIA ni nada más que hayas instalado vía ProxMenux.</strong> Esas cosas se quedan como están."
"body": "Desinstalar ProxMenux elimina sus scripts, el lanzador del menú, el servicio opcional Monitor y las copias de archivos del sistema que creó durante la instalación. <strong>No modifica tus máquinas virtuales, contenedores, almacenamiento, configuración de red, Fail2Ban, el controlador NVIDIA ni nada más que hayas instalado mediante ProxMenux.</strong> Todo ello permanece como está."
},
"flow": {
"heading": "El flujo de desinstalación",
"heading": "El proceso de desinstalación",
"items": [
"<strong>Diálogo de confirmación.</strong> Sí/no — \"¿Seguro que quieres desinstalar ProxMenux?\"",
"<strong>Checklist de eliminación de dependencias.</strong> La lista preseleccionada depende del tipo de instalación (mira la tabla de abajo). Todas las casillas por defecto en OFF — te apuntas a eliminar cada dependencia.",
"<strong>La eliminación corre con una barra de progreso.</strong> Elimina el venv (solo instalación con traducción), el lanzador <code>menu</code>, el árbol <code>/usr/local/share/proxmenux/</code>, el servicio ProxMenux Monitor si está presente junto con el destino de notificaciones que registró en Proxmox VE (<code>proxmenux-webhook</code> y su matcher), las dependencias que marcaste y, por último, restaura los backups de archivos del sistema (mira abajo).",
"<strong>Diálogo de finalización.</strong> Lista las dependencias eliminadas y sale."
"<strong>Diálogo de confirmación.</strong> Sí/no: «¿Estás seguro de que deseas desinstalar ProxMenux?»",
"<strong>Lista de eliminación de dependencias.</strong> Ofrece jq y dialog. Ambas casillas están desmarcadas por defecto; selecciona solo dependencias que ninguna otra aplicación necesite.",
"<strong>La eliminación muestra una barra de progreso.</strong> Elimina cualquier entorno de traducción antiguo que quede, el lanzador <code>menu</code>, el árbol <code>/usr/local/share/proxmenux/</code>, el servicio ProxMenux Monitor si existe y el destino de notificaciones que registró en Proxmox VE (<code>proxmenux-webhook</code> y su regla de coincidencia), las dependencias seleccionadas y, por último, restaura las copias de los archivos del sistema (ver más abajo).",
"<strong>Diálogo de finalización.</strong> Enumera las dependencias eliminadas y termina."
]
},
"deps": {
"heading": "Eliminación de dependencias: qué se ofrece",
"intro": "La checklist depende del tipo de instalación. <strong>Ninguna casilla está marcada por defecto</strong> — son paquetes de todo el sistema que otras aplicaciones podrían usar, así que el valor por defecto más seguro es dejarlos.",
"headerType": "Tipo de instalación",
"intro": "La lista ofrece jq y dialog. <strong>Ninguna casilla está marcada por defecto</strong>: otras aplicaciones pueden usar estos paquetes del sistema, por lo que es más seguro conservarlos.",
"headerType": "Instalación",
"headerOffered": "Se ofrece para eliminar",
"rows": [
{
"type": "Con traducción",
"offeredRich": "<code>python3-venv</code>, <code>python3-pip</code>, <code>python3</code>, <code>jq</code>"
"type": "Versiones actuales",
"offeredRich": "<code>dialog</code>, <code>jq</code>"
},
{
"type": "Normal",
"type": "Instalaciones antiguas tras actualizar",
"offeredRich": "<code>dialog</code>, <code>jq</code>"
}
],
"warnTitle": "Paquetes de todo el sistema — piénsalo dos veces",
"warnBody": "<code>python3</code>, <code>jq</code> y <code>dialog</code> los usan habitualmente otras herramientas (incluyendo el propio Proxmox en algunos flujos). Eliminar <code>python3</code> en particular puede romper helpers de Proxmox, utilidades de Ceph y muchos scripts de terceros. Déjalos a menos que estés seguro de que nada más los necesita."
"warnBody": "La lista actual ofrece <code>jq</code> y <code>dialog</code>, no <code>python3</code>. Son paquetes del sistema que otras herramientas pueden necesitar. La eliminación también puede eliminar paquetes dependientes o dependencias sin uso. Conserva los paquetes necesarios y revisa cualquier propuesta de eliminación antes de ejecutar apt manualmente."
},
"removed": {
"heading": "Qué se elimina",
"code": "/usr/local/bin/menu # the launcher\n/usr/local/share/proxmenux/ # everything: scripts, config, cache, version\n/opt/googletrans-env/ # virtual env (Translation install only)\n/etc/systemd/system/proxmenux-monitor.service # Monitor service unit\n/root/.config/proxmenux-monitor/ # Monitor config dir\n # + dependencies you ticked in the checklist"
"code": "/usr/local/bin/menu # the launcher\n/usr/local/share/proxmenux/ # everything: scripts, config, cache, version\n/opt/googletrans-env/ # leftover legacy translation environment\n/etc/systemd/system/proxmenux-monitor.service # Monitor service unit\n/root/.config/proxmenux-monitor/ # Monitor config dir\n # + dependencies you ticked in the checklist"
},
"restored": {
"heading": "Qué se restaura",
"items": [
"Si <code>/root/.bashrc.bak</code> existe → se renombra de vuelta a <code>/root/.bashrc</code> (tu bashrc original vuelve).",
"Si <code>/etc/motd.bak</code> existe → se renombra de vuelta a <code>/etc/motd</code>. Si no, la línea de ProxMenux (<em>\"This system is optimised by: ProxMenux\"</em>) se elimina del motd existente con sed."
"Si existe <code>/etc/motd.bak</code>, se renombra a <code>/etc/motd</code>. Si no, sed elimina del motd actual la línea de ProxMenux (<em>“This system is optimised by: ProxMenux”</em>)."
]
},
"othersCallout": {
@@ -59,20 +59,20 @@
"manual": {
"heading": "Desinstalación manual",
"intro": "Si por alguna razón el desinstalador del menú no se puede ejecutar (p. ej. <code>dialog</code> ya falta), la secuencia manual equivalente:",
"code": "# 1. Stop and remove the Monitor service (if installed)\nsystemctl stop proxmenux-monitor.service 2>/dev/null\nsystemctl disable proxmenux-monitor.service 2>/dev/null\nrm -f /etc/systemd/system/proxmenux-monitor.service\nrm -rf /root/.config/proxmenux-monitor\nsystemctl daemon-reload\nsystemctl reset-failed 2>/dev/null\n\n# 2. Remove the venv (Translation install only)\nrm -rf /opt/googletrans-env\n\n# 3. Remove ProxMenux files\nrm -f /usr/local/bin/menu\nrm -rf /usr/local/share/proxmenux\n\n# 4. Restore backups\n[ -f /root/.bashrc.bak ] && mv /root/.bashrc.bak /root/.bashrc\n[ -f /etc/motd.bak ] && mv /etc/motd.bak /etc/motd \\\n || sed -i '/This system is optimised by: ProxMenux/d' /etc/motd"
"code": "# 1. Stop and remove the Monitor service (if installed)\nsystemctl stop proxmenux-monitor.service 2>/dev/null\nsystemctl disable proxmenux-monitor.service 2>/dev/null\nrm -f /etc/systemd/system/proxmenux-monitor.service\nrm -rf /root/.config/proxmenux-monitor\nsystemctl daemon-reload\nsystemctl reset-failed 2>/dev/null\n\n# 2. Remove a leftover legacy translation environment\nrm -rf /opt/googletrans-env\n\n# 3. Remove ProxMenux files\nrm -f /usr/local/bin/menu\nrm -rf /usr/local/share/proxmenux\n\n# 4. Restore backups\n[ -f /root/.bashrc.bak ] && mv /root/.bashrc.bak /root/.bashrc\n[ -f /etc/motd.bak ] && mv /etc/motd.bak /etc/motd \\\n || sed -i '/This system is optimised by: ProxMenux/d' /etc/motd"
},
"reinstall": {
"heading": "Reinstalar más tarde",
"body": "Ejecuta el instalador oficial de ProxMenux otra vez. Elige con traducción o normal como prefieras — la elección es independiente de lo que tuvieses antes."
"body": "Vuelve a ejecutar el instalador oficial de ProxMenux. Las versiones actuales usan una única modalidad de instalación que incluye los ocho idiomas de la interfaz."
},
"troubleshoot": {
"heading": "Solución de problemas",
"hangTitle": "La desinstalación se queda colgada en \"Removing googletrans and virtual environment\"",
"hangBody": "<code>pip uninstall</code> puede atascarse si pip no responde. Desde otro shell: <code>rm -rf /opt/googletrans-env</code> directamente (el script hace lo mismo como fallback tras pip).",
"aptTitle": "apt avisa de paquetes aún en uso durante la eliminación de dependencias",
"aptBody": "Esperado si marcaste <code>python3</code> o <code>jq</code> mientras otras cosas en el host dependen de ellos. El <code>autoremove</code> de apt se negará a eliminarlos en ese caso (que es el comportamiento seguro). Desmarca esa dependencia y vuelve a ejecutar.",
"hangTitle": "La desinstalación se bloquea al eliminar un entorno de traducción antiguo",
"hangBody": "Las versiones actuales eliminan el entorno residual con <code>rm -rf /opt/googletrans-env</code>; no ejecutan <code>pip uninstall</code>. Si este paso se bloquea, examínalo desde otro shell y comprueba el sistema de archivos del host antes de reintentarlo.",
"aptTitle": "apt avisa de paquetes aún en uso al eliminar dependencias",
"aptBody": "Los paquetes seleccionados se marcan como automáticos y se pasan a <code>apt-get -y --purge autoremove</code>. Esto no garantiza la protección de los servicios dependientes. Deja las dependencias sin marcar si otras herramientas las necesitan; revisa las eliminaciones que proponga apt antes de cualquier limpieza manual.",
"motdTitle": "El MOTD sigue mostrando la línea de ProxMenux tras desinstalar",
"motdBody": "O no existía <code>/etc/motd.bak</code> y la limpieza con sed no coincidió (p. ej. la línea fue modificada). Edita <code>/etc/motd</code> a mano y elimina cualquier línea sobrante de ProxMenux."
"motdBody": "Puede ocurrir si no existía <code>/etc/motd.bak</code> y sed no encontró la línea (por ejemplo, porque se había modificado). Edita <code>/etc/motd</code> a mano y elimina las líneas de ProxMenux que queden."
},
"related": {
"heading": "Relacionado",
@@ -84,7 +84,7 @@
},
{
"href": "/docs/settings",
"label": "Resumen de Settings",
"label": "Resumen de Ajustes",
"tail": "."
}
]
@@ -24,7 +24,7 @@
"meaningRich": "El endpoint del servicio iSCSI en el servidor del target — una IP (o hostname) más un puerto TCP. El puerto por defecto es <code>3260</code>; ProxMenux lo asume si no especificas uno."
},
{
"term": "Target",
"term": "Destino (target)",
"meaningRich": "Un único \"servidor\" exportado dentro del portal, identificado por su IQN (<em>iSCSI Qualified Name</em>). Un portal puede alojar muchos targets."
},
{
@@ -36,7 +36,7 @@
"meaningRich": "Un dispositivo de bloque dentro de un target (Logical Unit Number). Un único target puede exponer varias LUNs; cada LUN aparece como su propio disco en Proxmox y puede convertirse en un disco de VM."
},
{
"term": "Initiator",
"term": "Iniciador",
"meaningRich": "El cliente que conecta a un target — en este caso, tu host Proxmox. El initiator tiene su propio IQN guardado en <code>/etc/iscsi/initiatorname.iscsi</code>. Los targets normalmente solo aceptan sesiones de IQNs de initiator preautorizados."
}
]
@@ -44,7 +44,7 @@
"opening": {
"heading": "Abrir la herramienta",
"body": "Desde el menú principal de ProxMenux, abre <strong>Storage &amp; Share Manager → Add iSCSI Target as Proxmox Storage</strong>. Verás este submenú con cuatro opciones:",
"imageAlt": "Menú iSCSI Host Manager — Add / View / Remove / Test connectivity"
"imageAlt": "Menú del gestor iSCSI del host — Añadir / Ver / Eliminar / Probar conectividad"
},
"howRuns": {
"heading": "Cómo se ejecuta el script (flujo Add)",
@@ -56,7 +56,7 @@
"<strong>Entrada del portal</strong> — escribe la IP o hostname del servidor del target iSCSI. Se asume el puerto <code>3260</code> a menos que escribas <code>host:port</code>.",
"<strong>Descubrimiento de targets</strong> — ProxMenux llama a <code>iscsiadm --mode discovery --type sendtargets --portal &lt;ip:port&gt;</code>. El servidor responde con cada IQN que permite ver a este initiator. Si el descubrimiento falla, el script muestra el error exacto de <code>iscsiadm</code> y lista las causas comunes (IP incorrecta, firewall, IQN del initiator no autorizado).",
"<strong>Selección del target</strong> — si hay un solo target se selecciona automáticamente; con varios targets se muestra un menú.",
"<strong>Storage ID</strong> — por defecto es <code>iscsi-&lt;último segmento del IQN, máx. 20 caracteres&gt;</code>. Solo letras, dígitos, <code>-</code> y <code>_</code>.",
"<strong>Storage ID</strong> — por defecto es <code>iscsi-&lt;last IQN segment, 20 chars max&gt;</code>. Solo letras, dígitos, <code>-</code> y <code>_</code>.",
"<strong>Content type</strong> — a diferencia de NFS / Samba, el contenido iSCSI está <strong>fijado a <code>images</code></strong>. iSCSI expone dispositivos de bloque raw, no un sistema de archivos, así que Proxmox solo te deja alojar discos de VM ahí."
],
"authTitle": "Autorizar el initiator de Proxmox en el target",
@@ -74,7 +74,7 @@
"remove": {
"heading": "Eliminar almacenamiento iSCSI",
"body": "Ejecuta <code>pvesm remove &lt;storage-id&gt;</code> tras confirmar portal, target y contenido. Solo se elimina el registro en Proxmox — <strong>el propio target iSCSI no se toca</strong> y las sesiones existentes en el lado del kernel pueden persistir hasta el siguiente reinicio.",
"warnTitle": "Discos de VM existentes en este iSCSI primero",
"warnTitle": "Primero revisa los discos de VM existentes en este iSCSI",
"warnBody": "Eliminar un almacenamiento iSCSI mientras las VMs todavía tienen discos en él deja a esas VMs apuntando a un almacén desaparecido. Proxmox marcará el error, pero los datos de la LUN siguen intactos en el target — puedes volver a registrar el almacenamiento después para recuperar los discos. Aun así, mueve o haz backup de las VMs primero por seguridad."
},
"test": {
@@ -98,7 +98,7 @@
"noLunTitle": "Las LUNs no aparecen en /dev/disk/by-path tras el registro",
"noLunBody": "<code>pvesm add iscsi</code> tuvo éxito pero el kernel no ve dispositivos de bloque. Comprueba <code>iscsiadm --mode session</code> — si no hay sesión activa, inicia una manualmente con <code>iscsiadm --mode node --login</code>. Si hay sesión pero no aparecen LUNs, fuerza un rescan: <code>iscsiadm --mode session --rescan</code>. Si sigue sin haber nada, probablemente el target todavía no tiene LUNs asignadas a este IQN (configura el mapeo de LUN en el target).",
"chapTitle": "Autenticación CHAP",
"chapBody": "ProxMenux no expone los campos de usuario / contraseña CHAP en el flujo interactivo. Si tu target requiere CHAP, registra con ProxMenux primero (el descubrimiento con CHAP puede fallar, pero <code>pvesm add</code> escribirá la entrada igualmente), luego añade credenciales manualmente: <code>pvesm set &lt;id&gt; --username &lt;chap-user&gt;</code> y edita <code>/etc/iscsi/iscsid.conf</code> con la contraseña, después <code>systemctl restart iscsid</code>. Es una carencia del script actual — documentada aquí para que sepas qué hacer."
"chapBody": "ProxMenux no ofrece campos de usuario y contraseña CHAP en el flujo interactivo. Si falla el descubrimiento, el script se detiene antes de <code>pvesm add</code>; no registra el almacenamiento de todos modos. Configura por separado los requisitos CHAP del destino en <code>open-iscsi</code>, incluida la autenticación del descubrimiento si hace falta, y vuelve a intentarlo. Usa <code>iscsiadm</code> para comprobar la configuración y verifica las sesiones activas con <code>iscsiadm --mode session</code>."
},
"related": {
"heading": "Relacionado",
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Host: añadir disco local como almacenamiento de Proxmox | ProxMenux Documentation",
"title": "Host: añadir disco local como almacenamiento de Proxmox | Documentación de ProxMenux",
"description": "Formatea un disco local SATA / SAS / NVMe en un host Proxmox y regístralo como almacenamiento Proxmox directory o ZFS pool. Detección segura de discos, gate de confirmación para operaciones destructivas, fstab basado en UUID, creación de ZFS pool y pvesm add dir / zfspool por dentro.",
"ogTitle": "Host: añadir disco local como almacenamiento de Proxmox | ProxMenux Documentation",
"ogTitle": "Host: añadir disco local como almacenamiento de Proxmox | Documentación de ProxMenux",
"ogDescription": "Formatea un disco local y regístralo como almacenamiento Proxmox directory o ZFS pool con un flujo guiado y filtrado por seguridad."
},
"header": {
@@ -16,11 +16,11 @@
},
"destructive": {
"title": "Herramienta destructiva para la ruta 'format'",
"body": "La ruta <em>Format</em> <strong>borra cada partición y byte del disco seleccionado</strong>. ProxMenux muestra la lista de discos con un banner de advertencia, filtra los discos ya en uso y exige una confirmación explícita antes de ejecutar cualquier <code>wipefs</code> / <code>sgdisk</code> / <code>mkfs</code>. Aun así — lee la ruta del dispositivo en voz alta dos veces antes de escribir \"yes\"."
"body": "La opción <em>Formatear</em> <strong>destruye las particiones y los datos existentes en el disco seleccionado</strong>. ProxMenux muestra una advertencia, filtra los discos en uso y exige confirmación antes de ejecutar <code>wipefs</code> / <code>sgdisk</code> / <code>mkfs</code>. No es una sobrescritura segura de cada byte. Comprueba dos veces la ruta del dispositivo antes de confirmar."
},
"compare": {
"heading": "Directory vs ZFS pool — cuál elegir",
"headerDir": "Directory (ext4 / xfs / btrfs)",
"headerDir": "Directorio (ext4 / xfs / btrfs)",
"headerZfs": "ZFS pool",
"rows": [
{
@@ -34,12 +34,12 @@
"zfs": "Dataset ZFS nativo (zvol) por disco"
},
{
"label": "Snapshots",
"label": "Instantáneas",
"dir": "Snapshots qcow2; snapshots btrfs si fs=btrfs",
"zfs": "Nativos, instantáneos, copy-on-write"
},
{
"label": "Thin provisioning",
"label": "Aprovisionamiento fino",
"dir": "Sí (qcow2 por defecto)",
"zfs": "Sí (ZFS por defecto)"
},
@@ -51,7 +51,7 @@
{
"label": "Content types soportados",
"dir": "images, backup, iso, vztmpl, snippets, rootdir",
"zfs": "images, rootdir solamente (almacenamiento de bloque)"
"zfs": "solo images y rootdir (almacenamiento de bloques)"
},
{
"label": "Mejor para",
@@ -63,7 +63,7 @@
"opening": {
"heading": "Abrir la herramienta",
"body": "Desde el menú principal de ProxMenux, abre <strong>Storage &amp; Share Manager → Add Local Disk as Proxmox Storage</strong>. Verás este submenú con cuatro opciones:",
"imageAlt": "Menú Local Disk Manager — Add / View / Remove / List available disks"
"imageAlt": "Menú de discos locales — Añadir / Ver / Eliminar / Listar discos disponibles"
},
"howRuns": {
"heading": "Cómo se ejecuta el script (flujo Add)",
@@ -78,7 +78,7 @@
"Elige el sistema de archivos — mira la tabla de arriba para las contrapartidas.",
"Storage ID (por defecto <code>disk-&lt;device&gt;</code>), ruta de montaje, preset de content type.",
"Confirma en el diálogo <strong>FINAL CONFIRMATION — DATA WILL BE ERASED</strong>.",
"ProxMenux limpia la tabla de particiones, crea una partición que abarca el disco entero, ejecuta <code>mkfs.&lt;fs&gt;</code> (o <code>zpool create</code>), la monta, la añade a <code>/etc/fstab</code> por UUID con <code>defaults,nofail</code> y la registra en Proxmox vía <code>pvesm add dir</code> o <code>pvesm add zfspool</code>."
"ProxMenux limpia la tabla de particiones y crea una partición que abarca el disco. Ejecuta <code>mkfs.&lt;fs&gt;</code> o <code>zpool create</code> y monta el resultado. Los sistemas de archivos normales reciben una entrada en <code>/etc/fstab</code> por UUID con <code>defaults,nofail</code>; ZFS usa la configuración de montaje del pool. Si <em>Como almacenamiento Proxmox</em> está marcado (siempre en ZFS), se registra con <code>pvesm add dir</code> o <code>pvesm add zfspool</code>; si no, queda solo como montaje del host."
],
"tipTitle": "Por qué UUID + nofail en /etc/fstab",
"tipBody": "El script escribe <code>UUID=… /mnt/&lt;id&gt; &lt;fs&gt; defaults,nofail 0 2</code>. El UUID sobrevive a reordenaciones de dispositivos entre reinicios (así que <code>/dev/sdc</code> pasando a ser <code>/dev/sdd</code> no rompe el arranque). <code>nofail</code> significa que si el disco desaparece alguna vez (fallo de hardware, desconectado), Proxmox arranca igualmente — el almacenamiento simplemente se mostrará como inactive hasta que el disco vuelva."
@@ -96,35 +96,35 @@
"warnBody": "Si el disco ya contiene un pool ZFS, la ruta de <em>reuse</em> aquí simplemente intenta montarlo como un sistema de archivos normal — y falla. Para importar un pool ZFS existente usa <code>zpool import &lt;name&gt;</code> en línea de comandos y después regístralo manualmente con <code>pvesm add zfspool</code>."
},
"presets": {
"heading": "Presets de content type",
"intro": "En vez de una larga lista de verificación, ProxMenux ofrece 4 presets más una opción custom. La cadena del preset se pasa a <code>pvesm add … --content &lt;csv&gt;</code>:",
"headerPreset": "Preset",
"heading": "Preajustes de tipos de contenido",
"intro": "ProxMenux ofrece tres preajustes y una opción personalizada. La cadena de contenido elegida se pasa a <code>pvesm add … --content &lt;csv&gt;</code>:",
"headerPreset": "Preajuste",
"headerContent": "Cadena de contenido",
"headerUse": "Caso de uso",
"rows": [
{
"preset": "VM Storage",
"preset": "Almacenamiento VM",
"content": "images,backup",
"use": "Un almacén de discos de VM dedicado que también guarda backups de esas VMs cerca."
},
{
"preset": "Standard NAS",
"preset": "NAS estándar",
"content": "backup,iso,vztmpl",
"use": "Un disco de archivo / media — backups, ISOs y templates LXC. Sin discos de VM en vivo aquí."
},
{
"preset": "All types",
"preset": "Todos los tipos",
"content": "images,backup,iso,vztmpl,snippets",
"use": "\"Que decida el host\" — permite todos los content types que Proxmox soporta en este almacenamiento."
"use": "Este preajuste amplio habilita imágenes, backups, ISO, plantillas LXC y snippets. Si necesitas otros tipos compatibles, como rootdir, añádelos mediante Personalizado."
},
{
"preset": "Custom",
"preset": "Personalizado",
"content": "(entrada libre)",
"useRich": "Escribe el CSV exacto tú mismo, p. ej. <code>images</code> solo, o <code>rootdir,images</code>."
}
],
"zfsTitle": "El contenido del ZFS pool es más limitado",
"zfsBody": "Si elegiste <strong>zfs</strong> como sistema de archivos, Proxmox solo acepta <code>images</code> y <code>rootdir</code> como content types en un <code>zfspool</code> (es almacenamiento de bloque, no un sistema de archivos para ISOs). Los presets de arriba siguen funcionando pero Proxmox descarta silenciosamente los content types que no puede usar — comprueba <code>pvesm status</code> después."
"zfsBody": "Si elegiste <strong>zfs</strong>, un <code>zfspool</code> solo admite <code>images</code> y <code>rootdir</code>, no archivos ISO ni backups. Usa Personalizado para introducir una lista compatible. El script la pasa sin modificar; los tipos no compatibles pueden hacer fallar el registro. Comprueba <code>pvesm status</code> después."
},
"manual": {
"heading": "Equivalente manual",
@@ -147,7 +147,7 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
"noDisksTitle": "\"No available disks found\"",
"noDisksTitle": "\"No se encontraron discos disponibles\"",
"noDisksIntro": "El filtro de seguridad ocultó cada disco. Razones comunes:",
"noDisksItems": [
"Solo está presente el disco raíz.",
@@ -168,7 +168,7 @@
"items": [
{
"href": "/docs/disk-manager/format-disk",
"label": "Disk Manager: Format / Wipe Physical Disk",
"label": "Gestor de discos: Formatear / Borrar disco físico",
"tail": " — alternativa de bajo nivel cuando solo quieres preparar un disco sin registrarlo como almacenamiento de Proxmox."
},
{
@@ -36,9 +36,9 @@
"headerWhy": "Por qué importa aquí",
"rows": [
{
"bit": "1 (sticky)",
"effect": "Solo el propietario del archivo puede borrar / renombrar un archivo.",
"why": "Evita que el CT-A borre archivos creados por el CT-B en el mismo directorio."
"bit": "1 (sticky bit)",
"effect": "Solo pueden borrar o renombrar un archivo su propietario, el propietario del directorio o un proceso con privilegios suficientes.",
"why": "Ayuda a impedir que usuarios con UID mapeados diferentes borren archivos ajenos. No aísla CT que comparten un UID mapeado o acceso root privilegiado."
},
{
"bit": "777 (rwx-rwx-rwx)",
@@ -46,9 +46,9 @@
"why": "Los UIDs de CT unprivileged (100000+) aparecen como \"others\" desde el host, así que world-rwx les da acceso."
},
{
"bit": "ACLs (default)",
"bit": "ACL (predeterminadas)",
"effect": "Heredado en cada archivo / subdir recién creado.",
"why": "Los permisos se aplican para siempre — el contenido nuevo conserva el perfil abierto sin reejecutar el script."
"why": "El contenido nuevo hereda las ACL predeterminadas sin volver a ejecutar el script. Las aplicaciones pueden solicitar modos restrictivos o cambiar los permisos después."
}
],
"privTitle": "Los CTs privileged ven lo mismo, solo que sin el desplazamiento",
@@ -90,7 +90,7 @@
"items": [
{
"href": "/docs/storage-share/lxc-mount-points",
"label": "LXC Mount Manager",
"label": "Gestor de montajes LXC",
"tail": " — el siguiente paso natural: hacer bind mount de este directorio en uno o más contenedores."
},
{
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Host: montar share NFS en el host | ProxMenux Documentation",
"title": "Host: montar recurso NFS en el host | Documentación de ProxMenux",
"description": "Monta un export NFS externo en el host Proxmox — bien como almacenamiento de Proxmox (pvesm add nfs), bien como un montaje fstab del host normal (NO visible en Datacenter > Storage), o ambos. El método fstab es ideal para hacer bind mount del share en contenedores LXC sin exponerlo como almacenamiento de Proxmox.",
"ogTitle": "Host: montar share NFS en el host | ProxMenux Documentation",
"ogTitle": "Host: montar recurso NFS en el host | Documentación de ProxMenux",
"ogDescription": "Monta un export NFS externo en el host Proxmox vía pvesm, fstab o ambos. La ruta fstab es ideal para bind mounts LXC."
},
"header": {
@@ -17,7 +17,7 @@
"opening": {
"heading": "Abrir la herramienta",
"body": "Desde el menú principal de ProxMenux, abre <strong>Storage &amp; Share Manager → Mount NFS Share on Host</strong>. Verás este submenú con cuatro opciones:",
"imageAlt": "Menú NFS Host Manager — Mount / View / Remove / Test connectivity"
"imageAlt": "Menú NFS del host — Montar / Ver / Eliminar / Probar conectividad"
},
"howRuns": {
"heading": "Cómo se ejecuta el script",
@@ -46,13 +46,13 @@
},
{
"method": "<strong>Ambos</strong>",
"mount": "Ambas rutas de arriba (dos conexiones NFS independientes al servidor)",
"mount": "Ambas rutas anteriores (dos puntos de montaje del mismo export NFS)",
"ui": "Sí",
"useCase": "Quieres integración con la UI Y una ruta estable del lado del host con permisos abiertos para bind mounts LXC. El servidor ve dos conexiones desde el host."
"useCase": "Integración con la interfaz y una ruta estable separada en el host con permisos abiertos para bind mounts LXC."
}
],
"bothTitle": "\"Ambos\" crea dos montajes NFS independientes",
"bothBody": "Marcar ambas opciones ejecuta cada método independientemente — pvesm monta en <code>/mnt/pve/&lt;id&gt;</code>, fstab monta en <code>/mnt/&lt;path&gt;</code>. El servidor ve dos conexiones TCP desde el host Proxmox. Esto es intencional: te permite mantener el almacenamiento pvesm limpio (opciones por defecto de Proxmox) mientras tienes un montaje separado del lado del host con permisos abiertos para bind mounts LXC."
"bothBody": "Los dos métodos se ejecutan por separado: pvesm monta en <code>/mnt/pve/&lt;id&gt;</code> y fstab en <code>/mnt/&lt;path&gt;</code>. Así tienes un montaje gestionado por Proxmox con opciones predeterminadas y otro en el host para bind mounts LXC. Dos puntos de montaje no garantizan dos conexiones TCP: el cliente NFS puede reutilizarlas."
},
"pvesmBranch": {
"heading": "Método A — Como almacenamiento de Proxmox (pvesm)",
@@ -61,7 +61,7 @@
"<strong>Storage ID</strong> — cómo llamará Proxmox a este almacenamiento. Por defecto es <code>nfs-&lt;server-ip-with-dashes&gt;</code>. Solo se aceptan letras, dígitos, <code>-</code> y <code>_</code>.",
"<strong>Content types</strong> — Proxmox vincula categorías de contenido a volúmenes de almacenamiento; elige qué se le permite a este NFS contener:"
],
"headerType": "Content type",
"headerType": "Tipo de contenido",
"headerAllows": "Qué permite",
"rows": [
{
@@ -94,7 +94,7 @@
}
],
"warnTitle": "images y rootdir en NFS",
"warnBody": "Marcar <code>images</code> en un almacenamiento NFS deja a Proxmox colocar discos de VM en vivo ahí. Funciona, pero la latencia de NFS + su semántica de locks lo hacen notablemente más lento que el almacenamiento local (y un corte de red pausa cada VM respaldada por ese almacén). Marcar <code>rootdir</code> significa que alojarás sistemas de archivos raíz de LXC sobre NFS, lo que históricamente da problemas con contenedores unprivileged (interacciones overlay / chown). Es preferible mantener <code>images</code> / <code>rootdir</code> en almacenamiento local o iSCSI y usar NFS para <code>backup</code> / <code>iso</code> / <code>vztmpl</code>.",
"warnBody": "Seleccionar <code>images</code> permite guardar discos de VM en NFS. El rendimiento depende de la red, el servidor y la carga; una caída puede bloquear la E/S que dependa del montaje. Seleccionar <code>rootdir</code> guarda sistemas de archivos raíz LXC en NFS, donde los contenedores sin privilegios pueden encontrar limitaciones de mapeo de UID, overlay y propiedad. Evalúa estos requisitos antes de colocar <code>images</code> / <code>rootdir</code> ahí; NFS también sirve para <code>backup</code> / <code>iso</code> / <code>vztmpl</code>.",
"result": "El resultado es <code>pvesm add nfs &lt;id&gt; --server &lt;srv&gt; --export &lt;path&gt; --content &lt;csv&gt;</code> y Proxmox automonta en <code>/mnt/pve/&lt;id&gt;</code>."
},
"fstabBranch": {
@@ -102,7 +102,7 @@
"intro": "Si <em>Solo como montaje fstab del host</em> está marcado, ProxMenux pide una ruta de montaje del host y opciones persistentes, luego monta y escribe la entrada en <code>/etc/fstab</code>:",
"items": [
"<strong>Ruta de montaje del host</strong> — por defecto <code>/mnt/&lt;export-basename&gt;</code>. Debe ser una ruta absoluta. Si algo ya está montado ahí, o existe una entrada fstab para la misma ruta, ProxMenux te avisa y ofrece reemplazarla.",
"<strong>Mount options</strong> — elige <em>Read/Write</em> (por defecto con <code>rw,hard,nofail,_netdev,rsize=131072,wsize=131072,timeo=600,retrans=2</code>), <em>Read-only</em>, o <em>Custom</em> (escribe tu propia cadena de opciones)."
"<strong>Opciones de montaje</strong> — <em>Lectura/escritura</em> (predeterminado: <code>rw,hard,nofail,_netdev,rsize=131072,wsize=131072,timeo=600,retrans=2</code>), <em>Solo lectura</em>, <em>Personalizado</em> (escribe tus propias opciones)."
],
"appliesIntro": "Una vez confirmes, el script:",
"applies": [
@@ -113,7 +113,7 @@
"Intenta <code>chmod 1777</code> + <code>setfacl o::rwx</code> en el punto de montaje (best-effort silencioso — solo tiene éxito si el servidor NFS lo permite; muchos exports NAS ya sirven rutas world-writable)."
],
"lxcTitle": "Usar el montaje fstab desde un LXC",
"lxcBody": "El script imprime el comando <code>pct set</code> exacto al final para hacer bind mount de la ruta en un contenedor, p. ej. <code>pct set &lt;ctid&gt; -mp0 /mnt/&lt;path&gt;,mp=/mnt/&lt;ct-path&gt;,shared=1,backup=0</code>. O usa el <mountLink>LXC Mount Manager</mountLink>, que detecta el montaje fstab automáticamente. <strong>No se hacen cambios dentro del contenedor</strong> — para que los LXCs unprivileged lean/escriban los datos NFS, el script depende de la semántica world-writable del export del lado del servidor (típica en defaults de Synology, TrueNAS, OMV). Si tu servidor NFS aplica squash a root o restringe permisos, mira Solución de problemas.",
"lxcBody": "El script muestra un comando <code>pct set</code> para un bind mount, p. ej. <code>pct set &lt;ctid&gt; -mp0 /mnt/&lt;path&gt;,mp=/mnt/&lt;ct-path&gt;,shared=1,backup=0</code>. También puedes usar <mountLink>LXC Mount Manager</mountLink>, que detecta los montajes fstab. <strong>No se cambia nada dentro del contenedor</strong>. El acceso desde un CT sin privilegios depende de los permisos del servidor para sus UID/GID mapeados. El script solo intenta ajustar permisos desde el host; no garantiza exports escribibles ni ajustes predeterminados de fabricantes. Si falla, consulta Solución de problemas.",
"noUiTitle": "El montaje fstab NO es un almacenamiento de Proxmox",
"noUiBody": "El montaje fstab del host es invisible para la UI web de Proxmox — por diseño. No aparece en <em>Datacenter > Storage</em>, no puedes seleccionarlo en el creador de VM / CT, y los trabajos de backup de Proxmox no pueden apuntarlo. Es puramente una ruta del sistema de archivos del host. Si quieres también integración con la UI, marca <em>ambos</em> métodos en el selector."
},
@@ -138,16 +138,16 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
"noServersTitle": "\"No NFS servers found on the network\"",
"noServersTitle": "\"No se encontraron servidores NFS en la red\"",
"noServersBody": "El auto-descubrimiento usa <code>nmap -p 2049 --open &lt;subnet&gt;/24</code>. El servidor puede no responder si: está en una VLAN / subnet diferente, su firewall bloquea las sondas nmap (muchos lo hacen) o el puerto 2049 está intencionalmente cerrado en esa interfaz. Usa la opción <em>Manual</em> con la IP o hostname del servidor en su lugar.",
"portTitle": "\"NFS port (2049) is not accessible\"",
"portTitle": "«No se puede acceder al puerto NFS (2049)»",
"portBody": "El ping tuvo éxito pero <code>nc -z -w 3 &lt;server&gt; 2049</code> falló. Comprueba que el servicio NFS está corriendo en el servidor (<code>systemctl status nfs-server</code> en Linux, Panel de Control → File Services en Synology, plugin NFS en OMV / TrueNAS) y que el firewall permite el 2049 desde el host Proxmox.",
"showmountTitle": "\"Failed to connect\" desde showmount",
"showmountBody": "El servidor rechazó la consulta de la lista de exports. Causas comunes: el servidor aplica ACLs de cliente estrictas (tu IP de Proxmox no está en la lista permitida), <code>rpcbind</code> no está corriendo en el servidor o el servidor expone solo NFSv4 con <code>showmount</code> deshabilitado. La ruta del export se puede añadir manualmente igualmente si la conoces.",
"inactiveTitle": "El almacenamiento aparece como inactive en la UI de Proxmox",
"inactiveBody": "Ejecuta <em>Test NFS Connectivity</em> primero — el 99 % de las veces esto marca el salto exacto que se rompe (DNS, puerto, permisos de montaje). Si la conectividad va bien pero Proxmox sigue marcando inactive, comprueba <code>journalctl -u pvestatd</code> en el nodo Proxmox; DNS intermitente o montajes NFS lentos al arrancar pueden dejar almacenamientos en estado inactive hasta que <code>pvesm set &lt;id&gt; --disable 0</code> se reaplica.",
"inactiveBody": "Ejecuta primero <em>Probar la conectividad NFS</em>: comprueba que el servidor responde al ping, que el puerto 2049 está abierto y que la lista de exports (<code>showmount -e</code>) está disponible. Si la conectividad funciona pero sigue inactivo, consulta <code>journalctl -u pvestatd</code> y la configuración del servidor/export. Corrige primero la conectividad o los permisos. <code>pvesm set &lt;id&gt; --disable 0</code> habilita un almacenamiento deshabilitado; no repara fallos NFS en general.",
"lxcNoWriteTitle": "El montaje fstab funciona pero un LXC unprivileged no puede escribir por un bind mount",
"lxcNoWriteBody": "Los permisos NFS se aplican del lado del servidor, no del host. Las opciones fstab (<code>uid=</code>, <code>file_mode=</code>) que funcionan para CIFS <strong>no</strong> se aplican a NFS. Si tu LXC unprivileged (root dentro del CT = UID 100000 en el host, mapeado a NFS como \"others\") no puede escribir, el servidor NFS o bien aplica squash a root o bien tiene permisos restrictivos. Arregla en el servidor: cambia el export a <code>no_root_squash</code> si confías en el host, o pon el export world-writable (Synology, TrueNAS, OMV exponen esto en su UI). El script intenta <code>chmod 1777</code> en el montaje pero eso solo tiene éxito cuando el servidor lo permite.",
"lxcNoWriteBody": "El acceso NFS depende de propiedad, ACL y squash en el servidor. Las opciones CIFS como <code>uid=</code> y <code>file_mode=</code> <strong>no</strong> se aplican a NFS. Con el mapeo LXC predeterminado, root del CT se convierte en UID 100000 del host, no en UID remoto 0. Da acceso al UID/GID mapeado real o a la identidad anónima del servidor. <code>no_root_squash</code> solo afecta al UID remoto 0, por lo que no resuelve todos los casos de UID 100000. El script intenta <code>chmod 1777</code>, pero no anula permisos del servidor.",
"fstabBootTitle": "El montaje fstab no se levanta tras el reinicio",
"fstabBootBody": "El script añade <code>nofail,_netdev</code> para que un share que falte al arranque no bloquee el inicio. Si el montaje nunca se levanta: confirma que la red es alcanzable (<code>ping &lt;server&gt;</code>), comprueba <code>journalctl -u remote-fs.target</code> y verifica que la entrada es válida con <code>mount -fav | grep nfs</code>. <code>mount -a</code> después del arranque monta todo lo que falte actualmente."
},
@@ -161,7 +161,7 @@
},
{
"href": "/docs/storage-share/lxc-mount-points",
"label": "LXC Mount Manager",
"label": "Gestor de montajes LXC",
"tailRich": " — hacer bind mount de la ruta solo en fstab <code>/mnt/&lt;path&gt;</code> en uno o más contenedores."
},
{
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Host: montar share Samba en el host | ProxMenux Documentation",
"title": "Host: montar recurso Samba en el host | Documentación de ProxMenux",
"description": "Monta un share Samba / CIFS externo en el host Proxmox — bien como almacenamiento de Proxmox (pvesm add cifs), bien como un montaje fstab del host normal con uid/gid/file_mode abiertos (NO visible en Datacenter > Storage), o ambos. El método fstab abre los permisos para que un LXC unprivileged que haga bind mount de la ruta pueda leer/escribir sin cambios dentro del contenedor.",
"ogTitle": "Host: montar share Samba en el host | ProxMenux Documentation",
"ogTitle": "Host: montar recurso Samba en el host | Documentación de ProxMenux",
"ogDescription": "Monta un share Samba / CIFS externo en el host Proxmox vía pvesm, fstab con permisos abiertos (ideal para bind mounts LXC), o ambos."
},
"header": {
@@ -12,12 +12,12 @@
},
"intro": {
"title": "Qué hace",
"body": "ProxMenux ofrece dos métodos de montaje para cualquier share Samba: <strong>(1) Almacenamiento de Proxmox</strong> vía <code>pvesm add cifs</code> — visible en Datacenter > Storage, montado en <code>/mnt/pve/&lt;id&gt;</code>, credenciales guardadas cifradas en <code>/etc/pve/priv/storage/&lt;id&gt;.pw</code>; <strong>(2) Montaje fstab del host</strong> en una ruta que tú elijas — persistente vía <code>/etc/fstab</code>, montado con <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> para que los bind mounts LXC unprivileged puedan escribir, credenciales guardadas en un archivo solo para root en <code>/etc/samba/credentials/</code> (la contraseña nunca aparece en <code>fstab</code>). Puedes ejecutar un método, el otro o ambos."
"body": "ProxMenux ofrece dos métodos para montar un recurso Samba: <strong>(1) Almacenamiento de Proxmox</strong> mediante <code>pvesm add cifs</code>, visible en Datacenter > Storage y montado en <code>/mnt/pve/&lt;id&gt;</code>. La contraseña se guarda en texto claro en <code>/etc/pve/priv/storage/&lt;id&gt;.pw</code>, protegida por el directorio privado accesible solo por root: es control de acceso, no cifrado. <strong>(2) Montaje fstab del host</strong> en una ruta elegida, persistente mediante <code>/etc/fstab</code> y montada con <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> para permitir la escritura desde bind mounts de LXC sin privilegios. Sus credenciales se guardan en un archivo accesible solo por root dentro de <code>/etc/samba/credentials/</code>, nunca directamente en <code>fstab</code>. Puedes utilizar cualquiera de los métodos o ambos."
},
"opening": {
"heading": "Abrir la herramienta",
"body": "Desde el menú principal de ProxMenux, abre <strong>Storage &amp; Share Manager → Mount Samba Share on Host</strong>. Verás este submenú con cuatro opciones:",
"imageAlt": "Menú Samba Host Manager — Mount / View / Remove / Test connectivity"
"imageAlt": "Menú Samba del host — Montar / Ver / Eliminar / Probar conectividad"
},
"howRuns": {
"heading": "Cómo se ejecuta el script",
@@ -41,26 +41,26 @@
"method": "<strong>Solo fstab del host</strong>",
"mountRich": "<code>/mnt/&lt;path&gt;</code> con uid/gid/file_mode abiertos",
"ui": "No",
"useCaseRich": "Hacer bind mount del share en uno o más LXCs <em>sin</em> exponerlo como almacenamiento de Proxmox. Los permisos abiertos garantizan que los CTs unprivileged puedan escribir a través del bind mount."
"useCaseRich": "Haz bind mount del recurso en uno o más LXC <em>sin</em> registrarlo como almacenamiento Proxmox. Los permisos locales abiertos facilitan el acceso desde CT sin privilegios, pero escribir sigue requiriendo permiso del servidor SMB para el usuario autenticado."
},
{
"method": "<strong>Ambos</strong>",
"mount": "Ambas rutas de arriba (dos conexiones CIFS independientes al servidor)",
"mount": "Ambas rutas anteriores (dos puntos de montaje del mismo export CIFS)",
"ui": "Sí",
"useCase": "Quieres integración con la UI Y una ruta estable del lado del host con permisos abiertos para bind mounts LXC. El montaje pvesm usa los valores por defecto de Proxmox; el montaje fstab aplica el uid/gid/file_mode abierto por separado."
}
],
"bothTitle": "\"Ambos\" crea dos conexiones CIFS independientes",
"bothBody": "pvesm y fstab montan el mismo share dos veces con opciones distintas. El montaje pvesm en <code>/mnt/pve/&lt;id&gt;</code> usa los valores por defecto de Proxmox (sin uid/gid abiertos) — la UI de Proxmox está contenta. El montaje fstab en <code>/mnt/&lt;path&gt;</code> usa <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> — los bind mounts LXC unprivileged a él pueden escribir. Dos conexiones TCP al servidor SMB desde el mismo host Proxmox."
"bothTitle": "«Ambos» crea dos puntos de montaje CIFS",
"bothBody": "pvesm monta en <code>/mnt/pve/&lt;id&gt;</code> con las opciones de Proxmox. fstab monta en <code>/mnt/&lt;path&gt;</code> con <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> para permitir acceso local mediante bind mounts LXC. El servidor SMB sigue aplicando los permisos del usuario del montaje. Son dos puntos de montaje; no garantizan dos conexiones TCP separadas."
},
"pvesmBranch": {
"heading": "Método A — Como almacenamiento de Proxmox (pvesm)",
"intro": "Si <em>Como almacenamiento de Proxmox</em> está marcado, ProxMenux ejecuta el flujo pvesm original:",
"items": [
"<strong>Storage ID</strong> — por defecto <code>cifs-&lt;server-ip-with-dashes&gt;</code>. Solo letras, dígitos, <code>-</code> y <code>_</code>.",
"<strong>Content types</strong> — CIFS expone <strong>6</strong> opciones (las mismas que NFS menos <code>rootdir</code>, que Proxmox no permite en CIFS porque la semántica de locking no puede sostener un rootfs LXC en vivo):"
"<strong>Tipos de contenido</strong> — este selector de ProxMenux ofrece <strong>6</strong> opciones. Omite <code>rootdir</code> respecto al selector NFS; es una decisión del script, no significa que todas las versiones del backend CIFS de Proxmox prohíban sistemas de archivos raíz LXC:"
],
"headerType": "Content type",
"headerType": "Tipo de contenido",
"headerAllows": "Qué permite",
"rows": [
{
@@ -89,16 +89,16 @@
}
],
"warnTitle": "Discos de VM en vivo en CIFS",
"warnBody": "Si marcas <code>images</code>, ProxMenux saca un aviso antes de continuar. CIFS usa un modelo de locking advisory que interactúa mal con las operaciones de disco de KVM (snapshots, migración en vivo, I/O bajo contención). Un almacén de backups o ISOs en CIFS es perfectamente correcto; un almacén de discos en vivo es buscarse problemas. Usa NFS (o almacenamiento local) para <code>images</code> cuando puedas.",
"warnBody": "Seleccionar <code>images</code> muestra un aviso: CIFS/SMB puede causar problemas de bloqueo en operaciones con discos de VM. El script recomienda NFS para imágenes de VM, pero permite continuar. Backups e ISO son usos habituales de CIFS. Evalúa bloqueos, instantáneas, migración y carga antes de usar CIFS para <code>images</code>.",
"credsTitle": "Dónde guarda pvesm las credenciales",
"credsBody": "Cuando usas autenticación de usuario, la contraseña NO se escribe en <code>/etc/pve/storage.cfg</code>. Proxmox la guarda en <code>/etc/pve/priv/storage/&lt;storage-id&gt;.pw</code> — modo <code>0600</code>, propietario <code>root</code>, miembro del cluster sync. Si más adelante cambias la contraseña en el servidor Samba, usa <code>pvesm set &lt;id&gt; --password &lt;new&gt;</code> o elimina y vuelve a añadir a través de ProxMenux."
"credsBody": "La contraseña no se escribe en <code>/etc/pve/storage.cfg</code>. Proxmox guarda credenciales en texto plano en <code>/etc/pve/priv/storage/&lt;storage-id&gt;.pw</code>, dentro del área privada del sistema de archivos del clúster, que solo puede leer <code>root</code> (modo <code>0600</code>); están protegidas por permisos, no por cifrado. Tras cambiar la contraseña en el servidor, usa <code>pvesm set &lt;id&gt; --password &lt;new&gt;</code> o elimina y vuelve a añadir desde ProxMenux."
},
"fstabBranch": {
"heading": "Método B — Solo montaje fstab del host",
"intro": "Si <em>Solo como montaje fstab del host</em> está marcado, ProxMenux pide una ruta de montaje del host y opciones persistentes, escribe un archivo de credenciales solo para root (modo User), luego monta y escribe la entrada en <code>/etc/fstab</code>:",
"items": [
"<strong>Ruta de montaje del host</strong> — por defecto <code>/mnt/&lt;share-name&gt;</code>. Debe ser una ruta absoluta. Si algo ya está montado ahí, o existe una entrada fstab, ProxMenux ofrece reemplazarla.",
"<strong>Mount options</strong> — elige <em>Read/Write</em> (por defecto con <code>rw,uid=0,gid=0,file_mode=0777,dir_mode=0777,iocharset=utf8,nofail,_netdev</code>), <em>Read-only</em> (variante de solo lectura con <code>file_mode=0555,dir_mode=0555</code>), o <em>Custom</em> (escribe tu propia cadena de opciones). El uid/gid/file_mode abiertos siempre se recomiendan para escrituras a través de bind mount LXC."
"<strong>Opciones de montaje</strong> — <em>Lectura/escritura</em> (predeterminado: <code>rw,uid=0,gid=0,file_mode=0777,dir_mode=0777,iocharset=utf8,nofail,_netdev</code>), <em>Solo lectura</em> (<code>file_mode=0555,dir_mode=0555</code>), <em>Personalizado</em> (escribe tus opciones). El script recomienda uid/gid/file_mode abiertos para escrituras mediante bind mounts LXC."
],
"credsTitle": "Archivo de credenciales (modo User)",
"credsBody": "Si te autenticaste con usuario + contraseña, ProxMenux escribe un archivo de credenciales solo para root en <code>/etc/samba/credentials/&lt;server&gt;_&lt;share&gt;.cred</code> (modo <code>0600</code>) con líneas <code>username=</code> y <code>password=</code>, y lo referencia en la entrada fstab vía la opción de montaje <code>credentials=</code>. El texto en claro nunca aterriza en <code>/etc/fstab</code>. Para el modo Guest, en su lugar se añade la opción <code>guest</code> y no se crea archivo de credenciales.",
@@ -110,9 +110,9 @@
"Ejecuta <code>systemctl daemon-reload</code> para que systemd recoja la nueva entrada fstab."
],
"lxcTitle": "Usar el montaje fstab desde un LXC unprivileged",
"lxcBody": "Como el cliente CIFS aplica <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code>, cada archivo en el montaje pertenece al UID 0 del host con modo 0777. Un LXC unprivileged que haga bind mount de la ruta ve permisos \"others\" en cada entrada (root del CT = UID 100000 del host = others en el sistema de archivos del host), así que las lecturas y escrituras tienen éxito. <strong>No se hacen cambios dentro del contenedor</strong> — sin <code>chown</code> en el CT, sin configuración de grupo, nada modificado en <code>/etc/lxc</code> más allá de la única línea <code>mp</code> de bind mount. El script imprime el comando <code>pct set</code> exacto al final, o usa el <mountLink>LXC Mount Manager</mountLink> para adjuntar la ruta.",
"lxcBody": "Las opciones CIFS <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> abren las comprobaciones locales de permisos para bind mounts LXC. Las ACL del servidor y la semántica Unix/POSIX negociada aún pueden afectar al acceso. <strong>No se cambia nada dentro del contenedor</strong>: ni <code>chown</code> en el CT, ni grupos, ni ediciones de <code>/etc/lxc</code>. La línea <code>mp</code> se gestiona en la configuración Proxmox del CT. Usa el comando <code>pct set</code> mostrado o <mountLink>LXC Mount Manager</mountLink>.",
"noUiTitle": "El montaje fstab NO es un almacenamiento de Proxmox",
"noUiBody": "El montaje fstab del host es invisible para la UI web de Proxmox — por diseño. No aparece en <em>Datacenter > Storage</em>, no puedes seleccionarlo en el creador de VM / CT y los trabajos de backup de Proxmox no pueden apuntarlo. Es puramente una ruta del sistema de archivos del host. Si quieres también integración con la UI, marca <em>ambos</em> métodos en el selector."
"noUiBody": "El montaje fstab del host es invisible para la UI web de Proxmox — por diseño. No aparece en <em>Datacenter > Storage</em>, no puedes seleccionarlo en el creador de VM / CT, y los trabajos de backup de Proxmox no pueden apuntarlo. Es puramente una ruta del sistema de archivos del host. Si quieres también integración con la UI, marca <em>ambos</em> métodos en el selector."
},
"manual": {
"heading": "Equivalente manual",
@@ -121,12 +121,12 @@
"fstabGuestIntro": "Método B (fstab, auth guest) — sin archivo de credenciales:"
},
"view": {
"heading": "Ver almacenamientos CIFS configurados",
"body": "Lista cada entrada CIFS en Proxmox (<code>pvesm status | awk ''$2 == \"cifs\"''</code>) con servidor, share, content types, usuario (o <em>Guest</em>), ruta de montaje y estado en vivo. La contraseña <strong>nunca se imprime</strong>. <strong>Nota:</strong> esta vista solo muestra almacenamientos registrados con pvesm — los montajes solo en fstab no se listan. Compruébalos con <code>findmnt -t cifs</code> o <code>grep cifs /etc/fstab</code>."
"heading": "Ver almacenamientos CIFS y montajes del host",
"body": "Muestra almacenamientos CIFS registrados (<code>pvesm status | awk ''$2 == \"cifs\"''</code>) con servidor, recurso, contenido, usuario o <em>Invitado</em>, ruta y estado. Las contraseñas <strong>nunca se muestran</strong>. <strong>Nota:</strong> otra sección lista montajes fstab del host, sus opciones, ruta del archivo de credenciales y estado activo/inactivo. Para comprobarlo manualmente usa <code>findmnt -t cifs</code> o <code>grep cifs /etc/fstab</code>."
},
"remove": {
"heading": "Eliminar almacenamiento CIFS",
"body": "Ejecuta <code>pvesm remove &lt;storage-id&gt;</code> tras una confirmación que muestra servidor / share / contenido. Solo se elimina el registro del lado de Proxmox — <strong>el servidor Samba remoto no se toca</strong>. Proxmox también borra el archivo de credenciales emparejado. Para eliminar un montaje solo en fstab, edita <code>/etc/fstab</code> a mano, ejecuta <code>umount &lt;path&gt;</code> y elimina el archivo de <code>/etc/samba/credentials/</code>.",
"heading": "Eliminar almacenamiento CIFS o montaje del host",
"body": "El selector ofrece almacenamientos pvesm y montajes fstab del host. Para pvesm ejecuta <code>pvesm remove &lt;storage-id&gt;</code> y Proxmox borra las credenciales asociadas. Para fstab intenta <code>umount &lt;path&gt;</code>, elimina la entrada de <code>/etc/fstab</code> y las credenciales de <code>/etc/samba/credentials/</code>, y elimina el directorio de montaje si está vacío. Si falla el desmontaje, debes hacerlo manualmente o reiniciar. <strong>No modifica el servidor Samba remoto ni sus archivos</strong>.",
"warnTitle": "Haz backup de las dependencias primero",
"warnBody": "Las VMs, CTs o trabajos de backup que referencien este almacenamiento por ID fallarán tras la eliminación. Mueve / elimina esas referencias antes de eliminar el almacenamiento."
},
@@ -136,16 +136,16 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
"noServersTitle": "\"No Samba servers found on the network\"",
"noServersTitle": "\"No se encontraron servidores Samba en la red\"",
"noServersBody": "El auto-descubrimiento usa <code>nmap -p 139,445</code>. El servidor puede estar en una subnet diferente, con firewall o solo alcanzable por hostname (mDNS / WINS). Usa la opción <em>Manual</em> con la IP o hostname en su lugar.",
"noSharesTitle": "\"No accessible shares found\"",
"noSharesTitle": "«No se encontraron recursos compartidos accesibles»",
"noSharesBody": "<code>smbclient -L</code> no devolvió nada para estas credenciales. Causas: el usuario no tiene permiso para listar shares (prueba con credenciales de admin una vez, o escribe el nombre del share manualmente), el servidor tiene la visibilidad de shares deshabilitada o las credenciales son incorrectas. El script te permite escribir el nombre del share a mano en este caso.",
"denyTitle": "El montaje de Proxmox falla con NT_STATUS_ACCESS_DENIED",
"denyBody": "Las credenciales que pvesm guardó están desincronizadas con el servidor Samba (contraseña cambiada, cuenta deshabilitada, mismatch de domain / workgroup). Vuelve a introducir credenciales con <code>pvesm set &lt;id&gt; --username &lt;u&gt; --password &lt;p&gt;</code> o elimina y vuelve a añadir desde ProxMenux. Si el servidor está en un dominio AD, añade <code>--domain &lt;DOMAIN&gt;</code> a la llamada <code>pvesm set</code>.",
"sleepTitle": "\"host is down\" o el estado del almacenamiento pasa a inactive por la noche",
"sleepBody": "Algunos appliances NAS ponen SMB en suspensión agresivamente. <code>pvestatd</code> entonces ve el almacenamiento como inactive hasta que el primer acceso despierta al NAS. Si es cosmético, no hay nada roto. Si causa fallos de backup, deshabilita la desconexión por idle de SMB en el NAS o programa los backups fuera de la ventana de suspensión.",
"lxcNoWriteTitle": "El bind mount LXC unprivileged no puede escribir en la ruta fstab",
"lxcNoWriteBody": "Confirma que el montaje usa las opciones abiertas: <code>findmnt /mnt/&lt;path&gt;</code> debería mostrar <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code>. Si una cadena de opciones Custom omite esas, un LXC unprivileged tendrá permission denied (los UIDs del CT mapean a \"others\" del host, que sin file_mode abierto no tienen bit de escritura). Vuelve a montar con el preset RW por defecto o añade las cuatro opciones de vuelta a tu cadena custom.",
"lxcNoWriteBody": "Comprueba en <code>findmnt /mnt/&lt;path&gt;</code> las opciones previstas, como <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code>. La falta de permisos locales de escritura puede bloquear los UID mapeados de LXC. Reaplica el perfil RW o ajusta las opciones personalizadas. Verifica también que el usuario SMB pueda escribir en el servidor y si las extensiones Unix/POSIX proporcionan sus modos; los modos locales abiertos no anulan las ACL del servidor.",
"fstabBootTitle": "El montaje fstab no se levanta tras el reinicio",
"fstabBootBody": "El script añade <code>nofail,_netdev</code> para que un share que falte al arranque no bloquee el inicio. Si el montaje nunca se levanta: confirma que la red es alcanzable (<code>ping &lt;server&gt;</code>), comprueba <code>journalctl -u remote-fs.target</code>, verifica que el archivo de credenciales sigue existiendo (<code>ls -l /etc/samba/credentials/</code>) y es legible, y prueba <code>mount -a</code> manualmente."
},
@@ -159,7 +159,7 @@
},
{
"href": "/docs/storage-share/lxc-mount-points",
"label": "LXC Mount Manager",
"label": "Gestor de montajes LXC",
"tailRich": " — hacer bind mount de la ruta solo en fstab <code>/mnt/&lt;path&gt;</code> en uno o más contenedores."
},
{
@@ -8,7 +8,7 @@
"twitterDescription": "Añade NFS / Samba / iSCSI como almacenamiento de Proxmox y comparte carpetas entre el host y LXC."
},
"header": {
"title": "Storage & Share Manager",
"title": "Gestor de almacenamiento y recursos compartidos",
"description": "Integra almacenamiento externo o local en Proxmox VE y comparte carpetas entre el host y los contenedores LXC. Tres bloques de herramientas: integración de almacenamiento en el host (registra almacenamiento en el propio Proxmox), el LXC Mount Manager (bind mounts con un manejo pragmático de permisos) y compartición por red en LXC (flujos de cliente y servidor NFS / Samba para casos de uso concretos).",
"section": "Almacenamiento y compartición"
},
@@ -31,7 +31,7 @@
"Disco local → almacenamiento Proxmox directory o ZFS",
"Directorio local compartido (para bind mounts entre CTs)"
],
"lxcMountTitle": "LXC Mount Manager",
"lxcMountTitle": "Gestor de montajes LXC",
"lxcMountBody": "La herramienta principal de compartición LXC. Hace bind mount de directorios del host dentro de los contenedores vía <code>pct set -mpN</code> y gestiona las particularidades de permisos de los CTs unprivileged sin crear ningún grupo o usuario dentro del contenedor.",
"lxcMountItems": [
"Funciona con CTs privileged y unprivileged",
@@ -82,7 +82,7 @@
]
},
"lxcMount": {
"heading": "LXC Mount Manager",
"heading": "Gestor de montajes LXC",
"intro": "La herramienta principal para compartir carpetas entre el host Proxmox y los contenedores LXC. Usa <code>pct set -mpN</code> para hacer bind mount de un directorio del host dentro del contenedor, y gestiona las particularidades de permisos de los CTs unprivileged en el lado del host (no se crea ningún grupo ni usuario dentro del contenedor).",
"card": {
"title": "Puntos de montaje LXC (host ↔ CT)",
@@ -121,7 +121,7 @@
},
"privReq": {
"title": "Requisito de contenedor privileged",
"body": "Los cuatro flujos de <strong>compartición por red en LXC</strong> de arriba requieren un contenedor <strong>privileged</strong> — los módulos de kernel (<code>nfs-kernel-server</code>, <code>smbd</code>, <code>mount.nfs</code>, <code>mount.cifs</code>) necesitan capabilities que los CTs unprivileged no exponen. Si solo necesitas compartir archivos entre el host y un CT unprivileged, usa el <mountLink>LXC Mount Manager</mountLink> en su lugar — hace bind mount desde el host y ajusta los permisos en el lado del host para que el contenedor pueda leer y escribir sin trucos de módulos de kernel."
"body": "Los cuatro flujos de <strong>compartición por red en LXC</strong> anteriores requieren un contenedor <strong>privilegiado</strong>. Los scripts exigen este modo antes de configurar los servicios y herramientas de montaje (<code>nfs-kernel-server</code>, <code>smbd</code>, <code>mount.nfs</code>, <code>mount.cifs</code>). Si solo necesitas compartir archivos entre el host y un CT sin privilegios, usa el <mountLink>LXC Mount Manager</mountLink>: hace bind mount desde el host y ajusta allí los permisos para que el contenedor pueda leer y escribir sin configurar esos servicios o herramientas dentro de él."
},
"unprivExplain": {
"title": "Cómo gestiona ProxMenux los permisos de CT unprivileged",
@@ -1,8 +1,8 @@
{
"meta": {
"title": "Puntos de montaje LXC (host ↔ contenedor) | ProxMenux Documentation",
"title": "Puntos de montaje LXC (host ↔ contenedor) | Documentación de ProxMenux",
"description": "El LXC Mount Manager — bind mount de cualquier directorio del host en uno o más contenedores LXC vía pct set -mpN. Gestiona las particularidades de permisos de los contenedores unprivileged, repara montajes CIFS / NFS existentes en el lado del host y nunca modifica nada dentro del contenedor.",
"ogTitle": "Puntos de montaje LXC (host ↔ contenedor) | ProxMenux Documentation",
"ogTitle": "Puntos de montaje LXC (host ↔ contenedor) | Documentación de ProxMenux",
"ogDescription": "Bind mount de directorios del host en contenedores LXC. Gestiona el mapeo de UIDs unprivileged de forma pragmática, repara el acceso CIFS / NFS en el lado del host."
},
"header": {
@@ -24,7 +24,7 @@
"arrowLabel": "bind mount",
"outro": "La ruta del host a la izquierda y la ruta del contenedor a la derecha pueden ser diferentes — por ejemplo, <code>/mnt/nas-films</code> en el host puede convertirse en <code>/media/films</code> dentro del contenedor. El script añade la entrada a la config del contenedor (<code>/etc/pve/lxc/&lt;ctid&gt;.conf</code>) usando el siguiente índice <code>mpN</code> libre, con dos valores por defecto seguros incorporados:",
"items": [
"<code>shared=1</code> — le dice a Proxmox que los datos son almacenamiento compartido, así que no intenta migrar el disco al migrar el contenedor.",
"<code>shared=1</code> — indica a Proxmox que el montaje usa datos compartidos, por lo que no los migra con el CT. Esta opción no replica datos: la misma ruta y los mismos datos deben estar disponibles en el nodo destino.",
"<code>backup=0</code> — excluye el bind mount de los backups <code>vzdump</code> (los datos viven en el host, los respaldas por separado)."
]
},
@@ -64,12 +64,12 @@
"idmapChangesRich": "Mapeo personalizado de UID/GID en <code>/etc/pve/lxc/&lt;CTID&gt;.conf</code> más entradas correspondientes en <code>/etc/subuid</code> + <code>/etc/subgid</code> en el host. El CT debe reiniciarse en cada cambio.",
"idmapWhenRich": "Necesitas que un UID <em>específico</em> dentro del CT mapee a un UID <em>específico</em> en el host (p. ej. <code>media:1000</code> en el CT debe poseer archivos como <code>media:1000</code> en el host para que NFS no aplique squash). Un setup más rígido, normalmente solo merece la pena para ese escenario exacto.",
"idmapTipTitle": "Cuándo necesitas lxc.idmap de verdad",
"idmapTipBody": "Si el LXC Mount Manager no cubre tu caso — típicamente porque necesitas que los archivos escritos desde dentro del CT aterricen en el host como un UID/GID específico (exports NFS con <code>all_squash</code>, shares Samba con propiedad estricta, compartir un directorio con un usuario del host que tiene el mismo nombre que alguien dentro del CT) — ese es el momento de añadir entradas <code>lxc.idmap</code> a mano. El Mount Manager no te peleará: la línea de bind mount que escribió es independiente de cualquier configuración idmap que añadas después."
"idmapTipBody": "Usa mapeo manual de ID cuando los archivos escritos en el CT deban aparecer en el host con un UID/GID numérico concreto, por ejemplo para compartir propietario con un usuario del host. No anula <code>all_squash</code> de NFS: el servidor sigue decidiendo la identidad anónima y sus permisos. Añade entradas <code>lxc.idmap</code> a mano si hace falta. La línea de bind mount es independiente de esas entradas."
},
"opening": {
"heading": "Abrir la herramienta",
"body": "Desde el menú principal de ProxMenux, abre <strong>Storage &amp; Share Manager → Configure LXC Mount Points (Host ↔ Container)</strong>. Verás este submenú con tres opciones:",
"imageAlt": "Menú LXC Mount Manager — Add / View / Remove"
"imageAlt": "Menú LXC Mount Manager — Añadir / Ver / Eliminar"
},
"addFlow": {
"heading": "Añadir un montaje — flujo completo",
@@ -123,17 +123,17 @@
},
"remove": {
"heading": "Eliminar un punto de montaje",
"body": "Elige el contenedor, elige la entrada <code>mpN</code>, confirma. El script ejecuta <code>pct set --delete mpN</code> para quitar la entrada de la config del CT y ofrece reiniciar el contenedor si está corriendo. El directorio del host y su contenido <strong>no se tocan</strong> — puedes volver a añadir el montaje después (o adjuntar el mismo directorio a un CT distinto).",
"body": "Elige el contenedor, elige la entrada <code>mpN</code>, confirma. El script ejecuta <code>pct set --delete mpN</code> para eliminar la entrada de la config del CT y ofrece reiniciar el contenedor si está corriendo. El directorio del host y su contenido <strong>no se tocan</strong> — puedes volver a añadir el montaje después (o adjuntar el mismo directorio a un CT distinto).",
"warnTitle": "Los contenedores en ejecución necesitan un reinicio para que los cambios surtan efecto",
"warnBody": "Tanto añadir como eliminar puntos de montaje solo se hacen visibles dentro del contenedor tras un reinicio. El script ofrece un <code>pct reboot</code> de un clic al final de cada operación; puedes declinar y reiniciar manualmente después."
},
"troubleshoot": {
"heading": "Solución de problemas",
"noMountTitle": "El montaje aparece en la config del pct pero no dentro del contenedor",
"noMountTitle": "El montaje aparece en pct config, pero no dentro del contenedor",
"noMountBody": "Los bind mounts solo se adjuntan cuando el contenedor arranca. Si añadiste el montaje mientras el CT estaba corriendo, reinícialo (<code>pct reboot &lt;ctid&gt;</code>). Si ya está reiniciado y sigue faltando, comprueba <code>pct config &lt;ctid&gt;</code> para confirmar que la entrada existe y que la ruta del host realmente contiene un directorio.",
"noWriteTitle": "El contenedor puede ver el directorio pero no puede escribir",
"noWriteBody": "Casi siempre un problema de permisos. Para contenedores unprivileged, ejecuta de nuevo el fix de permisos del script — las ACLs del directorio del host pueden haber sido reseteadas por otra herramienta (rsync, restore desde backup, <code>chmod</code> manual). Para CIFS, revisa las opciones de montaje en el host: <code>findmnt /mnt/pve/cifs-…</code>, busca valores <code>uid=</code> / <code>gid=</code> / <code>file_mode=</code>.",
"alreadyTitle": "\"This path is already used as a mount point in this container\"",
"alreadyTitle": "\"Esta ruta ya se utiliza como punto de montaje en este contenedor\"",
"alreadyBody": "Elegiste la misma ruta del contenedor que ya está cableada a un directorio del host distinto. O elige una ruta del contenedor diferente, o elimina el punto de montaje existente primero.",
"nfsTitle": "El acceso NFS sigue bloqueado tras aplicar el fix del host",
"nfsIntro": "Tu servidor NFS está aplicando squash a root o a todas las conexiones. El script puede detectar esto (intenta escribir un archivo de prueba desde el host) y muestra guía del lado del servidor. Dos arreglos comunes del lado del servidor para el export:",
@@ -21,7 +21,7 @@
"diagramServerDetail": "/export/data",
"diagramHostLabel": "Host Proxmox",
"diagramHostDetail": "(solo un\npuente de red)",
"diagramCtLabel": "LXC (privileged)",
"diagramCtLabel": "LXC (con privilegios)",
"diagramCtDetail": "/mnt/data\nmount.nfs dentro del CT",
"diagramArrow": "NFS",
"twoWaysTitle": "Dos formas de dar acceso NFS a un CT — elige una",
@@ -39,7 +39,7 @@
"fstabFlags": {
"heading": "Por qué esos flags de fstab",
"intro": "Para montajes permanentes el script añade tres flags más allá de las opciones NFS estándar: <code>_netdev,x-systemd.automount,noauto</code>. Cada uno resuelve un problema real de boot:",
"headerFlag": "Flag",
"headerFlag": "Bandera",
"headerEffect": "Qué hace",
"rows": [
{
@@ -52,11 +52,11 @@
},
{
"flag": "noauto",
"effect": "Salta el montaje eager al arrancar. Combinado con la unit automount de arriba, el montaje se establece de forma lazy en el primer acceso."
"effect": "Omite el montaje inmediato al arrancar. Con la unidad automount anterior, el montaje se realiza al primer acceso."
}
],
"netEffectTitle": "Efecto neto",
"netEffectBody": "Tu contenedor siempre arranca, incluso si el servidor NFS está offline. La primera vez que algo toca la ruta de montaje, systemd lo monta silenciosamente. Si el servidor sigue caído, ese único acceso falla con <em>resource temporarily unavailable</em> — pero nada más en el CT se ve afectado."
"netEffectBody": "El sistema de archivos NFS se monta en el <em>primer acceso</em>, en lugar de hacerlo inmediatamente al arrancar. Si el servidor no está disponible, ese acceso puede esperar o fallar y afectar a los servicios que dependen de la ruta. Automount reduce la dependencia durante el arranque, pero no garantiza que todos los servicios del CT queden al margen del fallo."
},
"manual": {
"heading": "Equivalente manual",
@@ -80,7 +80,7 @@
"heading": "Solución de problemas",
"privTitle": "Contenedor privileged requerido (el script aborta)",
"privBody": "El CT seleccionado es unprivileged. El cliente NFS del kernel necesita la capability <code>SYS_ADMIN</code> que los CTs unprivileged no exponen. O bien convierte el CT a privileged (la conversión &amp; Disk Manager está documentada en la página <importLink>Import Disk to LXC</importLink>) o usa la ruta alternativa descrita en el aviso al inicio de esta página.",
"aptTitle": "apt-get install nfs-common falla",
"aptTitle": "apt-get install nfs-common fails",
"aptIntro": "El script asume un CT de la familia Debian (<code>apt-get</code>). Si el CT corre Alpine / Arch / Rocky / Alma, el paso de instalación falla silenciosamente. Instala el cliente NFS a mano para esa distro:",
"aptItems": [
"Alpine: <code>apk add nfs-utils</code>",
@@ -27,9 +27,9 @@
"heading": "La convención del grupo \"sharedfiles\"",
"body": "Antes de exportar la carpeta, ProxMenux crea un grupo llamado <code>sharedfiles</code> con <strong>GID 101000</strong> dentro del contenedor, añade cada usuario regular a él, luego pone el directorio del export a <code>root:sharedfiles</code> con modo <code>2775</code>. El <code>2</code> al principio es el bit SGID — cada archivo o carpeta creada dentro hereda automáticamente el grupo <code>sharedfiles</code>.",
"gidTitle": "Por qué GID 101000 específicamente",
"gidBody": "Mapea al GID <strong>1000</strong> del host cuando un contenedor unprivileged lee el mismo archivo (el idmap por defecto de LXC desplaza todo en +100000). En el flujo actual de ProxMenux el propio servidor NFS corre en un CT <strong>privileged</strong> (sin desplazamiento de su lado), pero la convención mantiene el GID numéricamente consistente con CTs cliente unprivileged que puedan montar este share después. Dos CTs privileged usando ambos <code>sharedfiles</code> con GID 101000 pueden leer / escribir los archivos del otro limpiamente porque los números de GID coinciden de principio a fin.",
"remapTitle": "El script también crea usuarios 'remap_*' — son vestigiales aquí",
"remapBody": "Por cada usuario regular en el CT (y para UIDs comunes como 33 = www-data, 1000, 1001, 1002), el script crea un usuario paralelo <code>remap_&lt;uid&gt;</code> con UID = <code>&lt;uid&gt; + 100000</code>, todos miembros de <code>sharedfiles</code>. El desplazamiento <code>+100000</code> imita el idmap unprivileged de LXC, pero como este script impone un CT <strong>privileged</strong> (sin desplazamiento), esos usuarios <code>remap_*</code> son cuentas shadow sin contraparte real en el host. Son restos inofensivos de una intención de diseño más ambiciosa. Si no los ves en <code>getent passwd</code>, no se rompe nada."
"gidBody": "Con el mapa de ID predeterminado de LXC (+100000), el GID 101000 del host aparece como GID <strong>1000</strong> dentro de un CT sin privilegios. Este flujo de servidor usa un CT <strong>con privilegios</strong>, donde no hay desplazamiento. Dos CT con privilegios que usen <code>sharedfiles</code> con GID 101000 comparten el mismo ID numérico de grupo.",
"remapTitle": "La creación heredada de usuarios «remap_*» se omite en CT con privilegios",
"remapBody": "La rama heredada para CT sin privilegios crearía usuarios <code>remap_&lt;uid&gt;</code> con UID <code>&lt;uid&gt; + 100000</code>, todos en <code>sharedfiles</code>, para usuarios normales y UID habituales (33, 1000, 1001, 1002). Este desplazamiento <code>+100000</code> no se aplica a los CT <strong>con privilegios</strong> exigidos por este flujo, por lo que el script omite esa rama. Es normal que no aparezcan cuentas <code>remap_*</code> en <code>getent passwd</code>; no indica un fallo."
},
"defaults": {
"heading": "Opciones de export por defecto — léelo primero",
@@ -39,7 +39,7 @@
"opening": {
"heading": "Abrir la herramienta",
"body": "Desde el menú principal de ProxMenux, abre <strong>Storage &amp; Share Manager → Configure NFS Server in LXC (only privileged)</strong>. ProxMenux te pide primero elegir el CT destino (y lo arranca si está parado); aborta si es unprivileged. Una vez seleccionado el CT ves este submenú con cinco opciones:",
"imageAlt": "Menú NFS Server Manager — Create / View / Delete / Status / Uninstall"
"imageAlt": "Menú del servidor NFS — Crear / Ver / Eliminar / Estado / Desinstalar"
},
"howRuns": {
"heading": "Cómo se ejecuta el script (flujo Create)"
@@ -79,7 +79,7 @@
},
{
"option": "sync",
"effectRich": "Responder a las peticiones de escritura solo después de que los datos estén en disco. Más seguro que <code>async</code> a costa de throughput."
"effectRich": "Responde a las peticiones de escritura solo cuando los datos están en disco. Más seguro que <code>async</code>, a costa del rendimiento."
},
{
"option": "no_subtree_check",
@@ -97,7 +97,7 @@
},
"view": {
"heading": "Ver exports actuales",
"body": "Cat de <code>/etc/exports</code> desde dentro del CT (saltando comentarios / blancos) e imprime cada export con su ACL de red y cadena de opciones. Útil para comprobar qué carpetas están expuestas antes de compartir la IP del CT con alguien."
"body": "Muestra <code>/etc/exports</code> desde dentro del CT, omitiendo comentarios y líneas vacías, y presenta cada export con su ACL de red y opciones. Útil para comprobar qué carpetas están expuestas antes de compartir la IP del CT."
},
"delete": {
"heading": "Eliminar un export",
@@ -115,9 +115,9 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
"privTitle": "Contenedor privileged requerido (el script aborta)",
"privTitle": "Se requiere un contenedor con privilegios (el script se detiene)",
"privBody": "El CT seleccionado es unprivileged. <code>nfs-kernel-server</code> no puede arrancar ahí porque montar <code>/proc/fs/nfsd</code> necesita <code>CAP_SYS_ADMIN</code> en el namespace del kernel del host, y el módulo <code>nfsd</code> tampoco está expuesto al namespace del contenedor (<code>modprobe nfsd</code> desde dentro devuelve <code>FATAL: Module nfsd not found</code>). Si te saltas el gate, verás <code>rpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory)</code> en el journal y ningún puerto NFS llegará a abrirse. Las únicas opciones viables son: convertir el CT a privileged, o mover el servidor NFS a una VM.",
"aptTitle": "apt-get install falla",
"aptTitle": "Falla apt-get install",
"aptIntro": "El script asume un CT de la familia Debian. En Alpine / Arch / Rocky / Alma, instala los paquetes del servidor NFS a mano:",
"aptItems": [
"Alpine: <code>apk add nfs-utils</code>",

Some files were not shown because too many files have changed in this diff Show More