mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-06-14 20:36:59 +00:00
complete i18n migration to /[locale]/ with EN+ES content
Full rewrite of the docs site under app/[locale]/ with next-intl in localePrefix:"always" mode. Every page now exists at both /en/<path> and /es/<path>; the root / shows a meta-refresh + JS redirect to /<defaultLocale>/ so GitHub Pages serves something on the apex URL. Highlights: - 107 doc pages migrated to file-per-page JSON namespaces under messages/en/ and messages/es/. Spanish content is fully translated (no copy-of-English placeholders). - New documentation for the Active Suppressions section in the Settings tab and the per-event Dismiss dropdown in the Health Monitor modal. - New screenshots: dismiss-duration-dropdown.png and an updated health-suppression-settings.png. - Pagefind integrated for client-side search; index is built on every CI deploy (not committed). - RSS feeds: per-locale at /<locale>/rss.xml plus root /rss.xml for backward compat. - Removed the dead app/[locale]/guides/[slug]/ route — every guide now has its own static page and no markdown source remains. - Fixed orphan link /guides/nvidia -> /guides/nvidia-manual in docs/hardware/nvidia-host. - Removed obsolete components (footer2, calendar, drawer). Verified locally with `npm ci && npm run build`: 2804 files in out/, 231 pages indexed by pagefind, root redirect intact, both locale roots and the new Active Suppressions docs render OK.
This commit is contained in:
119
web/messages/es/guides/backup-cloud.json
Normal file
119
web/messages/es/guides/backup-cloud.json
Normal file
@@ -0,0 +1,119 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Backup de Proxmox a almacenamiento en la nube personal | Guías ProxMenux",
|
||||
"description": "Usa rclone para montar una nube personal (Google Drive, Mega, Dropbox, OneDrive, etc.) como un directorio en el host Proxmox VE, regístralo como datastore de vzdump y haz backup de VMs / CTs directamente a la nube — sin scripts adicionales.",
|
||||
"ogTitle": "Backup de Proxmox a almacenamiento en la nube personal",
|
||||
"ogDescription": "Monta una nube personal con rclone en un host Proxmox VE y haz backup de VMs / CTs directamente a ella como datastore de vzdump."
|
||||
},
|
||||
"header": {
|
||||
"title": "Backup de Proxmox a almacenamiento en la nube personal",
|
||||
"description": "Usa rclone para montar una nube personal (Google Drive, Mega, Dropbox, OneDrive, etc.) como un directorio en el host Proxmox VE, regístralo como datastore de vzdump y haz backup de VMs / CTs directamente a la nube — sin scripts adicionales.",
|
||||
"section": "Guías"
|
||||
},
|
||||
"intro": {
|
||||
"pbsCalloutTitle": "Considera primero Proxmox Backup Server",
|
||||
"pbsCalloutBody": "Si tienes una segunda máquina (una Pi, un PC viejo, un NAS), ejecutar <pbsLink>Proxmox Backup Server</pbsLink> en ella te da backups incrementales, deduplicados y cifrados — una opción mucho más adecuada para backup de VMs que una sincronización tipo rsync a la nube. El enfoque de montar la nube de esta guía es para usuarios que específicamente quieren que los backups acaben en su nube personal (Google Drive / Mega / OneDrive / Dropbox).",
|
||||
"stepsTitle": "Qué vas a hacer",
|
||||
"steps": [
|
||||
"Crear un directorio en el host Proxmox y registrarlo como un datastore compatible con vzdump.",
|
||||
"Instalar y configurar rclone para tu proveedor de nube.",
|
||||
"Montar la carpeta de la nube sobre el directorio.",
|
||||
"Hacer que el montaje sobreviva a los reinicios (unit de systemd — más robusto que crontab)."
|
||||
],
|
||||
"vzdumpCalloutTitle": "Aviso sobre los backups vzdump de Proxmox",
|
||||
"vzdumpCalloutBody": "<strong>No son incrementales</strong>. Cada backup contiene la imagen completa del disco de la VM (comprimida). En una nube con cuota limitada, esto se llena rápido. Planea una política de retención desde el primer día (ver el final de la guía)."
|
||||
},
|
||||
"createDir": {
|
||||
"heading": "1. Crear el directorio del host y registrarlo como datastore",
|
||||
"body": "Conéctate por SSH al host (o usa el shell de Proxmox) y crea un directorio como punto de montaje bajo <code>/mnt/</code>. El nombre es arbitrario — usa algo que identifique al proveedor:",
|
||||
"mkdirCode": "mkdir -p /mnt/gdrive",
|
||||
"afterMkdir": "En la UI web de Proxmox: <strong>Datacenter → Storage → Add → Directory</strong>.",
|
||||
"image1Alt": "Añadiendo nuevo almacenamiento en Proxmox",
|
||||
"configIntro": "Configúralo así:",
|
||||
"configItems": [
|
||||
"<strong>ID:</strong> <code>gdrive</code> (o lo que hayas usado como nombre de directorio)",
|
||||
"<strong>Directory:</strong> <code>/mnt/gdrive</code>",
|
||||
"<strong>Content:</strong> selecciona <strong>VZDump backup file</strong>"
|
||||
],
|
||||
"image2Alt": "Configurando nuevo almacenamiento en Proxmox",
|
||||
"afterConfig": "Pulsa <strong>Add</strong>:",
|
||||
"image3Alt": "Nuevo almacenamiento añadido en Proxmox",
|
||||
"afterAdd": "El directorio ya está registrado como un datastore de Proxmox — pero todavía está vacío (aún no hay ninguna nube montada en él)."
|
||||
},
|
||||
"installRclone": {
|
||||
"heading": "2. Instalar y configurar rclone",
|
||||
"body": "<rcloneLink>rclone</rcloneLink> es la herramienta que habla con los proveedores de almacenamiento en la nube. Instálalo desde los repositorios de Debian:",
|
||||
"installCode": "apt-get update\napt-get install -y rclone",
|
||||
"newerCalloutTitle": "Si necesitas un rclone más reciente",
|
||||
"newerCalloutBody": "Si necesitas un rclone más reciente que el que trae Debian, usa el instalador oficial:",
|
||||
"newerCode": "curl https://rclone.org/install.sh | bash",
|
||||
"tunnelHeading": "2.1 Autenticación basada en navegador a través de un túnel SSH",
|
||||
"tunnelBody": "El flujo de autenticación de rclone abre un navegador web local. Como el host Proxmox no tiene escritorio, el <remoteSetupLink>procedimiento de remote-setup de rclone</remoteSetupLink> redirige el callback de autenticación a través de un túnel SSH hasta el navegador de tu portátil.",
|
||||
"tunnelFrom": "Desde tu <strong>portátil</strong> (reemplaza <code>ip_proxmox</code> por la IP de Proxmox):",
|
||||
"tunnelCode": "ssh -L localhost:53682:localhost:53682 root@ip_proxmox",
|
||||
"tunnelAfter": "Esta sesión SSH reenvía el puerto 53682 del host Proxmox al localhost de tu portátil. Mantenla abierta durante la configuración de rclone que viene a continuación.",
|
||||
"runHeading": "2.2 Ejecutar rclone config",
|
||||
"runBody": "En la sesión SSH que acabas de abrir, ejecuta:",
|
||||
"runCode": "rclone config",
|
||||
"runAfter": "Sigue las preguntas para añadir un nuevo remote. Las respuestas exactas dependen de tu proveedor — consulta la <providerDocsLink>documentación de proveedores de rclone</providerDocsLink> para Google Drive, Mega, Dropbox, OneDrive, etc. El paso clave es la pregunta de autenticación:",
|
||||
"authPrompt": "Use web browser to automatically authenticate rclone with remote?\n * Say Y if the machine running rclone has a web browser you can use\n * Say N if running rclone on a (remote) machine without web browser access\nIf not sure try Y. If Y failed, try N.\ny) Yes\nn) No\ny/n> y",
|
||||
"authAfter": "Responde <strong>Y</strong> — rclone imprime una URL de localhost. Ábrela en <strong>el navegador de tu portátil</strong> (el túnel SSH la redirige correctamente), autoriza la aplicación de rclone en tu proveedor de nube y la configuración se completa.",
|
||||
"nameRemote": "Cuando te pida el nombre del remote, usa algo que coincida con el directorio que creaste — por ejemplo, <code>gdrive</code>."
|
||||
},
|
||||
"mount": {
|
||||
"heading": "3. Montar la carpeta de la nube",
|
||||
"body": "Crea una carpeta en tu nube personal para guardar los backups. Llámala algo como <code>PBC</code> (Proxmox Backup Cloud).",
|
||||
"mountIntro": "Móntala sobre el directorio del host:",
|
||||
"mountCode": "rclone mount gdrive:/PBC /mnt/gdrive --allow-other --allow-non-empty",
|
||||
"mountItems": [
|
||||
"<code>gdrive:/PBC</code> — la carpeta en tu nube.",
|
||||
"<code>/mnt/gdrive</code> — el directorio del host que registraste como datastore."
|
||||
],
|
||||
"mountFootnote": "<strong>Este comando se queda en primer plano.</strong> Para hacer pruebas, déjalo corriendo en una terminal y prueba un backup. Para un montaje permanente en cada arranque, configura una unit de systemd (siguiente sección)."
|
||||
},
|
||||
"systemd": {
|
||||
"heading": "4. Montaje automático en cada arranque (systemd)",
|
||||
"body": "Una unit de systemd es más robusta que <code>crontab @reboot</code> — puede esperar a que la red esté lista, reiniciarse en caso de fallo y te da logs apropiados vía <code>journalctl</code>.",
|
||||
"createIntro": "Crea el fichero de unit:",
|
||||
"createCode": "nano /etc/systemd/system/rclone-gdrive.service",
|
||||
"pasteIntro": "Pega:",
|
||||
"unitCode": "[Unit]\nDescription=rclone mount for Proxmox cloud backups\nWants=network-online.target\nAfter=network-online.target\n\n[Service]\nType=notify\nExecStart=/usr/bin/rclone mount \\\n gdrive:/PBC /mnt/gdrive \\\n --allow-other \\\n --allow-non-empty \\\n --vfs-cache-mode writes \\\n --log-level INFO \\\n --log-file /var/log/rclone-gdrive.log\nExecStop=/bin/fusermount -uz /mnt/gdrive\nRestart=on-failure\nRestartSec=10\n\n[Install]\nWantedBy=multi-user.target",
|
||||
"adjust": "Ajusta <code>gdrive:/PBC</code> y <code>/mnt/gdrive</code> si has usado nombres distintos. Guarda (<code>Ctrl+X</code>), luego activa e inicia:",
|
||||
"enableCode": "systemctl daemon-reload\nsystemctl enable --now rclone-gdrive.service",
|
||||
"verifyIntro": "Verifica:",
|
||||
"verifyCode": "systemctl status rclone-gdrive.service\nmount | grep /mnt/gdrive",
|
||||
"verifyAfter": "Si el servicio falla alguna vez (rate-limits del proveedor, token de autenticación caducado, corte de red), se reiniciará automáticamente al cabo de 10 segundos. Los logs están en <code>/var/log/rclone-gdrive.log</code> y vía <code>journalctl -u rclone-gdrive.service -f</code>.",
|
||||
"vfsCalloutTitle": "¿Por qué --vfs-cache-mode writes?",
|
||||
"vfsCalloutBody": "vzdump escribe el archivo de backup al disco en streaming; sin caché de escritura VFS, cada <code>fwrite</code> se bloquea esperando a un round-trip HTTP a la nube — los backups se vuelven lentos y los proveedores pueden aplicar rate-limit. La caché bufferiza las escrituras localmente y las vuelca en segundo plano."
|
||||
},
|
||||
"configureBackup": {
|
||||
"heading": "5. Configurar el backup para que aterrice en la nube",
|
||||
"body": "En la UI de Proxmox, cuando programes un backup o ejecutes uno ad-hoc, elige el almacenamiento que registraste como <strong>destino</strong>:",
|
||||
"image5Alt": "Seleccionando destino de backup en Proxmox",
|
||||
"after": "Cuando el backup termine, el fichero aparece en tu nube:",
|
||||
"image6Alt": "Fichero de backup en el almacenamiento en la nube"
|
||||
},
|
||||
"retention": {
|
||||
"heading": "6. Retención — mantén la cuota de la nube bajo control",
|
||||
"body": "Los backups vzdump de Proxmox son <strong>snapshots completos, no incrementales</strong>. Una VM de 30 GB = 30 GB por backup. Sin retención, la nube se llena.",
|
||||
"uiPath": "En la UI de Proxmox: <strong>Datacenter → Backup → [tu job] → Retention</strong>:",
|
||||
"image7Alt": "Ajustes de retención de backup en Proxmox",
|
||||
"starterIntro": "Valores iniciales razonables para un montaje doméstico / de laboratorio:",
|
||||
"starterItems": [
|
||||
"Conservar los últimos 5 backups diarios",
|
||||
"Conservar los últimos 4 backups semanales",
|
||||
"Conservar los últimos 6 backups mensuales"
|
||||
],
|
||||
"adjust": "Ajusta según la cuota de tu nube y la frecuencia con la que cambian las VMs."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"items": [
|
||||
"<strong><code>Mount point /mnt/gdrive is itself on a fuse.rclone filesystem</code>:</strong> el montaje anterior no se desmontó limpiamente. Fuerza el desmontaje: <code>fusermount -uz /mnt/gdrive</code>, luego reinicia la unit de systemd.",
|
||||
"<strong>El backup es extremadamente lento:</strong> confirma que <code>--vfs-cache-mode writes</code> está en la línea <code>ExecStart</code>. Sin esa opción, cada escritura se bloquea en la nube. Comprueba también tu ancho de banda de subida — vzdump está limitado por él.",
|
||||
"<strong>El backup falla con ''No space left on device'':</strong> el directorio de caché (<code>~/.cache/rclone/</code>) se llenó antes de que la subida pudiera alcanzarlo. Muévelo a un sistema de ficheros más grande con <code>--cache-dir /var/cache/rclone</code> en la unit de systemd.",
|
||||
"<strong>El token de autenticación de rclone caducó (típico en Google Drive tras un periodo largo de inactividad):</strong> vuelve a conectarte por SSH con el túnel (<code>ssh -L localhost:53682:localhost:53682 root@ip_proxmox</code>) y ejecuta <code>rclone config reconnect gdrive:</code> para refrescarlo.",
|
||||
"<strong>Los backups llegan pero salen corruptos al restaurar:</strong> deja de usar el almacenamiento en la nube como <strong>único</strong> destino de backup. Combínalo con PBS local / vzdump en un disco diferente para tener resiliencia."
|
||||
]
|
||||
}
|
||||
}
|
||||
118
web/messages/es/guides/index.json
Normal file
118
web/messages/es/guides/index.json
Normal file
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Guías de Proxmox VE — Coral TPU, NVIDIA, Kodi en LXC, Samba, backup en la nube | ProxMenux",
|
||||
"description": "Tutoriales hechos a mano para Proxmox VE: instalar Kodi dentro de un LXC con aceleración por GPU, configurar drivers NVIDIA en PVE 9, disco USB compartido por Samba en un contenedor, backups con vzdump a la nube personal (Google Drive, Mega, Dropbox, OneDrive). Más recursos curados de la comunidad, glosario y referencia de comandos.",
|
||||
"ogTitle": "Guías de Proxmox VE — Coral TPU, NVIDIA, Kodi en LXC, Samba, backup en la nube",
|
||||
"ogDescription": "Tutoriales hechos a mano para Proxmox VE: passthrough de GPU, Kodi como media center en LXC, Samba sobre USB, backup en la nube con rclone, y recursos curados de la comunidad.",
|
||||
"twitterTitle": "Guías de Proxmox VE | ProxMenux",
|
||||
"twitterDescription": "Tutoriales hechos a mano para Proxmox VE — GPU, Kodi en LXC, Samba, backup en la nube y más.",
|
||||
"ogImageAlt": "Guías ProxMenux — Tutoriales hechos a mano para Proxmox VE"
|
||||
},
|
||||
"header": {
|
||||
"title": "Guías de ProxMenux",
|
||||
"tagline": "Tutoriales en profundidad, referencias rápidas y recursos curados de la comunidad para sacarle todo el partido a Proxmox VE."
|
||||
},
|
||||
"inDepth": {
|
||||
"heading": "Guías en profundidad",
|
||||
"intro": "Tutoriales hechos a mano que cubren flujos concretos de Proxmox. Cada uno es el equivalente manual de un flujo automatizado de ProxMenux — útil cuando quieres visibilidad completa de cada paso.",
|
||||
"items": [
|
||||
{
|
||||
"slug": "kodi-lxc",
|
||||
"title": "Instalar Kodi en un LXC y conectarlo a un monitor / TV con aceleración por GPU",
|
||||
"description": "Ejecuta Kodi dentro de un contenedor LXC privilegiado en Proxmox VE, expón la iGPU del host y los dispositivos USB de entrada, y convierte el servidor Proxmox en un media center todo en uno conectado directamente a una TV."
|
||||
},
|
||||
{
|
||||
"slug": "backup-cloud",
|
||||
"title": "Backup de Proxmox en almacenamiento en la nube personal",
|
||||
"description": "Usa rclone para montar una nube personal (Google Drive, Mega, Dropbox, OneDrive, etc.) como un directorio en el host Proxmox VE, regístralo como datastore de vzdump y haz backup de VMs / CTs directamente a la nube — sin script extra."
|
||||
},
|
||||
{
|
||||
"slug": "lxc-samba",
|
||||
"title": "Añadir un disco o memoria USB a un LXC y compartirlo por la red con Samba",
|
||||
"description": "Conecta un disco duro USB o memoria USB a un contenedor LXC privilegiado en Proxmox VE, instala Samba dentro del contenedor y comparte el contenido por la red."
|
||||
},
|
||||
{
|
||||
"slug": "nvidia-manual",
|
||||
"title": "Instalación de drivers de tarjeta gráfica NVIDIA en Proxmox VE 9 (procedimiento manual)",
|
||||
"description": "Instalación y configuración manual de drivers NVIDIA en un host Proxmox VE 9, más el cableado de LXC necesario para exponer la GPU a uno o más contenedores. Cubre instalación del driver, servicio de persistencia, parche NVENC opcional y la configuración por contenedor."
|
||||
}
|
||||
]
|
||||
},
|
||||
"references": {
|
||||
"heading": "Referencias de ProxMenux",
|
||||
"intro": "Material de referencia rápida sacado de la propia documentación de ProxMenux.",
|
||||
"cards": {
|
||||
"glossary": {
|
||||
"title": "Glosario",
|
||||
"description": "Más de 60 definiciones de los términos técnicos usados en ProxMenux: Proxmox, virtualización, almacenamiento, red, Linux. Búsqueda rápida con etiquetas de categoría y enlaces cruzados."
|
||||
},
|
||||
"helpInfo": {
|
||||
"title": "Ayuda e información — Catálogo de comandos",
|
||||
"description": "Catálogo curado de comandos útiles de Linux y Proxmox organizados por tema, con copia al portapapeles. Espeja la referencia disponible dentro del menú de ProxMenux."
|
||||
},
|
||||
"linuxResources": {
|
||||
"title": "Recursos de Linux",
|
||||
"description": "Recursos externos para aprender línea de comandos en Linux, prácticas de seguridad, herramientas de monitorización y ZFS — complementa el catálogo de comandos de ProxMenux."
|
||||
},
|
||||
"externalRepos": {
|
||||
"title": "Repositorios externos",
|
||||
"description": "Repositorios de scripts de terceros integrados en ProxMenux como opciones de menú alternativas (community-scripts/ProxmoxVE, etc.)."
|
||||
}
|
||||
}
|
||||
},
|
||||
"official": {
|
||||
"heading": "Recursos oficiales de Proxmox",
|
||||
"intro": "Documentación de primera mano de Proxmox Server Solutions — la fuente de verdad de la plataforma.",
|
||||
"cards": {
|
||||
"pveDocs": {
|
||||
"title": "Documentación de Proxmox VE",
|
||||
"description": "La guía oficial de administración. Referencia completa que cubre instalación, red, almacenamiento, clústering, HA y la API."
|
||||
},
|
||||
"pbsDocs": {
|
||||
"title": "Documentación de Proxmox Backup Server",
|
||||
"description": "Documentación de PBS — backups incrementales, deduplicados y cifrados para Proxmox VE."
|
||||
},
|
||||
"videoTraining": {
|
||||
"title": "Vídeos oficiales de formación",
|
||||
"description": "Tutoriales en vídeo y cursos de formación oficiales de Proxmox."
|
||||
},
|
||||
"forum": {
|
||||
"title": "Foro de Proxmox",
|
||||
"description": "Foro oficial de la comunidad — preguntas, solución de problemas, experiencias compartidas. Supervisado por los mantenedores."
|
||||
}
|
||||
}
|
||||
},
|
||||
"community": {
|
||||
"heading": "Proyectos y recursos de la comunidad",
|
||||
"intro": "Proyectos de código abierto y listas curadas de la comunidad Proxmox en general. No están afiliados a Proxmox Server Solutions ni a ProxMenux — se incluyen porque han demostrado ser útiles.",
|
||||
"cards": {
|
||||
"helperScripts": {
|
||||
"title": "Proxmox VE Helper-Scripts",
|
||||
"description": "Catálogo mantenido por la comunidad con scripts de un solo paso para desplegar LXCs (Home Assistant, Plex, Frigate, …), VMs y ajustes de PVE. Sucesor espiritual de los helper scripts de tteck."
|
||||
},
|
||||
"awesome": {
|
||||
"title": "awesome-proxmox-ve (lista curada)",
|
||||
"description": "Gran meta-lista curada por la comunidad con recursos de Proxmox VE: herramientas, librerías, integraciones, blogs y vídeos. Buen punto de partida para descubrir más."
|
||||
}
|
||||
},
|
||||
"suggestRich": "¿Tienes un recurso de calidad que deberíamos añadir aquí? Abre un issue o un PR en <link>GitHub</link>. La idea es mantener esta lista curada, no exhaustiva."
|
||||
},
|
||||
"discussion": {
|
||||
"heading": "Discusión de la comunidad",
|
||||
"intro": "Dónde se habla de Proxmox y de ProxMenux.",
|
||||
"cards": {
|
||||
"proxmenuxDiscussions": {
|
||||
"title": "Discussions de ProxMenux",
|
||||
"description": "GitHub Discussions específico de ProxMenux: ideas de funciones, preguntas y respuestas, comparte tu setup. El sitio correcto para todo lo relacionado con el menú, el Monitor y los docs."
|
||||
},
|
||||
"proxmoxForum": {
|
||||
"title": "Foro de Proxmox",
|
||||
"description": "Foro oficial de Proxmox (también enlazado arriba). El sitio correcto para solución de problemas en profundidad y temas específicos de configuración."
|
||||
},
|
||||
"reddit": {
|
||||
"title": "r/Proxmox en Reddit",
|
||||
"description": "Subreddit activo con discusiones, consejos y soporte técnico. Barrera más baja que el foro y respuesta más rápida para preguntas casuales."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
70
web/messages/es/guides/kodi-lxc.json
Normal file
70
web/messages/es/guides/kodi-lxc.json
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Instalar Kodi en un LXC con aceleración por GPU | Guías ProxMenux",
|
||||
"description": "Ejecuta Kodi dentro de un contenedor LXC privilegiado en Proxmox VE, expón la iGPU del host y los dispositivos USB de entrada, y convierte el servidor Proxmox en un media center todo en uno conectado directamente a una TV.",
|
||||
"ogTitle": "Instalar Kodi en un LXC con aceleración por GPU",
|
||||
"ogDescription": "Ejecuta Kodi dentro de un LXC privilegiado en Proxmox VE con passthrough de la iGPU del host y dispositivos USB de entrada — convierte el servidor en un media center todo en uno."
|
||||
},
|
||||
"header": {
|
||||
"title": "Instalar Kodi en un LXC y conectarlo a un monitor / TV con aceleración por GPU",
|
||||
"description": "Ejecuta Kodi dentro de un contenedor LXC privilegiado en Proxmox VE, expón la iGPU del host y los dispositivos USB de entrada, y convierte el servidor Proxmox en un media center todo en uno conectado directamente a una TV.",
|
||||
"section": "Guías"
|
||||
},
|
||||
"intro": {
|
||||
"calloutTitle": "Aviso",
|
||||
"calloutBody": "Esta guía usa un script externo de la comunidad para arrancar el LXC de Kodi. La parte de GPU (passthrough de la iGPU del host al contenedor) también la cubre el flujo automatizado de ProxMenux: <strong>GPUs and Coral-TPU → Add GPU to LXC</strong> en el menú de ProxMenux — se encarga del cableado de <code>/dev/dri</code> y de la instalación del driver dentro del CT. El script de abajo además arranca el propio Kodi y el autoarranque en <code>tty7</code>. Úsalo si quieres un LXC media center llave en mano; usa el <gpuLink>flujo de ProxMenux</gpuLink> si solo necesitas acceso a la GPU para un CT que has montado a mano.",
|
||||
"credit": "Script original del LXC de Kodi creado por <authorLink>mrrudy</authorLink>.",
|
||||
"stepsTitle": "Qué vas a hacer",
|
||||
"steps": [
|
||||
"Crear un LXC privilegiado ejecutando Kodi (con el script).",
|
||||
"Cablear tu teclado, ratón o mando USB dentro del CT.",
|
||||
"(Opcional) Actualizar Kodi a la última versión desde el PPA team-xbmc."
|
||||
]
|
||||
},
|
||||
"createCt": {
|
||||
"heading": "1. Crear el LXC de Kodi",
|
||||
"body": "El CT tiene que ser <strong>privilegiado</strong> para que pueda acceder a los dispositivos USB de entrada (teclados, mandos a distancia, controles). El script se encarga de los flags de privilegio, el cableado de la GPU, la instalación de Kodi y el autoarranque en <code>tty7</code>:",
|
||||
"code": "bash -c \"$(wget -qLO - https://raw.githubusercontent.com/mrrudy/proxmoxHelper/main/ct/kodi-v1.sh)\"",
|
||||
"after": "Ten paciencia — la instalación tarda un rato. Cuando termine y Kodi arranque en <code>tty7</code>, puedes conectar tu monitor o TV directamente a la salida HDMI / DisplayPort del host y deberías ver la UI de Kodi."
|
||||
},
|
||||
"addInput": {
|
||||
"heading": "2. Añadir teclado, ratón o mando USB",
|
||||
"body": "Los dispositivos de entrada viven en <code>/dev/input/</code> en el host. Identifica el número major:",
|
||||
"listCode": "ls -l /dev/input",
|
||||
"imageAlt": "Listado de dispositivos de entrada",
|
||||
"afterList": "Coge el número de la primera columna (en el ejemplo: <code>13</code>). Para el LXC de Kodi y luego edita su config (reemplaza <code>'<'CTID'>'</code> por el ID del contenedor — por ejemplo, <code>102</code>):",
|
||||
"editCode": "nano /etc/pve/lxc/'<'CTID'>'.conf",
|
||||
"addLines": "Añade (ajusta <code>13</code> a lo que viste en <strong>tu</strong> host):",
|
||||
"configCode": "lxc.cgroup2.devices.allow = c 13:* rwm\nlxc.mount.entry: /dev/input dev/input none bind,optional,create=dir",
|
||||
"imageConfigAlt": "Configuración del LXC",
|
||||
"save": "Guarda (<code>Ctrl+X</code>) y reinicia <strong>solo el contenedor</strong> — no hace falta reiniciar el host Proxmox entero:",
|
||||
"restartCode": "pct restart '<'CTID'>'",
|
||||
"plug": "Conecta el teclado / ratón / mando y Kodi debería responder."
|
||||
},
|
||||
"updateKodi": {
|
||||
"heading": "3. (Opcional) Actualizar Kodi a la última versión",
|
||||
"calloutTitle": "Importante",
|
||||
"calloutBody": "El PPA team-xbmc es <strong>solo para Ubuntu</strong>. Si el LXC de Kodi está basado en una plantilla Debian, <code>add-apt-repository</code> no estará disponible y el PPA no funcionará. El script de mrrudy usa por defecto una plantilla Ubuntu, así que normalmente esto se cumple. Para verificarlo: <code>cat /etc/os-release</code> dentro del contenedor — busca <code>NAME=\"Ubuntu\"</code>.",
|
||||
"body": "Dentro del contenedor (<code>pct enter '<'CTID'>'</code>):",
|
||||
"code": "sudo add-apt-repository ppa:team-xbmc/ppa\nsudo apt update\nsudo apt install kodi kodi-bin",
|
||||
"after": "Reinicia el contenedor cuando termine; al arrancar tendrás el último Kodi."
|
||||
},
|
||||
"screenshots": {
|
||||
"heading": "Capturas",
|
||||
"image1Alt": "Interfaz de Kodi 1",
|
||||
"image2Alt": "Interfaz de Kodi 2"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"items": [
|
||||
"<strong>El LXC de Kodi arranca pero no se ve nada en la TV:</strong> puede que el CT no haya heredado la iGPU. Confírmalo con <code>ls /dev/dri</code> dentro del contenedor (deberías ver <code>card0</code>, <code>renderD128</code>). Si está vacío, el passthrough de GPU no se aplicó — vuelve a ejecutar el script o usa el menú <strong>Add GPU to LXC</strong> de ProxMenux.",
|
||||
"<strong>El teclado / ratón no se detecta tras reiniciar:</strong> el número major de <code>/dev/input</code> cambió (raro, pero pasa tras actualizaciones de kernel). Vuelve a ejecutar <code>ls -l /dev/input</code> en el host y actualiza la línea <code>lxc.cgroup2.devices.allow</code>.",
|
||||
"<strong>La reproducción acelerada por hardware usa CPU en lugar de GPU:</strong> instala o actualiza los drivers VA-API dentro del contenedor (<code>intel-media-va-driver</code> para iGPUs Intel modernas, <code>i965-va-driver</code> para las más antiguas, <code>mesa-va-drivers</code> en AMD).",
|
||||
"<strong><code>add-apt-repository: command not found</code>:</strong> el contenedor es Debian, no Ubuntu. O bien usa los paquetes Kodi de Debian (más antiguos pero estables), o bien recrea el CT desde una plantilla Ubuntu."
|
||||
]
|
||||
},
|
||||
"further": {
|
||||
"heading": "Más lecturas",
|
||||
"konpatRich": "<konpatLink>El post de Konpat</konpatLink> — contexto adicional sobre passthrough de iGPU Intel a LXC."
|
||||
}
|
||||
}
|
||||
119
web/messages/es/guides/lxc-samba.json
Normal file
119
web/messages/es/guides/lxc-samba.json
Normal file
@@ -0,0 +1,119 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Añadir una unidad USB a un LXC y compartirla con Samba | Guías ProxMenux",
|
||||
"description": "Conecta un disco duro USB o una memoria USB a un contenedor LXC privilegiado en Proxmox VE, instala Samba dentro del contenedor y comparte el contenido por la red.",
|
||||
"ogTitle": "Añadir una unidad USB a un LXC y compartirla con Samba",
|
||||
"ogDescription": "Conecta una unidad USB a un LXC privilegiado en Proxmox VE, instala Samba dentro del contenedor y comparte el contenido por la LAN."
|
||||
},
|
||||
"header": {
|
||||
"title": "Añadir una unidad USB o memoria a un LXC y compartirla por la red con Samba",
|
||||
"description": "Conecta un disco duro USB o una memoria USB a un contenedor LXC privilegiado en Proxmox VE, instala Samba dentro del contenedor y comparte el contenido por la red.",
|
||||
"section": "Guías"
|
||||
},
|
||||
"recommended": {
|
||||
"calloutTitle": "Recomendado",
|
||||
"calloutIntro": "ProxMenux ahora expone las dos mitades de este flujo como menús guiados:",
|
||||
"items": [
|
||||
"<strong>Disk Manager → Format / Wipe Physical Disk</strong> para el paso de formateo.",
|
||||
"<strong>Storage & Share Manager → LXC network sharing → Samba server in LXC</strong> para la instalación del CT privilegiado y la configuración de Samba."
|
||||
],
|
||||
"calloutOutro": "Los flujos guiados se encargan de las peculiaridades de permisos de los CT unprivileged, de los presets de modo de share (lectura-escritura / solo lectura / personalizado) y de la configuración del grupo sharedfiles. Esta guía es el equivalente manual — útil si quieres visibilidad total sobre cada paso o si prefieres cablearlo todo a mano."
|
||||
},
|
||||
"intro": {
|
||||
"body": "A veces resulta útil añadir un disco duro o una memoria USB a un host Proxmox, sobre todo en un mini PC con expansión interna limitada. Esta guía cubre:",
|
||||
"stepsTitle": "Qué vas a hacer",
|
||||
"steps": [
|
||||
"Conectar el disco USB a un LXC privilegiado.",
|
||||
"Instalar Samba dentro del contenedor.",
|
||||
"Compartir el contenido del disco por la LAN."
|
||||
],
|
||||
"useCasesTitle": "Casos de uso",
|
||||
"useCases": [
|
||||
"Alojar ficheros Torrent y servirlos en la red.",
|
||||
"Dar soporte a un media server (Plex / Jellyfin / Emby).",
|
||||
"Guardar documentos que escanea automáticamente Paperless.",
|
||||
"Almacenamiento tipo NAS genérico para la red doméstica."
|
||||
],
|
||||
"privilegedCalloutTitle": "Se requiere un contenedor privilegiado",
|
||||
"privilegedCalloutBody": "El passthrough directo de dispositivos (<code>mp0</code> con una ruta del host) necesita un LXC privilegiado. Los CT unprivileged no pueden hacer bind-mount directo de dispositivos de bloque — para esos necesitas bind mounts de directorios del host (consulta ProxMenux <strong>Storage & Share Manager → LXC Mount Points</strong>)."
|
||||
},
|
||||
"attach": {
|
||||
"heading": "1. Conectar el disco USB al LXC",
|
||||
"identifyHeading": "1.1 Identificar el dispositivo",
|
||||
"identifyBody": "Compara la lista de discos <strong>antes</strong> y <strong>después</strong> de conectar la unidad USB — el dispositivo nuevo es tu objetivo.",
|
||||
"beforeLabel": "Antes:",
|
||||
"afterLabel": "Después:",
|
||||
"imageBeforeAlt": "Lista de discos antes de añadir la unidad USB",
|
||||
"imageAfterAlt": "Lista de discos después de añadir la unidad USB",
|
||||
"lsblkBody": "También puedes usar <code>lsblk -o NAME,SIZE,MODEL,SERIAL</code> para listar cada dispositivo de bloque con su modelo y número de serie.",
|
||||
"stableCalloutTitle": "Importante — usa un identificador estable",
|
||||
"stableCalloutBody": "<code>/dev/sdb1</code> puede cambiar entre arranques si tienes varios discos USB. Busca el identificador persistente:",
|
||||
"stableCalloutCode": "ls -l /dev/disk/by-id/ | grep -v part",
|
||||
"stableCalloutAfter": "Usa la ruta <code>/dev/disk/by-id/usb-...</code> en la config del LXC en lugar de <code>/dev/sdb1</code>. Sobrevive a reinicios y a desconexiones.",
|
||||
"formatHeading": "1.2 Formatear el disco",
|
||||
"formatBody": "ext4 es un valor por defecto razonable para shares basados en Linux (sensible a mayúsculas, soporta ACLs POSIX, sin límites de tamaño de fichero). Ejecútalo desde el <strong>host Proxmox</strong>, no desde el contenedor:",
|
||||
"formatCode": "mkfs.ext4 /dev/sdb1",
|
||||
"formatAfter": "Reemplaza <code>/dev/sdb1</code> por el dispositivo de partición real — o por la ruta persistente <code>/dev/disk/by-id/usb-...-part1</code>.",
|
||||
"mkdirHeading": "1.3 Crear el punto de montaje dentro del LXC",
|
||||
"mkdirBody": "Dentro del LXC, crea el directorio donde aparecerá el disco (cualquier nombre vale):",
|
||||
"mkdirCode": "mkdir /mnt/lxc_USB",
|
||||
"wireHeading": "1.4 Cablear el dispositivo al LXC",
|
||||
"wireBody": "En el <strong>host Proxmox</strong> (no dentro del CT), edita la config del contenedor. Reemplaza <code>'<'CTID'>'</code> por el ID del contenedor:",
|
||||
"wireEditCode": "nano /etc/pve/lxc/'<'CTID'>'.conf",
|
||||
"wireAddLine": "Añade esta línea:",
|
||||
"wireConfigCode": "mp0: /dev/disk/by-id/usb-VENDOR_MODEL_SERIAL-part1,mp=/mnt/lxc_USB,backup=0",
|
||||
"wireShortForm": "(O, si aceptas el riesgo de que la ruta del dispositivo cambie, la forma corta: <code>mp0: /dev/sdb1,mp=/mnt/lxc_USB,backup=0</code>.)",
|
||||
"wireBackupNote": "El flag <code>backup=0</code> excluye este punto de montaje de los backups de <code>vzdump</code> — normalmente la elección correcta para discos externos grandes que son el almacenamiento de destino del host y no sus datos.",
|
||||
"restartHeading": "1.5 Reiniciar el LXC y ajustar permisos",
|
||||
"restartBody": "Reinicia el CT para aplicar el punto de montaje:",
|
||||
"restartCode": "pct restart '<'CTID'>'",
|
||||
"permsBody": "Dentro del LXC, dale al directorio los permisos apropiados para el usuario que será dueño del share:",
|
||||
"permsCode": "# Dentro del contenedor\nmkdir -p /mnt/lxc_USB\nchown -R proxmenux:proxmenux /mnt/lxc_USB\nchmod 770 /mnt/lxc_USB",
|
||||
"permsNoteTitle": "Nota",
|
||||
"permsNote": "Reemplaza <code>proxmenux</code> por el nombre de usuario que crearás en el paso 2.2 más abajo. <code>770</code> da acceso total al usuario y al grupo, sin acceso para el resto — más seguro que el <code>chmod -R 777</code> abierto a todos y aun así suficiente para que el share funcione."
|
||||
},
|
||||
"samba": {
|
||||
"heading": "2. Instalar Samba",
|
||||
"installHeading": "2.1 Instalar el paquete dentro del LXC",
|
||||
"installCode": "apt-get update\napt-get install -y samba",
|
||||
"confirmBody": "Confirma que el servicio está corriendo:",
|
||||
"confirmCode": "systemctl status smbd.service",
|
||||
"userHeading": "2.2 Crear el usuario del share",
|
||||
"userBody": "Escoge un nombre de usuario (aquí usamos <code>proxmenux</code>; sustitúyelo por el tuyo). Créalo como usuario del sistema sin shell:",
|
||||
"userCode": "adduser proxmenux",
|
||||
"passwordBody": "Establece la contraseña de Samba (independiente de la contraseña del sistema — Samba mantiene su propio almacén de credenciales):",
|
||||
"passwordCode": "smbpasswd -a proxmenux",
|
||||
"aclHeading": "2.3 Configurar la propiedad / ACLs",
|
||||
"aclBody": "Si el simple <code>chown</code> del paso 1.5 te basta, los permisos ya están listos. Para un control más fino (varios usuarios compartiendo la misma ruta con permisos distintos), usa ACLs:",
|
||||
"aclCode": "apt-get install -y acl\nsetfacl -R -m \"u:proxmenux:rwx\" /mnt/lxc_USB\nsetfacl -d -R -m \"u:proxmenux:rwx\" /mnt/lxc_USB # ACL por defecto — se aplica a los ficheros nuevos"
|
||||
},
|
||||
"configure": {
|
||||
"heading": "3. Configurar el share de Samba",
|
||||
"editHeading": "3.1 Editar smb.conf",
|
||||
"editCode": "nano /etc/samba/smb.conf",
|
||||
"appendBody": "Añade una definición de share al final:",
|
||||
"shareCode": "[lxc_usb]\n comment = Shared USB storage\n path = /mnt/lxc_USB\n read only = no\n writable = yes\n browseable = yes\n guest ok = no\n valid users = proxmenux\n create mask = 0660\n directory mask = 0770",
|
||||
"validUsersNoteTitle": "Nota",
|
||||
"validUsersNote": "La línea <code>valid users = proxmenux</code> restringe el acceso a ese único usuario Samba. Para acceso por grupo, usa <code>valid users = @samba_users</code> tras añadir el usuario o usuarios a un grupo llamado <code>samba_users</code>.",
|
||||
"reloadHeading": "3.2 Recargar Samba",
|
||||
"reloadCode": "systemctl restart smbd"
|
||||
},
|
||||
"verify": {
|
||||
"heading": "4. Verificar el acceso",
|
||||
"body": "Desde cualquier cliente de la LAN, navega a <code>\\\\'<'CT_IP'>'</code> (Windows) o <code>smb://'<'CT_IP'>'</code> (gestores de ficheros de macOS / Linux). Autentícate con el usuario Samba (<code>proxmenux</code>) y la contraseña que pusiste con <code>smbpasswd</code>.",
|
||||
"image1Alt": "Acceso al servidor Samba desde un cliente",
|
||||
"image2Alt": "Prompt de autenticación de Samba",
|
||||
"usageBody": "Puedes usar el share tanto dentro del contenedor como por la red:",
|
||||
"image3Alt": "Uso de la unidad USB a través del share"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"items": [
|
||||
"<strong><code>pct restart</code> falla con \"device not found\":</strong> la ruta del dispositivo en <code>mp0</code> no existe en el host. Comprueba con <code>ls -l /dev/disk/by-id/</code> y actualiza la ruta.",
|
||||
"<strong>El CT arranca pero <code>/mnt/lxc_USB</code> está vacío:</strong> el disco no está montado dentro del CT. Comprueba desde el host: <code>pct exec '<'CTID'>' -- mount | grep lxc_USB</code>. Si no aparece, el punto de montaje en la config está mal.",
|
||||
"<strong>Samba autentica pero las escrituras fallan con \"Permission denied\":</strong> los permisos Linux del directorio no permiten al usuario de Samba escribir. Revisa <code>chown</code> / <code>setfacl</code> en la sección 1.5 / 2.3.",
|
||||
"<strong>El share no aparece en los navegadores de red pero <code>smb://'<'ip'>'/lxc_usb</code> sí funciona:</strong> la visibilidad por LAN depende de NetBIOS / WS-Discovery. Añade <code>nmbd</code>: <code>apt-get install -y samba-common-bin</code> y asegúrate de que <code>nmbd</code> esté habilitado.",
|
||||
"<strong>Quieres añadir un segundo usuario al mismo share:</strong> crea el usuario con <code>adduser</code>, regístralo con <code>smbpasswd -a</code> y añádelo a la lista <code>valid users =</code> del share separado por comas."
|
||||
]
|
||||
}
|
||||
}
|
||||
153
web/messages/es/guides/nvidia-manual.json
Normal file
153
web/messages/es/guides/nvidia-manual.json
Normal file
@@ -0,0 +1,153 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Instalación de drivers NVIDIA en Proxmox VE 9 (procedimiento manual) | Guías ProxMenux",
|
||||
"description": "Instalación y configuración manual de drivers NVIDIA en un host Proxmox VE 9, más el cableado del LXC necesario para exponer la GPU a uno o varios contenedores. Cubre la instalación de drivers, el servicio de persistencia, el parche NVENC opcional y la configuración por contenedor.",
|
||||
"ogTitle": "Instalación de drivers NVIDIA en Proxmox VE 9 (procedimiento manual)",
|
||||
"ogDescription": "Instalación manual de drivers NVIDIA en PVE 9 — driver del host, servicio de persistencia, parche NVENC opcional y cableado LXC por contenedor."
|
||||
},
|
||||
"header": {
|
||||
"title": "Instalación de drivers de tarjeta gráfica NVIDIA en Proxmox VE 9 (procedimiento manual)",
|
||||
"description": "Instalación y configuración manual de drivers NVIDIA en un host Proxmox VE 9, más el cableado del LXC necesario para exponer la GPU a uno o varios contenedores. Cubre la instalación de drivers, el servicio de persistencia, el parche NVENC opcional y la configuración por contenedor.",
|
||||
"section": "Guías"
|
||||
},
|
||||
"intro": {
|
||||
"calloutTitle": "Nota",
|
||||
"calloutBody": "Este es el procedimiento manual conservado como referencia. Para la mayoría de usuarios, el camino recomendado es el flujo automatizado de ProxMenux: <strong>Install NVIDIA Drivers (Host)</strong> en el menú <em>GPUs and Coral-TPU</em>, y <strong>Add GPU to LXC</strong> (o <strong>Add GPU to VM</strong>) para el cableado por guest. El flujo automatizado se encarga de los mismos pasos documentados aquí (con comprobaciones de seguridad adicionales: compatibilidad de kernel headers, validación de IOMMU, resolución de conflictos con VFIO). Esta página es para operadores que quieran entender cada comando, o que necesiten desviarse del flujo estándar.",
|
||||
"targetNote": "Dirigido a <strong>Proxmox VE 9</strong> (Debian Trixie). PVE 7 (Bullseye) y PVE 8 (Bookworm) ya no se cubren.",
|
||||
"stepsTitle": "Qué vas a hacer",
|
||||
"steps": [
|
||||
"Preparar el host Proxmox VE 9 (blacklist de nouveau, repos, prerrequisitos).",
|
||||
"Instalar el driver NVIDIA en el host.",
|
||||
"Instalar el servicio de persistencia NVIDIA.",
|
||||
"(Opcional) Aplicar el parche de keylase para levantar el límite de sesiones concurrentes de NVENC en GPUs de consumo.",
|
||||
"Cablear la GPU en uno o varios contenedores LXC e instalar el driver correspondiente dentro de cada uno."
|
||||
]
|
||||
},
|
||||
"prepareHost": {
|
||||
"heading": "1. Preparar el host (PVE 9)",
|
||||
"blacklistHeading": "1.1 Blacklist de nouveau",
|
||||
"blacklistBody": "Comprueba si el driver open-source <code>nouveau</code> ya está en la blacklist:",
|
||||
"blacklistCheckCode": "cat /etc/modprobe.d/blacklist.conf",
|
||||
"blacklistAdd": "Si <code>blacklist nouveau</code> no aparece, añádelo y reinicia:",
|
||||
"blacklistAddCode": "echo \"blacklist nouveau\" '>>' /etc/modprobe.d/blacklist.conf\nreboot",
|
||||
"blacklistImageAlt": "Comprobación de blacklist",
|
||||
"reposHeading": "1.2 Verificar repositorios (PVE 9 / Trixie)",
|
||||
"reposBody": "Si has ejecutado el script Post-Install de ProxMenux (o cualquier otra herramienta post-install de Proxmox), los repositorios ya están listos — sáltate este paso.",
|
||||
"reposOtherwise": "Si no, en una instalación PVE 9 limpia sin suscripción enterprise:",
|
||||
"reposEditCode": "nano /etc/apt/sources.list.d/proxmox.sources",
|
||||
"reposPveBody": "Asegúrate de que contiene la fuente no-subscription para Trixie:",
|
||||
"reposPveCode": "Types: deb\nURIs: http://download.proxmox.com/debian/pve\nSuites: trixie\nComponents: pve-no-subscription\nSigned-By: /usr/share/keyrings/proxmox-archive-keyring.gpg",
|
||||
"reposDebianBody": "Y las fuentes Debian en <code>/etc/apt/sources.list.d/debian.sources</code>:",
|
||||
"reposDebianCode": "Types: deb\nURIs: http://deb.debian.org/debian/\nSuites: trixie trixie-updates\nComponents: main contrib non-free non-free-firmware\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg\n\nTypes: deb\nURIs: http://security.debian.org/debian-security/\nSuites: trixie-security\nComponents: main contrib non-free non-free-firmware\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg",
|
||||
"updateHeading": "1.3 Actualizar el sistema e instalar prerrequisitos",
|
||||
"updateCode": "apt update && apt dist-upgrade -y",
|
||||
"buildToolsBody": "Instala las herramientas de build y los kernel headers necesarios para compilar el módulo del kernel NVIDIA:",
|
||||
"buildToolsCode": "apt-get install -y git\napt-get install -qqy pve-headers-$(uname -r) gcc make"
|
||||
},
|
||||
"installDriver": {
|
||||
"heading": "2. Instalar el driver NVIDIA en el host",
|
||||
"pickHeading": "2.1 Elegir una versión de driver",
|
||||
"pickBody": "Consulta el último driver estable:",
|
||||
"pickUrlCode": "https://download.nvidia.com/XFree86/Linux-x86_64/latest.txt",
|
||||
"nvencCallout": "Si vas a aplicar el parche NVENC (paso 4), verifica primero que el parche soporte tu versión de driver: <patchLink>github.com/keylase/nvidia-patch</patchLink>",
|
||||
"nvencCalloutTitle": "Aviso",
|
||||
"pickReplace": "Reemplaza <code>latest.txt</code> en la URL por el número de versión para encontrar el archivo de instalación que termina en <code>.run</code>. La lista completa de drivers está en:",
|
||||
"pickListCode": "https://download.nvidia.com/XFree86/Linux-x86_64/",
|
||||
"pickImageAlt": "Descarga del driver NVIDIA",
|
||||
"pickVersionNote": "A lo largo del resto de esta guía, reemplaza <code>'<'VERSION'>'</code> por la versión real (por ejemplo, <code>580.95.05</code>).",
|
||||
"downloadHeading": "2.2 Descargar y ejecutar el instalador",
|
||||
"downloadCode": "mkdir -p /opt/nvidia\ncd /opt/nvidia\nwget https://download.nvidia.com/XFree86/Linux-x86_64/'<'VERSION'>'/NVIDIA-Linux-x86_64-'<'VERSION'>'.run\nchmod +x NVIDIA-Linux-x86_64-'<'VERSION'>'.run",
|
||||
"firstPassBody": "Primera pasada — esto desactiva <code>nouveau</code> y prepara el sistema:",
|
||||
"firstPassCode": "./NVIDIA-Linux-x86_64-'<'VERSION'>'.run --no-questions --ui=none --disable-nouveau\nreboot",
|
||||
"secondPassBody": "Cuando el host vuelva, ejecuta el instalador de nuevo para compilar e instalar el módulo del kernel:",
|
||||
"secondPassCode": "/opt/nvidia/NVIDIA-Linux-x86_64-'<'VERSION'>'.run --no-questions --ui=none",
|
||||
"modulesHeading": "2.3 Cargar módulos NVIDIA en el arranque",
|
||||
"modulesBody": "Edita la configuración de carga de módulos:",
|
||||
"modulesEditCode": "nano /etc/modules-load.d/modules.conf",
|
||||
"modulesAddBody": "Añade los módulos VFIO y NVIDIA:",
|
||||
"modulesAddCode": "vfio\nvfio_iommu_type1\nvfio_pci\nvfio_virqfd\nnvidia\nnvidia_uvm",
|
||||
"modulesSaveBody": "Guarda (<code>Ctrl+X</code>) y reconstruye initramfs:",
|
||||
"modulesSaveCode": "update-initramfs -u -k all",
|
||||
"udevHeading": "2.4 Crear reglas udev",
|
||||
"udevBody": "Para que los nodos de dispositivo <code>/dev/nvidia*</code> se creen cuando se cargan los módulos:",
|
||||
"udevEditCode": "nano /etc/udev/rules.d/70-nvidia.rules",
|
||||
"udevRulesCode": "# /etc/udev/rules.d/70-nvidia.rules\n# Create /dev/nvidia0, /dev/nvidia1 ... and /dev/nvidiactl when nvidia module is loaded\nKERNEL==\"nvidia\", RUN+=\"/bin/bash -c ''/usr/bin/nvidia-smi -L''\"\n\n# Create the CUDA node when nvidia_uvm CUDA module is loaded\nKERNEL==\"nvidia_uvm\", RUN+=\"/bin/bash -c ''/usr/bin/nvidia-modprobe -c0 -u''\"",
|
||||
"udevSaveBody": "Guarda (<code>Ctrl+X</code>)."
|
||||
},
|
||||
"persistence": {
|
||||
"heading": "3. Servicio de persistencia del driver NVIDIA",
|
||||
"body": "El daemon de persistencia mantiene la GPU inicializada entre usos, lo que evita la penalización de latencia y la pérdida ocasional de estado que ocurre cuando el módulo del kernel se carga y descarga repetidamente:",
|
||||
"installCode": "cd /opt/nvidia\ngit clone https://github.com/NVIDIA/nvidia-persistenced.git\ncd nvidia-persistenced/init\n./install.sh\nreboot",
|
||||
"verifyBody": "Verifica que el driver está cargado y el servicio está en marcha tras reiniciar:",
|
||||
"verifySmiCode": "nvidia-smi",
|
||||
"smiImageAlt": "Salida de NVIDIA SMI",
|
||||
"verifyServiceCode": "systemctl status nvidia-persistenced",
|
||||
"serviceImageAlt": "Estado del servicio de persistencia NVIDIA"
|
||||
},
|
||||
"nvenc": {
|
||||
"heading": "4. (Opcional) Levantar el límite de sesiones concurrentes de NVENC",
|
||||
"body": "Las GPUs NVIDIA de consumo vienen con un límite hardcodeado en el número de sesiones simultáneas de codificación NVENC (típicamente 3, 5 u 8 según la generación). El parche de keylase elimina esa restricción. Útil cuando ejecutas cargas de transcodificación de Plex / Jellyfin / Frigate.",
|
||||
"code": "cd /opt/nvidia\ngit clone https://github.com/keylase/nvidia-patch.git\ncd nvidia-patch\n./patch.sh",
|
||||
"imageAlt": "Aplicación del parche NVIDIA",
|
||||
"after": "El parche debe reaplicarse después de cada actualización del driver. El repositorio de keylase también incluye <code>patch-fbc.sh</code> para el límite de FBC (frame buffer capture) si lo necesitas."
|
||||
},
|
||||
"lxcSetup": {
|
||||
"heading": "5. Configurar un contenedor LXC para usar la GPU",
|
||||
"identifyHeading": "5.1 Identificar los números de dispositivo",
|
||||
"identifyBody": "En el host:",
|
||||
"identifyCode": "ls -l /dev/nv*",
|
||||
"identifyImageAlt": "Listado de dispositivos NVIDIA",
|
||||
"identifyNote": "Anota los números major — varían entre sistemas. Valores típicos:",
|
||||
"tableHeaders": {
|
||||
"device": "Dispositivo",
|
||||
"major": "Major típico"
|
||||
},
|
||||
"tableRows": [
|
||||
{ "device": "<code>/dev/nvidia0</code>, <code>/dev/nvidiactl</code>", "major": "195" },
|
||||
{ "device": "<code>/dev/nvidia-uvm</code>, <code>/dev/nvidia-uvm-tools</code>", "major": "509 (varía)" },
|
||||
{ "device": "<code>/dev/dri/*</code>", "major": "226" },
|
||||
{ "device": "<code>/dev/nvidia-modeset</code>", "major": "195 (comparte con nvidia)" }
|
||||
],
|
||||
"editHeading": "5.2 Editar la config del LXC",
|
||||
"editBody": "Para el contenedor primero si está corriendo. Abre su archivo de configuración (reemplaza <code>'<'CTID'>'</code> por el ID del contenedor):",
|
||||
"editCode": "nano /etc/pve/lxc/'<'CTID'>'.conf",
|
||||
"editConfigBody": "Comenta las líneas <code>lxc.cgroup2.devices.allow</code> o <code>/dev/dri</code> preexistentes que entren en conflicto, luego añade el cableado NVIDIA (ajusta los números major a lo que <code>ls -l /dev/nv*</code> mostró en <strong>tu</strong> host):",
|
||||
"editConfigCode": "lxc.cgroup2.devices.allow: c 195:* rwm\nlxc.cgroup2.devices.allow: c 509:* rwm\nlxc.cgroup2.devices.allow: c 10:* rwm\nlxc.cgroup2.devices.allow: c 238:* rwm\nlxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file\nlxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file\nlxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file\nlxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file\nlxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file\nlxc.mount.entry: /dev/nvram dev/nvram none bind,optional,create=file",
|
||||
"editConfigImageAlt": "Configuración del LXC",
|
||||
"editSave": "Guarda (<code>Ctrl+X</code>) y arranca el contenedor.",
|
||||
"installCtHeading": "5.3 Instalar el driver dentro del contenedor",
|
||||
"installCtCalloutTitle": "Importante",
|
||||
"installCtCalloutBody": "Esta parte se ejecuta <strong>dentro</strong> del contenedor, no en el host.",
|
||||
"installCtBody": "El módulo del kernel ya está cargado por el host — el contenedor solo necesita las librerías de userland que coincidan con la misma versión del driver:",
|
||||
"installCtCode": "mkdir -p /opt/nvidia\ncd /opt/nvidia\nwget https://download.nvidia.com/XFree86/Linux-x86_64/'<'VERSION'>'/NVIDIA-Linux-x86_64-'<'VERSION'>'.run\nchmod +x NVIDIA-Linux-x86_64-'<'VERSION'>'.run\n./NVIDIA-Linux-x86_64-'<'VERSION'>'.run --no-kernel-module",
|
||||
"installCtAfter": "Acepta los valores por defecto en cada prompt.",
|
||||
"installCtImageAlt": "Instalación del driver NVIDIA",
|
||||
"verifyCtHeading": "5.4 Verificar dentro del contenedor",
|
||||
"verifyCtSmiCode": "nvidia-smi",
|
||||
"verifyCtSmiImageAlt": "NVIDIA SMI en LXC",
|
||||
"verifyCtLsCode": "ls -l /dev/nv*",
|
||||
"verifyCtLsImageAlt": "Dispositivos NVIDIA en LXC",
|
||||
"verifyCtAfter": "Deberías ver la GPU listada y los nodos de dispositivo montados en el sistema de archivos del contenedor.",
|
||||
"workloadHeading": "5.5 Confirmar que una carga real usa la GPU",
|
||||
"workloadBody": "Para Plex / Jellyfin, transcodifica un vídeo y mira el dashboard / logs — la transcodificación acelerada por hardware ya está activa.",
|
||||
"workloadImage1Alt": "Plex usando la GPU NVIDIA",
|
||||
"workloadImage2Alt": "Plex usando la GPU NVIDIA - sesión activa",
|
||||
"repeatNote": "Para cablear la GPU en otro contenedor, repite la <strong>sección 5</strong> para cada CTID adicional. La instalación del driver dentro del contenedor solo hace falta hacerla una vez por contenedor."
|
||||
},
|
||||
"docker": {
|
||||
"heading": "6. (Opcional) NVIDIA Docker dentro de un LXC",
|
||||
"body": "Si el contenedor ejecuta Docker y quieres que los contenedores-dentro-del-contenedor usen la GPU, instala <code>nvidia-docker2</code>. Desde dentro del LXC:",
|
||||
"code": "wget https://raw.githubusercontent.com/MacRimi/manuales/main/NVIDIA/nvidia-docker.sh\nchmod +x nvidia-docker.sh\n./nvidia-docker.sh",
|
||||
"after": "El script se encarga de la configuración del repositorio, la instalación del paquete y la configuración del daemon Docker de una sola vez."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Solución de problemas",
|
||||
"items": [
|
||||
"<strong><code>nvidia-smi</code> en el host muestra la GPU, pero dentro del contenedor da error \"No devices found\":</strong> las versiones del driver no coinciden. Vuelve a descargar la misma <code>'<'VERSION'>'</code> dentro del contenedor y ejecútalo con <code>--no-kernel-module</code>.",
|
||||
"<strong>La compilación del driver falla en el host con \"No precompiled kernel interface was found\":</strong> faltan los kernel headers o están desincronizados. Vuelve a ejecutar <code>apt-get install pve-headers-$(uname -r)</code> y confirma que <code>uname -r</code> coincide con el kernel en ejecución.",
|
||||
"<strong>Las sesiones de NVENC siguen capadas después de aplicar el parche:</strong> el parche fue sobrescrito por una actualización del driver. Vuelve a ejecutar <code>./patch.sh</code> desde <code>/opt/nvidia/nvidia-patch</code>.",
|
||||
"<strong>La GPU deja de responder tras unas horas de inactividad:</strong> el daemon de persistencia no está corriendo. Compruébalo con <code>systemctl status nvidia-persistenced</code> y arráncalo / habilítalo.",
|
||||
"<strong>El contenedor arranca pero <code>ls /dev/nv*</code> no muestra nada:</strong> los números major en la config del LXC no coinciden con los del host. Vuelve a ejecutar <code>ls -l /dev/nv*</code> en el host y ajusta las líneas <code>lxc.cgroup2.devices.allow</code> en consecuencia."
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user