mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 10:52:22 +00:00
docs: review practical guides in all seven translations
This commit is contained in:
@@ -1,18 +1,18 @@
|
||||
{
|
||||
"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",
|
||||
"title": "Backup de Proxmox en almacenamiento en la nube personal | 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 script extra.",
|
||||
"ogTitle": "Backup de Proxmox en 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.",
|
||||
"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.",
|
||||
"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).",
|
||||
"pbsCalloutBody": "En una segunda máquina que cumpla sus requisitos x86-64, <pbsLink>Proxmox Backup Server</pbsLink> ofrece copias incrementales, deduplicadas y con cifrado opcional en el cliente. Está diseñado para copias de VM. Esta guía explica cómo montar una nube personal, como Google Drive, Mega, OneDrive o Dropbox, como destino de las copias.",
|
||||
"stepsTitle": "Qué vas a hacer",
|
||||
"steps": [
|
||||
"Crear un directorio en el host Proxmox y registrarlo como un datastore compatible con vzdump.",
|
||||
@@ -21,7 +21,7 @@
|
||||
"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)."
|
||||
"vzdumpCalloutBody": "Los archivos vzdump de Proxmox son <strong>copias completas, no incrementales</strong>. Su tamaño real depende de los datos incluidos y de la compresión, no solo de la capacidad del disco virtual. Si un archivo ocupa 30 GB, conservar cinco requiere unos 150 GB. Configura una política de retención para evitar que la nube se llene."
|
||||
},
|
||||
"createDir": {
|
||||
"heading": "1. Crear el directorio del host y registrarlo como datastore",
|
||||
@@ -32,7 +32,7 @@
|
||||
"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>Directorio:</strong> <code>/mnt/gdrive</code>",
|
||||
"<strong>Content:</strong> selecciona <strong>VZDump backup file</strong>"
|
||||
],
|
||||
"image2Alt": "Configurando nuevo almacenamiento en Proxmox",
|
||||
@@ -48,10 +48,10 @@
|
||||
"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.",
|
||||
"tunnelBody": "Para los proveedores que usan autenticación web, el host Proxmox normalmente no tiene navegador. Sigue el <remoteSetupLink>procedimiento remoto de rclone</remoteSetupLink>: utiliza el navegador del portátil y reenvía su conexión de retorno a localhost por SSH hasta rclone en el host.",
|
||||
"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.",
|
||||
"tunnelAfter": "Esta sesión SSH abre el puerto localhost 53682 en tu portátil y reenvía las conexiones al mismo puerto del host Proxmox. Mantenla abierta durante la configuración de rclone.",
|
||||
"runHeading": "2.2 Ejecutar rclone config",
|
||||
"runBody": "En la sesión SSH que acabas de abrir, ejecuta:",
|
||||
"runCode": "rclone config",
|
||||
@@ -64,7 +64,7 @@
|
||||
"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",
|
||||
"mountCode": "rclone mount gdrive:/PBC /mnt/gdrive --allow-other --allow-non-empty --vfs-cache-mode writes",
|
||||
"mountItems": [
|
||||
"<code>gdrive:/PBC</code> — la carpeta en tu nube.",
|
||||
"<code>/mnt/gdrive</code> — el directorio del host que registraste como datastore."
|
||||
@@ -82,21 +82,21 @@
|
||||
"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."
|
||||
"verifyAfter": "La unidad solicita un reinicio al cabo de 10 segundos si rclone termina con un error. No repara credenciales caducadas ni garantiza recuperarse de cualquier fallo de red o del proveedor. Consulta <code>/var/log/rclone-gdrive.log</code> y <code>journalctl -u rclone-gdrive.service -f</code>.",
|
||||
"vfsCalloutTitle": "¿Por qué usar --vfs-cache-mode writes?",
|
||||
"vfsCalloutBody": "Con caché de escritura, operaciones como <code>fwrite</code> escriben en una caché local en disco. rclone sube el archivo cuando se cierra y transcurre el intervalo de escritura diferida. Reserva espacio local para las copias en curso y verifica que la subida termine antes de dar por disponible la copia remota."
|
||||
},
|
||||
"configureBackup": {
|
||||
"heading": "5. Configurar el backup para que aterrice en la nube",
|
||||
"heading": "5. Configurar la nube como destino de las copias",
|
||||
"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:",
|
||||
"after": "Cuando termine vzdump, espera a que finalice la subida de rclone en segundo plano y comprueba el archivo en la interfaz del proveedor:",
|
||||
"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>:",
|
||||
"body": "Los archivos vzdump de Proxmox son <strong>copias completas, no incrementales</strong>. Su tamaño real depende de los datos incluidos y de la compresión, no solo de la capacidad del disco virtual. Si un archivo ocupa 30 GB, conservar cinco requiere unos 150 GB. Configura una política de retención para evitar que la nube se llene.",
|
||||
"uiPath": "En la interfaz de Proxmox: <strong>Centro de datos → Copias de seguridad → [tu tarea] → Retención</strong>:",
|
||||
"image7Alt": "Ajustes de retención de backup en Proxmox",
|
||||
"starterIntro": "Valores iniciales razonables para un montaje doméstico / de laboratorio:",
|
||||
"starterItems": [
|
||||
@@ -109,11 +109,11 @@
|
||||
"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."
|
||||
"<strong><code>Mount point /mnt/gdrive is itself on a fuse.rclone filesystem</code>:</strong> el directorio ya está montado, quizá por otra instancia de rclone. Comprueba que no haya copias en curso antes de quitar el montaje anterior con <code>fusermount -uz /mnt/gdrive</code> y reinicia la unidad systemd.",
|
||||
"<strong>La copia es muy lenta:</strong> confirma que <code>--vfs-cache-mode writes</code> figure en la línea <code>ExecStart</code>. Revisa el rendimiento de la caché local, la velocidad de subida y los límites del proveedor. La subida puede continuar después de terminar vzdump.",
|
||||
"<strong>La copia falla con No space left on device:</strong> revisa el espacio de la caché local y la cuota del proveedor. La caché suele estar en <code>~/.cache/rclone/</code>. Si se llena, elige una ruta como <code>--cache-dir /var/cache/rclone</code> en un sistema de archivos con espacio; cambiar de ruta dentro del mismo sistema lleno no ayuda.",
|
||||
"<strong>El token de rclone ha caducado:</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 renovar la autorización.",
|
||||
"<strong>Las copias llegan a la nube, pero fallan al restaurarlas:</strong> evita que la nube sea el <strong>único</strong> destino de las copias. Combínala con PBS local o vzdump en otro disco."
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
{
|
||||
"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.",
|
||||
"description": "Tutoriales detallados de Proxmox VE: Kodi en LXC con aceleración por GPU, controladores NVIDIA en PVE 9, un disco USB compartido por Samba desde un contenedor y copias vzdump a Google Drive, Mega, Dropbox o OneDrive. Incluye recursos seleccionados 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.",
|
||||
"ogDescription": "Tutoriales detallados de Proxmox VE: acceso directo a GPU, Kodi en LXC, discos USB compartidos por Samba, copias en la nube con rclone y recursos seleccionados 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"
|
||||
"twitterDescription": "Tutoriales detallados de Proxmox VE: GPU, Kodi en LXC, Samba, copias en la nube y mucho más.",
|
||||
"ogImageAlt": "Guías ProxMenux — Tutoriales detallados de 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."
|
||||
"tagline": "Tutoriales en profundidad, referencias rápidas y recursos seleccionados de la comunidad para aprovechar 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.",
|
||||
"intro": "Tutoriales detallados para tareas concretas de Proxmox. Cada uno explica los pasos manuales de un proceso automatizado por ProxMenux, para que puedas ver qué se hace en cada etapa.",
|
||||
"items": [
|
||||
{
|
||||
"slug": "kodi-lxc",
|
||||
@@ -34,7 +34,7 @@
|
||||
{
|
||||
"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."
|
||||
"description": "Instalación y configuración manual de los controladores NVIDIA en un host Proxmox VE 9 y del acceso a la GPU desde uno o varios contenedores LXC. Incluye el controlador, el servicio de persistencia, el parche NVENC opcional y la configuración de cada contenedor."
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -48,7 +48,7 @@
|
||||
},
|
||||
"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."
|
||||
"description": "Selección de comandos útiles de Linux y Proxmox organizada por temas, con copia al portapapeles. Recoge la referencia disponible en el menú de ProxMenux."
|
||||
},
|
||||
"linuxResources": {
|
||||
"title": "Recursos de Linux",
|
||||
@@ -84,18 +84,18 @@
|
||||
},
|
||||
"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.",
|
||||
"intro": "Proyectos de código abierto y listas seleccionadas de la comunidad Proxmox. 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."
|
||||
"title": "awesome-proxmox-ve (lista de recursos seleccionados)",
|
||||
"description": "Amplia colección de recursos de Proxmox VE seleccionados por la comunidad: herramientas, bibliotecas, integraciones, blogs y vídeos. Un 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."
|
||||
"suggestRich": "¿Conoces algún recurso de calidad que falte? Abre un issue o un PR en <link>GitHub</link>. Queremos mantener una selección útil, en lugar de una lista exhaustiva."
|
||||
},
|
||||
"discussion": {
|
||||
"heading": "Discusión de la comunidad",
|
||||
|
||||
@@ -12,18 +12,18 @@
|
||||
},
|
||||
"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.",
|
||||
"calloutBody": "Esta guía utiliza un script externo de la comunidad para preparar el LXC de Kodi. ProxMenux también puede configurar el acceso a la iGPU del host: <strong>GPUs y Coral-TPU → Añadir GPU a LXC</strong> configura <code>/dev/dri</code> e instala los controladores dentro del contenedor. El script siguiente instala además Kodi y el arranque automático en <code>tty7</code>. Úsalo para preparar un centro multimedia en LXC; elige el <gpuLink>asistente de ProxMenux</gpuLink> si solo necesitas dar acceso a la GPU a un contenedor que ya has configurado.",
|
||||
"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."
|
||||
"Dar acceso al teclado, ratón o mando USB desde el contenedor.",
|
||||
"(Opcional) Actualizar Kodi desde los repositorios configurados en el contenedor."
|
||||
]
|
||||
},
|
||||
"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>:",
|
||||
"body": "Para este procedimiento, selecciona <strong>Privileged</strong> en los ajustes avanzados del script. Por defecto crea contenedores sin privilegios, que requieren permisos de dispositivos y mapeo de identificadores adecuados. El script configura el acceso a la GPU, Kodi y su arranque 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."
|
||||
},
|
||||
@@ -32,22 +32,22 @@
|
||||
"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",
|
||||
"afterList": "En los dispositivos de caracteres, toma el número major situado antes de la coma (en el ejemplo, <code>13</code>). Detén el LXC de Kodi y edita su configuración; sustituye <code>'<'CTID'>'</code> por su ID, 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",
|
||||
"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'>'",
|
||||
"restartCode": "pct reboot CTID",
|
||||
"plug": "Conecta el teclado / ratón / mando y Kodi debería responder."
|
||||
},
|
||||
"updateKodi": {
|
||||
"heading": "3. (Opcional) Actualizar Kodi a la última versión",
|
||||
"heading": "3. (Opcional) Actualizar Kodi desde los repositorios configurados",
|
||||
"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>.",
|
||||
"calloutBody": "El PPA team-xbmc es <strong>solo para Ubuntu</strong> y Kodi indica que ya no tiene mantenimiento. Que falte <code>add-apt-repository</code> no identifica la distribución. Compruébala con <code>cat /etc/os-release</code> y busca <code>NAME=\"Ubuntu\"</code>; no añadas PPA de Ubuntu a Debian. Los comandos siguientes actualizan los paquetes desde los repositorios configurados en el contenedor.",
|
||||
"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."
|
||||
"code": "apt update\napt install --only-upgrade kodi kodi-bin",
|
||||
"after": "Reinicia el contenedor después de actualizar. Kodi utilizará la versión disponible en los repositorios configurados, que puede diferir de la última versión del proyecto."
|
||||
},
|
||||
"screenshots": {
|
||||
"heading": "Capturas",
|
||||
@@ -57,14 +57,14 @@
|
||||
"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."
|
||||
"<strong>El LXC de Kodi arranca pero no se ve nada en la TV:</strong> puede que el contenedor no tenga acceso a la iGPU. Comprueba <code>ls /dev/dri</code> en su interior: deberían aparecer <code>card0</code> y <code>renderD128</code>. Si está vacío, revisa el acceso a la GPU; puedes usar el menú <strong>Añadir GPU a LXC</strong> de ProxMenux.",
|
||||
"<strong>El teclado o ratón no se detecta tras reiniciar:</strong> comprueba que <code>/dev/input</code> esté montado y Kodi tenga permiso para leer los dispositivos. Ejecuta <code>ls -l /dev/input</code> en el host y el contenedor, y revisa la regla <code>lxc.cgroup2.devices.allow</code>.",
|
||||
"<strong>La reproducción acelerada por hardware usa la CPU en lugar de la GPU:</strong> instala o actualiza los controladores VA-API en el contenedor: <code>intel-media-va-driver</code> para iGPU Intel modernas, <code>i965-va-driver</code> para las antiguas y <code>mesa-va-drivers</code> para AMD.",
|
||||
"<strong><code>add-apt-repository: command not found</code>:</strong> falta el comando; eso no demuestra que el contenedor sea Debian. Comprueba la distribución y los paquetes disponibles. En Debian, utiliza sus paquetes Kodi sin añadir el PPA de Ubuntu."
|
||||
]
|
||||
},
|
||||
"further": {
|
||||
"heading": "Más lecturas",
|
||||
"konpatRich": "<konpatLink>El post de Konpat</konpatLink> — contexto adicional sobre passthrough de iGPU Intel a LXC."
|
||||
"heading": "Más información",
|
||||
"konpatRich": "<konpatLink>Artículo de Konpat</konpatLink> con más contexto sobre el acceso a la iGPU Intel desde LXC."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
"section": "Guías"
|
||||
},
|
||||
"recommended": {
|
||||
@@ -17,7 +17,7 @@
|
||||
"<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."
|
||||
"calloutOutro": "Los asistentes gestionan las particularidades de permisos de los contenedores sin privilegios, los perfiles de lectura y escritura, solo lectura o personalizados y el grupo sharedfiles. Esta guía explica los pasos manuales para que puedas entenderlos o configurarlos por tu cuenta."
|
||||
},
|
||||
"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:",
|
||||
@@ -34,8 +34,8 @@
|
||||
"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>)."
|
||||
"privilegedCalloutTitle": "Contenedor privilegiado para este procedimiento",
|
||||
"privilegedCalloutBody": "Este procedimiento utiliza un LXC privilegiado con un dispositivo de bloque como <code>mp0</code>. Para un contenedor sin privilegios, una alternativa es montar el sistema de archivos en el host y pasar su directorio mediante bind mount, con permisos y mapeo de identificadores adecuados. Consulta <strong>Almacenamiento y recursos compartidos → Puntos de montaje LXC</strong> en ProxMenux."
|
||||
},
|
||||
"attach": {
|
||||
"heading": "1. Conectar el disco USB al LXC",
|
||||
@@ -48,29 +48,29 @@
|
||||
"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.",
|
||||
"stableCalloutCode": "ls -l /dev/disk/by-id/",
|
||||
"stableCalloutAfter": "Utiliza la entrada <code>/dev/disk/by-id/usb-...</code> de la partición elegida en la configuración LXC, en lugar de <code>/dev/sdb1</code>. Escoge la partición, no el disco completo: así seguirá identificada aunque cambie el orden de los dispositivos.",
|
||||
"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:",
|
||||
"formatBody": "ext4 es una opción práctica para recursos compartidos desde Linux: distingue mayúsculas, admite ACL POSIX y archivos grandes. El formateo destruye el contenido del sistema de archivos existente. Confirma la partición y ejecuta el comando en el <strong>host Proxmox</strong>:",
|
||||
"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",
|
||||
"wireHeading": "1.4 Configurar el dispositivo en LXC",
|
||||
"wireBody": "En el <strong>host Proxmox</strong>, edita la configuración del contenedor. Sustituye <code>'<'CTID'>'</code> por su ID:",
|
||||
"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.",
|
||||
"wireBackupNote": "El ejemplo utiliza <code>backup=0</code>. El contenido de los montajes de dispositivos y de tipo bind no se incluye en las copias <code>vzdump</code> del contenedor. Prepara una copia independiente de los datos del disco externo.",
|
||||
"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",
|
||||
"restartCode": "pct reboot CTID",
|
||||
"permsBody": "Dentro del LXC, crea el usuario del recurso compartido antes de asignarle la propiedad y ajusta los permisos del directorio:",
|
||||
"permsCode": "adduser --system --group --no-create-home --shell /usr/sbin/nologin proxmenux\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."
|
||||
"permsNote": "Sustituye <code>proxmenux</code> por el nombre que elijas. El modo <code>770</code> permite acceder al propietario y al grupo, sin acceso para otros; es más restrictivo que <code>chmod -R 777</code>. El usuario se crea aquí y se registra en Samba en el paso 2.2."
|
||||
},
|
||||
"samba": {
|
||||
"heading": "2. Instalar Samba",
|
||||
@@ -78,17 +78,17 @@
|
||||
"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",
|
||||
"userHeading": "2.2 Verificar el usuario del recurso compartido",
|
||||
"userBody": "El usuario <code>proxmenux</code> se creó en el paso 1.5 como usuario del sistema sin shell de inicio de sesión. Compruébalo antes de establecer la contraseña Samba; utiliza el nombre que hayas elegido en todos los pasos:",
|
||||
"userCode": "id 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"
|
||||
"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 # default ACL — applies to new files"
|
||||
},
|
||||
"configure": {
|
||||
"heading": "3. Configurar el share de Samba",
|
||||
"heading": "3. Configurar el recurso compartido Samba",
|
||||
"editHeading": "3.1 Editar smb.conf",
|
||||
"editCode": "nano /etc/samba/smb.conf",
|
||||
"appendBody": "Añade una definición de share al final:",
|
||||
@@ -109,11 +109,11 @@
|
||||
"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."
|
||||
"<strong><code>pct reboot</code> falla con “device not found”:</strong> comprueba que la ruta del dispositivo en <code>mp0</code> exista en el host. Revisa <code>ls -l /dev/disk/by-id/</code> y corrígela si hace falta.",
|
||||
"<strong>El CT arranca, pero <code>/mnt/lxc_USB</code> está vacío:</strong> puede faltar el montaje o estar vacío el sistema de archivos. Comprueba desde el host con <code>pct exec '<'CTID'>' -- mount | grep lxc_USB</code>. Si no aparece el montaje, revisa su configuración, la ruta del dispositivo y los errores de arranque.",
|
||||
"<strong>Samba autentica, pero falla al escribir con “Permission denied”:</strong> revisa los permisos Linux del directorio y los ajustes de escritura del recurso compartido. Comprueba <code>chown</code> y <code>setfacl</code> en las secciones 1.5 y 2.3.",
|
||||
"<strong>El recurso no aparece en la red, pero <code>smb://'<'ip'>'/lxc_usb</code> funciona:</strong> el descubrimiento NetBIOS antiguo utiliza <code>nmbd</code>. Windows moderno usa WS-Discovery; en Debian 12/13 instala <code>apt-get install -y wsdd</code> y revisa el servicio y el cortafuegos. Habilitar solo <code>nmbd</code> no proporciona WS-Discovery.",
|
||||
"<strong>Para añadir otro usuario al recurso compartido:</strong> créalo con <code>adduser</code>, regístralo con <code>smbpasswd -a</code> y añádelo a la lista <code>valid users =</code>, separada por comas. Concede también los permisos o ACL necesarios en el sistema de archivos."
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
{
|
||||
"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.",
|
||||
"description": "Instalación y configuración manual de los controladores NVIDIA en un host Proxmox VE 9 y del acceso a la GPU desde uno o varios contenedores LXC. Incluye el controlador, el servicio de persistencia, el parche NVENC opcional y la configuración de cada 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.",
|
||||
"description": "Instalación y configuración manual de los controladores NVIDIA en un host Proxmox VE 9 y del acceso a la GPU desde uno o varios contenedores LXC. Incluye el controlador, el servicio de persistencia, el parche NVENC opcional y la configuración de cada 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.",
|
||||
"calloutBody": "Este procedimiento manual se conserva como referencia. Para la mayoría de usuarios recomendamos el asistente de ProxMenux: <strong>Instalar controladores NVIDIA en el host</strong>, en <em>GPUs y Coral-TPU</em>, y después <strong>Añadir GPU a LXC</strong> o <strong>Añadir GPU a VM</strong> para configurar el invitado. El asistente realiza los mismos pasos con comprobaciones adicionales de las cabeceras del kernel, IOMMU y conflictos VFIO. Esta página permite entender cada comando o adaptar la configuración.",
|
||||
"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": [
|
||||
@@ -20,19 +20,19 @@
|
||||
"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."
|
||||
"Dar acceso a la GPU a uno o varios contenedores LXC e instalar la versión correspondiente del controlador en cada uno."
|
||||
]
|
||||
},
|
||||
"prepareHost": {
|
||||
"heading": "1. Preparar el host (PVE 9)",
|
||||
"blacklistHeading": "1.1 Blacklist de nouveau",
|
||||
"blacklistHeading": "1.1 Bloquear 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",
|
||||
"blacklistAddCode": "echo \"blacklist nouveau\" >> /etc/modprobe.d/blacklist.conf\nupdate-initramfs -u -k all\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.",
|
||||
"reposBody": "Las herramientas de postinstalación pueden haber configurado ya los repositorios. Revisa las fuentes existentes y omite los cambios que ya estén hechos; no dupliques entradas.",
|
||||
"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:",
|
||||
@@ -47,7 +47,7 @@
|
||||
"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:",
|
||||
"pickBody": "Elige una rama del controlador compatible con tu GPU y el kernel en uso. La más reciente puede excluir modelos antiguos; consulta la lista de productos compatibles de la versión NVIDIA elegida:",
|
||||
"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",
|
||||
@@ -56,27 +56,27 @@
|
||||
"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",
|
||||
"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": "Ejecuta el instalador. La opción siguiente puede desactivar <code>nouveau</code> si hace falta; quizá necesites reiniciar antes de completar la instalación:",
|
||||
"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",
|
||||
"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",
|
||||
"modulesAddBody": "Añade los módulos NVIDIA necesarios para el host y LXC. Los módulos VFIO son para acceso directo desde una VM y no hacen falta para este procedimiento LXC:",
|
||||
"modulesAddCode": "nvidia\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''\"",
|
||||
"udevRulesCode": "# /etc/udev/rules.d/70-nvidia.rules\nKERNEL==\"nvidia\", RUN+=\"/bin/bash -c '/usr/bin/nvidia-smi -L'\"\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:",
|
||||
"body": "El servicio de persistencia mantiene la GPU inicializada cuando ninguna otra aplicación la usa. Reduce la latencia de reinicialización y conserva el estado de inicialización entre clientes:",
|
||||
"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",
|
||||
@@ -86,7 +86,7 @@
|
||||
},
|
||||
"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.",
|
||||
"body": "El límite de sesiones NVENC depende del modelo de GPU y de la versión del controlador; consulta la matriz de NVIDIA en vez de asumir una cifra por generación. El parche keylase elimina el límite de software en las versiones compatibles. Puede ayudar en tareas de codificación como la transcodificación de Plex o Jellyfin.",
|
||||
"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."
|
||||
@@ -103,24 +103,36 @@
|
||||
"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)" }
|
||||
{
|
||||
"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",
|
||||
"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",
|
||||
"editConfigCode": "lxc.cgroup2.devices.allow: c 195:* rwm\nlxc.cgroup2.devices.allow: c 509:* 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",
|
||||
"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.",
|
||||
"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": "Revisa las preguntas y limita esta instalación a las bibliotecas de espacio de usuario. No compiles ni instales un módulo del kernel dentro del LXC.",
|
||||
"installCtImageAlt": "Instalación del driver NVIDIA",
|
||||
"verifyCtHeading": "5.4 Verificar dentro del contenedor",
|
||||
"verifyCtSmiCode": "nvidia-smi",
|
||||
@@ -129,25 +141,25 @@
|
||||
"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.",
|
||||
"workloadBody": "Activa la aceleración NVIDIA en Plex o Jellyfin, transcodifica un vídeo y comprueba el uso real de la GPU en su panel o registros. Instalar el controlador no activa por sí solo la aceleración en la aplicación.",
|
||||
"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."
|
||||
"repeatNote": "Repite la <strong>sección 5</strong> para cada contenedor adicional que necesite la GPU. Cuando actualices el controlador del host, mantén sincronizadas las bibliotecas de espacio de usuario de todos los contenedores."
|
||||
},
|
||||
"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."
|
||||
"body": "Si Docker ya está instalado en el LXC, instala <code>nvidia-container-toolkit</code> dentro para dar acceso a la GPU a sus contenedores Docker. El acceso desde el LXC debe funcionar primero. Estos comandos son para Docker ejecutado como root:",
|
||||
"code": "apt-get update\napt-get install -y ca-certificates curl gnupg\ncurl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor --yes -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg\ncurl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' > /etc/apt/sources.list.d/nvidia-container-toolkit.list\napt-get update\napt-get install -y nvidia-container-toolkit\nnvidia-ctk runtime configure --runtime=docker\nsystemctl restart docker",
|
||||
"after": "Estos comandos configuran el repositorio de NVIDIA, instalan el toolkit, configuran el entorno de Docker y lo reinician. Siguen aplicándose los permisos de dispositivos y las restricciones cgroup del LXC; verifica la GPU con una carga de prueba."
|
||||
},
|
||||
"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."
|
||||
"<strong><code>nvidia-smi</code> funciona en el host, pero muestra “No devices found” en el contenedor:</strong> revisa los montajes, permisos y versiones de las bibliotecas. Si difieren, instala la misma <code>'<'VERSION'>'</code> del host dentro del contenedor con <code>--no-kernel-module</code>.",
|
||||
"<strong>Falla la compilación del controlador:</strong> consulta el registro. “No precompiled kernel interface was found” puede indicar que el instalador debe compilar localmente. Instala las cabeceras de <code>uname -r</code> con <code>apt-get install pve-headers-$(uname -r)</code> o el paquete proxmox-headers equivalente.",
|
||||
"<strong>Las sesiones NVENC siguen limitadas:</strong> confirma que el parche admita el controlador activo. Una actualización puede sobrescribirlo. Para una versión compatible, vuelve a aplicar <code>./patch.sh</code> desde <code>/opt/nvidia/nvidia-patch</code> y revisa su salida.",
|
||||
"<strong>La GPU deja de responder tras estar inactiva:</strong> comprueba <code>systemctl status nvidia-persistenced</code> y activa el servicio si corresponde. Revisa también los registros del kernel y del controlador; no es la única causa posible.",
|
||||
"<strong>El contenedor arranca, pero <code>ls /dev/nv*</code> no muestra dispositivos NVIDIA:</strong> revisa los bind mounts y las rutas del host. Usa <code>ls -l /dev/nv*</code> en el host para verificar los números major de NVIDIA y comprueba las reglas <code>lxc.cgroup2.devices.allow</code> y los permisos."
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user