Describe the GPU and Coral assistants as the scripts run them

This commit is contained in:
MacRimi
2026-10-18 16:34:35 +02:00
parent 023c512df3
commit 1f0c78608d
48 changed files with 210 additions and 210 deletions
@@ -6,7 +6,7 @@
"header": {
"title": "Añadir Coral TPU a LXC",
"description": "Comparte una Coral USB Accelerator o M.2 / Mini-PCIe con un LXC. ProxMenux configura el contenedor y el runtime Edge TPU. Esta opción solo gestiona la TPU: para Quick Sync, VA-API o NVENC, ejecuta también Añadir GPU a LXC.",
"section": "Hardware: GPUs y Coral-TPU"
"section": "Hardware: GPU y Coral-TPU"
},
"intro": {
"title": "Qué hace",
@@ -18,7 +18,7 @@
},
"prereqs": {
"title": "Antes de empezar",
"drivers": "<strong>Prepara la Coral en el host</strong>. M.2 / PCIe necesita el controlador cargado; USB, acceso al dispositivo y permisos adecuados. Consulta <hostLink>Instalar Coral TPU en el host</hostLink>. El runtime de la aplicación debe estar dentro del contenedor.",
"drivers": "<strong>Prepara la Coral en el host</strong>. M.2 / PCIe necesita el controlador cargado; USB, acceso al dispositivo y permisos adecuados. Consulta <hostLink>Instalar Coral TPU en el host</hostLink>. El script instala el runtime de la aplicación en contenedores Debian/Ubuntu; en otras distribuciones hay que instalarlo aparte.",
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
"container": "<strong>Un LXC existente</strong>, preferiblemente basado en <strong>Debian / Ubuntu</strong>: la instalación usa <code>apt-get</code>. Los <strong>contenedores de otras distribuciones</strong> pueden usar el <strong>modo de solo acceso al dispositivo</strong>, que omite la instalación APT de <code>libedgetpu</code>. Resulta útil si la aplicación ya incluye ese runtime, como la imagen Docker de Frigate.",
"downtime": "<strong>Prepara una breve interrupción</strong> del contenedor. El script lo detiene para cambiar la configuración y lo arranca para instalar el runtime. No necesita reiniciar el host para estos cambios."
@@ -44,7 +44,7 @@
},
"gpuHint": {
"title": "Sugerencia opcional de acceso a GPU",
"body": "Si detecta GPU pero no está configurada para el contenedor, recomienda <lxcGpuLink>Añadir GPU a LXC</lxcGpuLink> para decodificación de vídeo (Quick Sync, VA-API o NVDEC). Pregunta si quieres continuar solo con Coral: Sí continúa; No sale para que configures antes la GPU."
"body": "Si detecta GPU pero no está configurada para el contenedor, recomienda <lxcGpuLink>Añadir GPU a LXC</lxcGpuLink> para decodificación de vídeo (Quick Sync, VA-API o NVENC). Pregunta si quieres continuar solo con Coral: Sí continúa; No sale para que configures antes la GPU."
},
"usb": {
"title": "Configurar el acceso USB del LXC",
@@ -55,7 +55,7 @@
"pcie": {
"title": "Configurar el acceso M.2 / PCIe del LXC",
"body1": "Si detecta una Coral M.2 / PCIe y existe <code>/dev/apex_0</code>, usa la API <code>dev</code> de Proxmox para gestionar cgroup2 tanto en LXC privilegiados como sin privilegios:",
"body2": "Si acabas de ejecutar <hostLink>Instalar Coral en el host</hostLink> y aún no existe <code>/dev/apex_0</code>, utiliza la configuración clásica cgroup2 y un montaje opcional con <code>create=file</code>. Esto no crea un dispositivo funcional por sí solo:",
"body2": "Si acabas de ejecutar <hostLink>Instalar Coral en el host</hostLink> y aún no existe <code>/dev/apex_0</code>, escribe un montaje con <code>create=file</code> y, solo si el número mayor de apex aparece en <code>/proc/devices</code>, una regla clásica cgroup2. Ninguno de los dos crea un dispositivo funcional:",
"rebootTitle": "Reinicia el host primero si acabas de instalar los drivers de Coral",
"rebootBody": "El montaje alternativo no carga <code>apex</code> en el host. Carga el controlador o reinicia tras instalarlo y comprueba el dispositivo. Cuando esté listo, ejecuta otra vez el script para aplicar la entrada moderna y reinicia el contenedor."
},
@@ -92,7 +92,7 @@
"troubleshoot": {
"heading": "Solución de problemas",
"apexTitle": "El LXC arranca pero falta /dev/apex_0",
"apexBody": "Comprueba el controlador del host: <code>lsmod | grep apex</code>. Si falta, prueba <code>modprobe apex</code> o reinicia tras instalarlo. Cuando exista <code>/dev/apex_0</code> en el host, verifica la configuración del LXC y reinícialo con <code>pct stop &lt;ctid&gt; &amp;&amp; pct start &lt;ctid&gt;</code>.",
"apexBody": "Comprueba el controlador del host: <code>lsmod | grep apex</code>. Si falta, prueba <code>modprobe apex</code> o reinicia tras instalarlo. Cuando exista <code>/dev/apex_0</code> en el host, verifica la configuración del LXC (vuelve a ejecutar el script si solo se escribieron las entradas alternativas) y reinícialo con <code>pct stop &lt;ctid&gt; &amp;&amp; pct start &lt;ctid&gt;</code>.",
"replugTitle": "Coral USB desaparece al conectarla a otro puerto",
"replugBody": "Comprueba que el LXC monta <code>/dev/bus/usb</code> y no el enlace <code>/dev/coral</code>. La configuración debe incluir <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code>, sin depender directamente de <code>/dev/coral</code>. Vuelve a ejecutar el script si conservas una configuración antigua.",
"alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime sin instalar",
@@ -6,7 +6,7 @@
"header": {
"title": "Añadir GPU a VM (Passthrough)",
"description": "Detecta GPU Intel, AMD o NVIDIA y prepara acceso directo desde una VM. Revisa IOMMU y los dispositivos asociados, configura VFIO y la VM y aplica sus reglas de compatibilidad. Comprueba siempre todos los dispositivos afectados.",
"section": "Hardware: GPUs y Coral-TPU"
"section": "Hardware: GPU y Coral-TPU"
},
"intro": {
"title": "Qué hace",
@@ -45,7 +45,7 @@
"heading": "Proceso paso a paso",
"detect": {
"title": "Detectar GPUs y comprobar IOMMU",
"body": "Comprueba IOMMU activo, no solo parámetros. Con confirmación aparte puede añadir <code>intel_iommu=on</code> o <code>amd_iommu=on</code> con <code>iommu=pt</code>. Elige <code>/etc/kernel/cmdline</code> si encuentra una marca ZFS como <code>root=ZFS=</code>; si no, <code>/etc/default/grub</code>. Es una heurística, no una prueba del cargador. Reinicia para activar el cambio y revisa los grupos reales.",
"body": "Considera IOMMU activo solo si el kernel en ejecución tiene <code>intel_iommu=on</code> o <code>amd_iommu=on</code> y existen grupos IOMMU. Si el parámetro ya está guardado para el próximo arranque, continúa en modo pendiente de reinicio; si no, con confirmación aparte puede añadirlo con <code>iommu=pt</code>. Elige <code>/etc/kernel/cmdline</code> si encuentra una marca ZFS como <code>root=ZFS=</code>; si no, <code>/etc/default/grub</code>. Es una heurística, no una prueba del cargador. Reinicia para activar el cambio y revisa los grupos reales.",
"tipTitle": "¿Ya configuraste la postinstalación?",
"tipBody": "Si el <postLink>soporte VFIO IOMMU</postLink> ya está configurado y activo en el kernel, supera la comprobación. Guardarlo para el próximo arranque no prueba que esté activo ahora.",
"imageAlt": "Lista de GPUs detectadas con fabricante y dirección PCI"
@@ -58,10 +58,10 @@
"<strong>Una sola GPU.</strong> La consola local puede perder su salida al reservarla para VFIO. Comprueba antes el acceso SSH o web desde otro equipo.",
"<strong>Política de reinicio AMD.</strong> Lee <code>/sys/bus/pci/devices/&lt;pci&gt;/reset_method</code>. Una APU o dedicada sin FLR queda <em>bloqueada por la política del asistente</em>; un subtipo desconocido sin FLR exige confirmación. No demuestra que sea imposible en todo entorno.",
"<strong>Estado D3cold.</strong> El asistente bloquea tarjetas AMD que indican <code>D3cold</code> por riesgo de fallo al activarlas. Revisa alimentación y firmware antes de continuar.",
"<strong>Grupo IOMMU.</strong> Lee <code>/sys/kernel/iommu_groups/</code> e incluye <em>todos los miembros que no sean puentes</em>, incluso controladores de red o discos. Revísalos antes de confirmar. Si falta reiniciar para activar IOMMU, solo puede planificar inicialmente la función GPU; comprueba el aislamiento después."
"<strong>Grupo IOMMU.</strong> Lee <code>/sys/kernel/iommu_groups/</code> e incluye <em>todos los miembros que no sean puentes</em>, incluso controladores de red o discos. El script no los muestra, así que revisa el grupo antes de confirmar. Si falta reiniciar para activar IOMMU, solo puede planificar inicialmente la función GPU; comprueba el aislamiento después."
],
"audioIntro": "<strong>Audio asociado.</strong> Dos casos según dónde esté el controlador:",
"audioDgpu": "<strong>GPU dedicada:</strong> el audio HDMI suele ocupar la función <code>.1</code> de la misma ranura y se incluye al detectarlo. Si el host lo usaba, pierde acceso al reservarlo para la VM.",
"audioDgpu": "<strong>GPU dedicada:</strong> el audio HDMI suele ocupar la función <code>.1</code> del mismo slot y se incluye al detectarlo. Si el host lo usaba, pierde acceso al reservarlo para la VM.",
"audioIgpu": "<strong>Sin función de audio <code>.1</code>:</strong> puede estar en otro dispositivo, como <code>00:1f.3</code>. Lista controladores y sus drivers, por ejemplo <code>snd_hda_intel</code>. Por defecto no selecciona <strong>ninguno</strong>; elige solo los necesarios."
},
"pickVm": {
@@ -75,22 +75,22 @@
"items": [
"<strong>GPU disponible.</strong> Continúa sin retirar asignaciones.",
"<strong>Asignada a otra VM.</strong> Detén primero la VM origen. Puedes <em>conservar sus entradas y desactivar el arranque automático</em> o <em>retirarlas conservando el arranque automático</em>. Si ya usa <code>vfio-pci</code> y no requiere cambios del host, el traspaso VM→VM puede evitar reiniciar el host.",
"<strong>Usada por LXC.</strong> En contenedores normales elige <em>conservar configuración y desactivar arranque automático</em> o <em>retirar dispositivos y reglas antiguas <code>lxc.cgroup2.devices.allow</code>/<code>lxc.mount.entry</code>, conservando arranque automático</em>. OCI conserva la configuración y se detiene sin arranque automático; retira su GPU desde Apps. La detección por familia puede afectar a otras tarjetas similares."
"<strong>Usada por LXC.</strong> En contenedores normales elige <em>conservar configuración y desactivar arranque automático</em> o <em>eliminar la configuración de la GPU y conservar arranque automático</em>. Esta opción elimina las entradas <code>devN</code> y, en AMD/Intel, también las reglas antiguas <code>lxc.mount.entry</code> de <code>/dev/dri</code> y <code>lxc.cgroup2.devices.allow</code>. OCI conserva la configuración y se detiene sin arranque automático; elimina su GPU desde Apps del gestor OCI. La detección por familia puede afectar a otras tarjetas similares."
],
"imageAlt": "Diálogo que ofrece quitar la GPU de un LXC antes de asignarla a la VM",
"imageAlt": "Diálogo que ofrece eliminar la GPU de un LXC antes de asignarla a la VM",
"smartTitle": "Revisión de audio asociado al retirar la GPU",
"smartBody": "Después ofrece una lista de <strong>audio posiblemente sin uso</strong> en la VM origen. Desmarca lo que aún necesite. Por ejemplo, puede conservar <code>02:00.1</code> y ofrecer retirar <code>00:1f.3</code>. La lista decide qué audio adicional se quita; no garantiza toda asociación entre pantalla y audio."
"smartBody": "Después ofrece una lista de <strong>audio posiblemente sin uso</strong> en la VM origen. Desmarca lo que aún necesite. Por ejemplo, puede conservar <code>02:00.1</code> y ofrecer retirar <code>00:1f.3</code>. La lista decide qué audio adicional se elimina; no garantiza toda asociación entre pantalla y audio."
},
"audioPick": {
"title": "Si no hay audio .1, selecciona los controladores que necesites",
"body": "Solo ocurre para iGPUs Intel y setups similares con audio separado. Una checklist muestra cada controlador de audio PCI del host (excluyendo cualquiera ya en el grupo IOMMU de la GPU), etiquetado con su driver actual. Selecciona los que quieras — o ninguno, si la VM no necesita audio del hardware del host.",
"imageAlt": "Diálogo checklist con cada controlador de audio PCI del host (BDF + driver) cuando la GPU no tiene audio hermano .1",
"warnTitle": "No selecciones audio que necesita el host",
"warnBody": "Asignar audio puede quitar acceso al host; tampoco puede pertenecer a otra VM activa a la vez. Deja audio opcional sin seleccionar si no lo necesitas y revisa sus asignaciones. El pitido de consola no procede necesariamente del audio PCI."
"warnBody": "Asignar audio puede dejar al host sin acceso; tampoco puede pertenecer a otra VM activa a la vez. Deja audio opcional sin seleccionar si no lo necesitas y revisa sus asignaciones. El pitido de consola no procede necesariamente del audio PCI."
},
"summary": {
"title": "Revisar el resumen de confirmación",
"body": "Revisa el plan final, sobre todo cada miembro del grupo IOMMU, y cancela si no es correcto. Detiene los cambios principales, pero no revierte una activación de IOMMU confirmada anteriormente.",
"body": "Revisa el plan final y cancela si no es correcto. Muestra el grupo IOMMU y su número de dispositivos, no cada miembro, así que revisa el grupo antes. Cancelar detiene los cambios principales, pero no revierte una activación de IOMMU confirmada anteriormente.",
"imageAlt": "Resumen de cambios previstos en host y VM"
},
"hostApply": {
@@ -102,7 +102,7 @@
"Escribe <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> y <code>kvm.conf</code> con <code>allow_unsafe_interrupts=1</code> e <code>ignore_msrs=1</code>. Son ajustes del script, no requisitos universales de Windows/macOS; permitir interrupciones inseguras reduce esa protección.",
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Estas reglas por fabricante pueden afectar a otras tarjetas con el mismo controlador. El módulo <code>nvidia</code> se bloquea <strong>solo</strong> mediante <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> cuando <em>todas</em> las NVIDIA del host están reservadas a VFIO.",
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Solo NVIDIA.</strong> Aplica <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> al evento PCI ADD de BDF registrados, incluidas funciones del grupo IOMMU afectado. Fuera de esos grupos puede conservarse <code>nvidia</code>. La política por BDF no divide grupos IOMMU.",
"<strong>Solo AMD.</strong> Intenta extraer ROM de <code>/sys/bus/pci/.../rom</code> o ACPI VFCT a <code>/usr/share/kvm/vbios_&lt;card&gt;.bin</code>. Si funciona, usa <code>romfile=</code>. Una ROM válida no garantiza que la GPU se inicialice.",
"<strong>Solo AMD.</strong> Intenta extraer ROM de <code>/sys/bus/pci/.../rom</code> o ACPI VFCT a <code>/usr/share/kvm/vbios_&lt;vendor&gt;_&lt;device&gt;.bin</code>. Si funciona, usa <code>romfile=</code>. Una ROM válida no garantiza que la GPU se inicialice.",
"<strong>Solo NVIDIA.</strong> Detiene y deshabilita <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> solo cuando todas las NVIDIA están reservadas para VFIO. En uso mixto conserva los servicios y <code>nvidia</code> para las tarjetas nativas.",
"<code>update-initramfs -u -k all</code> — solo se ejecuta si algo de lo de arriba ha cambiado realmente."
]
@@ -148,7 +148,7 @@
},
"revert": {
"heading": "Deshacer cambios manualmente",
"intro": "Detén la VM y retira solo sus asignaciones PCI correspondientes desde Hardware o mediante el índice explícito del ejemplo. Quitarla de la VM no devuelve la GPU al controlador del host. Para eso usa Cambiar modo de GPU y revisa los invitados afectados antes de confirmar."
"intro": "Detén la VM y retira solo sus asignaciones PCI correspondientes desde Hardware o mediante el índice explícito del ejemplo. Eliminarla de la VM no devuelve la GPU al controlador del host. Para eso usa Cambiar modo de GPU y revisa los invitados afectados antes de confirmar."
},
"related": {
"heading": "Relacionado",
@@ -6,11 +6,11 @@
"header": {
"title": "Añadir GPU a LXC",
"description": "Comparte acceso a GPU con LXC mediante dispositivos del host. El controlador sigue en el host; las aplicaciones usan bibliotecas compatibles y requieren su propia configuración.",
"section": "Hardware: GPUs y Coral-TPU"
"section": "Hardware: GPU y Coral-TPU"
},
"intro": {
"title": "Qué hace",
"body": "Añade entradas <code>dev&lt;N&gt;</code> a <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code> para los dispositivos <code>/dev/dri/*</code>, <code>/dev/kfd</code> o <code>/dev/nvidia*</code> que correspondan. Arranca el LXC e instala paquetes según la distribución, alineando los grupos <code>video</code> y <code>render</code>. La aceleración requiere hardware y bibliotecas compatibles y configurar la app."
"body": "Añade entradas <code>dev&lt;N&gt;</code> a <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code> para los dispositivos <code>/dev/dri/*</code>, <code>/dev/kfd</code> o <code>/dev/nvidia*</code> que correspondan. Arranca el LXC, instala paquetes según la distribución y, en Intel/AMD, alinea los grupos <code>video</code> y <code>render</code>. La aceleración requiere hardware y bibliotecas compatibles y configurar la app."
},
"compare": {
"heading": "Compartir con LXC frente a asignar a una VM",
@@ -78,7 +78,7 @@
},
"pickCt": {
"title": "Elige un contenedor LXC",
"body": "Lista los LXC admitidos por ID y nombre. Excluye OCI: sus dispositivos se gestionan en Apps del gestor OCI. Detiene el LXC para configurarlo, lo arranca para instalar y normalmente recupera su estado inicial.",
"body": "Lista los LXC admitidos por ID y nombre. Excluye OCI: sus dispositivos se gestionan en Apps del gestor OCI. Detiene el LXC si está en marcha, lo arranca para instalar y normalmente recupera su estado inicial.",
"imageAlt": "Selección de un contenedor LXC existente"
},
"selectGpu": {
@@ -98,7 +98,7 @@
},
"applyConfig": {
"title": "Aplica los cambios de config del LXC",
"body1": "Detiene el LXC y edita <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code>. Las entradas <code>dev&lt;N&gt;</code> incluyen los GID elegidos. Usa el mecanismo <code>dev:</code> en lugar de reglas manuales <code>lxc.mount.entry</code>. Revisa configuración y permisos resultantes.",
"body1": "Detiene el LXC si está en marcha y edita <code>/etc/pve/lxc/&lt;ctid&gt;.conf</code>. Las entradas <code>dev&lt;N&gt;</code> llevan el GID <code>video</code> o <code>render</code> del host. Sustituye las líneas <code>lxc.mount.entry</code> de <code>/dev/dri</code> por entradas <code>dev:</code>. Revisa configuración y permisos resultantes.",
"body2": "Ejemplo después de Intel + NVIDIA en el mismo contenedor:"
},
"installDrivers": {
@@ -127,14 +127,14 @@
},
"alignGids": {
"title": "Alinear GIDs y restaurar el estado",
"body1": "Lee los GID del host para <code>video</code> y <code>render</code>; usa 44/104 solo como alternativa. Ajusta <code>/etc/group</code> dentro del LXC. <code>video:44</code> y <code>render:104</code> son ejemplos, no valores universales. Verifica grupos de la app y permisos efectivos.",
"body1": "En Intel/AMD, lee los GID del host para <code>video</code> y <code>render</code>; usa 44/104 solo como alternativa. Ajusta <code>/etc/group</code> dentro del LXC; si solo hay NVIDIA, omite este paso. <code>video:44</code> y <code>render:104</code> son ejemplos, no valores universales. Verifica grupos de la app y permisos efectivos.",
"body2": "Al completar normalmente, vuelve a detener el LXC si inicialmente estaba parado; si estaba funcionando, lo deja activo. Ante un fallo de arranque o instalación, revisa el estado final y el registro."
}
},
"vendors": {
"heading": "Notas por fabricante",
"intelHeading": "iGPU Intel",
"intelBody": "La aceleración Intel, incluido <em>Quick Sync</em>, depende de generación, códecs y configuración de la app. Comparte nodos existentes como <code>/dev/dri/card0</code> y <code>/dev/dri/renderD128</code>, cuya numeración puede variar. Debe crearlos antes el controlador nativo del host, como <code>i915</code>.",
"intelBody": "La aceleración Intel, incluido <em>Quick Sync</em>, depende de generación, códecs y configuración de la app. Comparte los nodos que existan entre <code>/dev/dri/card0</code>, <code>card1</code>, <code>renderD128</code> y <code>renderD129</code>; no añade otros números. Debe crearlos antes el controlador nativo del host, como <code>i915</code>.",
"amdHeading": "AMD",
"amdBody": "AMD usa DRI para Mesa/VA-API. Si existe <code>/dev/kfd</code> en el host, lo comparte también. ROCm/OpenCL requiere hardware y paquetes compatibles; compartir el dispositivo no instala toda la pila ROCm.",
"nvidiaHeading": "NVIDIA",
@@ -6,7 +6,7 @@
"header": {
"title": "Instalar Coral TPU en el host",
"description": "Prepara el host Proxmox para usar Coral y compartirla con LXC. Detecta M.2 / Mini-PCIe, USB o ambos y ejecuta el proceso correspondiente: módulos DKMS para PCIe y runtime Google Edge TPU para USB.",
"section": "Hardware: GPUs y Coral-TPU"
"section": "Hardware: GPU y Coral-TPU"
},
"intro": {
"title": "Qué hace",
@@ -71,7 +71,7 @@
"title": "PCIe: módulos gasket y apex mediante DKMS",
"body": "Solo se ejecuta si detecta una Coral PCIe/M.2. Compila módulos para el kernel que está ejecutando el host.",
"items": [
"<strong>Limpieza.</strong> Si una instalación anterior de <code>gasket-dkms</code> dejó paquetes en mal estado, intenta purgarla antes de compilar.",
"<strong>Limpieza.</strong> Elimina cualquier paquete <code>gasket-dkms</code> existente antes de compilar; si está en mal estado, fuerza su eliminación y lo purga.",
"<strong>Dependencias de compilación:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
],
"cloneIntro": "<strong>Clona el controlador.</strong> Prefiere <feranickLink>feranick/gasket-driver</feranickLink> y recurre a <googleLink>google/gasket-driver</googleLink> si no está disponible. Compilar requiere compatibilidad con el kernel. Al código de Google le aplica estos parches según la versión:",
@@ -115,7 +115,7 @@
"Antes de indicar que ha terminado correctamente, el script verifica que el paquete antiguo ya no existe y que el gestor de paquetes está en buen estado."
],
"warningTitle": "Confirma primero el hardware",
"warningBody": "Si esperabas una Coral PCIe/M.2 y no aparece, cancela la limpieza y revisa tarjeta, ranura y firmware."
"warningBody": "Si esperabas una Coral PCIe/M.2 y no aparece, cancela la limpieza y revisa tarjeta, slot y firmware."
},
"reinstallUninstall": {
"heading": "Reinstalar o desinstalar",
@@ -128,11 +128,11 @@
"uninstallIntro": "Requiere confirmación. Las apps LXC que usan <code>/dev/apex_*</code> pueden perder acceso durante la desinstalación o tras reiniciar. El proceso es:",
"uninstallItems": [
"Intenta descargar <code>apex</code> y <code>gasket</code>; si están en uso pueden permanecer cargados.",
"Quita cada entrada <code>gasket/&lt;version&gt;</code> registrada en DKMS para que los módulos no vuelvan en la siguiente instalación de kernel.",
"Elimina cada entrada <code>gasket/&lt;version&gt;</code> registrada en DKMS para que los módulos no vuelvan en la siguiente instalación de kernel.",
"Purga <code>gasket-dkms</code>, <code>libedgetpu1-std</code> y <code>libedgetpu1-max</code> y ejecuta <code>apt-get autoremove --purge</code>.",
"Elimina <code>/etc/udev/rules.d/99-coral-apex.rules</code> y restaura el grupo predeterminado de <code>60-gasket-dkms.rules</code> si aún existe.",
"Consulta los miembros secundarios de <code>apex</code>. <strong>Si la lista está vacía</strong>, intenta eliminar el grupo; si no, conserva <code>apex</code> y muestra sus miembros. No comprueba por completo los usuarios que lo tienen como grupo principal.",
"Elimina repositorios antiguos como <code>/etc/apt/sources.list.d/coral-edgetpu.list</code> y llaveros llamados <code>coral-edgetpu-archive-keyring.gpg</code>. Este proceso no elimina el llavero actual /etc/apt/keyrings/coral-edgetpu.gpg.",
"Elimina la lista del repositorio <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, la antigua <code>coral-cloud.list</code> y los llaveros antiguos llamados <code>coral-edgetpu-archive-keyring.gpg</code>. Este proceso no elimina el llavero actual <code>/etc/apt/keyrings/coral-edgetpu.gpg</code>.",
"Ofrece reiniciar <strong>solo si estaba instalado PCIe</strong> para descargar los módulos que sigan activos. Desinstalar solo USB no requiere reinicio."
],
"lxcWarnTitle": "Contenedores LXC con passthrough de apex",
@@ -172,7 +172,7 @@
"dkmsFailTitle": "Falla la compilación DKMS tras actualizar el kernel",
"dkmsFailBody": "Una causa posible son cabeceras ausentes. Comprueba <code>proxmox-headers-$(uname -r)</code> con <code>dpkg -l proxmox-headers-$(uname -r)</code>. Instálalas si faltan y revisa incompatibilidades en el registro. Al repetir ejecuta <code>cleanup_broken_gasket_dkms</code>, pero limpiar no garantiza compatibilidad con cualquier kernel.",
"apexMissTitle": "/dev/apex_0 no está después del reinicio",
"apexMissBody": "Comprueba la detección PCIe y que el módulo corresponda al kernel activo. Prueba <code>modprobe apex</code> y consulta <code>dmesg | grep -iE \"apex|gasket\"</code>. Fallos de compilación, carga o configuración de ranura/firmware pueden impedir crear el dispositivo.",
"apexMissBody": "Comprueba la detección PCIe y que el módulo corresponda al kernel activo. Prueba <code>modprobe apex</code> y consulta <code>dmesg | grep -iE \"apex|gasket\"</code>. Fallos de compilación, carga o configuración de slot/firmware pueden impedir crear el dispositivo.",
"lxcMissTitle": "El host ve /dev/apex_0, pero el LXC no",
"lxcMissBody": "Ver el nodo no prueba que funcione. Verifica acceso en el host, montaje LXC, reglas cgroup y permisos de UID/GID. Consulta <lxcLink>Añadir Coral TPU a un LXC</lxcLink>.",
"usbUnreachTitle": "USB Accelerator detectado pero Frigate / TFLite no llega a él",
@@ -6,11 +6,11 @@
"header": {
"title": "Instalar drivers NVIDIA en el host",
"description": "Instala NVIDIA en el host Proxmox VE. Filtra las ramas mantenidas según el ID PCI de la GPU, comprueba la compilación, usa DKMS, gestiona nouveau e instala persistencia. También puede actualizar bibliotecas de LXC con acceso NVIDIA.",
"section": "Hardware: GPUs y Coral-TPU"
"section": "Hardware: GPU y Coral-TPU"
},
"intro": {
"title": "Qué hace",
"body": "Detecta la GPU y ofrece ramas mantenidas que incluyen su ID PCI. Bloquea <code>nouveau</code>, descarga el instalador oficial <code>.run</code>, usa DKMS e instala <code>nvidia-persistenced</code> y reglas udev, con parche NVENC opcional. Las comprobaciones de compilación evalúan el kernel actual; compilar no garantiza que todas las apps funcionen. Puede actualizar bibliotecas de LXC NVIDIA."
"body": "Detecta la GPU y ofrece ramas mantenidas que incluyen su ID PCI. Bloquea <code>nouveau</code>, descarga el instalador oficial <code>.run</code>, usa DKMS, instala <code>nvidia-persistenced</code>, reglas udev y NVIDIA Container Toolkit, con parche NVENC opcional. Las comprobaciones de compilación evalúan el kernel actual; compilar no garantiza que todas las apps funcionen. Ofrece actualizar las bibliotecas de los LXC NVIDIA existentes, con la misma versión salvo en Arch."
},
"who": {
"heading": "¿Para quién es esto?",
@@ -60,7 +60,7 @@
"title": "Preparar el sistema",
"body": "Durante la preparación, el script:",
"items": [
"Comprueba repositorios antes de quitar o instalar componentes. Si no hay suscripción y solo está Enterprise, pide permiso para usar no-subscription; si rechazas el cambio, detiene la instalación.",
"Comprueba repositorios antes de eliminar o instalar componentes. Si no hay suscripción y solo está Enterprise, pide permiso para usar no-subscription; si rechazas el cambio, detiene la instalación.",
"Instala <code>pve-headers-$(uname -r)</code> (o <code>proxmox-headers-$(uname -r)</code>), <code>build-essential</code> y <code>dkms</code>.",
"Crea <code>/etc/modprobe.d/proxmenux-nouveau-blacklist.conf</code>, gestionado por ProxMenux, con <code>blacklist nouveau</code> y <code>options nouveau modeset=0</code>. Registra si añadió la línea complementaria a <code>blacklist.conf</code> e intenta descargar nouveau.",
"Escribe <code>/etc/modules-load.d/nvidia-vfio.conf</code> con <code>nvidia</code> y <code>nvidia_uvm</code> para que los módulos se carguen pronto en el arranque."
@@ -89,7 +89,7 @@
},
"reboot": {
"title": "Reiniciar",
"body": "Regenera <code>initramfs</code> para todos los kernels y ofrece reiniciar. <strong>Planifica ese reinicio</strong> para verificar módulos y bloqueo de nouveau en un arranque limpio, aunque el controlador ya responda antes."
"body": "Tras instalar el controlador, regenera <code>initramfs</code> para todos los kernels; el último paso ofrece reiniciar. <strong>Planifica ese reinicio</strong> para verificar módulos y bloqueo de nouveau en un arranque limpio, aunque el controlador ya responda antes."
}
},
"reinstallUninstall": {
@@ -102,9 +102,9 @@
"uninstallHeading": "Desinstalar — qué se elimina",
"uninstallIntro": "Tras confirmar con Sí/No, desinstala estos componentes:",
"uninstallItems": [
"Ejecuta <code>nvidia-uninstall --silent</code> para la instalación <code>.run</code>, detiene y deshabilita <code>nvidia-persistenced</code> y <code>nvidia-powerd</code> e intenta descargar <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> y <code>nvidia</code>. Afecta a las apps LXC que usan NVIDIA; clientes activos pueden impedir la descarga.",
"Ejecuta <code>apt purge</code> sobre <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> y <code>libcudnn*</code>, quita el árbol fuente DKMS y la caché del instalador .run de <code>/opt/nvidia</code>.",
"Quita la configuración de carga de módulos (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) y las entradas de blacklist de nouveau creadas por ProxMenux. También migra y elimina los archivos antiguos de ProxMenux con las dos líneas conocidas; conserva los archivos modificados o ajenos del administrador.",
"Detiene y desactiva <code>nvidia-persistenced</code> y <code>nvidia-powerd</code>, intenta descargar <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> y <code>nvidia</code> y después ejecuta <code>nvidia-uninstall --silent</code> para la instalación <code>.run</code>. Afecta a las apps LXC que usan NVIDIA; clientes activos pueden impedir la descarga.",
"Ejecuta <code>apt purge</code> sobre <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> y <code>libcudnn*</code>, elimina el árbol fuente DKMS y las carpetas <code>nvidia-persistenced</code> y <code>nvidia-patch</code> de <code>/opt/nvidia</code>.",
"Elimina la configuración de carga de módulos (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) y las entradas de blacklist de nouveau creadas por ProxMenux. También migra y elimina los archivos antiguos de ProxMenux con las dos líneas conocidas; conserva los archivos modificados o ajenos del administrador.",
"Retira <code>/etc/udev/rules.d/70-nvidia.rules</code> y marca el estado NVENC como <em>removed</em> en el registro de instalaciones gestionadas; no hay un archivo de estado separado.",
"Regenera <code>initramfs</code> para todos los kernels, ejecuta <code>proxmox-boot-tool refresh</code> según la configuración de arranque y solicita reiniciar."
],
@@ -6,7 +6,7 @@
"header": {
"title": "Cambiar modo GPU (VM ↔ LXC)",
"description": "Cambia una GPU asignada entre acceso directo a VM y uso compartido en LXC. ProxMenux gestiona controlador, VFIO, módulos e initramfs y pregunta cómo tratar los invitados afectados. Revisa las opciones y verifica el resultado tras reiniciar.",
"section": "Hardware: GPUs y Coral-TPU"
"section": "Hardware: GPU y Coral-TPU"
},
"intro": {
"title": "Qué hace",
@@ -42,21 +42,21 @@
},
{
"situation": "Quiero retirar todas las asignaciones de esta GPU.",
"use": "El modo LXC devuelve la GPU al controlador del host; retira las asignaciones de invitados con las opciones de conflicto correspondientes. No deja la GPU sin controlador."
"use": "El modo LXC devuelve la GPU al controlador del host; la política de conflictos de VM puede eliminar las entradas hostpci, pero las entradas de dispositivo de los LXC hay que eliminarlas aparte. No deja la GPU sin controlador."
}
]
},
"prereqs": {
"title": "Antes de empezar",
"assigned": "<strong>Una GPU ya asignada</strong> a una VM por VFIO o a un LXC. Para la primera asignación, usa Añadir GPU a VM / LXC.",
"iommu": "<strong>IOMMU debe estar activo en el host</strong> al pasar <em>a</em> modo VM. Depende del firmware y del kernel; no siempre hacen falta parámetros explícitos. Si es necesario, intenta añadir <code>intel_iommu=on iommu=pt</code> o <code>amd_iommu=on</code> según el arranque, con <code>proxmox-boot-tool refresh</code> o <code>update-grub</code>. Revisa los avisos y reinicia cuando lo solicite.",
"iommu": "<strong>IOMMU debe estar activo en el host</strong> al pasar <em>a</em> modo VM. Depende del firmware y del kernel. Si al kernel en ejecución le falta <code>intel_iommu=on</code> o <code>amd_iommu=on</code>, el script lo añade con <code>iommu=pt</code> a <code>/etc/kernel/cmdline</code> (marca de raíz ZFS) o a <code>/etc/default/grub</code> y ejecuta <code>proxmox-boot-tool refresh</code> o <code>update-grub</code>. Revisa los avisos y reinicia cuando lo solicite.",
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
"reboot": "<strong>Planifica un reinicio.</strong> Los cambios persistentes de controlador y arranque pueden requerir regenerar initramfs y reiniciar. El script muestra la solicitud al terminar.",
"knowList": "<strong>Identifica las VM y LXC que usan la GPU.</strong> El script detecta referencias y pregunta qué hacer con cada invitado; conocerlos facilita revisar la selección."
},
"blocklist": {
"title": "No todas las GPUs son seguras para pasar a una VM",
"body": "El script bloquea el modo VM para ciertos ID, incluidos <code>8086:5a84</code> y <code>8086:5a85</code>, por su política de compatibilidad. Si coincide la GPU, muestra un aviso. Esta lista no impide pasar <em>a</em> LXC, aunque siguen aplicándose otras comprobaciones."
"body": "El script bloquea el modo VM para los ID <code>8086:5a84</code> y <code>8086:5a85</code> por su política de compatibilidad. Si coincide la GPU elegida, detiene el cambio a modo VM y vuelve a la selección de GPU, o sale si es la única GPU. Esta lista no impide pasar <em>a</em> LXC, aunque siguen aplicándose otras comprobaciones."
},
"running": {
"heading": "Ejecutar el script",
@@ -85,7 +85,7 @@
"intro": "Según el modo actual, el script propone el opuesto como destino:",
"items": [
"<strong>VM → LXC:</strong> retira la asignación a <code>vfio-pci</code> para que el controlador nativo (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) pueda usar la GPU. En NVIDIA elimina las entradas BDF correspondientes de <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> para el próximo arranque.",
"<strong>LXC → VM:</strong> prepara la asignación a <code>vfio-pci</code>. AMD / Intel bloquea el controlador nativo y usa <code>options vfio-pci ids=…</code>. En NVIDIA, <code>nvidia</code> <strong>no</strong> se bloquea globalmente: las reglas BDF aplican <code>driver_override=vfio-pci</code> a los dispositivos de los grupos IOMMU afectados. Las GPU externas a esos grupos pueden conservar <code>nvidia</code>. Revisa cada miembro del grupo."
"<strong>LXC → VM:</strong> prepara la asignación a <code>vfio-pci</code>. AMD / Intel bloquea el controlador nativo y usa <code>options vfio-pci ids=…</code>. En NVIDIA, <code>nvidia</code> solo se bloquea globalmente si todas las GPU NVIDIA del host están en VFIO; si no, las reglas BDF aplican <code>driver_override=vfio-pci</code> a los dispositivos de los grupos IOMMU afectados y las GPU NVIDIA externas a esos grupos conservan <code>nvidia</code>. Revisa cada miembro del grupo."
],
"outro": "Confirma la dirección o cancela."
},
@@ -98,7 +98,7 @@
"keepPolicy": "Conservar configuración y desactivar arranque automático",
"keepEffect": "<code>pct set CTID -onboot 0</code> o <code>qm set VMID -onboot 0</code>. Conserva las entradas de GPU.",
"keepWhen": "Si piensas reutilizar el invitado cuando la GPU vuelva al modo anterior. Opción predeterminada conservadora.",
"removePolicy": "Quitar GPU de la config",
"removePolicy": "Eliminar la GPU de la configuración",
"removeEffect": "Retira las entradas <code>hostpci</code> / <code>dev</code> identificadas y las referencias antiguas compatibles.",
"removeWhen": "Elígelo si el invitado debe funcionar sin GPU. Revisa antes la aplicación: el uso alternativo de CPU depende de ella y retirar el dispositivo no la reconfigura automáticamente.",
"imageAlt": "Diálogo para elegir qué hacer con cada VM o LXC afectado"
@@ -133,7 +133,7 @@
"stillVfioTitle": "La GPU sigue mostrando vfio-pci tras cambiar a modo LXC",
"stillVfioBody": "Un módulo VFIO cargado no demuestra qué controlador usa esta GPU. Revisa la tarjeta y si finalizaron <code>update-initramfs</code> y el reinicio. <code>lsmod | grep vfio</code> solo lista módulos. En AMD / Intel revisa <code>vfio.conf</code>; en NVIDIA, <code>/etc/proxmenux/vfio-bind.bdfs</code> y <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code>. Corrige las reglas antiguas antes de ejecutar <code>update-initramfs -u -k all</code> y reiniciar.",
"vmFailTitle": "Una VM no arranca tras pasar la GPU a LXC",
"vmFailBody": "Comprueba si conserva referencias <code>hostpci</code> obsoletas. La política <em>Quitar GPU de la configuración</em> puede retirarlas durante el cambio previsto; revisa la dirección antes de repetir el script para no invertir el modo por error. También puedes retirar la asignación en Proxmox con la VM parada.",
"vmFailBody": "Comprueba si conserva referencias <code>hostpci</code> obsoletas. La política <em>Eliminar la GPU de la configuración</em> puede retirarlas durante el cambio previsto; revisa la dirección antes de repetir el script para no invertir el modo por error. También puedes retirar la asignación en Proxmox con la VM parada.",
"smiFailTitle": "nvidia-smi muestra «Driver/library version mismatch» al volver a LXC",
"smiFailBody": "Compara el módulo NVIDIA cargado con las bibliotecas instaladas, también en LXC. Iguala versiones: reiniciar carga el módulo instalado, pero no corrige paquetes incompatibles. Recargar con <code>modprobe -r nvidia</code> y <code>modprobe nvidia</code> requiere detener los clientes GPU y puede fallar si hay módulos dependientes en uso.",
"logTitle": "Registro de ejecución",