diff --git a/web/app/[locale]/docs/hardware/gpu-vm-passthrough/page.tsx b/web/app/[locale]/docs/hardware/gpu-vm-passthrough/page.tsx index f93b4470..959a01aa 100644 --- a/web/app/[locale]/docs/hardware/gpu-vm-passthrough/page.tsx +++ b/web/app/[locale]/docs/hardware/gpu-vm-passthrough/page.tsx @@ -149,96 +149,6 @@ export default async function GpuVmPassthroughPage({
{t("howRuns.body")}
-
-{`┌─────────────────────────────────────────────┐
-│ PHASE 1 — Gather info, validate, confirm │
-│ (nothing touched yet) │
-└──────────────────┬──────────────────────────┘
- ▼
- ┌────────────┴────────────┐
- ▼ ▼
- lspci detects IOMMU enabled?
- GPUs (Intel/AMD/ ├─ No → offer to add
- NVIDIA) │ intel_iommu=on /
- │ │ amd_iommu=on
- ▼ └─ Yes → continue
- User selects GPU
- │
- ▼
- Pre-flight checks
- ├─ Not in SR-IOV
- ├─ Not D3cold (AMD)
- ├─ Has FLR or equivalent reset
- ├─ Not on the block-list (Intel Arc, Apollo Lake)
- ├─ Warn if single-GPU host
- └─ Resolve IOMMU group
- │
- ▼
- User selects VM
- │
- ▼
- VM is q35? ── No → abort
- │
- Yes
- ▼
- GPU already assigned elsewhere?
- │
- ├─ To LXC → menu: keep + disable onboot
- │ OR remove GPU lines + keep onboot
- ├─ To other VM (running) → abort
- ├─ To other VM (stopped) → menu: keep + disable onboot
- │ OR remove GPU lines + keep onboot
- │ (fast-path: already vfio-pci → no
- │ host reconfig, no reboot needed)
- └─ Free → continue
- │
- ▼
- Audio companion
- ├─ Has .1 sibling? (dGPU: NVIDIA/AMD HDMI)
- │ → auto-include (never used by host)
- └─ No .1 sibling? (Intel iGPU, split audio)
- → checklist of host audio controllers,
- default = none (user opts in)
- │
- ▼
- Show confirmation summary
- (GPU + IOMMU siblings + audio + target VM)
- │
- ┌─────── Cancel OR Confirm ────┐
- ▼ ▼
- exit, nothing ┌─────────────┴──────────────┐
- was changed │ PHASE 2 — Apply changes │
- └─────────────┬──────────────┘
- ▼
- Host:
- ├─ /etc/modules (vfio_*)
- ├─ /etc/modprobe.d/vfio.conf (ids=... disable_vga=1)
- ├─ /etc/modprobe.d/blacklist.conf (vendor drivers only)
- ├─ kernel cmdline (IOMMU if missing)
- ├─ NVIDIA: per-BDF udev rule at
- │ 10-proxmenux-vfio-bind.rules
- │ + BDF state at vfio-bind.bdfs
- │ (blacklist nvidia only when
- │ every NVIDIA GPU is in VFIO)
- ├─ AMD: dump ROM → vbios__.bin
- └─ update-initramfs -u -k all
- + proxmox-boot-tool refresh
-
- VM config (qm set ):
- ├─ hostpci0 = GPU (x-vga=1 unless Intel iGPU)
- ├─ hostpci1..n = IOMMU group siblings
- ├─ hostpci = audio function(s)
- ├─ vga = std
- └─ NVIDIA: cpu=host,hidden=1
- args=... hv_vendor_id=NV43FIX
- │
- ▼
- ┌───────────────┴───────────────┐
- │ PHASE 3 — Summary + reboot │
- └───────────────────────────────┘
- Show what changed. If host config
- touched → prompt reboot.`}
-
{t("revert.intro")}
{t("howRuns.body")}
-
-{`┌─────────────────────────────────────────────┐
-│ PHASE 1 — Detect, select, validate │
-│ (nothing touched yet) │
-└──────────────────┬──────────────────────────┘
- ▼
- lspci detects Intel / AMD / NVIDIA GPU(s)
- (NVIDIA: also check nvidia module loaded +
- nvidia-smi, capture host driver version)
- │
- ▼
- User picks LXC container from the list
- │
- ▼
- User selects which GPU(s) to add
- (checklist; auto-selects if only one)
- │
- ▼
- Pre-flight checks
- ├─ Not in SR-IOV (VF / active PF) → block
- ├─ Bound to vfio-pci? → offer Switch Mode, exit
- └─ Already configured in this CT? → filter out
- (skip duplicates, warn if partial)
- │
- ┌─────── Cancel OR Confirm ────┐
- ▼ ▼
- Exit, nothing ┌──────────────────┴──────────────────┐
- was changed │ PHASE 2 — Configure + install │
- └──────────────────┬──────────────────┘
- ▼
- Stop container (if running)
- │
- ▼
- Write LXC config (/etc/pve/lxc/.conf):
- ├─ Intel / AMD iGPU:
- │ dev: /dev/dri/card* gid=video
- │ dev: /dev/dri/renderD* gid=render
- ├─ AMD with ROCm (if /dev/kfd):
- │ dev: /dev/kfd gid=render
- └─ NVIDIA:
- dev: /dev/nvidia0..N
- dev: /dev/nvidiactl · nvidia-uvm*
- dev: /dev/nvidia-modeset
- dev: /dev/nvidia-caps/* (if exists)
- │
- ▼
- Install GPU guard hookscript
- (same one used by VM passthrough, if
- available — prevents conflicts on start/stop)
- │
- ▼
- Start container + wait for readiness
- (pct exec — true, up to ~30 s)
- │
- ▼
- Install userspace drivers inside CT
- (distro auto-detected)
- ├─ Intel → apk/pacman/apt
- │ (intel-media-driver,
- │ libva-utils, opencl-icd)
- ├─ AMD → Mesa VA drivers
- │ (mesa-va-drivers, libva)
- └─ NVIDIA →
- ├─ Alpine: apk add nvidia-utils
- ├─ Arch: pacman -S nvidia-utils
- └─ Debian/Ubuntu/others:
- host .run is pre-extracted, packed,
- pct push'd into the container, run
- with --no-kernel-modules --no-dkms
- │
- ▼
- Align GIDs in /etc/group inside CT
- (video=44, render=104 to match host)
- │
- ▼
- Restore container state
- (stop if it was stopped before)
- │
- ▼
- Show summary + nvidia-smi output
- (if NVIDIA) + log path`}
-
{t("howRuns.body")}
-
-{`Detect Coral hardware
- │
- ├─ PCIe / M.2 detected ──► build gasket + apex with DKMS
- │ └─ reboot recommended
- │
- ├─ USB detected ─────────► install libedgetpu runtime
- │ └─ no reboot required
- │
- └─ no PCIe / M.2 detected
- ├─ no legacy gasket-dkms state ─► no PCIe changes
- └─ legacy gasket-dkms state ────► offer optional cleanup
- └─ USB runtime untouched`}
-
{t("howRuns.body")}
-
-{`┌─────────────────────────────────────────────┐
-│ PHASE 1 — Detect, validate, pick version │
-│ (nothing touched yet) │
-└──────────────────┬──────────────────────────┘
- ▼
- ┌────────────┴────────────┐
- ▼ ▼
- lspci detects GPU bound to
- NVIDIA GPU(s) vfio-pci? ──→ Abort
- │ │ (remove VM
- │ No passthrough first)
- ▼
- nvidia-smi: driver already installed?
- │
- ├─ No → continue (fresh install)
- └─ Yes → ask: Reinstall/Update OR Remove
- │
- ├─ Remove → complete uninstall
- │ + reboot prompt
- └─ Reinstall → continue
- │
- ▼
- Show install overview
- (GPU list + current driver +
- LXC containers with NVIDIA passthrough)
- │
- ▼
- Kernel-compat filter:
- ├─ Kernel 6.17+ → driver 580.82.07+
- ├─ Kernel 6.8–16 → driver 550+
- ├─ Kernel 6.2–7 → driver 535+
- └─ Kernel 5.15+ → driver 470+
- │
- ▼
- User picks version (or "Latest")
- │
- ┌─────── Cancel OR Confirm ────┐
- ▼ ▼
- Exit, nothing ┌─────────────┴──────────────┐
- was changed │ PHASE 2 — Install driver │
- └─────────────┬──────────────┘
- ▼
- Prepare host:
- ├─ Install pve-headers-$(uname -r)
- ├─ Install build-essential + dkms
- ├─ Blacklist nouveau + unload
- │ └ /etc/modprobe.d/nouveau-blacklist.conf
- ├─ Write modules-load config
- │ └ /etc/modules-load.d/nvidia-vfio.conf
- ├─ Stop/disable nvidia services
- └─ Unload residual nvidia modules
- If different version already present:
- └─ clean uninstall first (apt purge,
- remove DKMS entries)
- │
- ▼
- Download NVIDIA .run installer
- to /opt/nvidia (validate size +
- executable signature)
- │
- ▼
- Run installer with --dkms
- --disable-nouveau --no-nouveau-check
- │
- ▼
- Install udev rules
- └─ /etc/udev/rules.d/70-nvidia.rules
- + clone NVIDIA/nvidia-persistenced
- │
- ▼
- update-initramfs -u -k all
- │
- ▼
- nvidia-smi — verify driver loaded
- │
- ┌───────────────┴───────────────┐
- │ PHASE 3 — Optional extras │
- └───────────────┬───────────────┘
- ▼
- LXC containers with NVIDIA?
- ├─ Yes → offer driver propagation
- │ (Alpine: apk · Arch: pacman ·
- │ Debian/others: extract .run)
- └─ No → skip
- │
- ▼
- keylase/nvidia-patch (NVENC limit)?
- ├─ Yes → clone + apply
- └─ No → skip
- │
- ▼
- Reboot prompt — required to finalize
- nouveau blacklist + load new module`}
-
{t.rich("walkthrough.download.body", { code })}
/etc/pve/lxc/<ctid>.conf. Startet den Container und installiert Googles libedgetpu-Laufzeit. GPU-Zugriff wird getrennt über apt-get. Container anderer Distributionen können den reinen Passthrough-Modus nutzen, der die APT-Installation von libedgetpu überspringt. Geeignet, wenn die Anwendung die Laufzeit bereits mitbringt, etwa das Frigate-Docker-Image.",
+ "downtime": "Kurze Ausfallzeit einplanen. Das Skript stoppt den Container für die Konfiguration und startet ihn zur Laufzeitinstallation. Für diese Änderungen ist kein Host-Neustart nötig."
+ },
+ "hostPrep": {
+ "title": "Host muss zuerst vorbereitet werden",
+ "body": "M.2 / PCIe benötigt gasket/apex auf dem Host und einen funktionierenden Geräteknoten. USB benötigt das angeschlossene Gerät und Berechtigungen; die App muss nicht auf dem Host laufen. libedgetpu muss am Ausführungsort der App vorhanden sein. Reihenfolge: Host vorbereiten → LXC-Gerätezugriff → App einrichten."
+ },
+ "running": {
+ "heading": "Skript ausführen",
+ "body": "Öffnen Sie in ProxMenux Hardware: GPUs und Coral-TPU → Coral TPU zu LXC hinzufügen.",
+ "imageAlt": "Menüpunkt Coral TPU zu LXC hinzufügen im Hardware-Menü"
+ },
+ "howRuns": {
+ "heading": "Ablauf des Skripts",
+ "body": "Wählen Sie den Container. Das Skript richtet USB-Zugriff auch ohne angeschlossene USB-Coral ein und ergänzt M.2 / PCIe bei erkannter Hardware."
+ },
+ "walkthrough": {
+ "heading": "Schritt für Schritt",
+ "pick": {
+ "title": "LXC-Container auswählen",
+ "body": "Die Auswahl zeigt geeignete Container aus pct list; OCI-Container werden ausgeblendet und über Apps im OCI-Manager verwaltet. Wählen Sie einen laufenden oder gestoppten Container. Das Skript stoppt ihn bei Bedarf, konfiguriert ihn und startet die Laufzeitinstallation."
+ },
+ "gpuHint": {
+ "title": "Optionaler Hinweis zum GPU-Zugriff",
+ "body": "Wird eine GPU erkannt, die für diesen Container nicht konfiguriert ist, empfiehlt ein Dialog /dev/coral und bindet den gesamten Baum /dev/bus/usb in den Container ein. Diese Konfiguration wird auch ohne angeschlossene USB-Coral geschrieben und stellt mehr als nur dieses Gerät bereit.",
+ "whyTitle": "Warum /dev/bus/usb statt /dev/coral?",
+ "whyBody": "Der USB-Pfad, etwa /dev/bus/usb/001/005, ändert sich beim Umstecken. Ältere Versionen banden den Link /dev/coral ein und konnten dadurch einen veralteten Pfad behalten. Der gesamte USB-Baum macht den aktuellen Geräteknoten sichtbar. Die Anwendung muss es gegebenenfalls erneut öffnen."
+ },
+ "pcie": {
+ "title": "M.2-/PCIe-Zugriff im LXC konfigurieren",
+ "body1": "Bei erkannter M.2-/PCIe-Coral und vorhandenem /dev/apex_0 nutzt das Skript die Proxmox-API dev für cgroup2-Berechtigungen in privilegierten und unprivilegierten LXC:",
+ "body2": "Wenn nach /dev/apex_0 vorhanden ist, schreibt das Skript einen Bind-Mount mit create=file und, nur wenn die Apex-Major-Nummer in /proc/devices aufgeführt ist, eine klassische cgroup2-Regel. Keines von beiden erzeugt ein funktionsfähiges Gerät:",
+ "rebootTitle": "Starten Sie den Host zuerst neu, wenn Sie gerade Coral-Treiber installiert haben",
+ "rebootBody": "Der Ersatz-Mount lädt den Host-Treiber apex nicht. Laden Sie ihn oder starten Sie nach der Installation neu und prüfen Sie das Gerät. Führen Sie das Skript danach erneut für den modernen Geräteeintrag aus und starten Sie den Container neu."
+ },
+ "drivers": {
+ "title": "LXC starten und Coral-Laufzeit installieren",
+ "body": "Startet den Container und wartet bis zu 15 Sekunden auf den Status running. Anschließend führt es den Installer über pct exec im Container aus. Dieser:",
+ "items": [
+ "Führt apt-get update aus.",
+ "Installiert die Voraussetzungen für das Coral-Repository: gnupg, curl, ca-certificates.",
+ "Importiert Googles Coral GPG-Schlüssel in /etc/apt/keyrings/coral-edgetpu.gpg (moderner Pfad, wie er vom Host-Installationsprogramm verwendet wird) und fügt das coral-edgetpu-stable APT-Repository mit signed-by= hinzu.",
+ "Installiert standardmäßig libedgetpu1-std. Bei erkannter M.2-Coral stehen libedgetpu1-std und libedgetpu1-max zur Wahl. Die Paketauswahl richtet die Erkennung in der Anwendung nicht automatisch ein."
+ ],
+ "noIgpuTitle": "Warum werden hier keine iGPU-Treiber installiert?",
+ "noIgpuBody": "Früher installierte es zusätzlich va-driver-all, intel-opencl-icd und weitere Intel-Pakete für Quick Sync neben Coral. Das führte zu verwirrenden Fehlern bei reiner Coral-Nutzung. Die iGPU richtet nun apt-get unter Debian/Ubuntu. Bei Alpine, Arch, RHEL oder SUSE, erkannt über /etc/os-release, stehen nur Gerätezugriff einrichten und abbrechen zur Wahl. Ersteres schreibt /etc/pve/lxc/<ctid>.conf, ohne libedgetpu zu installieren. Bringt die App die Laufzeit mit, wie Frigate Docker, genügt dieser Modus. Sonst installieren Sie libedgetpu nach lsmod | grep apex. Falls nicht geladen, versuchen Sie modprobe apex oder starten nach der Treiberinstallation neu. Sobald /dev/apex_0 auf dem Host existiert, prüfen Sie den LXC-Geräteeintrag (führen Sie das Skript erneut aus, wenn nur die Ersatzeinträge geschrieben wurden) und starten den Container mit pct stop <ctid> && pct start <ctid> neu.",
+ "replugTitle": "USB-Coral verschwindet nach Anschluss an einen anderen Port",
+ "replugBody": "Prüfen Sie, ob der LXC /dev/bus/usb statt des Links /dev/coral einbindet. Die Konfiguration sollte lxc.mount.entry: /dev/bus/usb dev/bus/usb ... enthalten und nicht direkt von /dev/coral abhängen. Führen Sie bei alten Konfigurationen das Skript erneut aus.",
+ "alpineTitle": "Alpine / Arch / RHEL / SUSE: Laufzeit nicht installiert",
+ "alpineBody": "Im reinen Passthrough-Modus wird das Gerät konfiguriert, aber libedgetpu nicht installiert. Nutzen Sie ein kompatibles Community-Paket oder bauen Sie aus dem Quellcode; prüfen Sie vor Befehlen wie Alpines apk add die Paketverfügbarkeit. Frigate kann die Laufzeit mitbringen. Bei Docker im LXC zusätzlich M.2 mit --device /dev/apex_0:/dev/apex_0 durchreichen oder den USB-Baum in Docker einbinden; der LXC-Mount allein reicht nicht.",
+ "frigateTitle": "Frigate meldet „Coral EdgeTPU detected but not available“",
+ "frigateBody": "Prüfen Sie Laufzeit, Gerätesichtbarkeit und Lese-/Schreibrechte des tatsächlichen App-Prozesses. Bei USB Berechtigungen und gegebenenfalls plugdev-Mitgliedschaft prüfen. Bei M.2 /dev/apex_0 mit ls -l /dev/apex_0 prüfen. Ein Name wie apex in /etc/group genügt nicht: Numerische GIDs und LXC-Zuordnungen müssen stimmen. Prüfen Sie auch eine Belegung durch andere Prozesse; wechseln Sie nicht zuerst in den privilegierten Modus.",
+ "logsTitle": "Überprüfen Sie sowohl Host- als auch Containerprotokolle",
+ "logsBody": "Auf dem Host Gerätemeldungen mit journalctl -k | grep -i -e apex -e gasket -e usb prüfen. Im LXC die App-Protokolle lesen; bei verschachteltem Docker docker logs <container> nutzen. Ursachen können Berechtigungen, fehlende Laufzeit, USB-Verbindung oder ein anderer TPU-Prozess sein."
+ },
+ "related": {
+ "heading": "Verwandte Themen",
+ "items": [
+ {
+ "label": "Coral TPU auf dem Host installieren",
+ "href": "/docs/hardware/install-coral-tpu-host",
+ "tail": " — Voraussetzung für M.2-/PCIe-Coral-Karten vor der Nutzung im CT."
+ },
+ {
+ "label": "GPU zu LXC hinzufügen",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — GPU-Zugriff, der bei Frigate häufig mit Coral kombiniert wird."
+ }
+ ]
+ }
+}
diff --git a/web/messages/de/docs/hardware/gpu-vm-passthrough.json b/web/messages/de/docs/hardware/gpu-vm-passthrough.json
new file mode 100644
index 00000000..fc378283
--- /dev/null
+++ b/web/messages/de/docs/hardware/gpu-vm-passthrough.json
@@ -0,0 +1,178 @@
+{
+ "meta": {
+ "title": "GPU zu VM hinzufügen | ProxMenux-Dokumentation",
+ "description": "Physische GPU einer Proxmox-VM zuweisen. ProxMenux prüft IOMMU, konfiguriert VFIO und VM-Geräte und erkennt Konflikte mit anderen VMs oder LXC."
+ },
+ "header": {
+ "title": "GPU zu VM hinzufügen (Passthrough)",
+ "description": "Erkennt Intel-, AMD- oder NVIDIA-GPUs und bereitet direkten VM-Zugriff vor. Prüft IOMMU und zugehörige Geräte, konfiguriert VFIO und VM und wendet Kompatibilitätsregeln an. Alle betroffenen Geräte prüfen.",
+ "section": "Hardware: GPUs und Coral-TPU"
+ },
+ "intro": {
+ "title": "Funktionsweise",
+ "body": "Automatisiert Host- und hostpci-Schritte der lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "iommu": "IOMMU-Unterstützung in Hardware und gegebenenfalls Firmware nötig (Intel VT-d oder AMD-Vi). Prüft das laufende System und kann Linux-Bootparameter setzen; ändert kein BIOS/UEFI und beweist bei inaktivem IOMMU keinen Firmwarefehler.",
+ "q35": "Dieser Assistent verlangt q35 und lehnt i440fx ab. Maschinentyp und BIOS/UEFI-Firmware sind getrennte Einstellungen. Chipsetwechsel bestehender VMs muss geplant werden und erfolgt nicht automatisch.",
+ "q35Check": "qm config VMID | grep machine",
+ "moreGpus": "Zweite GPU oder alternativen Zugang über SSH, IPMI oder seriell vorbereiten. Die Haupt-GPU-Zuweisung kann die lokale Anzeige abschalten. Bei NVIDIA kann eine Karte außerhalb der betroffenen IOMMU-Gruppe auf dem Host bleiben.",
+ "nvidiaInstalled": "Nach vfio-pci statt nvidia reserviert. Das Modul nvidia kann für andere Karten außerhalb der betroffenen IOMMU-Gruppe verfügbar bleiben. Mit nvidia-smi prüfen."
+ },
+ "pickOne": {
+ "title": "Exklusive VM-Zuweisung oder LXC-Freigabe",
+ "body": "Ein GPU, der an vfio-pci für den VM-Durchgang gebunden ist, kann nicht gleichzeitig vom Host oder einem LXC verwendet werden. Wenn Sie zwei GPUs haben, können Sie jedem Pfad eine widmen. Wenn Sie nur eine haben, wählen Sie:",
+ "vmItem": "VM: direkter, exklusiver Zugriff für diese VM.",
+ "lxcItem": "LXC (intel_iommu=on oder amd_iommu=on hat und IOMMU-Gruppen existieren. Ist der Parameter bereits für den nächsten Start gespeichert, wird im Modus „Neustart ausstehend“ fortgefahren; andernfalls kann ein separat bestätigter Schritt ihn mit iommu=pt ergänzen. Die Heuristik für die Bootdatei nutzt /etc/kernel/cmdline, wenn dort ein ZFS-Root-Marker wie root=ZFS= vorhanden ist, sonst /etc/default/grub. Diese Heuristik ist kein Nachweis des tatsächlichen Bootloaders. Neu konfiguriertes IOMMU wird nach dem Neustart aktiv; prüfen Sie danach die tatsächlichen Gruppen.",
+ "tipTitle": "Nachinstallation bereits eingerichtet?",
+ "tipBody": "Bei bereits konfiguriertem und aktivem /sys/bus/pci/devices/<pci>/reset_method. APU oder dedizierte Karte ohne FLR wird durch die Assistentenrichtlinie blockiert; unbekannter Untertyp ohne FLR verlangt Bestätigung. Dies beweist keine generelle technische Unmöglichkeit.",
+ "D3cold-Zustand. AMD-Karten mit gemeldetem D3cold werden wegen möglicher Aktivierungsfehler blockiert. Stromversorgung und Firmware prüfen.",
+ "Analyse der IOMMU-Gruppe. Liest /sys/kernel/iommu_groups/ und nimmt alle Nicht-Brücken-Geräte in den VM-Plan auf, möglicherweise auch Netzwerk- oder Speichercontroller. Enthält die Gruppe Geräte aus einem anderen Slot, listet das Skript sie vor der Zusammenfassung auf; prüfen Sie, dass der Host keines davon benötigt. Steht der IOMMU-Neustart noch aus, sind die tatsächlichen Gruppen nicht verfügbar und der Plan enthält zunächst nur die gewählte GPU-Funktion; prüfen Sie die Isolation nach dem Neustart."
+ ],
+ "audioIntro": "Zugehöriges Audio. Zwei Fälle je nach Controllerposition:",
+ "audioDgpu": "Dedizierte GPU: HDMI-Audio liegt oft auf Funktion .1 desselben PCI-Slots und wird bei Erkennung aufgenommen. Nutzt der Host es bisher, verliert er durch die VM-Reservierung den Zugriff.",
+ "audioIgpu": "Ohne Audiofunktion .1: kann Audio auf einem anderen Gerät wie 00:1f.3 liegen. Controller mit Treibern wie snd_hda_intel werden gelistet. Standardmäßig keiner ausgewählt; nur benötigte wählen."
+ },
+ "pickVm": {
+ "title": "Ziel-VM auswählen",
+ "body": "VM aus der Liste wählen. Der Assistent verlangt q35 und verwendet vorhandene GPU-Einträge soweit möglich weiter. BIOS/UEFI ist eine separate Einstellung, kein Maschinentyp. Chipset und Bootmodus werden nicht automatisch geändert.",
+ "imageAlt": "VM-Auswahl nach Name, ID und Status"
+ },
+ "switchMode": {
+ "title": "Vorhandene Zuweisungen behandeln",
+ "intro": "Das Skript scannt jede VM-Konfiguration und jede LXC-Konfiguration auf dem Host, der nach dem von Ihnen ausgewählten GPU sucht. Drei mögliche Ergebnisse:",
+ "items": [
+ "GPU verfügbar. Fortfahren ohne alte Zuweisung zu entfernen.",
+ "Anderer VM zugewiesen. Quell-VM zuerst stoppen. Entweder Einträge behalten und Autostart deaktivieren oder Einträge entfernen und Autostart behalten. Bei bestehendem vfio-pci ohne nötige Hoständerungen kann VM→VM ohne Host-Neustart erfolgen.",
+ "Von LXC genutzte GPU. Bei normalen Containern wählen Sie GPU-Konfiguration behalten und Autostart deaktivieren oder GPU-Gerätekonfiguration entfernen und Autostart behalten. Das Entfernen löscht die devN-Einträge und bei AMD/Intel auch alte /dev/dri-Regeln lxc.mount.entry und lxc.cgroup2.devices.allow. OCI-Container behalten ihre Konfiguration und werden mit deaktiviertem Autostart gestoppt; entfernen Sie ihre GPU über OCI manager Apps. Die Konflikterkennung erfolgt nach GPU-Gerätefamilie und kann weitere Karten dieser Familie erfassen."
+ ],
+ "imageAlt": "Dialogangebot zum Entfernen des GPU aus einem LXC, bevor es dem VM zugewiesen wird",
+ "smartTitle": "Zugehöriges Audio beim Entfernen prüfen",
+ "smartBody": "Danach kann eine Liste möglicherweise nicht mehr benötigter Audiogeräte erscheinen. Weiter benötigte abwählen. Beispielsweise bleibt 02:00.1, während 00:1f.3 zur Entfernung angeboten wird. Die Auswahl bestimmt die Entfernung; keine universelle Audio-/Bildzuordnung ist garantiert."
+ },
+ "audioPick": {
+ "title": "Ohne .1-Audio benötigte Controller auswählen",
+ "body": "Dies gilt nur für Intel iGPU und ähnliche Split-Audio-Setups. Eine Checkliste zeigt jeden PCI-Audiocontroller auf dem Host (mit Ausnahme eines bereits in der IOMMU-Gruppe von GPU) mit seinem aktuellen Treiber. Wählen Sie die gewünschten aus - oder keine, wenn der VM kein Audio von der Host-Hardware benötigt.",
+ "imageAlt": "Checklistendialog mit jedem Host-PCI-Audiocontroller (BDF + Treiber), wenn der GPU kein .1-Geschwister-Audio hat",
+ "warnTitle": "Kein vom Host benötigtes Audio auswählen",
+ "warnBody": "Audiozuweisung kann dem Host den Zugriff nehmen; derselbe Controller kann nicht gleichzeitig einer anderen laufenden VM gehören. Unnötiges Audio nicht wählen und Zuweisungen prüfen. Der Konsolenpiep kommt nicht zwingend von PCI-Audio."
+ },
+ "summary": {
+ "title": "Überprüfung der Bestätigungszusammenfassung",
+ "body": "Prüfen Sie den endgültigen Host- und VM-Plan und brechen Sie bei Fehlern ab. Er zeigt die IOMMU-Gruppe und die Anzahl ihrer Geräte; Mitglieder aus einem anderen Slot werden im vorherigen Schritt aufgelistet. Der Abbruch verhindert die Hauptänderungen, macht aber eine zuvor separat bestätigte Änderung der IOMMU-Bootkonfiguration nicht rückgängig.",
+ "imageAlt": "Übersicht geplanter Änderungen an Host und VM"
+ },
+ "hostApply": {
+ "title": "Host Änderungen werden angewendet",
+ "intro": "Die Anwendung ändert Host und VM. Zugehörige Audiobereinigung kann weiterhin eine Auswahl verlangen. Mögliche Hoständerungen:",
+ "items": [
+ "/etc/modules — fügt vfio, vfio_iommu_type1, vfio_pci hinzu (plus vfio_virqfd auf Kernen < 6.2).",
+ "/etc/modprobe.d/vfio.conf — AMD/Intel: options vfio-pci ids=<vendor:device,...> disable_vga=1. NVIDIA: softdep nvidia pre: vfio-pci (_drm/_modeset/_uvm); die eigentliche Bindung erfolgt pro BDF. AMD ergänzt die Ladereihenfolge softdep: vfio-pci → radeon/amdgpu.",
+ "Schreibt /etc/modprobe.d/iommu_unsafe_interrupts.conf und kvm.conf mit allow_unsafe_interrupts=1 und ignore_msrs=1. Kompatibilitätseinstellungen des Skripts, keine allgemeinen Windows/macOS-Anforderungen; unsichere Interrupts schwächen den Interrupt-Remapping-Schutz.",
+ "/etc/modprobe.d/blacklist.conf: NVIDIA — nouveau/lbm-nouveau; AMD — radeon + amdgpu; Intel — i915. Diese herstellerweiten Regeln können andere Karten mit demselben Treiber betreffen. Das Modul nvidia wird nur über /etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf blockiert, wenn alle NVIDIA-Karten für VFIO erfasst sind.",
+ "/etc/udev/rules.d/10-proxmenux-vfio-bind.rules + /etc/proxmenux/vfio-bind.bdfs — Nur NVIDIA. Setzt ATTR'{'driver_override'}'=\"vfio-pci\" bei PCI ADD für erfasste BDFs einschließlich betroffener IOMMU-Gruppenfunktionen. Außerhalb kann nvidia erhalten bleiben. BDF-Regeln teilen keine Hardware-IOMMU-Gruppe.",
+ "Nur AMD. Versucht, das ROM aus /sys/bus/pci/.../rom oder ACPI VFCT nach /usr/share/kvm/vbios_<vendor>_<device>.bin zu sichern. Bei Erfolg nutzt die VM romfile=. Ein gültiger Dump garantiert keine erfolgreiche GPU-Initialisierung.",
+ "Nur NVIDIA. Stoppt und deaktiviert nvidia-persistenced, nvidia-powerd, nvidia-fabricmanager nur, wenn alle NVIDIA-Karten VFIO zugeordnet sind. Im Mischbetrieb bleiben Dienste und nvidia für native Karten erhalten.",
+ "update-initramfs -u -k all — läuft nur, wenn einer der oben genannten tatsächlich geändert."
+ ]
+ },
+ "vmApply": {
+ "title": "VM config wird über qm set angewendet",
+ "body": "Die VM-Konfiguration bei /etc/pve/qemu-server/<vmid>.conf wird über qm set aktualisiert (nie direkt über sed):",
+ "after1": "Setzt x-vga=1 für AMD und NVIDIA, nicht Intel. Dies ist die Skriptrichtlinie und kein Beleg, dass jeder Intel-iGPU Firmware fehlt oder das Flag immer Hänger verursacht.",
+ "after2": "Zusätzliche hostpciN-Leitungen werden angehängt, wenn die IOMMU-Gruppe des GPU andere Geräte enthält, die Sie zusammen übergeben müssen."
+ },
+ "reboot": {
+ "title": "Bei erforderlicher Hoständerung neu starten",
+ "body": "Neustarthinweise bei Boot- oder Treiberänderungen befolgen und aktive GPU-Bindung vor VM-Start prüfen. Gespeicherte Konfiguration beweist keine aktive Anwendung. VM→VM mit korrektem VFIO kann ohne Host-Neustart erfolgen.",
+ "imageAlt": "Zusammenfassungsbildschirm zeigt, was geändert wurde, gefolgt von einer Neustartaufforderung"
+ }
+ },
+ "vendors": {
+ "heading": "Herstellerspezifische Hinweise",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Behält einen älteren Code-43-Workaround: hidden=1, ID NV43FIX in args und kvm=off. Kein allgemeines Erfordernis aktueller GeForce-Treiber: NVIDIA aktivierte Windows-VM-Passthrough ab R465. Der Fehler kann andere Ursachen haben; Kombination prüfen.",
+ "nvidiaMultiHeading": "Multi-GPU NVIDIA Unterstützung",
+ "nvidiaMultiBody": "Gemischte NVIDIA-Nutzung pro BDF. Erfasst Funktionen für vfio-pci nach Adresse statt nur vendor:device. Außerhalb betroffener Gruppen kann nvidia bleiben; mit nvidia-smi prüfen. Karten derselben Gruppe werden dadurch nicht isoliert.",
+ "amdHeading": "AMD",
+ "amdBody": "Manche AMD-GPUs lassen sich nach VM-Stopp nicht zurücksetzen. Der Assistent prüft gemeldete Fähigkeiten, nicht alle realen Zyklen. x-vga=1. qm config VMID | grep -E \"cpu|args\" mit echter VMID prüfen, ebenso hidden=1 und hv_vendor_id=NV43FIX. Auch Gasttreiber, Firmware und Zuweisung prüfen. Erneutes Ausführen kann bei vorhandener Zuweisung sofort enden.",
+ "amdResetTitle": "AMD GPU funktioniert einmal, schlägt beim Neustart von VM fehl",
+ "amdResetBody": "Resetfehler sind eine mögliche Ursache. Host-Neustart oder Aus-/Einschalten kann vorübergehend helfen. Unterstützung und frühes Laden von vendor-reset prüfen; softdep amdgpu pre: vendor-reset allein garantiert kein Laden vor VFIO. Auch RadeonResetBugFix unter Windows benötigt kompatible Hardware.",
+ "stuckBootTitle": "VM hängengebliebenes Booten / GPU nicht erkannt",
+ "stuckBootBody": "Reale Adresse mit lspci -nnk -s PCI_ADDRESS prüfen; erwartet Kernel driver in use: vfio-pci. PCI_ADDRESS ersetzen. Bei nativem Treiber Bindungspolitik prüfen, nicht nur /etc/modprobe.d/blacklist.conf; NVIDIA nutzt BDF-Status. dmesg | grep vfio lesen. Nach Korrektur update-initramfs -u -k all und Neustartplan befolgen.",
+ "darkTitle": "Host-Konsole wird nach dem Neustart dunkel und ich kann SSH nicht in",
+ "darkBody": "Schwarzes Bild bedeutet nicht, dass der Host ausgefallen ist. Bei SSH-Ausfall Netzwerk und Controller in der IOMMU-Gruppe prüfen. Über IPMI, seriell oder Rettungsumgebung zugreifen; /etc/pve/qemu-server/<vmid>.conf prüfen und nur relevante Zuweisungen/Bindungen zurücknehmen. Keine fremde Konfiguration löschen.",
+ "logTitle": "Überprüfen Sie das Installationsprotokoll",
+ "logBody": "Jeder Durchlauf schreibt /tmp/add_gpu_vm.log. Bei Hilfsanfragen beifügen."
+ },
+ "revert": {
+ "heading": "Änderungen manuell zurücknehmen",
+ "intro": "VM stoppen und nur relevante PCI-Zuweisungen unter Hardware oder mit dem gezeigten Index entfernen. Das gibt die GPU noch nicht dem nativen Host-Treiber zurück. Dafür GPU-Modus wechseln verwenden und betroffene Gäste vor Bestätigung prüfen."
+ },
+ "related": {
+ "heading": "Verwandte Themen",
+ "items": [
+ {
+ "label": "Installieren Sie NVIDIA Treiber (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — Host-Treiber für nativ verbleibende Karten vorbereiten; eine VFIO-GPU kann ihn nicht gleichzeitig nutzen."
+ },
+ {
+ "label": "GPU zu LXC hinzufügen",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": "Alternatives Modell: Teilen Sie den GPU mit mehreren Containern, anstatt ihn einem VM zu widmen."
+ },
+ {
+ "label": "GPU-Modus wechseln (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — dieselbe GPU zwischen Freigabe und exklusiver Zuweisung wechseln."
+ },
+ {
+ "label": "GPU Durchgangsbefehle",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — lspci, IOMMU-Prüfung und Referenz zu qm set hostpci."
+ }
+ ]
+ }
+}
diff --git a/web/messages/de/docs/hardware/igpu-acceleration-lxc.json b/web/messages/de/docs/hardware/igpu-acceleration-lxc.json
new file mode 100644
index 00000000..0f7d0b61
--- /dev/null
+++ b/web/messages/de/docs/hardware/igpu-acceleration-lxc.json
@@ -0,0 +1,185 @@
+{
+ "meta": {
+ "title": "GPU zu LXC hinzufügen | ProxMenux-Dokumentation",
+ "description": "Intel-, AMD- oder NVIDIA-GPU mit LXC teilen. ProxMenux richtet Geräte, Gruppen und Bibliotheken passend zur Distribution ein; die App muss Beschleunigung unterstützen und entsprechend eingerichtet sein."
+ },
+ "header": {
+ "title": "GPU zu LXC hinzufügen",
+ "description": "GPU-Zugriff über Host-Geräteknoten mit LXC teilen. Der Treiber bleibt auf dem Host; Anwendungen brauchen kompatible Bibliotheken und eigene Einstellungen.",
+ "section": "Hardware: GPUs und Coral-TPU"
+ },
+ "intro": {
+ "title": "Funktionsweise",
+ "body": "Fügt dev<N>-Einträge zu /etc/pve/lxc/<ctid>.conf für passende /dev/dri/*-, /dev/kfd- oder /dev/nvidia*-Knoten hinzu. Startet den Container, installiert Userspace-Pakete für dessen Distribution und gleicht bei Intel/AMD die Gruppen video und render ab. Die Anwendungsbeschleunigung erfordert weiterhin kompatible Hardware, Bibliotheken und App-Einstellungen."
+ },
+ "compare": {
+ "heading": "LXC-Freigabe und VM-Passthrough im Vergleich",
+ "intro": "LXC teilt den Kernel und kann die GPU zwischen Host und Containern teilen. Bei lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "vfio": "Die GPU darf nicht an vfio-pci gebunden sein. Sie benötigt den nativen Host-Treiber. Bei VM-Zuweisung bietet das Skript dev<N>-Einträge in die LXC-Konfiguration und richtet auf unprivilegierten Containern die video- und render-GIDs zwischen Host und Container so aus, dass die GPU-Geräteknoten von innen erreichbar sind, ohne dass Sie lxc.idmap von Hand bearbeiten müssen."
+ },
+ "running": {
+ "heading": "Installationsprogramm ausführen",
+ "body": "Öffnen Sie ProxMenux und wählen Sie Hardware: GPUs und Coral-TPU → GPU zu LXC hinzufügen.",
+ "imageAlt": "Menüeintrag zum Hinzufügen einer GPU zu LXC"
+ },
+ "howRuns": {
+ "heading": "Ablauf des Skripts",
+ "body": "Container und GPU-Familien auswählen und Prüfungen durchlaufen. Danach wird der Container ohne weitere Abschlussbestätigung gestoppt und geändert. Optionale VFIO-Bereinigung wird separat bestätigt und kann den Host vorher ändern."
+ },
+ "walkthrough": {
+ "heading": "Schritt für Schritt",
+ "detect": {
+ "title": "Host-GPUs erkennen",
+ "body": "Sucht GPU-Controller mit lspci. Prüft für NVIDIA das Modul nvidia und nvidia-smi; die erkannte Version bestimmt den .run-Installer für den Container.",
+ "tipTitle": "NVIDIA nicht bereit?",
+ "tipBody": "Wenn Modul oder NVIDIA-Funktion auf dem Host fehlen, zuerst /dev/dri/*- oder /dev/nvidia*-Geräte anlegen. /etc/pve/lxc/<ctid>.conf. Nummerierte dev<N>-Einträge enthalten die Host-GID von video oder render. Vorhandene lxc.mount.entry-Bind-Zeilen für /dev/dri werden durch dev:-Einträge ersetzt; prüfen Sie die resultierende Konfiguration und die Rechte.",
+ "body2": "Beispiel nach Intel + NVIDIA auf demselben Container:"
+ },
+ "installDrivers": {
+ "title": "Starten Sie den Container und installieren Sie Treiber im Inneren",
+ "body": "Startet den Container und wartet bis zu etwa 30 Sekunden auf pct exec. Erkennt die Distribution aus /etc/os-release und installiert passende Pakete.",
+ "headerDistro": "Distribution",
+ "headerInt": "Intel / AMD",
+ "headerNvidia": "NVIDIA",
+ "rows": [
+ {
+ "distro": "Alpine",
+ "intel": "apk add mesa-va-gallium intel-media-driver libva-utils",
+ "nvidia": "apk add nvidia-utils"
+ },
+ {
+ "distro": "Arch / Manjaro",
+ "intel": "pacman -Sy intel-media-driver mesa libva-utils",
+ "nvidia": "pacman -Sy nvidia-utils"
+ }
+ ],
+ "debianDistro": "Debian / Ubuntu / andere",
+ "debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo",
+ "debianNvidia": ".run auf dem Host entpacken → pct push → mit --no-kernel-modules --no-dkms installieren.",
+ "whyTitle": "Warum Debian den NVIDIA-.run-Installer nutzt",
+ "whyBody": "Repository-Pakete passen möglicherweise nicht zum Host. Bibliotheken müssen zum geladenen Host-Modul passen, etwa für nvidia-smi. Debian/glibc nutzt den zwischengespeicherten .run-Installer der Host-Version, entpackt und archiviert ihn auf dem Host, überträgt mit pct push und installiert mit --no-kernel-modules --no-dkms. Alpine und Arch nutzen Repository-Pakete; Versionen prüfen."
+ },
+ "alignGids": {
+ "title": "GIDs ausrichten und Zustand wiederherstellen",
+ "body1": "Liest bei Intel/AMD die Host-GIDs von video und render, wobei 44/104 nur als Ersatzwerte dienen, und passt dann /etc/group im Container entsprechend an; reine NVIDIA-Durchläufe überspringen diesen Schritt. Einträge wie video:44 und render:104 sind Beispiele, keine universellen IDs. Prüfen Sie die App-Mitgliedschaft und die wirksamen Geräterechte.",
+ "body2": "Bei normalem Abschluss wird ein ursprünglich gestoppter Container erneut gestoppt; ein laufender bleibt aktiv. Bei Start- oder Installationsfehlern Endzustand und Protokoll prüfen."
+ }
+ },
+ "vendors": {
+ "heading": "Herstellerspezifische Hinweise",
+ "intelHeading": "Intel iGPU",
+ "intelBody": "Intel-Medienbeschleunigung, einschließlich Quick Sync, hängt von GPU-Generation, Codecs und App-Einstellungen ab. Das Skript teilt diejenigen von /dev/dri/card0, card1, renderD128 und renderD129, die vorhanden sind; andere Knotennummern werden nicht hinzugefügt. Der Host muss sie bereits über seinen nativen Treiber bereitstellen, etwa i915.",
+ "amdHeading": "AMD",
+ "amdBody": "AMD nutzt DRI für Mesa/VA-API. Vorhandenes /dev/kfd wird ebenfalls geteilt. ROCm/OpenCL benötigt unterstützte Hardware und passende Bibliotheken; die Gerätefreigabe installiert keinen vollständigen ROCm-Stack.",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Teilt verfügbare /dev/nvidia*-Geräte. Passende Treiberversionen sind für nvidia-smi entscheidend. Debian/glibc nutzt den .run-Installer der Host-Version, Alpine/Arch Repository-Pakete. Unter 2048 MiB konfiguriertem RAM bietet der Debian-Pfad eine vorübergehende Erhöhung mit Wiederherstellung; benötigt außerdem 1500 MiB freien Plattenplatz.",
+ "updateTitle": "Nach Host-NVIDIA-Update Containerbibliotheken prüfen",
+ "updateBody": "Alte Bibliotheken können in nvidia-smi Versionsfehler verursachen. Der .run-Installer gilt für Debian/glibc; bei vorhandenen Geräteeinträgen kann das Hinzufügen vorher enden.",
+ "denyTitle": "Genehmigung verweigert auf /dev/dri/renderD128 im Container",
+ "denyBody": "Geräteeintrag und numerische Rechte der Gruppe render prüfen; App-Benutzer muss zu render gehören. Falls verfügbar, mit usermod -aG render <user> zu render hinzufügen; Platzhalter durch Kontonamen ersetzen. Sitzung neu starten. Privilegmoduswechsel ist keine allgemeine Lösung.",
+ "vainfoTitle": "vainfo sagt: VA-API Version 1.xx; konnte nicht initialisiert werden",
+ "vainfoBody": "Gerätezugriff und VA-API-Treiber prüfen. Paketnamen hängen von der Distribution ab: etwa intel-media-driver für unterstützte neuere Intel-GPUs, i965-va-driver für ältere und mesa-va-drivers für AMD. Die Meldung allein beweist kein fehlendes Paket.",
+ "logTitle": "Installationsprotokoll",
+ "logBody": "Jeder Durchlauf schreibt /tmp/add_gpu_lxc.log auf dem Host. Bei Hilfsanfragen beifügen."
+ },
+ "related": {
+ "heading": "Verwandte Themen",
+ "items": [
+ {
+ "label": "Installieren Sie NVIDIA Treiber (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — Host-Treiber vor der NVIDIA-Freigabe installieren."
+ },
+ {
+ "label": "GPU zu VM hinzufügen (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — Alternative für eine exklusiv zugewiesene VM-GPU."
+ },
+ {
+ "label": "GPU-Modus wechseln (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — GPU zwischen LXC-Freigabe und VM-Zuweisung wechseln."
+ },
+ {
+ "label": "GPU Durchgangsbefehle",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": "Schnellreferenz für verwandte Shell-Befehle."
+ }
+ ]
+ }
+}
diff --git a/web/messages/de/docs/hardware/install-coral-tpu-host.json b/web/messages/de/docs/hardware/install-coral-tpu-host.json
new file mode 100644
index 00000000..850b06ea
--- /dev/null
+++ b/web/messages/de/docs/hardware/install-coral-tpu-host.json
@@ -0,0 +1,203 @@
+{
+ "meta": {
+ "title": "Coral TPU auf dem Host installieren | ProxMenux-Dokumentation",
+ "description": "Installiert Coral-Komponenten auf Proxmox VE nach erkannter Hardware: gasket/apex mit DKMS für M.2 / Mini-PCIe und libedgetpu1-std für USB. Bei beiden Gerätetypen werden beide Abläufe ausgeführt."
+ },
+ "header": {
+ "title": "Coral TPU auf dem Host installieren",
+ "description": "Proxmox-Host für Coral und spätere LXC-Nutzung vorbereiten. Erkennt M.2 / Mini-PCIe, USB oder beide und führt passende Abläufe aus: DKMS-Module für PCIe und Google-Edge-TPU-Laufzeit für USB.",
+ "section": "Hardware: GPUs und Coral-TPU"
+ },
+ "intro": {
+ "title": "Funktionsweise",
+ "body": "Ein gemeinsamer Installer mit Hardware-Erkennung. PCIe nutzt gasket und apex mit DKMS; spätere Builds brauchen kompatible Quellen und Headers. USB nutzt libedgetpu1-std. Bei beiden Gerätetypen laufen beide Pfade. Die USB-Laufzeit gehört zum Ausführungsort der App; für reine LXC-Nutzung ist sie auf dem Host nicht grundsätzlich nötig."
+ },
+ "which": {
+ "heading": "Welche Coral habe ich?",
+ "body": "PCIe- und USB-Modelle unterscheiden sich in Bauform und Anforderungen. Das Skript unterstützt beide; identifizieren Sie Ihr Gerät vor dem Start.",
+ "headerForm": "Formfaktor",
+ "headerDetect": "Detektion",
+ "headerInstall": "Art der Installation",
+ "headerReboot": "Neu starten?",
+ "pcieForm": "M.2 / Mini-PCIe",
+ "pcieFormSub": "(M.2-Karten gibt es mit einer oder zwei Edge TPUs)",
+ "pcieDetect": "PCI-Herstellerkennung 1ac1",
+ "pcieInstall": "Kernel-Modul (gasket + apex) über DKMS",
+ "pcieReboot": "Ja",
+ "usbForm": "USB-Beschleuniger",
+ "usbFormSub": "(kleiner Kunststoff-Dongle)",
+ "usbDetect": "USB 1a6e:089a (unprogrammiert) / 18d1:9302 (programmiert)",
+ "usbInstall": "Userspace-Laufzeit libedgetpu1-std aus Googles APT-Repository",
+ "usbReboot": "Nein"
+ },
+ "prereqs": {
+ "title": "Vorbereitung",
+ "coral": "Angeschlossene Coral TPU (M.2, Mini-PCIe oder USB) für die Installation. Ohne erkannte Hardware kann das Skript vorhandene Komponenten bereinigen oder entfernen, installiert aber keinen neuen Hardwarepfad.",
+ "coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
+ "internet": "Internetzugang auf dem Host zum Klonen des PCIe-Treibers von GitHub oder zum Herunterladen von libedgetpu1-std aus Googles APT-Repository für USB.",
+ "headers": "Über APT verfügbare Kernel-Header: proxmox-headers-$(uname -r). Nur für PCIe/M.2 nötig; das Skript installiert sie.",
+ "reboot": "Neustart für PCIe einplanen. Das Skript versucht, die gebauten Module zu laden; ein Neustart prüft auch das automatische Laden."
+ },
+ "hostPrepTip": {
+ "title": "Dies bereitet nur den Host vor",
+ "body": "Bereitet den Host für den Gerätezugriff vor; Anwendungen werden weder eingerichtet noch getestet. Um Coral etwa mit Frigate zu nutzen, folgen Sie /sys/bus/pci/devices/*/vendor nach Hersteller 0x1ac1 und erkennt USB-Geräte mit lsusb. Es gibt zwei USB-IDs, abhängig vom Firmwarezustand:",
+ "items": [
+ "1a6e:089a — Global Unichip, unprogrammiert, bevor die Laufzeit die Firmware lädt.",
+ "18d1:9302 — Google, programmiert, nach dem Laden der Firmware."
+ ],
+ "outro": "Ohne erkannte Coral und vorhandene Installation endet das Skript mit einem Hinweis. Vorhandene Komponenten können weiterhin das Bereinigungs- oder Entfernungsmenü auslösen."
+ },
+ "prompt": {
+ "title": "Installationsbestätigung",
+ "body": "Vor der Installation zeigt ein Dialog Geräte und geplante Komponenten. Abbrechen überspringt die Installation. Die optionale Altbereinigung hat zuvor eine eigene Bestätigung.",
+ "imageAlt": "Übersicht erkannter Coral-Geräte und Installationsschritte"
+ },
+ "pcie": {
+ "title": "PCIe: Kernelmodule gasket und apex über DKMS",
+ "body": "Läuft nur bei erkannter PCIe-/M.2-Coral. Die Module werden für den aktuell laufenden Host-Kernel gebaut.",
+ "items": [
+ "Bereinigung. Ein vorhandenes gasket-dkms-Paket wird vor dem Neubau entfernt; befindet es sich in einem fehlerhaften Paketstatus, erzwingt das Skript dessen Entfernung und Purge.",
+ "Build-Abhängigkeiten: git, dkms, build-essential, proxmox-headers-$(uname -r)."
+ ],
+ "cloneIntro": "Treiberquellen klonen. Bevorzugt no_llseek durch noop_llseek.",
+ "Ab Kernel 6.13: Argument von MODULE_IMPORT_NS(DMA_BUF) in ein Zeichenkettenliteral umwandeln."
+ ],
+ "afterItems": [
+ "Quellen nach /usr/src/gasket-1.0/ kopieren, dkms.conf erzeugen und mit dkms add registrieren.",
+ "Bauen und installieren: dkms build, danach dkms install. Bei Fehlern zeigt das Skript die letzten 50 Zeilen von make.log, sofern vorhanden.",
+ "Gruppe apex und udev-Regeln erstellen (/etc/udev/rules.d/99-coral-apex.rules), um /dev/apex_* der Gruppe zuzuordnen.",
+ "Module zu laden versuchen: modprobe gasket und modprobe apex."
+ ],
+ "imageAlt": "DKMS-Build und Laden der gasket/apex-Module"
+ },
+ "usb": {
+ "title": "USB: Edge-TPU-Laufzeit von Google",
+ "body": "Läuft nur, wenn ein USB-Beschleuniger erkannt wurde. Viel einfacher:",
+ "items": [
+ "Googles GPG-Schlüssel hinzufügen: /etc/apt/keyrings/coral-edgetpu.gpg.",
+ "APT-Repository hinzufügen in /etc/apt/sources.list.d/coral-edgetpu.list; signed-by= beschränkt die Prüfung auf dessen Schlüsselbund. Dies ist einzeilige .list-Syntax, keine deb822-.sources-Syntax.",
+ "libedgetpu1-std installieren, die Edge-TPU-Laufzeit mit Standardleistung.",
+ "udev neu laden und die Paketregeln auf das USB-Gerät anwenden."
+ ],
+ "stdTitle": "Warum libedgetpu1-std und nicht libedgetpu1-max?",
+ "stdBody": "Das Paket max aktiviert den maximal unterstützten Takt mit höherer Leistung, Stromaufnahme und Wärme. Vor dem Wechsel Kühlung und Betriebsbedingungen prüfen. Die Pakete schließen sich gegenseitig aus; wechseln mit apt install libedgetpu1-max."
+ },
+ "reboot": {
+ "title": "Optionaler Neustart nach PCIe-Installation",
+ "body": "Nach PCIe wird ein Neustart angeboten. modprobe wurde versucht; prüfen Sie geladene Module und /dev/apex_0 mit Gruppe apex. Ein geplanter Neustart prüft automatisches Laden. Bei reiner USB-Installation wird kein Host-Neustart angeboten.",
+ "imageAlt": "Zusammenfassung und Neustartangebot nach PCIe-Installation"
+ }
+ },
+ "legacyCleanup": {
+ "heading": "Altes gasket-dkms auf reinen USB-Hosts bereinigen",
+ "intro": "Wenn keine PCIe-/M.2-Coral erkannt wird, aber eine alte gasket-dkms-Installation existiert, wird eine optionale Bereinigung angeboten. Sie erfordert eine Bestätigung.",
+ "items": [
+ "Bei erkannter PCIe-/M.2-Coral wird stattdessen der normale DKMS-Neubau verwendet; diese Bereinigung wird nicht angeboten.",
+ "Entfernt gasket-dkms, alte gasket-DKMS-Einträge und Quellen und repariert ausstehende dpkg-/APT-Vorgänge.",
+ "Die USB-Pakete libedgetpu1-std und libedgetpu1-max bleiben erhalten, sodass die USB-Coral ihre Laufzeit behält.",
+ "Das Skript überprüft, ob das Legacy-Paket verschwunden ist und dass das Paketmanagement gesund ist, bevor der Erfolg gemeldet wird."
+ ],
+ "warningTitle": "Bestätigen Sie zuerst die Hardware",
+ "warningBody": "Wenn eine erwartete PCIe-/M.2-Coral fehlt, Bereinigung abbrechen und Karte, Steckplatz sowie Firmware prüfen."
+ },
+ "reinstallUninstall": {
+ "heading": "Neuinstallieren oder Deinstallieren",
+ "intro": "Bei erkannter PCIe-Installation mit gasket-dkms, USB mit libedgetpu1-std/libedgetpu1-max oder beiden erscheint ein Aktionsmenü.",
+ "imageAlt": "Menü zum Neuinstallieren, Aktualisieren oder Entfernen von Coral",
+ "imageCaption": "Das Menü erscheint bei vorhandenen Komponenten: gasket-DKMS-Eintrag, Paket libedgetpu1-* oder Geräte /dev/apex_*.",
+ "reinstallHeading": "Neuinstallation / Update",
+ "reinstallBody": "Führt die normale Installation aus: Neubau nach Kernelwechsel oder Aktualisierung von libedgetpu1-* aus Googles Repository. Bereinigt zuvor alten DKMS-Status, damit ein fehlgeschlagener Versuch den Build nicht blockiert.",
+ "uninstallHeading": "Deinstallieren – Was entfernt wird",
+ "uninstallIntro": "Erfordert eine Bestätigung. LXC-Apps mit /dev/apex_* können während der Entfernung oder nach dem nächsten Neustart den Zugriff verlieren. Ablauf:",
+ "uninstallItems": [
+ "Versucht, apex und gasket zu entladen; aktive Nutzung kann dies verhindern.",
+ "Entfernt jeden DKMS-registrierten gasket/<version>-Eintrag, damit die Module nicht bei der nächsten Kernel-Installation zurückkommen.",
+ "Entfernt gasket-dkms, libedgetpu1-std und libedgetpu1-max vollständig und führt apt-get autoremove --purge aus.",
+ "Löscht /etc/udev/rules.d/99-coral-apex.rules und stellt die Standardgruppe in 60-gasket-dkms.rules wieder her, falls vorhanden.",
+ "Prüft die zusätzlichen Mitglieder von apex. Bei leerer Liste wird die Gruppe zu entfernen versucht, sonst bleibt apex mit Mitgliederhinweis erhalten. Benutzer mit dieser primären Gruppe werden nicht vollständig geprüft.",
+ "Entfernt die Repository-Liste /etc/apt/sources.list.d/coral-edgetpu.list, die alte coral-cloud.list und alte Schlüsselbunde namens coral-edgetpu-archive-keyring.gpg. Der aktuelle Schlüsselbund unter /etc/apt/keyrings/coral-edgetpu.gpg wird durch diesen Ablauf nicht entfernt.",
+ "Bietet einen Neustart nur bei zuvor installiertem PCIe-Pfad an, um noch aktive Module zu entladen. Reine USB-Entfernung braucht keinen Neustart."
+ ],
+ "lxcWarnTitle": "LXC Container mit apex Passthrough",
+ "lxcWarnBody": "Das Entfernen der Host-Komponenten kann den LXC-Gerätezugriff unterbrechen. Wartung einplanen, wenn kompatible Anwendungen wie Frigate diese Coral benötigen."
+ },
+ "updates": {
+ "heading": "Update-Benachrichtigungen",
+ "intro": "ProxMenux erfasst installierte Coral-Komponenten und prüft PCIe/M.2 und USB getrennt. Sind beide vorhanden, nutzt jede Variante ihre eigene Versionsquelle:",
+ "headerVariant": "Variante",
+ "headerTracked": "Erfasste Version",
+ "headerUpstream": "Versionsquelle",
+ "pcieVariant": "PCIe / M.2",
+ "pcieTracked": "Zuerst das nach erfolgreicher Installation erfasste Release-Tag, dann die Version eines intakten gasket-dkms-Pakets, ersatzweise die DKMS-Modulversion. Diese allein gibt den Patchstand des Forks nicht an.",
+ "pcieUpstream": "Neuestes GitHub-Tag von feranick/gasket-driver; sieben Tage Cache und Vergleich der Buildnummer.",
+ "usbVariant": "USB",
+ "usbTracked": "libedgetpu1-std oder libedgetpu1-max apt Version",
+ "usbUpstream": "Lokaler apt-cache policy-Kandidat (Google Coral apt repo)",
+ "outro": "Bei einer neueren Version sendet Monitor coral_driver_update_available über aktivierte Kanäle. Der Hinweis führt zum Installer: Neu installieren / aktualisieren auswählen.",
+ "antiTitle": "Keine wiederholten Hinweise",
+ "antiBody": "Ein Hinweis je Variante bei neuer verfügbarer Version. Keine Wiederholung bei jeder täglichen Prüfung; erst eine weitere Version löst den nächsten Hinweis aus.",
+ "rebootTitle": "PCIe-Updates: Neustart einplanen",
+ "rebootBody": "Ein neu gebautes PCIe-Modul muss geladen werden; ein geplanter Neustart prüft auch automatisches Laden. Das USB-Bibliotheksupdate braucht keinen Host-Neustart, aber Anwendungen mit der alten Bibliothek müssen gegebenenfalls neu starten."
+ },
+ "manual": {
+ "heading": "Manuelle Vorgehensweise",
+ "intro": "Diese Befehle zeigen die wichtigsten Schritte beider Pfade zum Nachlesen oder manuellen Ausführen.",
+ "pcieHeading": "PCIe / M.2 (gasket + apex über DKMS)",
+ "usbHeading": "USB (libedgetpu-Laufzeit)"
+ },
+ "verification": {
+ "heading": "Überprüfung",
+ "pcieHeading": "PCIe / M.2",
+ "usbHeading": "USB"
+ },
+ "troubleshoot": {
+ "heading": "Fehlerbehebung",
+ "dkmsFailTitle": "DKMS-Build schlägt nach Kernelupdate fehl",
+ "dkmsFailBody": "Fehlende Header sind eine mögliche Ursache. proxmox-headers-$(uname -r) mit dpkg -l proxmox-headers-$(uname -r) prüfen und gegebenenfalls installieren. Im Buildprotokoll nach Quellcode-/Kernelproblemen suchen. Erneutes Ausführen ruft cleanup_broken_gasket_dkms auf, garantiert aber keine Kernelkompatibilität.",
+ "apexMissTitle": "/dev/apex_0 fehlt nach dem Neustart",
+ "apexMissBody": "PCIe-Erkennung und Modul für den laufenden Kernel prüfen. modprobe apex versuchen und dmesg | grep -iE \"apex|gasket\" prüfen. Build-, Lade- oder Steckplatz-/Firmwareprobleme können das Gerät verhindern.",
+ "lxcMissTitle": "Host sieht /dev/apex_0, LXC jedoch nicht",
+ "lxcMissBody": "Ein sichtbarer Geräteknoten beweist noch keine Funktion. Erst Host-Zugriff, dann LXC-Mount, cgroup-Regeln und numerische UID/GID-Rechte prüfen. Siehe libedgetpu1-std und Rechte mit ls -l /dev/bus/usb/*/* prüfen. Gemappte App-Benutzer/-Gruppen brauchen Lese-/Schreibzugriff; root als Eigentümer allein ist kein Fehler. Nach Regeländerungen udevadm control --reload-rules && udevadm trigger ausführen und bei Bedarf neu verbinden.",
+ "logTitle": "Installationsprotokoll",
+ "logBody": "Jeder Lauf schreibt /tmp/coral_install.log. Bei DKMS-Fehlern werden, sofern vorhanden, die letzten 50 Zeilen von /var/lib/dkms/gasket/1.0/build/make.log ergänzt. Das Protokoll bei Supportanfragen beifügen."
+ },
+ "related": {
+ "heading": "Verwandte Themen",
+ "items": [
+ {
+ "label": "Coral TPU zu LXC hinzufügen",
+ "href": "/docs/hardware/coral-tpu-lxc",
+ "tail": " — Coral vom Host einem Container mit kompatibler App bereitstellen."
+ },
+ {
+ "label": "Installieren Sie NVIDIA Treiber (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": "— die gleiche Idee für NVIDIA GPUs."
+ },
+ {
+ "label": "ProxMenux Monitor — Register Hardware",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — das Coral-Fenster zeigt Treiber, Module, Geräte und Laufzeitstatus sowie Temperatur bei vorhandenem unterstütztem Sensor."
+ }
+ ]
+ }
+}
diff --git a/web/messages/de/docs/hardware/nvidia-host.json b/web/messages/de/docs/hardware/nvidia-host.json
new file mode 100644
index 00000000..ee022e92
--- /dev/null
+++ b/web/messages/de/docs/hardware/nvidia-host.json
@@ -0,0 +1,175 @@
+{
+ "meta": {
+ "title": "NVIDIA auf dem Host installieren | ProxMenux-Dokumentation",
+ "description": "Proprietäre NVIDIA-Treiber mit ProxMenux auf Proxmox VE installieren: GPU-Filterung, Build- und DKMS-Prüfungen, Persistenzdienst, optionaler NVENC-Patch und Bibliotheksaktualisierung in LXC."
+ },
+ "header": {
+ "title": "NVIDIA-Treiber auf dem Host installieren",
+ "description": "NVIDIA auf dem Proxmox-VE-Host installieren. Filtert gepflegte Zweige nach GPU-PCI-ID, prüft den Build, nutzt DKMS, verwaltet nouveau und installiert den Persistenzdienst. Kann außerdem Bibliotheken in LXC mit NVIDIA-Zugriff aktualisieren.",
+ "section": "Hardware: GPUs und Coral-TPU"
+ },
+ "intro": {
+ "title": "Funktionsweise",
+ "body": "ProxMenux erkennt die GPU und bietet gepflegte NVIDIA-Zweige an, die ihre PCI-ID aufführen. Es sperrt nouveau, lädt den offiziellen .run-Installer, nutzt DKMS, installiert nvidia-persistenced, udev-Regeln und das NVIDIA Container Toolkit und bietet einen optionalen NVENC-Patch an. Build-Prüfungen beziehen sich auf den laufenden Kernel; erfolgreiche Kompilierung garantiert nicht, dass jede App funktioniert. Vorhandenen NVIDIA-LXC wird eine Aktualisierung der Userspace-Bibliotheken angeboten, versionsgleich außer unter Arch."
+ },
+ "who": {
+ "heading": "Für wen ist das?",
+ "body": "Für GPU-beschleunigte Video- oder Rechenanwendungen wie Plex, Jellyfin, Frigate, Immich oder Stable Diffusion in LXC zuerst den NVIDIA-Treiber auf dem Proxmox-Host installieren. Die direkte Zuweisung an eine VM nutzt den separaten VFIO-Ablauf."
+ },
+ "prereqs": {
+ "title": "Vorbereitung",
+ "gpu": "Eine NVIDIA-GPU im Host. Sie wird automatisch erkannt; AMD und Intel werden hier nicht verwaltet.",
+ "gpuCheck": "lspci | grep -i nvidia",
+ "notVm": "Die GPU darf nicht per VFIO für eine VM reserviert sein. Der Installer verweigert diesen Fall, um die Zuweisung nicht zu beeinträchtigen.",
+ "internet": "Internetzugang auf dem Host. Der Installer lädt den Treiber von download.nvidia.com herunter und klont optional nvidia-persistenced und nvidia-patch von GitHub.",
+ "space": "Platz in /opt/nvidia für .run und RAM für die Kompilierung einplanen. Der Nicht-Arch-LXC-Pfad prüft auf 1500 MiB freien Platz und kann bei geringerem RAM eine temporäre Erhöhung auf 2048 MiB anfragen; danach wird das alte Limit wiederhergestellt. Host-Neustart einplanen."
+ },
+ "vmWarn": {
+ "title": "GPU für VM reserviert? Hier stoppen",
+ "body": "Ist ein NVIDIA-Gerät an vfio-pci gebunden, beendet sich der Installer auch bei gestoppter VM. Eine Reservierung bedeutet nicht zwingend aktive VM-Nutzung. Planen Sie die Rückkehr zum Host-Treiber und entfernen Sie alte VM-/VFIO-Zuweisungen vor Neustart und Installation."
+ },
+ "running": {
+ "heading": "Ausführen des Installateurs",
+ "body": "Öffnen Sie Hardware Graphics → NVIDIA GPU Driver Installer in ProxMenux. Das Menü hängt davon ab, ob bereits ein Treiber aktiv ist.",
+ "imageAlt": "Hardware-Menü mit markiertem NVIDIA-Installer"
+ },
+ "howRuns": {
+ "heading": "Ablauf des Skripts",
+ "body": "Erkennt Geräte, wählt eine Version und installiert. Vor der Übersicht kann eine separat bestätigte VFIO-Bereinigung erfolgen. Repository-/Header-Vorbereitung und Download gehen dem Treiberaustausch voraus; nicht alle Änderungen beginnen erst nach einer einzigen Abschlussbestätigung."
+ },
+ "walkthrough": {
+ "detect": {
+ "title": "GPU Erkennung und Übersicht",
+ "body1": "Zeigt NVIDIA-Grafikcontroller, Treiberstatus oder „Kein NVIDIA-Treiber installiert“ sowie LXC mit konfiguriertem NVIDIA-Zugriff und deren Treiberversion.",
+ "body2": "GPU sowie Host-/Container-Versionen prüfen. Bei unerwarteter Auswahl in der Übersicht abbrechen; eine zuvor separat bestätigte VFIO-Bereinigung wurde bereits angewendet.",
+ "imageAlt": "Installationsübersicht mit GPUs, Treiberstatus und NVIDIA-LXC"
+ },
+ "version": {
+ "title": "Wählen Sie die Treiberversion",
+ "body1": "Filtert Versionen von nvidia.com, die die GPU-PCI-ID in der Liste unterstützter Chips enthalten, und sortiert Beta-/Entwicklerversionen heuristisch aus. <Version> — Empfohlen bevorzugt den neuesten Stand des installierten Zweigs, danach den Production Branch und zuletzt die höchste unterstützte Versionsnummer.",
+ "body2": "Ist der Treiber als mit keylase gepatcht erfasst, beschränkt die Auswahl sich auf die NVENC-Patch-Tabelle. Neu installieren / aktualisieren enthält weiterhin Bestätigungen und Patch-Abfragen; Ergebnis prüfen.",
+ "whyTitle": "Wie die Kernel-Kompatibilität validiert wird",
+ "whyBody": "Filtert nach gepflegten Zweigen und GPU-PCI-Unterstützung statt einer festen Kernel-/Treiber-Matrix. Ein Vorab-Build prüft den laufenden Kernel. Bestätigtes Scheitern führt zur Auswahl zurück; ein nicht verfügbarer Vorabtest kann nur warnen und fortfahren. Abschließende Installation und Laufzeitprüfung bleiben nötig.",
+ "imageAlt": "Auswahl GPU-kompatibler Zweige mit Empfehlung oben"
+ },
+ "uninstall": {
+ "title": "Vorhandenen Treiber vor Neuinstallation entfernen",
+ "body": "Nach Download und Prüfung des gewählten Installers wird der vorhandene Treiber entfernt. Stoppt NVIDIA-Dienste, entlädt Module, entfernt DKMS-Einträge und bereinigt nvidia-* / libnvidia-* / cuda-*. Gilt auch bei bestätigter Neuinstallation derselben Version."
+ },
+ "prepare": {
+ "title": "System vorbereiten",
+ "body": "Während der Vorbereitung führt das Skript Folgendes aus:",
+ "items": [
+ "Prüft Paketquellen vor Entfernung oder Installation. Ohne Abonnement und mit ausschließlich Enterprise-Repository fragt es nach dem Wechsel zu no-subscription; bei Ablehnung stoppt die Installation.",
+ "Installiert pve-headers-$(uname -r) (oder proxmox-headers-$(uname -r)), build-essential und dkms.",
+ "Erstellt die von ProxMenux verwaltete Datei /etc/modprobe.d/proxmenux-nouveau-blacklist.conf mit blacklist nouveau und options nouveau modeset=0. Erfasst eine zusätzlich eingefügte Zeile in blacklist.conf und versucht, nouveau zu entladen.",
+ "Schreibt /etc/modules-load.d/nvidia-vfio.conf mit nvidia und nvidia_uvm, so dass die Module beim Booten früh geladen werden."
+ ]
+ },
+ "download": {
+ "title": "Download und Ausführen des NVIDIA-Installationsprogramms",
+ "body": "Lädt NVIDIA-Linux-x86_64-<version>.run nach /opt/nvidia und prüft Dateigröße und ausführbaren Dateityp. Das ist keine kryptografische Signaturprüfung. Registriert DKMS für Neubauten bei Kerneländerungen; kompatibler Quellcode und Kernel bleiben nötig.",
+ "imageAlt": "Download-Fortschritt und DKMS-Build des NVIDIA-Installers"
+ },
+ "persist": {
+ "title": "Persistenzdienst und Udev-Regeln",
+ "body": "Installiert /etc/udev/rules.d/70-nvidia.rules zur Erstellung von /dev/nvidia* beim Start. Das hilft, LXC-Zugriffe vor Bereitstellung der Gerätedateien zu vermeiden."
+ },
+ "nvenc": {
+ "title": "Optional: NVENC-Patch anwenden",
+ "body": "NVENC-Sitzungsgrenzen hängen von GPU und Treiber ab. nvidia-smi „version mismatch“ melden.",
+ "body2": "Debian / Ubuntu und andere glibc-Container erhalten den entpackten .run-Installer mit --no-kernel-modules --no-dkms --no-install-compat32-libs; RAM kann vorübergehend auf 2 GiB erhöht und danach zurückgesetzt werden. Arch, Manjaro und EndeavourOS nutzen pacman -Syu nvidia-utils aus ihren Paketquellen, ohne Bindung an die Host-Version: Ergebnis prüfen. Alpine erhält entpackte .run-Dateien per pct push, installiert gcompat und binutils mit apk und erstellt SONAME-Links per readelf. Funktion prüfen; die Kompatibilitätsschicht garantiert nicht alle Bibliotheken auf musl.",
+ "imageAlt": "Dialog mit NVIDIA-LXC und Versionen zur Bestätigung des Updates"
+ },
+ "reboot": {
+ "title": "Neustart",
+ "body": "Nach der Treiberinstallation erstellt das Skript initramfs für alle Kernel neu; sein letzter Schritt bietet einen Neustart an. Diesen Neustart einplanen, um die dauerhafte Modul- und nouveau-Konfiguration bei einem frischen Start zu prüfen, auch wenn der neue Treiber vor dem Neustart bereits antwortet."
+ }
+ },
+ "reinstallUninstall": {
+ "heading": "Neuinstallieren oder Deinstallieren",
+ "intro": "Sind nvidia geladen und eine Version über nvidia-smi verfügbar, erscheint ein Aktionsmenü. Das erkennt einen aktiven Treiber; installierte Dateien können auch ohne geladenes Modul vorhanden sein.",
+ "imageAlt": "Das Aktionsmenü NVIDIA wird angeboten, wenn ein Treiber bereits installiert ist – zwei Möglichkeiten: Treiber neu installieren / aktualisieren oder den Treiber NVIDIA vollständig deinstallieren",
+ "imageCaption": "Das Aktionsmenü erscheint nur, wenn ein NVIDIA-Treiber derzeit auf dem Host aktiv ist.",
+ "reinstallHeading": "Neuinstallation / Update",
+ "reinstallBody": "Wählt eine Version, bereitet Paketquellen/Headers vor, lädt herunter und prüft den Build vor dem Treiberaustausch. Ermöglicht Updates innerhalb eines gepflegten Zweigs oder einen unterstützten Zweigwechsel. Danach erscheinen erneut Abfragen zu LXC-Bibliotheken und NVENC-Patch.",
+ "uninstallHeading": "Deinstallieren – Was entfernt wird",
+ "uninstallIntro": "Nach einer Ja/Nein-Bestätigung werden folgende Komponenten entfernt:",
+ "uninstallItems": [
+ "Stoppt und deaktiviert nvidia-persistenced und nvidia-powerd, versucht, nvidia_uvm, nvidia_drm, nvidia_modeset und nvidia zu entladen, und führt dann nvidia-uninstall --silent für die .run-Installation aus. Von NVIDIA abhängige LXC-Workloads sind betroffen; aktive Clients können das Entladen verhindern.",
+ "Führt apt purge auf nvidia-*, libnvidia-*, cuda-* und libcudnn* aus, entfernt den DKMS-Quellbaum sowie die Ordner nvidia-persistenced und nvidia-patch unter /opt/nvidia.",
+ "Entfernt die Module-Load Config (/etc/modules-load.d/nvidia-vfio.conf) und die Nouveau Blacklist-Einträge von ProxMenux. Legacy zweizeilige ProxMenux-Blacklist-Dateien werden migriert und entfernt; modifizierte oder nicht verwandte Administratordateien bleiben erhalten.",
+ "Entfernt /etc/udev/rules.d/70-nvidia.rules und setzt den NVENC-Status im verwalteten Installationsverzeichnis auf removed; es gibt keine separate Statusdatei.",
+ "Erstellt initramfs für alle Kernel neu, führt passend zur Bootkonfiguration proxmox-boot-tool refresh aus und fragt nach einem Neustart."
+ ],
+ "lxcWarnTitle": "LXC mit NVIDIA-Zugriff",
+ "lxcWarnBody": "Das Entfernen des Host-Treibers unterbricht NVIDIA-abhängige LXC-Anwendungen, auch wenn ihre Bibliotheken installiert bleiben. Wartungszeit für Frigate, Plex, Jellyfin, Ollama und andere GPU-Apps einplanen."
+ },
+ "updates": {
+ "heading": "Update-Benachrichtigungen",
+ "body": "Der installierte NVIDIA-Treiber wird im Verzeichnis der von ProxMenux verwalteten Installationen erfasst. Beim Start und alle 24 Stunden vergleicht der Monitor die unter download.nvidia.com/XFree86/Linux-x86_64/ verfügbaren Versionen mit der von nvidia-smi gemeldeten Version. Er benachrichtigt nur, wenn im installierten Versionszweig ein neueres Wartungsrelease verfügbar ist.",
+ "kindsHeading": "Update-Meldung",
+ "kindsItems": [
+ "Wartungsupdate im gleichen Zweig. Beispiel: installiert 580.65.06 → verfügbar 580.105.08. Monitor leitet daraus keine Kernel-Kompatibilität anderer Zweige ab."
+ ],
+ "antiTitle": "Wiederholte Meldungen vermeiden",
+ "antiBody": "Eine Meldung pro neuer Version statt bei jeder täglichen Prüfung. Ohne neuere Version im installierten Zweig bleibt die Meldung aus.",
+ "applyTitle": "Anwendung der Aktualisierung",
+ "applyBody": "Monitor meldet Updates ohne automatische Installation. Im Installer Neu installieren / aktualisieren und eine unterstützte Version wählen, dann Build und Installation abschließen. Der Ablauf endet mit einer Neustartabfrage; Neustart einplanen und danach Host sowie LXC-Bibliotheken prüfen."
+ },
+ "verify": {
+ "heading": "Installation überprüfen",
+ "intro": "Nach dem Host-Neustart per SSH oder Proxmox-Shell anmelden und ausführen:",
+ "after": "GPU und erwartete Treiberversion prüfen. Prozesse können bereits erscheinen, wenn Host-Dienste oder automatisch gestartete Container die GPU nutzen. Danach den Persistenzdienst prüfen:",
+ "imageAlt": "Ausgabe von nvidia-smi auf dem Host mit der erkannten GPU und der installierten Treiberversion"
+ },
+ "troubleshoot": {
+ "heading": "Fehlerbehebung",
+ "smiFailTitle": "nvidia-smi meldet „NVIDIA-SMI has failed“",
+ "smiFailBody": "Mögliche Ursachen sind nouveau, fehlende oder unpassende Kernel-Header, inkompatibler Treiberquellcode oder andere Ladefehler. lsmod | grep nouveau, dmesg | grep -i nvidia und Installer-/DKMS-Protokolle prüfen. Bei fehlerhafter nouveau-Regel zuerst /etc/modprobe.d/proxmenux-nouveau-blacklist.conf prüfen, dann update-initramfs -u -k all und Neustart. Nicht jeder Buildfehler betrifft Headers.",
+ "lxcMissTitle": "LXC Container kann GPU nach dem Host-Update nicht sehen",
+ "lxcMissBody": "Vor Neuinstallation Host-Geräte, LXC-Berechtigungen und Bibliotheksversion prüfen. Bei Versionskonflikten passende Userspace-Treiber über den unterstützten Distributionsweg installieren; auf glibc mit --no-kernel-modules. Bibliotheksinstallation repariert keine fehlenden Mounts oder Berechtigungen.",
+ "logTitle": "Überprüfen Sie das Installationsprotokoll",
+ "logBody": "Die Installation protokolliert in /tmp/nvidia_install.log. Bei Fehlern Download, DKMS-Build und Dienste prüfen. Fügen Sie das Protokoll dem GitHub-Fehlerbericht bei."
+ },
+ "manualSteps": {
+ "heading": "Suchen Sie die manuellen Schritte?",
+ "body": "Unter wget und ./NVIDIA-Linux-...run. Sie erklären Komponenten, bilden den Installer aber nicht exakt ab. Der gepflegte ProxMenux-Ablauf bietet GPU-Filterung, Build-Prüfung, LXC-Updates und VFIO-Prüfungen."
+ },
+ "related": {
+ "heading": "Verwandte Themen",
+ "items": [
+ {
+ "label": "GPU zu VM hinzufügen (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — NVIDIA direkt per VFIO einer VM zuweisen."
+ },
+ {
+ "label": "GPU zu LXC hinzufügen",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — NVIDIA mit einem oder mehreren Containern teilen."
+ },
+ {
+ "label": "GPU-Modus wechseln (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — zwischen VM-Passthrough und gemeinsamer LXC-Nutzung wechseln."
+ },
+ {
+ "label": "ProxMenux Monitor — Register Hardware",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — GPU-Dialog zum Öffnen dieses Installers und zur Live-Überwachung."
+ },
+ {
+ "label": "Befehle für GPU-Passthrough",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": "— lspci / dmesg / IOMMU / nvidia-smi-Referenz."
+ }
+ ]
+ }
+}
diff --git a/web/messages/de/docs/hardware/switch-gpu-mode.json b/web/messages/de/docs/hardware/switch-gpu-mode.json
new file mode 100644
index 00000000..d0ee5780
--- /dev/null
+++ b/web/messages/de/docs/hardware/switch-gpu-mode.json
@@ -0,0 +1,172 @@
+{
+ "meta": {
+ "title": "GPU-Modus wechseln (VM ↔ LXC) | ProxMenux-Dokumentation",
+ "description": "GPU zwischen VFIO für VMs und nativem Treiber für LXC umschalten. ProxMenux erkennt den Treiber, fragt nach dem Umgang mit betroffenen Gästen, entfernt zugehörige Audiozuweisungen und erstellt bei Host-Konfigurationsänderungen initramfs neu."
+ },
+ "header": {
+ "title": "GPU-Modus wechseln (VM ↔ LXC)",
+ "description": "Zugewiesene GPU zwischen VM-Passthrough und LXC-Nutzung umschalten. ProxMenux verwaltet Treiberbindung, VFIO, Module und initramfs und fragt nach dem Umgang mit betroffenen Gästen. Prüfen Sie die Auswahl und nach dem Neustart die Konfiguration.",
+ "section": "Hardware: GPUs und Coral-TPU"
+ },
+ "intro": {
+ "title": "Funktionsweise",
+ "body": "Mit vfio-pci ist die GPU für eine VM reserviert. Mit nativem Treiber (i915 / amdgpu / nvidia) können Host und LXC sie teilen. GPU-Modus wechseln verwaltet vfio.conf, Treibersperren und Gastzuweisungen und meldet verbleibende Verweise."
+ },
+ "graphics": {
+ "lxcTitle": "Bereit für LXC-Container",
+ "lxcDesc": "Nativer Treiber aktiv",
+ "vmTitle": "Bereit für VM-Passthrough",
+ "vmDesc": "VFIO-PCI-Treiber aktiv"
+ },
+ "when": {
+ "heading": "Wann sollte ich das verwenden?",
+ "intro": "Verwenden Sie dies, wenn die GPU bereits zugewiesen ist und anders genutzt werden soll:",
+ "headerSituation": "Lage",
+ "headerUse": "Nutzen Sie diese Seite?",
+ "rows": [
+ {
+ "situation": "GPU frei und noch nie zugewiesen: einer VM zuweisen.",
+ "useRich": "Nein — vfio-pci zugewiesen; ich möchte sie stattdessen in einem LXC nutzen.",
+ "useRich": "Ja — diese Seite."
+ },
+ {
+ "situation": "Die GPU wird mit einem LXC geteilt; ich möchte sie exklusiv einer VM zuweisen.",
+ "useRich": "Ja — diese Seite."
+ },
+ {
+ "situation": "Ich möchte alle Gastzuweisungen dieser GPU entfernen.",
+ "use": "Der LXC-Modus gibt die GPU an den Host-Treiber zurück; die VM-Konfliktrichtlinie kann hostpci-Einträge entfernen, LXC-Geräteeinträge müssen jedoch separat entfernt werden. Die GPU bleibt dabei an einen Treiber gebunden."
+ }
+ ]
+ },
+ "prereqs": {
+ "title": "Vorbereitung",
+ "assigned": "Bereits zugewiesene GPU in einer VM über VFIO oder in einem LXC. Für die erste Zuweisung GPU zu VM / LXC hinzufügen verwenden.",
+ "iommu": "IOMMU muss auf dem Host aktiv sein beim Wechsel in den VM-Modus. Firmware-Einstellungen und Kernel-Unterstützung sind beide entscheidend. Fehlt intel_iommu=on oder amd_iommu=on im laufenden Kernel, fügt das Skript es mit iommu=pt zu /etc/kernel/cmdline (ZFS-Root-Marker) oder /etc/default/grub hinzu und führt dann proxmox-boot-tool refresh oder update-grub aus. Prüfen Sie eventuelle Warnungen und starten Sie bei Aufforderung neu.",
+ "iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
+ "reboot": "Neustart einplanen. Dauerhafte Treiber- und Bootänderungen können ein neues initramfs und einen Neustart erfordern. Das Skript fragt am Ende danach.",
+ "knowList": "Betroffene VMs und LXC kennen. Das Skript erkennt Verweise und fragt nach dem Umgang mit jedem Gast; eine bekannte Liste erleichtert die Prüfung."
+ },
+ "blocklist": {
+ "title": "Nicht alle GPUs können sicher an einen VM übergeben werden",
+ "body": "Das Skript sperrt den VM-Modus für die Geräte-IDs 8086:5a84 und 8086:5a85 gemäß seiner Kompatibilitätsrichtlinie. Passt eine gewählte GPU, bricht es den Wechsel in den VM-Modus ab und kehrt zur GPU-Auswahl zurück oder beendet sich, wenn es die einzige GPU ist. Diese Sperrliste verhindert nicht den Wechsel in den LXC-Modus; andere Prüfungen können weiterhin gelten."
+ },
+ "running": {
+ "heading": "Skript ausführen",
+ "body": "Öffnen Sie Hardware: GPUs und Coral-TPU → GPU-Modus wechseln (VM ↔ LXC) in ProxMenux.",
+ "imageAlt": "Menüpunkt GPU-Modus wechseln (VM ↔ LXC) im Hardware-Menü"
+ },
+ "howRuns": {
+ "heading": "Ablauf des Skripts",
+ "body": "GPU-Auswahl und Richtung werden vor dem Hauptwechsel geprüft. Eine separate Bereinigung veralteter VFIO-Einträge kann schon vorher fragen; betroffene Gäste haben eigene Konfliktdialoge. Jede Bestätigung lesen: Nicht alle Änderungen sind durch eine einzige Abschlussbestätigung abgedeckt."
+ },
+ "walkthrough": {
+ "heading": "Schritt für Schritt",
+ "detect": {
+ "title": "GPUs und aktuellen Treiber erkennen",
+ "body": "Erfasst VGA-, 3D- und Display-Controller des Hosts und prüft /sys/bus/pci/devices/*/driver. Zeigt Name, PCI-Adresse und aktuellen Treiber jeder GPU zur Erkennung des Modus.",
+ "imageAlt": "GPU Checkliste mit jedem erkannten GPU mit seinem aktuellen Treiber (vfio-pci / nvidia / amdgpu / i915) und PCI-Slot"
+ },
+ "pickGpu": {
+ "title": "GPUs zum Umschalten auswählen",
+ "body": "Eine GPU wird automatisch gewählt. Bei mehreren können Sie mehrere markieren, sofern alle im gleichen Modus sind. Bei gemischten Modi müssen Sie die Auswahl eingrenzen.",
+ "tipTitle": "Mehrere GPUs gemeinsam umschalten",
+ "tipBody": "Beispiel: drei NVIDIA-GPUs in den VM-Modus schalten, danach die iGPU in den LXC-Modus zurückgeben. Zwei Durchläufe mit jeweils gemeinsamem Ziel statt einzelner Aufrufe pro Karte."
+ },
+ "direction": {
+ "title": "Überprüfung der vorgeschlagenen Richtung",
+ "intro": "Basierend auf dem aktuellen Modus schlägt das Skript das Gegenteil als Ziel vor:",
+ "items": [
+ "VM → LXC: Entfernt die Bindung an vfio-pci, damit der native Treiber (nvidia, amdgpu, i915) die GPU nutzen kann. Bei NVIDIA werden die betreffenden BDF-Einträge aus /etc/udev/rules.d/10-proxmenux-vfio-bind.rules für den nächsten Start entfernt.",
+ "LXC → VM: bereitet die Bindung an vfio-pci vor. AMD / Intel sperren den nativen Treiber und nutzen options vfio-pci ids=…. Bei NVIDIA wird nvidia nur dann global gesperrt, wenn jede NVIDIA-GPU des Hosts in VFIO ist; andernfalls setzen Regeln pro BDF driver_override=vfio-pci für die Geräte der betroffenen IOMMU-Gruppen, und NVIDIA-GPUs außerhalb dieser Gruppen behalten nvidia. Prüfen Sie vor dem Wechsel alle Gruppenmitglieder."
+ ],
+ "outro": "Bestätigen Sie die Richtung oder brechen Sie ab."
+ },
+ "conflict": {
+ "title": "Umgang mit betroffenen VMs und LXC",
+ "body": "Prüft /etc/pve/lxc/*.conf auf Geräteverweise nach Treiberfamilie und /etc/pve/qemu-server/*.conf auf PCI-Zuweisungen. Die LXC-Erkennung ordnet nicht jede Karte exakt per BDF zu. Prüfen Sie die erkannten Gäste und wählen Sie den Umgang mit jedem:",
+ "headerPolicy": "Richtlinie",
+ "headerEffect": "Wirkung",
+ "headerWhen": "Wann zu wählen",
+ "keepPolicy": "Konfiguration behalten, Autostart deaktivieren",
+ "keepEffect": "pct set CTID -onboot 0 oder qm set VMID -onboot 0. Die GPU-Einträge bleiben erhalten.",
+ "keepWhen": "Wenn der Gast nach Rückkehr zum ursprünglichen GPU-Modus wieder genutzt werden soll. Konservative Standardwahl.",
+ "removePolicy": "GPU aus config entfernen",
+ "removeEffect": "Entfernt die erkannten hostpci- / dev-Einträge und unterstützte ältere Verweise.",
+ "removeWhen": "Wenn der Gast ohne GPU arbeiten soll. Zuerst App-Einstellungen prüfen: CPU-Ersatzbetrieb hängt von der Anwendung ab; das Entfernen des Geräts konfiguriert sie nicht automatisch um.",
+ "imageAlt": "Dialog zum Umgang mit betroffenen VMs oder LXC"
+ },
+ "audio": {
+ "title": "Zugehörige Audiozuweisungen beim Verlassen des VM-Modus entfernen",
+ "body1": "Viele dedizierte NVIDIA-/AMD-GPUs bieten HDMI-Audio als Funktion .1 desselben Slots; weitere Audiogeräte können zugewiesen sein. Nach Entfernen der GPU können veraltete Audioeinträge vom Typ hostpci bleiben. Prüfen Sie, welche Zuweisungen erhalten bleiben sollen.",
+ "body2": "Erkennt die Audio-BDF-Adressen und zeigt eine Auswahlliste zum Entfernen. Zugehörige Vendor:Device-IDs werden nur aus /etc/modprobe.d/vfio.conf entfernt, wenn keine andere VM sie nutzt."
+ },
+ "apply": {
+ "title": "Änderungen an Host und Gästen anwenden",
+ "body": "Sobald Sie bestätigen, schreibt das Skript die hostseitigen Änderungen - vfio.conf, Blacklist, Module und (für NVIDIA) die Per-BDF-Udev-Regel bei /etc/udev/rules.d/10-proxmenux-vfio-bind.rules plus den BDF-Status bei /etc/proxmenux/vfio-bind.bdfs. Es wendet auch die gewählte Konfliktpolitik auf jeden betroffenen VM/LXC an. Wenn sich die Host-Konfiguration tatsächlich geändert hat, läuft update-initramfs -u -k all gefolgt von proxmox-boot-tool refresh; ansonsten werden beide übersprungen."
+ },
+ "reboot": {
+ "title": "Neustart",
+ "body": "Starten Sie den Host neu, um die neue dauerhafte Bindung anzuwenden. Sie können dies verschieben, müssen aber vor dem Start des Zielgasts den aktiven Treiber prüfen: Bis zum Neustart kann noch der vorherige aktiv sein.",
+ "imageAlt": "Zusammenfassungsdialog, der auflistet, was sich geändert hat, gefolgt von der Neustartaufforderung"
+ }
+ },
+ "manual": {
+ "heading": "Manuelle Prüfung",
+ "intro": "Prüfen Sie vor VM → LXC Treiber und BDF-Richtlinie. Das NVIDIA-Beispiel nutzt 10de:2204; passen Sie es an Ihre Karte an. Die Befehle lesen den Zustand; das Skript verwaltet außerdem Gäste und IOMMU-Gruppenmitglieder.",
+ "lxcToVm": "Vor LXC → VM PCI-Adresse und IOMMU-Gruppe prüfen. Ersetzen Sie die Beispieladresse und prüfen Sie vor der Zuweisung alle Gruppenmitglieder.",
+ "oneVmTitle": "Eine physische VFIO-GPU kann nur eine VM gleichzeitig nutzen",
+ "oneVmBody": "Das Setzen mehrerer hostpci-Einträge mit demselben PCI-Slot in zwei VMs ist eine gültige Konfiguration, aber nur eine der VMs kann mit dem GPU beginnen - die zweite wird fehlschlagen. Beim ProxMenux-Konfliktpolitikschritt geht es genau darum, diese Falle zu vermeiden."
+ },
+ "verification": {
+ "heading": "Überprüfung nach dem Neustart"
+ },
+ "troubleshoot": {
+ "heading": "Fehlerbehebung",
+ "stillVfioTitle": "GPU zeigt immer noch vfio-pci nach dem Umschalten auf LXC Modus",
+ "stillVfioBody": "Ein geladenes VFIO-Modul zeigt nicht, welcher Treiber diese GPU besitzt. Kartenbindung sowie Abschluss von update-initramfs und Neustart prüfen. lsmod | grep vfio listet nur Module. Bei AMD / Intel vfio.conf prüfen; bei NVIDIA /etc/proxmenux/vfio-bind.bdfs und /etc/udev/rules.d/10-proxmenux-vfio-bind.rules. Alte Richtlinien vor update-initramfs -u -k all und Neustart korrigieren.",
+ "vmFailTitle": "VM startet nach Wechsel der GPU in den LXC-Modus nicht",
+ "vmFailBody": "Prüfen Sie verbliebene veraltete hostpci-Verweise. Die Richtlinie GPU aus Konfiguration entfernen kann sie beim geplanten Wechsel entfernen. Prüfen Sie vor erneutem Skriptaufruf die Richtung, um den Modus nicht versehentlich umzukehren. Alternativ die alte Zuweisung in Proxmox bei gestoppter VM entfernen.",
+ "smiFailTitle": "nvidia-smi meldet „Driver/library version mismatch“ nach Rückkehr zu LXC",
+ "smiFailBody": "Vergleichen Sie das geladene NVIDIA-Modul mit installierten Bibliotheken, auch in LXC. Versionen zuerst abgleichen: Ein Neustart lädt das installierte Modul, repariert aber keine unpassenden Pakete. Neuladen mit modprobe -r nvidia und modprobe nvidia erfordert gestoppte GPU-Clients und kann bei genutzten abhängigen Modulen scheitern.",
+ "logTitle": "Ausführungsprotokoll",
+ "logBody": "Jeder Aufruf schreibt in /tmp/proxmenux_gpu_switch_mode.log auf dem Host. Fügen Sie das Protokoll Ihrer GitHub-Hilfeanfrage bei."
+ },
+ "related": {
+ "heading": "Verwandte Themen",
+ "items": [
+ {
+ "label": "GPU zu VM hinzufügen (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — erstmalige Einrichtung des VM-Modus."
+ },
+ {
+ "label": "GPU zu LXC hinzufügen",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — erstmalige Einrichtung des LXC-Modus."
+ },
+ {
+ "label": "Installieren Sie NVIDIA Treiber (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": "— erforderlich für den LXC-Modus auf NVIDIA-GPUs."
+ },
+ {
+ "label": "ProxMenux Monitor — Register Hardware",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — Bereich Grafikkarten mit aktuellem Modus und Umschaltfunktion."
+ },
+ {
+ "label": "Befehle für GPU-Passthrough",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — kurze Befehlsreferenz."
+ }
+ ]
+ }
+}
diff --git a/web/messages/en/docs/hardware/coral-tpu-lxc.json b/web/messages/en/docs/hardware/coral-tpu-lxc.json
index cb97aeb7..1440c05f 100644
--- a/web/messages/en/docs/hardware/coral-tpu-lxc.json
+++ b/web/messages/en/docs/hardware/coral-tpu-lxc.json
@@ -14,18 +14,18 @@
},
"whenUse": {
"heading": "When to use this",
- "body": "Typical use case: running apt-get. Non-Debian containers (Alpine, Arch, RHEL, SUSE…) are still supported in passthrough-only mode: the script detects the distro and offers a prompt to skip the libedgetpu APT install while still writing the device passthrough config — useful for app containers that bundle the runtime themselves (e.g. the Frigate Docker image).",
"downtime": "Be OK with a brief downtime of the container. The script stops it to apply config changes, then starts it back up to install drivers inside. No host reboot needed."
},
"hostPrep": {
"title": "Host must be prepared first",
- "body": "If you run this script before installing Coral drivers on the host (the gasket/apex kernel module for M.2, the libedgetpu runtime for USB), the LXC config is still written but the container won't find the device at runtime. Order matters: host install → LXC passthrough → in-container app."
+ "body": "M.2 / PCIe needs the host gasket/apex driver and a working device node. USB needs the connected device and permissions; it does not require the host to run the app. The libedgetpu runtime must be available where the app runs. Follow host preparation → LXC device access → app setup."
},
"running": {
"heading": "Running the script",
@@ -34,39 +34,39 @@
},
"howRuns": {
"heading": "How the script runs",
- "body": "One decision upfront (which container?), then the script handles USB and PCIe paths independently based on what it finds on the host. If both are present, both get passed."
+ "body": "Choose the target container. The script configures USB access even if no USB Coral is currently connected, then adds M.2 / PCIe access when the corresponding hardware is detected."
},
"walkthrough": {
"heading": "Walking through the flow",
"pick": {
"title": "Pick the LXC container",
- "body": "A dialog shows every LXC on the host (from pct list). Pick the one that should get the Coral. Running or stopped, it doesn't matter — the script handles both (stops it briefly to write config, then starts it back up to install drivers)."
+ "body": "The picker lists eligible containers from pct list; OCI-image containers are hidden and managed through OCI manager Apps. Choose the target, running or stopped. The script stops it if needed, writes configuration and starts it for runtime installation."
},
"gpuHint": {
"title": "GPU passthrough suggestion (optional)",
- "body": "If the host has a GPU (Intel iGPU, AMD, NVIDIA) and the chosen container does NOT have GPU passthrough configured, the script shows a one-time dialog suggesting you run /dev/coral whatever USB port it's in, and (2) bind-mounts the whole /dev/bus/usb tree into the container.",
+ "body": "The script creates a host udev rule for the /dev/coral symlink and bind-mounts the whole /dev/bus/usb tree into the container. This USB configuration is written even when no Coral USB is currently connected; it exposes more than just that one device.",
"whyTitle": "Why mount /dev/bus/usb instead of /dev/coral?",
- "whyBody": "The USB device node path (e.g. /dev/bus/usb/001/005) changes when you replug the accelerator into a different port. Earlier versions of the script bind-mounted the /dev/coral symlink, which pointed at an old path and broke. Mounting the whole USB tree means the container sees whatever the current path is, so a replug just works."
+ "whyBody": "USB node paths such as /dev/bus/usb/001/005 change on reconnect. Older versions bind-mounted the /dev/coral symlink and could retain a stale path. Mounting the whole USB tree makes the current device node visible; the app may still need to reopen it."
},
"pcie": {
"title": "Write LXC config — M.2 / PCIe path",
"body1": "If a M.2 / PCIe Coral is present on the host and /dev/apex_0 exists (the apex kernel module is loaded), the script uses the modern Proxmox dev API which handles cgroup2 permissions automatically for both privileged and unprivileged containers:",
- "body2": "If the host hasn't booted yet with the apex module loaded (you just ran /dev/apex_0 doesn't exist yet. The script falls back to classic cgroup2 + bind mount with create=file so the entries are valid even when the device hasn't materialised:",
+ "body2": "If /dev/apex_0 is absent after create=file and, only when the apex major number is listed in /proc/devices, a classic cgroup2 rule. Neither creates a working device:",
"rebootTitle": "Reboot the host first if you just installed Coral drivers",
- "rebootBody": "The fallback cgroup2 + mount will be written, but the device only actually exists after a host reboot loads the apex module. If you haven't rebooted, reboot now before starting the container."
+ "rebootBody": "The fallback mount does not load the host apex driver. Load the driver, or reboot after installation, and verify the host device exists. Re-run the script once the device is ready to apply the modern device entry, then restart the container."
},
"drivers": {
"title": "Start the container + install Coral runtime inside",
- "body": "Config changes in Proxmox LXC take effect on the next start — so the script starts the container, waits up to 15 seconds for pct exec to respond, then drops a bash script inside that:",
+ "body": "The script starts the container and waits up to 15 seconds for its running status, then uses pct exec to run the runtime installer inside. The installer:",
"items": [
"Runs apt-get update.",
"Installs the Coral repository prerequisites: gnupg, curl, ca-certificates.",
"Imports Google's Coral GPG key to /etc/apt/keyrings/coral-edgetpu.gpg (modern path, same as the host installer uses) and adds the coral-edgetpu-stable APT repository with signed-by=.",
- "Installs the latest libedgetpu1-std (default). If you have a M.2 Coral, you'll be prompted to pick between libedgetpu1-std (standard) and libedgetpu1-max (max performance, runs hotter)."
+ "Installs libedgetpu1-std by default. When an M.2 Coral is detected, the script offers a choice of libedgetpu1-std or libedgetpu1-max. The choice of runtime package does not itself configure application detection settings."
],
"noIgpuTitle": "Why no iGPU drivers here?",
"noIgpuBody": "Earlier versions of this script also installed Intel va-driver-all, intel-opencl-icd and friends so the same container could do Quick Sync video decode alongside Coral inference. That doubled-up responsibility caused confusing failures when the user only wanted Coral. The iGPU side is now the exclusive job of lsmod | grep apex — if empty, run modprobe apex, or reboot if you just installed Coral drivers. Once the host has /dev/apex_0, restart the container: pct stop <ctid> && pct start <ctid>.",
+ "apexBody": "Check the host driver first: lsmod | grep apex. If missing, try modprobe apex or reboot after driver installation. Once /dev/apex_0 exists on the host, verify the LXC device entry (re-run the script if only the fallback entries were written) and restart the container with pct stop <ctid> && pct start <ctid>.",
"replugTitle": "USB Coral disappears after replug in a different port",
"replugBody": "This is exactly why the script mounts /dev/bus/usb instead of the /dev/coral symlink. If you're hitting this, check your LXC config has lxc.mount.entry: /dev/bus/usb dev/bus/usb ... and not a reference to /dev/coral directly. Old configs from earlier script versions may need updating — re-run the script on the same container and the config gets refreshed.",
"alpineTitle": "Alpine / Arch / RHEL / SUSE container — runtime not installed",
- "alpineBody": "If you chose passthrough-only mode when the script prompted, the LXC config is written and the Coral device is visible inside the container, but the libedgetpu runtime is not installed. That's by design: Google's APT repo only ships for Debian/Ubuntu. Install the runtime manually with your distro's package manager (Alpine: apk add; Arch: AUR; RHEL/SUSE: build from source) following Google's official guide, or run an app container that bundles the runtime — the Frigate Docker image is the canonical example: just expose the device with --device /dev/apex_0:/dev/apex_0 (M.2) or the USB bind mount the script already wrote (USB).",
+ "alpineBody": "In passthrough-only mode, device configuration is written but libedgetpu is not installed. Use a compatible community package or build from source; check availability before using a package command such as Alpine apk add. An app image such as Frigate can bundle the runtime. With nested Docker, also forward the M.2 device using --device /dev/apex_0:/dev/apex_0, or mount the USB tree into that Docker container; the LXC mount alone does not forward it into Docker.",
"frigateTitle": "Frigate says 'Coral EdgeTPU detected but not available'",
- "frigateBody": "Almost always a permissions issue inside the container. Frigate runs as root by default; check the root user is in the plugdev group inside the container (for USB), and that the process can read /dev/apex_0 (for M.2). ls -l /dev/apex_0 from inside the container should show group apex — if not, add the GID alignment to /etc/group or switch the container to privileged mode.",
+ "frigateBody": "Check runtime availability, device visibility and read/write access for the actual app process. For USB, inspect permissions and any plugdev membership. For M.2, inspect /dev/apex_0 with ls -l /dev/apex_0. A group name such as apex in /etc/group is not enough: numeric GIDs and LXC mappings must match. Also check whether another process already claims the TPU; do not switch to privileged mode as the first fix.",
"logsTitle": "Check both host and container logs",
- "logsBody": "On the host: journalctl -u pvedaemon | grep -i coral. Inside the container: check the app logs (Frigate: /config/logs/, CodeProject.AI: its own log directory). The classic error pattern is \"Coral detected, runtime loaded, but inference engine can't claim it\" — that's permissions 9 out of 10 times."
+ "logsBody": "On the host, inspect kernel device messages with journalctl -k | grep -i -e apex -e gasket -e usb. Inside the container, inspect the app logs; for nested Docker use docker logs <container>. Permissions, missing runtime, USB connectivity or another process claiming the TPU can all cause failures."
},
"related": {
"heading": "Related",
diff --git a/web/messages/en/docs/hardware/gpu-vm-passthrough.json b/web/messages/en/docs/hardware/gpu-vm-passthrough.json
index e772d0ac..9cc33400 100644
--- a/web/messages/en/docs/hardware/gpu-vm-passthrough.json
+++ b/web/messages/en/docs/hardware/gpu-vm-passthrough.json
@@ -10,7 +10,7 @@
},
"intro": {
"title": "What this does",
- "body": "Everything the hostpci setup, ROM dumps on AMD, KVM hiding on NVIDIA — done in one run with sanity checks at every step. The script is also aware of the other things on your host: if the same GPU is already assigned to an LXC or another VM, it offers to migrate cleanly instead of silently breaking the existing setup."
+ "body": "Automates the relevant host and hostpci configuration steps described in the lspci.",
"gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
- "iommu": "IOMMU virtualization available in BIOS/UEFI (Intel VT-d or AMD-Vi). If it's off at the firmware level, no amount of Linux config fixes it — you have to enable it in the BIOS first. The script detects this and offers to enable it on the OS side.",
- "q35": "The target VM uses q35 machine type. Older i440fx does not reliably support PCIe passthrough and the script will refuse to proceed.",
- "q35Check": "qm config '<'vmid'>' | grep machine",
+ "iommu": "IOMMU support must be available in hardware and enabled in firmware where required (Intel VT-d or AMD-Vi). The script checks the running system and can configure Linux boot parameters; it cannot change BIOS/UEFI settings or prove that every inactive IOMMU is disabled in firmware.",
+ "q35": "This assistant requires the q35 machine type and refuses i440fx. Machine type is separate from BIOS/UEFI firmware; changing an existing VM chipset requires planning and is not performed automatically.",
+ "q35Check": "qm config VMID | grep machine",
"moreGpus": "Preferably more than one GPU in the host, or console access on another output (IPMI, KVM-over-IP, serial). Once you pass the only GPU to a VM, the host console goes dark. With two NVIDIA GPUs you can pass one to a VM and keep the other on the host — the script handles this per-BDF (see NVIDIA in the vendor notes below).",
- "nvidiaInstalled": "If you're on a Proxmox that already installed the NVIDIA driver via nvidia driver and rebound to vfio-pci. The nvidia module stays loaded so any other NVIDIA GPU you have on the host keeps working with nvidia-smi."
+ "nvidiaInstalled": "If you installed vfio-pci rather than nvidia. The nvidia module can remain available for other cards outside the affected IOMMU group; verify them with nvidia-smi."
},
"pickOne": {
"title": "VM passthrough vs LXC sharing — pick one per GPU",
@@ -39,34 +39,34 @@
},
"howRuns": {
"heading": "How the script runs",
- "body": "The flow has three phases with clear separation between \"collecting information and decisions\" and \"actually applying changes\". Until the final confirmation, nothing on your host or VM has been touched."
+ "body": "Detection and selection precede the main host/VM changes and a final summary confirms that plan. Enabling IOMMU has its own earlier confirmation and can already edit the boot configuration. Later associated-audio cleanup may also ask for a choice."
},
"walkthrough": {
"heading": "Walking through the flow",
"detect": {
"title": "Detect GPUs and check IOMMU",
- "body": "The script lists every GPU it finds. If IOMMU isn't already enabled in the running kernel cmdline, you'll get a yes/no prompt to append intel_iommu=on (or amd_iommu=on) + iommu=pt to the right boot file. Selection is based on the bootloader: /etc/kernel/cmdline when the host boots via systemd-boot (detected by the presence of root=ZFS= in that file, the default on ProxmoxVE-installed ZFS-on-root systems), otherwise /etc/default/grub. If you accept and the kernel cmdline changes, the script flags that a reboot will be needed at the end.",
+ "body": "Treats IOMMU as active only when the running kernel has intel_iommu=on or amd_iommu=on and IOMMU groups exist. If the parameter is already saved for the next boot, it continues in pending-reboot mode; otherwise a separately confirmed step can add it with iommu=pt. Its boot-file heuristic uses /etc/kernel/cmdline when a ZFS-root marker such as root=ZFS= exists there; otherwise it uses /etc/default/grub. That heuristic is not proof of the actual bootloader. Newly configured IOMMU takes effect after reboot; inspect the real groups afterwards.",
"tipTitle": "Already ran post-install?",
- "tipBody": "If you previously enabled /sys/bus/pci/devices/<pci>/reset_method: if the card is an APU without FLR it blocks (practically unusable); a dedicated AMD card without FLR is also blocked; anything with an unknown reset mode warns but lets you continue with explicit override.",
+ "AMD reset policy. Reads /sys/bus/pci/devices/<pci>/reset_method. An APU or dedicated card without FLR is blocked by this assistant’s policy; an unknown subtype without FLR requires an explicit override. This does not establish universal hardware impossibility.",
"Not in D3cold. Some AMD cards report D3cold power state while idle, which makes them invisible during VM startup. Blocked until you wake the GPU.",
- "IOMMU group analysis. Reads /sys/kernel/iommu_groups/ to find every non-bridge device in the GPU's group. All of them will be passed to the VM together — if your motherboard groups the GPU with a network card, the network card goes too."
+ "IOMMU group analysis. Reads /sys/kernel/iommu_groups/ and includes all non-bridge members in the VM plan, possibly network or storage controllers. When the group contains devices from another slot, the script lists them before the summary; check that the host does not need any of them. If IOMMU is pending reboot, real groups are unavailable and the plan initially contains only the selected GPU function; verify isolation after reboot."
],
"audioIntro": "Audio companion. Two paths, depending on where the audio lives:",
- "audioDgpu": "Discrete GPU (NVIDIA / AMD): HDMI audio sits on the same card as function .1 of the GPU's PCI slot. Auto-included. This audio device was never used by the host, so no one loses anything.",
+ "audioDgpu": "Discrete GPU: HDMI audio often occupies function .1 of the same PCI slot and is automatically included when detected. If the host was using that audio device, it loses access when the device is reserved for the VM.",
"audioIgpu": "Intel iGPU (or any GPU without a .1 sibling): the HDMI / analog audio lives on the chipset at a different slot (00:1f.3 typically). The script scans the host, lists every PCI audio controller with its current driver (snd_hda_intel, etc.), and asks you which one(s) to pass through. Default is none — you explicitly opt in."
},
"pickVm": {
"title": "Pick the target VM",
- "body": "You're shown the list of VMs on the host and pick one. The script checks the VM is q35 — BIOS/i440fx machine types are refused because PCIe passthrough on them is unreliable. If you have a q35 VM with the GPU already assigned (partially or fully), the existing entry is reused instead of being duplicated.",
+ "body": "Choose a VM from the list. The assistant requires q35 and reuses existing GPU entries where possible. BIOS/UEFI firmware is a separate setting, not a machine type; this check does not automatically change the installed guest’s chipset or boot mode.",
"imageAlt": "VM list with name, ID and status shown as a picker"
},
"switchMode": {
@@ -75,34 +75,34 @@
"items": [
"GPU is free. Nothing to do, continue.",
"GPU is in a different VM. If the source VM is currently running, the script aborts — two VMs can't share an exclusive VFIO assignment, and the source VM has to be stopped first. If the source VM is stopped, you get two options: Keep GPU in the source VM's config but disable Start on boot, or Remove the GPU lines from the source VM's config and keep Start on boot. A fast-path also exists: if the GPU is already bound to vfio-pci and the source VM is a plain VM→VM swap, no host reconfiguration is done and no reboot is needed.",
- "GPU is in an LXC (shared mode). You get two options on a menu: Keep GPU in the LXC config but disable Start on boot, or Remove the GPU lines from the LXC config (lxc.cgroup2.devices.allow / lxc.mount.entry) and keep Start on boot. Either way the LXC won't see the GPU after the switch, and the VM will — this is the \"switch mode\" mechanic that gives this menu entry its secondary label."
+ "GPU used by LXC. For ordinary containers, choose keep the GPU configuration and disable Start on boot or remove GPU device configuration and keep Start on boot. Removal deletes the devN entries and, for AMD/Intel, also legacy /dev/dri lxc.mount.entry and lxc.cgroup2.devices.allow rules. OCI containers retain their configuration and are stopped with Start on boot disabled; remove their GPU through OCI manager Apps. Conflict detection is by GPU device family and may include other cards of that family."
],
"imageAlt": "Dialog offering to remove the GPU from an LXC before assigning it to the VM",
"smartTitle": "Audio siblings are cleaned up smartly too",
- "smartBody": "If the source VM had extra audio devices attached alongside the GPU, the script removes only the ones that are now orphan — i.e. audio entries whose display sibling is also being removed. Audio tied to a different GPU that stays in the VM is kept untouched. This matters when you detach an Intel iGPU (which shares chipset audio) from a VM that also has a discrete NVIDIA / AMD card still passed through: the dGPU's HDMI audio (02:00.1) stays, the chipset audio (00:1f.3) leaves."
+ "smartBody": "After removing GPU assignments from the source VM, the script can offer a checklist of potentially orphaned audio devices. Review it and uncheck anything the source still needs. For example, dedicated-card audio at 02:00.1 may remain while chipset audio at 00:1f.3 is offered for removal. The checklist, not a universal display/audio pairing guarantee, determines the extra removals."
},
"audioPick": {
"title": "(If no .1 sibling) Pick which audio controllers to include",
"body": "Only happens for Intel iGPU and similar split-audio setups. A checklist shows every PCI audio controller on the host (excluding any already in the GPU's IOMMU group), labelled with its current driver. Select the ones you want — or none, if the VM doesn't need audio from the host hardware.",
"imageAlt": "Checklist dialog with every host PCI audio controller (BDF + driver) when the GPU has no .1 sibling audio",
"warnTitle": "Don't tick audio the host relies on",
- "warnBody": "If the host currently uses an audio controller for anything — for example, the Proxmox shell beeping, or a VM you've already passed it to — ticking it here means the host (and any other VM sharing it) loses access after reboot. When in doubt, leave this empty and you can always re-run the script later to add audio if needed."
+ "warnBody": "Assigning an audio controller to the VM can remove host access; it cannot simultaneously belong to another running VM. Leave optional audio unselected when unnecessary, and verify ownership before moving it. PCI audio is not necessarily the source of the host console beep."
},
"summary": {
"title": "Review the confirmation summary",
- "body": "A final dialog shows exactly what's about to change on the host and in the VM. This is the last off ramp — if anything looks wrong (an extra device in the IOMMU group you didn't expect, the wrong GPU, the wrong VM), cancel here and nothing has been touched yet.",
+ "body": "Review the final host and VM plan and cancel if it is wrong. It shows the IOMMU group and its device count; members from another slot are listed in the previous step. Cancelling stops the main changes; it does not undo an earlier separately confirmed IOMMU boot-configuration change.",
"imageAlt": "Summary dialog listing host changes (VFIO/blacklist files) and VM config changes (hostpci lines) before applying"
},
"hostApply": {
"title": "Host changes are applied",
- "intro": "Phase 2 runs non-interactively. Host-side the script can touch:",
+ "intro": "The apply phase performs the host and VM changes. Associated-audio cleanup may still prompt for a selection. Host changes can include:",
"items": [
"/etc/modules — adds vfio, vfio_iommu_type1, vfio_pci (plus vfio_virqfd on kernels < 6.2).",
"/etc/modprobe.d/vfio.conf — for AMD / Intel, sets options vfio-pci ids=<vendor:device,...> disable_vga=1 so VFIO claims the GPU early at boot. For NVIDIA the file only adds softdep nvidia pre: vfio-pci (plus _drm/_modeset/_uvm) — actual binding is per-BDF via the udev rule below. On AMD, also adds softdep lines forcing vfio-pci to load before radeon / amdgpu.",
- "/etc/modprobe.d/iommu_unsafe_interrupts.conf and kvm.conf — sensible workarounds that most Windows / macOS VMs need (allow_unsafe_interrupts=1, ignore_msrs=1).",
- "/etc/modprobe.d/blacklist.conf — blacklists only the open-source drivers for the selected vendor (nouveau/lbm-nouveau for NVIDIA; radeon+amdgpu for AMD; i915 for Intel), so drivers for other vendors on the same host stay loaded. The proprietary nvidia module is only blacklisted (via a separate /etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf) once every NVIDIA GPU on the host has been switched to VFIO — until that point it stays loaded so any NVIDIA card you keep on the host keeps working.",
- "/etc/udev/rules.d/10-proxmenux-vfio-bind.rules + /etc/proxmenux/vfio-bind.bdfs — NVIDIA only. Per-BDF binding state. The udev rule applies ATTR'{'driver_override'}'=\"vfio-pci\" at the PCI ADD event for each tracked Bus:Device.Function, so only the GPU(s) you've explicitly passed go to VFIO. This is what makes multi-GPU NVIDIA work — your other NVIDIA cards keep their nvidia driver and stay usable on the host.",
- "AMD only. Dumps the GPU ROM from sysfs (/sys/bus/pci/.../rom) or the ACPI VFCT table to /usr/share/kvm/vbios_<card>.bin. The VM references it via romfile= so cards that misreport their own VBIOS still initialise correctly.",
+ "Writes /etc/modprobe.d/iommu_unsafe_interrupts.conf and kvm.conf with allow_unsafe_interrupts=1 and ignore_msrs=1. These are compatibility settings applied by the script, not universal Windows/macOS requirements; unsafe interrupts relax interrupt-remapping protection.",
+ "/etc/modprobe.d/blacklist.conf: NVIDIA — nouveau/lbm-nouveau; AMD — radeon + amdgpu; Intel — i915. These vendor-wide entries may affect other cards using the same driver. The proprietary nvidia module is blocked only through /etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf when all host NVIDIA cards are tracked for VFIO.",
+ "/etc/udev/rules.d/10-proxmenux-vfio-bind.rules + /etc/proxmenux/vfio-bind.bdfs — NVIDIA only. The udev rule sets ATTR'{'driver_override'}'=\"vfio-pci\" at PCI ADD for tracked BDFs, including affected IOMMU-group functions. Cards outside those groups can retain the nvidia driver. Per-BDF policy does not split a hardware IOMMU group.",
+ "AMD only. Attempts a ROM dump from /sys/bus/pci/.../rom or ACPI VFCT into /usr/share/kvm/vbios_<vendor>_<device>.bin. If successful, the VM uses romfile=. A valid dump does not guarantee successful GPU initialization.",
"NVIDIA only. Host NVIDIA services (nvidia-persistenced, nvidia-powerd, nvidia-fabricmanager) are stopped and disabled only when every NVIDIA GPU is assigned to VFIO. With a mixed host they remain active, together with the nvidia module, for the GPU(s) that stay native.",
"update-initramfs -u -k all — only runs if any of the above actually changed."
]
@@ -110,25 +110,25 @@
"vmApply": {
"title": "VM config is applied via qm set",
"body": "The VM config at /etc/pve/qemu-server/<vmid>.conf is updated via qm set (never by direct sed):",
- "after1": "A x-vga=1 flag is added for every vendor except Intel iGPU — Intel integrated GPUs don't have dedicated VRAM for a pre-boot console, so that flag causes hangs.",
+ "after1": "The script adds x-vga=1 for AMD and NVIDIA, not Intel. This describes its configuration policy; it does not establish that every Intel iGPU lacks firmware or that the flag universally causes hangs.",
"after2": "Additional hostpciN lines are appended if the GPU's IOMMU group contains other devices you need to pass together."
},
"reboot": {
"title": "Reboot if host config was touched",
- "body": "If Phase 2 changed anything at the kernel-module / cmdline / blacklist level, you'll be prompted to reboot. Reboot is mandatory before starting the VM — otherwise the GPU is still held by the host driver and VFIO can't claim it.",
+ "body": "Follow the reboot prompt when host boot or driver settings change, and verify the GPU’s active binding before starting the VM. Saved configuration does not prove it is active. A VM-to-VM reassignment with the correct VFIO state can avoid a host reboot.",
"imageAlt": "Summary screen showing what was changed, followed by a reboot prompt"
}
},
"vendors": {
"heading": "Vendor-specific notes",
"nvidiaHeading": "NVIDIA",
- "nvidiaBody": "NVIDIA consumer drivers detect that they're running in a VM and refuse to initialise with the infamous \"Code 43\" error. ProxMenux's workaround: hide KVM from the guest (hidden=1), set a spoofed hypervisor vendor ID NV43FIX in the args line, and pass kvm=off. This has worked reliably on GeForce drivers for years. On datacenter / Tesla / Quadro cards this isn't needed — those drivers are licensed for virtualisation.",
+ "nvidiaBody": "The script retains a legacy Code 43 workaround: hidden=1, vendor ID NV43FIX in args, and kvm=off. It is not a universal requirement for current GeForce drivers: NVIDIA enabled Windows-VM passthrough support in R465. Code 43 can have other causes; verify the actual GPU and driver combination.",
"nvidiaMultiHeading": "Multi-GPU NVIDIA support",
- "nvidiaMultiBody": "Hosts with two or more NVIDIA GPUs are first-class. You can pass one card to a VM and keep the other(s) on the host for nvidia-smi, LXC GPU sharing, or any host-side workload. ProxMenux binds VFIO per-BDF (Bus:Device.Function) via a udev rule rather than globally blacklisting the nvidia module — so each card's destination is independent of the others, even when both GPUs are the same model and share the same vendor:device ID. The host nvidia driver stays loaded; only the specific BDFs you select get redirected to vfio-pci.",
+ "nvidiaMultiBody": "Mixed NVIDIA use is supported per BDF. Functions assigned to vfio-pci are tracked by PCI address, not merely a shared vendor:device ID. Cards outside the affected IOMMU groups can keep nvidia and be checked with nvidia-smi. Two cards in the same group are not independently isolated by this policy.",
"amdHeading": "AMD",
- "amdBody": "The \"AMD reset bug\" means some cards crash when the VM stops and can't re-initialise without a host reboot. ProxMenux pre-screens for this by reading the PCI reset method, but cannot fix it after the fact. If you hit it, the community fix is the x-vga=1 (iGPUs don't carry a pre-boot VBIOS). You'll lose host console output — plan accordingly."
+ "intelBody": "Full Intel iGPU passthrough and SR-IOV are separate workflows. This assistant reserves the full device for one VM and omits x-vga=1. qm config <vmid> | grep -E \"cpu|args\" — you should see hidden=1 and hv_vendor_id=NV43FIX. If missing, re-run the script and re-select the same VM.",
+ "code43Body": "Code 43 is not proof of failed KVM hiding. Inspect qm config VMID | grep -E \"cpu|args\" (replace VMID) for the script’s hidden=1 and hv_vendor_id=NV43FIX settings, but also check the guest driver, GPU firmware and assignment. Re-running may exit early if the GPU is already assigned.",
"amdResetTitle": "AMD GPU works once, fails on VM restart",
- "amdResetBody": "The AMD reset bug. Solutions (in order): (1) reboot the host — GPU will be usable again for one more VM cycle; (2) install the vendor-reset DKMS module and add softdep amdgpu pre: vendor-reset; (3) inside Windows, install the RadeonResetBugFix service.",
+ "amdResetBody": "A reset failure is one possible cause. A host reboot or power cycle may restore the device temporarily. Check whether vendor-reset supports this exact GPU and kernel and load it early as its documentation requires; softdep amdgpu pre: vendor-reset alone does not guarantee early loading before VFIO. The Windows RadeonResetBugFix workaround also requires a compatible GPU.",
"stuckBootTitle": "VM stuck booting / GPU not detected",
- "stuckBootBody": "Confirm VFIO actually holds the GPU on boot: lspci -nnk -d vendor:device must show Kernel driver in use: vfio-pci. If it still shows the vendor driver, the blacklist didn't take effect — check /etc/modprobe.d/blacklist.conf and dmesg | grep vfio, and regenerate initramfs: update-initramfs -u -k all then reboot.",
+ "stuckBootBody": "Inspect the selected PCI address with lspci -nnk -s PCI_ADDRESS; expect Kernel driver in use: vfio-pci. Replace PCI_ADDRESS with the real BDF. If the native driver remains, inspect the appropriate binding policy, not only /etc/modprobe.d/blacklist.conf; NVIDIA also uses per-BDF state. Read dmesg | grep vfio. After correcting persistent configuration, rebuild with update-initramfs -u -k all and follow the reboot plan.",
"darkTitle": "Host console goes dark after reboot and I can't SSH in",
- "darkBody": "You passed the primary GPU through before having alternate access. Boot into a recovery shell (rescue ISO, IPMI), remove the lines from the VM config (/etc/pve/qemu-server/<vmid>.conf), and remove the vfio options:",
+ "darkBody": "A dark display does not prove the host is down. If SSH also fails, check network connectivity and whether a network/storage controller was included in the IOMMU group. Recover through IPMI, serial or a recovery environment; inspect the VM config /etc/pve/qemu-server/<vmid>.conf and only revert the relevant assignments and host binding rules. Do not delete unrelated blacklist or VFIO configuration.",
"logTitle": "Check the install log",
"logBody": "Every run writes to /tmp/add_gpu_vm.log. Attach it when asking for help on GitHub."
},
"revert": {
"heading": "Reverting manually",
- "intro": "There isn't a dedicated \"remove GPU from VM\" shortcut in ProxMenux today. To detach cleanly:"
+ "intro": "Stop the VM and remove only its relevant PCI assignments in Proxmox Hardware, or with the explicit index shown below. Detaching from the VM does not return the device to a native host driver. Use Switch GPU Mode for that separate transition and inspect the affected guests before confirming."
},
"related": {
"heading": "Related",
@@ -156,7 +156,7 @@
{
"label": "Install NVIDIA Drivers (Host)",
"href": "/docs/hardware/nvidia-host",
- "tail": " — install drivers on the host first if you also want the GPU usable from there."
+ "tail": " — prepare host-driver access for cards kept native; a card bound to VFIO cannot be used by the host driver simultaneously."
},
{
"label": "Add GPU to LXC",
diff --git a/web/messages/en/docs/hardware/igpu-acceleration-lxc.json b/web/messages/en/docs/hardware/igpu-acceleration-lxc.json
index c5f2da3a..678ef7bc 100644
--- a/web/messages/en/docs/hardware/igpu-acceleration-lxc.json
+++ b/web/messages/en/docs/hardware/igpu-acceleration-lxc.json
@@ -10,7 +10,7 @@
},
"intro": {
"title": "What this does",
- "body": "Adds dev<N> entries to the LXC config (/etc/pve/lxc/<ctid>.conf) so the container sees /dev/dri/*, /dev/kfd or /dev/nvidia* — whichever applies to your GPU. Then it boots the container, detects the distro inside, and installs the matching userspace drivers (Mesa, intel-media-driver, NVIDIA runtime…) so apps like Plex, Jellyfin or Frigate actually use the GPU for transcoding. GIDs (video, render) are aligned between host and container so permissions match."
+ "body": "Adds dev<N> entries to /etc/pve/lxc/<ctid>.conf for applicable /dev/dri/*, /dev/kfd or /dev/nvidia* nodes. It starts the container, installs userspace packages for its distribution and, for Intel/AMD, aligns the video and render groups. Application acceleration still requires compatible hardware, libraries and app configuration."
},
"compare": {
"heading": "LXC sharing vs VM passthrough",
@@ -37,12 +37,12 @@
{
"feature": "Reboot required?",
"lxc": "Usually no (just restart the CT)",
- "vm": "Yes, always"
+ "vm": "When host driver or IOMMU setup changes; not for every VM assignment"
},
{
- "feature": "Supports running any OS?",
+ "feature": "Guest operating systems",
"lxc": "Only Linux (LXC is Linux-only)",
- "vm": "Windows, macOS, any Linux"
+ "vm": "Supported guest OS with a compatible GPU driver"
}
]
},
@@ -53,7 +53,7 @@
"vfio": "The GPU is NOT bound to vfio-pci. If the GPU is currently assigned to a VM via passthrough, it's invisible to the host kernel driver and the LXC can't use it. The script detects this and offers to run /dev/dri/* or /dev/nvidia* nodes for it. The script offers to run /etc/pve/lxc/<ctid>.conf, and adds dev<N> entries with the right GIDs for the selected GPUs. Using dev: entries (over the older lxc.mount.entry lines) is the modern Proxmox way — group permissions are set at config parse time instead of at mount time.",
+ "body1": "Stops the container if running and edits /etc/pve/lxc/<ctid>.conf. Numbered dev<N> entries carry the host video or render GID. Existing lxc.mount.entry bind lines for /dev/dri are replaced by dev: entries; inspect the resulting configuration and permissions.",
"body2": "Example after Intel + NVIDIA on the same container:"
},
"installDrivers": {
@@ -123,24 +123,24 @@
"debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo",
"debianNvidia": "extract host .run → pct push → run with --no-kernel-modules --no-dkms",
"whyTitle": "Why the NVIDIA .run dance on Debian",
- "whyBody": "Debian / Ubuntu don't ship NVIDIA packages with a version granular enough to match the host driver byte-for-byte. The userspace libs inside the container must match the kernel module version loaded on the host, or nvidia-smi fails with a version mismatch. ProxMenux solves this by using the exact same .run installer that was used for the host — extracted, tarred, pushed into the container with pct push, and run with --no-kernel-modules --no-dkms so only the userspace is touched."
+ "whyBody": "Repository packages may not match the host driver. Container libraries must match the loaded host module for NVML tools such as nvidia-smi. The Debian/glibc path uses the cached host-version .run installer, extracts and packs it on the host, transfers it with pct push and installs with --no-kernel-modules --no-dkms. Alpine and Arch use repository packages, whose versions still need checking."
},
"alignGids": {
"title": "Align GIDs and restore state",
- "body1": "Device files on the host are owned by group video (GID 44) or render (GID 104). The container's distro may ship different GID numbers for those groups, which would make the GPU nodes unreachable from inside. The script rewrites /etc/group in the container so video:44 and render:104 match exactly.",
- "body2": "Finally, it restores the container to its original state — if it was stopped when you started, it gets stopped again. If it was running, it stays running."
+ "body1": "For Intel/AMD, reads the host GIDs for video and render, using 44/104 only as fallbacks, then edits /etc/group inside the container to match; NVIDIA-only runs skip this step. Entries such as video:44 and render:104 are examples, not universal IDs. Verify app membership and effective device permissions.",
+ "body2": "On the normal completion path, a container that was initially stopped is stopped again; one that was running stays running. If startup or installation fails, verify its final state and the log."
}
},
"vendors": {
"heading": "Vendor-specific notes",
"intelHeading": "Intel iGPU",
- "intelBody": "Most common path — great for Plex / Jellyfin / Frigate hardware transcoding via Quick Sync. The container gets /dev/dri/card0 (legacy) and /dev/dri/renderD128 (modern render-only node — what apps actually use). No host-side changes needed; the i915 driver on the host already created the nodes.",
+ "intelBody": "Intel media acceleration, including Quick Sync, depends on GPU generation, codecs and app configuration. The script shares whichever of /dev/dri/card0, card1, renderD128 and renderD129 exist; other node numbers are not added. The host must already provide them through its native driver, for example i915.",
"amdHeading": "AMD",
- "amdBody": "Same DRI nodes as Intel for graphics / VA-API. If /dev/kfd exists on the host (AMD compute / ROCm kernel support), the script also adds it so containers can do OpenCL / ROCm workloads. Mesa VA drivers cover the video decode side.",
+ "amdBody": "AMD uses DRI nodes for Mesa/VA-API. If the host exposes /dev/kfd, the script also shares it. ROCm/OpenCL workloads still require supported hardware and compatible userspace packages; sharing the device does not install a complete ROCm stack.",
"nvidiaHeading": "NVIDIA",
- "nvidiaBody": "Adds every /dev/nvidia* node the host exposes. The critical piece is driver-version matching: host module version and container userspace lib version must be identical, otherwise nvidia-smi inside the container fails. ProxMenux captures the host version at detection time and uses the same .run file to install the container userspace. For Debian containers the install bumps container memory to 2 GB temporarily (installer needs ~1.5 GB free to extract) and restores it afterwards.",
- "updateTitle": "After you update the host NVIDIA driver, re-run this script",
- "updateBody": "When you upgrade the NVIDIA driver on the host, the container's userspace libs stay on the old version and nvidia-smi inside the container breaks. ProxMenux's /dev/nvidia* nodes. Driver-version matching remains essential for nvidia-smi. Debian/glibc uses the cached host-version .run; Alpine/Arch use repository packages. If the Debian path finds less than 2048 MiB configured RAM, it offers a temporary increase and later restores it; it also requires at least 1500 MiB of free disk space.",
+ "updateTitle": "After a host NVIDIA update, check container library versions",
+ "updateBody": "Old container libraries can make nvidia-smi report a mismatch. The .run and re-installs userspace matching.",
+ "mismatchBody": "Container libraries do not match the loaded host module. Inspect versions and update the container userspace appropriately. The cached .run supports the Debian/glibc path, but Add GPU to LXC can exit early when all device entries already exist.",
"denyTitle": "Permission denied on /dev/dri/renderD128 inside the container",
- "denyBody": "Usually one of: (1) container is unprivileged without UID/GID mapping to host render group; (2) the user inside the container isn't in the render group. Fix: add the user to render inside the container (usermod -aG render <user>), or switch to privileged mode if the workload is trusted.",
+ "denyBody": "Check the device entry and numeric render group permissions, then whether the app user belongs to render. Where available, add that user to render with usermod -aG render <user>, replacing the placeholder with the actual account. Restart the application session to apply membership; changing privilege mode is not a general permissions fix.",
"vainfoTitle": "vainfo says: VA-API version 1.xx; failed to initialize",
- "vainfoBody": "The VA-API runtime is there but no suitable driver was installed. On Intel, install intel-media-driver (newer gens) or i965-va-driver (older gens). On AMD, mesa-va-drivers. Re-run the script if in doubt.",
+ "vainfoBody": "Check device access and the selected VA-API driver. Package names vary by distribution: examples include intel-media-driver for supported newer Intel GPUs, i965-va-driver for supported older ones, and mesa-va-drivers for AMD. The message alone does not prove a missing package.",
"logTitle": "Install log",
"logBody": "Every run writes to /tmp/add_gpu_lxc.log on the host. Include it when asking for help on GitHub."
},
diff --git a/web/messages/en/docs/hardware/install-coral-tpu-host.json b/web/messages/en/docs/hardware/install-coral-tpu-host.json
index 082a8bf2..dd183688 100644
--- a/web/messages/en/docs/hardware/install-coral-tpu-host.json
+++ b/web/messages/en/docs/hardware/install-coral-tpu-host.json
@@ -10,7 +10,7 @@
},
"intro": {
"title": "What this does",
- "body": "The Coral installer is unified and hardware-aware: you run one menu option and it figures out what you actually have. M.2 / Mini-PCIe cards need kernel modules (gasket + apex) built with DKMS so they survive kernel upgrades. USB Accelerators just need the Google Edge TPU runtime (libedgetpu1-std) from Google's own APT repository. Both types plugged in? Both paths run in sequence."
+ "body": "A single hardware-aware installer selects the detected device paths. PCIe uses gasket and apex modules with DKMS; future rebuilds still need compatible driver sources and kernel headers. USB uses the libedgetpu1-std userspace runtime. If both types are detected, both paths run. USB runtime must be available where the app runs; a host runtime is not inherently required for an app running only inside LXC."
},
"which": {
"heading": "Which Coral do I have?",
@@ -20,7 +20,7 @@
"headerInstall": "Install type",
"headerReboot": "Reboot?",
"pcieForm": "M.2 / Mini-PCIe",
- "pcieFormSub": "(dual-edge TPU on an M.2 card)",
+ "pcieFormSub": "(M.2 cards include single- and dual-Edge-TPU variants)",
"pcieDetect": "PCI vendor 1ac1",
"pcieInstall": "Kernel module (gasket + apex) via DKMS",
"pcieReboot": "Yes",
@@ -32,15 +32,15 @@
},
"prereqs": {
"title": "Before you start",
- "coral": "A Coral TPU plugged into the host (M.2, Mini-PCIe or USB). No Coral means no install — the script just tells you nothing was detected and exits.",
+ "coral": "A connected Coral TPU (M.2, Mini-PCIe or USB) is required for installation. Without detected hardware, the script can still offer cleanup or removal of an existing installation; it will not install a new hardware path.",
"coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
"internet": "Internet access on the host — for PCIe the DKMS path clones a GitHub repo, for USB it adds a Google APT repo and downloads the libedgetpu1-std package.",
"headers": "Kernel headers available via APT. On Proxmox this means proxmox-headers-$(uname -r) must be installable — needed only for the PCIe/M.2 path, but the script fetches it automatically so you don't have to.",
- "reboot": "Be OK with a reboot if you have PCIe hardware. The kernel module is built and loaded at the end, but a fresh boot is the clean way to confirm it comes up on its own."
+ "reboot": "Plan a reboot for PCIe hardware. The script attempts to load the built modules; a planned restart also verifies that they load automatically."
},
"hostPrepTip": {
"title": "This only prepares the host",
- "body": "Installing Coral here makes the host ready — the TPU is visible to the host kernel and can be handed to an LXC. To actually use it from a container (Frigate, DeepStack, etc.), the next step is 1a6e:089a — Global Unichip, unprogrammed state (before the Edge TPU runtime talks to it the first time).",
"18d1:9302 — Google, programmed state (after the runtime loads firmware onto it)."
],
- "outro": "If neither is found, you get an informative dialog and the script exits cleanly — no partial changes on the host."
+ "outro": "If no Coral is detected and no installation exists, the script exits with an explanatory dialog. Existing components can still trigger the cleanup or removal menu."
},
"prompt": {
"title": "Pre-install prompt",
- "body": "Before touching anything, a single dialog summarises what was detected and what will be installed. You can cancel here without any side effects.",
+ "body": "Before the installation steps, a dialog lists detected devices and the planned components. Cancel to skip installation. Optional legacy cleanup has its own earlier confirmation.",
"imageAlt": "Pre-install dialog showing detected Coral hardware (M.2/PCIe count + USB count) and the list of steps the installer will run"
},
"pcie": {
"title": "PCIe path — gasket + apex kernel modules via DKMS",
"body": "Only runs if the script found a PCIe / M.2 Coral. It's the heavier of the two paths because it's compiling a kernel module for your exact running kernel.",
"items": [
- "Cleanup. If a previous gasket-dkms install left dpkg in a broken state (typical after a PVE 9 kernel upgrade where DKMS autoinstall failed silently), force-purge it.",
+ "Cleanup. Any existing gasket-dkms package is removed before rebuilding; if it is in a broken package state, the script forces its removal and purge.",
"Install build deps: git, dkms, build-essential, proxmox-headers-$(uname -r)."
],
- "cloneIntro": "Clone the driver source. Prefers the no_llseek removed upstream → noop_llseek substitution",
+ "For kernel 6.5+, the fallback patch replaces no_llseek with noop_llseek.",
"Kernel 6.13+ : MODULE_IMPORT_NS(DMA_BUF) requires string literal"
],
"afterItems": [
"Stage sources under /usr/src/gasket-1.0/, generate dkms.conf, register with dkms add.",
- "Build + install: dkms build then dkms install. If anything fails, the last 50 lines of make.log print to the terminal so you see the real error — no hunting in log files.",
+ "Build and install: dkms build followed by dkms install. On failure, the script displays the last 50 lines of make.log if that file is available.",
"Create the apex group + udev rules (/etc/udev/rules.d/99-coral-apex.rules) so /dev/apex_* nodes get the right group on the next boot.",
"Load the modules: modprobe gasket + modprobe apex."
],
@@ -92,16 +92,16 @@
"body": "Only runs if a USB Accelerator was detected. Much simpler:",
"items": [
"Add Google's GPG key to /etc/apt/keyrings/coral-edgetpu.gpg.",
- "Add the APT repository to /etc/apt/sources.list.d/coral-edgetpu.list with signed-by= pointing at the keyring (modern, non-deprecated format).",
+ "Add the APT repository in /etc/apt/sources.list.d/coral-edgetpu.list, with signed-by= restricting verification to its keyring. This is one-line .list syntax, not deb822 .sources syntax.",
"Install libedgetpu1-std — the standard-performance Edge TPU runtime.",
"Reload udev so the rules shipped with the package apply to the USB device without having to unplug/replug."
],
"stdTitle": "Why libedgetpu1-std and not libedgetpu1-max?",
- "stdBody": "The max variant overclocks the Coral and runs hotter. Fine for desktop use with airflow; not recommended inside small NUC / Mini-PC builds or passively cooled Proxmox hosts. If you really want it, install by hand afterwards: apt install libedgetpu1-max."
+ "stdBody": "The max package enables the maximum supported clock frequency, increasing performance, power use and heat compared with the standard runtime. Check the accelerator’s cooling and operating conditions before switching. The packages are mutually exclusive; install the alternative with apt install libedgetpu1-max."
},
"reboot": {
"title": "Reboot prompt (only if PCIe ran)",
- "body": "If the PCIe path ran, the script offers a reboot. The modules were modprobe'd already so in theory you can skip the reboot — but a clean boot is the right way to verify the module comes up on its own and /dev/apex_0 appears with group apex. For USB-only installs, no reboot is suggested (the runtime and udev rules are active immediately).",
+ "body": "After the PCIe path, the script offers a reboot. It has attempted modprobe, but verify that the modules load and /dev/apex_0 appears with group apex. A planned reboot also checks automatic loading. USB-only installation does not prompt for a host reboot.",
"imageAlt": "Final summary + reboot prompt after a PCIe install"
}
},
@@ -125,18 +125,18 @@
"reinstallHeading": "Reinstall / update",
"reinstallBody": "Continues with the normal install flow — useful after a kernel upgrade if the DKMS rebuild didn't happen automatically, or to lift the runtime to a newer libedgetpu1-* from the Google Coral apt repo. The previous DKMS state is cleaned up first so a half-installed package from a failed earlier attempt doesn't block the new build.",
"uninstallHeading": "Uninstall — what gets removed",
- "uninstallIntro": "Confirms with a yes/no dialog before doing anything (LXC containers with apex passthrough will lose access to /dev/apex_* after the next reboot — the warning makes that clear). Then it performs a full, idempotent rollback:",
+ "uninstallIntro": "Requires confirmation before removal. LXC applications using /dev/apex_* may lose access during removal or after the next reboot. The removal sequence is:",
"uninstallItems": [
- "Unloads the apex and gasket kernel modules.",
+ "Attempts to unload apex and gasket; active users can prevent module removal.",
"Removes every DKMS-registered gasket/<version> entry so the modules don't come back on the next kernel install.",
"Purges the gasket-dkms, libedgetpu1-std and libedgetpu1-max apt packages, then runs apt-get autoremove --purge.",
"Deletes the udev rule /etc/udev/rules.d/99-coral-apex.rules ProxMenux wrote; restores the upstream 60-gasket-dkms.rules group to its default if it's still present.",
- "Removes the apex system group only if no users still belong to it — if you mapped a custom user into apex for an LXC passthrough, the group is left in place and a warning prints the current members.",
- "Cleans the Google Coral apt repository entry and keyring (/etc/apt/sources.list.d/coral-edgetpu.list + coral-edgetpu-archive-keyring.gpg).",
+ "Checks the supplementary member list of apex. If that list is empty, it attempts group removal; otherwise it retains apex and lists its members. This is not a complete check of primary-group users.",
+ "Removes the repository list /etc/apt/sources.list.d/coral-edgetpu.list, the legacy coral-cloud.list and old keyrings named coral-edgetpu-archive-keyring.gpg. The current keyring at /etc/apt/keyrings/coral-edgetpu.gpg is not removed by this sequence.",
"Prompts for a reboot at the end only if the PCIe path was installed — the cleanest way to flush the kernel modules. USB-only uninstalls don't need one."
],
"lxcWarnTitle": "LXC containers with apex passthrough",
- "lxcWarnBody": "Uninstalling on the host invalidates the device path mapped into any LXC container configured for apex passthrough. Plan the operation during a maintenance window if Frigate / DeepStack / similar workloads depend on it."
+ "lxcWarnBody": "Removing the host components can break LXC device access. Schedule maintenance if compatible applications such as Frigate depend on this Coral."
},
"updates": {
"heading": "Update notifications",
@@ -145,7 +145,7 @@
"headerTracked": "Tracked version",
"headerUpstream": "Upstream source",
"pcieVariant": "PCIe / M.2",
- "pcieTracked": "gasket-dkms Debian version (or the DKMS-registered version if the package was force-removed)",
+ "pcieTracked": "Recorded release tag from the successful installation, then a healthy gasket-dkms package version, with the DKMS module version as fallback. The bare DKMS version does not identify the fork’s patch level.",
"pcieUpstream": "Latest tag of feranick/gasket-driver on GitHub (7-day cache, build-number comparison)",
"usbVariant": "USB",
"usbTracked": "libedgetpu1-std or libedgetpu1-max apt version",
@@ -153,8 +153,8 @@
"outro": "When a newer version is detected the Monitor fires a coral_driver_update_available notification on every enabled channel (Telegram, Discord, Gotify, ntfy, email, webhook). The notification points back at the same installer entry — pick Reinstall / update from the action menu above to apply it.",
"antiTitle": "Anti-cascade by design",
"antiBody": "One notification per variant, only when the upstream version actually changes — never on every 24h scan. If you ignore an update it doesn't re-ping you until a newer release lands.",
- "rebootTitle": "Reboot is only needed for the PCIe path",
- "rebootBody": "The gasket DKMS rebuild loads new kernel modules — that needs a reboot to be active. The USB runtime upgrade is a user-space library swap, no reboot required."
+ "rebootTitle": "PCIe updates: plan a reboot",
+ "rebootBody": "A rebuilt PCIe module must be loaded before it takes effect; a planned reboot also verifies automatic loading. A USB userspace-library upgrade needs no host reboot, but applications using the old library may need a restart."
},
"manual": {
"heading": "Manual equivalent",
@@ -170,13 +170,13 @@
"troubleshoot": {
"heading": "Troubleshooting",
"dkmsFailTitle": "DKMS build fails after a kernel upgrade",
- "dkmsFailBody": "Most common cause on PVE 9: the running kernel bumped but proxmox-headers-$(uname -r) isn't installed for it yet. Check with dpkg -l proxmox-headers-$(uname -r). Install the missing headers and re-run the script — ProxMenux's cleanup_broken_gasket_dkms step handles any leftover half-configured package state.",
+ "dkmsFailBody": "Missing headers are one possible cause. Verify proxmox-headers-$(uname -r) with dpkg -l proxmox-headers-$(uname -r). Install them if missing, then inspect the build log for source/kernel incompatibility. Re-running invokes cleanup_broken_gasket_dkms, but cleanup cannot guarantee compatibility with every kernel.",
"apexMissTitle": "/dev/apex_0 missing after reboot",
- "apexMissBody": "The module isn't loaded. Try modprobe apex by hand. If that errors, check dmesg | grep -iE \"apex|gasket\" for the real failure — common culprits are kernel version mismatch (DKMS was built for a different kernel than the one you booted) or a firmware upgrade that disabled the PCIe slot the Coral is in.",
+ "apexMissBody": "Check whether the PCIe device is detected and the module matches the running kernel. Try modprobe apex and inspect dmesg | grep -iE \"apex|gasket\". Build failures, module loading or slot/firmware configuration can prevent device creation.",
"lxcMissTitle": "Can see /dev/apex_0 but LXC can't",
- "lxcMissBody": "Host is fine. Problem is passthrough config — see libedgetpu1-std took effect: ls -l /dev/bus/usb/*/*. The device should NOT be owned by root:root with mode 0600 — if it is, run udevadm control --reload-rules && udevadm trigger on the host, unplug the USB Coral, wait 3 seconds and plug it back in.",
+ "usbUnreachBody": "Check the rules supplied by libedgetpu1-std and inspect permissions with ls -l /dev/bus/usb/*/*. The application’s mapped user/group needs read/write access; root ownership alone is not an error. After changing rules, run udevadm control --reload-rules && udevadm trigger and reconnect the device if needed.",
"logTitle": "Install log",
"logBody": "Every run writes to /tmp/coral_install.log on the host. If the DKMS build dies, the script also appends the last 50 lines of /var/lib/dkms/gasket/1.0/build/make.log to that log — attach it when asking for help on GitHub."
},
@@ -196,7 +196,7 @@
{
"label": "ProxMenux Monitor — Hardware tab",
"href": "/docs/monitor/dashboard/hardware",
- "tail": " — the Coral modal that surfaces driver, modules, device nodes, runtime status and live temperature once the host install is done."
+ "tail": " — the Coral panel shows driver, modules, device nodes and runtime status, plus temperature when a supported sensor exposes it."
}
]
}
diff --git a/web/messages/en/docs/hardware/nvidia-host.json b/web/messages/en/docs/hardware/nvidia-host.json
index 037acd88..56c40f13 100644
--- a/web/messages/en/docs/hardware/nvidia-host.json
+++ b/web/messages/en/docs/hardware/nvidia-host.json
@@ -10,11 +10,11 @@
},
"intro": {
"title": "What this does",
- "body": "ProxMenux automates the whole NVIDIA driver lifecycle on the host: detects your GPU, offers maintained NVIDIA branches that list its PCI Device ID, blacklists nouveau, downloads and runs the official NVIDIA .run installer with DKMS, installs the nvidia-persistenced service and udev rules, and offers to apply the optional NVENC patch. The DKMS build is the final compatibility check against the running kernel. If you already have LXC containers with NVIDIA passthrough, it can update their userspace libraries to match the host."
+ "body": "ProxMenux detects the GPU and offers maintained NVIDIA branches listing its PCI ID. It blacklists nouveau, downloads the official .run installer, uses DKMS, installs nvidia-persistenced, udev rules and the NVIDIA Container Toolkit, and offers an optional NVENC patch. Build checks assess the running kernel; successful compilation does not guarantee every app works. Existing NVIDIA LXCs are offered a userspace library update, version-matched except on Arch."
},
"who": {
"heading": "Who is this for?",
- "body": "If you have an NVIDIA GPU and you want to use it for hardware-accelerated transcoding in Plex, Jellyfin, Frigate, Immich, Stable Diffusion or any other app running inside an LXC container, you need to install the driver on the Proxmox host first. This page covers that host-side install. Passing the GPU to a virtual machine (VM) uses a different flow (VFIO passthrough) and is documented separately."
+ "body": "For GPU-accelerated video or compute apps such as Plex, Jellyfin, Frigate, Immich or Stable Diffusion inside LXC, install the supported NVIDIA driver on the Proxmox host first. Assigning a GPU directly to a VM uses the separate VFIO workflow."
},
"prereqs": {
"title": "Before you start",
@@ -22,11 +22,11 @@
"gpuCheck": "lspci | grep -i nvidia",
"notVm": "The GPU is not currently assigned to a VM via VFIO passthrough. If it is, the script will refuse to install the host driver to avoid breaking the passthrough config.",
"internet": "Internet access on the host. The installer downloads the driver from download.nvidia.com and, optionally, clones nvidia-persistenced and nvidia-patch from GitHub.",
- "space": "Some free space in /opt/nvidia for the .run installer plus the RAM used during the build. When propagating to LXCs on non-Arch distros, each container needs at least 1.5 GB free; ProxMenux temporarily raises container RAM to 2 GB and restores it after. A reboot is required at the end of the host install."
+ "space": "Allow disk space in /opt/nvidia for the .run installer and RAM for compilation. The non-Arch LXC update path checks for 1500 MiB free and can request a temporary increase to 2048 MiB RAM if lower, restoring the prior limit afterwards. Plan for the host reboot prompt."
},
"vmWarn": {
"title": "GPU assigned to a VM? Stop here",
- "body": "If the GPU is currently bound to vfio-pci (i.e. it is being passed through to a VM), installing the host driver can break the passthrough and destabilise the system. ProxMenux detects this and aborts. Remove the GPU from the VM passthrough configuration and reboot before running this script."
+ "body": "If any NVIDIA device is bound to vfio-pci, this installer aborts, including when the VM is stopped. A reserved device is not necessarily in active use by a VM. Plan the return to host-driver mode and remove obsolete VM and VFIO assignments before rebooting and installing."
},
"running": {
"heading": "Running the installer",
@@ -35,30 +35,30 @@
},
"howRuns": {
"heading": "How the script runs",
- "body": "The installer goes through three phases with clear separation between \"collecting information and validating\" and \"actually touching the host\". Until the final confirmation, nothing has been changed."
+ "body": "The workflow detects devices, selects a release and performs installation. A separately confirmed stale-VFIO cleanup can occur before the overview. Repository/header preparation and downloading also precede replacement of the existing driver, so there is no single final confirmation after which all changes begin."
},
"walkthrough": {
"detect": {
"title": "GPU detection and overview",
"body1": "The script scans the PCI bus and shows every NVIDIA video controller it finds, the current driver status (or \"No NVIDIA driver installed\"), and any LXC container that already has NVIDIA passthrough configured (driver version inside each one).",
- "body2": "Review the overview carefully. If the detected GPU is not what you expect, or if a container's version already matches the host, you can cancel here without side effects.",
+ "body2": "Review the detected GPU and host/container versions before proceeding. Cancel at the overview if the selection is unexpected; any separately confirmed earlier VFIO cleanup has already taken place.",
"imageAlt": "Pre-install overview showing detected GPUs, current driver status and LXC containers with NVIDIA passthrough"
},
"version": {
"title": "Choose the driver version",
"body1": "ProxMenux fetches the list of available drivers from NVIDIA and narrows the picker to versions that list your GPU's PCI Device ID in the supported chips table of the corresponding branch on nvidia.com. Additional heuristics discard developer / beta CDN drops that would otherwise appear at the top. The first entry is labelled <version> — Recommended: it prefers the head of the branch of the driver already installed on the host (bugfix in place), otherwise the head of the current Production Branch, otherwise the highest supported numeric.",
- "body2": "If the currently installed driver was patched via keylase (NVENC), the picker auto-narrows to versions still covered by the patch table, so applying Reinstall / update without losing the patch is one click.",
+ "body2": "When the installed driver is tracked as NVENC-patched through keylase, the picker narrows to versions listed in the patch table. The Reinstall / update workflow still includes confirmation and patch prompts; check the final patch result.",
"whyTitle": "How kernel compatibility is validated",
- "whyBody": "The version list is filtered by NVIDIA branch maintenance and GPU PCI support, not by a hard-coded kernel/driver matrix. After selection, DKMS builds the module against the running kernel. A failed build stops the installation from being treated as valid; choose another maintained branch if NVIDIA has not adapted that release to your kernel.",
+ "whyBody": "The list uses maintained branches and GPU PCI support, rather than a fixed kernel/driver matrix. A pre-build check tests the selected release against the running kernel. A confirmed build failure returns to selection; an unavailable pre-check can produce a warning and continue. Final installation and runtime checks still matter.",
"imageAlt": "Driver version selector with GPU-supported NVIDIA branches and the Recommended entry on top"
},
"uninstall": {
"title": "Clean uninstall (only if reinstalling)",
- "body": "If a driver is already present and you picked a different version, ProxMenux stops the NVIDIA services, unloads the kernel modules, removes DKMS entries and purges nvidia-* / libnvidia-* / cuda-* packages before touching the new installer. This avoids the classic mixed-version mess."
+ "body": "After downloading and checking the selected installer, an existing driver is removed before replacement. ProxMenux stops NVIDIA services, unloads modules, removes DKMS entries and purges nvidia-* / libnvidia-* / cuda-* packages. This also applies to a confirmed reinstall of the same version."
},
"prepare": {
"title": "Prepare the system",
- "body": "Behind a single confirmation, the script:",
+ "body": "During preparation, the script:",
"items": [
"Checks the repositories of the host before anything is removed or installed: a host with no active subscription and only the Enterprise repository is asked before switching to no-subscription, and the installation stops when the switch is declined.",
"Installs pve-headers-$(uname -r) (or proxmox-headers-$(uname -r)), build-essential and dkms.",
@@ -68,7 +68,7 @@
},
"download": {
"title": "Download and run the NVIDIA installer",
- "body": "The installer downloads the NVIDIA-Linux-x86_64-<version>.run file into /opt/nvidia, validates it (size + executable signature, not just HTTP 200), then runs it with DKMS so the kernel module rebuilds automatically across kernel upgrades.",
+ "body": "Downloads NVIDIA-Linux-x86_64-<version>.run into /opt/nvidia, checking file size and executable type. These are file-format checks, not cryptographic signature verification. The installer registers DKMS for rebuilds on kernel changes; source and kernel compatibility are still required.",
"imageAlt": "Download progress followed by the NVIDIA installer running its DKMS build"
},
"persist": {
@@ -77,39 +77,39 @@
},
"nvenc": {
"title": "Optional: apply the NVENC patch",
- "body": "Consumer NVIDIA GPUs (GeForce line) limit the number of simultaneous NVENC encoding sessions. The community nvidia-smi inside the container will fail with a \"version mismatch\" error.",
- "body2": "The update is distro-aware. For Debian / Ubuntu and other glibc distros, the same .run installer (with --no-kernel-modules --no-dkms --no-install-compat32-libs) is pushed into the container and executed; container RAM is temporarily raised to 2 GB if lower and restored after. For Arch, Manjaro and EndeavourOS the update is a pacman -Syu nvidia-utils pinned to the host's driver branch. Alpine uses a different path — the .run is extracted on the host, only the userspace libraries are packaged as a tarball and pushed with pct push, then gcompat + binutils shims are installed via apk and SONAME symlinks are recreated with readelf so the glibc-linked libraries load correctly on musl.",
+ "body2": "Debian / Ubuntu and other glibc containers receive the extracted .run installer with --no-kernel-modules --no-dkms --no-install-compat32-libs; RAM can temporarily increase to 2 GiB and is restored afterwards. Arch, Manjaro and EndeavourOS use pacman -Syu nvidia-utils from configured repositories, without pinning to the host version: verify the result. Alpine receives the extracted .run payload through pct push, installs gcompat and binutils with apk, and builds SONAME links using readelf. Check runtime functionality; compatibility shims do not guarantee every driver library works on musl.",
"imageAlt": "Prompt listing LXCs with NVIDIA passthrough and current driver version, with Yes/No to update them all"
},
"reboot": {
"title": "Reboot",
- "body": "Finally, the script rebuilds initramfs for all kernels and offers to reboot. A reboot is required: the nouveau blacklist and the new kernel module only take effect after restart."
+ "body": "After the driver installation, the script rebuilds initramfs for all kernels; its last step offers a reboot. Plan that restart to verify the persistent module and nouveau configuration on a fresh boot, even when the new driver already responds before reboot."
}
},
"reinstallUninstall": {
"heading": "Reinstall or uninstall",
- "intro": "When the installer detects that the nvidia kernel module is currently loaded and nvidia-smi returns a version, it doesn't silently re-install on top. Instead it shows an action menu so you can choose what to do. (Binaries present on disk but the module not loaded do not count as installed — the module has to be live.)",
+ "intro": "If nvidia is loaded and nvidia-smi returns a version, an action menu appears. This identifies an active driver for the menu; driver files can still be installed even when the module is not loaded.",
"imageAlt": "NVIDIA action menu offered when a driver is already installed — two choices: Reinstall / update driver, or Uninstall the NVIDIA driver completely",
"imageCaption": "The action menu only appears when an NVIDIA driver is currently active on the host.",
"reinstallHeading": "Reinstall / update",
- "reinstallBody": "Continues with the normal install flow but, before downloading anything, runs a clean removal of the current driver (apt purge + DKMS entries dropped + leftover modules unloaded). This is the safe path to apply a newer same-branch version, choose another maintained branch when needed, or recover from a half-broken state. The LXC propagation and NVENC patch prompts re-run at the end.",
+ "reinstallBody": "Continues through release selection, repository/header preparation, download and pre-build checking before removing the old driver and installing the new one. It can update within a maintained branch or select another supported branch. LXC library and NVENC patch prompts appear again afterwards.",
"uninstallHeading": "Uninstall — what gets removed",
- "uninstallIntro": "Confirms with a yes/no dialog first. Then performs a full, idempotent rollback:",
+ "uninstallIntro": "After a yes/no confirmation, the uninstall removes the following driver components:",
"uninstallItems": [
- "Runs nvidia-uninstall --silent first (the counterpart to the .run installer), then stops and disables nvidia-persistenced and nvidia-powerd, and unloads the kernel modules (nvidia_uvm, nvidia_drm, nvidia_modeset, nvidia) — any LXC container with NVIDIA passthrough will be cleanly cut off.",
- "Runs apt purge on nvidia-*, libnvidia-*, cuda-* and libcudnn*, removes the DKMS source tree and the /opt/nvidia .run installer cache.",
+ "Stops and disables nvidia-persistenced and nvidia-powerd, attempts to unload nvidia_uvm, nvidia_drm, nvidia_modeset and nvidia, then runs nvidia-uninstall --silent for the .run installation. NVIDIA-dependent LXC workloads are affected; active clients can prevent unloading.",
+ "Runs apt purge on nvidia-*, libnvidia-*, cuda-* and libcudnn*, removes the DKMS source tree and the nvidia-persistenced and nvidia-patch folders under /opt/nvidia.",
"Removes the modules-load config (/etc/modules-load.d/nvidia-vfio.conf) and the nouveau blacklist entries owned by ProxMenux. Legacy two-line ProxMenux blacklist files are migrated and removed too; modified or unrelated administrator files are preserved.",
"Removes the udev rules (/etc/udev/rules.d/70-nvidia.rules) and clears the NVENC patch state (a field in the ProxMenux managed-installs registry, set to removed — no separate file to delete).",
"Rebuilds initramfs for all kernels, runs proxmox-boot-tool refresh on systemd-boot hosts, and prompts for a reboot to finalise."
],
"lxcWarnTitle": "LXC containers with NVIDIA passthrough",
- "lxcWarnBody": "Removing the host driver invalidates the device paths and CUDA libraries mapped into any LXC with NVIDIA passthrough. Plan the operation during a maintenance window if Frigate / Plex / Jellyfin / Ollama (or anything else) depends on it."
+ "lxcWarnBody": "Removing the host driver interrupts NVIDIA-dependent LXC workloads, even when their userspace libraries remain installed. Schedule maintenance for Frigate, Plex, Jellyfin, Ollama or other apps that use the GPU."
},
"updates": {
"heading": "Update notifications",
@@ -121,26 +121,26 @@
"antiTitle": "Anti-cascade by design",
"antiBody": "One notification per distinct upstream version, never on every 24h scan. If no newer release exists in the installed branch, the tracker stays quiet.",
"applyTitle": "Applying the update",
- "applyBody": "The Monitor doesn't auto-apply driver updates — reinstalling the NVIDIA driver always needs a reboot. Open the same installer entry described above, pick Reinstall / update, and the new version is downloaded, the DKMS module rebuilt against the running kernel, and the reboot prompted at the end."
+ "applyBody": "Monitor reports updates without installing them automatically. Open the installer and choose Reinstall / update, select a supported version, and complete its build and installation steps. The workflow ends with a reboot prompt; plan the restart and verify the host and LXC libraries afterwards."
},
"verify": {
"heading": "Verifying the install",
"intro": "Once the host is back up, log in over SSH or the Proxmox shell and run:",
- "after": "You should see your GPU listed, the driver version on the top border, and no processes yet (nothing is using the GPU at this point). Then check the persistence service:",
+ "after": "Check that your GPU and the expected driver version appear. Processes may already be listed if host services or autostarted containers use the GPU. Then check the persistence service:",
"imageAlt": "Output of nvidia-smi on the host showing the detected GPU and installed driver version"
},
"troubleshoot": {
"heading": "Troubleshooting",
"smiFailTitle": "`nvidia-smi` says 'NVIDIA-SMI has failed'",
- "smiFailBody": "Almost always a nouveau still loaded or a kernel header mismatch. After reboot, run lsmod | grep nouveau — if it returns anything, check /etc/modprobe.d/proxmenux-nouveau-blacklist.conf, rebuild initramfs with update-initramfs -u -k all, and reboot. If nouveau is gone, check dmesg | grep -i nvidia — DKMS build errors usually mean the headers do not match the running kernel.",
+ "smiFailBody": "Possible causes include nouveau claiming the GPU, missing or mismatched kernel headers, incompatible driver sources or other module-load errors. Inspect lsmod | grep nouveau and dmesg | grep -i nvidia, plus the installer/DKMS logs. If nouveau policy needs fixing, check /etc/modprobe.d/proxmenux-nouveau-blacklist.conf before rebuilding with update-initramfs -u -k all and rebooting. Do not assume every build error is a header mismatch.",
"lxcMissTitle": "LXC container can't see the GPU after host update",
- "lxcMissBody": "The container's userspace libraries are stuck at the previous driver version. Either re-run the NVIDIA installer and accept the LXC propagation prompt, or install the same driver version manually inside the container with --no-kernel-modules.",
+ "lxcMissBody": "Check host device nodes, LXC permissions and the driver-library version before reinstalling. A version mismatch can require the matching userspace driver inside the LXC, using the supported distro path; on glibc systems the installer uses --no-kernel-modules. Reinstalling libraries will not repair missing device mounts or permissions.",
"logTitle": "Check the install log",
"logBody": "Every install writes to /tmp/nvidia_install.log. If something fails silently, that file has the full output (downloads, DKMS build, service installs). Attach it when reporting issues on GitHub."
},
"manualSteps": {
"heading": "Looking for the manual steps?",
- "body": "The original community guide — installing everything by hand with wget and ./NVIDIA-Linux-...run — is still available as a reference under wget and ./NVIDIA-Linux-...run. It explains the components but is not an exact transcript of the automated installer. Use the maintained ProxMenux workflow for its GPU filtering, build checks, LXC updates and VFIO checks."
},
"related": {
"heading": "Related",
diff --git a/web/messages/en/docs/hardware/switch-gpu-mode.json b/web/messages/en/docs/hardware/switch-gpu-mode.json
index ec555f1f..03e047e8 100644
--- a/web/messages/en/docs/hardware/switch-gpu-mode.json
+++ b/web/messages/en/docs/hardware/switch-gpu-mode.json
@@ -5,7 +5,7 @@
},
"header": {
"title": "Switch GPU Mode (VM ↔ LXC)",
- "description": "Reassign a GPU that's already in use — flip it from VM passthrough to LXC sharing or the other way round. ProxMenux handles all the host-side binding changes (vfio.conf, driver blacklist, modules, initramfs) and offers a clean policy for every VM or LXC currently using the GPU, so the switch doesn't leave broken config behind.",
+ "description": "Move an assigned GPU between VM passthrough and LXC sharing. ProxMenux manages the host driver binding, VFIO configuration, module settings and initramfs, and asks how to handle affected guests. Review those choices and verify the resulting configuration after reboot.",
"section": "Hardware: GPUs and Coral-TPU"
},
"intro": {
@@ -42,21 +42,21 @@
},
{
"situation": "I just want to completely unbind a GPU from everything.",
- "use": "Yes — pick the LXC-mode target and then detach manually."
+ "use": "LXC mode restores host-driver ownership; the VM conflict policy can remove hostpci entries, but LXC device entries must be removed separately. This does not leave the GPU unbound from every driver."
}
]
},
"prereqs": {
"title": "Before you start",
"assigned": "A GPU already assigned — either in a VM via VFIO or attached to at least one LXC. If you haven't assigned it yet, start from Add GPU to VM / LXC instead.",
- "iommu": "IOMMU enabled on the host — only strictly required when switching to VM mode, but worth having on either way. If the kernel param is missing the script auto-adds intel_iommu=on iommu=pt or amd_iommu=on to the boot command line (via proxmox-boot-tool refresh on systemd-boot or update-grub on GRUB) and includes it in the reboot prompt at the end.",
+ "iommu": "IOMMU must be active on the host when switching to VM mode. Firmware settings and kernel support both matter. If intel_iommu=on or amd_iommu=on is missing from the running kernel, the script adds it with iommu=pt to /etc/kernel/cmdline (ZFS-root marker) or /etc/default/grub, then runs proxmox-boot-tool refresh or update-grub. Check any warnings and reboot when prompted.",
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
- "reboot": "Be OK with a reboot. Switching GPU bindings at the kernel level means the host regenerates initramfs and you reboot to apply. The script prompts at the end.",
+ "reboot": "Plan for a reboot. Persistent driver and boot changes may require rebuilding initramfs and rebooting. The script presents a reboot prompt at the end.",
"knowList": "Know which VMs / LXCs are using the GPU. The script will find them and ask what to do with each, but it's faster if you already know the list."
},
"blocklist": {
"title": "Not all GPUs are safe to pass to a VM",
- "body": "A small blocklist of GPU IDs is refused for VM mode due to known passthrough instability (e.g. Intel Arc A770 8086:5a84 / 8086:5a85). If the selected GPU matches, the script explains why and exits. Switching to LXC mode is always allowed."
+ "body": "The script blocks VM mode for device IDs 8086:5a84 and 8086:5a85 under its compatibility policy. If a selected GPU matches, it stops the VM-mode switch and returns to GPU selection, or exits when it is the only GPU. This blocklist does not prevent switching to LXC mode; other checks can still apply."
},
"running": {
"heading": "Running the script",
@@ -65,7 +65,7 @@
},
"howRuns": {
"heading": "How the script runs",
- "body": "Two phases as usual: everything is collected and validated first, nothing is applied until you confirm at the end."
+ "body": "GPU selection and direction are reviewed before the main switch. A separate stale-VFIO cleanup can ask for confirmation earlier, and affected guests have their own conflict prompts. Read each confirmation: there is not one final confirmation covering every possible change."
},
"walkthrough": {
"heading": "Walking through the flow",
@@ -85,27 +85,27 @@
"intro": "Based on the current mode, the script proposes the opposite as target:",
"items": [
"VM → LXC: unbind from vfio-pci, let the native driver (nvidia, amdgpu, i915) reclaim the card so LXCs can share it. On NVIDIA, the per-BDF entry is removed from /etc/udev/rules.d/10-proxmenux-vfio-bind.rules so the nvidia module reclaims the GPU after reboot.",
- "LXC → VM: bind to vfio-pci so the card is free for VFIO passthrough to a single VM. On AMD / Intel this means blacklisting the native driver and setting options vfio-pci ids=…. On NVIDIA the nvidia module is not blacklisted — instead a per-BDF udev rule applies driver_override=vfio-pci only to the GPUs you select, so other NVIDIA GPUs on the host keep their nvidia driver."
+ "LXC → VM: prepares vfio-pci ownership. AMD / Intel use native-driver blacklisting and options vfio-pci ids=…. For NVIDIA, nvidia is globally blacklisted only when every host NVIDIA GPU is in VFIO; otherwise per-BDF rules set driver_override=vfio-pci for the affected IOMMU-group devices, and NVIDIA GPUs outside those groups keep nvidia. Review every group member before switching."
],
"outro": "Confirm the direction or cancel."
},
"conflict": {
"title": "Conflict policy per affected workload",
- "body": "The script scans every /etc/pve/lxc/*.conf and /etc/pve/qemu-server/*.conf looking for references to the GPU's PCI slot. For each affected workload you pick a policy:",
+ "body": "The script checks /etc/pve/lxc/*.conf for GPU-device references by driver family, and /etc/pve/qemu-server/*.conf for PCI assignments. LXC detection is not a precise per-card BDF match. Review the detected guests and choose how to handle each:",
"headerPolicy": "Policy",
"headerEffect": "Effect",
"headerWhen": "When to pick",
"keepPolicy": "Keep config, disable onboot",
- "keepEffect": "pct set -onboot 0 (or qm set). GPU lines stay in the config.",
+ "keepEffect": "pct set CTID -onboot 0 (or qm set VMID -onboot 0). GPU entries stay in the configuration.",
"keepWhen": "You plan to come back to this VM/LXC once the GPU is back in its original mode. Safe default.",
"removePolicy": "Remove GPU from config",
- "removeEffect": "hostpci / dev lines for this GPU's slot are sed'd out.",
- "removeWhen": "The VM/LXC will keep running without the GPU (CPU-only transcoding, etc.). Clean workflow.",
+ "removeEffect": "Removes identified hostpci / dev entries and supported legacy device references.",
+ "removeWhen": "Choose this if the guest should operate without the GPU. Check its application settings first: CPU fallback is application-dependent, and removing the device does not automatically reconfigure the app.",
"imageAlt": "Dialog asking per-VM / per-LXC conflict policy when switching a GPU that's currently assigned"
},
"audio": {
"title": "Orphan audio cleanup (only when leaving VM mode)",
- "body1": "dGPUs (NVIDIA / AMD) ship with an HDMI audio function at .1 of the same slot, and sometimes extra audio controllers are attached alongside the GPU. When the GPU leaves the VM, those audio lines become orphans — the VM has hostpci entries pointing to audio devices that aren't going with the GPU.",
+ "body1": "Many dedicated NVIDIA / AMD GPUs expose HDMI audio at function .1 of the same slot; additional audio devices may also have been assigned. Removing the GPU can leave obsolete hostpci audio entries in the VM. Review which devices should remain assigned.",
"body2": "The script discovers them (precise BDF match, no substring false-positives) and shows a checklist so you can remove them cleanly. It also cleans their vendor:device IDs from /etc/modprobe.d/vfio.conf — but only if no other VM still uses those audio IDs."
},
"apply": {
@@ -119,9 +119,9 @@
}
},
"manual": {
- "heading": "Manual equivalent",
- "intro": "If you want to understand exactly what the script does (or troubleshoot one of the steps by hand), these are the raw operations for VM → LXC on an NVIDIA card with vendor:device 10de:2204:",
- "lxcToVm": "And for LXC → VM:",
+ "heading": "Manual inspection",
+ "intro": "Before a VM → LXC switch, inspect the driver and existing per-BDF policy. This NVIDIA example uses vendor:device 10de:2204; adapt it to your card. These commands inspect state; the script also manages affected guests and IOMMU-group members.",
+ "lxcToVm": "Before LXC → VM, inspect the selected PCI address and its IOMMU group. Replace the example address with yours and review all group members before assigning devices.",
"oneVmTitle": "Only one VM can use a given vfio-pci GPU at a time",
"oneVmBody": "Putting multiple hostpci entries with the same PCI slot in two VMs is valid config but only one of the VMs can start with the GPU — the second one will fail. The ProxMenux conflict policy step is exactly about avoiding this trap."
},
@@ -131,11 +131,11 @@
"troubleshoot": {
"heading": "Troubleshooting",
"stillVfioTitle": "GPU still shows vfio-pci after switching to LXC mode",
- "stillVfioBody": "update-initramfs didn't run (or the reboot didn't actually happen). Check lsmod | grep vfio — if vfio-pci is loaded, rerun update-initramfs -u -k all and reboot. For AMD/Intel: verify vfio.conf no longer contains the GPU's vendor:device ID. For NVIDIA: verify the BDF is no longer in /etc/proxmenux/vfio-bind.bdfs and that /etc/udev/rules.d/10-proxmenux-vfio-bind.rules doesn't list it.",
+ "stillVfioBody": "A loaded VFIO module does not prove which driver owns this GPU. Check the card binding and whether update-initramfs and the reboot completed. lsmod | grep vfio only lists modules. For AMD / Intel inspect vfio.conf; for NVIDIA inspect /etc/proxmenux/vfio-bind.bdfs and /etc/udev/rules.d/10-proxmenux-vfio-bind.rules. Correct stale policy before running update-initramfs -u -k all and rebooting.",
"vmFailTitle": "A VM won't start after switching a GPU to LXC mode",
- "vmFailBody": "The VM still has hostpci entries pointing to a GPU it can't claim. Run the script again and pick the Remove GPU from config policy, or clean the config by hand:",
+ "vmFailBody": "Check whether the VM still has obsolete hostpci references. The Remove GPU from config policy can remove them during the intended switch; inspect the proposed direction before rerunning the script so you do not reverse the mode unintentionally. Alternatively, remove the obsolete assignment in Proxmox with the VM stopped.",
"smiFailTitle": "nvidia-smi fails with 'Driver/library version mismatch' after going back to LXC",
- "smiFailBody": "Host NVIDIA modules didn't reload cleanly. modprobe -r nvidia then modprobe nvidia. If that fails, reboot — a full reboot always clears residual state from the vfio binding.",
+ "smiFailBody": "Compare the loaded host NVIDIA module with the installed userspace libraries, including those in LXCs. Align versions first; a reboot loads the installed module but cannot repair mismatched library packages. Reloading with modprobe -r nvidia and modprobe nvidia requires stopped GPU clients and may fail while dependent modules are in use.",
"logTitle": "Install log",
"logBody": "Every run writes to /tmp/proxmenux_gpu_switch_mode.log on the host. Attach it when asking for help on GitHub."
},
diff --git a/web/messages/es/docs/hardware/coral-tpu-lxc.json b/web/messages/es/docs/hardware/coral-tpu-lxc.json
index 6b169463..222c734f 100644
--- a/web/messages/es/docs/hardware/coral-tpu-lxc.json
+++ b/web/messages/es/docs/hardware/coral-tpu-lxc.json
@@ -1,81 +1,81 @@
{
"meta": {
- "title": "Añadir Coral TPU a LXC | ProxMenux Documentation",
- "description": "Pasa una Google Coral TPU (USB o M.2 / PCIe) a un contenedor LXC de Proxmox. ProxMenux escribe las entradas correctas de dev / cgroup / mount para cada variante, arranca el contenedor e instala el runtime de Edge TPU dentro para que apps como Frigate puedan usar el acelerador."
+ "title": "Añadir Coral TPU a LXC | Documentación de ProxMenux",
+ "description": "Comparte una Google Coral TPU USB o M.2 / PCIe con un contenedor LXC de Proxmox. ProxMenux configura dispositivos, permisos y montajes, arranca el contenedor e instala el runtime Edge TPU en distribuciones compatibles."
},
"header": {
"title": "Añadir Coral TPU a LXC",
- "description": "Comparte una Google Coral TPU (USB Accelerator o M.2 / Mini-PCIe) con un contenedor LXC de Proxmox. ProxMenux se encarga de la config del LXC y de la instalación del runtime Edge TPU dentro del contenedor. Coral es solo TPU: para compartir GPU / iGPU (Quick Sync, VA-API, NVENC) en el mismo contenedor, ejecuta Añadir GPU a LXC por separado.",
- "section": "Hardware: GPUs y Coral-TPU"
+ "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: GPU y Coral-TPU"
},
"intro": {
- "title": "Qué hace esto",
- "body": "Escribe la config de passthrough en /etc/pve/lxc/<ctid>.conf — entradas distintas dependiendo de si el host tiene un USB Accelerator, una Coral M.2 / PCIe, o ambos. Luego arranca el contenedor e instala el último runtime libedgetpu de Google dentro de él. El passthrough de iGPU / GPU lo gestiona un script aparte (/etc/pve/lxc/<ctid>.conf para USB Accelerator, Coral M.2 / PCIe o ambos. Arranca el contenedor e instala el runtime libedgetpu de Google. La GPU se gestiona por separado en apt-get. Los contenedores no-Debian (Alpine, Arch, RHEL, SUSE…) siguen estando soportados en modo passthrough-only: el script detecta la distro y ofrece un prompt para saltarse la instalación APT de libedgetpu mientras escribe la config de passthrough del dispositivo — útil para contenedores de aplicación que ya incluyen el runtime (p.ej. la imagen Docker de Frigate).",
- "downtime": "Asume una breve interrupción del contenedor. El script lo para para aplicar los cambios de config y lo arranca de nuevo para instalar los drivers dentro. No hace falta reiniciar el host."
+ "container": "Un LXC existente, preferiblemente basado en Debian / Ubuntu: la instalación usa apt-get. Los contenedores de otras distribuciones pueden usar el modo de solo acceso al dispositivo, que omite la instalación APT de libedgetpu. Resulta útil si la aplicación ya incluye ese runtime, como la imagen Docker de Frigate.",
+ "downtime": "Prepara una breve interrupción 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."
},
"hostPrep": {
"title": "El host debe estar preparado primero",
- "body": "Si ejecutas este script antes de instalar los drivers de Coral en el host (el módulo de kernel gasket/apex para M.2, el runtime libedgetpu para USB), la config del LXC se escribe igualmente pero el contenedor no encontrará el dispositivo en tiempo de ejecución. El orden importa: instalación en el host → passthrough al LXC → app dentro del contenedor."
+ "body": "M.2 / PCIe necesita gasket/apex en el host y un dispositivo funcional. USB necesita conexión y permisos; la aplicación no tiene que ejecutarse en el host. El runtime libedgetpu debe estar donde se ejecute la app. Sigue el orden preparar host → acceso desde LXC → configurar app."
},
"running": {
"heading": "Ejecutar el script",
- "body": "Abre ProxMenux en el host, ve a Hardware: GPUs and Coral-TPU → Add Coral TPU to LXC.",
- "imageAlt": "Entrada del menú 'Add Coral TPU to LXC' dentro de Hardware: GPUs and Coral-TPU"
+ "body": "En ProxMenux, abre Hardware: GPU y Coral-TPU → Añadir Coral TPU a LXC.",
+ "imageAlt": "Opción Añadir Coral TPU a LXC en el menú de hardware"
},
"howRuns": {
- "heading": "Cómo se ejecuta el script",
- "body": "Una decisión por adelantado (¿qué contenedor?), luego el script gestiona los caminos USB y PCIe de forma independiente según lo que encuentre en el host. Si ambos están presentes, ambos se pasan."
+ "heading": "Cómo funciona el script",
+ "body": "Elige el contenedor. El script configura el acceso USB aunque no haya una Coral USB conectada y añade M.2 / PCIe cuando detecta ese hardware."
},
"walkthrough": {
- "heading": "Recorriendo el flujo",
+ "heading": "Proceso paso a paso",
"pick": {
"title": "Elige el contenedor LXC",
- "body": "Un diálogo muestra cada LXC del host (desde pct list). Elige el que debería recibir la Coral. En ejecución o parado, da igual — el script gestiona ambos casos (lo para brevemente para escribir la config y luego lo arranca de nuevo para instalar los drivers)."
+ "body": "El selector muestra los contenedores compatibles de pct list; los OCI se ocultan y se gestionan desde Apps del gestor OCI. Elige uno, esté arrancado o parado. El script lo detiene si hace falta, configura y lo arranca para instalar el runtime."
},
"gpuHint": {
- "title": "Sugerencia de passthrough de GPU (opcional)",
- "body": "Si el host tiene una GPU (Intel iGPU, AMD, NVIDIA) y el contenedor elegido NO tiene passthrough de GPU configurado, el script muestra un diálogo único sugiriendo que ejecutes /dev/coral independientemente del puerto USB en el que esté, y (2) hace bind-mount del árbol completo /dev/bus/usb dentro del contenedor.",
+ "title": "Configurar el acceso USB del LXC",
+ "body": "Crea una regla udev en el host para /dev/coral y monta el árbol completo /dev/bus/usb en el contenedor. Lo configura aunque no haya una Coral USB conectada; expone más dispositivos que solo la Coral.",
"whyTitle": "¿Por qué montar /dev/bus/usb en lugar de /dev/coral?",
- "whyBody": "La ruta del nodo del dispositivo USB (p. ej. /dev/bus/usb/001/005) cambia cuando reconectas el acelerador a otro puerto. Versiones anteriores del script hacían bind-mount del symlink /dev/coral, que apuntaba a una ruta vieja y se rompía. Montar el árbol USB completo significa que el contenedor ve la ruta actual sea cual sea, así que reconectar simplemente funciona."
+ "whyBody": "La ruta USB, por ejemplo /dev/bus/usb/001/005, cambia al reconectar el acelerador. Las versiones antiguas montaban el enlace /dev/coral y podían conservar una ruta obsoleta. Montar todo el árbol USB permite ver el nodo actual. Puede que la aplicación tenga que volver a abrirlo."
},
"pcie": {
- "title": "Escribir la config del LXC — ruta M.2 / PCIe",
- "body1": "Si hay una Coral M.2 / PCIe presente en el host y /dev/apex_0 existe (el módulo de kernel apex está cargado), el script usa la API moderna dev de Proxmox que gestiona los permisos de cgroup2 automáticamente tanto para contenedores privilegiados como unprivileged:",
- "body2": "Si el host aún no ha arrancado con el módulo apex cargado (acabas de ejecutar /dev/apex_0 aún no existe. El script recurre al cgroup2 + bind mount clásico con create=file para que las entradas sean válidas incluso cuando el dispositivo no se ha materializado:",
+ "title": "Configurar el acceso M.2 / PCIe del LXC",
+ "body1": "Si detecta una Coral M.2 / PCIe y existe /dev/apex_0, usa la API dev de Proxmox para gestionar cgroup2 tanto en LXC privilegiados como sin privilegios:",
+ "body2": "Si acabas de ejecutar /dev/apex_0, escribe un montaje con create=file y, solo si el número mayor de apex aparece en /proc/devices, 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 fallback de cgroup2 + mount se escribirá, pero el dispositivo solo existe realmente después de un reinicio del host que cargue el módulo apex. Si no has reiniciado, reinicia ahora antes de arrancar el contenedor."
+ "rebootBody": "El montaje alternativo no carga apex 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."
},
"drivers": {
- "title": "Arrancar el contenedor + instalar el runtime de Coral dentro",
- "body": "Los cambios de config en LXC de Proxmox surten efecto en el siguiente arranque — así que el script arranca el contenedor, espera hasta 15 segundos a que pct exec responda y luego deja un bash script dentro que:",
+ "title": "Arrancar el LXC e instalar el runtime de Coral",
+ "body": "Arranca el contenedor, espera hasta 15 segundos a que su estado sea «running» y usa pct exec para ejecutar el instalador dentro. Este instalador:",
"items": [
"Ejecuta apt-get update.",
- "Instala los prerequisitos del repositorio Coral: gnupg, curl, ca-certificates.",
+ "Instala los requisitos del repositorio Coral: gnupg, curl y ca-certificates.",
"Importa la clave GPG de Coral de Google en /etc/apt/keyrings/coral-edgetpu.gpg (ruta moderna, la misma que usa el instalador del host) y añade el repositorio APT coral-edgetpu-stable con signed-by=.",
- "Instala el último libedgetpu1-std (por defecto). Si tienes una Coral M.2, se te preguntará entre libedgetpu1-std (estándar) y libedgetpu1-max (máximo rendimiento, calienta más)."
+ "Instala libedgetpu1-std por defecto. Si detecta Coral M.2, ofrece libedgetpu1-std o libedgetpu1-max. Elegir el paquete no configura por sí solo la detección de la aplicación."
],
"noIgpuTitle": "¿Por qué no hay drivers de iGPU aquí?",
- "noIgpuBody": "Versiones anteriores de este script también instalaban Intel va-driver-all, intel-opencl-icd y compañía para que el mismo contenedor pudiera hacer decode de vídeo Quick Sync junto a la inferencia de Coral. Esa doble responsabilidad causaba fallos confusos cuando el usuario solo quería Coral. El lado iGPU es ahora trabajo exclusivo de apt-get, que solo viene con distros de la familia Debian/Ubuntu. En contenedores Alpine, Arch, RHEL o SUSE el script detecta la distro vía /etc/os-release y muestra un prompt de confirmación: continuar en modo passthrough-only (escribe la config del dispositivo en /etc/pve/lxc/<ctid>.conf y se salta la instalación APT de libedgetpu) o cancelar. Passthrough-only es la opción correcta si el contenedor de aplicación que va a usar Coral ya incluye el runtime — el ejemplo canónico es la imagen Docker de Frigate. Si no, sigue la libedgetpu manualmente después de que el script haya escrito la config del LXC."
+ "noIgpuBody": "Antes también instalaba va-driver-all, intel-opencl-icd y otros paquetes Intel para combinar Quick Sync y Coral. Esa mezcla provocaba fallos confusos cuando solo se quería Coral. Ahora la iGPU se configura con apt-get en Debian/Ubuntu. En Alpine, Arch, RHEL o SUSE, detectados mediante /etc/os-release, ofrece continuar solo con el acceso al dispositivo: configura /etc/pve/lxc/<ctid>.conf sin instalar libedgetpu; o cancelar. Si la app ya incluye el runtime, como Frigate Docker, basta ese modo. Si no, instala libedgetpu siguiendo la lsmod | grep apex — si está vacío, ejecuta modprobe apex, o reinicia si acabas de instalar los drivers de Coral. Una vez el host tenga /dev/apex_0, reinicia el contenedor: pct stop <ctid> && pct start <ctid>.",
- "replugTitle": "La Coral USB desaparece al reconectarla en otro puerto",
- "replugBody": "Justo por eso el script monta /dev/bus/usb en lugar del symlink /dev/coral. Si te pasa esto, comprueba que tu config del LXC tiene lxc.mount.entry: /dev/bus/usb dev/bus/usb ... y no una referencia directa a /dev/coral. Las configs viejas de versiones anteriores del script pueden necesitar actualizarse — vuelve a ejecutar el script sobre el mismo contenedor y la config se refresca.",
- "alpineTitle": "Contenedor Alpine / Arch / RHEL / SUSE — runtime no instalado",
- "alpineBody": "Si elegiste modo passthrough-only cuando el script lo preguntó, la config del LXC se escribió y el dispositivo Coral es visible dentro del contenedor, pero el runtime libedgetpu no está instalado. Es así por diseño: el repo APT de Google solo se publica para Debian/Ubuntu. Instala el runtime manualmente con el gestor de paquetes de tu distro (Alpine: apk add; Arch: AUR; RHEL/SUSE: compilar desde fuente) siguiendo la guía oficial de Google, o usa un contenedor de aplicación que incluya el runtime — la imagen Docker de Frigate es el ejemplo canónico: solo expone el dispositivo con --device /dev/apex_0:/dev/apex_0 (M.2) o el bind mount USB que el script ya escribió (USB).",
- "frigateTitle": "Frigate dice 'Coral EdgeTPU detected but not available'",
- "frigateBody": "Casi siempre es un problema de permisos dentro del contenedor. Frigate corre como root por defecto; comprueba que el usuario root está en el grupo plugdev dentro del contenedor (para USB), y que el proceso puede leer /dev/apex_0 (para M.2). ls -l /dev/apex_0 desde dentro del contenedor debería mostrar el grupo apex — si no, añade el alineamiento de GID a /etc/group o cambia el contenedor a modo privilegiado.",
+ "apexTitle": "El LXC arranca pero falta /dev/apex_0",
+ "apexBody": "Comprueba el controlador del host: lsmod | grep apex. Si falta, prueba modprobe apex o reinicia tras instalarlo. Cuando exista /dev/apex_0 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 pct stop <ctid> && pct start <ctid>.",
+ "replugTitle": "Coral USB desaparece al conectarla a otro puerto",
+ "replugBody": "Comprueba que el LXC monta /dev/bus/usb y no el enlace /dev/coral. La configuración debe incluir lxc.mount.entry: /dev/bus/usb dev/bus/usb ..., sin depender directamente de /dev/coral. Vuelve a ejecutar el script si conservas una configuración antigua.",
+ "alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime sin instalar",
+ "alpineBody": "El modo de solo acceso al dispositivo configura LXC sin instalar libedgetpu. Usa un paquete compatible o compila desde fuente; comprueba su disponibilidad antes de usar, por ejemplo, apk add en Alpine. Frigate puede incluir el runtime. Si usas Docker dentro del LXC, pasa también M.2 con --device /dev/apex_0:/dev/apex_0 o monta USB dentro de Docker: el montaje LXC no basta.",
+ "frigateTitle": "Frigate muestra «Coral EdgeTPU detected but not available»",
+ "frigateBody": "Comprueba runtime, visibilidad y permisos de lectura/escritura del proceso real. En USB revisa permisos y, si procede, el grupo plugdev. En M.2 inspecciona /dev/apex_0 con ls -l /dev/apex_0. Un nombre como apex en /etc/group no basta: deben coincidir GID numéricos y mapeos LXC. Comprueba también si otro proceso ocupa la TPU; no cambies a privilegiado como primera solución.",
"logsTitle": "Revisa los logs del host y del contenedor",
- "logsBody": "En el host: journalctl -u pvedaemon | grep -i coral. Dentro del contenedor: revisa los logs de la app (Frigate: /config/logs/, CodeProject.AI: su propio directorio de logs). El patrón clásico de error es \"Coral detected, runtime loaded, but inference engine can't claim it\" — eso son permisos 9 de cada 10 veces."
+ "logsBody": "En el host revisa los mensajes del kernel con journalctl -k | grep -i -e apex -e gasket -e usb. Dentro del LXC revisa los registros de la app; con Docker anidado usa docker logs <container>. Pueden fallar permisos, runtime, conexión USB o la disponibilidad de la TPU si otro proceso la ocupa."
},
"related": {
"heading": "Relacionado",
"items": [
{
- "label": "Instalar Coral TPU (Host)",
+ "label": "Instalar Coral TPU en el host",
"href": "/docs/hardware/install-coral-tpu-host",
- "tail": " — prerequisito necesario para tarjetas Coral M.2 / PCIe antes de pasarlas a un CT."
+ "tail": " — requisito previo para usar una Coral M.2 / PCIe en un CT."
},
{
"label": "Añadir GPU a LXC",
"href": "/docs/hardware/igpu-acceleration-lxc",
- "tail": " — el mismo patrón para GPUs (a menudo emparejado con una Coral TPU en setups de Frigate)."
+ "tail": " — acceso a GPU, que suele combinarse con Coral en Frigate."
}
]
}
diff --git a/web/messages/es/docs/hardware/gpu-vm-passthrough.json b/web/messages/es/docs/hardware/gpu-vm-passthrough.json
index 63af3ddb..8aa92b02 100644
--- a/web/messages/es/docs/hardware/gpu-vm-passthrough.json
+++ b/web/messages/es/docs/hardware/gpu-vm-passthrough.json
@@ -1,134 +1,134 @@
{
"meta": {
- "title": "Añadir GPU a VM (Passthrough) | ProxMenux Documentation",
- "description": "Pasa una GPU Intel, AMD o NVIDIA a una VM Proxmox con rendimiento cercano al nativo. ProxMenux gestiona la preparación del host (módulos VFIO, blacklist de drivers, cmdline del kernel), la configuración de la VM (hostpci, función de audio, hermanos del grupo IOMMU), workarounds específicos del fabricante (Code 43 de NVIDIA, reset bug de AMD, dump de ROM) y conflictos de switch-mode con LXCs."
+ "title": "Añadir GPU a VM | Documentación de ProxMenux",
+ "description": "Asigna una GPU física a una VM de Proxmox. ProxMenux revisa IOMMU, configura VFIO y dispositivos de la VM y detecta conflictos con otras VM o LXC."
},
"header": {
"title": "Añadir GPU a VM (Passthrough)",
- "description": "Dale una de tus GPUs a una máquina virtual con rendimiento cercano al nativo. ProxMenux detecta Intel / AMD / NVIDIA, valida IOMMU, analiza el grupo IOMMU de la GPU para pasar cada dispositivo hermano junto, configura VFIO en el host, escribe las líneas hostpci correctas en la config de la VM y aplica fixes específicos del fabricante cuando hace falta.",
- "section": "Hardware: GPUs y Coral-TPU"
+ "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: GPU y Coral-TPU"
},
"intro": {
- "title": "Qué hace esto",
- "body": "Todo lo que la hostpci, dump de ROM en AMD, ocultación de KVM en NVIDIA — hecho en una sola ejecución con comprobaciones de cordura en cada paso. El script también es consciente de las otras cosas en tu host: si la misma GPU ya está asignada a un LXC u otra VM, te ofrece migrar limpiamente en lugar de romper silenciosamente el setup existente."
+ "title": "Qué hace",
+ "body": "Automatiza la configuración del host y hostpci descrita en la lspci.",
+ "gpu": "GPU compatible instalada físicamente. El script detecta Intel, AMD y NVIDIA con lspci.",
"gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
- "iommu": "Virtualización IOMMU disponible en BIOS/UEFI (Intel VT-d o AMD-Vi). Si está apagada a nivel de firmware, ninguna config de Linux lo arregla — tienes que habilitarla primero en la BIOS. El script detecta esto y se ofrece a habilitarlo en el lado del SO.",
- "q35": "La VM destino usa machine type q35. El antiguo i440fx no soporta de forma fiable el passthrough PCIe y el script se negará a continuar.",
- "q35Check": "qm config '<'vmid'>' | grep machine",
- "moreGpus": "Preferiblemente más de una GPU en el host, o acceso por consola en otra salida (IPMI, KVM-over-IP, serie). Una vez pases la única GPU a una VM, la consola del host se queda a oscuras. Con dos GPUs NVIDIA puedes pasar una a una VM y mantener la otra en el host — el script gestiona esto por BDF (ver NVIDIA en las notas del fabricante más abajo).",
- "nvidiaInstalled": "Si estás en un Proxmox que ya instaló el driver de NVIDIA vía nvidia del host y se vincula a vfio-pci. El módulo nvidia sigue cargado, así que cualquier otra GPU NVIDIA que tengas en el host sigue funcionando con nvidia-smi."
+ "iommu": "Soporte IOMMU en hardware y firmware cuando lo requiera (Intel VT-d o AMD-Vi). Comprueba el sistema y puede añadir parámetros Linux; no cambia BIOS/UEFI ni demuestra que un IOMMU inactivo esté desactivado en firmware.",
+ "q35": "Este asistente exige tipo de máquina q35 y rechaza i440fx. El chipset es independiente de BIOS/UEFI; cambiarlo en una VM existente requiere planificación y no se hace automáticamente.",
+ "q35Check": "qm config VMID | grep machine",
+ "moreGpus": "Prepara otra GPU o acceso alternativo mediante SSH, IPMI o serie. La consola puede perder imagen al reservar la GPU principal. En NVIDIA, otra tarjeta fuera del grupo IOMMU afectado puede seguir en el host.",
+ "nvidiaInstalled": "Con vfio-pci, no para nvidia. El módulo nvidia puede seguir disponible para otras tarjetas fuera del grupo IOMMU afectado. Verifícalas con nvidia-smi."
},
"pickOne": {
- "title": "Passthrough a VM vs compartición con LXC — elige uno por GPU",
+ "title": "Asignación exclusiva a VM o compartición LXC",
"body": "Una GPU vinculada a vfio-pci para passthrough a VM no puede usarla simultáneamente el host ni un LXC. Si tienes dos GPUs, puedes dedicar una a cada ruta. Si solo tienes una, elige:",
- "vmItem": "Ruta VM (esta página): acceso completo al hardware, pero exclusivo para la VM dueña de la GPU mientras esté en ejecución.",
- "lxcItem": "Ruta LXC (intel_iommu=on (o amd_iommu=on) + iommu=pt al archivo de arranque correcto. La selección depende del bootloader: /etc/kernel/cmdline cuando el host arranca con systemd-boot (se detecta por la presencia de root=ZFS= en ese fichero, lo habitual en instalaciones de Proxmox VE sobre ZFS-on-root), o /etc/default/grub en el resto. Si aceptas y la cmdline cambia, el script marca que hará falta un reinicio al final.",
- "tipTitle": "¿Ya ejecutaste post-instalación?",
- "tipBody": "Si habilitaste anteriormente intel_iommu=on o amd_iommu=on 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 iommu=pt. Elige /etc/kernel/cmdline si encuentra una marca ZFS como root=ZFS=; si no, /etc/default/grub. 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 /sys/bus/pci/devices/<pci>/reset_method: si la tarjeta es una APU sin FLR bloquea (prácticamente inutilizable); una tarjeta AMD dedicada sin FLR también se bloquea; cualquier cosa con un modo de reset desconocido avisa pero te deja continuar con override explícito.",
- "No en D3cold. Algunas tarjetas AMD reportan estado de energía D3cold en reposo, lo que las hace invisibles durante el arranque de la VM. Bloqueado hasta que despiertes la GPU.",
- "Análisis del grupo IOMMU. Lee /sys/kernel/iommu_groups/ para encontrar cada dispositivo no-bridge del grupo de la GPU. Todos ellos se pasarán a la VM juntos — si tu placa base agrupa la GPU con una tarjeta de red, la tarjeta de red va también."
+ "Protección SR-IOV. Rechaza VF y PF con VF activas porque configura dispositivos completos, no SR-IOV. Configura SR-IOV por separado con hardware compatible.",
+ "Una sola GPU. La consola local puede perder su salida al reservarla para VFIO. Comprueba antes el acceso SSH o web desde otro equipo.",
+ "Política de reinicio AMD. Lee /sys/bus/pci/devices/<pci>/reset_method. Una APU o dedicada sin FLR queda bloqueada por la política del asistente; un subtipo desconocido sin FLR exige confirmación. No demuestra que sea imposible en todo entorno.",
+ "Estado D3cold. El asistente bloquea tarjetas AMD que indican D3cold por riesgo de fallo al activarlas. Revisa alimentación y firmware antes de continuar.",
+ "Grupo IOMMU. Lee /sys/kernel/iommu_groups/ e incluye todos los miembros que no sean puentes, incluso controladores de red o discos. Si el grupo contiene dispositivos de otro slot, el script los muestra antes del resumen; comprueba que el host no necesite ninguno. Si falta reiniciar para activar IOMMU, solo puede planificar inicialmente la función GPU; comprueba el aislamiento después."
],
- "audioIntro": "Audio compañero. Dos rutas, según dónde viva el audio:",
- "audioDgpu": "GPU discreta (NVIDIA / AMD): el audio HDMI está en la misma tarjeta como función .1 del slot PCI de la GPU. Incluido automáticamente. Este dispositivo de audio nunca lo usó el host, así que nadie pierde nada.",
- "audioIgpu": "iGPU Intel (o cualquier GPU sin hermano .1): el audio HDMI / analógico vive en el chipset en un slot distinto (00:1f.3 normalmente). El script escanea el host, lista cada controlador de audio PCI con su driver actual (snd_hda_intel, etc.) y te pregunta cuál(es) pasar. Por defecto ninguno — tienes que aceptarlo explícitamente."
+ "audioIntro": "Audio asociado. Dos casos según dónde esté el controlador:",
+ "audioDgpu": "GPU dedicada: el audio HDMI suele ocupar la función .1 del mismo slot y se incluye al detectarlo. Si el host lo usaba, pierde acceso al reservarlo para la VM.",
+ "audioIgpu": "Sin función de audio .1: puede estar en otro dispositivo, como 00:1f.3. Lista controladores y sus drivers, por ejemplo snd_hda_intel. Por defecto no selecciona ninguno; elige solo los necesarios."
},
"pickVm": {
- "title": "Elegir la VM destino",
- "body": "Se te muestra la lista de VMs del host y eliges una. El script comprueba que la VM es q35 — los machine types BIOS/i440fx se rechazan porque el passthrough PCIe en ellos no es fiable. Si tienes una VM q35 con la GPU ya asignada (parcial o completamente), la entrada existente se reutiliza en lugar de duplicarse.",
- "imageAlt": "Lista de VMs con nombre, ID y estado mostrada como selector"
+ "title": "Elige la VM destino",
+ "body": "Elige la VM de la lista. Exige q35 y reutiliza entradas GPU existentes cuando puede. BIOS/UEFI es una opción distinta, no un tipo de máquina. No cambia automáticamente el chipset ni el arranque del invitado instalado.",
+ "imageAlt": "Selección de VM por nombre, ID y estado"
},
"switchMode": {
- "title": "Switch mode — gestionar que la GPU ya esté en otro sitio",
+ "title": "Resolver asignaciones existentes",
"intro": "El script escanea cada config de VM y cada config de LXC en el host buscando la GPU que elegiste. Tres resultados posibles:",
"items": [
- "La GPU está libre. Nada que hacer, continúa.",
- "La GPU está en otra VM. Si la VM origen está en ejecución, el script aborta — dos VMs no pueden compartir una asignación VFIO exclusiva y la VM origen ha de pararse antes. Si la VM origen está parada, aparece un menú con dos opciones: Mantener la GPU en la config de la VM origen pero desactivar Arranque al inicio, o Eliminar las líneas de la GPU de la config de la VM origen y mantener Arranque al inicio. También existe un camino rápido: si la GPU ya está vinculada a vfio-pci y es un simple traspaso VM→VM, no se reconfigura el host y no hace falta reinicio.",
- "La GPU está en un LXC (modo compartido). Aparece un menú con dos opciones: Mantener la GPU en la config del LXC pero desactivar Arranque al inicio, o Eliminar las líneas de la GPU de la config del LXC (lxc.cgroup2.devices.allow / lxc.mount.entry) y mantener Arranque al inicio. En ambos casos, el LXC dejará de ver la GPU tras el switch, y la VM la verá — esta es la mecánica de \"switch mode\" que le da a esta entrada de menú su etiqueta secundaria."
+ "GPU disponible. Continúa sin retirar asignaciones.",
+ "Asignada a otra VM. Detén primero la VM origen. Puedes conservar sus entradas y desactivar el arranque automático o retirarlas conservando el arranque automático. Si ya usa vfio-pci y no requiere cambios del host, el traspaso VM→VM puede evitar reiniciar el host.",
+ "Usada por LXC. En contenedores normales elige conservar configuración y desactivar arranque automático o eliminar la configuración de la GPU y conservar arranque automático. Esta opción elimina las entradas devN y, en AMD/Intel, también las reglas antiguas lxc.mount.entry de /dev/dri y lxc.cgroup2.devices.allow. 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",
- "smartTitle": "Los hermanos de audio también se limpian con inteligencia",
- "smartBody": "Si la VM origen tenía dispositivos de audio extra adjuntos junto a la GPU, el script quita solo los que ahora son huérfanos — es decir, entradas de audio cuyo hermano de display también se está quitando. El audio vinculado a otra GPU que se queda en la VM se deja intacto. Esto importa cuando desadjuntas una iGPU Intel (que comparte el audio del chipset) de una VM que también tiene una tarjeta dedicada NVIDIA / AMD aún pasada: el audio HDMI de la dGPU (02:00.1) se queda, el audio del chipset (00:1f.3) se va."
+ "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 audio posiblemente sin uso en la VM origen. Desmarca lo que aún necesite. Por ejemplo, puede conservar 02:00.1 y ofrecer retirar 00:1f.3. La lista decide qué audio adicional se elimina; no garantiza toda asociación entre pantalla y audio."
},
"audioPick": {
- "title": "(Si no hay hermano .1) Elegir qué controladores de audio incluir",
+ "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 marques audio del que depende el host",
- "warnBody": "Si el host usa actualmente un controlador de audio para algo — por ejemplo, el beep del shell de Proxmox o una VM a la que ya lo has pasado — marcarlo aquí significa que el host (y cualquier otra VM que lo comparta) pierde acceso después del reinicio. Ante la duda, déjalo vacío y siempre puedes volver a ejecutar el script más tarde para añadir audio si hace falta."
+ "warnTitle": "No selecciones audio que necesita el host",
+ "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": "Un diálogo final muestra exactamente qué está a punto de cambiar en el host y en la VM. Esta es la última salida — si algo se ve mal (un dispositivo extra en el grupo IOMMU que no esperabas, la GPU equivocada, la VM equivocada), cancela aquí y aún no se ha tocado nada.",
- "imageAlt": "Diálogo de resumen listando los cambios del host (archivos VFIO/blacklist) y los cambios de config de la VM (líneas hostpci) antes de aplicar"
+ "body": "Revisa el plan final y cancela si no es correcto. Muestra el grupo IOMMU y su número de dispositivos; los miembros de otro slot aparecen en el paso anterior. 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": {
"title": "Se aplican los cambios del host",
- "intro": "La Fase 2 se ejecuta de forma no interactiva. En el lado del host el script puede tocar:",
+ "intro": "La fase de aplicación cambia host y VM. La limpieza de audio asociado aún puede pedir una elección. Puede modificar:",
"items": [
"/etc/modules — añade vfio, vfio_iommu_type1, vfio_pci (más vfio_virqfd en kernels < 6.2).",
- "/etc/modprobe.d/vfio.conf — para AMD / Intel, define options vfio-pci ids=<vendor:device,...> disable_vga=1 para que VFIO reclame la GPU pronto en el arranque. Para NVIDIA el archivo solo añade softdep nvidia pre: vfio-pci (más _drm/_modeset/_uvm) — el binding real es por BDF vía la regla udev de abajo. En AMD, también añade líneas softdep forzando que vfio-pci cargue antes de radeon / amdgpu.",
- "/etc/modprobe.d/iommu_unsafe_interrupts.conf y kvm.conf — workarounds sensatos que la mayoría de VMs Windows / macOS necesitan (allow_unsafe_interrupts=1, ignore_msrs=1).",
- "/etc/modprobe.d/blacklist.conf — solo pone en blacklist los drivers open-source del vendor seleccionado (nouveau/lbm-nouveau para NVIDIA; radeon+amdgpu para AMD; i915 para Intel), así los drivers de otros vendors en el mismo host siguen cargados. El módulo propietario nvidia solo se pone en blacklist (mediante un fichero aparte, /etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf) una vez que todas las GPUs NVIDIA del host han pasado a VFIO — hasta entonces sigue cargado para que cualquier NVIDIA que mantengas en el host siga funcionando.",
- "/etc/udev/rules.d/10-proxmenux-vfio-bind.rules + /etc/proxmenux/vfio-bind.bdfs — solo NVIDIA. Estado de binding por BDF. La regla udev aplica ATTR'{'driver_override'}'=\"vfio-pci\" en el evento PCI ADD para cada Bus:Device.Function rastreado, así que solo las GPUs que has pasado explícitamente van a VFIO. Esto es lo que hace que NVIDIA multi-GPU funcione — tus otras tarjetas NVIDIA mantienen su driver nvidia y siguen siendo usables en el host.",
- "Solo AMD. Vuelca la ROM de la GPU desde sysfs (/sys/bus/pci/.../rom) o la tabla ACPI VFCT a /usr/share/kvm/vbios_<card>.bin. La VM la referencia vía romfile= para que las tarjetas que mal-reportan su propia VBIOS aún inicialicen correctamente.",
- "Solo NVIDIA. Los servicios NVIDIA del host (nvidia-persistenced, nvidia-powerd, nvidia-fabricmanager) solo se detienen y deshabilitan cuando todas las GPU NVIDIA están asignadas a VFIO. En un host mixto permanecen activos, junto con el módulo nvidia, para las GPU que continúan en modo nativo.",
+ "/etc/modprobe.d/vfio.conf — AMD/Intel: options vfio-pci ids=<vendor:device,...> disable_vga=1. NVIDIA: softdep nvidia pre: vfio-pci (_drm/_modeset/_uvm); la asignación real es por BDF. AMD añade orden de carga softdep: vfio-pci → radeon/amdgpu.",
+ "Escribe /etc/modprobe.d/iommu_unsafe_interrupts.conf y kvm.conf con allow_unsafe_interrupts=1 e ignore_msrs=1. Son ajustes del script, no requisitos universales de Windows/macOS; permitir interrupciones inseguras reduce esa protección.",
+ "/etc/modprobe.d/blacklist.conf: NVIDIA — nouveau/lbm-nouveau; AMD — radeon + amdgpu; Intel — i915. Estas reglas por fabricante pueden afectar a otras tarjetas con el mismo controlador. El módulo nvidia se bloquea solo mediante /etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf cuando todas las NVIDIA del host están reservadas a VFIO.",
+ "/etc/udev/rules.d/10-proxmenux-vfio-bind.rules + /etc/proxmenux/vfio-bind.bdfs — Solo NVIDIA. Aplica ATTR'{'driver_override'}'=\"vfio-pci\" al evento PCI ADD de BDF registrados, incluidas funciones del grupo IOMMU afectado. Fuera de esos grupos puede conservarse nvidia. La política por BDF no divide grupos IOMMU.",
+ "Solo AMD. Intenta extraer ROM de /sys/bus/pci/.../rom o ACPI VFCT a /usr/share/kvm/vbios_<vendor>_<device>.bin. Si funciona, usa romfile=. Una ROM válida no garantiza que la GPU se inicialice.",
+ "Solo NVIDIA. Detiene y deshabilita nvidia-persistenced, nvidia-powerd, nvidia-fabricmanager solo cuando todas las NVIDIA están reservadas para VFIO. En uso mixto conserva los servicios y nvidia para las tarjetas nativas.",
"update-initramfs -u -k all — solo se ejecuta si algo de lo de arriba ha cambiado realmente."
]
},
"vmApply": {
"title": "La config de la VM se aplica vía qm set",
"body": "La config de la VM en /etc/pve/qemu-server/<vmid>.conf se actualiza vía qm set (nunca por sed directo):",
- "after1": "Se añade un flag x-vga=1 para cada fabricante excepto iGPU Intel — las GPUs integradas Intel no tienen VRAM dedicada para una consola pre-arranque, así que ese flag causa hangs.",
+ "after1": "Añade x-vga=1 para AMD y NVIDIA, no para Intel. Es la política del script; no demuestra que todas las iGPU Intel carezcan de firmware o que ese ajuste siempre provoque bloqueos.",
"after2": "Se añaden líneas hostpciN adicionales si el grupo IOMMU de la GPU contiene otros dispositivos que necesitas pasar juntos."
},
"reboot": {
- "title": "Reiniciar si se tocó la config del host",
- "body": "Si la Fase 2 cambió algo a nivel de módulo de kernel / cmdline / blacklist, se te pedirá reiniciar. El reinicio es obligatorio antes de arrancar la VM — si no la GPU sigue retenida por el driver del host y VFIO no puede reclamarla.",
+ "title": "Reinicia si lo requiere el cambio del host",
+ "body": "Sigue el aviso de reinicio si cambia arranque o controladores y comprueba la vinculación activa antes de iniciar la VM. Guardar configuración no prueba que esté aplicada. Un traspaso VM→VM con VFIO correcto puede evitar reiniciar el host.",
"imageAlt": "Pantalla de resumen mostrando qué se cambió, seguida de un prompt de reinicio"
}
},
"vendors": {
- "heading": "Notas específicas del fabricante",
+ "heading": "Notas por fabricante",
"nvidiaHeading": "NVIDIA",
- "nvidiaBody": "Los drivers de consumo de NVIDIA detectan que están corriendo en una VM y se niegan a inicializar con el infame error \"Code 43\". El workaround de ProxMenux: ocultar KVM al guest (hidden=1), poner un hypervisor vendor ID falseado NV43FIX en la línea args y pasar kvm=off. Esto ha funcionado de forma fiable en drivers GeForce durante años. En tarjetas datacenter / Tesla / Quadro esto no hace falta — esos drivers están licenciados para virtualización.",
+ "nvidiaBody": "Conserva un ajuste heredado para Code 43: hidden=1, ID NV43FIX en args y kvm=off. No es requisito universal de GeForce actuales: NVIDIA añadió soporte de passthrough Windows en R465. El error puede tener otras causas; verifica GPU y controlador.",
"nvidiaMultiHeading": "Soporte NVIDIA multi-GPU",
- "nvidiaMultiBody": "Los hosts con dos o más GPUs NVIDIA son de primera clase. Puedes pasar una tarjeta a una VM y mantener la(s) otra(s) en el host para nvidia-smi, compartición de GPU con LXC o cualquier carga del lado del host. ProxMenux vincula VFIO por BDF (Bus:Device.Function) vía una regla udev en lugar de poner en blacklist globalmente el módulo nvidia — así el destino de cada tarjeta es independiente de las otras, incluso cuando ambas GPUs son del mismo modelo y comparten el mismo ID vendor:device. El driver nvidia del host sigue cargado; solo los BDFs específicos que selecciones se redirigen a vfio-pci.",
+ "nvidiaMultiBody": "Admite uso mixto NVIDIA por BDF. Registra funciones de vfio-pci por dirección, no solo por ID vendor:device. Fuera de los grupos afectados pueden conservar nvidia; compruébalas con nvidia-smi. No aísla dos tarjetas del mismo grupo.",
"amdHeading": "AMD",
- "amdBody": "El \"AMD reset bug\" significa que algunas tarjetas crashean cuando la VM para y no pueden re-inicializarse sin un reinicio del host. ProxMenux pre-criba para esto leyendo el método de reset PCI, pero no puede arreglarlo después. Si lo encuentras, el fix de la comunidad es el módulo de kernel x-vga=1 (las iGPUs no llevan una VBIOS pre-arranque). Perderás la salida de consola del host — planifícalo en consecuencia."
+ "intelBody": "Asignar toda la iGPU Intel y usar SR-IOV son procesos distintos. Este asistente reserva el dispositivo para una VM y omite x-vga=1. qm config <vmid> | grep -E \"cpu|args\" — deberías ver hidden=1 y hv_vendor_id=NV43FIX. Si faltan, vuelve a ejecutar el script y reselecciona la misma VM.",
+ "code43Body": "Code 43 no prueba un fallo de ocultación. Consulta qm config VMID | grep -E \"cpu|args\" sustituyendo VMID y revisa hidden=1 y hv_vendor_id=NV43FIX. Comprueba también controlador invitado, firmware y asignación. Repetir el script puede salir si ya está asignada.",
"amdResetTitle": "La GPU AMD funciona una vez, falla al reiniciar la VM",
- "amdResetBody": "El AMD reset bug. Soluciones (en orden): (1) reiniciar el host — la GPU será usable de nuevo para un ciclo más de VM; (2) instalar el módulo DKMS vendor-reset y añadir softdep amdgpu pre: vendor-reset; (3) dentro de Windows, instalar el servicio RadeonResetBugFix.",
+ "amdResetBody": "Una causa posible es el fallo de reinicio de la GPU. Reiniciar o apagar el host puede recuperarla temporalmente. Comprueba soporte de vendor-reset y carga temprana; softdep amdgpu pre: vendor-reset no garantiza por sí solo cargar antes de VFIO. RadeonResetBugFix en Windows también requiere GPU compatible.",
"stuckBootTitle": "VM colgada arrancando / GPU no detectada",
- "stuckBootBody": "Confirma que VFIO realmente retiene la GPU al arrancar: lspci -nnk -d vendor:device debe mostrar Kernel driver in use: vfio-pci. Si aún muestra el driver del fabricante, el blacklist no surtió efecto — revisa /etc/modprobe.d/blacklist.conf y dmesg | grep vfio, y regenera initramfs: update-initramfs -u -k all y luego reinicia.",
+ "stuckBootBody": "Consulta la dirección real con lspci -nnk -s PCI_ADDRESS; espera Kernel driver in use: vfio-pci. Sustituye PCI_ADDRESS. Si sigue el driver nativo, revisa su política de vinculación, no solo /etc/modprobe.d/blacklist.conf; NVIDIA usa estado por BDF. Consulta dmesg | grep vfio. Tras corregir configuración, ejecuta update-initramfs -u -k all y sigue el plan de reinicio.",
"darkTitle": "La consola del host se queda a oscuras tras reiniciar y no puedo entrar por SSH",
- "darkBody": "Pasaste la GPU primaria sin tener acceso alternativo. Arranca en un recovery shell (ISO de rescate, IPMI), quita las líneas de la config de la VM (/etc/pve/qemu-server/<vmid>.conf) y quita las opciones vfio:",
+ "darkBody": "Una pantalla negra no prueba que el host esté caído. Si falla SSH, revisa red y controladores incluidos en el grupo IOMMU. Recupera acceso por IPMI, serie o entorno de rescate; revisa /etc/pve/qemu-server/<vmid>.conf y revierte solo asignaciones y reglas relacionadas. No borres configuración ajena.",
"logTitle": "Revisa el log de instalación",
- "logBody": "Cada ejecución escribe en /tmp/add_gpu_vm.log. Adjúntalo cuando pidas ayuda en GitHub."
+ "logBody": "Cada ejecución escribe /tmp/add_gpu_vm.log. Adjunta el registro al pedir ayuda."
},
"revert": {
- "heading": "Revertir manualmente",
- "intro": "Hoy no hay un atajo dedicado de \"quitar GPU de la VM\" en ProxMenux. Para desadjuntar limpiamente:"
+ "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. 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",
@@ -156,7 +156,7 @@
{
"label": "Instalar drivers NVIDIA (Host)",
"href": "/docs/hardware/nvidia-host",
- "tail": " — instala los drivers en el host primero si también quieres la GPU usable desde ahí."
+ "tail": " — prepara el controlador para tarjetas que sigan en el host; una GPU en VFIO no puede usarlo a la vez."
},
{
"label": "Añadir GPU a LXC",
@@ -164,9 +164,9 @@
"tail": " — modelo alternativo: comparte la GPU con varios contenedores en lugar de dedicarla a una VM."
},
{
- "label": "Switch GPU Mode (VM ↔ LXC)",
+ "label": "Cambiar modo de GPU (VM ↔ LXC)",
"href": "/docs/hardware/switch-gpu-mode",
- "tail": " — cambia la misma GPU entre modos sin rehacer todo el cableado."
+ "tail": " — cambia la misma GPU entre uso compartido y asignación exclusiva."
},
{
"label": "Comandos de GPU Passthrough",
diff --git a/web/messages/es/docs/hardware/igpu-acceleration-lxc.json b/web/messages/es/docs/hardware/igpu-acceleration-lxc.json
index b5e91c8f..c290b0b3 100644
--- a/web/messages/es/docs/hardware/igpu-acceleration-lxc.json
+++ b/web/messages/es/docs/hardware/igpu-acceleration-lxc.json
@@ -1,20 +1,20 @@
{
"meta": {
- "title": "Añadir GPU a LXC | ProxMenux Documentation",
- "description": "Comparte una GPU Intel, AMD o NVIDIA con un contenedor LXC para transcoding acelerado por hardware (Plex / Jellyfin / Frigate), cargas OpenCL / CUDA y aceleración de vídeo Mesa. ProxMenux gestiona los nodos de dispositivo, la alineación de GIDs y la instalación de drivers específica por distro dentro del contenedor."
+ "title": "Añadir GPU a LXC | Documentación de ProxMenux",
+ "description": "Comparte GPU Intel, AMD o NVIDIA con LXC. ProxMenux configura dispositivos, grupos y bibliotecas según la distribución; la aplicación debe admitir y tener configurada la aceleración."
},
"header": {
"title": "Añadir GPU a LXC",
- "description": "Comparte una o varias GPUs con un contenedor LXC de Proxmox. El host sigue usando la GPU con normalidad — el contenedor solo recibe acceso a través de los nodos de dispositivo. Funciona con iGPUs Intel (Quick Sync / VA-API), tarjetas AMD (Mesa / ROCm) y NVIDIA (CUDA / NVENC).",
- "section": "Hardware: GPUs y Coral-TPU"
+ "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: GPU y Coral-TPU"
},
"intro": {
- "title": "Qué hace esto",
- "body": "Añade entradas dev<N> a la config del LXC (/etc/pve/lxc/<ctid>.conf) para que el contenedor vea /dev/dri/*, /dev/kfd o /dev/nvidia* — lo que aplique a tu GPU. Luego arranca el contenedor, detecta la distro de dentro e instala los drivers de userspace correspondientes (Mesa, intel-media-driver, runtime NVIDIA…) para que apps como Plex, Jellyfin o Frigate usen realmente la GPU para transcoding. Los GIDs (video, render) se alinean entre host y contenedor para que los permisos coincidan."
+ "title": "Qué hace",
+ "body": "Añade entradas dev<N> a /etc/pve/lxc/<ctid>.conf para los dispositivos /dev/dri/*, /dev/kfd o /dev/nvidia* que correspondan. Arranca el LXC, instala paquetes según la distribución y, en Intel/AMD, alinea los grupos video y render. La aceleración requiere hardware y bibliotecas compatibles y configurar la app."
},
"compare": {
- "heading": "Compartición LXC vs passthrough a VM",
- "intro": "Los contenedores LXC comparten el kernel del host, así que pueden compartir la GPU del host sin apropiársela. Esa es una gran diferencia con las VMs: con lspci.",
+ "gpu": "GPU en el host Intel, AMD o NVIDIA, detectada mediante lspci.",
"gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
- "vfio": "La GPU NO está vinculada a vfio-pci. Si la GPU está actualmente asignada a una VM vía passthrough, es invisible para el driver del kernel del host y el LXC no puede usarla. El script detecta esto y se ofrece a ejecutar dev<N> en la config del LXC y, en contenedores unprivileged, alinea los GIDs de video y render entre host y contenedor para que los nodos de la GPU sean accesibles desde dentro sin tener que tocar manualmente lxc.idmap."
},
"running": {
"heading": "Ejecutar el instalador",
- "body": "Abre ProxMenux en el host, ve a Hardware: GPUs and Coral-TPU → Add GPU to LXC.",
- "imageAlt": "Entrada del menú 'Add GPU to LXC' dentro de Hardware: GPUs and Coral-TPU"
+ "body": "Abre ProxMenux y ve a Hardware: GPU y Coral-TPU → Añadir GPU a LXC.",
+ "imageAlt": "Opción del menú para añadir GPU a LXC"
},
"howRuns": {
- "heading": "Cómo se ejecuta el script",
- "body": "Dos fases: todas las decisiones por adelantado, luego todos los cambios de una vez. No se toca nada en tu contenedor hasta que confirmas."
+ "heading": "Cómo funciona el script",
+ "body": "Selecciona contenedor y familias de GPU y supera las comprobaciones. Después detiene el LXC y cambia su configuración, sin confirmación final adicional. La limpieza opcional de VFIO se confirma aparte y puede modificar antes el host."
},
"walkthrough": {
- "heading": "Recorriendo el flujo",
+ "heading": "Proceso paso a paso",
"detect": {
"title": "Detectar GPUs del host",
- "body": "El script escanea lspci buscando controladoras VGA / 3D / Display que coincidan con Intel, AMD o NVIDIA. Para NVIDIA también verifica que el módulo de kernel nvidia esté cargado y que nvidia-smi funcione — la versión del driver del host que reporta se usará para elegir el instalador .run correcto para el contenedor.",
+ "body": "Busca controladoras GPU con lspci. Para NVIDIA comprueba el módulo nvidia y nvidia-smi; usa la versión detectada para elegir el .run del contenedor.",
"tipTitle": "¿NVIDIA no está listo?",
- "tipBody": "Si NVIDIA se detecta pero el módulo no está cargado, el script no ofrecerá la ruta NVIDIA. Ejecuta /dev/dri/* o /dev/nvidia* para ella. El script se ofrece a ejecutar /dev/dri/* o /dev/nvidia*. Ofrece /etc/pve/lxc/<ctid>.conf y añade entradas dev<N> con los GIDs correctos para las GPUs seleccionadas. Usar entradas dev: (en lugar de las viejas líneas lxc.mount.entry) es la forma moderna de Proxmox — los permisos de grupo se aplican en tiempo de parseo de la config en lugar de en tiempo de mount.",
+ "body1": "Detiene el LXC si está en marcha y edita /etc/pve/lxc/<ctid>.conf. Las entradas dev<N> llevan el GID video o render del host. Sustituye las líneas lxc.mount.entry de /dev/dri por entradas dev:. Revisa configuración y permisos resultantes.",
"body2": "Ejemplo después de Intel + NVIDIA en el mismo contenedor:"
},
"installDrivers": {
"title": "Arranca el contenedor e instala los drivers dentro",
- "body": "Una vez escrita la config, el script arranca el contenedor, espera hasta ~30 segundos a que pct exec responda y luego detecta la distro del contenedor desde /etc/os-release. En base a eso, instala los paquetes userspace correctos.",
- "headerDistro": "Distro",
+ "body": "Arranca el contenedor y espera hasta unos 30 segundos a que responda pct exec. Detecta la distribución con /etc/os-release e instala los paquetes correspondientes.",
+ "headerDistro": "Distribución",
"headerInt": "Intel / AMD",
"headerNvidia": "NVIDIA",
"rows": [
@@ -121,41 +121,41 @@
],
"debianDistro": "Debian / Ubuntu / otras",
"debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo",
- "debianNvidia": "extraer el .run del host → pct push → ejecutar con --no-kernel-modules --no-dkms",
- "whyTitle": "Por qué el baile del .run de NVIDIA en Debian",
- "whyBody": "Debian / Ubuntu no traen paquetes NVIDIA con una versión lo bastante granular como para coincidir con el driver del host byte por byte. Las libs userspace dentro del contenedor deben coincidir con la versión del módulo de kernel cargado en el host, o nvidia-smi falla con un version mismatch. ProxMenux lo resuelve usando exactamente el mismo instalador .run que se usó para el host — extraído, tarred, enviado al contenedor con pct push y ejecutado con --no-kernel-modules --no-dkms para que solo se toque el userspace."
+ "debianNvidia": "Extrae .run en el host → pct push → instala con --no-kernel-modules --no-dkms.",
+ "whyTitle": "Por qué usa el instalador NVIDIA .run en Debian",
+ "whyBody": "Los paquetes del repositorio pueden no coincidir con el host. Las bibliotecas deben coincidir con el módulo cargado para herramientas NVML como nvidia-smi. En Debian/glibc extrae y comprime en el host el .run de esa versión, lo transfiere con pct push e instala con --no-kernel-modules --no-dkms. Alpine y Arch usan paquetes: verifica sus versiones."
},
"alignGids": {
"title": "Alinear GIDs y restaurar el estado",
- "body1": "Los archivos de dispositivo en el host pertenecen al grupo video (GID 44) o render (GID 104). La distro del contenedor puede traer números de GID distintos para esos grupos, lo que haría que los nodos de la GPU fueran inalcanzables desde dentro. El script reescribe /etc/group en el contenedor para que video:44 y render:104 coincidan exactamente.",
- "body2": "Finalmente, restaura el contenedor a su estado original — si estaba parado cuando empezaste, se vuelve a parar. Si estaba en ejecución, se queda en ejecución."
+ "body1": "En Intel/AMD, lee los GID del host para video y render; usa 44/104 solo como alternativa. Ajusta /etc/group dentro del LXC; si solo hay NVIDIA, omite este paso. video:44 y render:104 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 específicas del fabricante",
+ "heading": "Notas por fabricante",
"intelHeading": "iGPU Intel",
- "intelBody": "La ruta más común — ideal para transcoding por hardware de Plex / Jellyfin / Frigate vía Quick Sync. El contenedor recibe /dev/dri/card0 (legacy) y /dev/dri/renderD128 (nodo render-only moderno — lo que las apps usan realmente). No hace falta cambios del lado del host; el driver i915 del host ya creó los nodos.",
+ "intelBody": "La aceleración Intel, incluido Quick Sync, depende de generación, códecs y configuración de la app. Comparte los nodos que existan entre /dev/dri/card0, card1, renderD128 y renderD129; no añade otros números. Debe crearlos antes el controlador nativo del host, como i915.",
"amdHeading": "AMD",
- "amdBody": "Los mismos nodos DRI que Intel para gráficos / VA-API. Si /dev/kfd existe en el host (soporte de cómputo AMD / kernel ROCm), el script también lo añade para que los contenedores puedan hacer cargas OpenCL / ROCm. Los drivers VA de Mesa cubren el lado de decodificación de vídeo.",
+ "amdBody": "AMD usa DRI para Mesa/VA-API. Si existe /dev/kfd 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",
- "nvidiaBody": "Añade cada nodo /dev/nvidia* que el host expone. La pieza crítica es el matching de versión de driver: la versión del módulo del host y la versión de la lib userspace del contenedor deben ser idénticas, si no nvidia-smi dentro del contenedor falla. ProxMenux captura la versión del host en tiempo de detección y usa el mismo archivo .run para instalar el userspace del contenedor. Para contenedores Debian, la instalación sube la memoria del contenedor a 2 GB temporalmente (el instalador necesita ~1.5 GB libres para extraer) y la restaura después.",
- "updateTitle": "Después de actualizar el driver NVIDIA del host, vuelve a ejecutar este script",
- "updateBody": "Cuando actualizas el driver NVIDIA en el host, las libs userspace del contenedor se quedan en la versión vieja y nvidia-smi dentro del contenedor se rompe. El /dev/nvidia* disponibles. Coincidir la versión del controlador es esencial para nvidia-smi. Debian/glibc usa el .run de la versión del host; Alpine/Arch, repositorios. Con menos de 2048 MiB de RAM configurada, la ruta Debian ofrece aumentarla temporalmente y restaurarla; exige 1500 MiB libres en disco.",
+ "updateTitle": "Tras actualizar NVIDIA en el host, comprueba las bibliotecas LXC",
+ "updateBody": "Bibliotecas antiguas pueden provocar incompatibilidad en nvidia-smi. El .run actual del host y reinstala el userspace haciéndolo coincidir.",
+ "mismatchBody": "Las bibliotecas no coinciden con el módulo activo. Verifica versiones y actualiza el espacio de usuario del LXC. El .run almacenado sirve para Debian/glibc, pero Añadir GPU a LXC puede salir si ya están todos los dispositivos.",
"denyTitle": "Permission denied en /dev/dri/renderD128 dentro del contenedor",
- "denyBody": "Normalmente uno de: (1) el contenedor es unprivileged sin mapeo UID/GID al grupo render del host; (2) el usuario dentro del contenedor no está en el grupo render. Fix: añade el usuario a render dentro del contenedor (usermod -aG render <user>), o pasa a modo privilegiado si la carga es de confianza.",
+ "denyBody": "Revisa dispositivo y permisos numéricos de render; comprueba que el usuario de la app pertenezca a render. Si está disponible, añádelo a render con usermod -aG render <user>, sustituyendo el marcador por la cuenta real. Reinicia su sesión. Cambiar privilegios no es una solución general.",
"vainfoTitle": "vainfo dice: VA-API version 1.xx; failed to initialize",
- "vainfoBody": "El runtime de VA-API está, pero no se instaló ningún driver adecuado. En Intel, instala intel-media-driver (gens nuevas) o i965-va-driver (gens viejas). En AMD, mesa-va-drivers. Vuelve a ejecutar el script en caso de duda.",
- "logTitle": "Log de instalación",
- "logBody": "Cada ejecución escribe en /tmp/add_gpu_lxc.log en el host. Inclúyelo cuando pidas ayuda en GitHub."
+ "vainfoBody": "Comprueba acceso y controlador VA-API. Los paquetes varían por distribución: ejemplos son intel-media-driver para Intel modernas compatibles, i965-va-driver para antiguas compatibles y mesa-va-drivers para AMD. El mensaje no prueba por sí solo que falte un paquete.",
+ "logTitle": "Registro de instalación",
+ "logBody": "Cada ejecución escribe /tmp/add_gpu_lxc.log en el host. Adjunta el registro al pedir ayuda."
},
"related": {
"heading": "Relacionado",
@@ -163,17 +163,17 @@
{
"label": "Instalar drivers NVIDIA (Host)",
"href": "/docs/hardware/nvidia-host",
- "tail": " — prerequisito necesario para GPUs NVIDIA antes de pasarlas a un contenedor."
+ "tail": " — instala primero el controlador del host para compartir NVIDIA."
},
{
"label": "Añadir GPU a VM (Passthrough)",
"href": "/docs/hardware/gpu-vm-passthrough",
- "tail": " — modelo alternativo cuando necesitas la GPU dedicada a una sola VM."
+ "tail": " — alternativa para dedicar una GPU a una VM."
},
{
- "label": "Switch GPU Mode (VM ↔ LXC)",
+ "label": "Cambiar modo de GPU (VM ↔ LXC)",
"href": "/docs/hardware/switch-gpu-mode",
- "tail": " — alterna la misma GPU entre compartición LXC y passthrough a VM."
+ "tail": " — cambia la GPU entre compartir con LXC y asignar a VM."
},
{
"label": "Comandos de GPU Passthrough",
diff --git a/web/messages/es/docs/hardware/install-coral-tpu-host.json b/web/messages/es/docs/hardware/install-coral-tpu-host.json
index d61e8fee..afd64935 100644
--- a/web/messages/es/docs/hardware/install-coral-tpu-host.json
+++ b/web/messages/es/docs/hardware/install-coral-tpu-host.json
@@ -1,164 +1,164 @@
{
"meta": {
- "title": "Instalar Coral TPU en el host | ProxMenux Documentation",
- "description": "Instala los drivers de Google Coral TPU en un host Proxmox VE. ProxMenux autodetecta si tienes M.2 / Mini-PCIe o el USB Accelerator (o ambos) y ejecuta solo la ruta de instalación que aplica — módulos de kernel gasket/apex vía DKMS para PCIe, runtime libedgetpu1-std para USB."
+ "title": "Instalar Coral TPU en el host | Documentación de ProxMenux",
+ "description": "Instala componentes Coral en Proxmox VE según el hardware detectado: módulos gasket/apex con DKMS para M.2 / Mini-PCIe y runtime libedgetpu1-std para USB. Si detecta ambos, ejecuta los dos procesos."
},
"header": {
"title": "Instalar Coral TPU en el host",
- "description": "Prepara el host Proxmox para que más adelante se pueda pasar una Coral TPU a un contenedor LXC. ProxMenux autodetecta si tienes una tarjeta M.2 / Mini-PCIe, un USB Accelerator, o ambos, y ejecuta solo la ruta de instalación que aplica — build del módulo de kernel vía DKMS para PCIe, runtime Edge TPU de Google para USB.",
- "section": "Hardware: GPUs y Coral-TPU"
+ "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: GPU y Coral-TPU"
},
"intro": {
- "title": "Qué hace esto",
- "body": "El instalador de Coral es unificado y consciente del hardware: ejecutas una opción del menú y averigua qué tienes realmente. Las tarjetas M.2 / Mini-PCIe necesitan módulos de kernel (gasket + apex) construidos con DKMS para que sobrevivan a las actualizaciones de kernel. Los USB Accelerators solo necesitan el runtime Edge TPU de Google (libedgetpu1-std) desde el propio repositorio APT de Google. ¿Ambos tipos enchufados? Ambas rutas se ejecutan en secuencia."
+ "title": "Qué hace",
+ "body": "Un instalador único que detecta el hardware. PCIe usa gasket y apex con DKMS; futuras compilaciones requieren fuentes y cabeceras compatibles. USB usa libedgetpu1-std. Si detecta ambos, ejecuta ambos procesos. El runtime USB debe estar donde corre la app; si solo corre en LXC, no es obligatorio tenerlo también en el host."
},
"which": {
"heading": "¿Qué Coral tengo?",
- "body": "Los dos tipos de dispositivos Coral que puedes enchufar en un host Proxmox se ven muy diferentes y la instalación del lado del host también es muy diferente. El script gestiona ambos, pero conviene saber qué tienes antes de ejecutar nada:",
+ "body": "Los modelos PCIe y USB tienen formatos y requisitos distintos. El script gestiona ambos; identifica tu dispositivo antes de ejecutarlo.",
"headerForm": "Factor de forma",
"headerDetect": "Detección",
"headerInstall": "Tipo de instalación",
"headerReboot": "¿Reiniciar?",
"pcieForm": "M.2 / Mini-PCIe",
- "pcieFormSub": "(TPU dual-edge en una tarjeta M.2)",
- "pcieDetect": "PCI vendor 1ac1",
+ "pcieFormSub": "(hay tarjetas M.2 con una o dos Edge TPU)",
+ "pcieDetect": "ID de fabricante PCI 1ac1",
"pcieInstall": "Módulo de kernel (gasket + apex) vía DKMS",
"pcieReboot": "Sí",
- "usbForm": "USB Accelerator",
+ "usbForm": "Acelerador USB",
"usbFormSub": "(pequeño dongle de plástico)",
"usbDetect": "USB 1a6e:089a (sin programar) / 18d1:9302 (programado)",
- "usbInstall": "Runtime userspace (libedgetpu1-std) desde el repo APT de Google",
+ "usbInstall": "Runtime libedgetpu1-std del repositorio APT de Google",
"usbReboot": "No"
},
"prereqs": {
"title": "Antes de empezar",
- "coral": "Una Coral TPU enchufada en el host (M.2, Mini-PCIe o USB). Sin Coral no hay instalación — el script simplemente te dice que no se detectó nada y sale.",
+ "coral": "Una Coral conectada (M.2, Mini-PCIe o USB) para instalar. Sin hardware detectado puede ofrecer limpiar o desinstalar componentes existentes, pero no instala una nueva ruta de hardware.",
"coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
- "internet": "Acceso a internet en el host — para PCIe la ruta DKMS clona un repo de GitHub, para USB añade un repo APT de Google y descarga el paquete libedgetpu1-std.",
- "headers": "Headers del kernel disponibles vía APT. En Proxmox esto significa que proxmox-headers-$(uname -r) debe ser instalable — solo necesario para la ruta PCIe/M.2, pero el script lo trae automáticamente para que tú no tengas que hacerlo.",
- "reboot": "Asume un reinicio si tienes hardware PCIe. El módulo de kernel se construye y se carga al final, pero un arranque limpio es la forma limpia de confirmar que sale por sí solo."
+ "internet": "Acceso a Internet en el host para clonar el controlador PCIe de GitHub o descargar libedgetpu1-std del repositorio APT de Google para USB.",
+ "headers": "Cabeceras del kernel disponibles en APT: proxmox-headers-$(uname -r). Solo las necesita PCIe/M.2; el script las instala.",
+ "reboot": "Planifica un reinicio para PCIe. El script intenta cargar los módulos compilados; reiniciar permite comprobar que se cargan automáticamente."
},
"hostPrepTip": {
"title": "Esto solo prepara el host",
- "body": "Instalar Coral aquí deja el host listo — la TPU es visible para el kernel del host y se puede entregar a un LXC. Para usarla realmente desde un contenedor (Frigate, DeepStack, etc.), el siguiente paso es /sys/bus/pci/devices/*/vendor buscando 0x1ac1 (Global Unichip Corp., el fabricante del silicio de los chips Coral TPU) y ejecuta lsusb buscando los IDs del USB Accelerator. El dispositivo USB tiene dos IDs según si su firmware ya se ha cargado:",
+ "body": "Busca el fabricante 0x1ac1 en /sys/bus/pci/devices/*/vendor y usa lsusb para detectar USB. Hay dos ID USB, según se haya cargado el firmware:",
"items": [
- "1a6e:089a — Global Unichip, estado sin programar (antes de que el runtime Edge TPU le hable por primera vez).",
- "18d1:9302 — Google, estado programado (después de que el runtime le cargue firmware)."
+ "1a6e:089a — Global Unichip, estado sin programar, antes de que el runtime cargue el firmware.",
+ "18d1:9302 — Google, estado programado, tras cargar el firmware."
],
- "outro": "Si no se encuentra ninguno, recibes un diálogo informativo y el script sale limpiamente — sin cambios parciales en el host."
+ "outro": "Si no detecta Coral ni una instalación previa, muestra un aviso y sale. Si hay componentes existentes, puede ofrecer limpiarlos o desinstalarlos."
},
"prompt": {
- "title": "Prompt previo a la instalación",
- "body": "Antes de tocar nada, un único diálogo resume lo que se detectó y lo que se instalará. Puedes cancelar aquí sin ningún efecto secundario.",
- "imageAlt": "Diálogo previo a la instalación mostrando el hardware Coral detectado (cuenta de M.2/PCIe + cuenta de USB) y la lista de pasos que ejecutará el instalador"
+ "title": "Confirmación de la instalación",
+ "body": "Antes de instalar, un diálogo resume los dispositivos y componentes previstos. Cancelar omite la instalación. La limpieza opcional de componentes antiguos tiene una confirmación anterior independiente.",
+ "imageAlt": "Resumen de dispositivos Coral y pasos de instalación"
},
"pcie": {
- "title": "Ruta PCIe — módulos de kernel gasket + apex vía DKMS",
- "body": "Solo se ejecuta si el script encontró una Coral PCIe / M.2. Es la más pesada de las dos rutas porque está compilando un módulo de kernel para tu kernel en ejecución exacto.",
+ "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": [
- "Limpieza. Si una instalación anterior de gasket-dkms dejó dpkg en un estado roto (típico tras una actualización de kernel PVE 9 donde el autoinstall de DKMS falló silenciosamente), force-purge.",
- "Instalar dependencias de build: git, dkms, build-essential, proxmox-headers-$(uname -r)."
+ "Limpieza. Elimina cualquier paquete gasket-dkms existente antes de compilar; si está en mal estado, fuerza su eliminación y lo purga.",
+ "Dependencias de compilación: git, dkms, build-essential, proxmox-headers-$(uname -r)."
],
- "cloneIntro": "Clonar el código del driver. Prefiere el fork de la comunidad no_llseek eliminado en upstream → sustitución por noop_llseek",
- "Kernel 6.13+ : MODULE_IMPORT_NS(DMA_BUF) requiere literal de string"
+ "Para kernel 6.5 o superior, sustituye no_llseek por noop_llseek en el código alternativo.",
+ "Kernel 6.13 o superior: convierte el argumento de MODULE_IMPORT_NS(DMA_BUF) en una cadena literal."
],
"afterItems": [
- "Stage del código en /usr/src/gasket-1.0/, generar dkms.conf, registrar con dkms add.",
- "Build + install: dkms build y luego dkms install. Si algo falla, las últimas 50 líneas de make.log se imprimen en el terminal para que veas el error real — sin tener que cazar en archivos de log.",
- "Crear el grupo apex + reglas udev (/etc/udev/rules.d/99-coral-apex.rules) para que los nodos /dev/apex_* tengan el grupo correcto en el siguiente arranque.",
- "Cargar los módulos: modprobe gasket + modprobe apex."
+ "Copia las fuentes a /usr/src/gasket-1.0/, genera dkms.conf y las registra con dkms add.",
+ "Compila e instala: dkms build y después dkms install. Si falla, muestra las últimas 50 líneas de make.log si existe.",
+ "Crea el grupo apex y reglas udev (/etc/udev/rules.d/99-coral-apex.rules) para asignar el grupo a /dev/apex_*.",
+ "Intenta cargar los módulos: modprobe gasket y modprobe apex."
],
- "imageAlt": "Progreso de build DKMS + salida de carga de módulo para los módulos de kernel gasket/apex"
+ "imageAlt": "Compilación DKMS y carga de módulos gasket/apex"
},
"usb": {
- "title": "Ruta USB — runtime Edge TPU de Google",
+ "title": "USB: runtime Edge TPU de Google",
"body": "Solo se ejecuta si se detectó un USB Accelerator. Mucho más simple:",
"items": [
- "Añadir la clave GPG de Google a /etc/apt/keyrings/coral-edgetpu.gpg.",
- "Añadir el repositorio APT a /etc/apt/sources.list.d/coral-edgetpu.list con signed-by= apuntando al keyring (formato moderno, no deprecado).",
- "Instalar libedgetpu1-std — el runtime Edge TPU de rendimiento estándar.",
- "Recargar udev para que las reglas que vienen con el paquete apliquen al dispositivo USB sin tener que desenchufar/reenchufar."
+ "Añade la clave GPG de Google a /etc/apt/keyrings/coral-edgetpu.gpg.",
+ "Añade el repositorio APT en /etc/apt/sources.list.d/coral-edgetpu.list; signed-by= limita la verificación a su llavero. Usa sintaxis .list de una línea, no .sources de deb822.",
+ "Instala libedgetpu1-std, el runtime Edge TPU de rendimiento estándar.",
+ "Recarga udev y activa las reglas del paquete sobre el dispositivo USB."
],
"stdTitle": "¿Por qué libedgetpu1-std y no libedgetpu1-max?",
- "stdBody": "La variante max overclockea la Coral y calienta más. Está bien para uso de desktop con ventilación; no recomendado en builds NUC / Mini-PC pequeños o hosts Proxmox refrigerados pasivamente. Si realmente la quieres, instálala a mano después: apt install libedgetpu1-max."
+ "stdBody": "El paquete max activa la máxima frecuencia admitida, con más rendimiento, consumo y calor. Comprueba la refrigeración y condiciones del acelerador antes de cambiar. Los paquetes son excluyentes; cambia con apt install libedgetpu1-max."
},
"reboot": {
- "title": "Prompt de reinicio (solo si se ejecutó PCIe)",
- "body": "Si la ruta PCIe se ejecutó, el script ofrece un reinicio. Los módulos ya se modprobe'aron así que en teoría puedes saltarte el reinicio — pero un arranque limpio es la forma correcta de verificar que el módulo sale por sí solo y que /dev/apex_0 aparece con grupo apex. Para instalaciones solo USB, no se sugiere reinicio (el runtime y las reglas udev están activos inmediatamente).",
- "imageAlt": "Resumen final + prompt de reinicio después de una instalación PCIe"
+ "title": "Reinicio opcional tras la instalación PCIe",
+ "body": "Tras PCIe ofrece reiniciar. Ya ha intentado modprobe, pero comprueba que carga los módulos y que /dev/apex_0 aparece con grupo apex. Un reinicio planificado verifica la carga automática. Con solo USB no pide reiniciar el host.",
+ "imageAlt": "Resumen y propuesta de reinicio tras instalar PCIe"
}
},
"legacyCleanup": {
- "heading": "Limpieza de gasket-dkms antiguo en hosts con Coral USB",
- "intro": "Si el host no tiene ninguna Coral PCIe / M.2 detectada, pero conserva una instalación anterior de gasket-dkms, ProxMenux identifica ese estado por separado y ofrece una limpieza opcional. No se elimina nada sin confirmación.",
+ "heading": "Limpiar gasket-dkms antiguo en hosts que solo usan USB",
+ "intro": "Si no detecta Coral PCIe/M.2 pero existe una instalación anterior de gasket-dkms, ofrece una limpieza opcional. Requiere confirmación.",
"items": [
- "Si hay una Coral PCIe / M.2 presente, esta limpieza nunca se ofrece; se utiliza la ruta normal de reconstrucción DKMS.",
- "La limpieza purga gasket-dkms, elimina registros DKMS y árboles de código gasket residuales, y repara cualquier estado pendiente de dpkg o APT.",
- "Los paquetes del runtime USB libedgetpu1-std y libedgetpu1-max no se modifican, por lo que una Coral USB conserva su runtime.",
+ "Si detecta una Coral PCIe/M.2, usa la ruta normal de recompilación DKMS y no ofrece esta limpieza.",
+ "Purga gasket-dkms, elimina registros DKMS y fuentes obsoletas de gasket y repara el estado pendiente de dpkg/APT.",
+ "Conserva los paquetes USB libedgetpu1-std y libedgetpu1-max, por lo que la Coral USB mantiene su runtime.",
"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 puede haber una Coral PCIe / M.2 instalada pero no está siendo detectada, cancela la limpieza y comprueba la tarjeta, la ranura y la configuración del firmware antes de continuar."
+ "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",
- "intro": "Ejecutar el instalador en un host donde Coral ya está instalada (PCIe vía gasket-dkms, USB vía libedgetpu1-std/libedgetpu1-max, o ambos) ya no cae directamente en otra instalación fresca. En su lugar, ProxMenux detecta el setup existente y muestra un menú de acciones para que decidas qué hacer.",
- "imageAlt": "Menú de acciones de Coral con dos opciones — Reinstalar / actualizar drivers Coral, o Desinstalar drivers y configuración Coral — mostrado cuando el instalador detecta una instalación previa de Coral en el host",
- "imageCaption": "El menú de acciones solo aparece cuando al menos un componente de Coral está ya instalado (entrada DKMS de gasket, paquete libedgetpu1-* o nodos de dispositivo /dev/apex_* en vivo).",
+ "intro": "Si detecta una instalación PCIe con gasket-dkms, USB con libedgetpu1-std/libedgetpu1-max o ambas, muestra un menú para elegir la acción.",
+ "imageAlt": "Menú para reinstalar, actualizar o desinstalar Coral",
+ "imageCaption": "El menú aparece si existe algún componente: un registro DKMS gasket, un paquete libedgetpu1-* o dispositivos /dev/apex_*.",
"reinstallHeading": "Reinstalar / actualizar",
- "reinstallBody": "Continúa con el flujo normal de instalación — útil después de una actualización de kernel si la rebuild DKMS no ocurrió automáticamente, o para elevar el runtime a un libedgetpu1-* más nuevo del repo apt de Google Coral. Primero se limpia el estado DKMS anterior para que un paquete medio instalado de un intento previo fallido no bloquee el nuevo build.",
+ "reinstallBody": "Ejecuta la instalación normal: recompila tras cambiar de kernel o actualiza libedgetpu1-* desde Google. Antes limpia el estado DKMS anterior para evitar que una instalación fallida bloquee la compilación.",
"uninstallHeading": "Desinstalar — qué se elimina",
- "uninstallIntro": "Confirma con un diálogo sí/no antes de hacer nada (los contenedores LXC con passthrough de apex perderán acceso a /dev/apex_* después del siguiente reinicio — el aviso lo deja claro). Luego ejecuta un rollback completo e idempotente:",
+ "uninstallIntro": "Requiere confirmación. Las apps LXC que usan /dev/apex_* pueden perder acceso durante la desinstalación o tras reiniciar. El proceso es:",
"uninstallItems": [
- "Descarga los módulos de kernel apex y gasket.",
- "Quita cada entrada gasket/<version> registrada en DKMS para que los módulos no vuelvan en la siguiente instalación de kernel.",
- "Purga los paquetes apt gasket-dkms, libedgetpu1-std y libedgetpu1-max, luego ejecuta apt-get autoremove --purge.",
- "Borra la regla udev /etc/udev/rules.d/99-coral-apex.rules que escribió ProxMenux; restaura el grupo de la regla upstream 60-gasket-dkms.rules a su default si sigue presente.",
- "Elimina el grupo de sistema apex solo si ya no hay usuarios en él — si mapeaste un usuario custom a apex para un passthrough a LXC, el grupo se deja en su sitio y un aviso imprime los miembros actuales.",
- "Limpia la entrada del repositorio apt de Google Coral y el keyring (/etc/apt/sources.list.d/coral-edgetpu.list + coral-edgetpu-archive-keyring.gpg).",
- "Pide reiniciar al final solo si se instaló la ruta PCIe — la forma más limpia de descargar los módulos del kernel. Las desinstalaciones solo USB no lo necesitan."
+ "Intenta descargar apex y gasket; si están en uso pueden permanecer cargados.",
+ "Elimina cada entrada gasket/<version> registrada en DKMS para que los módulos no vuelvan en la siguiente instalación de kernel.",
+ "Purga gasket-dkms, libedgetpu1-std y libedgetpu1-max y ejecuta apt-get autoremove --purge.",
+ "Elimina /etc/udev/rules.d/99-coral-apex.rules y restaura el grupo predeterminado de 60-gasket-dkms.rules si aún existe.",
+ "Consulta los miembros secundarios de apex. Si la lista está vacía, intenta eliminar el grupo; si no, conserva apex y muestra sus miembros. No comprueba por completo los usuarios que lo tienen como grupo principal.",
+ "Elimina la lista del repositorio /etc/apt/sources.list.d/coral-edgetpu.list, la antigua coral-cloud.list y los llaveros antiguos llamados coral-edgetpu-archive-keyring.gpg. Este proceso no elimina el llavero actual /etc/apt/keyrings/coral-edgetpu.gpg.",
+ "Ofrece reiniciar solo si estaba instalado PCIe para descargar los módulos que sigan activos. Desinstalar solo USB no requiere reinicio."
],
"lxcWarnTitle": "Contenedores LXC con passthrough de apex",
- "lxcWarnBody": "Desinstalar en el host invalida la ruta de dispositivo mapeada a cualquier contenedor LXC configurado para passthrough de apex. Planifica la operación en una ventana de mantenimiento si Frigate / DeepStack / cargas similares dependen de ello."
+ "lxcWarnBody": "Desinstalar los componentes del host puede romper el acceso desde LXC. Planifica mantenimiento si aplicaciones compatibles como Frigate dependen de esta Coral."
},
"updates": {
- "heading": "Notificaciones de actualización",
- "intro": "ProxMenux ahora rastrea los componentes Coral instalados en su registro de instalaciones gestionadas. Ambas variantes se siguen de forma independiente — un host con dispositivos Coral M.2 y USB recibe dos streams de actualización, cada uno con su propia fuente upstream:",
+ "heading": "Avisos de actualización",
+ "intro": "ProxMenux registra los componentes Coral instalados y comprueba PCIe/M.2 y USB por separado. Si tienes ambos, cada variante usa su propia fuente de versiones:",
"headerVariant": "Variante",
- "headerTracked": "Versión rastreada",
- "headerUpstream": "Fuente upstream",
+ "headerTracked": "Versión registrada",
+ "headerUpstream": "Fuente de versiones",
"pcieVariant": "PCIe / M.2",
- "pcieTracked": "Versión Debian de gasket-dkms (o la versión registrada en DKMS si el paquete se quitó a la fuerza)",
- "pcieUpstream": "Último tag de feranick/gasket-driver en GitHub (caché de 7 días, comparación por número de build)",
+ "pcieTracked": "Primero la etiqueta registrada tras instalar; después la versión de gasket-dkms si el paquete está bien; como alternativa, la versión DKMS. Esta última no identifica los parches del fork.",
+ "pcieUpstream": "Última etiqueta de feranick/gasket-driver en GitHub; caché de siete días y comparación del número de compilación.",
"usbVariant": "USB",
"usbTracked": "Versión apt de libedgetpu1-std o libedgetpu1-max",
"usbUpstream": "Candidato local de apt-cache policy (repo apt de Google Coral)",
- "outro": "Cuando se detecta una versión más nueva el Monitor dispara una notificación coral_driver_update_available en cada canal habilitado (Telegram, Discord, Gotify, ntfy, email, webhook). La notificación apunta de vuelta a la misma entrada del instalador — elige Reinstall / update del menú de acciones de arriba para aplicarla.",
- "antiTitle": "Anti-cascada por diseño",
- "antiBody": "Una notificación por variante, solo cuando la versión upstream cambia realmente — nunca en cada escaneo de 24h. Si ignoras una actualización no te vuelve a pingar hasta que llegue una release más nueva.",
- "rebootTitle": "El reinicio solo hace falta para la ruta PCIe",
- "rebootBody": "La rebuild DKMS de gasket carga nuevos módulos de kernel — eso necesita un reinicio para estar activo. La actualización del runtime USB es un swap de librería userspace, sin reinicio."
+ "outro": "Si detecta una versión nueva, Monitor emite coral_driver_update_available por los canales habilitados. El aviso lleva al instalador: elige Reinstalar / actualizar para aplicarla.",
+ "antiTitle": "Sin avisos repetidos",
+ "antiBody": "Un aviso por variante cuando cambia la versión disponible. No lo repite en cada revisión diaria; vuelve a avisar cuando aparece una versión posterior.",
+ "rebootTitle": "Actualizaciones PCIe: planifica un reinicio",
+ "rebootBody": "El módulo PCIe recompilado debe cargarse para usarlo; reiniciar comprueba también su carga automática. Actualizar la biblioteca USB no requiere reiniciar el host, pero puede requerir reiniciar las apps que usaban la anterior."
},
"manual": {
"heading": "Equivalente manual",
- "intro": "Si quieres saber qué pasa bajo el capó, o rehacer un paso individual a mano, los comandos crudos por ruta se ven así.",
+ "intro": "Estos comandos muestran los pasos principales de cada ruta para consultarlos o ejecutarlos manualmente.",
"pcieHeading": "PCIe / M.2 (gasket + apex vía DKMS)",
"usbHeading": "USB (runtime libedgetpu)"
},
@@ -169,16 +169,16 @@
},
"troubleshoot": {
"heading": "Solución de problemas",
- "dkmsFailTitle": "La build DKMS falla después de una actualización de kernel",
- "dkmsFailBody": "Causa más común en PVE 9: el kernel en ejecución subió pero proxmox-headers-$(uname -r) aún no está instalado para él. Comprueba con dpkg -l proxmox-headers-$(uname -r). Instala los headers que faltan y vuelve a ejecutar el script — el paso cleanup_broken_gasket_dkms de ProxMenux gestiona cualquier estado residual de paquete medio configurado.",
+ "dkmsFailTitle": "Falla la compilación DKMS tras actualizar el kernel",
+ "dkmsFailBody": "Una causa posible son cabeceras ausentes. Comprueba proxmox-headers-$(uname -r) con dpkg -l proxmox-headers-$(uname -r). Instálalas si faltan y revisa incompatibilidades en el registro. Al repetir ejecuta cleanup_broken_gasket_dkms, pero limpiar no garantiza compatibilidad con cualquier kernel.",
"apexMissTitle": "/dev/apex_0 no está después del reinicio",
- "apexMissBody": "El módulo no está cargado. Prueba modprobe apex a mano. Si eso da error, comprueba dmesg | grep -iE \"apex|gasket\" para el fallo real — culpables comunes son version mismatch del kernel (DKMS se construyó para un kernel distinto del que arrancaste) o una actualización de firmware que deshabilitó el slot PCIe en el que está la Coral.",
- "lxcMissTitle": "Puedo ver /dev/apex_0 pero el LXC no",
- "lxcMissBody": "El host está bien. El problema es la config de passthrough — consulta modprobe apex y consulta dmesg | grep -iE \"apex|gasket\". 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 libedgetpu1-std surtieron efecto: ls -l /dev/bus/usb/*/*. El dispositivo NO debería ser propiedad de root:root con modo 0600 — si lo es, ejecuta udevadm control --reload-rules && udevadm trigger en el host, desenchufa la Coral USB, espera 3 segundos y vuelve a enchufarla.",
- "logTitle": "Log de instalación",
- "logBody": "Cada ejecución escribe en /tmp/coral_install.log en el host. Si la build DKMS muere, el script también añade las últimas 50 líneas de /var/lib/dkms/gasket/1.0/build/make.log a ese log — adjúntalo cuando pidas ayuda en GitHub."
+ "usbUnreachBody": "Revisa las reglas de libedgetpu1-std y permisos con ls -l /dev/bus/usb/*/*. El UID/GID de la app debe tener lectura y escritura; ser propiedad de root no basta para diagnosticar el fallo. Tras cambiar reglas, ejecuta udevadm control --reload-rules && udevadm trigger y reconecta si hace falta.",
+ "logTitle": "Registro de instalación",
+ "logBody": "Cada ejecución escribe /tmp/coral_install.log. Si falla DKMS y existe el registro, añade sus últimas 50 líneas desde /var/lib/dkms/gasket/1.0/build/make.log. Adjunta el registro al pedir ayuda."
},
"related": {
"heading": "Relacionado",
@@ -186,7 +186,7 @@
{
"label": "Añadir Coral TPU a LXC",
"href": "/docs/hardware/coral-tpu-lxc",
- "tail": " — pasar el dispositivo Coral del host a un contenedor (Frigate, CodeProject.AI…)."
+ "tail": " — pasar Coral del host a un contenedor con una app compatible."
},
{
"label": "Instalar drivers NVIDIA (Host)",
@@ -196,7 +196,7 @@
{
"label": "ProxMenux Monitor — pestaña Hardware",
"href": "/docs/monitor/dashboard/hardware",
- "tail": " — el modal de Coral que muestra driver, módulos, nodos de dispositivo, estado del runtime y temperatura en vivo una vez hecha la instalación en el host."
+ "tail": " — el panel Coral muestra controlador, módulos, dispositivos y runtime; también temperatura si hay un sensor compatible."
}
]
}
diff --git a/web/messages/es/docs/hardware/nvidia-host.json b/web/messages/es/docs/hardware/nvidia-host.json
index acd3328c..51a259e5 100644
--- a/web/messages/es/docs/hardware/nvidia-host.json
+++ b/web/messages/es/docs/hardware/nvidia-host.json
@@ -1,146 +1,146 @@
{
"meta": {
- "title": "Instalar drivers NVIDIA en el host | ProxMenux Documentation",
- "description": "Instala y configura los drivers propietarios NVIDIA en un host Proxmox VE usando ProxMenux. Cubre filtrado por GPU, validación DKMS, servicio de persistencia, parche NVENC opcional y propagación automática a LXC."
+ "title": "Instalar NVIDIA en el host | Documentación de ProxMenux",
+ "description": "Instala controladores propietarios NVIDIA en Proxmox VE con ProxMenux: filtrado por GPU, comprobaciones de compilación y DKMS, persistencia, parche NVENC opcional y actualización de bibliotecas en LXC."
},
"header": {
"title": "Instalar drivers NVIDIA en el host",
- "description": "Instala el driver propietario NVIDIA en un host Proxmox VE usando ProxMenux. El instalador filtra las ramas mantenidas por el PCI ID de la GPU, valida la versión elegida mediante DKMS, gestiona nouveau, instala el servicio de persistencia y puede propagar el driver a contenedores LXC con passthrough NVIDIA.",
- "section": "Hardware: GPUs y Coral-TPU"
+ "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: GPU y Coral-TPU"
},
"intro": {
- "title": "Qué hace esto",
- "body": "ProxMenux automatiza todo el ciclo de vida del driver NVIDIA en el host: detecta tu GPU, ofrece ramas mantenidas por NVIDIA que incluyen su PCI Device ID, pone nouveau en blacklist, descarga y ejecuta el instalador oficial .run con DKMS, instala nvidia-persistenced y las reglas udev, y ofrece aplicar el parche NVENC opcional. La compilación DKMS es la validación final frente al kernel en ejecución. Si ya tienes contenedores LXC con passthrough NVIDIA, puede actualizar sus librerías de espacio de usuario para que coincidan con el host."
+ "title": "Qué hace",
+ "body": "Detecta la GPU y ofrece ramas mantenidas que incluyen su ID PCI. Bloquea nouveau, descarga el instalador oficial .run, usa DKMS, instala nvidia-persistenced, 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?",
- "body": "Si tienes una GPU NVIDIA y quieres usarla para transcoding acelerado por hardware en Plex, Jellyfin, Frigate, Immich, Stable Diffusion o cualquier otra app corriendo dentro de un contenedor LXC, necesitas instalar el driver en el host Proxmox primero. Esta página cubre esa instalación en el lado del host. Pasar la GPU a una máquina virtual (VM) usa un flujo distinto (passthrough VFIO) y se documenta aparte."
+ "body": "Para vídeo o cálculo acelerado en Plex, Jellyfin, Frigate, Immich o Stable Diffusion dentro de LXC, instala primero NVIDIA en el host Proxmox. Asignar la GPU directamente a una VM usa el procedimiento VFIO."
},
"prereqs": {
"title": "Antes de empezar",
- "gpu": "Una GPU NVIDIA instalada físicamente en el host. El script la autodetecta; las GPUs AMD e Intel no se gestionan aquí.",
+ "gpu": "Una GPU NVIDIA instalada en el host. Se detecta automáticamente; esta opción no gestiona AMD ni Intel.",
"gpuCheck": "lspci | grep -i nvidia",
- "notVm": "La GPU no está asignada actualmente a una VM vía passthrough VFIO. Si lo está, el script se negará a instalar el driver del host para evitar romper la config de passthrough.",
+ "notVm": "La GPU no debe estar reservada para VM mediante VFIO. El instalador rechaza esa situación para evitar interferir en la asignación.",
"internet": "Acceso a internet en el host. El instalador descarga el driver desde download.nvidia.com y, opcionalmente, clona nvidia-persistenced y nvidia-patch desde GitHub.",
- "space": "Algo de espacio libre en /opt/nvidia para el instalador .run más la RAM usada durante el build. Al propagar a LXCs con distros no-Arch, cada contenedor necesita al menos 1.5 GB libres; ProxMenux eleva temporalmente la RAM del contenedor a 2 GB y la restaura al terminar. Se necesita reiniciar al final de la instalación del host."
+ "space": "Reserva espacio en /opt/nvidia para .run y RAM para compilar. La actualización LXC no-Arch comprueba 1500 MiB libres y puede solicitar subir temporalmente a 2048 MiB de RAM si tiene menos; después restaura el límite anterior. Planifica el reinicio del host."
},
"vmWarn": {
- "title": "¿GPU asignada a una VM? Para aquí",
- "body": "Si la GPU está actualmente vinculada a vfio-pci (es decir, se está pasando a una VM), instalar el driver del host puede romper el passthrough y desestabilizar el sistema. ProxMenux detecta esto y aborta. Quita la GPU de la configuración de passthrough de la VM y reinicia antes de ejecutar este script."
+ "title": "¿GPU reservada para VM? Detente aquí",
+ "body": "Si algún dispositivo NVIDIA está vinculado a vfio-pci, el instalador sale aunque la VM esté parada. Estar reservado no implica que una VM lo esté usando. Planifica el regreso al controlador del host y retira asignaciones VM y VFIO obsoletas antes de reiniciar e instalar."
},
"running": {
"heading": "Ejecutar el instalador",
- "body": "Abre ProxMenux en el host, ve a Hardware Graphics → NVIDIA GPU Driver Installer. Lo que verás depende de si ya hay un driver presente.",
- "imageAlt": "Menú Hardware Graphics con la entrada NVIDIA GPU Driver Installer resaltada"
+ "body": "Abre Hardware Graphics → NVIDIA GPU Driver Installer en ProxMenux. El menú depende de si ya hay un controlador activo.",
+ "imageAlt": "Menú de hardware con el instalador NVIDIA resaltado"
},
"howRuns": {
- "heading": "Cómo se ejecuta el script",
- "body": "El instalador pasa por tres fases con separación clara entre \"recopilar información y validar\" y \"tocar realmente el host\". Hasta la confirmación final, no se ha cambiado nada."
+ "heading": "Cómo funciona el script",
+ "body": "Detecta dispositivos, elige versión e instala. Antes del resumen puede ofrecer limpiar VFIO antiguo con confirmación propia. La preparación de repositorios/cabeceras y la descarga preceden a sustituir el controlador; no todos los cambios empiezan tras una única confirmación final."
},
"walkthrough": {
"detect": {
"title": "Detección de GPU y resumen",
- "body1": "El script escanea el bus PCI y muestra cada controladora de vídeo NVIDIA que encuentra, el estado actual del driver (o \"No NVIDIA driver installed\") y cualquier contenedor LXC que ya tenga passthrough NVIDIA configurado (versión del driver dentro de cada uno).",
- "body2": "Revisa el resumen cuidadosamente. Si la GPU detectada no es la que esperas, o si la versión de un contenedor ya coincide con la del host, puedes cancelar aquí sin efectos secundarios.",
- "imageAlt": "Resumen previo a la instalación mostrando las GPUs detectadas, el estado actual del driver y los contenedores LXC con passthrough NVIDIA"
+ "body1": "Muestra las controladoras de vídeo NVIDIA, el estado del controlador o «No NVIDIA driver installed» y los LXC con acceso NVIDIA configurado, con su versión interna.",
+ "body2": "Revisa GPU y versiones del host y contenedores. Cancela en el resumen si algo no coincide con lo esperado; una limpieza VFIO confirmada antes ya se habrá aplicado.",
+ "imageAlt": "Resumen previo con GPU, controlador y LXC configurados para NVIDIA"
},
"version": {
"title": "Elegir la versión del driver",
- "body1": "ProxMenux obtiene la lista de drivers disponibles de NVIDIA y acota el selector a las versiones que listan el PCI Device ID de tu GPU en la tabla de chips soportados de la rama correspondiente en nvidia.com. Una serie de heurísticas descartan además las builds developer / beta del CDN que aparecerían al principio. La primera entrada se etiqueta como <versión> — Recommended: prefiere la cabeza de la rama del driver ya instalado en el host (bugfix in place), en su defecto la cabeza de la Production Branch actual, y en último caso el número más alto entre los filtrados.",
- "body2": "Si el driver actualmente instalado fue parcheado con keylase (NVENC), el selector se acota automáticamente a versiones aún cubiertas por la tabla de parches, para que aplicar Reinstalar / actualizar sin perder el parche sea un click.",
+ "body1": "Filtra las versiones de nvidia.com que incluyen el ID PCI de la GPU en la tabla de chips compatibles y descarta versiones beta/desarrollo mediante heurísticas. <versión> — Recomendada prioriza la última de la rama instalada; después Production Branch y, por último, la versión compatible de número más alto.",
+ "body2": "Si consta como parcheado por keylase, el selector limita las versiones a la tabla NVENC. Reinstalar / actualizar mantiene las confirmaciones y la opción de parche; comprueba el resultado final.",
"whyTitle": "Cómo se valida la compatibilidad con el kernel",
- "whyBody": "La lista se filtra por el mantenimiento de la rama NVIDIA y el soporte del PCI ID de la GPU, no mediante una matriz fija de kernel y driver. Después de elegir, DKMS compila el módulo contra el kernel en ejecución. Si la compilación falla, la instalación no se considera válida; elige otra rama mantenida si NVIDIA todavía no ha adaptado esa versión a tu kernel.",
- "imageAlt": "Selector de versiones con ramas NVIDIA compatibles con la GPU y la opción recomendada en primer lugar"
+ "whyBody": "Filtra por ramas mantenidas e ID PCI, sin una matriz fija de kernel/controlador. Una prueba previa intenta compilar para el kernel actual. Si confirma incompatibilidad, vuelve al selector; si no puede comprobarla, puede avisar y continuar. La instalación y las pruebas de funcionamiento siguen siendo necesarias.",
+ "imageAlt": "Selector de ramas compatibles con la GPU y recomendación al principio"
},
"uninstall": {
- "title": "Desinstalación limpia (solo si reinstalas)",
- "body": "Si ya hay un driver presente y elegiste una versión distinta, ProxMenux para los servicios NVIDIA, descarga los módulos de kernel, quita las entradas DKMS y purga los paquetes nvidia-* / libnvidia-* / cuda-* antes de tocar el nuevo instalador. Esto evita el clásico desastre de versiones mezcladas."
+ "title": "Retirar el controlador anterior al reinstalar",
+ "body": "Tras descargar y comprobar el instalador elegido, retira el controlador anterior antes de sustituirlo. Detiene servicios NVIDIA, descarga módulos, elimina entradas DKMS y purga nvidia-* / libnvidia-* / cuda-*. También se aplica al reinstalar la misma versión con confirmación."
},
"prepare": {
"title": "Preparar el sistema",
- "body": "Tras una única confirmación, el script:",
+ "body": "Durante la preparación, el script:",
"items": [
- "Comprueba los repositorios del host antes de eliminar o instalar nada: en un host sin suscripción activa y solo con el repositorio Enterprise se pregunta antes de cambiar a sin suscripción, y la instalación se detiene cuando el cambio se rechaza.",
+ "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 pve-headers-$(uname -r) (o proxmox-headers-$(uname -r)), build-essential y dkms.",
- "Crea el archivo propiedad de ProxMenux /etc/modprobe.d/proxmenux-nouveau-blacklist.conf con blacklist nouveau y options nouveau modeset=0, registra si añadió la línea complementaria a blacklist.conf e intenta descargar el módulo inmediatamente.",
+ "Crea /etc/modprobe.d/proxmenux-nouveau-blacklist.conf, gestionado por ProxMenux, con blacklist nouveau y options nouveau modeset=0. Registra si añadió la línea complementaria a blacklist.conf e intenta descargar nouveau.",
"Escribe /etc/modules-load.d/nvidia-vfio.conf con nvidia y nvidia_uvm para que los módulos se carguen pronto en el arranque."
]
},
"download": {
"title": "Descargar y ejecutar el instalador NVIDIA",
- "body": "El instalador descarga el archivo NVIDIA-Linux-x86_64-<version>.run en /opt/nvidia, lo valida (tamaño + firma de ejecutable, no solo HTTP 200), y luego lo ejecuta con DKMS para que el módulo de kernel se reconstruya automáticamente con las actualizaciones de kernel.",
- "imageAlt": "Progreso de descarga seguido del instalador NVIDIA ejecutando su build DKMS"
+ "body": "Descarga NVIDIA-Linux-x86_64-<version>.run a /opt/nvidia y comprueba tamaño y tipo ejecutable. Son comprobaciones de formato, no de firma criptográfica. Registra DKMS para recompilar al cambiar el kernel; sigue necesitando fuentes y kernel compatibles.",
+ "imageAlt": "Progreso de descarga y compilación DKMS del instalador NVIDIA"
},
"persist": {
"title": "Servicio de persistencia y reglas udev",
- "body": "ProxMenux luego instala /etc/udev/rules.d/70-nvidia.rules para que los nodos de dispositivo /dev/nvidia* aparezcan de forma fiable en el arranque. Sin esto, el passthrough LXC puede tener carreras al arranque del contenedor y acabar con un contenedor que no ve la GPU."
+ "body": "Instala /etc/udev/rules.d/70-nvidia.rules para crear dispositivos /dev/nvidia* al arrancar. Así evita que un LXC intente acceder a la GPU antes de que existan los dispositivos."
},
"nvenc": {
"title": "Opcional: aplicar el parche NVENC",
- "body": "Las GPUs NVIDIA de consumo (línea GeForce) limitan el número de sesiones simultáneas de codificación NVENC. El nvidia-smi dentro del contenedor fallará con un error \"version mismatch\".",
- "body2": "La actualización es consciente de la distro. Para Debian / Ubuntu y otras distros glibc, el mismo instalador .run (con --no-kernel-modules --no-dkms --no-install-compat32-libs) se copia al contenedor y se ejecuta; la RAM del contenedor se eleva temporalmente a 2 GB si es menor y se restaura al terminar. Para Arch, Manjaro y EndeavourOS la actualización es un pacman -Syu nvidia-utils pineado a la rama del driver del host. Alpine usa un camino distinto — se extrae el .run en el host, solo las librerías userspace se empaquetan como tarball y se envían con pct push, luego se instalan los shims gcompat + binutils vía apk y se recrean los symlinks SONAME con readelf para que las librerías glibc-linked carguen correctamente sobre musl.",
- "imageAlt": "Prompt listando los LXCs con passthrough NVIDIA y la versión actual del driver, con Sí/No para actualizarlos todos"
+ "title": "Opcional: actualizar bibliotecas NVIDIA en LXC",
+ "body1": "Ofrece actualizar las bibliotecas del controlador en los LXC detectados. Estas y el módulo del host deben tener versiones coincidentes; si no, nvidia-smi puede mostrar «version mismatch».",
+ "body2": "Debian / Ubuntu y otros contenedores glibc reciben el instalador .run extraído con --no-kernel-modules --no-dkms --no-install-compat32-libs; puede aumentar temporalmente la RAM a 2 GiB y luego restaurarla. Arch, Manjaro y EndeavourOS usan pacman -Syu nvidia-utils de sus repositorios, sin fijar la versión del host: comprueba el resultado. Alpine recibe el contenido .run extraído mediante pct push, instala gcompat y binutils con apk y crea enlaces SONAME con readelf. Verifica el funcionamiento: la compatibilidad glibc no garantiza todas las bibliotecas sobre musl.",
+ "imageAlt": "Diálogo con los LXC NVIDIA y su versión para confirmar la actualización"
},
"reboot": {
"title": "Reiniciar",
- "body": "Finalmente, el script reconstruye initramfs para todos los kernels y ofrece reiniciar. Reiniciar es obligatorio: el blacklist de nouveau y el nuevo módulo de kernel solo surten efecto tras el reinicio."
+ "body": "Tras instalar el controlador, regenera initramfs para todos los kernels; el último paso ofrece reiniciar. Planifica ese reinicio para verificar módulos y bloqueo de nouveau en un arranque limpio, aunque el controlador ya responda antes."
}
},
"reinstallUninstall": {
"heading": "Reinstalar o desinstalar",
- "intro": "Cuando el instalador detecta que el módulo de kernel nvidia está cargado actualmente y nvidia-smi devuelve una versión, no reinstala silenciosamente encima. En lugar de eso muestra un menú de acciones para que elijas qué hacer. (Los binarios presentes en disco pero el módulo no cargado no cuentan como instalados — el módulo tiene que estar activo.)",
+ "intro": "Si el módulo nvidia está cargado y nvidia-smi devuelve una versión, muestra un menú de acciones. Este criterio detecta un controlador activo; puede haber archivos instalados aunque el módulo no esté cargado.",
"imageAlt": "Menú de acciones NVIDIA ofrecido cuando ya hay un driver instalado — dos opciones: Reinstalar / actualizar driver, o Desinstalar el driver NVIDIA completamente",
"imageCaption": "El menú de acciones solo aparece cuando hay un driver NVIDIA activo actualmente en el host.",
"reinstallHeading": "Reinstalar / actualizar",
- "reinstallBody": "Continúa con el flujo normal de instalación pero, antes de descargar nada, ejecuta una eliminación limpia del driver actual (apt purge + entradas DKMS eliminadas + módulos residuales descargados). Es la ruta segura para aplicar una versión más nueva de la misma rama, elegir otra rama mantenida cuando sea necesario o recuperarse de un estado incompleto. Al final vuelven a mostrarse las opciones de propagación LXC y del parche NVENC.",
+ "reinstallBody": "Elige versión, prepara repositorios/cabeceras, descarga y prueba la compilación antes de retirar el controlador anterior e instalar el nuevo. Permite actualizar dentro de una rama mantenida o elegir otra compatible. Después vuelven las opciones de bibliotecas LXC y parche NVENC.",
"uninstallHeading": "Desinstalar — qué se elimina",
- "uninstallIntro": "Confirma primero con un diálogo sí/no. Luego ejecuta un rollback completo e idempotente:",
+ "uninstallIntro": "Tras confirmar con Sí/No, desinstala estos componentes:",
"uninstallItems": [
- "Ejecuta primero nvidia-uninstall --silent (el reverso del instalador .run), luego para y deshabilita nvidia-persistenced y nvidia-powerd, y descarga los módulos de kernel (nvidia_uvm, nvidia_drm, nvidia_modeset, nvidia) — cualquier contenedor LXC con passthrough NVIDIA será cortado limpiamente.",
- "Ejecuta apt purge sobre nvidia-*, libnvidia-*, cuda-* y libcudnn*, quita el árbol fuente DKMS y la caché del instalador .run de /opt/nvidia.",
- "Quita la configuración de carga de módulos (/etc/modules-load.d/nvidia-vfio.conf) 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.",
- "Quita las reglas udev (/etc/udev/rules.d/70-nvidia.rules) y limpia el estado del parche NVENC (un campo del registro de instalaciones gestionadas de ProxMenux, marcado como removed — no hay fichero aparte que borrar).",
- "Reconstruye initramfs para todos los kernels, ejecuta proxmox-boot-tool refresh en hosts con systemd-boot, y pide reiniciar para finalizar."
+ "Detiene y desactiva nvidia-persistenced y nvidia-powerd, intenta descargar nvidia_uvm, nvidia_drm, nvidia_modeset y nvidia y después ejecuta nvidia-uninstall --silent para la instalación .run. Afecta a las apps LXC que usan NVIDIA; clientes activos pueden impedir la descarga.",
+ "Ejecuta apt purge sobre nvidia-*, libnvidia-*, cuda-* y libcudnn*, elimina el árbol fuente DKMS y las carpetas nvidia-persistenced y nvidia-patch de /opt/nvidia.",
+ "Elimina la configuración de carga de módulos (/etc/modules-load.d/nvidia-vfio.conf) 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 /etc/udev/rules.d/70-nvidia.rules y marca el estado NVENC como removed en el registro de instalaciones gestionadas; no hay un archivo de estado separado.",
+ "Regenera initramfs para todos los kernels, ejecuta proxmox-boot-tool refresh según la configuración de arranque y solicita reiniciar."
],
- "lxcWarnTitle": "Contenedores LXC con passthrough NVIDIA",
- "lxcWarnBody": "Quitar el driver del host invalida las rutas de dispositivo y las librerías CUDA mapeadas a cualquier LXC con passthrough NVIDIA. Planifica la operación en una ventana de mantenimiento si Frigate / Plex / Jellyfin / Ollama (o cualquier otra cosa) depende de ello."
+ "lxcWarnTitle": "LXC con acceso a NVIDIA",
+ "lxcWarnBody": "Retirar el controlador del host interrumpe las apps LXC que usan NVIDIA, aunque conserven sus bibliotecas. Programa mantenimiento para Frigate, Plex, Jellyfin, Ollama y otras apps que dependan de la GPU."
},
"updates": {
- "heading": "Notificaciones de actualización",
+ "heading": "Avisos de actualizaciones",
"body": "El driver NVIDIA instalado se rastrea en el registro de instalaciones gestionadas de ProxMenux. En el arranque y cada 24 horas, el Monitor compara el listado de download.nvidia.com/XFree86/Linux-x86_64/ con la versión que devuelve nvidia-smi y solo avisa cuando existe una versión de mantenimiento más nueva en la rama instalada.",
"kindsHeading": "Mensaje de actualización",
"kindsItems": [
- "Mantenimiento de la misma rama. Una versión más reciente dentro de la rama instalada (por ejemplo, 580.65.06 instalada → 580.105.08 disponible). El Monitor no deduce compatibilidad entre ramas y kernels."
+ "Mantenimiento dentro de la rama. Por ejemplo, 580.65.06 instalada → 580.105.08 disponible. Monitor no deduce compatibilidad de kernel entre ramas."
],
- "antiTitle": "Anti-cascada por diseño",
- "antiBody": "Una notificación por cada versión nueva distinta, nunca en cada comprobación de 24 horas. Si no hay una versión más reciente en la rama instalada, el seguimiento permanece silencioso.",
+ "antiTitle": "Evitar avisos repetidos",
+ "antiBody": "Un aviso por cada versión nueva, no en cada comprobación diaria. Si no hay una más reciente en la rama instalada, no notifica.",
"applyTitle": "Aplicar la actualización",
- "applyBody": "El Monitor no autoaplica actualizaciones de driver — reinstalar el driver NVIDIA siempre necesita un reinicio. Abre la misma entrada del instalador descrita arriba, elige Reinstall / update y la nueva versión se descarga, el módulo DKMS se reconstruye contra el kernel en ejecución y se pide el reinicio al final."
+ "applyBody": "Monitor avisa sin instalar automáticamente. Abre el instalador, elige Reinstalar / actualizar y una versión compatible, y completa compilación e instalación. Termina con una solicitud de reinicio; planifícalo y verifica después host y bibliotecas LXC."
},
"verify": {
"heading": "Verificar la instalación",
- "intro": "Una vez el host esté arriba de nuevo, entra por SSH o por la shell de Proxmox y ejecuta:",
- "after": "Deberías ver tu GPU listada, la versión del driver en el borde superior y ningún proceso aún (nada está usando la GPU en este punto). Luego comprueba el servicio de persistencia:",
+ "intro": "Tras reiniciar el host, entra por SSH o desde la consola Proxmox y ejecuta:",
+ "after": "Comprueba que aparecen la GPU y la versión esperada. Puede haber procesos si servicios del host o contenedores arrancados automáticamente ya usan la GPU. Después comprueba la persistencia:",
"imageAlt": "Salida de nvidia-smi en el host mostrando la GPU detectada y la versión del driver instalada"
},
"troubleshoot": {
"heading": "Solución de problemas",
- "smiFailTitle": "`nvidia-smi` dice 'NVIDIA-SMI has failed'",
- "smiFailBody": "Casi siempre se debe a que nouveau sigue cargado o a que las cabeceras no coinciden con el kernel. Tras reiniciar, ejecuta lsmod | grep nouveau. Si devuelve algo, comprueba /etc/modprobe.d/proxmenux-nouveau-blacklist.conf, reconstruye initramfs con update-initramfs -u -k all y reinicia. Si nouveau no aparece, revisa dmesg | grep -i nvidia; los errores de DKMS suelen indicar que faltan las cabeceras del kernel en ejecución.",
+ "smiFailTitle": "nvidia-smi muestra «NVIDIA-SMI has failed»",
+ "smiFailBody": "Puede deberse a nouveau, cabeceras ausentes o incompatibles, fuentes del controlador incompatibles u otros errores de carga. Revisa lsmod | grep nouveau, dmesg | grep -i nvidia y los registros del instalador/DKMS. Si hay que corregir nouveau, revisa /etc/modprobe.d/proxmenux-nouveau-blacklist.conf antes de update-initramfs -u -k all y reiniciar. No todo fallo de compilación es de cabeceras.",
"lxcMissTitle": "El contenedor LXC no ve la GPU tras actualizar el host",
- "lxcMissBody": "Las librerías userspace del contenedor están atascadas en la versión anterior del driver. O vuelves a ejecutar el instalador NVIDIA y aceptas el prompt de propagación LXC, o instalas la misma versión del driver manualmente dentro del contenedor con --no-kernel-modules.",
+ "lxcMissBody": "Revisa dispositivos del host, permisos LXC y versión de bibliotecas antes de reinstalar. Si no coinciden, instala el controlador de usuario correspondiente mediante el método compatible con la distribución; en glibc usa --no-kernel-modules. Reinstalar bibliotecas no corrige montajes o permisos ausentes.",
"logTitle": "Revisa el log de instalación",
- "logBody": "Cada instalación escribe en /tmp/nvidia_install.log. Si algo falla silenciosamente, ese archivo tiene la salida completa (descargas, build DKMS, instalaciones de servicio). Adjúntalo cuando reportes issues en GitHub."
+ "logBody": "La instalación escribe en /tmp/nvidia_install.log. Revisa descargas, compilación DKMS y servicios si falla. Adjunta el registro al comunicar el problema en GitHub."
},
"manualSteps": {
"heading": "¿Buscas los pasos manuales?",
- "body": "La guía original de la comunidad — instalar todo a mano con wget y ./NVIDIA-Linux-...run — sigue disponible como referencia en wget y ./NVIDIA-Linux-...run. Explica los componentes, pero no reproduce exactamente el instalador. El proceso mantenido de ProxMenux añade filtrado GPU, comprobación de compilación, actualizaciones LXC y controles VFIO."
},
"related": {
"heading": "Relacionado",
@@ -148,25 +148,25 @@
{
"label": "Añadir GPU a VM (Passthrough)",
"href": "/docs/hardware/gpu-vm-passthrough",
- "tail": " — pasar la GPU NVIDIA a una VM (modelo de binding distinto al de LXC)."
+ "tail": " — asignar NVIDIA directamente a una VM mediante VFIO."
},
{
"label": "Añadir GPU a LXC",
"href": "/docs/hardware/igpu-acceleration-lxc",
- "tail": " — compartir la GPU NVIDIA con uno o más contenedores."
+ "tail": " — compartir NVIDIA con uno o varios contenedores."
},
{
- "label": "Switch GPU Mode (VM ↔ LXC)",
+ "label": "Cambiar modo GPU (VM ↔ LXC)",
"href": "/docs/hardware/switch-gpu-mode",
- "tail": " — alternar la misma GPU entre modos passthrough (VM) y compartido (LXC)."
+ "tail": " — alternar entre acceso directo a VM y uso compartido en LXC."
},
{
"label": "ProxMenux Monitor — pestaña Hardware",
"href": "/docs/monitor/dashboard/hardware",
- "tail": " — el modal de GPU que dispara este instalador en un click, más monitorización en vivo una vez hecho."
+ "tail": " — ventana GPU que abre este instalador y muestra estadísticas en tiempo real."
},
{
- "label": "Comandos de GPU Passthrough",
+ "label": "Comandos de asignación directa de GPU",
"href": "/docs/help-info/gpu-commands",
"tail": " — referencia de lspci / dmesg / IOMMU / nvidia-smi."
}
diff --git a/web/messages/es/docs/hardware/switch-gpu-mode.json b/web/messages/es/docs/hardware/switch-gpu-mode.json
index bd4b1841..35f973e8 100644
--- a/web/messages/es/docs/hardware/switch-gpu-mode.json
+++ b/web/messages/es/docs/hardware/switch-gpu-mode.json
@@ -1,16 +1,16 @@
{
"meta": {
- "title": "Switch GPU Mode (VM ↔ LXC) | ProxMenux Documentation",
- "description": "Mueve una GPU ya asignada entre modo VM (vfio-pci) y modo LXC (driver nativo) en un host Proxmox. ProxMenux detecta el binding actual, pide políticas de conflicto por workload, gestiona la limpieza de audio huérfano y reconstruye initramfs solo cuando hace falta."
+ "title": "Cambiar modo GPU (VM ↔ LXC) | Documentación de ProxMenux",
+ "description": "Cambia una GPU entre VFIO para VM y controlador nativo para LXC. ProxMenux detecta el controlador, pregunta cómo resolver asignaciones en conflicto, retira audio asociado y regenera initramfs si cambia la configuración del host."
},
"header": {
- "title": "Switch GPU Mode (VM ↔ LXC)",
- "description": "Reasigna una GPU que ya está en uso — cambia de passthrough a VM a compartición con LXC o al revés. ProxMenux gestiona todos los cambios de binding del lado del host (vfio.conf, blacklist de drivers, módulos, initramfs) y ofrece una política limpia para cada VM o LXC que use la GPU actualmente, para que el cambio no deje config rota detrás.",
- "section": "Hardware: GPUs y Coral-TPU"
+ "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: GPU y Coral-TPU"
},
"intro": {
- "title": "Qué hace esto",
- "body": "Una GPU en un host Proxmox vive en uno de dos modos: vinculada a vfio-pci (reservada para una VM) o vinculada a su driver nativo (i915 / amdgpu / nvidia) para que el host + los LXCs puedan compartirla. Switch GPU Mode alterna entre esos dos sin que tengas que editar vfio.conf a mano, gestionar blacklists o recordar qué líneas de VM / LXC apuntan a la tarjeta. También te avisa limpiamente si un workload aún referencia la GPU para que no acabes con una VM rota en el arranque."
+ "title": "Qué hace",
+ "body": "Con vfio-pci, la GPU se reserva para una VM. Con el controlador nativo (i915 / amdgpu / nvidia), pueden compartirla el host y los LXC. Cambiar modo GPU gestiona vfio.conf, módulos bloqueados y referencias en invitados, y avisa de asignaciones pendientes."
},
"graphics": {
"lxcTitle": "Listo para contenedores LXC",
@@ -20,16 +20,16 @@
},
"when": {
"heading": "¿Cuándo debería usar esto?",
- "intro": "Usa este script cuando una GPU está ya asignada y quieres moverla:",
+ "intro": "Úsalo si la GPU ya está asignada y quieres cambiar su uso:",
"headerSituation": "Situación",
"headerUse": "¿Usar esta página?",
"rows": [
{
- "situation": "La GPU está libre — nunca asignada. Quieres dársela a una VM.",
+ "situation": "GPU libre, nunca asignada: quiero usarla en una VM.",
"useRich": "No — usa intel_iommu=on iommu=pt o amd_iommu=on, vía proxmox-boot-tool refresh en systemd-boot o update-grub en GRUB) y lo incluye en el aviso de reinicio final.",
+ "assigned": "Una GPU ya asignada a una VM por VFIO o a un LXC. Para la primera asignación, usa Añadir GPU a VM / LXC.",
+ "iommu": "IOMMU debe estar activo en el host al pasar a modo VM. Depende del firmware y del kernel. Si al kernel en ejecución le falta intel_iommu=on o amd_iommu=on, el script lo añade con iommu=pt a /etc/kernel/cmdline (marca de raíz ZFS) o a /etc/default/grub y ejecuta proxmox-boot-tool refresh o update-grub. Revisa los avisos y reinicia cuando lo solicite.",
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
- "reboot": "Asume un reinicio. Cambiar bindings de GPU a nivel de kernel significa que el host regenera initramfs y reinicias para aplicar. El script lo pide al final.",
- "knowList": "Saber qué VMs / LXCs están usando la GPU. El script las encontrará y preguntará qué hacer con cada una, pero es más rápido si ya conoces la lista."
+ "reboot": "Planifica un reinicio. Los cambios persistentes de controlador y arranque pueden requerir regenerar initramfs y reiniciar. El script muestra la solicitud al terminar.",
+ "knowList": "Identifica las VM y LXC que usan la GPU. 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": "Una pequeña blocklist de IDs de GPU se rechaza para modo VM por inestabilidad conocida de passthrough (p. ej. Intel Arc A770 8086:5a84 / 8086:5a85). Si la GPU seleccionada coincide, el script explica por qué y sale. Cambiar a modo LXC siempre se permite."
+ "body": "El script bloquea el modo VM para los ID 8086:5a84 y 8086:5a85 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 a LXC, aunque siguen aplicándose otras comprobaciones."
},
"running": {
"heading": "Ejecutar el script",
- "body": "Abre ProxMenux en el host, ve a Hardware: GPUs and Coral-TPU → Switch GPU Mode (VM ↔ LXC).",
- "imageAlt": "Entrada del menú 'Switch GPU Mode (VM ↔ LXC)' dentro de Hardware: GPUs and Coral-TPU"
+ "body": "Abre Hardware: GPU y Coral-TPU → Cambiar modo GPU (VM ↔ LXC) en ProxMenux.",
+ "imageAlt": "Opción Cambiar modo GPU (VM ↔ LXC) en el menú de hardware"
},
"howRuns": {
- "heading": "Cómo se ejecuta el script",
- "body": "Dos fases como siempre: todo se recopila y valida primero, no se aplica nada hasta que confirmas al final."
+ "heading": "Cómo funciona el script",
+ "body": "Revisas GPU y dirección antes del cambio principal. Una limpieza separada de VFIO antiguo puede pedir confirmación antes, y los invitados tienen sus propios diálogos de conflicto. Lee cada confirmación: no hay una única confirmación final para todos los cambios."
},
"walkthrough": {
- "heading": "Recorriendo el flujo",
+ "heading": "Proceso paso a paso",
"detect": {
- "title": "Detectar las GPUs y su binding actual",
- "body": "El script escanea cada controladora VGA / 3D / Display del host e inspecciona /sys/bus/pci/devices/*/driver para encontrar el driver de kernel actual. Verás cada GPU etiquetada con su nombre, slot PCI y binding de driver actual — así puedes ver de un vistazo en qué modo está.",
+ "title": "Detectar GPU y controlador actual",
+ "body": "Examina las controladoras VGA, 3D y Display del host y consulta /sys/bus/pci/devices/*/driver. Muestra nombre, dirección PCI y controlador actual de cada GPU para identificar su modo.",
"imageAlt": "Checklist de GPU mostrando cada GPU detectada con su driver actual (vfio-pci / nvidia / amdgpu / i915) y slot PCI"
},
"pickGpu": {
- "title": "Elegir la(s) GPU(s) a cambiar",
- "body": "Una GPU → autoseleccionada. Varias GPUs → checklist. Puedes marcar varias, pero todas deben estar en el mismo modo actual — si no el script no puede elegir un modo destino para el batch y recibes un aviso de \"modo mixto\" pidiéndote que reduzcas la selección.",
- "tipTitle": "Cambios en batch",
- "tipBody": "Útil cuando estás reconstruyendo un host: \"Las tres NVIDIA van a modo VM, luego la iGPU vuelve a LXC.\" Dos ejecuciones, cada una con destino uniforme, mucha menos fricción que una a una."
+ "title": "Elegir las GPU que cambiar",
+ "body": "Si hay una GPU, se selecciona sola. Si hay varias, puedes marcar más de una, pero deben estar en el mismo modo. Si mezclas modos, pide reducir la selección.",
+ "tipTitle": "Cambiar varias GPU a la vez",
+ "tipBody": "Por ejemplo: pasar tres NVIDIA a modo VM y luego devolver la iGPU a LXC. Son dos ejecuciones, cada una con un destino común, en lugar de cambiar cada tarjeta por separado."
},
"direction": {
"title": "Revisar la dirección propuesta",
"intro": "Según el modo actual, el script propone el opuesto como destino:",
"items": [
- "VM → LXC: desvincular de vfio-pci, dejar que el driver nativo (nvidia, amdgpu, i915) reclame la tarjeta para que los LXCs puedan compartirla. En NVIDIA, la entrada por BDF se quita de /etc/udev/rules.d/10-proxmenux-vfio-bind.rules para que el módulo nvidia reclame la GPU tras reiniciar.",
- "LXC → VM: vincular a vfio-pci para que la tarjeta esté libre para passthrough VFIO a una sola VM. En AMD / Intel esto significa poner el driver nativo en blacklist y definir options vfio-pci ids=…. En NVIDIA el módulo nvidia no se pone en blacklist — en su lugar una regla udev por BDF aplica driver_override=vfio-pci solo a las GPUs que selecciones, para que otras GPUs NVIDIA del host mantengan su driver nvidia."
+ "VM → LXC: retira la asignación a vfio-pci para que el controlador nativo (nvidia, amdgpu, i915) pueda usar la GPU. En NVIDIA elimina las entradas BDF correspondientes de /etc/udev/rules.d/10-proxmenux-vfio-bind.rules para el próximo arranque.",
+ "LXC → VM: prepara la asignación a vfio-pci. AMD / Intel bloquea el controlador nativo y usa options vfio-pci ids=…. En NVIDIA, nvidia solo se bloquea globalmente si todas las GPU NVIDIA del host están en VFIO; si no, las reglas BDF aplican driver_override=vfio-pci a los dispositivos de los grupos IOMMU afectados y las GPU NVIDIA externas a esos grupos conservan nvidia. Revisa cada miembro del grupo."
],
"outro": "Confirma la dirección o cancela."
},
"conflict": {
- "title": "Política de conflicto por workload afectado",
- "body": "El script escanea cada /etc/pve/lxc/*.conf y /etc/pve/qemu-server/*.conf buscando referencias al slot PCI de la GPU. Por cada workload afectado eliges una política:",
+ "title": "Cómo tratar cada VM o LXC afectado",
+ "body": "Revisa /etc/pve/lxc/*.conf por dispositivos según la familia del controlador y /etc/pve/qemu-server/*.conf por asignaciones PCI. En LXC no identifica cada tarjeta por BDF exacto. Revisa los invitados detectados y elige qué hacer con cada uno:",
"headerPolicy": "Política",
"headerEffect": "Efecto",
"headerWhen": "Cuándo elegirla",
- "keepPolicy": "Mantener config, deshabilitar onboot",
- "keepEffect": "pct set -onboot 0 (o qm set). Las líneas de GPU se quedan en la config.",
- "keepWhen": "Planeas volver a esta VM/LXC una vez la GPU esté de vuelta en su modo original. Default seguro.",
- "removePolicy": "Quitar GPU de la config",
- "removeEffect": "Las líneas hostpci / dev del slot de esta GPU se quitan con sed.",
- "removeWhen": "La VM/LXC seguirá funcionando sin la GPU (transcoding solo por CPU, etc.). Workflow limpio.",
- "imageAlt": "Diálogo preguntando la política de conflicto por VM / por LXC al cambiar una GPU que está actualmente asignada"
+ "keepPolicy": "Conservar configuración y desactivar arranque automático",
+ "keepEffect": "pct set CTID -onboot 0 o qm set VMID -onboot 0. Conserva las entradas de GPU.",
+ "keepWhen": "Si piensas reutilizar el invitado cuando la GPU vuelva al modo anterior. Opción predeterminada conservadora.",
+ "removePolicy": "Eliminar la GPU de la configuración",
+ "removeEffect": "Retira las entradas hostpci / dev 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"
},
"audio": {
- "title": "Limpieza de audio huérfano (solo al salir del modo VM)",
- "body1": "Las dGPUs (NVIDIA / AMD) traen una función de audio HDMI en .1 del mismo slot, y a veces se adjuntan controladores de audio extra junto a la GPU. Cuando la GPU deja la VM, esas líneas de audio quedan huérfanas — la VM tiene entradas hostpci apuntando a dispositivos de audio que no van con la GPU.",
- "body2": "El script las descubre (match BDF preciso, sin falsos positivos por substring) y muestra una checklist para que puedas quitarlas limpiamente. También limpia sus IDs vendor:device de /etc/modprobe.d/vfio.conf — pero solo si ninguna otra VM sigue usando esos IDs de audio."
+ "title": "Retirar asignaciones de audio asociadas al salir de VM",
+ "body1": "Muchas GPU NVIDIA / AMD tienen audio HDMI en la función .1 del mismo slot; también puede haber audio adicional asignado. Al retirar la GPU pueden quedar entradas hostpci de audio obsoletas. Revisa qué dispositivos deben conservarse.",
+ "body2": "Identifica las direcciones BDF de audio y muestra una lista para elegir qué retirar. También elimina sus ID vendor:device de /etc/modprobe.d/vfio.conf, solo si ninguna otra VM los usa."
},
"apply": {
- "title": "Aplicar cambios del host + workloads",
+ "title": "Aplicar cambios al host y a los invitados",
"body": "Tras confirmar, el script escribe los cambios en el host: vfio.conf, la lista de módulos bloqueados, los módulos y, para NVIDIA, la regla udev por BDF en /etc/udev/rules.d/10-proxmenux-vfio-bind.rules y el estado BDF en /etc/proxmenux/vfio-bind.bdfs. También aplica la política de conflictos elegida a cada VM/LXC afectado. Si la configuración del host ha cambiado, ejecuta update-initramfs -u -k all y después proxmox-boot-tool refresh; si no ha cambiado, omite ambos comandos."
},
"reboot": {
"title": "Reiniciar",
- "body": "El nuevo binding de GPU solo surte efecto tras reiniciar. El script te lo pide; puedes reiniciar ahora o luego, pero no arranques la VM/LXC destino hasta que el host haya reiniciado — si no la GPU sigue retenida por el driver anterior.",
+ "body": "Reinicia el host para aplicar la nueva asignación persistente. Puedes posponerlo, pero verifica el controlador activo antes de arrancar el invitado destino: hasta el reinicio puede seguir usando el anterior.",
"imageAlt": "Diálogo de resumen listando qué cambió, seguido del prompt de reinicio"
}
},
"manual": {
- "heading": "Equivalente manual",
- "intro": "Si quieres entender exactamente qué hace el script (o depurar uno de los pasos a mano), estas son las operaciones crudas para VM → LXC en una tarjeta NVIDIA con vendor:device 10de:2204:",
- "lxcToVm": "Y para LXC → VM:",
- "oneVmTitle": "Solo una VM puede usar una GPU vfio-pci dada a la vez",
+ "heading": "Inspección manual",
+ "intro": "Antes de pasar de VM → LXC, revisa el controlador y la política BDF. Este ejemplo NVIDIA usa 10de:2204; adáptalo a tu tarjeta. Los comandos consultan el estado; el script también gestiona invitados y miembros del grupo IOMMU.",
+ "lxcToVm": "Antes de LXC → VM, consulta la dirección PCI y su grupo IOMMU. Sustituye la dirección del ejemplo y revisa todos los miembros antes de asignar dispositivos.",
+ "oneVmTitle": "Una GPU física asignada por VFIO solo puede usarla una VM a la vez",
"oneVmBody": "Poner varias entradas hostpci con el mismo slot PCI en dos VMs es config válida pero solo una de las VMs puede arrancar con la GPU — la segunda fallará. El paso de política de conflicto de ProxMenux trata exactamente de evitar esta trampa."
},
"verification": {
@@ -131,13 +131,13 @@
"troubleshoot": {
"heading": "Solución de problemas",
"stillVfioTitle": "La GPU sigue mostrando vfio-pci tras cambiar a modo LXC",
- "stillVfioBody": "update-initramfs no se ejecutó (o el reinicio no llegó a pasar realmente). Comprueba lsmod | grep vfio — si vfio-pci está cargado, vuelve a ejecutar update-initramfs -u -k all y reinicia. Para AMD/Intel: verifica que vfio.conf ya no contiene el ID vendor:device de la GPU. Para NVIDIA: verifica que el BDF ya no está en /etc/proxmenux/vfio-bind.bdfs y que /etc/udev/rules.d/10-proxmenux-vfio-bind.rules no lo lista.",
- "vmFailTitle": "Una VM no arranca tras cambiar una GPU a modo LXC",
- "vmFailBody": "La VM aún tiene entradas hostpci apuntando a una GPU que no puede reclamar. Vuelve a ejecutar el script y elige la política Quitar GPU de la config, o limpia la config a mano:",
- "smiFailTitle": "nvidia-smi falla con 'Driver/library version mismatch' tras volver a LXC",
- "smiFailBody": "Los módulos NVIDIA del host no se recargaron limpiamente. modprobe -r nvidia y luego modprobe nvidia. Si eso falla, reinicia — un reinicio completo siempre limpia el estado residual del binding vfio.",
- "logTitle": "Log de instalación",
- "logBody": "Cada ejecución escribe en /tmp/proxmenux_gpu_switch_mode.log en el host. Adjúntalo cuando pidas ayuda en GitHub."
+ "stillVfioBody": "Un módulo VFIO cargado no demuestra qué controlador usa esta GPU. Revisa la tarjeta y si finalizaron update-initramfs y el reinicio. lsmod | grep vfio solo lista módulos. En AMD / Intel revisa vfio.conf; en NVIDIA, /etc/proxmenux/vfio-bind.bdfs y /etc/udev/rules.d/10-proxmenux-vfio-bind.rules. Corrige las reglas antiguas antes de ejecutar update-initramfs -u -k all y reiniciar.",
+ "vmFailTitle": "Una VM no arranca tras pasar la GPU a LXC",
+ "vmFailBody": "Comprueba si conserva referencias hostpci obsoletas. La política Eliminar la GPU de la configuración 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 modprobe -r nvidia y modprobe nvidia requiere detener los clientes GPU y puede fallar si hay módulos dependientes en uso.",
+ "logTitle": "Registro de ejecución",
+ "logBody": "Cada ejecución escribe en /tmp/proxmenux_gpu_switch_mode.log del host. Adjunta el registro al pedir ayuda en GitHub."
},
"related": {
"heading": "Relacionado",
@@ -145,12 +145,12 @@
{
"label": "Añadir GPU a VM (Passthrough)",
"href": "/docs/hardware/gpu-vm-passthrough",
- "tail": " — setup inicial del modo VM."
+ "tail": " — primera configuración del modo VM."
},
{
"label": "Añadir GPU a LXC",
"href": "/docs/hardware/igpu-acceleration-lxc",
- "tail": " — setup inicial del modo LXC."
+ "tail": " — primera configuración del modo LXC."
},
{
"label": "Instalar drivers NVIDIA (Host)",
@@ -160,10 +160,10 @@
{
"label": "ProxMenux Monitor — pestaña Hardware",
"href": "/docs/monitor/dashboard/hardware",
- "tail": " — la sección Graphics Cards donde cada GPU muestra su modo actual y expone el control inline para cambiarlo."
+ "tail": " — sección Tarjetas gráficas, con el modo actual y el control para cambiarlo."
},
{
- "label": "Comandos de GPU Passthrough",
+ "label": "Comandos de asignación directa de GPU",
"href": "/docs/help-info/gpu-commands",
"tail": " — referencia rápida de comandos."
}
diff --git a/web/messages/fr/docs/hardware/coral-tpu-lxc.json b/web/messages/fr/docs/hardware/coral-tpu-lxc.json
new file mode 100644
index 00000000..f93f60c7
--- /dev/null
+++ b/web/messages/fr/docs/hardware/coral-tpu-lxc.json
@@ -0,0 +1,120 @@
+{
+ "meta": {
+ "title": "Ajouter un Coral TPU à LXC | Documentation ProxMenux",
+ "description": "Partagez un Google Coral TPU USB ou M.2 / PCIe avec un LXC Proxmox. ProxMenux configure périphériques, droits et montages, démarre le conteneur et installe l’environnement Edge TPU sur les distributions compatibles."
+ },
+ "header": {
+ "title": "Ajouter un Coral TPU à LXC",
+ "description": "Partagez un Coral USB Accelerator ou M.2 / Mini-PCIe avec un LXC. ProxMenux configure le conteneur et l’environnement Edge TPU. Cette option concerne uniquement le TPU ; pour Quick Sync, VA-API ou NVENC, utilisez aussi Ajouter un GPU à LXC.",
+ "section": "Matériel : GPU et Coral-TPU"
+ },
+ "intro": {
+ "title": "Fonctionnement",
+ "body": "Écrit la configuration dans /etc/pve/lxc/<ctid>.conf pour USB Accelerator, Coral M.2 / PCIe ou les deux. Démarre le conteneur et installe libedgetpu de Google. Le GPU se configure séparément avec apt-get. Les conteneurs d’autres distributions peuvent choisir le mode passthrough uniquement, sans installation APT de libedgetpu. Utile si l’application inclut déjà cet environnement, comme l’image Docker Frigate.",
+ "downtime": "Prévoyez une courte interruption du conteneur. Le script l’arrête pour modifier sa configuration puis le démarre pour installer l’environnement d’exécution. Ces modifications ne nécessitent pas de redémarrage de l’hôte."
+ },
+ "hostPrep": {
+ "title": "L'hôte doit être préparé en premier",
+ "body": "M.2 / PCIe nécessite gasket/apex sur l’hôte et un périphérique fonctionnel. USB nécessite le périphérique connecté et les droits ; l’application ne doit pas nécessairement tourner sur l’hôte. libedgetpu doit être disponible là où elle s’exécute. Ordre : préparer l’hôte → accès LXC → configurer l’application."
+ },
+ "running": {
+ "heading": "Exécuter le script",
+ "body": "Dans ProxMenux, ouvrez Matériel : GPU et Coral-TPU → Ajouter un Coral TPU à LXC.",
+ "imageAlt": "Option Ajouter un Coral TPU à LXC dans le menu matériel"
+ },
+ "howRuns": {
+ "heading": "Déroulement du script",
+ "body": "Choisissez le conteneur. Le script configure l’accès USB même sans Coral USB connecté, puis ajoute M.2 / PCIe si ce matériel est détecté."
+ },
+ "walkthrough": {
+ "heading": "Étapes de la procédure",
+ "pick": {
+ "title": "Choisir le conteneur LXC",
+ "body": "Le sélecteur affiche les conteneurs admissibles de pct list ; les conteneurs OCI sont masqués et gérés dans Apps du gestionnaire OCI. Choisissez-en un, démarré ou arrêté. Le script l’arrête si nécessaire, le configure puis le démarre pour installer l’environnement d’exécution."
+ },
+ "gpuHint": {
+ "title": "Suggestion facultative pour l’accès GPU",
+ "body": "Si un GPU est détecté mais non configuré pour ce conteneur, un dialogue recommande /dev/coral et monte l’arborescence entière /dev/bus/usb dans le conteneur. La configuration est écrite même sans Coral USB connecté et expose d’autres périphériques que le Coral.",
+ "whyTitle": "Pourquoi monter /dev/bus/usb au lieu de /dev/coral ?",
+ "whyBody": "Le chemin USB, par exemple /dev/bus/usb/001/005, change après reconnexion. Les anciennes versions montaient le lien /dev/coral et pouvaient conserver un chemin périmé. Monter toute l’arborescence USB rend le nœud actuel visible. L’application peut encore devoir le rouvrir."
+ },
+ "pcie": {
+ "title": "Configurer l’accès M.2 / PCIe du LXC",
+ "body1": "Si un Coral M.2 / PCIe est détecté et que /dev/apex_0 existe, le script utilise l’API Proxmox dev pour gérer cgroup2 dans les LXC privilégiés et non privilégiés :",
+ "body2": "Si /dev/apex_0 est absent après create=file et, uniquement lorsque le numéro majeur apex figure dans /proc/devices, une règle cgroup2 classique. Aucun des deux ne crée un périphérique fonctionnel :",
+ "rebootTitle": "Redémarrez l'hôte d'abord si vous venez d'installer des pilotes Coral",
+ "rebootBody": "Le montage de secours ne charge pas apex sur l’hôte. Chargez le pilote ou redémarrez après installation, puis vérifiez le périphérique. Relancez ensuite le script pour appliquer l’entrée moderne et redémarrez le conteneur."
+ },
+ "drivers": {
+ "title": "Démarrer le LXC et installer l’environnement Coral",
+ "body": "Démarre le conteneur et attend jusqu’à 15 secondes son état running, puis utilise pct exec pour lancer l’installation à l’intérieur. L’installateur :",
+ "items": [
+ "Exécute apt-get update.",
+ "Installe les prérequis du dépôt Coral : gnupg, curl, ca-certificates.",
+ "Importe la clé GPG Coral de Google sur /etc/apt/keyrings/coral-edgetpu.gpg (chemin moderne, comme l'installateur hôte utilise) et ajoute le dépôt APT coral-edgetpu-stable avec signed-by=.",
+ "Installe libedgetpu1-std par défaut. Si un Coral M.2 est détecté, propose libedgetpu1-std ou libedgetpu1-max. Ce choix ne configure pas à lui seul la détection dans l’application."
+ ],
+ "noIgpuTitle": "Pourquoi pas de pilotes iGPU ici ?",
+ "noIgpuBody": "Auparavant, il installait aussi va-driver-all, intel-opencl-icd et d’autres paquets Intel pour associer Quick Sync à Coral. Ce mélange causait des erreurs lorsqu’on souhaitait uniquement Coral. L’iGPU se configure désormais avec apt-get sous Debian/Ubuntu. Pour Alpine, Arch, RHEL ou SUSE, détectés via /etc/os-release, propose continuer avec le seul accès matériel ou annuler. Le premier choix configure /etc/pve/lxc/<ctid>.conf sans installer libedgetpu. Ce mode convient si l’application inclut déjà cet environnement, comme Frigate Docker. Sinon, installez libedgetpu selon le lsmod | grep apex. S’il manque, essayez modprobe apex ou redémarrez après l’installation du pilote. Une fois /dev/apex_0 présent sur l’hôte, vérifiez l’entrée de périphérique LXC (relancez le script si seules les entrées de secours ont été écrites) puis redémarrez le conteneur avec pct stop <ctid> && pct start <ctid>.",
+ "replugTitle": "Coral USB disparaît après reconnexion sur un autre port",
+ "replugBody": "Vérifiez que le LXC monte /dev/bus/usb plutôt que le lien /dev/coral. Sa configuration doit contenir lxc.mount.entry: /dev/bus/usb dev/bus/usb ... sans dépendre directement de /dev/coral. Relancez le script si la configuration est ancienne.",
+ "alpineTitle": "Alpine / Arch / RHEL / SUSE : environnement non installé",
+ "alpineBody": "Le mode passthrough uniquement configure le périphérique sans installer libedgetpu. Utilisez un paquet compatible ou compilez les sources ; vérifiez sa disponibilité avant une commande comme apk add sous Alpine. Frigate peut inclure cet environnement. Avec Docker dans le LXC, transmettez aussi M.2 via --device /dev/apex_0:/dev/apex_0 ou montez USB dans Docker ; le montage LXC seul ne suffit pas.",
+ "frigateTitle": "Frigate affiche « Coral EdgeTPU detected but not available »",
+ "frigateBody": "Vérifiez environnement, visibilité et droits de lecture/écriture du processus réel. Pour USB, examinez les droits et l’éventuel groupe plugdev. Pour M.2, inspectez /dev/apex_0 avec ls -l /dev/apex_0. Un nom comme apex dans /etc/group ne suffit pas : GID numériques et correspondances LXC doivent coïncider. Vérifiez aussi si un autre processus utilise déjà le TPU ; ne passez pas d’abord en mode privilégié.",
+ "logsTitle": "Vérifier les journaux de l'hôte et du conteneur",
+ "logsBody": "Sur l’hôte, examinez les messages noyau avec journalctl -k | grep -i -e apex -e gasket -e usb. Dans le LXC, consultez les journaux applicatifs ; avec Docker imbriqué, utilisez docker logs <container>. Droits, environnement absent, connexion USB ou autre processus utilisant le TPU peuvent provoquer l’échec."
+ },
+ "related": {
+ "heading": "Voir aussi",
+ "items": [
+ {
+ "label": "Installer Coral TPU sur l’hôte",
+ "href": "/docs/hardware/install-coral-tpu-host",
+ "tail": " — préalable nécessaire pour utiliser une carte Coral M.2 / PCIe dans un CT."
+ },
+ {
+ "label": "Ajouter un GPU à LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — accès GPU, souvent associé à Coral dans Frigate."
+ }
+ ]
+ }
+}
diff --git a/web/messages/fr/docs/hardware/gpu-vm-passthrough.json b/web/messages/fr/docs/hardware/gpu-vm-passthrough.json
new file mode 100644
index 00000000..1833df31
--- /dev/null
+++ b/web/messages/fr/docs/hardware/gpu-vm-passthrough.json
@@ -0,0 +1,178 @@
+{
+ "meta": {
+ "title": "Ajouter un GPU à une VM | Documentation ProxMenux",
+ "description": "Attribuez un GPU physique à une VM Proxmox. ProxMenux vérifie IOMMU, configure VFIO et les périphériques VM et détecte les conflits avec d’autres VM ou LXC."
+ },
+ "header": {
+ "title": "Ajouter un GPU à une VM (passthrough)",
+ "description": "Détecte les GPU Intel, AMD ou NVIDIA pour l’accès direct depuis une VM. Vérifie IOMMU et les périphériques associés, configure VFIO et la VM et applique ses règles de compatibilité. Vérifiez tous les périphériques concernés.",
+ "section": "Matériel : GPU et Coral-TPU"
+ },
+ "intro": {
+ "title": "Fonctionnement",
+ "body": "Automatise la configuration hôte et hostpci décrite dans la lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "iommu": "Prise en charge IOMMU matérielle et activation dans le micrologiciel si nécessaire (Intel VT-d ou AMD-Vi). Vérifie le système et peut configurer Linux ; ne modifie pas BIOS/UEFI et ne prouve pas qu’un IOMMU inactif y est désactivé.",
+ "q35": "Cet assistant exige q35 et refuse i440fx. Le type de machine est distinct du micrologiciel BIOS/UEFI. Changer le chipset d’une VM existante se planifie et n’est pas automatique.",
+ "q35Check": "qm config VMID | grep machine",
+ "moreGpus": "Prévoyez un autre GPU ou accès alternatif via SSH, IPMI ou série. Réserver le GPU principal peut couper l’affichage local. Pour NVIDIA, une carte hors du groupe IOMMU concerné peut rester sur l’hôte.",
+ "nvidiaInstalled": "Après vfio-pci plutôt qu’à nvidia. Le module nvidia peut rester disponible pour les autres cartes hors du groupe IOMMU concerné. Vérifiez avec nvidia-smi."
+ },
+ "pickOne": {
+ "title": "Attribution exclusive VM ou partage LXC",
+ "body": "Un GPU lié à vfio-pci pour la transmission VM ne peut pas être utilisé simultanément par l'hôte ou un LXC. Si vous avez deux GPU, vous pouvez en consacrer un à chaque chemin. Si vous n'en avez qu'une, choisissez :",
+ "vmItem": "VM : accès direct et exclusif pour cette VM.",
+ "lxcItem": "LXC (intel_iommu=on ou amd_iommu=on et que des groupes IOMMU existent. Si le paramètre est déjà enregistré pour le prochain démarrage, il continue en mode redémarrage en attente ; sinon, une étape confirmée séparément peut l’ajouter avec iommu=pt. Son heuristique de fichier d’amorçage utilise /etc/kernel/cmdline lorsqu’un marqueur de racine ZFS comme root=ZFS= s’y trouve ; sinon, elle utilise /etc/default/grub. Cette heuristique ne prouve pas le chargeur d’amorçage réellement utilisé. Un IOMMU nouvellement configuré prend effet après redémarrage ; vérifiez ensuite les groupes réels.",
+ "tipTitle": "Post-installation déjà configurée ?",
+ "tipBody": "Si la /sys/bus/pci/devices/<pci>/reset_method. APU ou carte dédiée sans FLR est bloquée par la politique de l’assistant ; un sous-type inconnu sans FLR exige confirmation. Cela ne prouve pas une impossibilité universelle.",
+ "État D3cold. L’assistant bloque les cartes AMD signalant D3cold en raison du risque d’échec d’activation. Vérifiez alimentation et micrologiciel.",
+ "Analyse du groupe IOMMU. Lit /sys/kernel/iommu_groups/ et inclut dans le plan de la VM tous les membres sauf les ponts, éventuellement des contrôleurs réseau ou de stockage. Si le groupe contient des périphériques d’un autre slot, le script les liste avant le résumé ; vérifiez que l’hôte n’en a pas besoin. Si IOMMU attend un redémarrage, les groupes réels ne sont pas disponibles et le plan ne contient initialement que la fonction GPU sélectionnée ; vérifiez l’isolation après le redémarrage."
+ ],
+ "audioIntro": "Audio associé. Deux cas selon l’emplacement du contrôleur :",
+ "audioDgpu": "GPU dédié : l’audio HDMI occupe souvent la fonction .1 du même emplacement PCI et est inclus si détecté. Si l’hôte l’utilisait, il en perd l’accès lors de la réservation à la VM.",
+ "audioIgpu": "Sans fonction audio .1 : l’audio peut être sur un autre périphérique comme 00:1f.3. Liste les contrôleurs et pilotes, par exemple snd_hda_intel. Par défaut aucun n’est sélectionné ; choisissez seulement le nécessaire."
+ },
+ "pickVm": {
+ "title": "Choisir la VM cible",
+ "body": "Choisissez la VM. Exige q35 et réutilise les entrées GPU existantes si possible. BIOS/UEFI est un réglage distinct, pas un type de machine. Ne change pas automatiquement chipset ou mode de démarrage du système installé.",
+ "imageAlt": "Sélection de VM par nom, ID et état"
+ },
+ "switchMode": {
+ "title": "Gérer les attributions existantes",
+ "intro": "Le script scanne chaque config VM et chaque config LXC sur l'hôte à la recherche du GPU que vous avez choisi. Trois résultats possibles :",
+ "items": [
+ "GPU disponible. Continue sans retirer d’attribution.",
+ "Attribué à une autre VM. Arrêtez d’abord la source. Vous pouvez garder ses entrées et désactiver le démarrage automatique ou retirer les entrées en conservant le démarrage automatique. Avec vfio-pci déjà actif et sans changement hôte, le transfert VM→VM peut éviter un redémarrage hôte.",
+ "GPU utilisé par LXC. Pour les conteneurs ordinaires, choisissez garder la configuration GPU et désactiver le démarrage automatique ou retirer la configuration du périphérique GPU en conservant le démarrage automatique. Le retrait supprime les entrées devN et, pour AMD/Intel, aussi les anciennes règles /dev/dri lxc.mount.entry et lxc.cgroup2.devices.allow. Les conteneurs OCI conservent leur configuration et sont arrêtés avec le démarrage automatique désactivé ; retirez leur GPU via OCI manager Apps. La détection des conflits se fait par famille de périphériques GPU et peut inclure d’autres cartes de cette famille."
+ ],
+ "imageAlt": "Boîte de dialogue offrant de supprimer le GPU d'un LXC avant de l'assigner au VM",
+ "smartTitle": "Vérifier l’audio associé au retrait du GPU",
+ "smartBody": "Propose ensuite une liste d’audio potentiellement inutilisé dans la VM source. Décochez ce qui reste nécessaire. Par exemple, peut conserver 02:00.1 et proposer de retirer 00:1f.3. La liste détermine les suppressions supplémentaires, sans garantie universelle d’association audio/affichage."
+ },
+ "audioPick": {
+ "title": "Sans audio .1, sélectionner les contrôleurs nécessaires",
+ "body": "Pour les GPU dont l’audio est séparé, une liste présente les contrôleurs audio PCI et leurs pilotes, hors groupe IOMMU déjà inclus. Choisissez seulement ceux nécessaires à la VM, ou aucun.",
+ "imageAlt": "Boîte de dialogue de liste de contrôle avec chaque contrôleur audio PCI hôte (BDF + pilote) lorsque le GPU n'a pas d'audio associé .1",
+ "warnTitle": "Ne sélectionnez pas l’audio nécessaire à l’hôte",
+ "warnBody": "Attribuer l’audio peut retirer l’accès à l’hôte ; le contrôleur ne peut pas appartenir à une autre VM active simultanément. Laissez l’audio facultatif non sélectionné si inutile et vérifiez ses attributions. Le bip de console ne vient pas nécessairement du PCI audio."
+ },
+ "summary": {
+ "title": "Examiner le résumé de la confirmation",
+ "body": "Vérifiez le plan final de l’hôte et de la VM, et annulez s’il est incorrect. Il affiche le groupe IOMMU et son nombre de périphériques ; les membres d’un autre slot sont listés à l’étape précédente. L’annulation empêche les changements principaux, sans annuler une modification de la configuration d’amorçage IOMMU confirmée séparément auparavant.",
+ "imageAlt": "Résumé des modifications prévues sur hôte et VM"
+ },
+ "hostApply": {
+ "title": "Les changements d'hôte sont appliqués",
+ "intro": "La phase d’application modifie hôte et VM. Le nettoyage audio peut encore demander un choix. Modifications possibles :",
+ "items": [
+ "/etc/modules — ajoute vfio, vfio_iommu_type1, vfio_pci (plus vfio_virqfd sur les noyaux < 6.2).",
+ "/etc/modprobe.d/vfio.conf — AMD/Intel : options vfio-pci ids=<vendor:device,...> disable_vga=1. NVIDIA : softdep nvidia pre: vfio-pci (_drm/_modeset/_uvm) ; la liaison réelle se fait par BDF. AMD ajoute l’ordre de chargement softdep: vfio-pci → radeon/amdgpu.",
+ "Écrit /etc/modprobe.d/iommu_unsafe_interrupts.conf et kvm.conf avec allow_unsafe_interrupts=1 et ignore_msrs=1. Réglages du script, pas des exigences universelles Windows/macOS ; les interruptions non sûres réduisent la protection du remappage.",
+ "/etc/modprobe.d/blacklist.conf: NVIDIA — nouveau/lbm-nouveau; AMD — radeon + amdgpu; Intel — i915. Ces règles globales au fabricant peuvent toucher d’autres cartes utilisant le même pilote. Le module nvidia est bloqué uniquement via /etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf lorsque toutes les NVIDIA de l’hôte sont réservées à VFIO.",
+ "/etc/udev/rules.d/10-proxmenux-vfio-bind.rules + /etc/proxmenux/vfio-bind.bdfs — NVIDIA seulement. Applique ATTR'{'driver_override'}'=\"vfio-pci\" au PCI ADD des BDF enregistrés, y compris les fonctions du groupe IOMMU concerné. Hors de ces groupes, nvidia peut rester actif. La politique BDF ne divise pas les groupes matériels.",
+ "AMD seulement. Tente d’extraire la ROM de /sys/bus/pci/.../rom ou ACPI VFCT vers /usr/share/kvm/vbios_<vendor>_<device>.bin. En cas de réussite, la VM utilise romfile=. Une extraction valide ne garantit pas la réussite de l’initialisation du GPU.",
+ "NVIDIA seulement. Arrête et désactive nvidia-persistenced, nvidia-powerd, nvidia-fabricmanager seulement si toutes les NVIDIA sont réservées à VFIO. En usage mixte, conserve les services et nvidia pour les cartes natives.",
+ "update-initramfs -u -k all — ne fonctionne que si l'un des éléments ci-dessus a réellement changé."
+ ]
+ },
+ "vmApply": {
+ "title": "La configuration VM est appliquée via qm set",
+ "body": "La configuration VM à /etc/pve/qemu-server/<vmid>.conf est mise à jour via qm set (jamais par sed):",
+ "after1": "Ajoute x-vga=1 pour AMD et NVIDIA, pas Intel. C’est la politique du script, pas la preuve que tous les iGPU Intel manquent de micrologiciel ou que ce réglage bloque toujours.",
+ "after2": "D'autres lignes hostpciN sont jointes si le groupe IOMMU du GPU contient d'autres appareils que vous devez transmettre ensemble."
+ },
+ "reboot": {
+ "title": "Redémarrer si la modification hôte l’exige",
+ "body": "Suivez le redémarrage demandé si démarrage ou pilotes changent et vérifiez la liaison active avant de lancer la VM. La configuration enregistrée ne prouve pas son activation. VM→VM avec VFIO correct peut éviter de redémarrer l’hôte.",
+ "imageAlt": "Écran sommaire montrant ce qui a été changé, suivi d'une invite de redémarrage"
+ }
+ },
+ "vendors": {
+ "heading": "Notes par fabricant",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Conserve un ancien contournement Code 43 : hidden=1, ID NV43FIX dans args, kvm=off. Pas une exigence universelle des GeForce actuels : NVIDIA a activé le passthrough Windows avec R465. Le code peut avoir d’autres causes ; vérifiez GPU et pilote.",
+ "nvidiaMultiHeading": "Prise en charge multi-GPU NVIDIA",
+ "nvidiaMultiBody": "Usage mixte NVIDIA par BDF. Enregistre les fonctions vfio-pci par adresse plutôt que seulement par ID vendor:device. Hors des groupes concernés, peut conserver nvidia ; vérifiez avec nvidia-smi. N’isole pas deux cartes du même groupe.",
+ "amdHeading": "AMD",
+ "amdBody": "Certains GPU AMD échouent à se réinitialiser après arrêt VM. L’assistant vérifie les capacités annoncées, pas tous les cycles réels. x-vga=1. qm config VMID | grep -E \"cpu|args\" avec la vraie VMID, puis hidden=1 et hv_vendor_id=NV43FIX. Vérifiez aussi pilote invité, micrologiciel et attribution. Relancer peut quitter si déjà attribué.",
+ "amdResetTitle": "AMD GPU fonctionne une fois, échoue sur le redémarrage VM",
+ "amdResetBody": "Un échec de réinitialisation est une cause possible. Redémarrer ou couper/rétablir l’alimentation peut aider temporairement. Vérifiez la compatibilité et le chargement précoce de vendor-reset ; softdep amdgpu pre: vendor-reset seul ne garantit pas un chargement avant VFIO. RadeonResetBugFix exige aussi un GPU compatible.",
+ "stuckBootTitle": "VM démarrage bloqué / GPU non détecté",
+ "stuckBootBody": "Consultez l’adresse réelle avec lspci -nnk -s PCI_ADDRESS ; attendez Kernel driver in use: vfio-pci. Remplacez PCI_ADDRESS. Si le pilote natif reste actif, vérifiez la politique de liaison, pas seulement /etc/modprobe.d/blacklist.conf ; NVIDIA utilise les BDF. Lisez dmesg | grep vfio. Après correction, update-initramfs -u -k all puis redémarrage prévu.",
+ "darkTitle": "La console d'hôte devient sombre après le redémarrage et je ne peux pas SSH",
+ "darkBody": "Un écran noir ne prouve pas l’arrêt de l’hôte. Si SSH échoue aussi, vérifiez réseau et contrôleurs inclus dans le groupe IOMMU. Récupérez l’accès via IPMI, série ou environnement de secours ; examinez /etc/pve/qemu-server/<vmid>.conf et annulez seulement les attributions/règles concernées. Ne supprimez pas les autres réglages.",
+ "logTitle": "Vérifiez le journal d'installation",
+ "logBody": "Chaque exécution écrit /tmp/add_gpu_vm.log. Joignez le journal aux demandes d’aide."
+ },
+ "revert": {
+ "heading": "Annuler manuellement les modifications",
+ "intro": "Arrêtez la VM et retirez seulement ses attributions PCI concernées dans Matériel ou avec l’index explicite ci-dessous. Cela ne rend pas encore le GPU au pilote hôte. Utilisez Changer le mode GPU pour cette transition et vérifiez les invités concernés."
+ },
+ "related": {
+ "heading": "Voir aussi",
+ "items": [
+ {
+ "label": "Installer les pilotes NVIDIA (host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — préparer le pilote des cartes gardées sur l’hôte ; un GPU lié à VFIO ne peut pas l’utiliser simultanément."
+ },
+ {
+ "label": "Ajouter un GPU à LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": "— modèle alternatif: partager le GPU avec plusieurs conteneurs au lieu de le consacrer à un VM."
+ },
+ {
+ "label": "Changer le mode GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — basculer le même GPU entre partage et attribution exclusive."
+ },
+ {
+ "label": "commandes GPU Passthrough",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — lspci, vérification d’IOMMU et référence de qm set hostpci."
+ }
+ ]
+ }
+}
diff --git a/web/messages/fr/docs/hardware/igpu-acceleration-lxc.json b/web/messages/fr/docs/hardware/igpu-acceleration-lxc.json
new file mode 100644
index 00000000..437226db
--- /dev/null
+++ b/web/messages/fr/docs/hardware/igpu-acceleration-lxc.json
@@ -0,0 +1,185 @@
+{
+ "meta": {
+ "title": "Ajouter un GPU à LXC | Documentation ProxMenux",
+ "description": "Partagez un GPU Intel, AMD ou NVIDIA avec LXC. ProxMenux configure périphériques, groupes et bibliothèques selon la distribution ; l’application doit prendre en charge et configurer l’accélération."
+ },
+ "header": {
+ "title": "Ajouter un GPU à LXC",
+ "description": "Partage l’accès GPU avec LXC via les périphériques de l’hôte. Le pilote reste sur l’hôte ; les applications nécessitent des bibliothèques compatibles et leur propre configuration.",
+ "section": "Matériel : GPU et Coral-TPU"
+ },
+ "intro": {
+ "title": "Fonctionnement",
+ "body": "Ajoute des entrées dev<N> à /etc/pve/lxc/<ctid>.conf pour les nœuds /dev/dri/*, /dev/kfd ou /dev/nvidia* concernés. Démarre le conteneur, installe les paquets userspace de sa distribution et, pour Intel/AMD, aligne les groupes video et render. L’accélération des applications exige toujours matériel, bibliothèques et configuration d’application compatibles."
+ },
+ "compare": {
+ "heading": "Partage LXC ou attribution directe à une VM",
+ "intro": "LXC partage le noyau et peut partager le GPU entre hôte et conteneurs. Avec une lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "vfio": "Le GPU ne doit pas être lié à vfio-pci. Il nécessite le pilote natif de l’hôte. S’il est attribué à une VM, le script propose dev<N> dans la configuration LXC et, sur les conteneurs non privilégiés, aligne les GIDs video et render entre l'hôte et le conteneur de sorte que les nœuds de périphérique GPU soient accessibles de l'intérieur sans que vous ayez à éditer manuellement lxc.idmap."
+ },
+ "running": {
+ "heading": "Exécuter l’installateur",
+ "body": "Ouvrez ProxMenux et choisissez Matériel : GPU et Coral-TPU → Ajouter un GPU à LXC.",
+ "imageAlt": "Option du menu pour ajouter un GPU à LXC"
+ },
+ "howRuns": {
+ "heading": "Déroulement du script",
+ "body": "Choisissez conteneur et familles GPU, puis passez les contrôles. Le traitement arrête et modifie ensuite le conteneur sans confirmation finale supplémentaire. Le nettoyage VFIO facultatif est confirmé séparément et peut modifier l’hôte auparavant."
+ },
+ "walkthrough": {
+ "heading": "Étapes de la procédure",
+ "detect": {
+ "title": "Détecter les GPU hôtes",
+ "body": "Cherche les contrôleurs GPU avec lspci. Pour NVIDIA, vérifie le module nvidia et nvidia-smi ; la version détectée détermine l’installateur .run du conteneur.",
+ "tipTitle": "NVIDIA pas prêt?",
+ "tipBody": "Si le module ou NVIDIA ne fonctionne pas sur l’hôte, utilisez d’abord /dev/dri/* ou /dev/nvidia*. Propose /etc/pve/lxc/<ctid>.conf. Les entrées numérotées dev<N> portent le GID hôte de video ou render. Les lignes bind lxc.mount.entry existantes pour /dev/dri sont remplacées par des entrées dev: ; vérifiez la configuration et les droits obtenus.",
+ "body2": "Exemple après Intel + NVIDIA sur le même conteneur:"
+ },
+ "installDrivers": {
+ "title": "Démarrer le conteneur et installer les pilotes à l'intérieur",
+ "body": "Démarre le conteneur et attend environ 30 secondes au maximum que pct exec réponde. Détecte la distribution via /etc/os-release et installe les paquets adaptés.",
+ "headerDistro": "Distribution",
+ "headerInt": "Intel / AMD",
+ "headerNvidia": "NVIDIA",
+ "rows": [
+ {
+ "distro": "Alpine",
+ "intel": "apk add mesa-va-gallium intel-media-driver libva-utils",
+ "nvidia": "apk add nvidia-utils"
+ },
+ {
+ "distro": "Arch / Manjaro",
+ "intel": "pacman -Sy intel-media-driver mesa libva-utils",
+ "nvidia": "pacman -Sy nvidia-utils"
+ }
+ ],
+ "debianDistro": "Debian / Ubuntu / autres",
+ "debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo",
+ "debianNvidia": "Extrait .run sur l’hôte → pct push → installe avec --no-kernel-modules --no-dkms.",
+ "whyTitle": "Pourquoi utiliser l’installateur NVIDIA .run sous Debian",
+ "whyBody": "Les paquets peuvent ne pas correspondre à l’hôte. Les bibliothèques doivent correspondre au module hôte chargé pour NVML et nvidia-smi. Debian/glibc utilise le .run de cette version en cache, l’extrait et l’archive sur l’hôte, le transfère avec pct push et installe avec --no-kernel-modules --no-dkms. Alpine et Arch utilisent leurs dépôts ; vérifiez les versions."
+ },
+ "alignGids": {
+ "title": "Aligner les GID et restaurer l'état",
+ "body1": "Pour Intel/AMD, lit les GID hôte de video et render, avec 44/104 uniquement comme valeurs de secours, puis modifie /etc/group dans le conteneur pour qu’ils correspondent ; les exécutions NVIDIA seul sautent cette étape. Des entrées comme video:44 et render:104 sont des exemples, pas des ID universels. Vérifiez l’appartenance de l’application aux groupes et les droits effectifs sur les périphériques.",
+ "body2": "À la fin normale, un conteneur initialement arrêté est de nouveau arrêté ; un conteneur actif reste actif. En cas d’échec de démarrage ou d’installation, vérifiez l’état final et le journal."
+ }
+ },
+ "vendors": {
+ "heading": "Notes par fabricant",
+ "intelHeading": "Intel iGPU",
+ "intelBody": "L’accélération multimédia Intel, dont Quick Sync, dépend de la génération du GPU, des codecs et de la configuration de l’application. Le script partage ceux de /dev/dri/card0, card1, renderD128 et renderD129 qui existent ; les autres numéros de nœud ne sont pas ajoutés. L’hôte doit déjà les fournir via son pilote natif, par exemple i915.",
+ "amdHeading": "AMD",
+ "amdBody": "AMD utilise DRI pour Mesa/VA-API. Si /dev/kfd existe sur l’hôte, le partage aussi. ROCm/OpenCL exige matériel et bibliothèques compatibles ; partager le périphérique n’installe pas toute la pile ROCm.",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Partage les périphériques /dev/nvidia*. La concordance des versions est essentielle pour nvidia-smi. Debian/glibc utilise le .run de la version hôte, Alpine/Arch leurs dépôts. Sous 2048 MiB de RAM configurée, la procédure Debian propose une hausse temporaire puis restaure la valeur ; exige aussi 1500 MiB libres sur disque.",
+ "updateTitle": "Après mise à jour NVIDIA sur l’hôte, vérifiez les bibliothèques LXC",
+ "updateBody": "D’anciennes bibliothèques peuvent provoquer une erreur dans nvidia-smi. L’.run en cache sert à Debian/glibc, mais l’ajout peut quitter si tous les périphériques existent déjà.",
+ "denyTitle": "Autorisation refusée sur /dev/dri/renderD128 à l'intérieur du conteneur",
+ "denyBody": "Vérifiez périphérique et droits numériques de render, puis l’appartenance de l’utilisateur à render. Si disponible, ajoutez-le à render avec usermod -aG render <user> en remplaçant le marqueur par le compte réel. Redémarrez sa session. Changer de privilèges n’est pas une solution générale.",
+ "vainfoTitle": "vainfo dit: VA-API version 1.xx; a échoué à initialiser",
+ "vainfoBody": "Vérifiez accès et pilote VA-API. Les noms varient selon la distribution : par exemple intel-media-driver pour les Intel récents pris en charge, i965-va-driver pour les anciens compatibles, mesa-va-drivers pour AMD. Le message seul ne prouve pas un paquet manquant.",
+ "logTitle": "Journal d’installation",
+ "logBody": "Chaque exécution écrit /tmp/add_gpu_lxc.log sur l’hôte. Joignez le journal aux demandes d’aide."
+ },
+ "related": {
+ "heading": "Voir aussi",
+ "items": [
+ {
+ "label": "Installer les pilotes NVIDIA (host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — installez le pilote hôte avant de partager NVIDIA."
+ },
+ {
+ "label": "Ajouter GPU à VM (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — solution pour réserver un GPU à une VM."
+ },
+ {
+ "label": "Changer le mode GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — basculer le GPU entre partage LXC et attribution VM."
+ },
+ {
+ "label": "commandes GPU Passthrough",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": "— référence rapide pour les commandes shell connexes."
+ }
+ ]
+ }
+}
diff --git a/web/messages/fr/docs/hardware/install-coral-tpu-host.json b/web/messages/fr/docs/hardware/install-coral-tpu-host.json
new file mode 100644
index 00000000..82ea0831
--- /dev/null
+++ b/web/messages/fr/docs/hardware/install-coral-tpu-host.json
@@ -0,0 +1,203 @@
+{
+ "meta": {
+ "title": "Installer Coral TPU sur l’hôte | Documentation ProxMenux",
+ "description": "Installe les composants Coral sur Proxmox VE selon le matériel détecté : gasket/apex avec DKMS pour M.2 / Mini-PCIe, libedgetpu1-std pour USB. Exécute les deux procédures si les deux types sont détectés."
+ },
+ "header": {
+ "title": "Installer Coral TPU sur l’hôte",
+ "description": "Préparez l’hôte Proxmox pour Coral et le partage LXC. Détecte M.2 / Mini-PCIe, USB ou les deux, puis installe les modules DKMS pour PCIe et l’environnement Google Edge TPU pour USB.",
+ "section": "Matériel : GPU et Coral-TPU"
+ },
+ "intro": {
+ "title": "Fonctionnement",
+ "body": "Un installateur unique détectant le matériel. PCIe utilise gasket et apex avec DKMS ; les compilations futures nécessitent sources et en-têtes compatibles. USB utilise libedgetpu1-std. Les deux procédures s’exécutent si les deux types sont détectés. L’environnement USB doit être là où tourne l’application ; il n’est pas nécessairement requis sur l’hôte pour un usage LXC seul."
+ },
+ "which": {
+ "heading": "Quel Coral ai-je ?",
+ "body": "Les modèles PCIe et USB diffèrent par leur format et leurs besoins. Le script gère les deux ; identifiez votre périphérique avant de le lancer.",
+ "headerForm": "Facteur de forme",
+ "headerDetect": "Détection",
+ "headerInstall": "Type d’installation",
+ "headerReboot": "Redémarrer ?",
+ "pcieForm": "M.2 / Mini-PCIe",
+ "pcieFormSub": "(cartes M.2 avec un ou deux Edge TPU)",
+ "pcieDetect": "Identifiant fabricant PCI 1ac1",
+ "pcieInstall": "Module noyau (gasket + apex) via DKMS",
+ "pcieReboot": "Oui",
+ "usbForm": "Accélérateur USB",
+ "usbFormSub": "(petit dongle en plastique)",
+ "usbDetect": "USB 1a6e:089a (non programmé) / 18d1:9302 (programmé)",
+ "usbInstall": "Environnement utilisateur libedgetpu1-std du dépôt APT Google",
+ "usbReboot": "Non"
+ },
+ "prereqs": {
+ "title": "Avant de commencer",
+ "coral": "Un Coral connecté (M.2, Mini-PCIe ou USB) pour installer. Sans matériel détecté, le script peut nettoyer ou retirer une installation existante, mais n’installe pas de nouvelle prise en charge matérielle.",
+ "coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
+ "internet": "Accès à Internet sur l’hôte pour cloner le pilote PCIe depuis GitHub ou télécharger libedgetpu1-std depuis le dépôt APT Google pour USB.",
+ "headers": "En-têtes du noyau disponibles via APT : proxmox-headers-$(uname -r). Requis seulement pour PCIe/M.2 ; le script les installe.",
+ "reboot": "Prévoyez un redémarrage pour PCIe. Le script tente de charger les modules compilés ; redémarrer vérifie aussi leur chargement automatique."
+ },
+ "hostPrepTip": {
+ "title": "Cela ne prépare que l'hôte",
+ "body": "Prépare l’hôte pour accéder au périphérique, sans configurer ni tester l’application. Pour utiliser Coral dans une application compatible comme Frigate, suivez 0x1ac1 dans /sys/bus/pci/devices/*/vendor et utilise lsusb pour USB. Il existe deux identifiants USB selon l’état du micrologiciel :",
+ "items": [
+ "1a6e:089a — Global Unichip, état non programmé, avant le chargement du micrologiciel par l’environnement d’exécution.",
+ "18d1:9302 — Google, état programmé, après chargement du micrologiciel."
+ ],
+ "outro": "Sans Coral détecté ni installation existante, le script affiche un message et se termine. Des composants présents peuvent ouvrir le menu de nettoyage ou de suppression."
+ },
+ "prompt": {
+ "title": "Confirmation de l’installation",
+ "body": "Avant l’installation, une boîte de dialogue présente les périphériques et composants prévus. Annuler ignore l’installation. Le nettoyage facultatif des anciens composants possède sa propre confirmation préalable.",
+ "imageAlt": "Résumé des périphériques Coral et des étapes d’installation"
+ },
+ "pcie": {
+ "title": "PCIe : modules gasket et apex via DKMS",
+ "body": "Exécuté uniquement pour un Coral PCIe/M.2 détecté. Compile les modules pour le noyau actuellement exécuté sur l’hôte.",
+ "items": [
+ "Nettoyage. Tout paquet gasket-dkms existant est supprimé avant la recompilation ; s’il est dans un état de paquet défectueux, le script force sa suppression et sa purge.",
+ "Dépendances de compilation : git, dkms, build-essential, proxmox-headers-$(uname -r)."
+ ],
+ "cloneIntro": "Clone les sources du pilote. Préfère no_llseek par noop_llseek dans les sources de secours.",
+ "Noyau 6.13 ou supérieur : transforme l’argument de MODULE_IMPORT_NS(DMA_BUF) en chaîne littérale."
+ ],
+ "afterItems": [
+ "Copie les sources dans /usr/src/gasket-1.0/, génère dkms.conf et les enregistre avec dkms add.",
+ "Compile et installe : dkms build, puis dkms install. En cas d’échec, affiche les 50 dernières lignes de make.log si disponible.",
+ "Crée le groupe apex et les règles udev (/etc/udev/rules.d/99-coral-apex.rules) pour attribuer le groupe à /dev/apex_*.",
+ "Tente de charger les modules : modprobe gasket et modprobe apex."
+ ],
+ "imageAlt": "Compilation DKMS et chargement des modules gasket/apex"
+ },
+ "usb": {
+ "title": "USB : environnement Edge TPU de Google",
+ "body": "Ne fonctionne que si un accélérateur USB a été détecté. Bien plus simple :",
+ "items": [
+ "Ajoute la clé GPG Google dans /etc/apt/keyrings/coral-edgetpu.gpg.",
+ "Ajoute le dépôt APT dans /etc/apt/sources.list.d/coral-edgetpu.list ; signed-by= limite la vérification à son trousseau. Il s’agit du format .list sur une ligne, pas du format deb822 .sources.",
+ "Installe libedgetpu1-std, l’environnement Edge TPU aux performances standard.",
+ "Recharge udev et applique les règles du paquet au périphérique USB."
+ ],
+ "stdTitle": "Pourquoi libedgetpu1-std et pas libedgetpu1-max ?",
+ "stdBody": "Le paquet max active la fréquence maximale prise en charge, avec davantage de performances, de consommation et de chaleur. Vérifiez le refroidissement et les conditions d’utilisation. Les paquets sont mutuellement exclusifs ; changez avec apt install libedgetpu1-max."
+ },
+ "reboot": {
+ "title": "Redémarrage proposé après l’installation PCIe",
+ "body": "Après PCIe, propose un redémarrage. Le script a tenté modprobe ; vérifiez les modules et /dev/apex_0 avec le groupe apex. Un redémarrage planifié vérifie le chargement automatique. USB seul ne demande pas de redémarrer l’hôte.",
+ "imageAlt": "Résumé et proposition de redémarrage après installation PCIe"
+ }
+ },
+ "legacyCleanup": {
+ "heading": "Nettoyer l’ancien gasket-dkms sur les hôtes utilisant seulement USB",
+ "intro": "Si aucun Coral PCIe/M.2 n’est détecté mais qu’une ancienne installation de gasket-dkms existe, propose un nettoyage facultatif avec confirmation.",
+ "items": [
+ "Si un Coral PCIe/M.2 est détecté, suit la procédure normale de recompilation DKMS et ne propose pas ce nettoyage.",
+ "Purge gasket-dkms, supprime les anciennes entrées DKMS et sources gasket, puis répare l’état en attente de dpkg/APT.",
+ "Conserve les paquets USB libedgetpu1-std et libedgetpu1-max, donc le Coral USB garde son environnement d’exécution.",
+ "Le script vérifie que le paquet héritage a disparu et que la gestion du paquet est saine avant de signaler le succès."
+ ],
+ "warningTitle": "Confirmez d'abord le matériel",
+ "warningBody": "Si un Coral PCIe/M.2 attendu n’apparaît pas, annulez le nettoyage et vérifiez carte, emplacement et micrologiciel."
+ },
+ "reinstallUninstall": {
+ "heading": "Réinstaller ou désinstaller",
+ "intro": "Si une installation PCIe avec gasket-dkms, USB avec libedgetpu1-std/libedgetpu1-max ou les deux est détectée, affiche un menu d’actions.",
+ "imageAlt": "Menu pour réinstaller, mettre à jour ou désinstaller Coral",
+ "imageCaption": "Le menu apparaît si un composant existe : entrée DKMS gasket, paquet libedgetpu1-* ou périphériques /dev/apex_*.",
+ "reinstallHeading": "Réinstaller / mettre à jour",
+ "reinstallBody": "Suit l’installation normale : recompile après changement de noyau ou met à jour libedgetpu1-* depuis Google. Nettoie d’abord l’ancien état DKMS pour qu’une installation échouée ne bloque pas la compilation.",
+ "uninstallHeading": "Désinstaller — ce qui est enlevé",
+ "uninstallIntro": "Nécessite une confirmation. Les applications LXC utilisant /dev/apex_* peuvent perdre l’accès pendant la suppression ou après redémarrage. Étapes :",
+ "uninstallItems": [
+ "Tente de décharger apex et gasket ; leur utilisation peut empêcher le retrait.",
+ "Supprime chaque entrée DKMS enregistrée gasket/<version> afin que les modules ne reviennent pas sur le prochain noyau installé.",
+ "Purge gasket-dkms, libedgetpu1-std et libedgetpu1-max, puis exécute apt-get autoremove --purge.",
+ "Supprime /etc/udev/rules.d/99-coral-apex.rules et restaure le groupe par défaut de 60-gasket-dkms.rules si ce fichier existe encore.",
+ "Vérifie les membres supplémentaires de apex. Si la liste est vide, tente de supprimer le groupe ; sinon conserve apex et liste ses membres. Ce n’est pas une vérification complète des utilisateurs dont c’est le groupe principal.",
+ "Supprime la liste de dépôts /etc/apt/sources.list.d/coral-edgetpu.list, l’ancien coral-cloud.list et les anciens trousseaux nommés coral-edgetpu-archive-keyring.gpg. Le trousseau actuel /etc/apt/keyrings/coral-edgetpu.gpg n’est pas supprimé par cette séquence.",
+ "Propose un redémarrage seulement si PCIe était installé pour retirer les modules encore actifs. USB seul ne nécessite pas de redémarrage."
+ ],
+ "lxcWarnTitle": "Récipients LXC avec passage apex",
+ "lxcWarnBody": "Retirer les composants de l’hôte peut interrompre l’accès LXC. Prévoyez une maintenance si des applications compatibles comme Frigate dépendent de ce Coral."
+ },
+ "updates": {
+ "heading": "Notifications de mise à jour",
+ "intro": "ProxMenux recense les composants Coral et vérifie PCIe/M.2 et USB séparément. Si les deux sont présents, chaque variante utilise sa propre source de versions :",
+ "headerVariant": "Variante",
+ "headerTracked": "Version enregistrée",
+ "headerUpstream": "Source des versions",
+ "pcieVariant": "PCIe / M.2",
+ "pcieTracked": "D’abord l’étiquette enregistrée après installation, puis la version d’un paquet gasket-dkms sain, sinon celle du module DKMS. Cette dernière n’indique pas le niveau de correctifs du fork.",
+ "pcieUpstream": "Dernière étiquette GitHub de feranick/gasket-driver ; cache de sept jours et comparaison du numéro de compilation.",
+ "usbVariant": "USB",
+ "usbTracked": "libedgetpu1-std ou libedgetpu1-max version apt",
+ "usbUpstream": "Candidat local apt-cache policy (Google Coral apt repo)",
+ "outro": "Si une nouvelle version est détectée, Monitor envoie coral_driver_update_available sur les canaux activés. La notification renvoie à l’installateur : choisissez Réinstaller / mettre à jour.",
+ "antiTitle": "Sans notifications répétitives",
+ "antiBody": "Une notification par variante lorsque la version disponible change. Pas de répétition à chaque contrôle quotidien ; un nouvel avis attend une version ultérieure.",
+ "rebootTitle": "Mises à jour PCIe : prévoyez un redémarrage",
+ "rebootBody": "Le module PCIe recompilé doit être chargé ; un redémarrage planifié vérifie aussi le chargement automatique. La bibliothèque USB ne nécessite pas de redémarrer l’hôte, mais les applications utilisant l’ancienne version peuvent devoir redémarrer."
+ },
+ "manual": {
+ "heading": "Procédure manuelle équivalente",
+ "intro": "Ces commandes présentent les principales étapes de chaque procédure pour consultation ou exécution manuelle.",
+ "pcieHeading": "PCIe / M.2 (gasket + apex via DKMS)",
+ "usbHeading": "USB (environnement libedgetpu)"
+ },
+ "verification": {
+ "heading": "Vérification",
+ "pcieHeading": "PCIe / M.2",
+ "usbHeading": "USB"
+ },
+ "troubleshoot": {
+ "heading": "Dépannage",
+ "dkmsFailTitle": "Échec de compilation DKMS après mise à jour du noyau",
+ "dkmsFailBody": "Des en-têtes manquants sont une cause possible. Vérifiez proxmox-headers-$(uname -r) avec dpkg -l proxmox-headers-$(uname -r) et installez-les si nécessaire. Consultez le journal pour les incompatibilités du noyau. Relancer appelle cleanup_broken_gasket_dkms, sans garantir la compatibilité avec tout noyau.",
+ "apexMissTitle": "/dev/apex_0 manquant après redémarrage",
+ "apexMissBody": "Vérifiez la détection PCIe et la correspondance module/noyau actif. Essayez modprobe apex et consultez dmesg | grep -iE \"apex|gasket\". Compilation, chargement ou configuration de l’emplacement/du micrologiciel peuvent empêcher la création du périphérique.",
+ "lxcMissTitle": "L’hôte voit /dev/apex_0, mais pas le LXC",
+ "lxcMissBody": "Un nœud visible ne prouve pas le fonctionnement. Vérifiez l’accès sur l’hôte, le montage LXC, les règles cgroup et les droits UID/GID. Voir libedgetpu1-std et les droits avec ls -l /dev/bus/usb/*/*. L’utilisateur/groupe mappé de l’application doit pouvoir lire et écrire ; root propriétaire n’est pas une erreur en soi. Après modification, exécutez udevadm control --reload-rules && udevadm trigger puis reconnectez si nécessaire.",
+ "logTitle": "Journal d’installation",
+ "logBody": "Chaque exécution écrit /tmp/coral_install.log. En cas d’échec DKMS, ajoute les 50 dernières lignes de /var/lib/dkms/gasket/1.0/build/make.log si disponible. Joignez le journal à la demande d’aide."
+ },
+ "related": {
+ "heading": "Voir aussi",
+ "items": [
+ {
+ "label": "Ajouter un Coral TPU à LXC",
+ "href": "/docs/hardware/coral-tpu-lxc",
+ "tail": " — donner accès au Coral de l’hôte à un conteneur avec une application compatible."
+ },
+ {
+ "label": "Installer les pilotes NVIDIA (host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — la même démarche pour les GPU NVIDIA."
+ },
+ {
+ "label": "ProxMenux Monitor — Onglet matériel",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — le panneau Coral présente pilote, modules, périphériques et environnement d’exécution, plus la température si un capteur pris en charge la fournit."
+ }
+ ]
+ }
+}
diff --git a/web/messages/fr/docs/hardware/nvidia-host.json b/web/messages/fr/docs/hardware/nvidia-host.json
new file mode 100644
index 00000000..0488c75c
--- /dev/null
+++ b/web/messages/fr/docs/hardware/nvidia-host.json
@@ -0,0 +1,175 @@
+{
+ "meta": {
+ "title": "Installer NVIDIA sur l’hôte | Documentation ProxMenux",
+ "description": "Installez les pilotes propriétaires NVIDIA sur Proxmox VE avec ProxMenux : filtrage GPU, vérifications de compilation et DKMS, persistance, correctif NVENC facultatif et mise à jour des bibliothèques LXC."
+ },
+ "header": {
+ "title": "Installer les pilotes NVIDIA sur l'hôte",
+ "description": "Installez NVIDIA sur l’hôte Proxmox VE. Filtre les branches maintenues selon l’ID PCI du GPU, vérifie la compilation, utilise DKMS, gère nouveau et installe la persistance. Peut aussi actualiser les bibliothèques des LXC utilisant NVIDIA.",
+ "section": "Matériel : GPU et Coral-TPU"
+ },
+ "intro": {
+ "title": "Fonctionnement",
+ "body": "ProxMenux détecte le GPU et propose des branches NVIDIA maintenues incluant son ID PCI. Il bloque nouveau, télécharge l’installateur officiel .run, utilise DKMS, installe nvidia-persistenced, les règles udev et le NVIDIA Container Toolkit, et propose un correctif NVENC facultatif. Les vérifications de compilation portent sur le noyau en cours ; une compilation réussie ne garantit pas que toutes les applications fonctionnent. Les LXC NVIDIA existants se voient proposer une mise à jour des bibliothèques userspace, de version correspondante sauf sous Arch."
+ },
+ "who": {
+ "heading": "C'est pour qui ?",
+ "body": "Pour le traitement vidéo ou le calcul GPU avec Plex, Jellyfin, Frigate, Immich ou Stable Diffusion dans LXC, installez d’abord NVIDIA sur l’hôte Proxmox. L’attribution directe à une VM utilise la procédure VFIO distincte."
+ },
+ "prereqs": {
+ "title": "Avant de commencer",
+ "gpu": "Un GPU NVIDIA installé dans l’hôte. Détection automatique ; cette option ne gère ni AMD ni Intel.",
+ "gpuCheck": "lspci | grep -i nvidia",
+ "notVm": "Le GPU ne doit pas être réservé à une VM via VFIO. L’installateur refuse ce cas pour ne pas perturber l’affectation.",
+ "internet": "Accès Internet sur l’hôte. Télécharge le pilote depuis download.nvidia.com et peut cloner nvidia-persistenced et nvidia-patch depuis GitHub.",
+ "space": "Prévoyez de l’espace dans /opt/nvidia pour .run et de la RAM pour compiler. Le parcours LXC hors Arch vérifie 1500 MiB libres et peut demander temporairement 2048 MiB de RAM si nécessaire, puis restaure la limite précédente. Prévoyez le redémarrage hôte."
+ },
+ "vmWarn": {
+ "title": "GPU réservé à une VM ? Arrêtez ici",
+ "body": "Si un périphérique NVIDIA est lié à vfio-pci, l’installateur quitte, même VM arrêtée. Une réservation n’implique pas une utilisation active. Planifiez le retour au pilote hôte et retirez les anciennes affectations VM/VFIO avant redémarrage et installation."
+ },
+ "running": {
+ "heading": "Exécution de l'installateur",
+ "body": "Ouvrez Hardware Graphics → NVIDIA GPU Driver Installer dans ProxMenux. Le menu dépend de la présence d’un pilote actif.",
+ "imageAlt": "Menu matériel avec l’installateur NVIDIA sélectionné"
+ },
+ "howRuns": {
+ "heading": "Déroulement du script",
+ "body": "Détecte les périphériques, choisit une version et installe. Un nettoyage VFIO confirmé séparément peut précéder l’aperçu. La préparation des dépôts/en-têtes et le téléchargement précèdent le remplacement du pilote ; une seule confirmation finale ne marque pas le début de tous les changements."
+ },
+ "walkthrough": {
+ "detect": {
+ "title": "Détection et aperçu de GPU",
+ "body1": "Affiche les contrôleurs vidéo NVIDIA, l’état du pilote ou « Aucun pilote NVIDIA installé », et les LXC configurés pour NVIDIA avec leur version interne.",
+ "body2": "Vérifiez GPU et versions hôte/conteneurs. Annulez dans l’aperçu si la sélection est inattendue ; un nettoyage VFIO confirmé auparavant a déjà été effectué.",
+ "imageAlt": "Aperçu avant installation : GPU, pilote et LXC configurés pour NVIDIA"
+ },
+ "version": {
+ "title": "Choisissez la version du pilote",
+ "body1": "Filtre les versions de nvidia.com qui incluent l’ID PCI du GPU dans la table des puces compatibles et écarte les versions bêta/développement par heuristiques. <version> — Recommandée privilégie la dernière version de la branche installée, puis Production Branch, puis le numéro compatible le plus élevé.",
+ "body2": "Si le pilote est enregistré comme corrigé via keylase, le sélecteur se limite à la table NVENC. Réinstaller / mettre à jour comporte toujours les confirmations et le choix du correctif ; vérifiez le résultat.",
+ "whyTitle": "Comment la compatibilité du noyau est validée",
+ "whyBody": "Filtre selon les branches maintenues et l’ID PCI, sans matrice noyau/pilote fixe. Une compilation préalable teste le noyau actuel. Un échec confirmé revient au sélecteur ; un test indisponible peut avertir puis continuer. Installation finale et vérification du fonctionnement restent nécessaires.",
+ "imageAlt": "Sélecteur des branches compatibles GPU avec recommandation en premier"
+ },
+ "uninstall": {
+ "title": "Retirer l’ancien pilote avant réinstallation",
+ "body": "Après téléchargement et vérification de l’installateur choisi, retire le pilote précédent. Arrête les services NVIDIA, décharge les modules, retire les entrées DKMS et purge nvidia-* / libnvidia-* / cuda-*. Cela vaut aussi pour une réinstallation confirmée de la même version."
+ },
+ "prepare": {
+ "title": "Préparer le système",
+ "body": "Pendant la préparation, le script :",
+ "items": [
+ "Vérifie les dépôts avant suppression ou installation. Sans abonnement et avec Enterprise uniquement, demande l’accord pour passer à no-subscription ; un refus arrête l’installation.",
+ "Installe pve-headers-$(uname -r) (ou proxmox-headers-$(uname -r)), build-essential et dkms.",
+ "Crée le fichier géré par ProxMenux /etc/modprobe.d/proxmenux-nouveau-blacklist.conf avec blacklist nouveau et options nouveau modeset=0. Enregistre l’éventuel ajout dans blacklist.conf et tente de décharger nouveau.",
+ "Ecrit /etc/modules-load.d/nvidia-vfio.conf avec nvidia et nvidia_uvm afin que les modules se chargent tôt au démarrage."
+ ]
+ },
+ "download": {
+ "title": "Téléchargez et exécutez l'installateur NVIDIA",
+ "body": "Télécharge NVIDIA-Linux-x86_64-<version>.run dans /opt/nvidia et vérifie taille et type exécutable. Ces contrôles de format ne vérifient pas une signature cryptographique. Enregistre DKMS pour les changements de noyau ; sources et noyau doivent rester compatibles.",
+ "imageAlt": "Progression du téléchargement et compilation DKMS de l’installateur NVIDIA"
+ },
+ "persist": {
+ "title": "Service de persistance et règles udev",
+ "body": "Installe /etc/udev/rules.d/70-nvidia.rules pour créer /dev/nvidia* au démarrage. Cela évite qu’un LXC cherche le GPU avant la création des périphériques."
+ },
+ "nvenc": {
+ "title": "Optionnel : appliquer le patch NVENC",
+ "body": "Les limites de sessions NVENC dépendent du GPU et du pilote. nvidia-smi peut signaler « version mismatch ».",
+ "body2": "Debian / Ubuntu et les autres conteneurs glibc reçoivent l’installateur .run extrait avec --no-kernel-modules --no-dkms --no-install-compat32-libs ; la RAM peut temporairement passer à 2 GiB puis être restaurée. Arch, Manjaro et EndeavourOS utilisent pacman -Syu nvidia-utils depuis leurs dépôts, sans fixer la version hôte : vérifiez le résultat. Alpine reçoit le contenu .run extrait via pct push, installe gcompat et binutils avec apk et crée les liens SONAME via readelf. Vérifiez le fonctionnement ; la couche de compatibilité ne garantit pas toutes les bibliothèques sous musl.",
+ "imageAlt": "Dialogue des LXC NVIDIA et de leurs versions pour confirmer la mise à jour"
+ },
+ "reboot": {
+ "title": "Redémarrer",
+ "body": "Après l’installation du pilote, le script reconstruit initramfs pour tous les noyaux ; sa dernière étape propose un redémarrage. Prévoyez ce redémarrage pour vérifier la configuration persistante des modules et la configuration nouveau lors d’un nouveau démarrage, même si le nouveau pilote répond déjà avant le redémarrage."
+ }
+ },
+ "reinstallUninstall": {
+ "heading": "Réinstaller ou désinstaller",
+ "intro": "Si nvidia est chargé et que nvidia-smi renvoie une version, affiche un menu d’actions. Ce critère détecte un pilote actif ; des fichiers peuvent être installés sans module chargé.",
+ "imageAlt": "Menu d'action NVIDIA offert lorsqu'un pilote est déjà installé — deux choix: réinstaller / mettre à jour le pilote, ou désinstaller complètement le pilote NVIDIA",
+ "imageCaption": "Le menu action n'apparaît que lorsqu'un pilote NVIDIA est actuellement actif sur l'hôte.",
+ "reinstallHeading": "Réinstaller / mettre à jour",
+ "reinstallBody": "Choisit une version, prépare dépôts/en-têtes, télécharge et teste la compilation avant le remplacement du pilote. Permet une mise à jour dans la branche maintenue ou un autre choix compatible. Les options de bibliothèques LXC et de correctif NVENC réapparaissent ensuite.",
+ "uninstallHeading": "Désinstaller — ce qui est enlevé",
+ "uninstallIntro": "Après confirmation Oui/Non, retire les composants suivants :",
+ "uninstallItems": [
+ "Arrête et désactive nvidia-persistenced et nvidia-powerd, tente de décharger nvidia_uvm, nvidia_drm, nvidia_modeset et nvidia, puis exécute nvidia-uninstall --silent pour l’installation .run. Les charges de travail LXC dépendant de NVIDIA sont affectées ; des clients actifs peuvent empêcher le déchargement.",
+ "Exécute apt purge sur nvidia-*, libnvidia-*, cuda-* et libcudnn*, supprime l'arborescence des sources DKMS et les dossiers nvidia-persistenced et nvidia-patch sous /opt/nvidia.",
+ "Supprime la configuration de chargement des modules (/etc/modules-load.d/nvidia-vfio.conf) et les entrées de liste noire de nouveau gérées par ProxMenux. Les anciens fichiers ProxMenux de liste noire à deux lignes sont également migrés puis supprimés. Les fichiers modifiés ou indépendants de l’administrateur sont conservés.",
+ "Retire /etc/udev/rules.d/70-nvidia.rules et marque NVENC removed dans le registre des installations gérées ; aucun fichier d’état séparé.",
+ "Reconstruit initramfs pour tous les noyaux, exécute proxmox-boot-tool refresh selon l’amorçage et propose un redémarrage."
+ ],
+ "lxcWarnTitle": "LXC avec accès NVIDIA",
+ "lxcWarnBody": "Retirer le pilote hôte interrompt les applications LXC NVIDIA même si leurs bibliothèques restent installées. Prévoyez une maintenance pour Frigate, Plex, Jellyfin, Ollama et autres applications GPU."
+ },
+ "updates": {
+ "heading": "Notifications de mises à jour",
+ "body": "Le pilote NVIDIA est suivi dans le registre des installations gérées. Au démarrage et toutes les 24 heures, Monitor compare les versions de download.nvidia.com/XFree86/Linux-x86_64/ à celle indiquée par nvidia-smi. Il notifie uniquement les nouvelles versions de maintenance de la branche installée.",
+ "kindsHeading": "Message de mise à jour",
+ "kindsItems": [
+ "Maintenance de la même branche. Exemple : 580.65.06 installée → 580.105.08 disponible. Monitor ne déduit pas la compatibilité noyau entre branches."
+ ],
+ "antiTitle": "Éviter les notifications répétées",
+ "antiBody": "Une notification par nouvelle version, pas à chaque contrôle quotidien. Aucune notification sans version plus récente dans la branche installée.",
+ "applyTitle": "Appliquer la mise à jour",
+ "applyBody": "Monitor signale les mises à jour sans les installer automatiquement. Ouvrez l’installateur, choisissez Réinstaller / mettre à jour et une version compatible, puis terminez compilation et installation. Prévoyez le redémarrage proposé et vérifiez ensuite hôte et bibliothèques LXC."
+ },
+ "verify": {
+ "heading": "Vérification de l'installation",
+ "intro": "Après redémarrage de l’hôte, connectez-vous via SSH ou le shell Proxmox et exécutez :",
+ "after": "Vérifiez le GPU et la version attendue. Des processus peuvent déjà apparaître si des services hôte ou conteneurs démarrés automatiquement utilisent le GPU. Vérifiez ensuite la persistance :",
+ "imageAlt": "Sortie de nvidia-smi sur l'hôte montrant le GPU détecté et la version du pilote installé"
+ },
+ "troubleshoot": {
+ "heading": "Dépannage",
+ "smiFailTitle": "nvidia-smi affiche « NVIDIA-SMI has failed »",
+ "smiFailBody": "Causes possibles : nouveau, en-têtes absents ou incompatibles, sources du pilote incompatibles ou autres erreurs de chargement. Examinez lsmod | grep nouveau, dmesg | grep -i nvidia et les journaux installateur/DKMS. Si la règle nouveau doit être corrigée, vérifiez /etc/modprobe.d/proxmenux-nouveau-blacklist.conf avant update-initramfs -u -k all et redémarrage. Tout échec de compilation ne vient pas des en-têtes.",
+ "lxcMissTitle": "Le conteneur LXC ne peut pas voir le GPU après la mise à jour de l'hôte",
+ "lxcMissBody": "Avant de réinstaller, vérifiez périphériques hôte, droits LXC et version des bibliothèques. Un conflit de versions peut nécessiter le pilote utilisateur correspondant, selon la distribution ; sous glibc, avec --no-kernel-modules. Réinstaller les bibliothèques ne corrige pas les montages ou droits manquants.",
+ "logTitle": "Vérifiez le journal d'installation",
+ "logBody": "L’installation écrit dans /tmp/nvidia_install.log. En cas d’échec, examinez téléchargement, compilation DKMS et services. Joignez le journal au signalement GitHub."
+ },
+ "manualSteps": {
+ "heading": "Vous cherchez les étapes manuelles?",
+ "body": "Voir wget et ./NVIDIA-Linux-...run. Le guide explique les composants sans reproduire exactement l’installateur. La procédure maintenue ProxMenux apporte filtrage GPU, vérification de compilation, mises à jour LXC et contrôles VFIO."
+ },
+ "related": {
+ "heading": "Voir aussi",
+ "items": [
+ {
+ "label": "Ajouter GPU à VM (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — attribuer NVIDIA directement à une VM via VFIO."
+ },
+ {
+ "label": "Ajouter un GPU à LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — partager NVIDIA avec un ou plusieurs conteneurs."
+ },
+ {
+ "label": "Changer de mode GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — basculer entre passthrough VM et partage LXC."
+ },
+ {
+ "label": "ProxMenux Monitor — Onglet matériel",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — fenêtre GPU ouvrant cet installateur et affichant le suivi en temps réel."
+ },
+ {
+ "label": "Commandes de passthrough GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": "— lspci / dmesg / IOMMU / nvidia-smi référence."
+ }
+ ]
+ }
+}
diff --git a/web/messages/fr/docs/hardware/switch-gpu-mode.json b/web/messages/fr/docs/hardware/switch-gpu-mode.json
new file mode 100644
index 00000000..5367aaec
--- /dev/null
+++ b/web/messages/fr/docs/hardware/switch-gpu-mode.json
@@ -0,0 +1,172 @@
+{
+ "meta": {
+ "title": "Changer de mode GPU (VM ↔ LXC) | Documentation ProxMenux",
+ "description": "Basculez un GPU entre VFIO pour VM et pilote natif pour LXC. ProxMenux détecte le pilote, propose des choix pour les invités concernés, retire les affectations audio associées et reconstruit initramfs si la configuration hôte change."
+ },
+ "header": {
+ "title": "Changer de mode GPU (VM ↔ LXC)",
+ "description": "Basculez un GPU attribué entre passthrough VM et partage LXC. ProxMenux gère pilote, VFIO, modules et initramfs, puis demande comment traiter les invités concernés. Vérifiez les choix et la configuration obtenue après redémarrage.",
+ "section": "Matériel : GPU et Coral-TPU"
+ },
+ "intro": {
+ "title": "Fonctionnement",
+ "body": "Avec vfio-pci, le GPU est réservé à une VM. Avec le pilote natif (i915 / amdgpu / nvidia), l’hôte et les LXC peuvent le partager. Changer de mode GPU gère vfio.conf, les blocages de modules et les références des invités, et signale les affectations restantes."
+ },
+ "graphics": {
+ "lxcTitle": "Prêt pour les conteneurs LXC",
+ "lxcDesc": "Pilote natif actif",
+ "vmTitle": "Prêt pour le passthrough VM",
+ "vmDesc": "Pilote VFIO-PCI actif"
+ },
+ "when": {
+ "heading": "Quand devrais-je utiliser ça ?",
+ "intro": "À utiliser si le GPU est déjà attribué et que vous souhaitez changer son usage :",
+ "headerSituation": "Situation actuelle",
+ "headerUse": "Vous utilisez cette page ?",
+ "rows": [
+ {
+ "situation": "GPU libre, jamais attribué : l’utiliser dans une VM.",
+ "useRich": "Non — utilisez vfio-pci ; je veux plutôt l’utiliser dans un LXC.",
+ "useRich": "Oui — cette page."
+ },
+ {
+ "situation": "Le GPU est partagé avec un LXC ; je veux le réserver à une VM.",
+ "useRich": "Oui — cette page."
+ },
+ {
+ "situation": "Je veux retirer toutes les affectations de ce GPU.",
+ "use": "Le mode LXC rend le GPU au pilote hôte ; la politique de conflit VM peut retirer les entrées hostpci, mais les entrées de périphérique LXC doivent être retirées séparément. Le GPU reste associé à un pilote."
+ }
+ ]
+ },
+ "prereqs": {
+ "title": "Avant de commencer",
+ "assigned": "Un GPU déjà attribué à une VM via VFIO ou à un LXC. Pour la première affectation, utilisez Ajouter un GPU à VM / LXC.",
+ "iommu": "IOMMU doit être actif sur l’hôte pour passer au mode VM. Les réglages du firmware et la prise en charge par le noyau comptent tous les deux. Si intel_iommu=on ou amd_iommu=on manque dans le noyau en cours, le script l’ajoute avec iommu=pt à /etc/kernel/cmdline (marqueur de racine ZFS) ou à /etc/default/grub, puis exécute proxmox-boot-tool refresh ou update-grub. Vérifiez les éventuels avertissements et redémarrez si demandé.",
+ "iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
+ "reboot": "Prévoyez un redémarrage. Les changements persistants de pilote et d’amorçage peuvent nécessiter de reconstruire initramfs puis de redémarrer. Le script le demande à la fin.",
+ "knowList": "Identifiez les VM et LXC utilisant le GPU. Le script détecte les références et demande quoi faire pour chaque invité ; connaître la liste facilite la vérification."
+ },
+ "blocklist": {
+ "title": "Tous les GPU ne sont pas sûrs de passer à un VM",
+ "body": "Le script bloque le mode VM pour les identifiants de périphérique 8086:5a84 et 8086:5a85 selon sa politique de compatibilité. Si un GPU sélectionné correspond, il interrompt le passage en mode VM et revient à la sélection du GPU, ou quitte s’il s’agit du seul GPU. Cette liste de blocage n’empêche pas de passer au mode LXC ; d’autres contrôles peuvent encore s’appliquer."
+ },
+ "running": {
+ "heading": "Exécuter le script",
+ "body": "Ouvrez Matériel : GPU et Coral-TPU → Changer de mode GPU (VM ↔ LXC) dans ProxMenux.",
+ "imageAlt": "Option Changer de mode GPU (VM ↔ LXC) du menu matériel"
+ },
+ "howRuns": {
+ "heading": "Déroulement du script",
+ "body": "Le choix du GPU et du sens précède le changement principal. Un nettoyage VFIO séparé peut demander confirmation plus tôt ; les invités concernés ont leurs propres dialogues. Lisez chaque confirmation : une seule validation finale ne couvre pas tous les changements."
+ },
+ "walkthrough": {
+ "heading": "Étapes de la procédure",
+ "detect": {
+ "title": "Détecter les GPU et leur pilote actuel",
+ "body": "Examine les contrôleurs VGA, 3D et Display de l’hôte et consulte /sys/bus/pci/devices/*/driver. Affiche nom, adresse PCI et pilote actuel de chaque GPU pour identifier son mode.",
+ "imageAlt": "Liste de contrôle GPU montrant chaque GPU détecté avec son pilote actuel (vfio-pci / nvidia / amdgpu / i915) et emplacement PCI"
+ },
+ "pickGpu": {
+ "title": "Choisir les GPU à basculer",
+ "body": "Un seul GPU est sélectionné automatiquement. Avec plusieurs, vous pouvez en cocher plusieurs, à condition qu’ils soient dans le même mode. Un mélange de modes demande de restreindre la sélection.",
+ "tipTitle": "Basculer plusieurs GPU ensemble",
+ "tipBody": "Exemple : passer trois NVIDIA en mode VM, puis rendre l’iGPU aux LXC. Deux exécutions avec chacune une cible commune, plutôt qu’une opération par carte."
+ },
+ "direction": {
+ "title": "Examiner l'orientation proposée",
+ "intro": "Basé sur le mode actuel, le script propose le contraire comme cible:",
+ "items": [
+ "VM → LXC : retire l’affectation à vfio-pci pour permettre au pilote natif (nvidia, amdgpu, i915) de prendre en charge le GPU. Pour NVIDIA, supprime les entrées BDF correspondantes de /etc/udev/rules.d/10-proxmenux-vfio-bind.rules au prochain démarrage.",
+ "LXC → VM : prépare l’affectation à vfio-pci. AMD / Intel bloquent le pilote natif et utilisent options vfio-pci ids=…. Pour NVIDIA, nvidia n’est bloqué globalement que si chaque GPU NVIDIA de l’hôte est en VFIO ; sinon, des règles par BDF appliquent driver_override=vfio-pci aux périphériques des groupes IOMMU concernés, et les GPU NVIDIA hors de ces groupes conservent nvidia. Vérifiez chaque membre du groupe avant de basculer."
+ ],
+ "outro": "Confirmez la direction ou annulez."
+ },
+ "conflict": {
+ "title": "Choix pour chaque VM ou LXC concerné",
+ "body": "Vérifie /etc/pve/lxc/*.conf selon les familles de pilotes GPU et /etc/pve/qemu-server/*.conf pour les affectations PCI. La détection LXC ne correspond pas exactement à chaque carte par BDF. Vérifiez les invités détectés et choisissez quoi faire pour chacun :",
+ "headerPolicy": "Politique",
+ "headerEffect": "Effet",
+ "headerWhen": "Quand choisir",
+ "keepPolicy": "Conserver la configuration, désactiver le démarrage automatique",
+ "keepEffect": "pct set CTID -onboot 0 ou qm set VMID -onboot 0. Les entrées GPU sont conservées.",
+ "keepWhen": "Si vous comptez réutiliser l’invité après retour au mode GPU initial. Choix prudent par défaut.",
+ "removePolicy": "Supprimer GPU de la configuration",
+ "removeEffect": "Retire les entrées hostpci / dev identifiées et les références anciennes prises en charge.",
+ "removeWhen": "Pour utiliser l’invité sans GPU. Vérifiez d’abord l’application : le repli sur CPU dépend d’elle, et retirer le périphérique ne la reconfigure pas automatiquement.",
+ "imageAlt": "Dialogue de choix pour chaque VM ou LXC concerné"
+ },
+ "audio": {
+ "title": "Retirer les affectations audio associées en quittant le mode VM",
+ "body1": "De nombreux GPU NVIDIA / AMD proposent l’audio HDMI sur la fonction .1 du même emplacement ; d’autres périphériques audio peuvent être attribués. Retirer le GPU peut laisser des entrées audio hostpci obsolètes. Vérifiez les affectations à conserver.",
+ "body2": "Identifie les adresses BDF audio et propose une liste des affectations à retirer. Supprime aussi leurs identifiants vendor:device de /etc/modprobe.d/vfio.conf, uniquement si aucune autre VM ne les utilise."
+ },
+ "apply": {
+ "title": "Appliquer les changements à l’hôte et aux invités",
+ "body": "Une fois que vous confirmez, le script écrit les modifications côté hôte — vfio.conf, liste noire, modules, et (pour NVIDIA) la règle par BDF udev à /etc/udev/rules.d/10-proxmenux-vfio-bind.rules plus l'état BDF à /etc/proxmenux/vfio-bind.bdfs. Elle applique également la politique de conflit choisie à chaque VM/LXC. Si la configuration de l'hôte a réellement changé, il exécute update-initramfs -u -k all suivi de proxmox-boot-tool refresh; sinon, les deux sont ignorés."
+ },
+ "reboot": {
+ "title": "Redémarrer",
+ "body": "Redémarrez l’hôte pour appliquer la nouvelle affectation persistante. Vous pouvez différer le redémarrage, mais vérifiez le pilote actif avant de lancer l’invité cible : l’ancien peut rester actif jusque-là.",
+ "imageAlt": "Boîte de dialogue résumé listant ce qui a changé, suivie de l'invite de redémarrage"
+ }
+ },
+ "manual": {
+ "heading": "Inspection manuelle",
+ "intro": "Avant VM → LXC, examinez le pilote et la politique BDF. Cet exemple NVIDIA utilise 10de:2204 ; adaptez-le à votre carte. Ces commandes consultent l’état ; le script gère aussi les invités et les membres du groupe IOMMU.",
+ "lxcToVm": "Avant LXC → VM, examinez l’adresse PCI et son groupe IOMMU. Remplacez l’adresse d’exemple et vérifiez tous les membres avant attribution.",
+ "oneVmTitle": "Un GPU physique attribué par VFIO ne peut servir qu’à une VM à la fois",
+ "oneVmBody": "Mettre plusieurs entrées hostpci avec la même fente PCI dans deux VMs est valide config, mais seulement une des VMs peut commencer avec le GPU — la seconde échouera. La politique de conflit ProxMenux vise précisément à éviter ce piège."
+ },
+ "verification": {
+ "heading": "Vérification après redémarrage"
+ },
+ "troubleshoot": {
+ "heading": "Dépannage",
+ "stillVfioTitle": "GPU affiche toujours vfio-pci après le passage au mode LXC",
+ "stillVfioBody": "Un module VFIO chargé ne prouve pas quel pilote utilise ce GPU. Vérifiez l’affectation, l’exécution de update-initramfs et le redémarrage. lsmod | grep vfio liste seulement les modules. Pour AMD / Intel, inspectez vfio.conf ; pour NVIDIA, /etc/proxmenux/vfio-bind.bdfs et /etc/udev/rules.d/10-proxmenux-vfio-bind.rules. Corrigez les règles avant update-initramfs -u -k all et redémarrage.",
+ "vmFailTitle": "Une VM ne démarre plus après passage du GPU en mode LXC",
+ "vmFailBody": "Vérifiez les références hostpci obsolètes. Le choix Retirer le GPU de la configuration peut les supprimer pendant le changement prévu. Avant de relancer le script, vérifiez le sens proposé pour ne pas inverser le mode par erreur. Sinon, retirez l’affectation dans Proxmox, VM arrêtée.",
+ "smiFailTitle": "nvidia-smi affiche « Driver/library version mismatch » après retour à LXC",
+ "smiFailBody": "Comparez le module NVIDIA chargé aux bibliothèques installées, y compris dans les LXC. Alignez les versions : redémarrer charge le module installé sans corriger des paquets incompatibles. Recharger via modprobe -r nvidia puis modprobe nvidia nécessite l’arrêt des clients GPU et peut échouer si des modules dépendants sont utilisés.",
+ "logTitle": "Journal d’exécution",
+ "logBody": "Chaque exécution écrit dans /tmp/proxmenux_gpu_switch_mode.log sur l’hôte. Joignez le journal à votre demande d’aide GitHub."
+ },
+ "related": {
+ "heading": "Voir aussi",
+ "items": [
+ {
+ "label": "Ajouter GPU à VM (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — configuration initiale du mode VM."
+ },
+ {
+ "label": "Ajouter un GPU à LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — configuration initiale du mode LXC."
+ },
+ {
+ "label": "Installer les pilotes NVIDIA (host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — requis pour le mode LXC avec les GPU NVIDIA."
+ },
+ {
+ "label": "ProxMenux Monitor — Onglet matériel",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — section Cartes graphiques, avec le mode actuel et la commande de changement."
+ },
+ {
+ "label": "Commandes de passthrough GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — référence rapide des commandes."
+ }
+ ]
+ }
+}
diff --git a/web/messages/it/docs/hardware/coral-tpu-lxc.json b/web/messages/it/docs/hardware/coral-tpu-lxc.json
new file mode 100644
index 00000000..f730c27b
--- /dev/null
+++ b/web/messages/it/docs/hardware/coral-tpu-lxc.json
@@ -0,0 +1,120 @@
+{
+ "meta": {
+ "title": "Aggiungi Coral TPU a LXC | Documentazione ProxMenux",
+ "description": "Condividi un Google Coral TPU USB o M.2 / PCIe con un LXC Proxmox. ProxMenux configura dispositivi, permessi e montaggi, avvia il container e installa il runtime Edge TPU nelle distribuzioni compatibili."
+ },
+ "header": {
+ "title": "Aggiungi Coral TPU a LXC",
+ "description": "Condividi un Coral USB Accelerator o M.2 / Mini-PCIe con un LXC. ProxMenux configura il container e il runtime Edge TPU. Questa opzione gestisce solo la TPU: per Quick Sync, VA-API o NVENC, esegui anche Aggiungi GPU a LXC.",
+ "section": "Hardware: GPU e Coral-TPU"
+ },
+ "intro": {
+ "title": "Cosa fa",
+ "body": "Scrive la configurazione in /etc/pve/lxc/<ctid>.conf per USB Accelerator, Coral M.2 / PCIe o entrambi. Avvia il container e installa il runtime Google libedgetpu. Il GPU si configura separatamente con apt-get. I container di altre distribuzioni possono usare la modalità solo passthrough, che salta l’installazione APT di libedgetpu. Utile se l’applicazione include già il runtime, come l’immagine Docker Frigate.",
+ "downtime": "Prevedi una breve interruzione del container. Lo script lo ferma per configurarlo e lo avvia per installare il runtime. Queste modifiche non richiedono il riavvio dell’host."
+ },
+ "hostPrep": {
+ "title": "Prepara prima l’host",
+ "body": "M.2 / PCIe richiede gasket/apex sull’host e un dispositivo funzionante. USB richiede dispositivo collegato e permessi; l’app non deve essere eseguita sull’host. libedgetpu deve essere disponibile dove gira l’app. Ordine: preparare l’host → accesso LXC → configurare l’app."
+ },
+ "running": {
+ "heading": "Eseguire lo script",
+ "body": "In ProxMenux, apri Hardware: GPU e Coral-TPU → Aggiungi Coral TPU a LXC.",
+ "imageAlt": "Voce Aggiungi Coral TPU a LXC nel menu hardware"
+ },
+ "howRuns": {
+ "heading": "Come funziona lo script",
+ "body": "Scegli il container. Lo script configura l’accesso USB anche senza Coral USB collegato e aggiunge M.2 / PCIe se rileva quel dispositivo."
+ },
+ "walkthrough": {
+ "heading": "Procedura passo per passo",
+ "pick": {
+ "title": "Scegli il container LXC",
+ "body": "La selezione mostra i container idonei di pct list; quelli OCI sono nascosti e gestiti da Apps nel gestore OCI. Scegli il container, avviato o fermo. Lo script lo arresta se necessario, lo configura e lo avvia per installare il runtime."
+ },
+ "gpuHint": {
+ "title": "Suggerimento facoltativo per l’accesso GPU",
+ "body": "Se viene rilevato un GPU non configurato per questo container, un dialogo consiglia /dev/coral e monta l’albero completo /dev/bus/usb nel container. La configurazione viene scritta anche senza Coral USB collegato ed espone più di quel solo dispositivo.",
+ "whyTitle": "Perché montare /dev/bus/usb invece di /dev/coral?",
+ "whyBody": "Il percorso USB, ad esempio /dev/bus/usb/001/005, cambia alla riconnessione. Le versioni precedenti montavano il link /dev/coral e potevano conservare un percorso obsoleto. Montare tutto l’albero USB rende visibile il nodo attuale. L’app potrebbe comunque dover riaprire il dispositivo."
+ },
+ "pcie": {
+ "title": "Configurare l’accesso M.2 / PCIe del LXC",
+ "body1": "Se rileva Coral M.2 / PCIe ed esiste /dev/apex_0, usa l’API Proxmox dev per gestire cgroup2 nei LXC privilegiati e non privilegiati:",
+ "body2": "Se /dev/apex_0 è assente dopo create=file e, solo quando il numero major di apex è elencato in /proc/devices, una regola cgroup2 classica. Nessuno dei due crea un dispositivo funzionante:",
+ "rebootTitle": "Riavviare l'host prima se hai appena installato i driver Coral",
+ "rebootBody": "Il montaggio alternativo non carica apex sull’host. Carica il driver o riavvia dopo l’installazione e verifica il dispositivo. Poi riesegui lo script per applicare la voce moderna e riavvia il container."
+ },
+ "drivers": {
+ "title": "Avviare il LXC e installare il runtime Coral",
+ "body": "Avvia il container e attende fino a 15 secondi lo stato running, poi usa pct exec per eseguire l’installazione al suo interno. L’installer:",
+ "items": [
+ "Esegue apt-get update.",
+ "Installa i prerequisiti del repository Coral: gnupg, curl, ca-certificates.",
+ "Importa la chiave GPG Coral di Google per /etc/apt/keyrings/coral-edgetpu.gpg (percorso moderno, come l'installatore host) e aggiunge il repository APT coral-edgetpu-stable con signed-by=.",
+ "Installa libedgetpu1-std come predefinito. Se rileva Coral M.2, propone libedgetpu1-std o libedgetpu1-max. La scelta del pacchetto non configura da sola il rilevamento nell’applicazione."
+ ],
+ "noIgpuTitle": "Perché nessun driver iGPU qui?",
+ "noIgpuBody": "Prima installava anche va-driver-all, intel-opencl-icd e altri pacchetti Intel per combinare Quick Sync e Coral. Ciò causava errori poco chiari quando serviva solo Coral. Ora l’iGPU si configura con apt-get in Debian/Ubuntu. Per Alpine, Arch, RHEL o SUSE, rilevati tramite /etc/os-release, propone continuare solo con l’accesso al dispositivo oppure annullare. Il primo configura /etc/pve/lxc/<ctid>.conf senza installare libedgetpu. Se l’app include già il runtime, come Frigate Docker, basta questa modalità. Altrimenti installa libedgetpu seguendo la lsmod | grep apex. Se manca, prova modprobe apex o riavvia dopo l’installazione del driver. Quando /dev/apex_0 esiste sull’host, verifica la voce del dispositivo LXC (riesegui lo script se sono state scritte solo le voci di ripiego) e riavvia il container con pct stop <ctid> && pct start <ctid>.",
+ "replugTitle": "Coral USB scompare dopo la riconnessione a un’altra porta",
+ "replugBody": "Verifica che il LXC monti /dev/bus/usb anziché il link /dev/coral. La configurazione deve contenere lxc.mount.entry: /dev/bus/usb dev/bus/usb ... senza dipendere direttamente da /dev/coral. Riesegui lo script se la configurazione è vecchia.",
+ "alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime non installato",
+ "alpineBody": "La modalità solo passthrough configura il dispositivo senza installare libedgetpu. Usa un pacchetto compatibile o compila i sorgenti; verifica la disponibilità prima di comandi come apk add in Alpine. Frigate può includere il runtime. Con Docker nel LXC, inoltra anche M.2 con --device /dev/apex_0:/dev/apex_0 oppure monta USB in Docker: il solo montaggio LXC non basta.",
+ "frigateTitle": "Frigate mostra «Coral EdgeTPU detected but not available»",
+ "frigateBody": "Verifica runtime, visibilità e accesso in lettura/scrittura del processo reale. Per USB, controlla permessi ed eventuale gruppo plugdev. Per M.2, ispeziona /dev/apex_0 con ls -l /dev/apex_0. Un nome come apex in /etc/group non basta: GID numerici e mappature LXC devono coincidere. Controlla se altri processi occupano la TPU; non passare subito alla modalità privilegiata.",
+ "logsTitle": "Controllare entrambi i registri host e container",
+ "logsBody": "Sull’host controlla i messaggi del kernel con journalctl -k | grep -i -e apex -e gasket -e usb. Nel LXC leggi i registri dell’app; con Docker annidato usa docker logs <container>. Permessi, runtime assente, connessione USB o un altro processo sulla TPU possono causare errori."
+ },
+ "related": {
+ "heading": "Vedi anche",
+ "items": [
+ {
+ "label": "Installa Coral TPU sull’host",
+ "href": "/docs/hardware/install-coral-tpu-host",
+ "tail": " — requisito per usare schede Coral M.2 / PCIe in un CT."
+ },
+ {
+ "label": "Aggiungi GPU a LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — accesso GPU, spesso abbinato a Coral in Frigate."
+ }
+ ]
+ }
+}
diff --git a/web/messages/it/docs/hardware/gpu-vm-passthrough.json b/web/messages/it/docs/hardware/gpu-vm-passthrough.json
new file mode 100644
index 00000000..6579eca6
--- /dev/null
+++ b/web/messages/it/docs/hardware/gpu-vm-passthrough.json
@@ -0,0 +1,178 @@
+{
+ "meta": {
+ "title": "Aggiungi GPU a VM | Documentazione ProxMenux",
+ "description": "Assegna una GPU fisica a una VM Proxmox. ProxMenux verifica IOMMU, configura VFIO e dispositivi VM e rileva conflitti con altre VM o LXC."
+ },
+ "header": {
+ "title": "Aggiungi GPU a VM (Passthrough)",
+ "description": "Rileva GPU Intel, AMD o NVIDIA per l’accesso diretto da una VM. Verifica IOMMU e dispositivi associati, configura VFIO e VM e applica le regole di compatibilità. Controlla tutti i dispositivi interessati.",
+ "section": "Hardware: GPU e Coral-TPU"
+ },
+ "intro": {
+ "title": "Cosa fa",
+ "body": "Automatizza i passaggi host e hostpci della lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "iommu": "Supporto IOMMU hardware e attivazione firmware se richiesta (Intel VT-d o AMD-Vi). Verifica il sistema e può configurare Linux; non cambia BIOS/UEFI né prova che IOMMU inattivo sia disabilitato nel firmware.",
+ "q35": "L’assistente richiede q35 e rifiuta i440fx. Il tipo di macchina è distinto dal firmware BIOS/UEFI. Cambiare chipset a una VM esistente richiede pianificazione e non è automatico.",
+ "q35Check": "qm config VMID | grep machine",
+ "moreGpus": "Prepara un’altra GPU o accesso alternativo via SSH, IPMI o seriale. Riservare la GPU principale può togliere l’immagine locale. Per NVIDIA, una scheda fuori dal gruppo IOMMU interessato può restare sull’host.",
+ "nvidiaInstalled": "Dopo l’vfio-pci anziché nvidia. Il modulo nvidia può restare disponibile per altre schede fuori dal gruppo IOMMU interessato. Verifica con nvidia-smi."
+ },
+ "pickOne": {
+ "title": "Assegnazione esclusiva VM o condivisione LXC",
+ "body": "Un GPU legato a vfio-pci per il passaggio VM non può essere utilizzato simultaneamente dall'host o da un LXC. Se hai due GPU, puoi dedicarne uno ad ogni percorso. Se ne hai uno solo, scegli:",
+ "vmItem": "VM: accesso diretto ed esclusivo per quella VM.",
+ "lxcItem": "LXC (intel_iommu=on o amd_iommu=on ed esistono gruppi IOMMU. Se il parametro è già salvato per il prossimo avvio, prosegue in modalità riavvio in sospeso; altrimenti un passaggio confermato separatamente può aggiungerlo con iommu=pt. La sua euristica per il file di avvio usa /etc/kernel/cmdline quando vi si trova un marcatore di root ZFS come root=ZFS=; altrimenti usa /etc/default/grub. Questa euristica non prova quale sia il bootloader effettivo. L’IOMMU appena configurato ha effetto dopo il riavvio; verifica poi i gruppi reali.",
+ "tipTitle": "Hai già configurato la post-installazione?",
+ "tipBody": "Se il /sys/bus/pci/devices/<pci>/reset_method. APU o scheda dedicata senza FLR viene bloccata dalla politica dell’assistente; un sottotipo sconosciuto senza FLR richiede conferma. Non prova un’impossibilità universale.",
+ "Stato D3cold. Blocca schede AMD che indicano D3cold per il rischio di mancata attivazione. Verifica alimentazione e firmware.",
+ "Analisi del gruppo IOMMU. Legge /sys/kernel/iommu_groups/ e include nel piano della VM tutti i membri non bridge, eventualmente controller di rete o di archiviazione. Se il gruppo contiene dispositivi di un altro slot, lo script li elenca prima del riepilogo; verifica che l’host non ne abbia bisogno. Se IOMMU attende un riavvio, i gruppi reali non sono disponibili e il piano contiene inizialmente solo la funzione GPU selezionata; verifica l’isolamento dopo il riavvio."
+ ],
+ "audioIntro": "Audio associato. Due casi secondo la posizione del controller:",
+ "audioDgpu": "GPU dedicata: l’audio HDMI occupa spesso la funzione .1 dello stesso slot PCI ed è incluso se rilevato. Se l’host lo usava, perde l’accesso riservandolo alla VM.",
+ "audioIgpu": "Senza funzione audio .1: può trovarsi altrove, per esempio 00:1f.3. Elenca controller e driver come snd_hda_intel. Per impostazione predefinita nessuno è selezionato; scegli solo quelli necessari."
+ },
+ "pickVm": {
+ "title": "Scegli la VM di destinazione",
+ "body": "Scegli la VM. Richiede q35 e riutilizza le voci GPU esistenti dove possibile. BIOS/UEFI è un’impostazione separata, non un tipo di macchina. Non cambia automaticamente chipset o avvio del guest installato.",
+ "imageAlt": "Selezione VM per nome, ID e stato"
+ },
+ "switchMode": {
+ "title": "Gestire assegnazioni esistenti",
+ "intro": "Lo script scansiona ogni configurazione VM e ogni configurazione LXC sull'host alla ricerca del GPU selezionato. Tre possibili risultati:",
+ "items": [
+ "GPU disponibile. Prosegue senza rimuovere assegnazioni.",
+ "Assegnata a un’altra VM. Arresta prima la sorgente. Puoi mantenere le voci disattivando l’avvio automatico oppure rimuoverle mantenendo l’avvio automatico. Con vfio-pci già attivo e nessuna modifica host necessaria, il trasferimento VM→VM può evitare il riavvio host.",
+ "GPU usata da LXC. Nei container normali scegli mantenere la configurazione GPU e disattivare l’avvio automatico o rimuovere la configurazione del dispositivo GPU mantenendo l’avvio automatico. La rimozione elimina le voci devN e, per AMD/Intel, anche le vecchie regole /dev/dri lxc.mount.entry e lxc.cgroup2.devices.allow. I container OCI conservano la configurazione e vengono fermati con l’avvio automatico disattivato; rimuovi la loro GPU tramite OCI manager Apps. Il rilevamento dei conflitti avviene per famiglia di dispositivi GPU e può includere altre schede della stessa famiglia."
+ ],
+ "imageAlt": "Offerta di dialogo per rimuovere il GPU da un LXC prima di assegnarlo al VM",
+ "smartTitle": "Verificare l’audio associato rimuovendo la GPU",
+ "smartBody": "Poi può proporre un elenco di dispositivi audio forse inutilizzati nella VM sorgente. Deseleziona quelli ancora necessari. Per esempio può mantenere 02:00.1 e proporre di rimuovere 00:1f.3. La scelta determina la rimozione; non garantisce ogni associazione audio/video."
+ },
+ "audioPick": {
+ "title": "Senza audio .1, scegli i controller necessari",
+ "body": "Succede solo per Intel iGPU e simili configurazioni split-audio. Una lista di controllo mostra ogni controller audio PCI sull'host (escluso qualsiasi già nel gruppo IOMMU di GPU), etichettato con il suo driver corrente. Selezionare quelli che si desidera - o nessuno, se il VM non ha bisogno di audio dall'hardware host.",
+ "imageAlt": "finestra di dialogo con ogni controller audio PCI host (BDF + driver) quando il GPU non ha un audio di sibling .1",
+ "warnTitle": "Non selezionare audio necessario all’host",
+ "warnBody": "Assegnare l’audio può togliere accesso all’host; il controller non può appartenere anche a un’altra VM attiva. Non selezionare audio superfluo e verifica le assegnazioni. Il segnale acustico della console non proviene necessariamente dall’audio PCI."
+ },
+ "summary": {
+ "title": "Riepilogo della conferma",
+ "body": "Verifica il piano finale dell’host e della VM e annulla se è errato. Mostra il gruppo IOMMU e il numero dei suoi dispositivi; i membri di un altro slot sono elencati nel passaggio precedente. L’annullamento ferma le modifiche principali, ma non annulla una modifica della configurazione di avvio IOMMU confermata separatamente in precedenza.",
+ "imageAlt": "Riepilogo delle modifiche previste a host e VM"
+ },
+ "hostApply": {
+ "title": "Le modifiche degli host sono applicate",
+ "intro": "La fase applicativa modifica host e VM. La pulizia audio può ancora richiedere una scelta. Possibili modifiche:",
+ "items": [
+ "/etc/modules — aggiunge vfio, vfio_iommu_type1, vfio_pci (più vfio_virqfd sui kernel < 6.2).",
+ "/etc/modprobe.d/vfio.conf — AMD/Intel: options vfio-pci ids=<vendor:device,...> disable_vga=1. NVIDIA: softdep nvidia pre: vfio-pci (_drm/_modeset/_uvm); l’associazione effettiva è per BDF. AMD aggiunge l’ordine di caricamento softdep: vfio-pci → radeon/amdgpu.",
+ "Scrive /etc/modprobe.d/iommu_unsafe_interrupts.conf e kvm.conf con allow_unsafe_interrupts=1 e ignore_msrs=1. Sono impostazioni dello script, non requisiti universali Windows/macOS; gli interrupt non sicuri riducono la protezione del remapping.",
+ "/etc/modprobe.d/blacklist.conf: NVIDIA — nouveau/lbm-nouveau; AMD — radeon + amdgpu; Intel — i915. Queste regole per produttore possono influire su altre schede con lo stesso driver. Il modulo nvidia è bloccato solo tramite /etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf quando tutte le NVIDIA host sono riservate a VFIO.",
+ "/etc/udev/rules.d/10-proxmenux-vfio-bind.rules + /etc/proxmenux/vfio-bind.bdfs — Solo NVIDIA. Applica ATTR'{'driver_override'}'=\"vfio-pci\" al PCI ADD dei BDF registrati, incluse le funzioni del gruppo IOMMU interessato. Fuori da quei gruppi può restare nvidia. La politica BDF non divide gruppi IOMMU hardware.",
+ "Solo AMD. Tenta un dump della ROM da /sys/bus/pci/.../rom o ACPI VFCT in /usr/share/kvm/vbios_<vendor>_<device>.bin. Se riesce, la VM usa romfile=. Un dump valido non garantisce la corretta inizializzazione della GPU.",
+ "Solo NVIDIA. Ferma e disattiva nvidia-persistenced, nvidia-powerd, nvidia-fabricmanager solo se tutte le NVIDIA sono riservate a VFIO. In uso misto mantiene servizi e nvidia per le schede native.",
+ "update-initramfs -u -k all — funziona solo se uno dei suddetti effettivamente cambiato."
+ ]
+ },
+ "vmApply": {
+ "title": "La configurazione della VM viene applicata tramite qm set",
+ "body": "La configurazione in /etc/pve/qemu-server/<vmid>.conf viene aggiornata tramite qm set, non modificata direttamente con sed.",
+ "after1": "Aggiunge x-vga=1 per AMD e NVIDIA, non Intel. È la politica dello script, non prova che ogni iGPU Intel sia priva di firmware o che il flag causi sempre blocchi.",
+ "after2": "Ulteriori linee hostpciN sono allegate se il gruppo IOMMU di GPU contiene altri dispositivi che è necessario passare insieme."
+ },
+ "reboot": {
+ "title": "Riavvia se richiesto dalle modifiche host",
+ "body": "Segui il riavvio richiesto se cambiano avvio o driver e verifica l’associazione attiva prima di avviare la VM. La configurazione salvata non prova che sia attiva. VM→VM con VFIO corretto può evitare il riavvio host.",
+ "imageAlt": "Riepilogo schermo che mostra ciò che è stato cambiato, seguito da un prompt di riavvio"
+ }
+ },
+ "vendors": {
+ "heading": "Note per produttore",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Mantiene un vecchio accorgimento per Code 43: hidden=1, ID NV43FIX in args e kvm=off. Non è un requisito universale delle GeForce attuali: NVIDIA ha abilitato il passthrough Windows da R465. L’errore può avere altre cause; verifica GPU e driver.",
+ "nvidiaMultiHeading": "Supporto Multi-GPU NVIDIA",
+ "nvidiaMultiBody": "Uso misto NVIDIA per BDF. Registra funzioni vfio-pci per indirizzo, non solo ID vendor:device. Fuori dai gruppi interessati può mantenere nvidia; verifica con nvidia-smi. Non isola due schede dello stesso gruppo.",
+ "amdHeading": "AMD",
+ "amdBody": "Alcune GPU AMD non si resettano dopo l’arresto VM. L’assistente verifica capacità dichiarate, non tutti i cicli reali. x-vga=1. qm config VMID | grep -E \"cpu|args\" con VMID reale, poi hidden=1 e hv_vendor_id=NV43FIX. Verifica anche driver guest, firmware e assegnazione. Ripetere può terminare se già assegnata.",
+ "amdResetTitle": "AMD GPU funziona una volta, fallisce sul riavvio di VM",
+ "amdResetBody": "Un reset fallito è una possibile causa. Riavvio o spegnimento completo possono aiutare temporaneamente. Verifica compatibilità e caricamento anticipato di vendor-reset; softdep amdgpu pre: vendor-reset da solo non garantisce caricamento prima di VFIO. Anche RadeonResetBugFix richiede una GPU compatibile.",
+ "stuckBootTitle": "Avvio bloccato VM / GPU non rilevato",
+ "stuckBootBody": "Controlla l’indirizzo reale con lspci -nnk -s PCI_ADDRESS; atteso Kernel driver in use: vfio-pci. Sostituisci PCI_ADDRESS. Se resta il driver nativo, verifica la politica di associazione, non solo /etc/modprobe.d/blacklist.conf; NVIDIA usa stato BDF. Leggi dmesg | grep vfio. Dopo correzioni, update-initramfs -u -k all e riavvio pianificato.",
+ "darkTitle": "Consolle Host va scuro dopo il riavvio e non posso SSH in",
+ "darkBody": "Lo schermo nero non prova che l’host sia spento. Se fallisce anche SSH, controlla rete e controller inclusi nel gruppo IOMMU. Recupera accesso via IPMI, seriale o ambiente di ripristino; verifica /etc/pve/qemu-server/<vmid>.conf e annulla solo assegnazioni/regole pertinenti. Non eliminare altra configurazione.",
+ "logTitle": "Controlla il registro di installazione",
+ "logBody": "Ogni esecuzione scrive /tmp/add_gpu_vm.log. Allegalo alle richieste di assistenza."
+ },
+ "revert": {
+ "heading": "Annullare le modifiche manualmente",
+ "intro": "Arresta la VM e rimuovi solo le assegnazioni PCI pertinenti da Hardware o con l’indice esplicito sotto. Non restituisce ancora la GPU al driver host. Usa Cambia modalità GPU per questa transizione e verifica i guest interessati."
+ },
+ "related": {
+ "heading": "Vedi anche",
+ "items": [
+ {
+ "label": "Installare driver NVIDIA (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — prepara il driver per schede rimaste sull’host; una GPU in VFIO non può usarlo contemporaneamente."
+ },
+ {
+ "label": "Aggiungi GPU a LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": "— modello alternativo: condividere il GPU con più contenitori invece di dedicarlo a un VM."
+ },
+ {
+ "label": "Cambia modalità GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — passa la stessa GPU fra condivisione e assegnazione esclusiva."
+ },
+ {
+ "label": "Comandi di passaggio GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": "— lspci, IOMMU verifica, qm set hostpci riferimento."
+ }
+ ]
+ }
+}
diff --git a/web/messages/it/docs/hardware/igpu-acceleration-lxc.json b/web/messages/it/docs/hardware/igpu-acceleration-lxc.json
new file mode 100644
index 00000000..4a2e48b6
--- /dev/null
+++ b/web/messages/it/docs/hardware/igpu-acceleration-lxc.json
@@ -0,0 +1,185 @@
+{
+ "meta": {
+ "title": "Aggiungi GPU a LXC | Documentazione ProxMenux",
+ "description": "Condividi GPU Intel, AMD o NVIDIA con LXC. ProxMenux configura dispositivi, gruppi e librerie secondo la distribuzione; l’app deve supportare e configurare l’accelerazione."
+ },
+ "header": {
+ "title": "Aggiungi GPU a LXC",
+ "description": "Condivide l’accesso GPU con LXC tramite i dispositivi dell’host. Il driver resta sull’host; le app richiedono librerie compatibili e una configurazione propria.",
+ "section": "Hardware: GPU e Coral-TPU"
+ },
+ "intro": {
+ "title": "Cosa fa",
+ "body": "Aggiunge voci dev<N> a /etc/pve/lxc/<ctid>.conf per i nodi /dev/dri/*, /dev/kfd o /dev/nvidia* pertinenti. Avvia il container, installa i pacchetti userspace della sua distribuzione e, per Intel/AMD, allinea i gruppi video e render. L’accelerazione delle applicazioni richiede comunque hardware e librerie compatibili e configurazione dell’app."
+ },
+ "compare": {
+ "heading": "Condivisione LXC e passthrough VM a confronto",
+ "intro": "LXC condivide il kernel e può condividere la GPU fra host e container. Con il lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "vfio": "La GPU non deve essere associata a vfio-pci. Serve il driver nativo dell’host. Se assegnata a una VM, lo script propone dev<N> e allinea i GID video e render fra host e container. Questo evita di modificare manualmente lxc.idmap per il normale accesso ai dispositivi; verifica comunque i permessi dell’utente dell’app."
+ },
+ "running": {
+ "heading": "Eseguire l’installer",
+ "body": "Apri ProxMenux e scegli Hardware: GPU e Coral-TPU → Aggiungi GPU a LXC.",
+ "imageAlt": "Voce del menu per aggiungere GPU a LXC"
+ },
+ "howRuns": {
+ "heading": "Come funziona lo script",
+ "body": "Scegli container e famiglie GPU e supera i controlli. Poi il processo arresta e modifica il container senza un’ulteriore conferma finale. La pulizia VFIO facoltativa ha conferma separata e può modificare prima l’host."
+ },
+ "walkthrough": {
+ "heading": "Procedura passo per passo",
+ "detect": {
+ "title": "Rilevamento GPU host",
+ "body": "Cerca controller GPU con lspci. Per NVIDIA verifica il modulo nvidia e nvidia-smi; la versione rilevata determina l’installer .run del container.",
+ "tipTitle": "NVIDIA non pronto?",
+ "tipBody": "Se manca il modulo o NVIDIA non funziona sull’host, usa prima /dev/dri/* o /dev/nvidia*. Propone /etc/pve/lxc/<ctid>.conf. Le voci numerate dev<N> includono il GID host di video o render. Le righe bind lxc.mount.entry esistenti per /dev/dri vengono sostituite da voci dev:; verifica la configurazione e i permessi risultanti.",
+ "body2": "Esempio dopo Intel + NVIDIA sullo stesso contenitore:"
+ },
+ "installDrivers": {
+ "title": "Avviare il contenitore e installare i driver all'interno",
+ "body": "Avvia il container e attende fino a circa 30 secondi la risposta di pct exec. Rileva la distribuzione da /etc/os-release e installa i pacchetti adatti.",
+ "headerDistro": "Distribuzione",
+ "headerInt": "Intel / AMD",
+ "headerNvidia": "NVIDIA",
+ "rows": [
+ {
+ "distro": "Alpine",
+ "intel": "apk add mesa-va-gallium intel-media-driver libva-utils",
+ "nvidia": "apk add nvidia-utils"
+ },
+ {
+ "distro": "Arch / Manjaro",
+ "intel": "pacman -Sy intel-media-driver mesa libva-utils",
+ "nvidia": "pacman -Sy nvidia-utils"
+ }
+ ],
+ "debianDistro": "Debian / Ubuntu / altri",
+ "debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo",
+ "debianNvidia": "Estrae .run sull’host → pct push → installa con --no-kernel-modules --no-dkms.",
+ "whyTitle": "Perché usa l’installer NVIDIA .run su Debian",
+ "whyBody": "I pacchetti possono non corrispondere all’host. Le librerie devono corrispondere al modulo host caricato per NVML e nvidia-smi. Debian/glibc usa il .run della versione host in cache, lo estrae e archivia sull’host, trasferisce con pct push e installa con --no-kernel-modules --no-dkms. Alpine e Arch usano i repository: verifica le versioni."
+ },
+ "alignGids": {
+ "title": "Allineare GID e ripristinare lo stato",
+ "body1": "Per Intel/AMD legge i GID host di video e render, usando 44/104 solo come ripiego, poi modifica /etc/group nel container perché corrispondano; le esecuzioni solo NVIDIA saltano questo passaggio. Voci come video:44 e render:104 sono esempi, non ID universali. Verifica l’appartenenza dell’app ai gruppi e i permessi effettivi sui dispositivi.",
+ "body2": "Al termine normale, arresta di nuovo il container se inizialmente era fermo; se era attivo lo lascia attivo. In caso di errore di avvio o installazione, verifica stato finale e log."
+ }
+ },
+ "vendors": {
+ "heading": "Note per produttore",
+ "intelHeading": "Intel iGPU",
+ "intelBody": "L’accelerazione multimediale Intel, incluso Quick Sync, dipende da generazione del GPU, codec e configurazione dell’app. Lo script condivide quelli tra /dev/dri/card0, card1, renderD128 e renderD129 che esistono; altri numeri di nodo non vengono aggiunti. L’host deve già fornirli tramite il proprio driver nativo, per esempio i915.",
+ "amdHeading": "AMD",
+ "amdBody": "AMD usa DRI per Mesa/VA-API. Se l’host espone /dev/kfd, lo condivide. ROCm/OpenCL richiede hardware e librerie compatibili; condividere il dispositivo non installa l’intero stack ROCm.",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Condivide i dispositivi /dev/nvidia*. Le versioni del driver devono corrispondere per nvidia-smi. Debian/glibc usa il .run della versione host; Alpine/Arch i repository. Sotto 2048 MiB di RAM configurata propone un aumento temporaneo poi ripristinato; richiede anche 1500 MiB liberi su disco.",
+ "updateTitle": "Dopo un aggiornamento NVIDIA host, controlla le librerie LXC",
+ "updateBody": "Vecchie librerie possono causare errori in nvidia-smi. L’.run in cache serve per Debian/glibc, ma l’aggiunta può terminare se tutti i dispositivi esistono già.",
+ "denyTitle": "Permesso negato su /dev/dri/renderD128 all'interno del contenitore",
+ "denyBody": "Verifica dispositivo e permessi numerici di render, poi che l’utente appartenga a render. Se disponibile, aggiungilo a render con usermod -aG render <user>, sostituendo il segnaposto con l’account reale. Riavvia la sessione. Cambiare privilegi non è una soluzione generale.",
+ "vainfoTitle": "vainfo dice: VA-API versione 1.xx; non inizializzare",
+ "vainfoBody": "Verifica accesso e driver VA-API. I nomi variano per distribuzione: per esempio intel-media-driver per Intel recenti supportate, i965-va-driver per quelle vecchie compatibili e mesa-va-drivers per AMD. Il messaggio da solo non prova che manchi un pacchetto.",
+ "logTitle": "Registro d’installazione",
+ "logBody": "Ogni esecuzione scrive /tmp/add_gpu_lxc.log sull’host. Allegalo alle richieste di assistenza."
+ },
+ "related": {
+ "heading": "Vedi anche",
+ "items": [
+ {
+ "label": "Installare driver NVIDIA (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — installa il driver host prima di condividere NVIDIA."
+ },
+ {
+ "label": "Aggiungi GPU a VM (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — alternativa per dedicare una GPU a una VM."
+ },
+ {
+ "label": "Cambia modalità GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — passa la GPU fra condivisione LXC e assegnazione VM."
+ },
+ {
+ "label": "Comandi di passaggio GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": "— rapido riferimento per i relativi comandi shell."
+ }
+ ]
+ }
+}
diff --git a/web/messages/it/docs/hardware/install-coral-tpu-host.json b/web/messages/it/docs/hardware/install-coral-tpu-host.json
new file mode 100644
index 00000000..e602999b
--- /dev/null
+++ b/web/messages/it/docs/hardware/install-coral-tpu-host.json
@@ -0,0 +1,203 @@
+{
+ "meta": {
+ "title": "Installa Coral TPU sull’host | Documentazione ProxMenux",
+ "description": "Installa componenti Coral su Proxmox VE secondo l’hardware rilevato: gasket/apex con DKMS per M.2 / Mini-PCIe e libedgetpu1-std per USB. Se rileva entrambi esegue entrambe le procedure."
+ },
+ "header": {
+ "title": "Installa Coral TPU sull’host",
+ "description": "Prepara l’host Proxmox per Coral e condivisione LXC. Rileva M.2 / Mini-PCIe, USB o entrambi ed esegue la procedura appropriata: moduli DKMS per PCIe e runtime Google Edge TPU per USB.",
+ "section": "Hardware: GPU e Coral-TPU"
+ },
+ "intro": {
+ "title": "Cosa fa",
+ "body": "Un installer unico che rileva l’hardware. PCIe usa gasket e apex con DKMS; le compilazioni future richiedono sorgenti e header compatibili. USB usa libedgetpu1-std. Se rileva entrambi esegue entrambi i percorsi. Il runtime USB deve essere dove gira l’app; per l’uso solo in LXC non è necessariamente richiesto sull’host."
+ },
+ "which": {
+ "heading": "Quale Coral ho?",
+ "body": "I modelli PCIe e USB hanno formato e requisiti diversi. Lo script gestisce entrambi; identifica il dispositivo prima di eseguirlo.",
+ "headerForm": "Fattore di forma",
+ "headerDetect": "Rilevazione",
+ "headerInstall": "Tipo di installazione",
+ "headerReboot": "Riavvio?",
+ "pcieForm": "M.2 / Mini-PCIe",
+ "pcieFormSub": "(schede M.2 con una o due Edge TPU)",
+ "pcieDetect": "ID produttore PCI 1ac1",
+ "pcieInstall": "Modulo Kernel (gasket + apex) tramite DKMS",
+ "pcieReboot": "Sì",
+ "usbForm": "Acceleratore USB",
+ "usbFormSub": "(piccolo dongle di plastica)",
+ "usbDetect": "USB 1a6e:089a (non programmato) / 18d1:9302 (programmato)",
+ "usbInstall": "Runtime utente libedgetpu1-std dal repository APT Google",
+ "usbReboot": "No"
+ },
+ "prereqs": {
+ "title": "Prima di iniziare",
+ "coral": "Un Coral collegato (M.2, Mini-PCIe o USB) per installare. Senza hardware rilevato può pulire o rimuovere componenti esistenti, ma non installa un nuovo percorso hardware.",
+ "coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
+ "internet": "Accesso a Internet sull’host per clonare il driver PCIe da GitHub o scaricare libedgetpu1-std dal repository APT Google per USB.",
+ "headers": "Header del kernel disponibili tramite APT: proxmox-headers-$(uname -r). Servono solo per PCIe/M.2; lo script li installa.",
+ "reboot": "Pianifica un riavvio per PCIe. Lo script tenta di caricare i moduli compilati; il riavvio verifica anche il caricamento automatico."
+ },
+ "hostPrepTip": {
+ "title": "Questo prepara soltanto l’host",
+ "body": "Prepara l’host per accedere al dispositivo, senza configurare o verificare l’applicazione. Per usare Coral con un’app compatibile come Frigate, prosegui con 0x1ac1 in /sys/bus/pci/devices/*/vendor e usa lsusb per USB. Esistono due ID USB secondo lo stato del firmware:",
+ "items": [
+ "1a6e:089a — Global Unichip, stato non programmato, prima che il runtime carichi il firmware.",
+ "18d1:9302 — Google, stato programmato, dopo il caricamento del firmware."
+ ],
+ "outro": "Senza Coral rilevato né installazione esistente, mostra un avviso ed esce. I componenti già presenti possono aprire il menu di pulizia o rimozione."
+ },
+ "prompt": {
+ "title": "Conferma dell’installazione",
+ "body": "Prima dell’installazione, una finestra elenca dispositivi e componenti previsti. Annullando si salta l’installazione. La pulizia facoltativa dei vecchi componenti ha una conferma precedente separata.",
+ "imageAlt": "Riepilogo dei dispositivi Coral e dei passaggi d’installazione"
+ },
+ "pcie": {
+ "title": "PCIe: moduli gasket e apex tramite DKMS",
+ "body": "Eseguito solo se rileva un Coral PCIe/M.2. Compila i moduli per il kernel attualmente in esecuzione sull’host.",
+ "items": [
+ "Pulizia. Qualsiasi pacchetto gasket-dkms esistente viene rimosso prima della ricompilazione; se è in uno stato incoerente, lo script ne forza la rimozione e la purga.",
+ "Dipendenze di compilazione: git, dkms, build-essential, proxmox-headers-$(uname -r)."
+ ],
+ "cloneIntro": "Clona i sorgenti del driver. Preferisce no_llseek con noop_llseek nei sorgenti alternativi.",
+ "Kernel 6.13 o superiore: converte l’argomento di MODULE_IMPORT_NS(DMA_BUF) in una stringa letterale."
+ ],
+ "afterItems": [
+ "Copia i sorgenti in /usr/src/gasket-1.0/, genera dkms.conf e li registra con dkms add.",
+ "Compila e installa: dkms build, poi dkms install. In caso di errore mostra le ultime 50 righe di make.log, se disponibile.",
+ "Crea il gruppo apex e le regole udev (/etc/udev/rules.d/99-coral-apex.rules) per assegnare il gruppo a /dev/apex_*.",
+ "Tenta di caricare i moduli: modprobe gasket e modprobe apex."
+ ],
+ "imageAlt": "Compilazione DKMS e caricamento dei moduli gasket/apex"
+ },
+ "usb": {
+ "title": "USB: runtime Edge TPU di Google",
+ "body": "Funziona solo se è stato rilevato un acceleratore USB. Molto più semplice:",
+ "items": [
+ "Aggiunge la chiave GPG Google in /etc/apt/keyrings/coral-edgetpu.gpg.",
+ "Aggiunge il repository APT in /etc/apt/sources.list.d/coral-edgetpu.list; signed-by= limita la verifica al suo portachiavi. Usa sintassi .list su una riga, non .sources deb822.",
+ "Installa libedgetpu1-std, il runtime Edge TPU con prestazioni standard.",
+ "Ricarica udev e applica le regole del pacchetto al dispositivo USB."
+ ],
+ "stdTitle": "Perché libedgetpu1-std e non libedgetpu1-max?",
+ "stdBody": "Il pacchetto max attiva la frequenza massima supportata, aumentando prestazioni, consumo e calore. Verifica raffreddamento e condizioni operative dell’acceleratore. I pacchetti si escludono a vicenda; passa all’altro con apt install libedgetpu1-max."
+ },
+ "reboot": {
+ "title": "Riavvio facoltativo dopo l’installazione PCIe",
+ "body": "Dopo PCIe propone un riavvio. Ha tentato modprobe; verifica i moduli e /dev/apex_0 con gruppo apex. Un riavvio pianificato controlla il caricamento automatico. Con solo USB non propone il riavvio dell’host.",
+ "imageAlt": "Riepilogo e proposta di riavvio dopo l’installazione PCIe"
+ }
+ },
+ "legacyCleanup": {
+ "heading": "Rimuovere il vecchio gasket-dkms dagli host che usano solo USB",
+ "intro": "Se non rileva Coral PCIe/M.2 ma esiste una precedente installazione di gasket-dkms, propone una pulizia facoltativa con conferma.",
+ "items": [
+ "Se rileva un Coral PCIe/M.2, usa il normale percorso di ricompilazione DKMS e non propone questa pulizia.",
+ "Elimina gasket-dkms, registrazioni DKMS e vecchi sorgenti gasket, poi ripara lo stato in sospeso di dpkg/APT.",
+ "Mantiene i pacchetti USB libedgetpu1-std e libedgetpu1-max, quindi il Coral USB conserva il runtime.",
+ "Lo script verifica che il pacchetto legacy è andato e che la gestione dei pacchetti è sana prima di segnalare il successo."
+ ],
+ "warningTitle": "Confermare l'hardware prima",
+ "warningBody": "Se un Coral PCIe/M.2 previsto non appare, annulla la pulizia e controlla scheda, slot e firmware."
+ },
+ "reinstallUninstall": {
+ "heading": "Reinstallare o disinstallare",
+ "intro": "Se rileva un’installazione PCIe con gasket-dkms, USB con libedgetpu1-std/libedgetpu1-max o entrambe, mostra un menu di azioni.",
+ "imageAlt": "Menu per reinstallare, aggiornare o disinstallare Coral",
+ "imageCaption": "Il menu appare se esiste un componente: registrazione DKMS gasket, pacchetto libedgetpu1-* o dispositivi /dev/apex_*.",
+ "reinstallHeading": "Reinstallare / aggiornare",
+ "reinstallBody": "Segue l’installazione normale: ricompila dopo un cambio di kernel o aggiorna libedgetpu1-* da Google. Prima pulisce lo stato DKMS precedente per evitare che un tentativo fallito blocchi la compilazione.",
+ "uninstallHeading": "Disinstallare — ciò che viene rimosso",
+ "uninstallIntro": "Richiede conferma. Le app LXC che usano /dev/apex_* possono perdere l’accesso durante la rimozione o dopo il riavvio. Procedura:",
+ "uninstallItems": [
+ "Tenta di scaricare apex e gasket; l’uso da parte di processi attivi può impedirlo.",
+ "Rimuove ogni voce DKMS-registrato gasket/<version> in modo che i moduli non ritornino sul prossimo kernel install.",
+ "Elimina completamente gasket-dkms, libedgetpu1-std e libedgetpu1-max, poi esegue apt-get autoremove --purge.",
+ "Elimina /etc/udev/rules.d/99-coral-apex.rules e ripristina il gruppo predefinito in 60-gasket-dkms.rules, se esiste ancora.",
+ "Controlla i membri supplementari di apex. Se l’elenco è vuoto, tenta di rimuovere il gruppo; altrimenti mantiene apex ed elenca i membri. Non verifica completamente gli utenti che lo hanno come gruppo principale.",
+ "Rimuove l’elenco dei repository /etc/apt/sources.list.d/coral-edgetpu.list, il vecchio coral-cloud.list e i vecchi portachiavi chiamati coral-edgetpu-archive-keyring.gpg. Il portachiavi attuale in /etc/apt/keyrings/coral-edgetpu.gpg non viene rimosso da questa sequenza.",
+ "Propone un riavvio solo se PCIe era installato per scaricare i moduli ancora attivi. Rimuovere solo USB non richiede riavvio."
+ ],
+ "lxcWarnTitle": "LXC contenitori con apex passthrough",
+ "lxcWarnBody": "Rimuovere i componenti dell’host può interrompere l’accesso LXC. Pianifica una manutenzione se app compatibili come Frigate dipendono da questo Coral."
+ },
+ "updates": {
+ "heading": "Notifiche di aggiornamento",
+ "intro": "ProxMenux registra i componenti Coral e verifica PCIe/M.2 e USB separatamente. Se sono presenti entrambi, ogni variante usa la propria fonte delle versioni:",
+ "headerVariant": "Variante",
+ "headerTracked": "Versione registrata",
+ "headerUpstream": "Fonte delle versioni",
+ "pcieVariant": "PCIe / M.2",
+ "pcieTracked": "Prima il tag registrato dopo l’installazione riuscita, poi la versione del pacchetto gasket-dkms integro, altrimenti quella DKMS. Quest’ultima non identifica il livello di patch del fork.",
+ "pcieUpstream": "Ultimo tag GitHub di feranick/gasket-driver; cache di sette giorni e confronto del numero di build.",
+ "usbVariant": "USB",
+ "usbTracked": "libedgetpu1-std o libedgetpu1-max versione apt",
+ "usbUpstream": "Candidato locale apt-cache policy (Google Coral apt repo)",
+ "outro": "Se rileva una nuova versione, Monitor invia coral_driver_update_available sui canali abilitati. La notifica rimanda all’installer: scegli Reinstalla / aggiorna.",
+ "antiTitle": "Niente notifiche ripetute",
+ "antiBody": "Una notifica per variante quando cambia la versione disponibile. Non la ripete a ogni controllo giornaliero; avvisa di nuovo con una versione successiva.",
+ "rebootTitle": "Aggiornamenti PCIe: pianifica un riavvio",
+ "rebootBody": "Il modulo PCIe ricompilato deve essere caricato; un riavvio pianificato verifica anche il caricamento automatico. Aggiornare la libreria USB non richiede il riavvio dell’host, ma può richiedere quello delle app che usavano la precedente."
+ },
+ "manual": {
+ "heading": "Procedura manuale equivalente",
+ "intro": "Questi comandi mostrano i passaggi principali di ogni percorso per consultarli o eseguirli manualmente.",
+ "pcieHeading": "PCIe / M.2 (gasket + apex tramite DKMS)",
+ "usbHeading": "USB (runtime libedgetpu)"
+ },
+ "verification": {
+ "heading": "Verifica",
+ "pcieHeading": "PCIe / M.2",
+ "usbHeading": "USB"
+ },
+ "troubleshoot": {
+ "heading": "Risoluzione dei problemi",
+ "dkmsFailTitle": "Compilazione DKMS fallita dopo un aggiornamento del kernel",
+ "dkmsFailBody": "Gli header mancanti sono una possibile causa. Verifica proxmox-headers-$(uname -r) con dpkg -l proxmox-headers-$(uname -r) e installali se assenti. Controlla le incompatibilità nel log. Ripetere esegue cleanup_broken_gasket_dkms, senza garantire compatibilità con ogni kernel.",
+ "apexMissTitle": "/dev/apex_0 mancante dopo il riavvio",
+ "apexMissBody": "Verifica rilevamento PCIe e compatibilità del modulo con il kernel attivo. Prova modprobe apex e controlla dmesg | grep -iE \"apex|gasket\". Errori di compilazione, caricamento o configurazione slot/firmware possono impedire la creazione del dispositivo.",
+ "lxcMissTitle": "L’host vede /dev/apex_0, ma il LXC no",
+ "lxcMissBody": "Un nodo visibile non prova il funzionamento. Verifica accesso sull’host, montaggio LXC, regole cgroup e permessi UID/GID. Vedi libedgetpu1-std e i permessi con ls -l /dev/bus/usb/*/*. L’utente/gruppo mappato dell’app deve poter leggere e scrivere; root come proprietario non è di per sé un errore. Dopo modifiche esegui udevadm control --reload-rules && udevadm trigger e ricollega se necessario.",
+ "logTitle": "Registro d’installazione",
+ "logBody": "Ogni esecuzione scrive /tmp/coral_install.log. Se DKMS fallisce e il log esiste, aggiunge le ultime 50 righe di /var/lib/dkms/gasket/1.0/build/make.log. Allegalo alle richieste di assistenza."
+ },
+ "related": {
+ "heading": "Vedi anche",
+ "items": [
+ {
+ "label": "Aggiungi Coral TPU a LXC",
+ "href": "/docs/hardware/coral-tpu-lxc",
+ "tail": " — rendere disponibile il Coral dell’host a un container con un’app compatibile."
+ },
+ {
+ "label": "Installare driver NVIDIA (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": "— stessa idea per le GPU NVIDIA."
+ },
+ {
+ "label": "ProxMenux Monitor — Scheda hardware",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — il pannello Coral mostra driver, moduli, dispositivi e runtime, oltre alla temperatura se disponibile tramite un sensore supportato."
+ }
+ ]
+ }
+}
diff --git a/web/messages/it/docs/hardware/nvidia-host.json b/web/messages/it/docs/hardware/nvidia-host.json
new file mode 100644
index 00000000..728b1725
--- /dev/null
+++ b/web/messages/it/docs/hardware/nvidia-host.json
@@ -0,0 +1,175 @@
+{
+ "meta": {
+ "title": "Installa NVIDIA sull’host | Documentazione ProxMenux",
+ "description": "Installa i driver proprietari NVIDIA su Proxmox VE con ProxMenux: filtro GPU, verifiche di compilazione e DKMS, persistenza, patch NVENC facoltativa e aggiornamento delle librerie LXC."
+ },
+ "header": {
+ "title": "Installare driver NVIDIA sull'host",
+ "description": "Installa NVIDIA sull’host Proxmox VE. Filtra i rami mantenuti per ID PCI del GPU, verifica la compilazione, usa DKMS, gestisce nouveau e installa la persistenza. Può anche aggiornare le librerie dei LXC con accesso NVIDIA.",
+ "section": "Hardware: GPU e Coral-TPU"
+ },
+ "intro": {
+ "title": "Cosa fa",
+ "body": "ProxMenux rileva il GPU e propone rami NVIDIA mantenuti che includono il suo ID PCI. Blocca nouveau, scarica l’installer ufficiale .run, usa DKMS, installa nvidia-persistenced, le regole udev e NVIDIA Container Toolkit e propone una patch NVENC facoltativa. I controlli di compilazione riguardano il kernel in esecuzione; una compilazione riuscita non garantisce che ogni app funzioni. Ai LXC NVIDIA esistenti viene proposto un aggiornamento delle librerie userspace, con versione corrispondente tranne su Arch."
+ },
+ "who": {
+ "heading": "Per chi è questo?",
+ "body": "Per video o calcolo accelerato con Plex, Jellyfin, Frigate, Immich o Stable Diffusion in LXC, installa prima NVIDIA sull’host Proxmox. L’assegnazione diretta a una VM usa la procedura VFIO separata."
+ },
+ "prereqs": {
+ "title": "Prima di iniziare",
+ "gpu": "Un GPU NVIDIA installato nell’host. Il rilevamento è automatico; questa opzione non gestisce AMD o Intel.",
+ "gpuCheck": "lspci | grep -i nvidia",
+ "notVm": "Il GPU non deve essere riservato a una VM tramite VFIO. L’installer rifiuta questo caso per non interferire con l’assegnazione.",
+ "internet": "Accesso Internet sull’host. Scarica il driver da download.nvidia.com e può clonare nvidia-persistenced e nvidia-patch da GitHub.",
+ "space": "Prevedi spazio in /opt/nvidia per .run e RAM per compilare. Il percorso LXC non-Arch verifica 1500 MiB liberi e può richiedere temporaneamente 2048 MiB di RAM se inferiore, ripristinando poi il limite precedente. Prevedi il riavvio dell’host."
+ },
+ "vmWarn": {
+ "title": "GPU riservato a una VM? Fermati qui",
+ "body": "Se un dispositivo NVIDIA è associato a vfio-pci, l’installer esce anche con VM ferma. Una riserva non implica utilizzo attivo. Pianifica il ritorno al driver host e rimuovi assegnazioni VM/VFIO obsolete prima di riavviare e installare."
+ },
+ "running": {
+ "heading": "Eseguire l'installatore",
+ "body": "Apri Hardware Graphics → NVIDIA GPU Driver Installer in ProxMenux. Il menu dipende dalla presenza di un driver attivo.",
+ "imageAlt": "Menu hardware con installer NVIDIA evidenziato"
+ },
+ "howRuns": {
+ "heading": "Come funziona lo script",
+ "body": "Rileva dispositivi, seleziona una versione e installa. Una pulizia VFIO con conferma separata può precedere la panoramica. Preparazione di repository/header e download precedono la sostituzione del driver; non tutte le modifiche iniziano dopo un’unica conferma finale."
+ },
+ "walkthrough": {
+ "detect": {
+ "title": "GPU rilevamento e panoramica",
+ "body1": "Mostra controller video NVIDIA, stato del driver o «Nessun driver NVIDIA installato» e i LXC configurati per NVIDIA con la loro versione interna.",
+ "body2": "Verifica GPU e versioni di host/container. Annulla nella panoramica se la scelta non è quella prevista; una pulizia VFIO confermata prima è già stata applicata.",
+ "imageAlt": "Panoramica prima dell’installazione: GPU, driver e LXC NVIDIA"
+ },
+ "version": {
+ "title": "Scegli la versione del driver",
+ "body1": "Filtra le versioni di nvidia.com che includono l’ID PCI del GPU nella tabella dei chip supportati ed esclude versioni beta/sviluppo tramite euristiche. <versione> — Consigliata privilegia l’ultima della branca installata, poi Production Branch e infine il numero di versione supportato più alto.",
+ "body2": "Se il driver risulta modificato con keylase, la selezione si limita alla tabella NVENC. Reinstalla / aggiorna mantiene conferme e scelta della patch; verifica il risultato finale.",
+ "whyTitle": "Come viene validata la compatibilità del kernel",
+ "whyBody": "Filtra per rami mantenuti e ID PCI, senza matrice fissa kernel/driver. Una compilazione preliminare verifica il kernel attuale. Un errore confermato riporta alla selezione; se il test non è disponibile può avvisare e continuare. Restano necessarie installazione e verifica del funzionamento.",
+ "imageAlt": "Selettore dei rami compatibili GPU con versione consigliata in cima"
+ },
+ "uninstall": {
+ "title": "Rimuovere il driver precedente prima di reinstallare",
+ "body": "Dopo download e verifica dell’installer scelto, rimuove il driver precedente. Ferma servizi NVIDIA, scarica moduli, rimuove voci DKMS e disinstalla nvidia-* / libnvidia-* / cuda-*. Vale anche per la reinstallazione confermata della stessa versione."
+ },
+ "prepare": {
+ "title": "Preparare il sistema",
+ "body": "Durante la preparazione, lo script:",
+ "items": [
+ "Controlla i repository prima di rimuovere o installare componenti. Senza abbonamento e con solo Enterprise, chiede di passare a no-subscription; se rifiuti, ferma l’installazione.",
+ "Installa pve-headers-$(uname -r) (o proxmox-headers-$(uname -r)), build-essential e dkms.",
+ "Crea il file gestito da ProxMenux /etc/modprobe.d/proxmenux-nouveau-blacklist.conf con blacklist nouveau e options nouveau modeset=0. Registra l’eventuale riga aggiunta a blacklist.conf e tenta di scaricare nouveau.",
+ "Scrive /etc/modules-load.d/nvidia-vfio.conf con nvidia e nvidia_uvm così i moduli caricano presto al boot."
+ ]
+ },
+ "download": {
+ "title": "Scaricare ed eseguire l'installatore NVIDIA",
+ "body": "Scarica NVIDIA-Linux-x86_64-<version>.run in /opt/nvidia e verifica dimensione e tipo eseguibile. Sono controlli di formato, non della firma crittografica. Registra DKMS per ricompilare ai cambi di kernel; sorgenti e kernel devono restare compatibili.",
+ "imageAlt": "Avanzamento del download e compilazione DKMS dell’installer NVIDIA"
+ },
+ "persist": {
+ "title": "Servizio di persistenza e regole udev",
+ "body": "Installa /etc/udev/rules.d/70-nvidia.rules per creare /dev/nvidia* all’avvio. Aiuta a evitare accessi LXC prima che i dispositivi siano disponibili."
+ },
+ "nvenc": {
+ "title": "Opzionale: applicare la patch NVENC",
+ "body": "I limiti di sessioni NVENC dipendono da GPU e driver. nvidia-smi può mostrare «version mismatch».",
+ "body2": "Debian / Ubuntu e altri container glibc ricevono l’installer .run estratto con --no-kernel-modules --no-dkms --no-install-compat32-libs; la RAM può salire temporaneamente a 2 GiB e poi essere ripristinata. Arch, Manjaro ed EndeavourOS usano pacman -Syu nvidia-utils dai repository, senza fissare la versione host: verifica il risultato. Alpine riceve il contenuto .run estratto tramite pct push, installa gcompat e binutils con apk e crea link SONAME con readelf. Verifica il funzionamento: la compatibilità non garantisce ogni libreria su musl.",
+ "imageAlt": "Dialogo con LXC NVIDIA e versioni per confermare l’aggiornamento"
+ },
+ "reboot": {
+ "title": "Riavvia",
+ "body": "Dopo l’installazione del driver, lo script rigenera initramfs per tutti i kernel; il suo ultimo passaggio propone il riavvio. Prevedi questo riavvio per verificare la configurazione persistente dei moduli e di nouveau a un nuovo avvio, anche se il nuovo driver risponde già prima del riavvio."
+ }
+ },
+ "reinstallUninstall": {
+ "heading": "Reinstallare o disinstallare",
+ "intro": "Se nvidia è caricato e nvidia-smi restituisce una versione, mostra un menu di azioni. Rileva così un driver attivo; possono esserci file installati anche senza modulo caricato.",
+ "imageAlt": "Menu di azione NVIDIA offerto quando un driver è già installato — due scelte: Reinstallare / aggiornare il driver, o disinstallare completamente il driver NVIDIA",
+ "imageCaption": "Il menu di azione appare solo quando un driver NVIDIA è attualmente attivo sull'host.",
+ "reinstallHeading": "Reinstallare / aggiornare",
+ "reinstallBody": "Seleziona la versione, prepara repository/header, scarica e verifica la compilazione prima di sostituire il driver. Permette aggiornamenti nel ramo mantenuto o un altro ramo supportato. Dopo ripropone le opzioni per librerie LXC e patch NVENC.",
+ "uninstallHeading": "Disinstallare — ciò che viene rimosso",
+ "uninstallIntro": "Dopo conferma Sì/No, rimuove i seguenti componenti:",
+ "uninstallItems": [
+ "Ferma e disabilita nvidia-persistenced e nvidia-powerd, tenta di scaricare nvidia_uvm, nvidia_drm, nvidia_modeset e nvidia, poi esegue nvidia-uninstall --silent per l’installazione .run. I carichi di lavoro LXC che dipendono da NVIDIA sono coinvolti; client attivi possono impedire lo scaricamento.",
+ "Esegue apt purge su nvidia-*, libnvidia-*, cuda-* e libcudnn*, rimuove l'albero sorgente DKMS e le cartelle nvidia-persistenced e nvidia-patch in /opt/nvidia.",
+ "Rimuove la configurazione di caricamento moduli /etc/modules-load.d/nvidia-vfio.conf e le regole nouveau gestite da ProxMenux. Migra e rimuove anche i vecchi file ProxMenux con le due righe note; conserva i file modificati o estranei dell’amministratore.",
+ "Rimuove /etc/udev/rules.d/70-nvidia.rules e imposta NVENC su removed nel registro delle installazioni gestite; non esiste un file di stato separato.",
+ "Rigenera initramfs per tutti i kernel, esegue proxmox-boot-tool refresh secondo la configurazione di avvio e chiede di riavviare."
+ ],
+ "lxcWarnTitle": "LXC con accesso NVIDIA",
+ "lxcWarnBody": "Rimuovere il driver host interrompe le app LXC NVIDIA anche se restano installate le librerie. Pianifica manutenzione per Frigate, Plex, Jellyfin, Ollama e altre app GPU."
+ },
+ "updates": {
+ "heading": "Notifiche sugli aggiornamenti",
+ "body": "Il driver NVIDIA installato viene registrato nell’elenco delle installazioni gestite da ProxMenux. All’avvio e ogni 24 ore, il Monitor confronta le versioni disponibili su download.nvidia.com/XFree86/Linux-x86_64/ con la versione indicata da nvidia-smi. La notifica viene inviata solo quando è disponibile una versione di manutenzione più recente nello stesso ramo del driver installato.",
+ "kindsHeading": "Messaggio di aggiornamento",
+ "kindsItems": [
+ "Manutenzione nello stesso ramo. Esempio: 580.65.06 installata → 580.105.08 disponibile. Monitor non deduce compatibilità del kernel tra rami."
+ ],
+ "antiTitle": "Evitare notifiche ripetute",
+ "antiBody": "Una notifica per nuova versione, non a ogni controllo giornaliero. Nessuna notifica se non esistono versioni più recenti nel ramo installato.",
+ "applyTitle": "Applicare l'aggiornamento",
+ "applyBody": "Monitor segnala gli aggiornamenti senza installarli automaticamente. Apri l’installer, scegli Reinstalla / aggiorna e una versione supportata, poi completa compilazione e installazione. Prevedi il riavvio proposto e verifica poi host e librerie LXC."
+ },
+ "verify": {
+ "heading": "Verifica dell'installazione",
+ "intro": "Dopo il riavvio dell’host, accedi tramite SSH o shell Proxmox ed esegui:",
+ "after": "Verifica GPU e versione prevista. Possono già comparire processi se servizi host o container avviati automaticamente usano il GPU. Poi controlla la persistenza:",
+ "imageAlt": "Output di nvidia-smi sull’host con GPU rilevato e versione del driver installata"
+ },
+ "troubleshoot": {
+ "heading": "Risoluzione dei problemi",
+ "smiFailTitle": "nvidia-smi mostra «NVIDIA-SMI has failed»",
+ "smiFailBody": "Possibili cause: nouveau, header assenti o incompatibili, sorgenti del driver incompatibili o altri errori di caricamento. Controlla lsmod | grep nouveau, dmesg | grep -i nvidia e registri installer/DKMS. Se serve correggere nouveau, verifica /etc/modprobe.d/proxmenux-nouveau-blacklist.conf prima di update-initramfs -u -k all e del riavvio. Non ogni errore di compilazione riguarda gli header.",
+ "lxcMissTitle": "Il contenitore LXC non può vedere il GPU dopo l'aggiornamento dell'host",
+ "lxcMissBody": "Prima di reinstallare controlla dispositivi host, permessi LXC e versione delle librerie. Un conflitto richiede eventualmente il driver utente corrispondente tramite il percorso supportato della distribuzione; su glibc usa --no-kernel-modules. Le librerie non correggono montaggi o permessi mancanti.",
+ "logTitle": "Controlla il registro di installazione",
+ "logBody": "L’installazione scrive in /tmp/nvidia_install.log. In caso di errore controlla download, compilazione DKMS e servizi. Allega il registro alla segnalazione GitHub."
+ },
+ "manualSteps": {
+ "heading": "Cerchi i passaggi manuali?",
+ "body": "Vedi wget e ./NVIDIA-Linux-...run. Spiega i componenti senza riprodurre esattamente l’installer. La procedura mantenuta ProxMenux offre filtro GPU, verifica di compilazione, aggiornamenti LXC e controlli VFIO."
+ },
+ "related": {
+ "heading": "Vedi anche",
+ "items": [
+ {
+ "label": "Aggiungi GPU a VM (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — assegnare NVIDIA direttamente a una VM tramite VFIO."
+ },
+ {
+ "label": "Aggiungi GPU a LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — condividere NVIDIA con uno o più container."
+ },
+ {
+ "label": "Cambia modalità GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — passare da passthrough VM a condivisione LXC e viceversa."
+ },
+ {
+ "label": "ProxMenux Monitor — Scheda hardware",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — finestra GPU che apre questo installer e mostra il monitoraggio in tempo reale."
+ },
+ {
+ "label": "Comandi per passthrough GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": "— lspci / dmesg / IOMMU / nvidia-smi riferimento."
+ }
+ ]
+ }
+}
diff --git a/web/messages/it/docs/hardware/switch-gpu-mode.json b/web/messages/it/docs/hardware/switch-gpu-mode.json
new file mode 100644
index 00000000..49a8ee5b
--- /dev/null
+++ b/web/messages/it/docs/hardware/switch-gpu-mode.json
@@ -0,0 +1,172 @@
+{
+ "meta": {
+ "title": "Cambia modalità GPU (VM ↔ LXC) | Documentazione ProxMenux",
+ "description": "Passa un GPU da VFIO per VM al driver nativo per LXC o viceversa. ProxMenux rileva il driver, propone come gestire gli ospiti coinvolti, rimuove l’audio associato e rigenera initramfs se cambia la configurazione dell’host."
+ },
+ "header": {
+ "title": "Cambia modalità GPU (VM ↔ LXC)",
+ "description": "Passa un GPU assegnato tra passthrough VM e condivisione LXC. ProxMenux gestisce driver, VFIO, moduli e initramfs e chiede come trattare gli ospiti coinvolti. Controlla le scelte e verifica il risultato dopo il riavvio.",
+ "section": "Hardware: GPU e Coral-TPU"
+ },
+ "intro": {
+ "title": "Cosa fa",
+ "body": "Con vfio-pci il GPU è riservato a una VM. Con il driver nativo (i915 / amdgpu / nvidia), host e LXC possono condividerlo. Cambia modalità GPU gestisce vfio.conf, blocchi dei moduli e riferimenti negli ospiti, segnalando le assegnazioni residue."
+ },
+ "graphics": {
+ "lxcTitle": "Pronto per container LXC",
+ "lxcDesc": "Driver nativo attivo",
+ "vmTitle": "Pronto per passthrough VM",
+ "vmDesc": "Driver VFIO-PCI attivo"
+ },
+ "when": {
+ "heading": "Quando dovrei usarlo?",
+ "intro": "Usalo se il GPU è già assegnato e vuoi cambiarne l’utilizzo:",
+ "headerSituation": "Situazione",
+ "headerUse": "Usa questa pagina?",
+ "rows": [
+ {
+ "situation": "GPU libero, mai assegnato: usarlo in una VM.",
+ "useRich": "No — usa vfio-pci, ma voglio usarlo in un LXC.",
+ "useRich": "Sì — questa pagina."
+ },
+ {
+ "situation": "Il GPU è condiviso con un LXC; voglio dedicarlo a una VM.",
+ "useRich": "Sì — questa pagina."
+ },
+ {
+ "situation": "Voglio rimuovere tutte le assegnazioni di questo GPU.",
+ "use": "La modalità LXC restituisce il GPU al driver host; la politica di conflitto VM può rimuovere le voci hostpci, ma le voci dei dispositivi LXC vanno rimosse separatamente. Il GPU resta associato a un driver."
+ }
+ ]
+ },
+ "prereqs": {
+ "title": "Prima di iniziare",
+ "assigned": "Un GPU già assegnato a una VM tramite VFIO o a un LXC. Per la prima assegnazione usa Aggiungi GPU a VM / LXC.",
+ "iommu": "IOMMU deve essere attivo sull’host passando alla modalità VM. Contano sia le impostazioni del firmware sia il supporto del kernel. Se intel_iommu=on o amd_iommu=on manca nel kernel in esecuzione, lo script lo aggiunge con iommu=pt a /etc/kernel/cmdline (marcatore di root ZFS) o a /etc/default/grub, poi esegue proxmox-boot-tool refresh o update-grub. Controlla eventuali avvisi e riavvia quando richiesto.",
+ "iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
+ "reboot": "Prevedi un riavvio. Le modifiche persistenti a driver e avvio possono richiedere la rigenerazione di initramfs e un riavvio. Lo script lo propone al termine.",
+ "knowList": "Identifica VM e LXC che usano il GPU. Lo script rileva i riferimenti e chiede come trattare ogni ospite; conoscere l’elenco facilita la verifica."
+ },
+ "blocklist": {
+ "title": "Non tutte le GPU sono sicure per passare a un VM",
+ "body": "Lo script blocca la modalità VM per gli ID dispositivo 8086:5a84 e 8086:5a85 secondo la propria politica di compatibilità. Se un GPU selezionato corrisponde, interrompe il passaggio alla modalità VM e torna alla selezione del GPU, oppure esce se è l’unico GPU. Questa blocklist non impedisce il passaggio alla modalità LXC; altri controlli possono comunque applicarsi."
+ },
+ "running": {
+ "heading": "Eseguire lo script",
+ "body": "Apri Hardware: GPU e Coral-TPU → Cambia modalità GPU (VM ↔ LXC) in ProxMenux.",
+ "imageAlt": "Voce Cambia modalità GPU (VM ↔ LXC) nel menu hardware"
+ },
+ "howRuns": {
+ "heading": "Come funziona lo script",
+ "body": "La scelta del GPU e della direzione precede il cambio principale. Una pulizia VFIO separata può chiedere conferma prima; gli ospiti coinvolti hanno dialoghi propri. Leggi ogni conferma: non esiste un’unica conferma finale per tutte le modifiche."
+ },
+ "walkthrough": {
+ "heading": "Procedura passo per passo",
+ "detect": {
+ "title": "Rilevare GPU e driver attuale",
+ "body": "Esamina i controller VGA, 3D e Display dell’host e consulta /sys/bus/pci/devices/*/driver. Mostra nome, indirizzo PCI e driver attuale di ogni GPU per identificarne la modalità.",
+ "imageAlt": "Elenco di controllo GPU che mostra ogni GPU rilevato con il suo driver corrente (vfio-pci / nvidia / amdgpu / i915) e slot PCI"
+ },
+ "pickGpu": {
+ "title": "Scegli i GPU da cambiare",
+ "body": "Un solo GPU viene selezionato automaticamente. Con più GPU puoi selezionarne diversi, purché siano nella stessa modalità. Se le modalità sono miste, devi restringere la selezione.",
+ "tipTitle": "Cambiare più GPU insieme",
+ "tipBody": "Esempio: passare tre NVIDIA alla modalità VM, poi riportare l’iGPU a LXC. Due esecuzioni, ciascuna con destinazione comune, anziché cambiare ogni scheda separatamente."
+ },
+ "direction": {
+ "title": "Rivedere la direzione proposta",
+ "intro": "Sulla base della modalità corrente, lo script propone il contrario come obiettivo:",
+ "items": [
+ "VM → LXC: rimuove l’associazione a vfio-pci affinché il driver nativo (nvidia, amdgpu, i915) possa usare il GPU. Per NVIDIA elimina le voci BDF corrispondenti da /etc/udev/rules.d/10-proxmenux-vfio-bind.rules per il prossimo avvio.",
+ "LXC → VM: prepara l’associazione a vfio-pci. AMD / Intel bloccano il driver nativo e usano options vfio-pci ids=…. Per NVIDIA, nvidia viene bloccato globalmente solo quando ogni GPU NVIDIA dell’host è in VFIO; altrimenti regole per BDF applicano driver_override=vfio-pci ai dispositivi dei gruppi IOMMU coinvolti, e i GPU NVIDIA esterni a questi gruppi conservano nvidia. Controlla ogni membro del gruppo prima del passaggio."
+ ],
+ "outro": "Confermare la direzione o annullare."
+ },
+ "conflict": {
+ "title": "Scelte per ogni VM o LXC coinvolto",
+ "body": "Controlla /etc/pve/lxc/*.conf per riferimenti alla famiglia del driver GPU e /etc/pve/qemu-server/*.conf per assegnazioni PCI. Il rilevamento LXC non identifica ogni scheda tramite BDF esatto. Verifica gli ospiti rilevati e scegli come trattarli:",
+ "headerPolicy": "Politica",
+ "headerEffect": "Effetto",
+ "headerWhen": "Quando scegliere",
+ "keepPolicy": "Mantieni la configurazione, disattiva l’avvio automatico",
+ "keepEffect": "pct set CTID -onboot 0 o qm set VMID -onboot 0. Conserva le voci GPU.",
+ "keepWhen": "Se vuoi riutilizzare l’ospite quando il GPU tornerà alla modalità iniziale. Scelta predefinita prudente.",
+ "removePolicy": "Rimuovere GPU da config",
+ "removeEffect": "Rimuove le voci hostpci / dev identificate e i riferimenti precedenti supportati.",
+ "removeWhen": "Se l’ospite deve funzionare senza GPU. Controlla prima l’app: il ripiego sulla CPU dipende dall’applicazione e rimuovere il dispositivo non la riconfigura automaticamente.",
+ "imageAlt": "Dialogo per scegliere come gestire ogni VM o LXC coinvolto"
+ },
+ "audio": {
+ "title": "Rimuovere l’audio associato uscendo dalla modalità VM",
+ "body1": "Molti GPU NVIDIA / AMD espongono audio HDMI nella funzione .1 dello stesso slot; possono esserci altri dispositivi audio assegnati. Rimuovendo il GPU possono restare voci audio hostpci obsolete. Verifica le assegnazioni da mantenere.",
+ "body2": "Identifica gli indirizzi BDF audio e mostra un elenco delle assegnazioni da rimuovere. Elimina anche gli ID vendor:device da /etc/modprobe.d/vfio.conf, solo se nessun’altra VM li usa."
+ },
+ "apply": {
+ "title": "Applicare modifiche a host e ospiti",
+ "body": "Una volta confermato, lo script scrive i cambiamenti di lato host — vfio.conf, blacklist, moduli e (per NVIDIA) la regola per-BDF udev a /etc/udev/rules.d/10-proxmenux-vfio-bind.rules più lo stato BDF a /etc/proxmenux/vfio-bind.bdfs. Esso applica anche la politica di conflitto scelta per ogni VM/LXC interessato. Se l'host config è effettivamente cambiato, viene eseguito update-initramfs -u -k all seguito da proxmox-boot-tool refresh; altrimenti entrambi sono saltati."
+ },
+ "reboot": {
+ "title": "Riavvia",
+ "body": "Riavvia l’host per applicare la nuova associazione persistente. Puoi rimandare, ma verifica il driver attivo prima di avviare l’ospite di destinazione: fino al riavvio può restare quello precedente.",
+ "imageAlt": "Riepilogo finestra di dialogo che cosa è cambiato, seguito dal prompt di riavvio"
+ }
+ },
+ "manual": {
+ "heading": "Verifica manuale",
+ "intro": "Prima di VM → LXC, controlla driver e regole BDF. L’esempio NVIDIA usa 10de:2204: adattalo alla tua scheda. I comandi leggono lo stato; lo script gestisce anche ospiti e membri del gruppo IOMMU.",
+ "lxcToVm": "Prima di LXC → VM, controlla indirizzo PCI e gruppo IOMMU. Sostituisci l’indirizzo di esempio e verifica tutti i membri prima dell’assegnazione.",
+ "oneVmTitle": "Un GPU fisico assegnato con VFIO può essere usato da una sola VM alla volta",
+ "oneVmBody": "Mettere più voci hostpci con lo stesso slot PCI in due VM è valida configurazione ma solo una delle VM può iniziare con la GPU — la seconda fallirà. Il passo della politica di conflitto ProxMenux è esattamente quello di evitare questa trappola."
+ },
+ "verification": {
+ "heading": "Verifica dopo il riavvio"
+ },
+ "troubleshoot": {
+ "heading": "Risoluzione dei problemi",
+ "stillVfioTitle": "GPU mostra ancora vfio-pci dopo il passaggio alla modalità LXC",
+ "stillVfioBody": "Un modulo VFIO caricato non dimostra quale driver usi il GPU. Verifica associazione, completamento di update-initramfs e riavvio. lsmod | grep vfio elenca solo moduli. Per AMD / Intel controlla vfio.conf; per NVIDIA, /etc/proxmenux/vfio-bind.bdfs e /etc/udev/rules.d/10-proxmenux-vfio-bind.rules. Correggi le regole obsolete prima di update-initramfs -u -k all e del riavvio.",
+ "vmFailTitle": "Una VM non si avvia dopo il passaggio del GPU a LXC",
+ "vmFailBody": "Verifica i riferimenti hostpci obsoleti. L’opzione Rimuovi GPU dalla configurazione può eliminarli durante il cambio previsto. Prima di rieseguire lo script controlla la direzione per non invertire la modalità per errore. In alternativa rimuovi l’assegnazione in Proxmox con la VM ferma.",
+ "smiFailTitle": "nvidia-smi mostra «Driver/library version mismatch» tornando a LXC",
+ "smiFailBody": "Confronta il modulo NVIDIA caricato con le librerie installate, anche nei LXC. Allinea le versioni: riavviare carica il modulo installato ma non corregge pacchetti incompatibili. Ricaricare con modprobe -r nvidia e modprobe nvidia richiede di fermare i client GPU e può fallire se sono usati moduli dipendenti.",
+ "logTitle": "Registro di esecuzione",
+ "logBody": "Ogni esecuzione scrive in /tmp/proxmenux_gpu_switch_mode.log sull’host. Allega il registro quando chiedi aiuto su GitHub."
+ },
+ "related": {
+ "heading": "Vedi anche",
+ "items": [
+ {
+ "label": "Aggiungi GPU a VM (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — configurazione iniziale della modalità VM."
+ },
+ {
+ "label": "Aggiungi GPU a LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — configurazione iniziale della modalità LXC."
+ },
+ {
+ "label": "Installare driver NVIDIA (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": "— necessario per la modalità LXC su GPU NVIDIA."
+ },
+ {
+ "label": "ProxMenux Monitor — Scheda hardware",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — sezione Schede grafiche, con modalità attuale e comando per cambiarla."
+ },
+ {
+ "label": "Comandi per passthrough GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — riferimento rapido ai comandi."
+ }
+ ]
+ }
+}
diff --git a/web/messages/pt/docs/hardware/coral-tpu-lxc.json b/web/messages/pt/docs/hardware/coral-tpu-lxc.json
new file mode 100644
index 00000000..c308f707
--- /dev/null
+++ b/web/messages/pt/docs/hardware/coral-tpu-lxc.json
@@ -0,0 +1,120 @@
+{
+ "meta": {
+ "title": "Adicionar Coral TPU ao LXC | Documentação ProxMenux",
+ "description": "Partilhe um Google Coral TPU USB ou M.2 / PCIe com um LXC Proxmox. O ProxMenux configura dispositivos, permissões e montagens, inicia o contentor e instala o runtime Edge TPU em distribuições compatíveis."
+ },
+ "header": {
+ "title": "Adicionar Coral TPU ao LXC",
+ "description": "Partilhe um Coral USB Accelerator ou M.2 / Mini-PCIe com um LXC. O ProxMenux configura o contentor e o runtime Edge TPU. Esta opção trata apenas da TPU: para Quick Sync, VA-API ou NVENC, execute também Adicionar GPU ao LXC.",
+ "section": "Hardware: GPUs e Coral-TPU"
+ },
+ "intro": {
+ "title": "O que faz",
+ "body": "Escreve a configuração em /etc/pve/lxc/<ctid>.conf para USB Accelerator, Coral M.2 / PCIe ou ambos. Inicia o contentor e instala o runtime Google libedgetpu. O GPU configura-se separadamente em apt-get. Os contentores de outras distribuições podem usar o modo apenas de passagem direta, que omite a instalação APT de libedgetpu. É útil se a aplicação já incluir o runtime, como a imagem Docker Frigate.",
+ "downtime": "Preveja uma breve interrupção do contentor. O script para-o para alterar a configuração e inicia-o para instalar o runtime. Estas alterações não exigem reiniciar o anfitrião."
+ },
+ "hostPrep": {
+ "title": "Prepare primeiro o anfitrião",
+ "body": "M.2 / PCIe exige gasket/apex no anfitrião e um dispositivo funcional. USB exige dispositivo ligado e permissões; a aplicação não precisa de executar no anfitrião. libedgetpu deve estar onde a aplicação executa. Ordem: preparar anfitrião → acesso LXC → configurar aplicação."
+ },
+ "running": {
+ "heading": "Executar o script",
+ "body": "No ProxMenux, abra Hardware: GPU e Coral-TPU → Adicionar Coral TPU ao LXC.",
+ "imageAlt": "Opção Adicionar Coral TPU ao LXC no menu de hardware"
+ },
+ "howRuns": {
+ "heading": "Como funciona o script",
+ "body": "Escolha o contentor. O script configura o acesso USB mesmo sem Coral USB ligado e acrescenta M.2 / PCIe quando deteta esse hardware."
+ },
+ "walkthrough": {
+ "heading": "Procedimento passo a passo",
+ "pick": {
+ "title": "Escolha o contentor LXC",
+ "body": "O seletor mostra os contentores elegíveis de pct list; os OCI são ocultados e geridos em Apps no gestor OCI. Escolha um, iniciado ou parado. O script para-o se necessário, configura-o e inicia-o para instalar o runtime."
+ },
+ "gpuHint": {
+ "title": "Sugestão opcional de acesso ao GPU",
+ "body": "Se for detetado um GPU não configurado para este contentor, uma caixa de diálogo recomenda /dev/coral e monta a árvore completa /dev/bus/usb no contentor. A configuração é escrita mesmo sem Coral USB ligado e expõe outros dispositivos além do Coral.",
+ "whyTitle": "Porquê montar o /dev/bus/usb em vez do /dev/coral?",
+ "whyBody": "O caminho USB, como /dev/bus/usb/001/005, muda ao voltar a ligar o acelerador. As versões antigas montavam a ligação /dev/coral e podiam manter um caminho desatualizado. Montar toda a árvore USB permite ver o dispositivo atual. A aplicação poderá ter de voltar a abrir o dispositivo."
+ },
+ "pcie": {
+ "title": "Configurar acesso M.2 / PCIe no LXC",
+ "body1": "Se detetar Coral M.2 / PCIe e existir /dev/apex_0, utiliza a API Proxmox dev para gerir cgroup2 em LXC com e sem privilégios:",
+ "body2": "Se /dev/apex_0 estiver ausente após create=file e, apenas quando o número major do apex consta de /proc/devices, uma regra cgroup2 clássica. Nenhum dos dois cria um dispositivo funcional:",
+ "rebootTitle": "Reiniciar o host primeiro se você acabou de instalar os drivers Coral",
+ "rebootBody": "A montagem alternativa não carrega apex no anfitrião. Carregue o controlador ou reinicie após a instalação e verifique o dispositivo. Execute novamente o script para aplicar a entrada moderna e reinicie o contentor."
+ },
+ "drivers": {
+ "title": "Iniciar o LXC e instalar o runtime Coral",
+ "body": "Inicia o contentor e aguarda até 15 segundos pelo estado running; depois utiliza pct exec para executar o instalador no interior. O instalador:",
+ "items": [
+ "Corre apt-get update.",
+ "Instala os pré-requisitos do repositório Coral: gnupg, curl, ca-certificates.",
+ "Importa a chave Coral GPG do Google para /etc/apt/keyrings/coral-edgetpu.gpg (caminho moderno, o mesmo que o instalador do host usa) e adiciona o repositório coral-edgetpu-stable APT com signed-by=.",
+ "Instala libedgetpu1-std por predefinição. Se detetar Coral M.2, oferece libedgetpu1-std ou libedgetpu1-max. A escolha do pacote não configura por si só a deteção na aplicação."
+ ],
+ "noIgpuTitle": "Porque não são instalados controladores iGPU aqui?",
+ "noIgpuBody": "Antes instalava também va-driver-all, intel-opencl-icd e outros pacotes Intel para combinar Quick Sync e Coral. Isso causava falhas confusas quando se pretendia apenas Coral. Agora o iGPU configura-se em apt-get em Debian/Ubuntu. Para Alpine, Arch, RHEL ou SUSE, detetados por /etc/os-release, oferece continuar apenas com acesso ao dispositivo ou cancelar. A primeira opção configura /etc/pve/lxc/<ctid>.conf sem instalar libedgetpu. Se a aplicação já incluir o runtime, como Frigate Docker, esse modo basta. Caso contrário, instale libedgetpu seguindo o lsmod | grep apex. Se faltar, tente modprobe apex ou reinicie após a instalação do controlador. Quando existir /dev/apex_0 no anfitrião, verifique a entrada de dispositivo LXC (volte a executar o script se só foram escritas as entradas alternativas) e reinicie o contentor com pct stop <ctid> && pct start <ctid>.",
+ "replugTitle": "Coral USB desaparece ao ligar noutra porta",
+ "replugBody": "Confirme que o LXC monta /dev/bus/usb em vez da ligação /dev/coral. A configuração deve incluir lxc.mount.entry: /dev/bus/usb dev/bus/usb ... sem depender diretamente de /dev/coral. Execute novamente o script se a configuração for antiga.",
+ "alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime não instalado",
+ "alpineBody": "O modo apenas de passagem direta configura o dispositivo sem instalar libedgetpu. Use um pacote compatível ou compile o código; verifique a disponibilidade antes de comandos como apk add em Alpine. O Frigate pode incluir o runtime. Com Docker no LXC, encaminhe também M.2 com --device /dev/apex_0:/dev/apex_0 ou monte USB no Docker: a montagem LXC não basta.",
+ "frigateTitle": "Frigate apresenta «Coral EdgeTPU detected but not available»",
+ "frigateBody": "Verifique runtime, visibilidade e acesso de leitura/escrita do processo real. Para USB, examine permissões e eventual grupo plugdev. Para M.2, inspecione /dev/apex_0 com ls -l /dev/apex_0. Um nome como apex em /etc/group não basta: GID numéricos e mapeamentos LXC devem coincidir. Verifique se outro processo ocupa a TPU; não passe logo para modo privilegiado.",
+ "logsTitle": "Verificar os registos da máquina e do contentor",
+ "logsBody": "No anfitrião, veja as mensagens do kernel com journalctl -k | grep -i -e apex -e gasket -e usb. No LXC, consulte os registos da aplicação; com Docker aninhado use docker logs <container>. Permissões, runtime ausente, ligação USB ou outro processo a utilizar a TPU podem causar falhas."
+ },
+ "related": {
+ "heading": "Relacionados",
+ "items": [
+ {
+ "label": "Instalar Coral TPU no anfitrião",
+ "href": "/docs/hardware/install-coral-tpu-host",
+ "tail": " — requisito para utilizar placas Coral M.2 / PCIe num CT."
+ },
+ {
+ "label": "Adicionar GPU ao LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — acesso GPU, frequentemente combinado com Coral no Frigate."
+ }
+ ]
+ }
+}
diff --git a/web/messages/pt/docs/hardware/gpu-vm-passthrough.json b/web/messages/pt/docs/hardware/gpu-vm-passthrough.json
new file mode 100644
index 00000000..fb47b60b
--- /dev/null
+++ b/web/messages/pt/docs/hardware/gpu-vm-passthrough.json
@@ -0,0 +1,178 @@
+{
+ "meta": {
+ "title": "Adicionar GPU a VM | Documentação ProxMenux",
+ "description": "Atribua uma GPU física a uma VM Proxmox. O ProxMenux verifica IOMMU, configura VFIO e dispositivos VM e deteta conflitos com outras VM ou LXC."
+ },
+ "header": {
+ "title": "Adicionar GPU a VM (passthrough)",
+ "description": "Deteta GPU Intel, AMD ou NVIDIA para acesso direto numa VM. Verifica IOMMU e dispositivos associados, configura VFIO e VM e aplica regras de compatibilidade. Verifique todos os dispositivos afetados.",
+ "section": "Hardware: GPUs e Coral-TPU"
+ },
+ "intro": {
+ "title": "O que faz",
+ "body": "Automatiza os passos do anfitrião e hostpci da lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "iommu": "Suporte IOMMU no hardware e ativação no firmware quando necessária (Intel VT-d ou AMD-Vi). Verifica o sistema e pode configurar Linux; não muda BIOS/UEFI nem prova que IOMMU inativo esteja desativado no firmware.",
+ "q35": "O assistente exige q35 e recusa i440fx. O tipo de máquina é distinto do firmware BIOS/UEFI. Mudar o chipset de uma VM existente exige planeamento e não é automático.",
+ "q35Check": "qm config VMID | grep machine",
+ "moreGpus": "Prepare outra GPU ou acesso alternativo por SSH, IPMI ou série. Reservar a GPU principal pode retirar a imagem local. Em NVIDIA, uma placa fora do grupo IOMMU afetado pode ficar no anfitrião.",
+ "nvidiaInstalled": "Após vfio-pci em vez de nvidia. O módulo nvidia pode continuar disponível para outras placas fora do grupo IOMMU afetado. Verifique com nvidia-smi."
+ },
+ "pickOne": {
+ "title": "Atribuição exclusiva VM ou partilha LXC",
+ "body": "Um GPU ligado a vfio-pci para a passagem de VM não pode ser usado simultaneamente pelo hospedeiro ou por um LXC. Se você tiver duas GPUs, você pode dedicar uma a cada caminho. Se você tem apenas um, escolha:",
+ "vmItem": "VM: acesso direto e exclusivo para essa VM.",
+ "lxcItem": "LXC (intel_iommu=on ou amd_iommu=on e existem grupos IOMMU. Se o parâmetro já estiver guardado para o próximo arranque, continua em modo de reinício pendente; caso contrário, um passo confirmado separadamente pode adicioná-lo com iommu=pt. A sua heurística de ficheiro de arranque utiliza /etc/kernel/cmdline quando aí existe uma marca de raiz ZFS como root=ZFS=; caso contrário, utiliza /etc/default/grub. Essa heurística não é prova do carregador de arranque real. O IOMMU recém-configurado entra em vigor após o reinício; verifique depois os grupos reais.",
+ "tipTitle": "Já configurou a pós-instalação?",
+ "tipBody": "Se o /sys/bus/pci/devices/<pci>/reset_method. APU ou dedicada sem FLR fica bloqueada pela política do assistente; subtipo desconhecido sem FLR exige confirmação. Não prova impossibilidade universal.",
+ "Estado D3cold. Bloqueia placas AMD que indicam D3cold pelo risco de falha na ativação. Verifique alimentação e firmware.",
+ "Análise do grupo IOMMU. Lê /sys/kernel/iommu_groups/ e inclui no plano da VM todos os membros exceto pontes, possivelmente controladores de rede ou de armazenamento. Se o grupo contiver dispositivos de outro slot, o script lista-os antes do resumo; verifique se o anfitrião não precisa de nenhum. Se o IOMMU aguardar reinício, os grupos reais não estão disponíveis e o plano contém inicialmente só a função GPU selecionada; verifique o isolamento após o reinício."
+ ],
+ "audioIntro": "Áudio associado. Dois casos consoante a localização do controlador:",
+ "audioDgpu": "GPU dedicada: o áudio HDMI ocupa frequentemente a função .1 da mesma ranhura PCI e é incluído se detetado. Se o anfitrião o usava, perde acesso ao reservá-lo à VM.",
+ "audioIgpu": "Sem função áudio .1: pode estar noutro dispositivo como 00:1f.3. Lista controladores e drivers como snd_hda_intel. Por predefinição nenhum é selecionado; escolha apenas os necessários."
+ },
+ "pickVm": {
+ "title": "Escolha a VM de destino",
+ "body": "Escolha a VM. Exige q35 e reutiliza entradas GPU existentes quando possível. BIOS/UEFI é uma definição separada, não um tipo de máquina. Não muda automaticamente o chipset nem o arranque do convidado instalado.",
+ "imageAlt": "Seleção de VM por nome, ID e estado"
+ },
+ "switchMode": {
+ "title": "Tratar atribuições existentes",
+ "intro": "O script verifica cada configuração do VM e cada configuração do LXC na máquina à procura do GPU que escolheu. Três resultados possíveis:",
+ "items": [
+ "GPU disponível. Continua sem remover atribuições.",
+ "Atribuída a outra VM. Pare primeiro a origem. Pode manter as entradas e desativar o arranque automático ou removê-las mantendo o arranque automático. Com vfio-pci já ativo e sem alterações necessárias no anfitrião, VM→VM pode evitar reiniciá-lo.",
+ "GPU usada por LXC. Nos contentores normais escolha manter a configuração da GPU e desativar o arranque automático ou remover a configuração do dispositivo GPU, mantendo o arranque automático. A remoção elimina as entradas devN e, em AMD/Intel, também as regras antigas /dev/dri lxc.mount.entry e lxc.cgroup2.devices.allow. Os contentores OCI conservam a configuração e são parados com o arranque automático desativado; remova a sua GPU através de OCI manager Apps. A deteção de conflitos é feita por família de dispositivos GPU e pode abranger outras placas dessa família."
+ ],
+ "imageAlt": "Oferecendo diálogo para remover o GPU de um LXC antes de atribuí-lo ao VM",
+ "smartTitle": "Rever áudio associado ao remover a GPU",
+ "smartBody": "Depois pode propor uma lista de áudio possivelmente sem uso na VM origem. Desmarque o que ainda precisar. Por exemplo, pode manter 02:00.1 e propor remover 00:1f.3. A lista determina as remoções adicionais, sem garantir todas as associações áudio/imagem."
+ },
+ "audioPick": {
+ "title": "Sem áudio .1, selecione os controladores necessários",
+ "body": "Apenas acontece para configurações de áudio dividido Intel iGPU e semelhantes. Uma lista de verificação mostra cada controlador de áudio PCI no host (excluindo qualquer já no grupo IOMMU do GPU), etiquetado com seu driver atual. Selecione os que você deseja — ou nenhum, se o VM não precisar de áudio do hardware do host.",
+ "imageAlt": "Diálogo de lista de verificação com cada controlador de áudio PCI da máquina (controlador BDF +) quando o GPU não tem áudio .1",
+ "warnTitle": "Não selecione áudio necessário ao anfitrião",
+ "warnBody": "Atribuir áudio pode retirar acesso ao anfitrião; o controlador não pode pertencer também a outra VM ativa. Não selecione áudio desnecessário e verifique as atribuições. O sinal da consola não vem necessariamente do áudio PCI."
+ },
+ "summary": {
+ "title": "Rever o resumo da confirmação",
+ "body": "Verifique o plano final do anfitrião e da VM e cancele se estiver incorreto. Mostra o grupo IOMMU e o número dos seus dispositivos; os membros de outro slot são listados no passo anterior. O cancelamento impede as alterações principais, mas não reverte uma alteração da configuração de arranque IOMMU confirmada separadamente antes.",
+ "imageAlt": "Resumo das alterações previstas no anfitrião e VM"
+ },
+ "hostApply": {
+ "title": "As alterações da máquina são aplicadas",
+ "intro": "A fase de aplicação altera anfitrião e VM. A limpeza áudio pode ainda pedir uma escolha. Pode modificar:",
+ "items": [
+ "/etc/modules — acrescenta vfio, vfio_iommu_type1, vfio_pci (mais vfio_virqfd em kernels < 6.2).",
+ "/etc/modprobe.d/vfio.conf — AMD/Intel: options vfio-pci ids=<vendor:device,...> disable_vga=1. NVIDIA: softdep nvidia pre: vfio-pci (_drm/_modeset/_uvm); a associação efetiva é por BDF. AMD adiciona a ordem de carregamento softdep: vfio-pci → radeon/amdgpu.",
+ "Escreve /etc/modprobe.d/iommu_unsafe_interrupts.conf e kvm.conf com allow_unsafe_interrupts=1 e ignore_msrs=1. São definições do script, não requisitos universais Windows/macOS; interrupções inseguras reduzem a proteção do remapeamento.",
+ "/etc/modprobe.d/blacklist.conf: NVIDIA — nouveau/lbm-nouveau; AMD — radeon + amdgpu; Intel — i915. Estas regras por fabricante podem afetar outras placas com o mesmo controlador. O módulo nvidia é bloqueado apenas por /etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf quando todas as NVIDIA do anfitrião estão reservadas a VFIO.",
+ "/etc/udev/rules.d/10-proxmenux-vfio-bind.rules + /etc/proxmenux/vfio-bind.bdfs — Apenas NVIDIA. Aplica ATTR'{'driver_override'}'=\"vfio-pci\" no PCI ADD dos BDF registados, incluindo funções do grupo IOMMU afetado. Fora desses grupos pode manter-se nvidia. A política BDF não divide grupos IOMMU físicos.",
+ "Apenas AMD. Tenta extrair a ROM de /sys/bus/pci/.../rom ou ACPI VFCT para /usr/share/kvm/vbios_<vendor>_<device>.bin. Se conseguir, a VM usa romfile=. Uma extração válida não garante a inicialização bem-sucedida da GPU.",
+ "Apenas NVIDIA. Para e desativa nvidia-persistenced, nvidia-powerd, nvidia-fabricmanager só quando todas as NVIDIA estão reservadas a VFIO. Em uso misto conserva os serviços e nvidia para as placas nativas.",
+ "update-initramfs -u -k all — só é executado se alguma das acima referidas tiver realmente mudado."
+ ]
+ },
+ "vmApply": {
+ "title": "A configuração do VM é aplicada através de qm set",
+ "body": "A configuração VM em /etc/pve/qemu-server/<vmid>.conf é atualizada via qm set (nunca por sed):",
+ "after1": "Adiciona x-vga=1 para AMD e NVIDIA, não Intel. É a política do script, não prova de que todas as iGPU Intel não têm firmware ou que a opção causa sempre bloqueios.",
+ "after2": "Linhas adicionais de hostpciN são adicionadas se o grupo IOMMU do GPU contém outros dispositivos que você precisa passar juntos."
+ },
+ "reboot": {
+ "title": "Reinicie se a alteração do anfitrião exigir",
+ "body": "Siga o reinício pedido se mudar arranque ou controladores e verifique a associação ativa antes de iniciar a VM. Configuração guardada não prova ativação. VM→VM com VFIO correto pode evitar reiniciar o anfitrião.",
+ "imageAlt": "Tela de resumo mostrando o que foi alterado, seguido de um prompt de reinicialização"
+ }
+ },
+ "vendors": {
+ "heading": "Notas por fabricante",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Mantém uma solução antiga para Code 43: hidden=1, ID NV43FIX em args e kvm=off. Não é requisito universal das GeForce atuais: NVIDIA ativou passthrough Windows em R465. O erro pode ter outras causas; verifique GPU e controlador.",
+ "nvidiaMultiHeading": "Suporte para multi-GPU NVIDIA",
+ "nvidiaMultiBody": "Uso misto NVIDIA por BDF. Regista funções vfio-pci por endereço, não só ID vendor:device. Fora dos grupos afetados pode conservar nvidia; verifique com nvidia-smi. Não isola duas placas do mesmo grupo.",
+ "amdHeading": "AMD",
+ "amdBody": "Algumas AMD falham ao repor após parar uma VM. O assistente verifica capacidades declaradas, não todos os ciclos reais. x-vga=1. qm config VMID | grep -E \"cpu|args\" com VMID real, depois hidden=1 e hv_vendor_id=NV43FIX. Verifique também controlador convidado, firmware e atribuição. Repetir pode terminar se já atribuída.",
+ "amdResetTitle": "O AMD GPU funciona uma vez, falha na reinicialização do VM",
+ "amdResetBody": "Falha de reset é uma causa possível. Reiniciar ou desligar e ligar pode ajudar temporariamente. Verifique compatibilidade e carregamento antecipado de vendor-reset; softdep amdgpu pre: vendor-reset só por si não garante carregar antes de VFIO. RadeonResetBugFix também exige GPU compatível.",
+ "stuckBootTitle": "O arranque emperrado do VM / GPU não foi detectado",
+ "stuckBootBody": "Consulte o endereço real com lspci -nnk -s PCI_ADDRESS; esperado Kernel driver in use: vfio-pci. Substitua PCI_ADDRESS. Se permanecer o controlador nativo, verifique a política de associação, não só /etc/modprobe.d/blacklist.conf; NVIDIA usa estado BDF. Leia dmesg | grep vfio. Após corrigir, execute update-initramfs -u -k all e siga o reinício previsto.",
+ "darkTitle": "O console da máquina fica escuro depois de reiniciar e eu não posso SSH em",
+ "darkBody": "Um ecrã preto não prova que o anfitrião esteja parado. Se SSH também falhar, verifique rede e controladores incluídos no grupo IOMMU. Recupere por IPMI, série ou ambiente de recuperação; reveja /etc/pve/qemu-server/<vmid>.conf e reverta só atribuições/regras relacionadas. Não elimine outras configurações.",
+ "logTitle": "Verificar o registo de instalação",
+ "logBody": "Cada execução escreve /tmp/add_gpu_vm.log. Anexe o registo ao pedir ajuda."
+ },
+ "revert": {
+ "heading": "Reverter alterações manualmente",
+ "intro": "Pare a VM e remova só as atribuições PCI relevantes em Hardware ou com o índice explícito abaixo. Isso não devolve a GPU ao controlador nativo. Use Alterar modo da GPU para essa transição e verifique os convidados afetados."
+ },
+ "related": {
+ "heading": "Relacionados",
+ "items": [
+ {
+ "label": "Instalar Drivers NVIDIA (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — prepara o controlador para placas mantidas no anfitrião; uma GPU em VFIO não o pode usar ao mesmo tempo."
+ },
+ {
+ "label": "Adicionar GPU ao LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — modelo alternativo: partilhar o GPU com vários contentores em vez de o dedicar a um VM."
+ },
+ {
+ "label": "Alterar modo da GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — alterna a mesma GPU entre partilha e atribuição exclusiva."
+ },
+ {
+ "label": "Comandos de passagem GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — lspci, verificação IOMMU, referência qm set hostpci."
+ }
+ ]
+ }
+}
diff --git a/web/messages/pt/docs/hardware/igpu-acceleration-lxc.json b/web/messages/pt/docs/hardware/igpu-acceleration-lxc.json
new file mode 100644
index 00000000..fe7cbeed
--- /dev/null
+++ b/web/messages/pt/docs/hardware/igpu-acceleration-lxc.json
@@ -0,0 +1,185 @@
+{
+ "meta": {
+ "title": "Adicionar GPU ao LXC | Documentação ProxMenux",
+ "description": "Partilhe GPU Intel, AMD ou NVIDIA com LXC. O ProxMenux configura dispositivos, grupos e bibliotecas conforme a distribuição; a aplicação tem de suportar e configurar a aceleração."
+ },
+ "header": {
+ "title": "Adicionar GPU ao LXC",
+ "description": "Partilha acesso GPU com LXC através dos dispositivos do anfitrião. O controlador permanece no anfitrião; as aplicações exigem bibliotecas compatíveis e configuração própria.",
+ "section": "Hardware: GPUs e Coral-TPU"
+ },
+ "intro": {
+ "title": "O que faz",
+ "body": "Adiciona entradas dev<N> a /etc/pve/lxc/<ctid>.conf para os nós /dev/dri/*, /dev/kfd ou /dev/nvidia* aplicáveis. Inicia o contentor, instala pacotes userspace da sua distribuição e, para Intel/AMD, alinha os grupos video e render. A aceleração das aplicações continua a exigir hardware, bibliotecas e configuração da aplicação compatíveis."
+ },
+ "compare": {
+ "heading": "Partilha LXC ou atribuição direta a uma VM",
+ "intro": "O LXC partilha o kernel e pode partilhar a GPU entre anfitrião e contentores. Com lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "vfio": "A GPU não deve estar associada a vfio-pci. Precisa do controlador nativo do anfitrião. Se atribuída a uma VM, o script propõe dev<N> para a configuração LXC e, em recipientes não privilegiados, alinha os GIDs video e render entre o host e o recipiente para que os nós do dispositivo GPU sejam alcançáveis de dentro sem que você tenha que editar manualmente lxc.idmap."
+ },
+ "running": {
+ "heading": "Executar o instalador",
+ "body": "Abra o ProxMenux e escolha Hardware: GPU e Coral-TPU → Adicionar GPU ao LXC.",
+ "imageAlt": "Opção do menu para adicionar GPU ao LXC"
+ },
+ "howRuns": {
+ "heading": "Como funciona o script",
+ "body": "Escolha contentor e famílias GPU e passe as verificações. Depois para e altera o contentor sem confirmação final adicional. A limpeza VFIO opcional tem confirmação separada e pode alterar antes o anfitrião."
+ },
+ "walkthrough": {
+ "heading": "Procedimento passo a passo",
+ "detect": {
+ "title": "Detectar GPUs da máquina",
+ "body": "Procura controladores GPU com lspci. Para NVIDIA verifica o módulo nvidia e nvidia-smi; a versão detetada determina o instalador .run do contentor.",
+ "tipTitle": "O NVIDIA não está pronto?",
+ "tipBody": "Se faltar o módulo ou NVIDIA não funcionar no anfitrião, use primeiro /dev/dri/* ou /dev/nvidia*. Propõe /etc/pve/lxc/<ctid>.conf. As entradas numeradas dev<N> incluem o GID do anfitrião de video ou render. As linhas bind lxc.mount.entry existentes para /dev/dri são substituídas por entradas dev:; verifique a configuração e as permissões resultantes.",
+ "body2": "Exemplo após Intel + NVIDIA no mesmo recipiente:"
+ },
+ "installDrivers": {
+ "title": "Iniciar o recipiente e instalar drivers dentro",
+ "body": "Inicia o contentor e espera até cerca de 30 segundos pela resposta de pct exec. Deteta a distribuição por /etc/os-release e instala os pacotes adequados.",
+ "headerDistro": "Distribuição",
+ "headerInt": "Intel / AMD",
+ "headerNvidia": "NVIDIA",
+ "rows": [
+ {
+ "distro": "Alpine",
+ "intel": "apk add mesa-va-gallium intel-media-driver libva-utils",
+ "nvidia": "apk add nvidia-utils"
+ },
+ {
+ "distro": "Arch / Manjaro",
+ "intel": "pacman -Sy intel-media-driver mesa libva-utils",
+ "nvidia": "pacman -Sy nvidia-utils"
+ }
+ ],
+ "debianDistro": "Debian / Ubuntu / outros",
+ "debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo",
+ "debianNvidia": "Extrai .run no anfitrião → pct push → instala com --no-kernel-modules --no-dkms.",
+ "whyTitle": "Porque utiliza o instalador NVIDIA .run no Debian",
+ "whyBody": "Os pacotes podem não corresponder ao anfitrião. As bibliotecas têm de corresponder ao módulo carregado para NVML e nvidia-smi. Debian/glibc usa o .run dessa versão em cache, extrai e arquiva no anfitrião, transfere com pct push e instala com --no-kernel-modules --no-dkms. Alpine e Arch usam repositórios: verifique as versões."
+ },
+ "alignGids": {
+ "title": "Alinhar GIDs e restaurar o estado",
+ "body1": "Para Intel/AMD, lê os GID do anfitrião de video e render, usando 44/104 apenas como alternativa, e depois altera /etc/group no contentor para corresponderem; as execuções apenas com NVIDIA saltam este passo. Entradas como video:44 e render:104 são exemplos, não ID universais. Verifique a pertença da aplicação aos grupos e as permissões efetivas dos dispositivos.",
+ "body2": "Ao concluir normalmente, volta a parar o contentor se estava parado; se estava ativo mantém-no ativo. Se falhar o arranque ou a instalação, verifique o estado final e o registo."
+ }
+ },
+ "vendors": {
+ "heading": "Notas por fabricante",
+ "intelHeading": "Intel iGPU",
+ "intelBody": "A aceleração multimédia Intel, incluindo Quick Sync, depende da geração do GPU, dos codecs e da configuração da aplicação. O script partilha os que existirem de entre /dev/dri/card0, card1, renderD128 e renderD129; outros números de nó não são adicionados. O anfitrião tem de os disponibilizar já através do seu controlador nativo, por exemplo i915.",
+ "amdHeading": "AMD",
+ "amdBody": "AMD usa DRI para Mesa/VA-API. Se existir /dev/kfd no anfitrião, também o partilha. ROCm/OpenCL exige hardware e bibliotecas compatíveis; partilhar o dispositivo não instala toda a pilha ROCm.",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Partilha os dispositivos /dev/nvidia*. As versões do controlador têm de corresponder para nvidia-smi. Debian/glibc usa o .run da versão do anfitrião; Alpine/Arch os repositórios. Abaixo de 2048 MiB de RAM configurada propõe um aumento temporário e depois restaura; exige também 1500 MiB livres em disco.",
+ "updateTitle": "Após atualizar NVIDIA no anfitrião, verifique as bibliotecas LXC",
+ "updateBody": "Bibliotecas antigas podem causar erros em nvidia-smi. O .run em cache serve para Debian/glibc, mas a adição pode terminar se todos os dispositivos já existirem.",
+ "denyTitle": "Permissão negada em /dev/dri/renderD128 dentro do recipiente",
+ "denyBody": "Verifique dispositivo e permissões numéricas de render, depois se o utilizador pertence a render. Se disponível, adicione-o a render com usermod -aG render <user>, substituindo o marcador pela conta real. Reinicie a sessão. Mudar privilégios não é uma solução geral.",
+ "vainfoTitle": "vainfo indica: VA-API version 1.xx; failed to initialize",
+ "vainfoBody": "Verifique acesso e controlador VA-API. Os nomes variam por distribuição: por exemplo intel-media-driver para Intel recentes suportadas, i965-va-driver para antigas compatíveis e mesa-va-drivers para AMD. A mensagem só por si não prova que falte um pacote.",
+ "logTitle": "Registo de instalação",
+ "logBody": "Cada execução escreve /tmp/add_gpu_lxc.log no anfitrião. Anexe o registo ao pedir ajuda."
+ },
+ "related": {
+ "heading": "Relacionados",
+ "items": [
+ {
+ "label": "Instalar Drivers NVIDIA (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — instale o controlador do anfitrião antes de partilhar NVIDIA."
+ },
+ {
+ "label": "Adicionar GPU a VM (passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — alternativa para dedicar uma GPU a uma VM."
+ },
+ {
+ "label": "Alterar modo da GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — alterna a GPU entre partilha LXC e atribuição VM."
+ },
+ {
+ "label": "Comandos de passagem GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — referência rápida para comandos de shell relacionados."
+ }
+ ]
+ }
+}
diff --git a/web/messages/pt/docs/hardware/install-coral-tpu-host.json b/web/messages/pt/docs/hardware/install-coral-tpu-host.json
new file mode 100644
index 00000000..b60e4ece
--- /dev/null
+++ b/web/messages/pt/docs/hardware/install-coral-tpu-host.json
@@ -0,0 +1,203 @@
+{
+ "meta": {
+ "title": "Instalar Coral TPU no anfitrião | Documentação ProxMenux",
+ "description": "Instala componentes Coral no Proxmox VE conforme o hardware detetado: gasket/apex com DKMS para M.2 / Mini-PCIe e libedgetpu1-std para USB. Se detetar ambos, executa os dois procedimentos."
+ },
+ "header": {
+ "title": "Instalar Coral TPU no anfitrião",
+ "description": "Prepare o anfitrião Proxmox para Coral e partilha LXC. Deteta M.2 / Mini-PCIe, USB ou ambos e executa o procedimento adequado: módulos DKMS para PCIe e runtime Google Edge TPU para USB.",
+ "section": "Hardware: GPUs e Coral-TPU"
+ },
+ "intro": {
+ "title": "O que faz",
+ "body": "Um instalador único que deteta o hardware. PCIe utiliza gasket e apex com DKMS; compilações futuras exigem código e cabeçalhos compatíveis. USB utiliza libedgetpu1-std. Se detetar ambos, executa os dois processos. O runtime USB deve estar onde a aplicação executa; para uso apenas em LXC não é obrigatório no anfitrião."
+ },
+ "which": {
+ "heading": "Qual Coral eu tenho?",
+ "body": "Os modelos PCIe e USB têm formatos e requisitos diferentes. O script trata ambos; identifique o dispositivo antes de executar.",
+ "headerForm": "Factor de forma",
+ "headerDetect": "Detecção",
+ "headerInstall": "Tipo de instalação",
+ "headerReboot": "Reiniciar?",
+ "pcieForm": "M.2 / Mini-PCIe",
+ "pcieFormSub": "(placas M.2 com uma ou duas Edge TPU)",
+ "pcieDetect": "ID de fabricante PCI 1ac1",
+ "pcieInstall": "Módulo do kernel (gasket + apex) via DKMS",
+ "pcieReboot": "Sim",
+ "usbForm": "Acelerador USB",
+ "usbFormSub": "(dongle de plástico pequeno)",
+ "usbDetect": "1a6e:089a USB (não programado) / 18d1:9302 (programado)",
+ "usbInstall": "Runtime libedgetpu1-std do repositório APT Google",
+ "usbReboot": "Não"
+ },
+ "prereqs": {
+ "title": "Antes de começar",
+ "coral": "Um Coral ligado (M.2, Mini-PCIe ou USB) para instalar. Sem hardware detetado pode limpar ou remover componentes existentes, mas não instala um novo percurso de hardware.",
+ "coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
+ "internet": "Acesso à Internet no anfitrião para clonar o controlador PCIe do GitHub ou transferir libedgetpu1-std do repositório APT Google para USB.",
+ "headers": "Cabeçalhos do kernel disponíveis via APT: proxmox-headers-$(uname -r). Necessários apenas para PCIe/M.2; o script instala-os.",
+ "reboot": "Planeie um reinício para PCIe. O script tenta carregar os módulos compilados; reiniciar permite verificar o carregamento automático."
+ },
+ "hostPrepTip": {
+ "title": "Isto só prepara a máquina",
+ "body": "Prepara o anfitrião para aceder ao dispositivo, sem configurar nem testar a aplicação. Para usar Coral numa aplicação compatível como Frigate, siga 0x1ac1 em /sys/bus/pci/devices/*/vendor e usa lsusb para USB. Existem dois ID USB consoante o estado do firmware:",
+ "items": [
+ "1a6e:089a — Global Unichip, estado não programado, antes de o runtime carregar o firmware.",
+ "18d1:9302 — Google, estado programado, após carregar o firmware."
+ ],
+ "outro": "Sem Coral detetado nem instalação existente, apresenta um aviso e termina. Componentes existentes podem abrir o menu de limpeza ou remoção."
+ },
+ "prompt": {
+ "title": "Confirmação da instalação",
+ "body": "Antes da instalação, um diálogo apresenta dispositivos e componentes previstos. Cancelar ignora a instalação. A limpeza opcional de componentes antigos tem uma confirmação anterior independente.",
+ "imageAlt": "Resumo dos dispositivos Coral e passos de instalação"
+ },
+ "pcie": {
+ "title": "PCIe: módulos gasket e apex via DKMS",
+ "body": "Executado apenas se detetar um Coral PCIe/M.2. Compila os módulos para o kernel em execução no anfitrião.",
+ "items": [
+ "Limpeza. Qualquer pacote gasket-dkms existente é removido antes de recompilar; se estiver num estado incorreto, o script força a sua remoção e purga.",
+ "Dependências de compilação: git, dkms, build-essential, proxmox-headers-$(uname -r)."
+ ],
+ "cloneIntro": "Clona o código do controlador. Prefere no_llseek por noop_llseek no código alternativo.",
+ "Kernel 6.13 ou superior: converte o argumento de MODULE_IMPORT_NS(DMA_BUF) numa cadeia literal."
+ ],
+ "afterItems": [
+ "Copia o código para /usr/src/gasket-1.0/, gera dkms.conf e regista-o com dkms add.",
+ "Compila e instala: dkms build e depois dkms install. Se falhar, mostra as últimas 50 linhas de make.log, se disponível.",
+ "Cria o grupo apex e regras udev (/etc/udev/rules.d/99-coral-apex.rules) para atribuir o grupo a /dev/apex_*.",
+ "Tenta carregar os módulos: modprobe gasket e modprobe apex."
+ ],
+ "imageAlt": "Compilação DKMS e carregamento dos módulos gasket/apex"
+ },
+ "usb": {
+ "title": "USB: runtime Edge TPU da Google",
+ "body": "Só é executado se um Acelerador USB foi detectado. Muito mais simples:",
+ "items": [
+ "Adiciona a chave GPG Google a /etc/apt/keyrings/coral-edgetpu.gpg.",
+ "Adiciona o repositório APT em /etc/apt/sources.list.d/coral-edgetpu.list; signed-by= limita a verificação ao respetivo chaveiro. Usa sintaxe .list numa linha, não .sources deb822.",
+ "Instala libedgetpu1-std, o runtime Edge TPU de desempenho padrão.",
+ "Recarrega o udev e aplica as regras do pacote ao dispositivo USB."
+ ],
+ "stdTitle": "Porquê libedgetpu1-std em vez de libedgetpu1-max?",
+ "stdBody": "O pacote max ativa a frequência máxima suportada, aumentando desempenho, consumo e calor. Verifique a refrigeração e condições de utilização do acelerador. Os pacotes são mutuamente exclusivos; altere com apt install libedgetpu1-max."
+ },
+ "reboot": {
+ "title": "Reinício opcional após a instalação PCIe",
+ "body": "Após PCIe propõe reiniciar. Já tentou modprobe; verifique os módulos e /dev/apex_0 com grupo apex. Um reinício planeado verifica o carregamento automático. Só USB não pede reinício do anfitrião.",
+ "imageAlt": "Resumo e proposta de reinício após instalação PCIe"
+ }
+ },
+ "legacyCleanup": {
+ "heading": "Limpar gasket-dkms antigo em anfitriões que só usam USB",
+ "intro": "Se não detetar Coral PCIe/M.2 mas existir uma instalação antiga de gasket-dkms, propõe uma limpeza opcional com confirmação.",
+ "items": [
+ "Se detetar um Coral PCIe/M.2, utiliza o procedimento normal de recompilação DKMS e não propõe esta limpeza.",
+ "Purga gasket-dkms, remove registos DKMS e código antigo gasket e repara o estado pendente de dpkg/APT.",
+ "Mantém os pacotes USB libedgetpu1-std e libedgetpu1-max, pelo que o Coral USB conserva o runtime.",
+ "O script verifica que o pacote legado desapareceu e que o gerenciamento de pacotes é saudável antes de relatar o sucesso."
+ ],
+ "warningTitle": "Confirmar primeiro o hardware",
+ "warningBody": "Se esperava um Coral PCIe/M.2 e não aparece, cancele a limpeza e verifique placa, ranhura e firmware."
+ },
+ "reinstallUninstall": {
+ "heading": "Reinstalar ou desinstalar",
+ "intro": "Se detetar uma instalação PCIe com gasket-dkms, USB com libedgetpu1-std/libedgetpu1-max ou ambas, apresenta um menu de ações.",
+ "imageAlt": "Menu para reinstalar, atualizar ou desinstalar Coral",
+ "imageCaption": "O menu aparece se existir algum componente: registo DKMS gasket, pacote libedgetpu1-* ou dispositivos /dev/apex_*.",
+ "reinstallHeading": "Reinstalar / atualizar",
+ "reinstallBody": "Segue a instalação normal: recompila após mudar de kernel ou atualiza libedgetpu1-* a partir da Google. Limpa primeiro o estado DKMS anterior para evitar que uma instalação falhada bloqueie a compilação.",
+ "uninstallHeading": "Desinstalar — o que é removido",
+ "uninstallIntro": "Exige confirmação. As aplicações LXC que usam /dev/apex_* podem perder acesso durante a remoção ou após reiniciar. Procedimento:",
+ "uninstallItems": [
+ "Tenta descarregar apex e gasket; a utilização por processos ativos pode impedi-lo.",
+ "Remove a cada DKMS-registrado gasket/<version> entrada para que os módulos não voltem na próxima instalação do kernel.",
+ "Purga gasket-dkms, libedgetpu1-std e libedgetpu1-max e executa apt-get autoremove --purge.",
+ "Elimina /etc/udev/rules.d/99-coral-apex.rules e restaura o grupo predefinido de 60-gasket-dkms.rules se ainda existir.",
+ "Verifica os membros suplementares de apex. Se a lista estiver vazia, tenta remover o grupo; caso contrário mantém apex e lista os membros. Não verifica completamente os utilizadores que o têm como grupo principal.",
+ "Remove a lista de repositórios /etc/apt/sources.list.d/coral-edgetpu.list, o antigo coral-cloud.list e chaveiros antigos chamados coral-edgetpu-archive-keyring.gpg. O chaveiro atual em /etc/apt/keyrings/coral-edgetpu.gpg não é removido por esta sequência.",
+ "Propõe reiniciar apenas se PCIe estava instalado para descarregar os módulos ainda ativos. Remover apenas USB não exige reinício."
+ ],
+ "lxcWarnTitle": "LXC contêineres com apex passagem",
+ "lxcWarnBody": "Remover os componentes do anfitrião pode interromper o acesso LXC. Planeie manutenção se aplicações compatíveis como Frigate dependem deste Coral."
+ },
+ "updates": {
+ "heading": "Notificações de atualização",
+ "intro": "O ProxMenux regista os componentes Coral e verifica PCIe/M.2 e USB separadamente. Se tiver ambos, cada variante usa a sua fonte de versões:",
+ "headerVariant": "Variante",
+ "headerTracked": "Versão registada",
+ "headerUpstream": "Fonte das versões",
+ "pcieVariant": "PCIe / M.2",
+ "pcieTracked": "Primeiro a etiqueta registada após instalar, depois a versão de gasket-dkms se o pacote estiver íntegro, ou a versão DKMS como alternativa. Esta não identifica o nível de correções do fork.",
+ "pcieUpstream": "Última etiqueta GitHub de feranick/gasket-driver; cache de sete dias e comparação do número de compilação.",
+ "usbVariant": "USB",
+ "usbTracked": "Versão apt libedgetpu1-std ou libedgetpu1-max",
+ "usbUpstream": "Candidato local ao apt-cache policy (Google Coral apt repo)",
+ "outro": "Se detetar uma versão nova, o Monitor envia coral_driver_update_available pelos canais ativados. O aviso remete para o instalador: escolha Reinstalar / atualizar.",
+ "antiTitle": "Sem avisos repetidos",
+ "antiBody": "Um aviso por variante quando muda a versão disponível. Não repete em cada verificação diária; volta a avisar quando surgir uma versão posterior.",
+ "rebootTitle": "Atualizações PCIe: planeie um reinício",
+ "rebootBody": "O módulo PCIe recompilado tem de ser carregado; um reinício planeado verifica também o carregamento automático. Atualizar a biblioteca USB não exige reiniciar o anfitrião, mas pode exigir reiniciar as aplicações que usavam a anterior."
+ },
+ "manual": {
+ "heading": "Procedimento manual equivalente",
+ "intro": "Estes comandos mostram os principais passos de cada procedimento para consulta ou execução manual.",
+ "pcieHeading": "PCIe / M.2 (gasket + apex via DKMS)",
+ "usbHeading": "USB (runtime libedgetpu)"
+ },
+ "verification": {
+ "heading": "Verificação",
+ "pcieHeading": "PCIe / M.2",
+ "usbHeading": "USB"
+ },
+ "troubleshoot": {
+ "heading": "Resolução de problemas",
+ "dkmsFailTitle": "Falha na compilação DKMS após atualizar o kernel",
+ "dkmsFailBody": "Cabeçalhos ausentes são uma causa possível. Verifique proxmox-headers-$(uname -r) com dpkg -l proxmox-headers-$(uname -r) e instale-os se necessário. Consulte o registo para incompatibilidades com o kernel. Repetir executa cleanup_broken_gasket_dkms, sem garantir compatibilidade com todos os kernels.",
+ "apexMissTitle": "Falta o /dev/apex_0 após reiniciar",
+ "apexMissBody": "Verifique a deteção PCIe e se o módulo corresponde ao kernel ativo. Tente modprobe apex e consulte dmesg | grep -iE \"apex|gasket\". Falhas de compilação, carregamento ou configuração da ranhura/firmware podem impedir a criação do dispositivo.",
+ "lxcMissTitle": "O anfitrião vê /dev/apex_0, mas o LXC não",
+ "lxcMissBody": "Um nó visível não prova o funcionamento. Verifique acesso no anfitrião, montagem LXC, regras cgroup e permissões UID/GID. Consulte libedgetpu1-std e permissões com ls -l /dev/bus/usb/*/*. O utilizador/grupo mapeado da aplicação precisa de leitura e escrita; root como proprietário não é um erro por si só. Após alterações, execute udevadm control --reload-rules && udevadm trigger e volte a ligar se necessário.",
+ "logTitle": "Registo de instalação",
+ "logBody": "Cada execução escreve /tmp/coral_install.log. Se DKMS falhar e o registo existir, acrescenta as últimas 50 linhas de /var/lib/dkms/gasket/1.0/build/make.log. Anexe o registo ao pedir ajuda."
+ },
+ "related": {
+ "heading": "Relacionados",
+ "items": [
+ {
+ "label": "Adicionar Coral TPU ao LXC",
+ "href": "/docs/hardware/coral-tpu-lxc",
+ "tail": " — disponibilizar o Coral do anfitrião a um contentor com uma aplicação compatível."
+ },
+ {
+ "label": "Instalar Drivers NVIDIA (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — a mesma ideia para as GPU NVIDIA."
+ },
+ {
+ "label": "ProxMenux Monitor — Página de hardware",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — o painel Coral mostra controlador, módulos, dispositivos e runtime, além da temperatura se um sensor compatível a disponibilizar."
+ }
+ ]
+ }
+}
diff --git a/web/messages/pt/docs/hardware/nvidia-host.json b/web/messages/pt/docs/hardware/nvidia-host.json
new file mode 100644
index 00000000..9a1daf6d
--- /dev/null
+++ b/web/messages/pt/docs/hardware/nvidia-host.json
@@ -0,0 +1,175 @@
+{
+ "meta": {
+ "title": "Instalar NVIDIA no anfitrião | Documentação ProxMenux",
+ "description": "Instale controladores proprietários NVIDIA no Proxmox VE com ProxMenux: filtragem GPU, verificações de compilação e DKMS, persistência, patch NVENC opcional e atualização de bibliotecas LXC."
+ },
+ "header": {
+ "title": "Instalar controladores NVIDIA no anfitrião",
+ "description": "Instale NVIDIA no anfitrião Proxmox VE. Filtra ramos mantidos pelo ID PCI do GPU, verifica a compilação, utiliza DKMS, gere nouveau e instala persistência. Pode também atualizar bibliotecas dos LXC com acesso NVIDIA.",
+ "section": "Hardware: GPUs e Coral-TPU"
+ },
+ "intro": {
+ "title": "O que faz",
+ "body": "O ProxMenux deteta o GPU e oferece ramos NVIDIA mantidos que incluem o seu ID PCI. Bloqueia nouveau, descarrega o instalador oficial .run, utiliza DKMS, instala nvidia-persistenced, regras udev e o NVIDIA Container Toolkit, e oferece um patch NVENC opcional. As verificações de compilação avaliam o kernel em execução; uma compilação bem-sucedida não garante que todas as aplicações funcionem. Aos LXC NVIDIA existentes é oferecida uma atualização das bibliotecas userspace, com versão correspondente exceto em Arch."
+ },
+ "who": {
+ "heading": "Para quem é isto?",
+ "body": "Para vídeo ou cálculo acelerado com Plex, Jellyfin, Frigate, Immich ou Stable Diffusion em LXC, instale primeiro NVIDIA no anfitrião Proxmox. A atribuição direta a uma VM utiliza o procedimento VFIO separado."
+ },
+ "prereqs": {
+ "title": "Antes de começar",
+ "gpu": "Um GPU NVIDIA instalado no anfitrião. É detetado automaticamente; esta opção não gere AMD nem Intel.",
+ "gpuCheck": "lspci | grep -i nvidia",
+ "notVm": "O GPU não deve estar reservado para VM através de VFIO. O instalador recusa esse caso para não interferir na atribuição.",
+ "internet": "Acesso à Internet no host. O instalador baixa o driver de download.nvidia.com e, opcionalmente, clona nvidia-persistenced e nvidia-patch de GitHub.",
+ "space": "Reserve espaço em /opt/nvidia para .run e RAM para compilar. O percurso LXC não-Arch verifica 1500 MiB livres e pode pedir aumento temporário para 2048 MiB de RAM se inferior, restaurando depois o limite anterior. Preveja o reinício do anfitrião."
+ },
+ "vmWarn": {
+ "title": "GPU reservado para VM? Pare aqui",
+ "body": "Se algum dispositivo NVIDIA estiver associado a vfio-pci, o instalador sai mesmo com a VM parada. Estar reservado não implica utilização ativa. Planeie o regresso ao controlador do anfitrião e remova atribuições VM/VFIO antigas antes de reiniciar e instalar."
+ },
+ "running": {
+ "heading": "Executar o instalador",
+ "body": "Abra Hardware Graphics → NVIDIA GPU Driver Installer no ProxMenux. O menu depende de existir um controlador ativo.",
+ "imageAlt": "Menu de hardware com o instalador NVIDIA destacado"
+ },
+ "howRuns": {
+ "heading": "Como funciona o script",
+ "body": "Deteta dispositivos, escolhe uma versão e instala. Uma limpeza VFIO com confirmação separada pode ocorrer antes do resumo. Preparação de repositórios/cabeçalhos e descarga precedem a substituição do controlador; nem todas as alterações começam após uma única confirmação final."
+ },
+ "walkthrough": {
+ "detect": {
+ "title": "Detecção e visão geral do GPU",
+ "body1": "Apresenta controladores de vídeo NVIDIA, estado do controlador ou «Nenhum controlador NVIDIA instalado» e os LXC configurados para NVIDIA com a versão interna.",
+ "body2": "Reveja GPU e versões do anfitrião/contentores. Cancele no resumo se a seleção for inesperada; uma limpeza VFIO confirmada anteriormente já terá sido aplicada.",
+ "imageAlt": "Resumo pré-instalação: GPU, controlador e LXC NVIDIA"
+ },
+ "version": {
+ "title": "Escolha a versão do controlador",
+ "body1": "Filtra versões de nvidia.com que incluem o ID PCI do GPU na tabela de chips suportados e exclui versões beta/desenvolvimento por heurísticas. <versão> — Recomendada prioriza a última do ramo instalado, depois Production Branch e, por fim, o número de versão compatível mais elevado.",
+ "body2": "Se o controlador estiver registado com patch keylase, o seletor limita as versões à tabela NVENC. Reinstalar / atualizar mantém confirmações e opção de patch; verifique o resultado final.",
+ "whyTitle": "Como a compatibilidade do kernel é validada",
+ "whyBody": "Filtra por ramos mantidos e ID PCI, sem matriz fixa de kernel/controlador. Uma compilação prévia verifica o kernel atual. Uma falha confirmada volta ao seletor; se a verificação não estiver disponível, pode avisar e continuar. Instalação final e testes de funcionamento continuam necessários.",
+ "imageAlt": "Seletor de ramos compatíveis com GPU e recomendação no topo"
+ },
+ "uninstall": {
+ "title": "Remover o controlador anterior ao reinstalar",
+ "body": "Após descarregar e verificar o instalador escolhido, remove o controlador anterior. Para serviços NVIDIA, descarrega módulos, remove entradas DKMS e purga nvidia-* / libnvidia-* / cuda-*. Aplica-se também à reinstalação confirmada da mesma versão."
+ },
+ "prepare": {
+ "title": "Preparar o sistema",
+ "body": "Durante a preparação, o script:",
+ "items": [
+ "Verifica repositórios antes de remover ou instalar componentes. Sem subscrição e apenas com Enterprise, pede autorização para mudar para no-subscription; a recusa para a instalação.",
+ "Instala pve-headers-$(uname -r) (ou proxmox-headers-$(uname -r)), build-essential e dkms.",
+ "Cria o ficheiro gerido pelo ProxMenux /etc/modprobe.d/proxmenux-nouveau-blacklist.conf com blacklist nouveau e options nouveau modeset=0. Regista a eventual linha adicionada a blacklist.conf e tenta descarregar nouveau.",
+ "Escreve /etc/modules-load.d/nvidia-vfio.conf com nvidia e nvidia_uvm para que os módulos carreguem precocemente no arranque."
+ ]
+ },
+ "download": {
+ "title": "Baixe e execute o instalador NVIDIA",
+ "body": "Descarrega NVIDIA-Linux-x86_64-<version>.run para /opt/nvidia e verifica tamanho e tipo executável. São verificações de formato, não de assinatura criptográfica. Regista DKMS para recompilar com alterações do kernel; código e kernel devem continuar compatíveis.",
+ "imageAlt": "Progresso de descarga e compilação DKMS do instalador NVIDIA"
+ },
+ "persist": {
+ "title": "Serviço de persistência e regras de udev",
+ "body": "Instala /etc/udev/rules.d/70-nvidia.rules para criar /dev/nvidia* no arranque. Evita que um LXC procure o GPU antes de os dispositivos estarem disponíveis."
+ },
+ "nvenc": {
+ "title": "Opcional: aplicar patch NVENC",
+ "body": "Os limites de sessões NVENC dependem do GPU e controlador. nvidia-smi pode indicar «version mismatch».",
+ "body2": "Debian / Ubuntu e outros contentores glibc recebem o instalador .run extraído com --no-kernel-modules --no-dkms --no-install-compat32-libs; a RAM pode subir temporariamente para 2 GiB e ser depois restaurada. Arch, Manjaro e EndeavourOS utilizam pacman -Syu nvidia-utils dos repositórios, sem fixar a versão do anfitrião: verifique o resultado. Alpine recebe o conteúdo .run extraído por pct push, instala gcompat e binutils com apk e cria ligações SONAME com readelf. Verifique o funcionamento; a compatibilidade não garante todas as bibliotecas sobre musl.",
+ "imageAlt": "Diálogo com LXC NVIDIA e versões para confirmar a atualização"
+ },
+ "reboot": {
+ "title": "Reiniciar",
+ "body": "Após a instalação do controlador, o script regenera initramfs para todos os kernels; o seu último passo oferece reiniciar. Preveja esse reinício para verificar a configuração persistente dos módulos e do nouveau num novo arranque, mesmo que o novo controlador já responda antes do reinício."
+ }
+ },
+ "reinstallUninstall": {
+ "heading": "Reinstalar ou desinstalar",
+ "intro": "Se nvidia estiver carregado e nvidia-smi devolver uma versão, apresenta um menu de ações. O critério deteta um controlador ativo; pode haver ficheiros instalados sem o módulo carregado.",
+ "imageAlt": "NVIDIA menu de ação oferecido quando um driver já está instalado — duas opções: Reinstalar / atualizar driver, ou desinstalar o driver NVIDIA completamente",
+ "imageCaption": "O menu de ação só aparece quando um driver NVIDIA está atualmente ativo na máquina.",
+ "reinstallHeading": "Reinstalar / atualizar",
+ "reinstallBody": "Escolhe versão, prepara repositórios/cabeçalhos, descarrega e verifica a compilação antes de substituir o controlador. Permite atualizar no ramo mantido ou escolher outro suportado. Depois reapresenta as opções de bibliotecas LXC e patch NVENC.",
+ "uninstallHeading": "Desinstalar — o que é removido",
+ "uninstallIntro": "Após confirmação Sim/Não, remove os seguintes componentes:",
+ "uninstallItems": [
+ "Para e desativa nvidia-persistenced e nvidia-powerd, tenta descarregar nvidia_uvm, nvidia_drm, nvidia_modeset e nvidia e depois executa nvidia-uninstall --silent para a instalação .run. Afeta as cargas de trabalho LXC dependentes de NVIDIA; clientes ativos podem impedir a descarga.",
+ "Executa apt purge em nvidia-*, libnvidia-*, cuda-* e libcudnn*, remove a árvore fonte DKMS e as pastas nvidia-persistenced e nvidia-patch em /opt/nvidia.",
+ "Remove a configuração de carregamento /etc/modules-load.d/nvidia-vfio.conf e regras nouveau geridas pelo ProxMenux. Migra e remove também os antigos ficheiros ProxMenux com as duas linhas conhecidas; preserva ficheiros modificados ou não relacionados do administrador.",
+ "Remove /etc/udev/rules.d/70-nvidia.rules e marca NVENC como removed no registo de instalações geridas; não existe ficheiro de estado separado.",
+ "Regenera initramfs para todos os kernels, executa proxmox-boot-tool refresh conforme o arranque e pede reinício."
+ ],
+ "lxcWarnTitle": "LXC com acesso NVIDIA",
+ "lxcWarnBody": "Remover o controlador do anfitrião interrompe aplicações LXC NVIDIA mesmo mantendo as bibliotecas instaladas. Agende manutenção para Frigate, Plex, Jellyfin, Ollama e outras aplicações GPU."
+ },
+ "updates": {
+ "heading": "Notificações de atualizações",
+ "body": "O controlador NVIDIA é acompanhado no registo de instalações geridas. No arranque e a cada 24 horas, o Monitor compara as versões em download.nvidia.com/XFree86/Linux-x86_64/ com a indicada por nvidia-smi. Notifica apenas novas versões de manutenção do ramo instalado.",
+ "kindsHeading": "Mensagem de atualização",
+ "kindsItems": [
+ "Manutenção no mesmo ramo. Exemplo: 580.65.06 instalada → 580.105.08 disponível. O Monitor não deduz compatibilidade do kernel entre ramos."
+ ],
+ "antiTitle": "Evitar notificações repetidas",
+ "antiBody": "Uma notificação por nova versão, não em cada verificação diária. Sem versão mais recente no ramo instalado, não notifica.",
+ "applyTitle": "Aplicando a atualização",
+ "applyBody": "O Monitor avisa sem instalar automaticamente. Abra o instalador, escolha Reinstalar / atualizar e uma versão suportada, e conclua compilação e instalação. Preveja o reinício proposto e verifique depois anfitrião e bibliotecas LXC."
+ },
+ "verify": {
+ "heading": "Verificando a instalação",
+ "intro": "Após reiniciar o anfitrião, entre por SSH ou pela consola Proxmox e execute:",
+ "after": "Confirme GPU e versão esperada. Podem existir processos se serviços do anfitrião ou contentores iniciados automaticamente utilizarem o GPU. Depois verifique a persistência:",
+ "imageAlt": "Saída de nvidia-smi no anfitrião com GPU detetado e versão do controlador instalada"
+ },
+ "troubleshoot": {
+ "heading": "Resolução de problemas",
+ "smiFailTitle": "nvidia-smi apresenta «NVIDIA-SMI has failed»",
+ "smiFailBody": "Causas possíveis: nouveau, cabeçalhos ausentes ou incompatíveis, código do controlador incompatível ou outros erros de carregamento. Veja lsmod | grep nouveau, dmesg | grep -i nvidia e registos do instalador/DKMS. Se precisar de corrigir nouveau, verifique /etc/modprobe.d/proxmenux-nouveau-blacklist.conf antes de update-initramfs -u -k all e reinicie. Nem toda a falha de compilação é de cabeçalhos.",
+ "lxcMissTitle": "O LXC não vê o GPU após a atualização do anfitrião",
+ "lxcMissBody": "Antes de reinstalar, verifique dispositivos do anfitrião, permissões LXC e versão das bibliotecas. Um conflito pode exigir o controlador de utilizador correspondente pelo método suportado da distribuição; em glibc usa --no-kernel-modules. Reinstalar bibliotecas não corrige montagens ou permissões ausentes.",
+ "logTitle": "Verificar o registo de instalação",
+ "logBody": "A instalação escreve em /tmp/nvidia_install.log. Em caso de falha, reveja descarga, compilação DKMS e serviços. Anexe o registo ao comunicar o problema no GitHub."
+ },
+ "manualSteps": {
+ "heading": "Procurando os passos manuais?",
+ "body": "Consulte wget e ./NVIDIA-Linux-...run. Explica componentes sem reproduzir exatamente o instalador. O processo mantido do ProxMenux oferece filtragem GPU, verificação de compilação, atualizações LXC e controlos VFIO."
+ },
+ "related": {
+ "heading": "Relacionados",
+ "items": [
+ {
+ "label": "Adicionar GPU a VM (passagem direta)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — atribuir NVIDIA diretamente a uma VM através de VFIO."
+ },
+ {
+ "label": "Adicionar GPU ao LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — partilhar NVIDIA com um ou vários contentores."
+ },
+ {
+ "label": "Mudar modo GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — alternar entre passagem direta para VM e partilha LXC."
+ },
+ {
+ "label": "ProxMenux Monitor — Página de hardware",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — janela GPU que abre este instalador e mostra monitorização em tempo real."
+ },
+ {
+ "label": "Comandos de passagem direta GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — referência lspci / dmesg / IOMMU / nvidia-smi."
+ }
+ ]
+ }
+}
diff --git a/web/messages/pt/docs/hardware/switch-gpu-mode.json b/web/messages/pt/docs/hardware/switch-gpu-mode.json
new file mode 100644
index 00000000..c347520b
--- /dev/null
+++ b/web/messages/pt/docs/hardware/switch-gpu-mode.json
@@ -0,0 +1,172 @@
+{
+ "meta": {
+ "title": "Mudar modo GPU (VM ↔ LXC) | Documentação ProxMenux",
+ "description": "Mude um GPU entre VFIO para VM e controlador nativo para LXC. O ProxMenux deteta o controlador, pergunta como gerir os convidados afetados, remove áudio associado e regenera initramfs se a configuração do anfitrião mudar."
+ },
+ "header": {
+ "title": "Mudar modo GPU (VM ↔ LXC)",
+ "description": "Mude um GPU atribuído entre passagem direta para VM e partilha LXC. O ProxMenux gere controlador, VFIO, módulos e initramfs e pergunta como tratar os convidados afetados. Reveja as opções e verifique o resultado após reiniciar.",
+ "section": "Hardware: GPUs e Coral-TPU"
+ },
+ "intro": {
+ "title": "O que faz",
+ "body": "Com vfio-pci, o GPU fica reservado para uma VM. Com o controlador nativo (i915 / amdgpu / nvidia), anfitrião e LXC podem partilhá-lo. Mudar modo GPU gere vfio.conf, módulos bloqueados e referências dos convidados, avisando de atribuições pendentes."
+ },
+ "graphics": {
+ "lxcTitle": "Pronto para contêineres LXC",
+ "lxcDesc": "Controlador nativo ativo",
+ "vmTitle": "Pronto para passagem de VM",
+ "vmDesc": "Controlador VFIO-PCI ativo"
+ },
+ "when": {
+ "heading": "Quando devo usar isto?",
+ "intro": "Utilize se o GPU já está atribuído e pretende mudar a utilização:",
+ "headerSituation": "Situação",
+ "headerUse": "Usar esta página?",
+ "rows": [
+ {
+ "situation": "GPU livre, nunca atribuído: utilizá-lo numa VM.",
+ "useRich": "Não — utilize vfio-pci; quero utilizá-lo num LXC.",
+ "useRich": "Sim — esta página."
+ },
+ {
+ "situation": "O GPU é partilhado com um LXC; quero dedicá-lo a uma VM.",
+ "useRich": "Sim — esta página."
+ },
+ {
+ "situation": "Quero remover todas as atribuições deste GPU.",
+ "use": "O modo LXC devolve o GPU ao controlador do anfitrião; a política de conflitos da VM pode remover as entradas hostpci, mas as entradas de dispositivo LXC têm de ser removidas separadamente. O GPU continua associado a um controlador."
+ }
+ ]
+ },
+ "prereqs": {
+ "title": "Antes de começar",
+ "assigned": "Um GPU já atribuído a uma VM por VFIO ou a um LXC. Para a primeira atribuição utilize Adicionar GPU a VM / LXC.",
+ "iommu": "IOMMU deve estar ativo no anfitrião ao passar para modo VM. Tanto as definições do firmware como o suporte do kernel são importantes. Se faltar intel_iommu=on ou amd_iommu=on no kernel em execução, o script adiciona-o com iommu=pt a /etc/kernel/cmdline (marca de raiz ZFS) ou a /etc/default/grub e depois executa proxmox-boot-tool refresh ou update-grub. Reveja eventuais avisos e reinicie quando solicitado.",
+ "iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
+ "reboot": "Preveja um reinício. Alterações persistentes ao controlador e ao arranque podem exigir regenerar initramfs e reiniciar. O script apresenta a opção no final.",
+ "knowList": "Identifique as VM e LXC que utilizam o GPU. O script deteta referências e pergunta como tratar cada convidado; conhecer a lista facilita a revisão."
+ },
+ "blocklist": {
+ "title": "Nem todas as GPUs são seguras para passar para um VM",
+ "body": "O script bloqueia o modo VM para os ID de dispositivo 8086:5a84 e 8086:5a85, segundo a sua política de compatibilidade. Se um GPU selecionado corresponder, interrompe a mudança para modo VM e volta à seleção do GPU, ou sai quando é o único GPU. Esta lista de bloqueio não impede passar para modo LXC; outras verificações podem continuar a aplicar-se."
+ },
+ "running": {
+ "heading": "Executar o script",
+ "body": "Abra Hardware: GPU e Coral-TPU → Mudar modo GPU (VM ↔ LXC) no ProxMenux.",
+ "imageAlt": "Opção Mudar modo GPU (VM ↔ LXC) no menu de hardware"
+ },
+ "howRuns": {
+ "heading": "Como funciona o script",
+ "body": "A escolha do GPU e da direção precede a mudança principal. Uma limpeza VFIO separada pode pedir confirmação antes; os convidados afetados têm os seus próprios diálogos. Leia cada confirmação: não existe uma única validação final para todas as alterações."
+ },
+ "walkthrough": {
+ "heading": "Procedimento passo a passo",
+ "detect": {
+ "title": "Detetar GPU e controlador atual",
+ "body": "Examina os controladores VGA, 3D e Display do anfitrião e consulta /sys/bus/pci/devices/*/driver. Apresenta nome, endereço PCI e controlador atual de cada GPU para identificar o modo.",
+ "imageAlt": "Lista de verificação GPU que mostra cada GPU detectado com seu driver atual (vfio-pci / nvidia / amdgpu / i915) e slot PCI"
+ },
+ "pickGpu": {
+ "title": "Escolher os GPU a mudar",
+ "body": "Um único GPU é selecionado automaticamente. Com vários, pode marcar mais de um, desde que estejam no mesmo modo. Se misturar modos, terá de reduzir a seleção.",
+ "tipTitle": "Mudar vários GPU de uma vez",
+ "tipBody": "Exemplo: passar três NVIDIA para modo VM e depois devolver o iGPU ao LXC. Duas execuções, cada uma com destino comum, em vez de mudar cada placa separadamente."
+ },
+ "direction": {
+ "title": "Rever a direcção proposta",
+ "intro": "Com base no modo atual, o script propõe o oposto como alvo:",
+ "items": [
+ "VM → LXC: remove a associação a vfio-pci para que o controlador nativo (nvidia, amdgpu, i915) possa utilizar o GPU. Para NVIDIA remove as entradas BDF correspondentes de /etc/udev/rules.d/10-proxmenux-vfio-bind.rules para o próximo arranque.",
+ "LXC → VM: prepara a associação a vfio-pci. AMD / Intel bloqueiam o controlador nativo e utilizam options vfio-pci ids=…. Em NVIDIA, nvidia só é bloqueado globalmente quando todas as GPU NVIDIA do anfitrião estão em VFIO; caso contrário, regras por BDF aplicam driver_override=vfio-pci aos dispositivos dos grupos IOMMU afetados, e as GPU NVIDIA fora desses grupos mantêm nvidia. Reveja todos os membros do grupo antes de mudar."
+ ],
+ "outro": "Confirme a direção ou cancele."
+ },
+ "conflict": {
+ "title": "Opções para cada VM ou LXC afetado",
+ "body": "Verifica /etc/pve/lxc/*.conf por família do controlador GPU e /etc/pve/qemu-server/*.conf por atribuições PCI. A deteção LXC não identifica cada placa por BDF exato. Reveja os convidados detetados e escolha como tratar cada um:",
+ "headerPolicy": "Política",
+ "headerEffect": "Efeito",
+ "headerWhen": "Quando escolher",
+ "keepPolicy": "Manter configuração e desativar arranque automático",
+ "keepEffect": "pct set CTID -onboot 0 ou qm set VMID -onboot 0. Mantém as entradas GPU.",
+ "keepWhen": "Se pretende reutilizar o convidado quando o GPU voltar ao modo anterior. Escolha predefinida conservadora.",
+ "removePolicy": "Remover o GPU da configuração",
+ "removeEffect": "Remove as entradas hostpci / dev identificadas e referências antigas suportadas.",
+ "removeWhen": "Se o convidado deve funcionar sem GPU. Verifique primeiro a aplicação: a alternativa por CPU depende dela e remover o dispositivo não a reconfigura automaticamente.",
+ "imageAlt": "Diálogo para escolher como tratar cada VM ou LXC afetado"
+ },
+ "audio": {
+ "title": "Remover áudio associado ao sair do modo VM",
+ "body1": "Muitos GPU NVIDIA / AMD expõem áudio HDMI na função .1 do mesmo slot; pode haver outros dispositivos áudio atribuídos. Remover o GPU pode deixar entradas áudio hostpci obsoletas. Reveja as atribuições a manter.",
+ "body2": "Identifica os endereços BDF áudio e apresenta uma lista para escolher o que remover. Elimina também os ID vendor:device de /etc/modprobe.d/vfio.conf, apenas se nenhuma outra VM os utilizar."
+ },
+ "apply": {
+ "title": "Aplicar alterações ao anfitrião e convidados",
+ "body": "Uma vez que você confirma, o script escreve as mudanças no lado do host — vfio.conf, lista negra, módulos e (para NVIDIA) a regra udev per-BDF em /etc/udev/rules.d/10-proxmenux-vfio-bind.rules mais o estado BDF em /etc/proxmenux/vfio-bind.bdfs. Aplica igualmente a política de conflitos escolhida a cada VM/LXC afectado. Se a configuração do host realmente mudou, ele executa update-initramfs -u -k all seguido por proxmox-boot-tool refresh; caso contrário ambos são ignorados."
+ },
+ "reboot": {
+ "title": "Reiniciar",
+ "body": "Reinicie o anfitrião para aplicar a nova associação persistente. Pode adiar, mas verifique o controlador ativo antes de iniciar o convidado de destino: até reiniciar pode manter-se o anterior.",
+ "imageAlt": "Diálogo de resumo que lista o que mudou, seguido pelo prompt de reinicialização"
+ }
+ },
+ "manual": {
+ "heading": "Inspeção manual",
+ "intro": "Antes de VM → LXC, verifique o controlador e a política BDF. Este exemplo NVIDIA utiliza 10de:2204; adapte-o à sua placa. Os comandos consultam o estado; o script também gere convidados e membros do grupo IOMMU.",
+ "lxcToVm": "Antes de LXC → VM, consulte o endereço PCI e o grupo IOMMU. Substitua o endereço de exemplo e reveja todos os membros antes de atribuir dispositivos.",
+ "oneVmTitle": "Um GPU físico atribuído por VFIO só pode ser utilizado por uma VM de cada vez",
+ "oneVmBody": "Colocar várias entradas hostpci com o mesmo slot PCI em duas VMs é uma configuração válida, mas apenas uma das VMs pode começar com o GPU — a segunda falha. O passo da política de conflitos ProxMenux é exatamente evitar esta armadilha."
+ },
+ "verification": {
+ "heading": "Verificação após reiniciar"
+ },
+ "troubleshoot": {
+ "heading": "Resolução de problemas",
+ "stillVfioTitle": "A GPU continua a mostrar vfio-pci após a mudança para o modo LXC",
+ "stillVfioBody": "Um módulo VFIO carregado não prova qual controlador utiliza este GPU. Verifique a associação, a conclusão de update-initramfs e o reinício. lsmod | grep vfio só lista módulos. Para AMD / Intel veja vfio.conf; para NVIDIA, /etc/proxmenux/vfio-bind.bdfs e /etc/udev/rules.d/10-proxmenux-vfio-bind.rules. Corrija regras antigas antes de update-initramfs -u -k all e reinicie.",
+ "vmFailTitle": "Uma VM não inicia após passar o GPU para LXC",
+ "vmFailBody": "Verifique referências hostpci obsoletas. A opção Remover GPU da configuração pode eliminá-las durante a mudança pretendida. Antes de repetir o script, reveja a direção para não inverter o modo por engano. Em alternativa remova a atribuição no Proxmox com a VM parada.",
+ "smiFailTitle": "nvidia-smi apresenta «Driver/library version mismatch» ao voltar a LXC",
+ "smiFailBody": "Compare o módulo NVIDIA carregado com as bibliotecas instaladas, também nos LXC. Alinhe as versões: reiniciar carrega o módulo instalado, mas não corrige pacotes incompatíveis. Recarregar com modprobe -r nvidia e modprobe nvidia exige parar os clientes GPU e pode falhar com módulos dependentes em utilização.",
+ "logTitle": "Registo de execução",
+ "logBody": "Cada execução escreve em /tmp/proxmenux_gpu_switch_mode.log no anfitrião. Anexe o registo ao pedir ajuda no GitHub."
+ },
+ "related": {
+ "heading": "Relacionados",
+ "items": [
+ {
+ "label": "Adicionar GPU a VM (passagem direta)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — configuração inicial do modo VM."
+ },
+ {
+ "label": "Adicionar GPU ao LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — configuração inicial do modo LXC."
+ },
+ {
+ "label": "Instalar Drivers NVIDIA (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — exigido para o modo LXC em GPUs NVIDIA."
+ },
+ {
+ "label": "ProxMenux Monitor — Página de hardware",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — secção Placas gráficas, com o modo atual e o comando para o mudar."
+ },
+ {
+ "label": "Comandos de passagem direta GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — referência rápida de comandos."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sk/docs/hardware/coral-tpu-lxc.json b/web/messages/sk/docs/hardware/coral-tpu-lxc.json
new file mode 100644
index 00000000..3df4b7c6
--- /dev/null
+++ b/web/messages/sk/docs/hardware/coral-tpu-lxc.json
@@ -0,0 +1,120 @@
+{
+ "meta": {
+ "title": "Pridať Coral TPU do LXC | Dokumentácia ProxMenux",
+ "description": "Sprístupnite Google Coral TPU cez USB alebo M.2 / PCIe kontajneru LXC v Proxmoxe. ProxMenux nastaví zariadenia, oprávnenia a pripojenia, spustí kontajner a v podporovaných distribúciách nainštaluje runtime Edge TPU."
+ },
+ "header": {
+ "title": "Pridať Coral TPU do LXC",
+ "description": "Sprístupnite Coral USB Accelerator alebo M.2 / Mini-PCIe kontajneru LXC. ProxMenux nastaví kontajner a runtime Edge TPU. Táto voľba rieši iba TPU; pre Quick Sync, VA-API alebo NVENC spustite aj Pridať GPU do LXC.",
+ "section": "Hardvér: grafické karty a Coral TPU"
+ },
+ "intro": {
+ "title": "Čo robí",
+ "body": "Zapíše konfiguráciu do /etc/pve/lxc/<ctid>.conf pre USB Accelerator, Coral M.2 / PCIe alebo oba. Spustí kontajner a nainštaluje runtime Google libedgetpu. GPU sa nastavuje samostatne cez apt-get. Kontajnery iných distribúcií môžu zvoliť režim iba sprístupnenia zariadenia, ktorý preskočí APT inštaláciu libedgetpu. Hodí sa, ak aplikácia už runtime obsahuje, napríklad Docker obraz Frigate.",
+ "downtime": "Počítajte s krátkym výpadkom kontajnera. Skript ho zastaví kvôli konfigurácii a spustí na inštaláciu runtime. Tieto zmeny nevyžadujú reštart hostiteľa."
+ },
+ "hostPrep": {
+ "title": "Hostiteľ musí byť pripravený ako prvý",
+ "body": "M.2 / PCIe potrebuje gasket/apex na hostiteľovi a funkčné zariadenie. USB potrebuje pripojené zariadenie a oprávnenia; aplikácia nemusí bežať na hostiteľovi. libedgetpu musí byť tam, kde beží aplikácia. Poradie: príprava hostiteľa → prístup LXC → nastavenie aplikácie."
+ },
+ "running": {
+ "heading": "Spustenie skriptu",
+ "body": "V ProxMenuxe otvorte Hardvér: GPU a Coral-TPU → Pridať Coral TPU do LXC.",
+ "imageAlt": "Voľba Pridať Coral TPU do LXC v ponuke hardvéru"
+ },
+ "howRuns": {
+ "heading": "Ako skript funguje",
+ "body": "Vyberte kontajner. Skript nastaví prístup USB aj bez pripojeného USB Coral a pridá M.2 / PCIe, ak zistí príslušný hardvér."
+ },
+ "walkthrough": {
+ "heading": "Postup krok za krokom",
+ "pick": {
+ "title": "Vyberte kontajner LXC",
+ "body": "Výber obsahuje vhodné kontajnery z pct list; OCI kontajnery sú skryté a spravujú sa cez Apps v správcovi OCI. Vyberte spustený alebo zastavený kontajner. Skript ho podľa potreby zastaví, nakonfiguruje a spustí na inštaláciu runtime."
+ },
+ "gpuHint": {
+ "title": "Voliteľné odporúčanie prístupu ku GPU",
+ "body": "Ak sa zistí GPU, ktorá nie je nakonfigurovaná pre tento kontajner, dialóg odporučí /dev/coral a sprístupní celý strom /dev/bus/usb kontajneru. Konfigurácia sa zapíše aj bez pripojeného USB Coral a sprístupní viac než iba toto zariadenie.",
+ "whyTitle": "Prečo pripojiť /dev/bus/usb namiesto /dev/coral?",
+ "whyBody": "Cesta USB, napríklad /dev/bus/usb/001/005, sa pri opätovnom pripojení mení. Staršie verzie pripájali odkaz /dev/coral a mohli zachovať neplatnú cestu. Pripojenie celého stromu USB sprístupní aktuálny uzol zariadenia. Aplikácia môže potrebovať zariadenie znovu otvoriť."
+ },
+ "pcie": {
+ "title": "Nastavenie prístupu M.2 / PCIe v LXC",
+ "body1": "Ak zistí Coral M.2 / PCIe a existuje /dev/apex_0, použije API Proxmoxu dev na správu cgroup2 v privilegovaných aj neprivilegovaných LXC:",
+ "body2": "Ak po /dev/apex_0, skript zapíše bind mount s create=file a iba vtedy, keď je číslo major zariadenia apex uvedené v /proc/devices, aj klasické pravidlo cgroup2. Ani jedno nevytvorí funkčné zariadenie:",
+ "rebootTitle": "Reštartovať hostiteľa ako prvý, ak ste práve nainštalovali Coral ovládače",
+ "rebootBody": "Náhradné pripojenie nenačíta ovládač apex na hostiteľovi. Načítajte ho alebo po inštalácii reštartujte a overte zariadenie. Potom znova spustite skript pre modernú položku zariadenia a reštartujte kontajner."
+ },
+ "drivers": {
+ "title": "Spustenie LXC a inštalácia runtime Coral",
+ "body": "Spustí kontajner a čaká najviac 15 sekúnd na stav running. Potom cez pct exec spustí inštalátor vnútri. Inštalátor:",
+ "items": [
+ "Spúšťa apt-get update.",
+ "Nainštaluje požiadavky repozitára Coral: gnupg, curl a ca-certificates.",
+ "Importuje kľúč GPG od Googlu do /etc/apt/keyrings/coral-edgetpu.gpg, rovnako ako inštalátor hostiteľa, a pridá repozitár APT coral-edgetpu-stable s signed-by=.",
+ "Predvolene nainštaluje libedgetpu1-std. Pri zistení Coral M.2 ponúkne libedgetpu1-std alebo libedgetpu1-max. Výber balíka sám nenastaví detekciu v aplikácii."
+ ],
+ "noIgpuTitle": "Prečo tu nie sú žiadne ovládače iGPU?",
+ "noIgpuBody": "Predtým inštaloval aj va-driver-all, intel-opencl-icd a ďalšie balíky Intel pre Quick Sync spolu s Coral. To spôsobovalo nejasné chyby pri požiadavke iba na Coral. iGPU sa teraz nastavuje cez apt-get. Pre Alpine, Arch, RHEL alebo SUSE zistené cez /etc/os-release ponúkne pokračovať iba so sprístupnením zariadenia alebo zrušiť. Prvá voľba nastaví /etc/pve/lxc/<ctid>.conf bez inštalácie libedgetpu. Ak aplikácia runtime obsahuje, napríklad Frigate Docker, tento režim stačí. Inak nainštalujte libedgetpu podľa lsmod | grep apex. Ak chýba, skúste modprobe apex alebo po inštalácii ovládača reštartujte. Keď na hostiteľovi existuje /dev/apex_0, overte položku zariadenia LXC (ak sa zapísali iba náhradné položky, spustite skript znova) a reštartujte kontajner cez pct stop <ctid> && pct start <ctid>.",
+ "replugTitle": "USB Coral zmizne po pripojení do iného portu",
+ "replugBody": "Overte, že LXC pripája /dev/bus/usb namiesto odkazu /dev/coral. Konfigurácia má obsahovať lxc.mount.entry: /dev/bus/usb dev/bus/usb ... bez priamej závislosti od /dev/coral. Pri starej konfigurácii skript spustite znova.",
+ "alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime nie je nainštalovaný",
+ "alpineBody": "Režim iba sprístupnenia zariadenia nastaví zariadenie bez inštalácie libedgetpu. Použite kompatibilný komunitný balík alebo zostavte zdrojový kód; pred príkazom ako apk add v Alpine overte dostupnosť balíka. Frigate môže runtime obsahovať. Pri Dockeri v LXC sprístupnite M.2 aj cez --device /dev/apex_0:/dev/apex_0 alebo pripojte USB do Dockera: samotný LXC mount nestačí.",
+ "frigateTitle": "Frigate hlási „Coral EdgeTPU detected but not available“",
+ "frigateBody": "Overte runtime, viditeľnosť zariadenia a práva na čítanie/zápis skutočného procesu aplikácie. Pre USB skontrolujte oprávnenia a prípadnú skupinu plugdev. Pre M.2 overte /dev/apex_0 cez ls -l /dev/apex_0. Názov ako apex v /etc/group nestačí: číselné GID a mapovania LXC musia sedieť. Overte aj obsadenie TPU iným procesom; privilegovaný režim nech nie je prvým riešením.",
+ "logsTitle": "Skontrolujte host a kontajnerové protokoly",
+ "logsBody": "Na hostiteľovi pozrite správy jadra cez journalctl -k | grep -i -e apex -e gasket -e usb. V LXC skontrolujte protokoly aplikácie; pri vnorenom Dockeri použite docker logs <container>. Chyby môžu spôsobiť oprávnenia, chýbajúci runtime, USB spojenie alebo iný proces používajúci TPU."
+ },
+ "related": {
+ "heading": "Súvisiace",
+ "items": [
+ {
+ "label": "Inštalácia Coral TPU na hostiteľa",
+ "href": "/docs/hardware/install-coral-tpu-host",
+ "tail": " — predpoklad použitia Coral M.2 / PCIe v CT."
+ },
+ {
+ "label": "Pridať GPU do LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — prístup ku GPU, často kombinovaný s Coral vo Frigate."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sk/docs/hardware/gpu-vm-passthrough.json b/web/messages/sk/docs/hardware/gpu-vm-passthrough.json
new file mode 100644
index 00000000..3a2487ad
--- /dev/null
+++ b/web/messages/sk/docs/hardware/gpu-vm-passthrough.json
@@ -0,0 +1,178 @@
+{
+ "meta": {
+ "title": "Pridanie GPU do VM | Dokumentácia ProxMenux",
+ "description": "Priraďte fyzickú GPU virtuálnemu stroju Proxmox. ProxMenux overí IOMMU, nastaví VFIO a zariadenia VM a zistí konflikty s inými VM alebo LXC."
+ },
+ "header": {
+ "title": "Pridať GPU do VM (passthrough)",
+ "description": "Zistí GPU Intel, AMD alebo NVIDIA pre priamy prístup z VM. Overí IOMMU a pridružené zariadenia, nastaví VFIO a VM a použije pravidlá kompatibility. Overte všetky dotknuté zariadenia.",
+ "section": "Hardvér: grafické karty a Coral TPU"
+ },
+ "intro": {
+ "title": "Čo robí",
+ "body": "Automatizuje nastavenie hostiteľa a hostpci z lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "iommu": "Podpora IOMMU v hardvéri a potrebné zapnutie vo firmvéri (Intel VT-d alebo AMD-Vi). Overí systém a môže nastaviť Linux; nemení BIOS/UEFI ani nedokazuje, že neaktívne IOMMU je vypnuté vo firmvéri.",
+ "q35": "Sprievodca vyžaduje q35 a odmietne i440fx. Typ stroja je oddelený od firmvéru BIOS/UEFI. Zmena čipovej súpravy existujúcej VM vyžaduje plánovanie a nevykonáva sa automaticky.",
+ "q35Check": "qm config VMID | grep machine",
+ "moreGpus": "Pripravte ďalšiu GPU alebo náhradný prístup cez SSH, IPMI či sériovú konzolu. Rezervovanie hlavnej GPU môže vypnúť miestny obraz. Pri NVIDIA môže karta mimo dotknutej skupiny IOMMU zostať hostiteľovi.",
+ "nvidiaInstalled": "Po vfio-pci namiesto nvidia. Modul nvidia môže zostať pre ostatné karty mimo dotknutej skupiny IOMMU. Overte ich cez nvidia-smi."
+ },
+ "pickOne": {
+ "title": "Výhradné priradenie VM alebo zdieľanie LXC",
+ "body": "Používateľ GPU viazaný na vfio-pci pre prechod VM nemôže súčasne používať hostiteľ ani LXC. Ak máte dva GPU, môžete vyhradiť jeden pre každú cestu. Ak máte iba jeden, vyberte:",
+ "vmItem": "VM: priamy a výhradný prístup pre túto VM.",
+ "lxcItem": "LXC (intel_iommu=on alebo amd_iommu=on a existujú skupiny IOMMU. Ak je parameter už uložený pre ďalší štart, pokračuje v režime čakajúceho reštartu; inak ho samostatne potvrdený krok môže pridať s iommu=pt. Jeho heuristika zavádzacieho súboru použije /etc/kernel/cmdline, keď sa v ňom nachádza značka koreňa ZFS ako root=ZFS=; inak použije /etc/default/grub. Táto heuristika nedokazuje skutočne použitý zavádzač. Novo nakonfigurované IOMMU sa prejaví po reštarte; potom overte skutočné skupiny.",
+ "tipTitle": "Už ste nastavili kroky po inštalácii?",
+ "tipBody": "Ak je /sys/bus/pci/devices/<pci>/reset_method. APU alebo samostatná karta bez FLR je blokovaná politikou sprievodcu; neznámy podtyp bez FLR vyžaduje potvrdenie. Nedokazuje to všeobecnú nemožnosť.",
+ "Stav D3cold. Sprievodca blokuje AMD karty so stavom D3cold pre riziko zlyhania aktivácie. Overte napájanie a firmvér.",
+ "Analýza skupiny IOMMU. Číta /sys/kernel/iommu_groups/ a do plánu VM zahrnie všetkých členov okrem mostov, prípadne aj sieťové či úložné radiče. Ak skupina obsahuje zariadenia z iného slotu, skript ich vypíše pred súhrnom; overte, že hostiteľ žiadne z nich nepotrebuje. Pri čakajúcom reštarte IOMMU nie sú skutočné skupiny dostupné a plán najprv obsahuje iba vybranú funkciu GPU; izoláciu overte po reštarte."
+ ],
+ "audioIntro": "Pridružený zvuk. Dva prípady podľa umiestnenia radiča:",
+ "audioDgpu": "Samostatná GPU: zvuk HDMI býva vo funkcii .1 rovnakého PCI slotu a pri zistení sa zahrnie. Ak ho používal hostiteľ, rezervovaním pre VM stratí prístup.",
+ "audioIgpu": "Bez zvukovej funkcie .1: zvuk môže byť na inom zariadení ako 00:1f.3. Vypíše radiče a ovládače, napríklad snd_hda_intel. Predvolene nie je vybraný žiadny; vyberte iba potrebné."
+ },
+ "pickVm": {
+ "title": "Vyberte cieľovú VM",
+ "body": "Vyberte VM zo zoznamu. Vyžaduje q35 a podľa možnosti použije existujúce položky GPU. BIOS/UEFI je samostatné nastavenie, nie typ stroja. Čipovú súpravu ani režim štartu hosťa automaticky nemení.",
+ "imageAlt": "Výber VM podľa názvu, ID a stavu"
+ },
+ "switchMode": {
+ "title": "Riešenie existujúcich priradení",
+ "intro": "Skript prehľadá konfigurácie VM a LXC na hostiteľovi a zisťuje použitie vybranej GPU. Možné výsledky:",
+ "items": [
+ "GPU je voľná. Pokračuje bez odstránenia priradení.",
+ "Priradená inej VM. Najprv zastavte zdrojovú VM. Môžete ponechať položky a vypnúť automatický štart alebo odstrániť položky a ponechať automatický štart. Pri aktívnom vfio-pci bez potrebných zmien hostiteľa možno presun VM→VM vykonať bez jeho reštartu.",
+ "GPU používaná LXC. Pri bežných kontajneroch zvoľte ponechať konfiguráciu GPU a vypnúť automatický štart alebo odstrániť konfiguráciu zariadenia GPU a automatický štart ponechať. Odstránenie vymaže položky devN a pri AMD/Intel aj staré pravidlá /dev/dri lxc.mount.entry a lxc.cgroup2.devices.allow. Kontajnery OCI si ponechajú konfiguráciu a zastavia sa s vypnutým automatickým štartom; ich GPU odstráňte cez OCI manager Apps. Detekcia konfliktov prebieha podľa rodiny zariadení GPU a môže zahrnúť ďalšie karty tejto rodiny."
+ ],
+ "imageAlt": "Dialóg ponúka odstrániť GPU z LXC pred pridelením do VM",
+ "smartTitle": "Kontrola pridruženého zvuku pri odstránení GPU",
+ "smartBody": "Potom môže ponúknuť zoznam potenciálne nepotrebných zvukových zariadení zdrojovej VM. Zrušte výber stále potrebných. Napríklad môže ponechať 02:00.1 a ponúknuť odstránenie 00:1f.3. O odstránení rozhoduje výber, nie zaručená univerzálna väzba zvuku a obrazu."
+ },
+ "audioPick": {
+ "title": "Bez zvukovej funkcie .1 vyberte potrebné radiče",
+ "body": "Stáva sa to len pre Intel iGPU a podobné split-audio nastavenia. Kontrolný zoznam zobrazuje každý PCI audio ovládač na hostiteľovi (s výnimkou všetkých už v skupine IOMMU GPU), označený jeho súčasným vodičom. Vyberte tie, ktoré chcete, alebo žiadne, ak VM nepotrebuje audio z hostiteľa hardvéru.",
+ "imageAlt": "Kontrolný dialóg s každým hostiteľom PCI audio ovládač (BDF + ovládač), keď GPU nemá .1 súrodenec",
+ "warnTitle": "Nevyberajte zvuk potrebný hostiteľovi",
+ "warnBody": "Priradenie zvuku môže odobrať prístup hostiteľovi; radič nemôže súčasne patriť inej spustenej VM. Nepotrebný zvuk nevyberajte a overte priradenia. Pípanie konzoly nemusí pochádzať z PCI zvuku."
+ },
+ "summary": {
+ "title": "Preskúmanie zhrnutia potvrdenia",
+ "body": "Overte konečný plán hostiteľa a VM a pri chybe ho zrušte. Zobrazuje skupinu IOMMU a počet jej zariadení; členovia z iného slotu sú vypísaní v predchádzajúcom kroku. Zrušenie zastaví hlavné zmeny, nevráti však skoršiu samostatne potvrdenú zmenu nastavenia štartu pre IOMMU.",
+ "imageAlt": "Súhrn plánovaných zmien hostiteľa a VM"
+ },
+ "hostApply": {
+ "title": "Uplatnia sa zmeny hostiteľa",
+ "intro": "Fáza vykonania mení hostiteľa a VM. Čistenie zvuku môže ešte vyžadovať výber. Možné zmeny:",
+ "items": [
+ "/etc/modules Dodáva: vfio, vfio_iommu_type1, vfio_pci (plus vfio_virqfd o jadrách < 6.2).",
+ "/etc/modprobe.d/vfio.conf — AMD/Intel: options vfio-pci ids=<vendor:device,...> disable_vga=1. NVIDIA: softdep nvidia pre: vfio-pci (_drm/_modeset/_uvm); skutočné priradenie je podľa BDF. AMD pridáva poradie načítania softdep: vfio-pci → radeon/amdgpu.",
+ "Zapíše /etc/modprobe.d/iommu_unsafe_interrupts.conf a kvm.conf s allow_unsafe_interrupts=1 a ignore_msrs=1. Ide o nastavenia skriptu, nie všeobecné požiadavky Windows/macOS; nebezpečné prerušenia oslabujú ochranu premapovania.",
+ "/etc/modprobe.d/blacklist.conf: NVIDIA — nouveau/lbm-nouveau; AMD — radeon + amdgpu; Intel — i915. Tieto pravidlá výrobcu môžu ovplyvniť ďalšie karty s rovnakým ovládačom. Modul nvidia sa blokuje iba cez /etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf, keď sú všetky NVIDIA hostiteľa evidované pre VFIO.",
+ "/etc/udev/rules.d/10-proxmenux-vfio-bind.rules + /etc/proxmenux/vfio-bind.bdfs — Iba NVIDIA. Nastaví ATTR'{'driver_override'}'=\"vfio-pci\" pri PCI ADD pre evidované BDF vrátane funkcií dotknutej skupiny IOMMU. Mimo skupín môže zostať nvidia. Politika BDF nerozdelí hardvérovú skupinu IOMMU.",
+ "Iba AMD. Pokúsi sa o výpis ROM z /sys/bus/pci/.../rom alebo ACPI VFCT do /usr/share/kvm/vbios_<vendor>_<device>.bin. Pri úspechu VM použije romfile=. Platný výpis nezaručí úspešnú inicializáciu GPU.",
+ "Iba NVIDIA. Zastaví a vypne nvidia-persistenced, nvidia-powerd, nvidia-fabricmanager iba ak sú všetky NVIDIA rezervované pre VFIO. Pri zmiešanom použití zachová služby a nvidia pre natívne karty.",
+ "update-initramfs -u -k all — spustí sa iba pri zmene nastavenia hostiteľa."
+ ]
+ },
+ "vmApply": {
+ "title": "Konfigurácia VM sa aplikuje pomocou qm set",
+ "body": "VM konfig na /etc/pve/qemu-server/<vmid>.conf je aktualizovaný prostredníctvom qm set (nikdy priamo sed):",
+ "after1": "Pridáva x-vga=1 pre AMD a NVIDIA, nie Intel. Ide o politiku skriptu, nie dôkaz, že všetkým Intel iGPU chýba firmvér alebo že príznak vždy spôsobuje zamrznutie.",
+ "after2": "Dodatočné linky hostpciN sú pripojené, ak skupina IOMMU GPU obsahuje ďalšie zariadenia, ktoré potrebujete spoločne prechádzať."
+ },
+ "reboot": {
+ "title": "Reštart pri požadovanej zmene hostiteľa",
+ "body": "Pri zmene štartu alebo ovládačov postupujte podľa výzvy na reštart a pred VM overte aktívne priradenie GPU. Uložené nastavenie nepotvrdzuje aktiváciu. Presun VM→VM so správnym VFIO nemusí vyžadovať reštart hostiteľa.",
+ "imageAlt": "Súhrnná obrazovka znázorňujúca, čo bolo zmenené, nasledovaná reštartom"
+ }
+ },
+ "vendors": {
+ "heading": "Poznámky podľa výrobcu",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Zachováva staršie riešenie pre Code 43: hidden=1, ID NV43FIX v args a kvm=off. Nie je všeobecnou požiadavkou dnešných GeForce; NVIDIA povolila Windows passthrough od R465. Chyba môže mať iné príčiny; overte GPU a ovládač.",
+ "nvidiaMultiHeading": "Podpora multi-GPU NVIDIA",
+ "nvidiaMultiBody": "Zmiešané použitie NVIDIA podľa BDF. Funkcie vfio-pci eviduje podľa adresy, nielen ID vendor:device. Mimo dotknutých skupín môže ponechať nvidia; overte cez nvidia-smi. Dve karty v rovnakej skupine tým neizoluje.",
+ "amdHeading": "AMD",
+ "amdBody": "Niektoré AMD GPU sa po zastavení VM nedajú resetovať. Sprievodca overuje hlásené schopnosti, nie každý reálny cyklus. x-vga=1. qm config VMID | grep -E \"cpu|args\" so skutočným VMID, potom hidden=1 a hv_vendor_id=NV43FIX. Overte aj hosťovský ovládač, firmvér a priradenie. Opakovanie môže pri existujúcom priradení skončiť.",
+ "amdResetTitle": "AMD GPU funguje raz, zlyháva na reštarte VM",
+ "amdResetBody": "Zlyhanie resetovania je jednou z príčin. Reštart alebo úplné vypnutie môže dočasne pomôcť. Overte podporu a skoré načítanie vendor-reset; samotné softdep amdgpu pre: vendor-reset nezaručí načítanie pred VFIO. Aj RadeonResetBugFix potrebuje kompatibilnú GPU.",
+ "stuckBootTitle": "VM prilepené booting / GPU nezistené",
+ "stuckBootBody": "Overte skutočnú adresu cez lspci -nnk -s PCI_ADDRESS; očakáva sa Kernel driver in use: vfio-pci. Nahraďte PCI_ADDRESS. Pri natívnom ovládači overte politiku priradenia, nielen /etc/modprobe.d/blacklist.conf; NVIDIA používa stav BDF. Pozrite dmesg | grep vfio. Po oprave spustite update-initramfs -u -k all a plánovaný reštart.",
+ "darkTitle": "Hostiteľská konzola ide tma po reštarte a nemôžem SSH v",
+ "darkBody": "Čierna obrazovka nedokazuje výpadok hostiteľa. Ak nefunguje ani SSH, overte sieť a radiče zahrnuté v skupine IOMMU. Obnovte prístup cez IPMI, sériovú konzolu alebo záchranné prostredie; overte /etc/pve/qemu-server/<vmid>.conf a vráťte iba príslušné priradenia a pravidlá. Nemažte nesúvisiace nastavenia.",
+ "logTitle": "Skontrolujte protokol inštalácie",
+ "logBody": "Každé spustenie zapisuje /tmp/add_gpu_vm.log. Záznam priložte k žiadosti o pomoc."
+ },
+ "revert": {
+ "heading": "Ručné vrátenie zmien",
+ "intro": "Zastavte VM a odstráňte iba príslušné PCI priradenia v Hardvéri alebo pomocou nižšie uvedeného indexu. GPU sa tým nevráti natívnemu ovládaču hostiteľa. Na to použite Zmeniť režim GPU a pred potvrdením overte dotknutých hostí."
+ },
+ "related": {
+ "heading": "Súvisiace",
+ "items": [
+ {
+ "label": "Nainštalovať ovládače NVIDIA (host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — príprava ovládača pre natívne karty hostiteľa; GPU vo VFIO ho nemôže používať súčasne."
+ },
+ {
+ "label": "Pridať GPU do LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — alternatíva: zdieľať GPU s viacerými kontajnermi namiesto vyhradenia jednej VM."
+ },
+ {
+ "label": "Zmeniť režim GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — prepnutie tej istej GPU medzi zdieľaním a výhradným priradením."
+ },
+ {
+ "label": "GPU Prenosové príkazy",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — lspci, overenie IOMMU a prehľad qm set hostpci."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sk/docs/hardware/igpu-acceleration-lxc.json b/web/messages/sk/docs/hardware/igpu-acceleration-lxc.json
new file mode 100644
index 00000000..ca86ae9f
--- /dev/null
+++ b/web/messages/sk/docs/hardware/igpu-acceleration-lxc.json
@@ -0,0 +1,185 @@
+{
+ "meta": {
+ "title": "Pridanie GPU do LXC | Dokumentácia ProxMenux",
+ "description": "Zdieľajte GPU Intel, AMD alebo NVIDIA s LXC. ProxMenux nastaví zariadenia, skupiny a knižnice podľa distribúcie; aplikácia musí akceleráciu podporovať a mať nastavenú."
+ },
+ "header": {
+ "title": "Pridať GPU do LXC",
+ "description": "Zdieľa prístup ku GPU s LXC cez zariadenia hostiteľa. Ovládač zostáva na hostiteľovi; aplikácie potrebujú kompatibilné knižnice a vlastné nastavenie.",
+ "section": "Hardvér: grafické karty a Coral TPU"
+ },
+ "intro": {
+ "title": "Čo robí",
+ "body": "Pridá položky dev<N> do /etc/pve/lxc/<ctid>.conf pre príslušné uzly /dev/dri/*, /dev/kfd alebo /dev/nvidia*. Spustí kontajner, nainštaluje balíky používateľského priestoru pre jeho distribúciu a pri Intel/AMD zosúladí skupiny video a render. Akcelerácia aplikácií naďalej vyžaduje kompatibilný hardvér, knižnice a nastavenie aplikácie."
+ },
+ "compare": {
+ "heading": "Zdieľanie LXC a priame priradenie VM",
+ "intro": "LXC zdieľa jadro a môže GPU zdieľať medzi hostiteľom a kontajnermi. Pri lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "vfio": "GPU nesmie byť priradená vfio-pci. Potrebuje natívny ovládač hostiteľa. Pri priradení VM skript ponúkne dev<N> na LXC config a, na neprivilegovaných kontajneroch, zarovná video a render GIDs medzi hostiteľom a kontajnerom, takže uzly zariadenia GPU sú dosiahnuteľné zvnútra bez toho, aby ste museli ručne editovať lxc.idmap."
+ },
+ "running": {
+ "heading": "Spustenie inštalátora",
+ "body": "Otvorte ProxMenux a vyberte Hardvér: GPU a Coral-TPU → Pridať GPU do LXC.",
+ "imageAlt": "Položka ponuky na pridanie GPU do LXC"
+ },
+ "howRuns": {
+ "heading": "Ako skript funguje",
+ "body": "Vyberte kontajner a rodiny GPU a prejdite kontrolami. Potom spracovanie zastaví a zmení kontajner bez ďalšieho konečného potvrdenia. Voliteľné čistenie VFIO má vlastné potvrdenie a môže skôr zmeniť hostiteľa."
+ },
+ "walkthrough": {
+ "heading": "Postup krok za krokom",
+ "detect": {
+ "title": "Zistenie GPU hostiteľa",
+ "body": "Hľadá radiče GPU cez lspci. Pre NVIDIA overí modul nvidia a nvidia-smi; zistená verzia určuje inštalátor .run pre kontajner.",
+ "tipTitle": "NVIDIA nie je pripravený?",
+ "tipBody": "Ak chýba modul alebo NVIDIA na hostiteľovi nefunguje, najprv použite /dev/dri/* ani /dev/nvidia*. Ponúkne /etc/pve/lxc/<ctid>.conf. Číslované položky dev<N> obsahujú GID hostiteľa pre video alebo render. Existujúce riadky bind lxc.mount.entry pre /dev/dri sa nahradia položkami dev:; overte výslednú konfiguráciu a oprávnenia.",
+ "body2": "Príklad po Intel + NVIDIA na tom istom kontajneri:"
+ },
+ "installDrivers": {
+ "title": "Spustiť kontajner a inštalovať ovládače vnútri",
+ "body": "Spustí kontajner a čaká približne 30 sekúnd na odpoveď pct exec. Zistí distribúciu cez /etc/os-release a nainštaluje príslušné balíky.",
+ "headerDistro": "Distribúcia",
+ "headerInt": "Intel / AMD",
+ "headerNvidia": "NVIDIA",
+ "rows": [
+ {
+ "distro": "Alpine",
+ "intel": "apk add mesa-va-gallium intel-media-driver libva-utils",
+ "nvidia": "apk add nvidia-utils"
+ },
+ {
+ "distro": "Arch / Manjaro",
+ "intel": "pacman -Sy intel-media-driver mesa libva-utils",
+ "nvidia": "pacman -Sy nvidia-utils"
+ }
+ ],
+ "debianDistro": "Debian / Ubuntu / ostatné",
+ "debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo",
+ "debianNvidia": "Rozbalí .run na hostiteľovi → pct push → inštaluje s --no-kernel-modules --no-dkms.",
+ "whyTitle": "Prečo na Debiane používa inštalátor NVIDIA .run",
+ "whyBody": "Balíky nemusia zodpovedať hostiteľovi. Knižnice musia zodpovedať načítanému modulu hostiteľa pre NVML a nvidia-smi. Debian/glibc použije uložený .run verzie hostiteľa, rozbalí a zabalí ho na hostiteľovi, prenesie cez pct push a inštaluje s --no-kernel-modules --no-dkms. Alpine a Arch používajú repozitáre; overte verzie."
+ },
+ "alignGids": {
+ "title": "Zarovnať GID a obnoviť stav",
+ "body1": "Pri Intel/AMD načíta GID hostiteľa pre video a render, pričom 44/104 použije iba ako náhradné hodnoty, a potom upraví /etc/group v kontajneri tak, aby zodpovedali; pri behu iba s NVIDIA sa tento krok preskočí. Položky ako video:44 a render:104 sú príklady, nie univerzálne ID. Overte členstvo aplikácie a účinné oprávnenia k zariadeniam.",
+ "body2": "Pri bežnom dokončení pôvodne zastavený kontajner znovu zastaví; pôvodne spustený nechá bežať. Pri chybe spustenia alebo inštalácie overte konečný stav a záznam."
+ }
+ },
+ "vendors": {
+ "heading": "Poznámky podľa výrobcu",
+ "intelHeading": "Intel iGPU",
+ "intelBody": "Akcelerácia médií Intel vrátane Quick Sync závisí od generácie GPU, kodekov a nastavenia aplikácie. Skript zdieľa tie z /dev/dri/card0, card1, renderD128 a renderD129, ktoré existujú; iné čísla uzlov sa nepridajú. Hostiteľ ich už musí poskytovať prostredníctvom natívneho ovládača, napríklad i915.",
+ "amdHeading": "AMD",
+ "amdBody": "AMD používa DRI pre Mesa/VA-API. Ak hostiteľ poskytuje /dev/kfd, zdieľa aj ten. ROCm/OpenCL potrebuje podporovaný hardvér a kompatibilné knižnice; zdieľanie zariadenia nenainštaluje celé prostredie ROCm.",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Zdieľa dostupné /dev/nvidia*. Zhoda verzií ovládača je dôležitá pre nvidia-smi. Debian/glibc používa .run verzie hostiteľa, Alpine/Arch repozitáre. Pod 2048 MiB nastavenej RAM ponúkne dočasné zvýšenie a potom obnoví hodnotu; vyžaduje aj 1500 MiB voľného disku.",
+ "updateTitle": "Po aktualizácii NVIDIA hostiteľa overte knižnice LXC",
+ "updateBody": "Staré knižnice môžu vyvolať chybu nvidia-smi. .run slúži pre Debian/glibc, no pridanie môže skončiť, ak už všetky zariadenia existujú.",
+ "denyTitle": "Povolenie zamietnuté na /dev/dri/renderD128 vnútri kontajnera",
+ "denyBody": "Overte zariadenie a číselné oprávnenia render, potom členstvo používateľa v render. Ak je príkaz dostupný, pridajte ho do render cez usermod -aG render <user>; zástupný text nahraďte skutočným účtom. Reštartujte reláciu. Zmena privilégií nie je všeobecná oprava.",
+ "vainfoTitle": "vainfo hovorí: VA-API verzia 1.xx; nepodarilo sa inicializovať",
+ "vainfoBody": "Overte prístup a ovládač VA-API. Názvy balíkov závisia od distribúcie: napríklad intel-media-driver pre podporované novšie Intel GPU, i965-va-driver pre staršie a mesa-va-drivers pre AMD. Samotná správa nepotvrdzuje chýbajúci balík.",
+ "logTitle": "Záznam inštalácie",
+ "logBody": "Každé spustenie zapisuje /tmp/add_gpu_lxc.log na hostiteľovi. Priložte záznam k žiadosti o pomoc."
+ },
+ "related": {
+ "heading": "Súvisiace",
+ "items": [
+ {
+ "label": "Nainštalovať ovládače NVIDIA (host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — pred zdieľaním NVIDIA nainštalujte ovládač hostiteľa."
+ },
+ {
+ "label": "Pridať GPU do VM (passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — alternatíva na vyhradenie GPU jednej VM."
+ },
+ {
+ "label": "Zmeniť režim GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — prepnutie GPU medzi zdieľaním LXC a priradením VM."
+ },
+ {
+ "label": "GPU Prenosové príkazy",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — stručný prehľad súvisiacich príkazov shellu."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sk/docs/hardware/install-coral-tpu-host.json b/web/messages/sk/docs/hardware/install-coral-tpu-host.json
new file mode 100644
index 00000000..b0b7ae5b
--- /dev/null
+++ b/web/messages/sk/docs/hardware/install-coral-tpu-host.json
@@ -0,0 +1,203 @@
+{
+ "meta": {
+ "title": "Inštalácia Coral TPU na hostiteľa | Dokumentácia ProxMenux",
+ "description": "Inštaluje komponenty Coral na Proxmox VE podľa hardvéru: gasket/apex cez DKMS pre M.2 / Mini-PCIe a libedgetpu1-std pre USB. Pri oboch typoch vykoná oba postupy."
+ },
+ "header": {
+ "title": "Inštalácia Coral TPU na hostiteľa",
+ "description": "Pripraví hostiteľa Proxmoxu na Coral a zdieľanie LXC. Zistí M.2 / Mini-PCIe, USB alebo oba a použije príslušný postup: moduly DKMS pre PCIe a runtime Google Edge TPU pre USB.",
+ "section": "Hardvér: grafické karty a Coral TPU"
+ },
+ "intro": {
+ "title": "Čo robí",
+ "body": "Jeden inštalátor s rozpoznaním hardvéru. PCIe používa gasket a apex s DKMS; budúce zostavenia vyžadujú kompatibilné zdroje a hlavičky. USB používa libedgetpu1-std. Pri oboch typoch vykoná oba postupy. Runtime USB musí byť tam, kde beží aplikácia; pri použití iba v LXC nie je nevyhnutný aj na hostiteľovi."
+ },
+ "which": {
+ "heading": "Ktorý Coral mám?",
+ "body": "Modely PCIe a USB majú odlišné vyhotovenie a požiadavky. Skript podporuje oba; pred spustením identifikujte svoje zariadenie.",
+ "headerForm": "Vyhotovenie",
+ "headerDetect": "Detekcia",
+ "headerInstall": "Typ inštalácie",
+ "headerReboot": "Reštart?",
+ "pcieForm": "M.2 / Mini-PCIe",
+ "pcieFormSub": "(karty M.2 existujú s jedným alebo dvoma Edge TPU)",
+ "pcieDetect": "PCI ID výrobcu 1ac1",
+ "pcieInstall": "Modul jadra (gasket + apex) cez DKMS",
+ "pcieReboot": "Áno",
+ "usbForm": "USB akcelerátor",
+ "usbFormSub": "(malý plastový USB adaptér)",
+ "usbDetect": "USB 1a6e:089a (nenaprogramované) / 18d1:9302 (naprogramované)",
+ "usbInstall": "Používateľský runtime libedgetpu1-std z repozitára APT Google",
+ "usbReboot": "Nie"
+ },
+ "prereqs": {
+ "title": "Skôr ako začnete",
+ "coral": "Pripojený Coral (M.2, Mini-PCIe alebo USB) na inštaláciu. Bez zisteného hardvéru môže ponúknuť čistenie či odstránenie existujúcich komponentov, nový hardvérový postup však neinštaluje.",
+ "coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
+ "internet": "Prístup na internet na hostiteľovi na klonovanie ovládača PCIe z GitHubu alebo stiahnutie libedgetpu1-std z repozitára APT Google pre USB.",
+ "headers": "Hlavičky jadra dostupné cez APT: proxmox-headers-$(uname -r). Potrebné iba pre PCIe/M.2; skript ich nainštaluje.",
+ "reboot": "Naplánujte reštart pre PCIe. Skript sa pokúsi načítať zostavené moduly; reštart overí aj ich automatické načítanie."
+ },
+ "hostPrepTip": {
+ "title": "To len pripravuje hostiteľa",
+ "body": "Pripraví hostiteľa na prístup k zariadeniu, aplikáciu však nenastaví ani neotestuje. Ak chcete Coral používať v kompatibilnej aplikácii ako Frigate, pokračujte na 0x1ac1 v /sys/bus/pci/devices/*/vendor a USB zisťuje cez lsusb. Existujú dva USB identifikátory podľa stavu firmvéru:",
+ "items": [
+ "1a6e:089a — Global Unichip, stav nenaprogramované, pred načítaním firmvéru cez runtime.",
+ "18d1:9302 — Google, stav naprogramované, po načítaní firmvéru."
+ ],
+ "outro": "Ak nezistí Coral ani existujúcu inštaláciu, zobrazí vysvetlenie a skončí. Existujúce komponenty môžu vyvolať ponuku čistenia alebo odstránenia."
+ },
+ "prompt": {
+ "title": "Potvrdenie inštalácie",
+ "body": "Pred inštaláciou dialóg zobrazí zariadenia a plánované komponenty. Zrušením inštaláciu preskočíte. Voliteľné čistenie starých komponentov má samostatné predchádzajúce potvrdenie.",
+ "imageAlt": "Prehľad zariadení Coral a krokov inštalácie"
+ },
+ "pcie": {
+ "title": "PCIe: moduly gasket a apex cez DKMS",
+ "body": "Spustí sa iba pri zistenom Coral PCIe/M.2. Zostaví moduly pre aktuálne spustené jadro hostiteľa.",
+ "items": [
+ "Čistenie. Existujúci balík gasket-dkms sa pred opätovným zostavením odstráni; ak je v chybnom stave, skript vynúti jeho odstránenie a vyčistenie (purge).",
+ "Závislosti na zostavenie: git, dkms, build-essential, proxmox-headers-$(uname -r)."
+ ],
+ "cloneIntro": "Klonuje zdroje ovládača. Uprednostní no_llseek za noop_llseek.",
+ "Jadro 6.13 a novšie: zmení argument MODULE_IMPORT_NS(DMA_BUF) na reťazcový literál."
+ ],
+ "afterItems": [
+ "Skopíruje zdroje do /usr/src/gasket-1.0/, vytvorí dkms.conf a zaregistruje ich cez dkms add.",
+ "Zostaví a nainštaluje: dkms build, potom dkms install. Pri zlyhaní zobrazí posledných 50 riadkov make.log, ak je dostupný.",
+ "Vytvorí skupinu apex a pravidlá udev (/etc/udev/rules.d/99-coral-apex.rules) na priradenie skupiny zariadeniam /dev/apex_*.",
+ "Pokúsi sa načítať moduly: modprobe gasket a modprobe apex."
+ ],
+ "imageAlt": "Zostavenie cez DKMS a načítanie modulov gasket/apex"
+ },
+ "usb": {
+ "title": "USB: runtime Edge TPU od Googlu",
+ "body": "Spustí sa len vtedy, ak bol zistený akcelerátor USB. Oveľa jednoduchšie:",
+ "items": [
+ "Pridá kľúč GPG Googlu do /etc/apt/keyrings/coral-edgetpu.gpg.",
+ "Pridá repozitár APT do /etc/apt/sources.list.d/coral-edgetpu.list; signed-by= obmedzí overenie na jeho zväzok kľúčov. Ide o jednoriadkový formát .list, nie deb822 .sources.",
+ "Nainštaluje libedgetpu1-std, runtime Edge TPU so štandardným výkonom.",
+ "Znovu načíta udev a uplatní pravidlá balíka na zariadenie USB."
+ ],
+ "stdTitle": "Prečo libedgetpu1-std a nie libedgetpu1-max?",
+ "stdBody": "Balík max zapne najvyššiu podporovanú frekvenciu a zvýši výkon, spotrebu aj zahrievanie. Pred zmenou overte chladenie a prevádzkové podmienky akcelerátora. Balíky sa navzájom vylučujú; zmenu vykonáte cez apt install libedgetpu1-max."
+ },
+ "reboot": {
+ "title": "Voliteľný reštart po inštalácii PCIe",
+ "body": "Po PCIe ponúkne reštart. Už sa pokúsil o modprobe; overte načítané moduly a /dev/apex_0 so skupinou apex. Plánovaný reštart preverí automatické načítanie. Pri samotnom USB reštart hostiteľa neponúkne.",
+ "imageAlt": "Súhrn a ponuka reštartu po inštalácii PCIe"
+ }
+ },
+ "legacyCleanup": {
+ "heading": "Čistenie starého gasket-dkms na hostiteľoch iba s USB",
+ "intro": "Ak nezistí Coral PCIe/M.2, ale nájde starú inštaláciu gasket-dkms, ponúkne voliteľné čistenie s potvrdením.",
+ "items": [
+ "Ak zistí Coral PCIe/M.2, použije bežné opätovné zostavenie DKMS a toto čistenie neponúkne.",
+ "Odstráni gasket-dkms, staré záznamy DKMS a zdroje gasket a opraví nevybavený stav dpkg/APT.",
+ "Zachová USB balíky libedgetpu1-std a libedgetpu1-max, takže Coral USB si ponechá runtime.",
+ "Skript potvrdzuje, že starý balík je preč a že správa balíkov je pred nahlásením úspechu zdravá."
+ ],
+ "warningTitle": "Potvrdiť najprv hardvér",
+ "warningBody": "Ak očakávaný Coral PCIe/M.2 nie je zistený, zrušte čistenie a skontrolujte kartu, slot a firmvér."
+ },
+ "reinstallUninstall": {
+ "heading": "Preinštalovať alebo odinštalovať",
+ "intro": "Pri zistenej inštalácii PCIe s gasket-dkms, USB s libedgetpu1-std/libedgetpu1-max alebo oboch zobrazí ponuku akcií.",
+ "imageAlt": "Ponuka na preinštalovanie, aktualizáciu alebo odinštalovanie Coral",
+ "imageCaption": "Ponuka sa zobrazí, ak existuje komponent: záznam DKMS gasket, balík libedgetpu1-* alebo zariadenia /dev/apex_*.",
+ "reinstallHeading": "Preinštalovať/aktualizovať",
+ "reinstallBody": "Spustí bežnú inštaláciu: opätovné zostavenie po zmene jadra alebo aktualizáciu libedgetpu1-* z Googlu. Najprv vyčistí predchádzajúci stav DKMS, aby chybná inštalácia neblokovala zostavenie.",
+ "uninstallHeading": "Odinštalovať čo sa odstráni",
+ "uninstallIntro": "Vyžaduje potvrdenie. Aplikácie LXC používajúce /dev/apex_* môžu stratiť prístup počas odstránenia alebo po reštarte. Postup:",
+ "uninstallItems": [
+ "Pokúsi sa uvoľniť apex a gasket; aktívne používanie tomu môže zabrániť.",
+ "Odstráni každú položku DKMS registrovanú na gasket/<version>, aby sa moduly nevrátili na ďalšiu inštaláciu jadra.",
+ "Úplne odstráni gasket-dkms, libedgetpu1-std a libedgetpu1-max a spustí apt-get autoremove --purge.",
+ "Odstráni /etc/udev/rules.d/99-coral-apex.rules a obnoví predvolenú skupinu v 60-gasket-dkms.rules, ak súbor ešte existuje.",
+ "Skontroluje doplnkových členov apex. Ak je zoznam prázdny, pokúsi sa skupinu odstrániť; inak apex zachová a vypíše členov. Nejde o úplnú kontrolu používateľov s touto primárnou skupinou.",
+ "Odstráni zoznam repozitárov /etc/apt/sources.list.d/coral-edgetpu.list, starší coral-cloud.list a staré zväzky kľúčov s názvom coral-edgetpu-archive-keyring.gpg. Aktuálny zväzok kľúčov v /etc/apt/keyrings/coral-edgetpu.gpg tento postup neodstráni.",
+ "Ponúkne reštart iba ak bol nainštalovaný PCIe postup, aby uvoľnil stále aktívne moduly. Odstránenie samotného USB reštart nevyžaduje."
+ ],
+ "lxcWarnTitle": "Nádoby LXC s priechodom apex",
+ "lxcWarnBody": "Odstránenie komponentov hostiteľa môže prerušiť prístup LXC. Naplánujte údržbu, ak od tohto Coral závisia kompatibilné aplikácie ako Frigate."
+ },
+ "updates": {
+ "heading": "Upozornenia na aktualizácie",
+ "intro": "ProxMenux eviduje komponenty Coral a kontroluje PCIe/M.2 a USB samostatne. Ak máte oba typy, každý používa vlastný zdroj verzií:",
+ "headerVariant": "Variant",
+ "headerTracked": "Evidovaná verzia",
+ "headerUpstream": "Zdroj verzií",
+ "pcieVariant": "PCIe / M.2",
+ "pcieTracked": "Najprv značka vydania uložená po úspešnej inštalácii, potom verzia funkčného balíka gasket-dkms, prípadne verzia modulu DKMS. Samotná verzia DKMS neurčuje úroveň opráv forku.",
+ "pcieUpstream": "Najnovšia značka feranick/gasket-driver na GitHube; sedemdňová vyrovnávacia pamäť a porovnanie čísla zostavenia.",
+ "usbVariant": "USB",
+ "usbTracked": "libedgetpu1-std alebo libedgetpu1-max apt verzia",
+ "usbUpstream": "Lokálny kandidát na apt-cache policy (Google Coral apt repo)",
+ "outro": "Pri novšej verzii Monitor odošle coral_driver_update_available cez zapnuté kanály. Upozornenie odkazuje na inštalátor: vyberte Preinštalovať / aktualizovať.",
+ "antiTitle": "Bez opakovaných upozornení",
+ "antiBody": "Jedno upozornenie pre každý typ pri zmene dostupnej verzie. Neopakuje sa pri každej dennej kontrole; ďalšie príde až pri novšom vydaní.",
+ "rebootTitle": "Aktualizácie PCIe: naplánujte reštart",
+ "rebootBody": "Znovu zostavený modul PCIe treba načítať; plánovaný reštart preverí aj automatické načítanie. Aktualizácia knižnice USB nevyžaduje reštart hostiteľa, aplikácie so starou knižnicou však môže byť nutné reštartovať."
+ },
+ "manual": {
+ "heading": "Ručný postup",
+ "intro": "Tieto príkazy ukazujú hlavné kroky oboch postupov na preštudovanie alebo ručné vykonanie.",
+ "pcieHeading": "PCIe / M.2 (gasket + apex cez DKMS)",
+ "usbHeading": "USB (runtime libedgetpu)"
+ },
+ "verification": {
+ "heading": "Overenie",
+ "pcieHeading": "PCIe / M.2",
+ "usbHeading": "USB"
+ },
+ "troubleshoot": {
+ "heading": "Riešenie problémov",
+ "dkmsFailTitle": "Zlyhanie zostavenia DKMS po aktualizácii jadra",
+ "dkmsFailBody": "Jednou z príčin sú chýbajúce hlavičky. Overte proxmox-headers-$(uname -r) cez dpkg -l proxmox-headers-$(uname -r) a podľa potreby ich nainštalujte. V zázname hľadajte nekompatibilitu zdrojov s jadrom. Opakovanie spustí cleanup_broken_gasket_dkms, nezaručí však kompatibilitu s každým jadrom.",
+ "apexMissTitle": "/dev/apex_0 chýba po reštarte",
+ "apexMissBody": "Overte detekciu PCIe a zhodu modulu so spusteným jadrom. Skúste modprobe apex a pozrite dmesg | grep -iE \"apex|gasket\". Chyby zostavenia, načítania či nastavenia slotu/firmvéru môžu zabrániť vytvoreniu zariadenia.",
+ "lxcMissTitle": "Hostiteľ vidí /dev/apex_0, ale LXC nie",
+ "lxcMissBody": "Viditeľný uzol nepotvrdzuje funkčnosť. Overte prístup na hostiteľovi, pripojenie v LXC, pravidlá cgroup a číselné oprávnenia UID/GID. Pozrite libedgetpu1-std a oprávnenia cez ls -l /dev/bus/usb/*/*. Mapovaný používateľ/skupina aplikácie potrebuje čítanie a zápis; vlastníctvo root samo osebe nie je chyba. Po zmene pravidiel spustite udevadm control --reload-rules && udevadm trigger a podľa potreby zariadenie znovu pripojte.",
+ "logTitle": "Záznam inštalácie",
+ "logBody": "Každé spustenie zapisuje /tmp/coral_install.log. Pri zlyhaní DKMS pridá posledných 50 riadkov /var/lib/dkms/gasket/1.0/build/make.log, ak existuje. Záznam priložte k žiadosti o pomoc."
+ },
+ "related": {
+ "heading": "Súvisiace",
+ "items": [
+ {
+ "label": "Pridať Coral TPU do LXC",
+ "href": "/docs/hardware/coral-tpu-lxc",
+ "tail": " — sprístupnenie Coral z hostiteľa kontajneru s kompatibilnou aplikáciou."
+ },
+ {
+ "label": "Nainštalovať ovládače NVIDIA (host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — Rovnaký nápad pre NVIDIA GPU."
+ },
+ {
+ "label": "ProxMenux Monitor",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — panel Coral zobrazuje ovládač, moduly, zariadenia a runtime; aj teplotu, ak ju poskytuje podporovaný snímač."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sk/docs/hardware/nvidia-host.json b/web/messages/sk/docs/hardware/nvidia-host.json
new file mode 100644
index 00000000..89762a7c
--- /dev/null
+++ b/web/messages/sk/docs/hardware/nvidia-host.json
@@ -0,0 +1,175 @@
+{
+ "meta": {
+ "title": "Inštalácia NVIDIA na hostiteľa | Dokumentácia ProxMenux",
+ "description": "Inštalujte proprietárne ovládače NVIDIA na Proxmox VE cez ProxMenux: filtrovanie GPU, kontrola zostavenia a DKMS, perzistencia, voliteľný patch NVENC a aktualizácia knižníc LXC."
+ },
+ "header": {
+ "title": "Inštalovať ovládače NVIDIA na hostiteľa",
+ "description": "Inštalácia NVIDIA na hostiteľa Proxmox VE. Filtruje udržiavané vetvy podľa PCI ID GPU, kontroluje zostavenie, používa DKMS, spravuje nouveau a inštaluje perzistenciu. Môže aktualizovať knižnice LXC s prístupom k NVIDIA.",
+ "section": "Hardvér: grafické karty a Coral TPU"
+ },
+ "intro": {
+ "title": "Čo robí",
+ "body": "ProxMenux zistí GPU a ponúkne udržiavané vetvy NVIDIA, ktoré uvádzajú jeho PCI ID. Zablokuje nouveau, stiahne oficiálny inštalátor .run, používa DKMS, nainštaluje nvidia-persistenced, pravidlá udev a NVIDIA Container Toolkit a ponúkne voliteľný patch NVENC. Kontroly zostavenia overujú bežiace jadro; úspešná kompilácia nezaručuje, že bude fungovať každá aplikácia. Existujúcim LXC NVIDIA sa ponúkne aktualizácia knižníc používateľského priestoru so zodpovedajúcou verziou, okrem Arch."
+ },
+ "who": {
+ "heading": "Pre koho je toto?",
+ "body": "Pre GPU akcelerované video alebo výpočty v Plex, Jellyfin, Frigate, Immich či Stable Diffusion v LXC najprv nainštalujte NVIDIA na hostiteľa Proxmox. Priame priradenie do VM používa samostatný postup VFIO."
+ },
+ "prereqs": {
+ "title": "Skôr ako začnete",
+ "gpu": "GPU NVIDIA nainštalovaný v hostiteľovi. Zistí sa automaticky; táto voľba nespravuje AMD ani Intel.",
+ "gpuCheck": "lspci | grep -i nvidia",
+ "notVm": "GPU nesmie byť vyhradený pre VM cez VFIO. Inštalátor tento prípad odmietne, aby nenarušil priradenie.",
+ "internet": "Internetové pripojenie hostiteľa. Stiahne ovládač z download.nvidia.com a môže klonovať nvidia-persistenced a nvidia-patch z GitHubu.",
+ "space": "Vyhraďte miesto v /opt/nvidia pre .run a RAM na kompiláciu. Aktualizácia LXC mimo Arch overuje 1500 MiB voľného miesta a pri nižšej RAM môže žiadať dočasné zvýšenie na 2048 MiB; potom obnoví pôvodný limit. Počítajte s reštartom hostiteľa."
+ },
+ "vmWarn": {
+ "title": "GPU vyhradený pre VM? Tu sa zastavte",
+ "body": "Ak je zariadenie NVIDIA pripojené k vfio-pci, inštalátor skončí aj pri zastavenej VM. Vyhradenie neznamená aktívne používanie. Naplánujte návrat k ovládaču hostiteľa a odstráňte staré priradenia VM/VFIO pred reštartom a inštaláciou."
+ },
+ "running": {
+ "heading": "Spustenie inštalátora",
+ "body": "V ProxMenuxe otvorte Hardware Graphics → NVIDIA GPU Driver Installer. Ponuka závisí od prítomnosti aktívneho ovládača.",
+ "imageAlt": "Ponuka hardvéru so zvýrazneným inštalátorom NVIDIA"
+ },
+ "howRuns": {
+ "heading": "Ako skript funguje",
+ "body": "Zistí zariadenia, vyberie verziu a inštaluje. Samostatne potvrdené čistenie VFIO môže predchádzať prehľadu. Príprava repozitárov/hlavičiek a sťahovanie predchádzajú výmene ovládača; všetky zmeny nezačínajú až po jednom záverečnom potvrdení."
+ },
+ "walkthrough": {
+ "detect": {
+ "title": "Detekcia a prehľad GPU",
+ "body1": "Zobrazí grafické radiče NVIDIA, stav ovládača alebo „Ovládač NVIDIA nie je nainštalovaný“ a LXC s nastaveným prístupom k NVIDIA s ich verziou ovládača.",
+ "body2": "Overte GPU a verzie hostiteľa/kontajnerov. Pri neočakávanom výbere zrušte v prehľade; predtým samostatne potvrdené čistenie VFIO už bolo vykonané.",
+ "imageAlt": "Prehľad pred inštaláciou: GPU, ovládač a LXC NVIDIA"
+ },
+ "version": {
+ "title": "Vyberte verziu ovládača",
+ "body1": "Filtruje verzie z nvidia.com, ktoré uvádzajú PCI ID GPU v tabuľke podporovaných čipov, a heuristicky vyraďuje beta/vývojové verzie. <verzia> — Odporúčaná uprednostní najnovšiu verziu nainštalovanej vetvy, potom Production Branch a napokon najvyššie podporované číslo verzie.",
+ "body2": "Ak je ovládač evidovaný s patchom keylase, výber sa obmedzí na tabuľku NVENC. Preinštalovať / aktualizovať naďalej obsahuje potvrdenia a výber patchu; overte konečný výsledok.",
+ "whyTitle": "Ako je validovaná kompatibilita jadra",
+ "whyBody": "Filtruje podľa udržiavaných vetiev a PCI ID, bez pevnej matice jadro/ovládač. Predbežné zostavenie skúša aktuálne jadro. Potvrdená chyba vráti výber verzie; nedostupný test môže len varovať a pokračovať. Konečná inštalácia a overenie funkčnosti sú naďalej potrebné.",
+ "imageAlt": "Výber vetiev podporujúcich GPU s odporúčanou verziou navrchu"
+ },
+ "uninstall": {
+ "title": "Odstránenie starého ovládača pri preinštalovaní",
+ "body": "Po stiahnutí a overení inštalátora odstráni predchádzajúci ovládač. Zastaví služby NVIDIA, odpojí moduly, odstráni záznamy DKMS a balíky nvidia-* / libnvidia-* / cuda-*. Platí aj pri potvrdenej preinštalácii rovnakej verzie."
+ },
+ "prepare": {
+ "title": "Pripravte systém",
+ "body": "Počas prípravy skript:",
+ "items": [
+ "Overí repozitáre pred odstránením alebo inštaláciou. Bez predplatného a iba s Enterprise žiada súhlas s no-subscription; odmietnutie zastaví inštaláciu.",
+ "Inštaluje pve-headers-$(uname -r) (alebo proxmox-headers-$(uname -r)), build-essential a dkms.",
+ "Vytvorí súbor spravovaný ProxMenuxom /etc/modprobe.d/proxmenux-nouveau-blacklist.conf s blacklist nouveau a options nouveau modeset=0. Zaznamená prípadný riadok pridaný do blacklist.conf a skúsi odpojiť nouveau.",
+ "Zapíše nvidia a nvidia_uvm do /etc/modules-load.d/nvidia-vfio.conf, aby sa moduly načítali pri štarte."
+ ]
+ },
+ "download": {
+ "title": "Stiahnite a spustite inštalátor NVIDIA",
+ "body": "Stiahne NVIDIA-Linux-x86_64-<version>.run do /opt/nvidia a overí veľkosť a spustiteľný typ. Ide o kontrolu formátu, nie kryptografického podpisu. Zaregistruje DKMS na zostavenie pri zmene jadra; zdrojový kód a jadro musia zostať kompatibilné.",
+ "imageAlt": "Priebeh sťahovania a zostavenia DKMS inštalátora NVIDIA"
+ },
+ "persist": {
+ "title": "Pretrvávajúce služby a udev pravidlá",
+ "body": "Nainštaluje /etc/udev/rules.d/70-nvidia.rules na vytvorenie /dev/nvidia* pri štarte. Pomáha predísť prístupu LXC ku GPU skôr, než existujú zariadenia."
+ },
+ "nvenc": {
+ "title": "Voliteľné: použiť patch NVENC",
+ "body": "Limity relácií NVENC závisia od GPU a ovládača. nvidia-smi hlásiť „version mismatch“.",
+ "body2": "Debian / Ubuntu a ďalšie glibc kontajnery dostanú rozbalený inštalátor .run s --no-kernel-modules --no-dkms --no-install-compat32-libs; RAM sa môže dočasne zvýšiť na 2 GiB a potom obnoviť. Arch, Manjaro a EndeavourOS používajú pacman -Syu nvidia-utils z repozitárov bez pripnutia na verziu hostiteľa: overte výsledok. Alpine dostane rozbalený obsah .run cez pct push, inštaluje gcompat a binutils cez apk a vytvorí odkazy SONAME cez readelf. Overte funkčnosť; kompatibilná vrstva nezaručuje všetky knižnice na musl.",
+ "imageAlt": "Dialóg LXC NVIDIA a verzií na potvrdenie aktualizácie"
+ },
+ "reboot": {
+ "title": "Reštartovať",
+ "body": "Po inštalácii ovládača skript obnoví initramfs pre všetky jadrá; jeho posledný krok ponúkne reštart. Naplánujte tento reštart na overenie trvalej konfigurácie modulov a nouveau pri novom štarte, aj keď nový ovládač odpovedá už pred reštartom."
+ }
+ },
+ "reinstallUninstall": {
+ "heading": "Preinštalovať alebo odinštalovať",
+ "intro": "Ak je nvidia načítaný a nvidia-smi vráti verziu, zobrazí ponuku akcií. Takto zisťuje aktívny ovládač; súbory môžu byť nainštalované aj bez načítaného modulu.",
+ "imageAlt": "Ponuka NVIDIA s voľbami preinštalovať/aktualizovať ovládač alebo úplne odinštalovať ovládač",
+ "imageCaption": "Akčné menu sa zobrazí iba vtedy, keď je ovládač NVIDIA momentálne aktívny na hostiteľovi.",
+ "reinstallHeading": "Preinštalovať/aktualizovať",
+ "reinstallBody": "Vyberie verziu, pripraví repozitáre/hlavičky, stiahne a overí zostavenie pred výmenou ovládača. Umožní aktualizáciu v udržiavanej vetve alebo výber inej podporovanej. Potom znova ponúkne knižnice LXC a patch NVENC.",
+ "uninstallHeading": "Odinštalovať čo sa odstráni",
+ "uninstallIntro": "Po potvrdení Áno/Nie odstráni nasledujúce komponenty:",
+ "uninstallItems": [
+ "Zastaví a zakáže nvidia-persistenced a nvidia-powerd, skúsi odpojiť nvidia_uvm, nvidia_drm, nvidia_modeset a nvidia a potom spustí nvidia-uninstall --silent pre inštaláciu .run. Ovplyvní záťaže LXC závislé od NVIDIA; aktívni klienti môžu odpojenie blokovať.",
+ "Spustí apt purge pre nvidia-*, libnvidia-*, cuda-* a libcudnn*, odstráni zdrojový strom DKMS a priečinky nvidia-persistenced a nvidia-patch v /opt/nvidia.",
+ "Odstráni konfiguráciu načítavania modulov (/etc/modules-load.d/nvidia-vfio.conf) a položky blokovania ovládača nouveau spravované ProxMenux. Staré dvojriadkové súbory blokovania ProxMenux sa tiež migrujú a odstránia. Upravené alebo nesúvisiace súbory správcu sa zachovajú.",
+ "Odstráni /etc/udev/rules.d/70-nvidia.rules a nastaví stav NVENC na removed v registri spravovaných inštalácií; samostatný stavový súbor neexistuje.",
+ "Obnoví initramfs pre všetky jadrá, podľa konfigurácie zavádzania spustí proxmox-boot-tool refresh a vyzve na reštart."
+ ],
+ "lxcWarnTitle": "LXC s prístupom k NVIDIA",
+ "lxcWarnBody": "Odstránenie ovládača hostiteľa preruší aplikácie LXC používajúce NVIDIA, aj keď knižnice zostanú nainštalované. Naplánujte údržbu pre Frigate, Plex, Jellyfin, Ollama a ďalšie GPU aplikácie."
+ },
+ "updates": {
+ "heading": "Upozornenia na aktualizácie",
+ "body": "Ovládač NVIDIA sa sleduje v registri spravovaných inštalácií. Pri štarte a každých 24 hodín Monitor porovná verzie z download.nvidia.com/XFree86/Linux-x86_64/ s verziou hlásenou cez nvidia-smi. Upozorní iba na nové vydania údržby nainštalovanej vetvy.",
+ "kindsHeading": "Správa o aktualizácii",
+ "kindsItems": [
+ "Údržba v rovnakej vetve. Napríklad nainštalované 580.65.06 → dostupné 580.105.08. Monitor nevyvodzuje kompatibilitu jadra medzi vetvami."
+ ],
+ "antiTitle": "Zabránenie opakovaným upozorneniam",
+ "antiBody": "Jedno upozornenie na novú verziu, nie pri každej dennej kontrole. Bez novšej verzie v nainštalovanej vetve neupozorňuje.",
+ "applyTitle": "Uplatňovanie aktualizácie",
+ "applyBody": "Monitor upozorní bez automatickej inštalácie. Otvorte inštalátor, vyberte Preinštalovať / aktualizovať a podporovanú verziu, potom dokončite zostavenie a inštaláciu. Naplánujte ponúknutý reštart a overte hostiteľa aj knižnice LXC."
+ },
+ "verify": {
+ "heading": "Overenie inštalácie",
+ "intro": "Po reštarte hostiteľa sa prihláste cez SSH alebo shell Proxmoxu a spustite:",
+ "after": "Overte GPU a očakávanú verziu. Procesy už môžu byť zobrazené, ak GPU používajú služby hostiteľa alebo automaticky spustené kontajnery. Potom overte perzistenciu:",
+ "imageAlt": "Výstup nvidia-smi na hostiteľa zobrazujúci detekované GPU a nainštalovanú verziu ovládača"
+ },
+ "troubleshoot": {
+ "heading": "Riešenie problémov",
+ "smiFailTitle": "nvidia-smi hlási „NVIDIA-SMI has failed“",
+ "smiFailBody": "Možné príčiny sú nouveau, chýbajúce alebo nesprávne hlavičky jadra, nekompatibilné zdroje ovládača alebo iné chyby načítania. Pozrite lsmod | grep nouveau, dmesg | grep -i nvidia a protokoly inštalátora/DKMS. Pri oprave nouveau overte /etc/modprobe.d/proxmenux-nouveau-blacklist.conf pred update-initramfs -u -k all a reštartom. Nie každá chyba zostavenia súvisí s hlavičkami.",
+ "lxcMissTitle": "LXC kontajner nemôže vidieť GPU po aktualizácii hostiteľa",
+ "lxcMissBody": "Pred preinštalovaním overte zariadenia hostiteľa, oprávnenia LXC a verziu knižníc. Nesúlad môže vyžadovať zodpovedajúci používateľský ovládač podporovaným postupom distribúcie; na glibc používa --no-kernel-modules. Knižnice neopravia chýbajúce pripojenia či oprávnenia.",
+ "logTitle": "Skontrolujte protokol inštalácie",
+ "logBody": "Inštalácia zapisuje do /tmp/nvidia_install.log. Pri chybe overte sťahovanie, zostavenie DKMS a služby. Priložte protokol k hláseniu na GitHube."
+ },
+ "manualSteps": {
+ "heading": "Hľadáte ručné kroky?",
+ "body": "Pozrite wget a ./NVIDIA-Linux-...run. Vysvetľuje komponenty, nie je však presným prepisom inštalátora. Udržiavaný postup ProxMenuxu poskytuje filtrovanie GPU, kontrolu zostavenia, aktualizácie LXC a overenie VFIO."
+ },
+ "related": {
+ "heading": "Súvisiace",
+ "items": [
+ {
+ "label": "Pridať GPU do VM (passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — priame priradenie NVIDIA do VM cez VFIO."
+ },
+ {
+ "label": "Pridať GPU do LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — zdieľanie NVIDIA s jedným alebo viacerými kontajnermi."
+ },
+ {
+ "label": "Zmeniť režim GPU (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — prepínanie medzi priamym prístupom VM a zdieľaním LXC."
+ },
+ {
+ "label": "ProxMenux Monitor — karta Hardvér",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — okno GPU, ktoré otvorí inštalátor a zobrazuje sledovanie v reálnom čase."
+ },
+ {
+ "label": "Príkazy priameho priradenia GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — prehľad príkazov lspci / dmesg / IOMMU / nvidia-smi."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sk/docs/hardware/switch-gpu-mode.json b/web/messages/sk/docs/hardware/switch-gpu-mode.json
new file mode 100644
index 00000000..cdd4f760
--- /dev/null
+++ b/web/messages/sk/docs/hardware/switch-gpu-mode.json
@@ -0,0 +1,172 @@
+{
+ "meta": {
+ "title": "Zmeniť režim GPU (VM ↔ LXC) | Dokumentácia ProxMenux",
+ "description": "Prepnite GPU medzi VFIO pre VM a natívnym ovládačom pre LXC. ProxMenux zistí ovládač, ponúkne riešenie konfliktov hostí, odstráni súvisiace zvukové priradenia a pri zmene konfigurácie hostiteľa obnoví initramfs."
+ },
+ "header": {
+ "title": "Zmeniť režim GPU (VM ↔ LXC)",
+ "description": "Prepnite priradený GPU medzi priamym prístupom VM a zdieľaním LXC. ProxMenux spravuje ovládač, VFIO, moduly a initramfs a pýta sa na dotknutých hostí. Skontrolujte voľby a po reštarte overte výslednú konfiguráciu.",
+ "section": "Hardvér: grafické karty a Coral TPU"
+ },
+ "intro": {
+ "title": "Čo robí",
+ "body": "S vfio-pci je GPU vyhradený pre VM. S natívnym ovládačom (i915 / amdgpu / nvidia) ho môžu zdieľať hostiteľ a LXC. Zmeniť režim GPU spravuje vfio.conf, blokovanie modulov a odkazy hostí a upozorní na zostávajúce priradenia."
+ },
+ "graphics": {
+ "lxcTitle": "Pripravené pre LXC kontajnery",
+ "lxcDesc": "Aktívny natívny ovládač",
+ "vmTitle": "Pripravené pre VM passthrough",
+ "vmDesc": "Aktívny VFIO-PCI ovládač"
+ },
+ "when": {
+ "heading": "Kedy to mám použiť?",
+ "intro": "Použite, ak je GPU už priradený a chcete zmeniť jeho použitie:",
+ "headerSituation": "Situácia",
+ "headerUse": "Použiť túto stránku?",
+ "rows": [
+ {
+ "situation": "GPU je voľný a nebol priradený: chcem ho použiť vo VM.",
+ "useRich": "Nie — použite vfio-pci, ale chcem ho používať v LXC.",
+ "useRich": "Áno – táto stránka."
+ },
+ {
+ "situation": "GPU je zdieľaný s LXC, chcem ho venovať VM.",
+ "useRich": "Áno – táto stránka."
+ },
+ {
+ "situation": "Chcem odstrániť všetky priradenia tohto GPU.",
+ "use": "Režim LXC vráti GPU ovládaču hostiteľa; postup pri konflikte pre VM môže odstrániť položky hostpci, položky zariadení LXC však treba odstrániť samostatne. GPU zostane pripojený k ovládaču."
+ }
+ ]
+ },
+ "prereqs": {
+ "title": "Skôr ako začnete",
+ "assigned": "Už priradený GPU do VM cez VFIO alebo do LXC. Pri prvom priradení použite Pridať GPU do VM / LXC.",
+ "iommu": "IOMMU musí byť aktívne na hostiteľovi pri prechode do režimu VM. Záleží na nastaveniach firmvéru aj na podpore jadra. Ak v bežiacom jadre chýba intel_iommu=on alebo amd_iommu=on, skript ho pridá s iommu=pt do /etc/kernel/cmdline (značka koreňa ZFS) alebo /etc/default/grub a potom spustí proxmox-boot-tool refresh alebo update-grub. Skontrolujte prípadné varovania a podľa výzvy reštartujte.",
+ "iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
+ "reboot": "Počítajte s reštartom. Trvalé zmeny ovládača a zavádzania môžu vyžadovať obnovu initramfs a reštart. Skript na to vyzve na konci.",
+ "knowList": "Zistite, ktoré VM a LXC používajú GPU. Skript vyhľadá odkazy a spýta sa na každého hosťa; známy zoznam uľahčí kontrolu."
+ },
+ "blocklist": {
+ "title": "Nie všetky GPU sú bezpečné prejsť na VM",
+ "body": "Skript podľa svojich pravidiel kompatibility blokuje režim VM pre ID zariadení 8086:5a84 a 8086:5a85. Ak vybraná GPU zodpovedá, zastaví prechod do režimu VM a vráti sa na výber GPU, alebo skončí, ak je to jediná GPU. Tento zoznam blokovaných nebráni prechodu do režimu LXC; ďalšie kontroly môžu naďalej platiť."
+ },
+ "running": {
+ "heading": "Spustenie skriptu",
+ "body": "V ProxMenuxe otvorte Hardvér: GPU a Coral-TPU → Zmeniť režim GPU (VM ↔ LXC).",
+ "imageAlt": "Voľba Zmeniť režim GPU (VM ↔ LXC) v ponuke hardvéru"
+ },
+ "howRuns": {
+ "heading": "Ako skript funguje",
+ "body": "Výber GPU a smer sa kontrolujú pred hlavným prepnutím. Samostatné čistenie starých záznamov VFIO môže žiadať potvrdenie skôr; hostia majú vlastné dialógy konfliktov. Čítajte každé potvrdenie: jedno záverečné potvrdenie nepokrýva všetky zmeny."
+ },
+ "walkthrough": {
+ "heading": "Postup krok za krokom",
+ "detect": {
+ "title": "Zistenie GPU a aktuálneho ovládača",
+ "body": "Prehľadá radiče VGA, 3D a Display hostiteľa a overí /sys/bus/pci/devices/*/driver. Zobrazí názov, adresu PCI a aktuálny ovládač každého GPU na určenie režimu.",
+ "imageAlt": "Zoznam GPU s aktuálnym ovládačom (vfio-pci / nvidia / amdgpu / i915) a adresou PCI"
+ },
+ "pickGpu": {
+ "title": "Výber GPU na prepnutie",
+ "body": "Jediný GPU sa vyberie automaticky. Pri viacerých možno označiť viac GPU, ale musia byť v rovnakom režime. Pri zmiešaných režimoch treba výber zúžiť.",
+ "tipTitle": "Prepínanie viacerých GPU naraz",
+ "tipBody": "Príklad: prepnúť tri NVIDIA do režimu VM a potom vrátiť iGPU do LXC. Dve spustenia, každé so spoločným cieľom, namiesto samostatného prepínania kariet."
+ },
+ "direction": {
+ "title": "Preskúmanie navrhovaného smerovania",
+ "intro": "Na základe aktuálneho režimu, skript navrhuje opak ako cieľ:",
+ "items": [
+ "VM → LXC: odstráni väzbu na vfio-pci, aby GPU mohol používať natívny ovládač (nvidia, amdgpu, i915). Pre NVIDIA odstráni príslušné položky BDF z /etc/udev/rules.d/10-proxmenux-vfio-bind.rules pre ďalší štart.",
+ "LXC → VM: pripraví priradenie k vfio-pci. AMD / Intel blokujú natívny ovládač a používajú options vfio-pci ids=…. Pre NVIDIA sa nvidia globálne blokuje iba vtedy, keď je každá NVIDIA GPU hostiteľa vo VFIO; inak pravidlá podľa BDF nastavia driver_override=vfio-pci zariadeniam dotknutých skupín IOMMU a NVIDIA GPU mimo týchto skupín si ponechajú nvidia. Pred prepnutím skontrolujte každého člena skupiny."
+ ],
+ "outro": "Potvrdiť smer alebo zrušiť."
+ },
+ "conflict": {
+ "title": "Postup pre každú dotknutú VM alebo LXC",
+ "body": "Kontroluje /etc/pve/lxc/*.conf podľa rodiny ovládača GPU a /etc/pve/qemu-server/*.conf podľa PCI priradení. Detekcia LXC nie je presnou zhodou BDF každej karty. Skontrolujte zistených hostí a vyberte postup pre každého:",
+ "headerPolicy": "Politika",
+ "headerEffect": "Účinok",
+ "headerWhen": "Kedy vybrať",
+ "keepPolicy": "Ponechať konfiguráciu a vypnúť automatický štart",
+ "keepEffect": "pct set CTID -onboot 0 alebo qm set VMID -onboot 0. Položky GPU zostanú zachované.",
+ "keepWhen": "Ak chcete hosťa znova používať po návrate GPU do pôvodného režimu. Opatrná predvolená voľba.",
+ "removePolicy": "Odstrániť GPU z konfigurácie",
+ "removeEffect": "Odstráni zistené položky hostpci / dev a podporované staršie odkazy.",
+ "removeWhen": "Ak má hosť fungovať bez GPU. Najprv overte aplikáciu: náhrada cez CPU závisí od nej a odstránenie zariadenia ju automaticky nenastaví.",
+ "imageAlt": "Dialóg výberu postupu pre dotknuté VM alebo LXC"
+ },
+ "audio": {
+ "title": "Odstránenie súvisiacich zvukových priradení pri opustení VM",
+ "body1": "Mnohé samostatné GPU NVIDIA / AMD poskytujú HDMI zvuk cez funkciu .1 rovnakého slotu; priradené môžu byť aj ďalšie zvukové zariadenia. Po odstránení GPU môžu zostať neplatné zvukové položky hostpci. Overte, ktoré priradenia ponechať.",
+ "body2": "Identifikuje zvukové adresy BDF a zobrazí zoznam priradení na odstránenie. Ich ID vendor:device odstráni aj z /etc/modprobe.d/vfio.conf, iba ak ich nepoužíva iná VM."
+ },
+ "apply": {
+ "title": "Použitie zmien hostiteľa a hostí",
+ "body": "Po potvrdení zapíše zmeny hostiteľa: vfio.conf, blokovanie ovládačov, moduly a pre NVIDIA pravidlo BDF /etc/udev/rules.d/10-proxmenux-vfio-bind.rules so stavom v /etc/proxmenux/vfio-bind.bdfs. Použije aj zvolený postup pre každého hosťa. Pri zmene konfigurácie hostiteľa spustí update-initramfs -u -k all a potom proxmox-boot-tool refresh; inak oba kroky preskočí."
+ },
+ "reboot": {
+ "title": "Reštartovať",
+ "body": "Reštartujte hostiteľa na použitie novej trvalej väzby. Reštart možno odložiť, ale pred spustením cieľového hosťa overte aktívny ovládač: dovtedy môže byť aktívny pôvodný.",
+ "imageAlt": "Súhrnný dialóg so zmenami a následnou výzvou na reštart"
+ }
+ },
+ "manual": {
+ "heading": "Ručná kontrola",
+ "intro": "Pred VM → LXC overte ovládač a pravidlá BDF. Príklad NVIDIA používa 10de:2204; prispôsobte ho karte. Príkazy čítajú stav; skript spravuje aj hostí a členov skupiny IOMMU.",
+ "lxcToVm": "Pred LXC → VM overte adresu PCI a skupinu IOMMU. Nahraďte vzorovú adresu a pred priradením skontrolujte všetkých členov skupiny.",
+ "oneVmTitle": "Fyzický GPU priradený cez VFIO môže naraz používať iba jedna VM",
+ "oneVmBody": "Dve VM môžu mať položky hostpci pre rovnakú adresu PCI, ale GPU môže súčasne používať iba jedna; spustenie druhej zlyhá. Výber postupu pri konflikte pomáha tomu predísť."
+ },
+ "verification": {
+ "heading": "Overenie po reštarte"
+ },
+ "troubleshoot": {
+ "heading": "Riešenie problémov",
+ "stillVfioTitle": "GPU stále ukazuje vfio-pci po prepnutí do režimu LXC",
+ "stillVfioBody": "Načítaný modul VFIO neurčuje, ktorý ovládač používa tento GPU. Overte väzbu karty, dokončenie update-initramfs a reštart. lsmod | grep vfio iba vypíše moduly. Pre AMD / Intel pozrite vfio.conf; pre NVIDIA /etc/proxmenux/vfio-bind.bdfs a /etc/udev/rules.d/10-proxmenux-vfio-bind.rules. Opravte staré pravidlá pred update-initramfs -u -k all a reštartom.",
+ "vmFailTitle": "VM sa nespustí po prepnutí GPU do LXC",
+ "vmFailBody": "Overte neplatné odkazy hostpci. Voľba Odstrániť GPU z konfigurácie ich môže odstrániť počas plánovaného prepnutia. Pred opakovaním skriptu overte smer, aby ste režim neobrátili omylom. Priradenie môžete odstrániť aj v Proxmoxe pri zastavenej VM.",
+ "smiFailTitle": "nvidia-smi hlási „Driver/library version mismatch“ po návrate do LXC",
+ "smiFailBody": "Porovnajte načítaný modul NVIDIA s nainštalovanými knižnicami aj v LXC. Najprv zjednoťte verzie: reštart načíta nainštalovaný modul, neopraví však nekompatibilné balíky. Obnovenie cez modprobe -r nvidia a modprobe nvidia vyžaduje zastavených GPU klientov a môže zlyhať pri používaných závislých moduloch.",
+ "logTitle": "Protokol vykonávania",
+ "logBody": "Každé spustenie zapisuje do /tmp/proxmenux_gpu_switch_mode.log na hostiteľovi. Priložte protokol k žiadosti o pomoc na GitHube."
+ },
+ "related": {
+ "heading": "Súvisiace",
+ "items": [
+ {
+ "label": "Pridať GPU do VM (passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — prvotné nastavenie režimu VM."
+ },
+ {
+ "label": "Pridať GPU do LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — prvotné nastavenie režimu LXC."
+ },
+ {
+ "label": "Nainštalovať ovládače NVIDIA (host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — Vyžadované pre LXC režim na NVIDIA GPU."
+ },
+ {
+ "label": "ProxMenux Monitor — karta Hardvér",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — časť Grafické karty s aktuálnym režimom a ovládaním prepnutia."
+ },
+ {
+ "label": "Príkazy priameho priradenia GPU",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — stručný prehľad príkazov."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sv/docs/hardware/coral-tpu-lxc.json b/web/messages/sv/docs/hardware/coral-tpu-lxc.json
new file mode 100644
index 00000000..af76627f
--- /dev/null
+++ b/web/messages/sv/docs/hardware/coral-tpu-lxc.json
@@ -0,0 +1,120 @@
+{
+ "meta": {
+ "title": "Lägg till Coral TPU i LXC | ProxMenux-dokumentation",
+ "description": "Dela Google Coral TPU via USB eller M.2 / PCIe med en Proxmox-LXC. ProxMenux konfigurerar enheter, behörigheter och monteringar, startar containern och installerar Edge TPU-körmiljön på kompatibla distributioner."
+ },
+ "header": {
+ "title": "Lägg till Coral TPU i LXC",
+ "description": "Dela Coral USB Accelerator eller M.2 / Mini-PCIe med en LXC. ProxMenux hanterar containerkonfiguration och Edge TPU-körmiljö. Alternativet gäller bara TPU; för Quick Sync, VA-API eller NVENC kör du även Lägg till GPU i LXC.",
+ "section": "Hårdvara: GPU:er och Coral-TPU"
+ },
+ "intro": {
+ "title": "Vad det gör",
+ "body": "Skriver konfigurationen i /etc/pve/lxc/<ctid>.conf för USB Accelerator, M.2 / PCIe Coral eller båda. Startar containern och installerar Googles libedgetpu-körmiljö. GPU konfigureras separat via apt-get. Containrar med andra distributioner kan välja läge med enbart enhetsåtkomst, som hoppar över APT-installationen av libedgetpu. Passar om appen redan innehåller körmiljön, som Frigates Docker-avbildning.",
+ "downtime": "Planera ett kort driftstopp för containern. Skriptet stoppar den för konfiguration och startar den för installation av körmiljön. Dessa ändringar kräver ingen omstart av värden."
+ },
+ "hostPrep": {
+ "title": "Förbered värden först",
+ "body": "M.2 / PCIe behöver gasket/apex på värden och en fungerande enhetsnod. USB behöver ansluten enhet och behörigheter; appen behöver inte köras på värden. libedgetpu måste finnas där appen körs. Ordning: förbered värden → LXC-enhetsåtkomst → konfigurera appen."
+ },
+ "running": {
+ "heading": "Kör skriptet",
+ "body": "Öppna Hårdvara: GPU och Coral-TPU → Lägg till Coral TPU i LXC i ProxMenux.",
+ "imageAlt": "Alternativet Lägg till Coral TPU i LXC i hårdvarumenyn"
+ },
+ "howRuns": {
+ "heading": "Så fungerar skriptet",
+ "body": "Välj container. Skriptet konfigurerar USB-åtkomst även utan ansluten USB-Coral och lägger till M.2 / PCIe när den hårdvaran upptäcks."
+ },
+ "walkthrough": {
+ "heading": "Steg för steg",
+ "pick": {
+ "title": "Välj LXC-container",
+ "body": "Väljaren visar lämpliga containrar från pct list; OCI-containrar döljs och hanteras via Apps i OCI-hanteraren. Välj en körande eller stoppad container. Skriptet stoppar den vid behov, konfigurerar den och startar den för installation av körmiljön."
+ },
+ "gpuHint": {
+ "title": "Valfritt förslag om GPU-åtkomst",
+ "body": "Om en GPU hittas men inte är konfigurerad för den här containern rekommenderar en dialog /dev/coral och bind-monterar hela /dev/bus/usb i containern. Konfigurationen skrivs även utan ansluten USB-Coral och exponerar fler enheter än bara Coral.",
+ "whyTitle": "Varför montera /dev/bus/usb istället för /dev/coral?",
+ "whyBody": "USB-sökvägen, exempelvis /dev/bus/usb/001/005, ändras vid återanslutning. Äldre versioner monterade länken /dev/coral och kunde behålla en inaktuell sökväg. Hela USB-trädet gör den aktuella enhetsnoden synlig. Appen kan fortfarande behöva öppna enheten igen."
+ },
+ "pcie": {
+ "title": "Konfigurera M.2 / PCIe-åtkomst i LXC",
+ "body1": "Om M.2 / PCIe-Coral hittas och /dev/apex_0 finns används Proxmox API dev för cgroup2-behörigheter i privilegierade och oprivilegierade LXC:",
+ "body2": "Om /dev/apex_0 saknas efter create=file och, endast när apex-majornumret finns listat i /proc/devices, en klassisk cgroup2-regel. Ingen av dem skapar en fungerande enhet:",
+ "rebootTitle": "Starta om värden först om du nyss installerat Coral-drivrutiner",
+ "rebootBody": "Reservmonteringen laddar inte värdens apex-drivrutin. Ladda den eller starta om efter installationen och kontrollera enheten. Kör sedan skriptet igen för den moderna enhetsposten och starta om containern."
+ },
+ "drivers": {
+ "title": "Starta LXC och installera Coral-körmiljön",
+ "body": "Startar containern och väntar upp till 15 sekunder på statusen running, och kör sedan installationen inuti med pct exec. Installeraren:",
+ "items": [
+ "Kör apt-get update.",
+ "Installerar förutsättningarna för Coral-paketförrådet: gnupg, curl och ca-certificates.",
+ "Importerar Googles Coral-GPG-nyckel till /etc/apt/keyrings/coral-edgetpu.gpg, samma sökväg som värdinstallationen, och lägger till APT-förrådet coral-edgetpu-stable med signed-by=.",
+ "Installerar libedgetpu1-std som standard. Om M.2-Coral hittas erbjuds libedgetpu1-std eller libedgetpu1-max. Paketvalet konfigurerar inte i sig appens detekteringsinställningar."
+ ],
+ "noIgpuTitle": "Varför installeras inga iGPU-drivrutiner här?",
+ "noIgpuBody": "Tidigare installerades även va-driver-all, intel-opencl-icd och andra Intel-paket för Quick Sync tillsammans med Coral. Det gav förvirrande fel när bara Coral önskades. iGPU konfigureras nu via apt-get på Debian/Ubuntu. För Alpine, Arch, RHEL eller SUSE, identifierade via /etc/os-release, erbjuds fortsätt med enbart enhetsåtkomst eller avbryt. Det första konfigurerar /etc/pve/lxc/<ctid>.conf utan att installera libedgetpu. Läget passar när appen redan innehåller körmiljön, som Frigate Docker. Installera annars libedgetpu enligt lsmod | grep apex. Om den saknas, prova modprobe apex eller starta om efter installationen av drivrutinen. När /dev/apex_0 finns på värden, kontrollera LXC-enhetsposten (kör skriptet igen om bara reservposterna skrevs) och starta om containern med pct stop <ctid> && pct start <ctid>.",
+ "replugTitle": "USB-Coral försvinner efter återanslutning till en annan port",
+ "replugBody": "Kontrollera att LXC monterar /dev/bus/usb i stället för länken /dev/coral. Konfigurationen ska innehålla lxc.mount.entry: /dev/bus/usb dev/bus/usb ... utan direkt beroende av /dev/coral. Kör skriptet igen om konfigurationen är gammal.",
+ "alpineTitle": "Alpine / Arch / RHEL / SUSE: körmiljö inte installerad",
+ "alpineBody": "Läget med enbart enhetsåtkomst konfigurerar enheten utan att installera libedgetpu. Använd ett kompatibelt communitypaket eller bygg från källkod; kontrollera tillgängligheten före kommandon som apk add i Alpine. Frigate kan innehålla körmiljön. Med Docker i LXC måste M.2 även vidarebefordras med --device /dev/apex_0:/dev/apex_0, eller USB monteras i Docker: enbart LXC-monteringen räcker inte.",
+ "frigateTitle": "Frigate visar ”Coral EdgeTPU detected but not available”",
+ "frigateBody": "Kontrollera körmiljö, enhetssynlighet och läs-/skrivåtkomst för appens faktiska process. För USB, kontrollera behörigheter och eventuellt plugdev-medlemskap. För M.2, granska /dev/apex_0 med ls -l /dev/apex_0. Ett namn som apex i /etc/group räcker inte: numeriska GID och LXC-mappning måste stämma. Kontrollera även om en annan process använder TPU:n; byt inte först till privilegierat läge.",
+ "logsTitle": "Kontrollera både värd- och containerloggar",
+ "logsBody": "På värden, granska kärnmeddelanden med journalctl -k | grep -i -e apex -e gasket -e usb. I LXC, läs apploggarna; med nästlad Docker använd docker logs <container>. Behörigheter, saknad körmiljö, USB-anslutning eller en annan process som använder TPU:n kan orsaka fel."
+ },
+ "related": {
+ "heading": "Relaterat",
+ "items": [
+ {
+ "label": "Installera Coral TPU på värden",
+ "href": "/docs/hardware/install-coral-tpu-host",
+ "tail": " — förutsättning för att använda M.2 / PCIe-Coral i en CT."
+ },
+ {
+ "label": "Lägg till GPU i LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — GPU-åtkomst, som ofta kombineras med Coral i Frigate."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sv/docs/hardware/gpu-vm-passthrough.json b/web/messages/sv/docs/hardware/gpu-vm-passthrough.json
new file mode 100644
index 00000000..ffafba3a
--- /dev/null
+++ b/web/messages/sv/docs/hardware/gpu-vm-passthrough.json
@@ -0,0 +1,178 @@
+{
+ "meta": {
+ "title": "Lägg till GPU i VM | ProxMenux-dokumentation",
+ "description": "Tilldela en fysisk GPU till en Proxmox-VM. ProxMenux kontrollerar IOMMU, konfigurerar VFIO och VM-enheter samt upptäcker konflikter med andra VM:er eller LXC."
+ },
+ "header": {
+ "title": "Lägg till GPU till VM (Passthrough)",
+ "description": "Identifierar Intel-, AMD- eller NVIDIA-GPU:er för direkt åtkomst från en VM. Kontrollerar IOMMU och tillhörande enheter, konfigurerar VFIO och VM samt tillämpar kompatibilitetsregler. Kontrollera alla berörda enheter.",
+ "section": "Hårdvara: GPU:er och Coral-TPU"
+ },
+ "intro": {
+ "title": "Vad det gör",
+ "body": "Automatiserar värd- och hostpci-stegen i lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "iommu": "IOMMU-stöd krävs i hårdvara och vid behov firmware (Intel VT-d eller AMD-Vi). Kontrollerar systemet och kan konfigurera Linux; ändrar inte BIOS/UEFI och bevisar inte att inaktiv IOMMU är avstängd där.",
+ "q35": "Guiden kräver q35 och avvisar i440fx. Maskintyp och BIOS/UEFI är separata inställningar. Byte av chipset på en befintlig VM kräver planering och sker inte automatiskt.",
+ "q35Check": "qm config VMID | grep machine",
+ "moreGpus": "Förbered en annan GPU eller alternativ åtkomst via SSH, IPMI eller seriellt. Reserverad primär GPU kan släcka lokal bild. För NVIDIA kan ett kort utanför berörd IOMMU-grupp stanna på värden.",
+ "nvidiaInstalled": "Efter vfio-pci i stället för nvidia. Modulen nvidia kan finnas kvar för andra kort utanför berörd IOMMU-grupp. Kontrollera med nvidia-smi."
+ },
+ "pickOne": {
+ "title": "Exklusiv VM-tilldelning eller LXC-delning",
+ "body": "En GPU bunden till vfio-pci för VM genomgång kan inte samtidigt användas av värden eller en LXC. Om du har två GPU kan du ägna en till varje väg. Om du bara har en, välj:",
+ "vmItem": "VM: direkt och exklusiv åtkomst för den VM:n.",
+ "lxcItem": "LXC (intel_iommu=on eller amd_iommu=on och IOMMU-grupper finns. Om parametern redan är sparad för nästa start fortsätter den i läget väntande omstart; annars kan ett separat bekräftat steg lägga till den med iommu=pt. Dess heuristik för startfilen använder /etc/kernel/cmdline när en ZFS-rotmarkör som root=ZFS= finns där; annars används /etc/default/grub. Heuristiken bevisar inte vilken starthanterare som faktiskt används. Nykonfigurerad IOMMU börjar gälla efter omstart; kontrollera de faktiska grupperna efteråt.",
+ "tipTitle": "Har du redan gjort efterinstallationen?",
+ "tipBody": "Om /sys/bus/pci/devices/<pci>/reset_method. APU eller separat kort utan FLR blockeras av guidens policy; okänd undertyp utan FLR kräver bekräftelse. Det bevisar inte att funktionen är omöjlig i alla miljöer.",
+ "D3cold-läge. Guiden blockerar AMD-kort som rapporterar D3cold på grund av risk för aktiveringsfel. Kontrollera strömhantering och firmware.",
+ "Analys av IOMMU-grupp. Läser /sys/kernel/iommu_groups/ och tar med alla medlemmar utom bryggor i VM-planen, möjligen nätverks- eller lagringskontroller. Om gruppen innehåller enheter från en annan PCI-plats listar skriptet dem före sammanfattningen; kontrollera att värden inte behöver någon av dem. Om IOMMU väntar på omstart är de faktiska grupperna inte tillgängliga och planen innehåller först bara den valda GPU-funktionen; kontrollera isoleringen efter omstarten."
+ ],
+ "audioIntro": "Tillhörande ljud. Två fall beroende på var kontrollern finns:",
+ "audioDgpu": "Separat GPU: HDMI-ljud finns ofta på funktion .1 i samma PCI-plats och tas med om det hittas. Om värden använde ljudet förlorar den åtkomsten när det reserveras för VM:n.",
+ "audioIgpu": "Utan ljudfunktion .1: kan ljudet finnas på en annan enhet som 00:1f.3. Listar kontroller och drivrutiner, exempelvis snd_hda_intel. Som standard väljs ingen; välj bara de som behövs."
+ },
+ "pickVm": {
+ "title": "Välj mål-VM",
+ "body": "Välj VM i listan. Kräver q35 och återanvänder befintliga GPU-poster där det går. BIOS/UEFI är en separat inställning, inte en maskintyp. Chipset och gästsystemets startläge ändras inte automatiskt.",
+ "imageAlt": "Val av VM efter namn, ID och status"
+ },
+ "switchMode": {
+ "title": "Hantera befintliga tilldelningar",
+ "intro": "Manuset skannar varje VM-konfig och varje LXC-konfig på värden som letar efter GPU du valde. Tre möjliga resultat:",
+ "items": [
+ "GPU tillgänglig. Fortsätter utan att ta bort tilldelningar.",
+ "Tilldelad till en annan VM. Stoppa först källan. Välj behåll poster och inaktivera automatisk start eller ta bort poster och behåll automatisk start. Med aktiv vfio-pci utan nödvändiga värdändringar kan VM→VM ske utan omstart av värden.",
+ "GPU som används av LXC. För vanliga containrar, välj behåll GPU-konfigurationen och inaktivera automatisk start eller ta bort GPU-enhetskonfigurationen och behåll automatisk start. Borttagningen raderar devN-posterna och, för AMD/Intel, även äldre /dev/dri-regler för lxc.mount.entry och lxc.cgroup2.devices.allow. OCI-containrar behåller sin konfiguration och stoppas med automatisk start inaktiverad; ta bort deras GPU via OCI manager Apps. Konfliktidentifieringen sker per GPU-enhetsfamilj och kan omfatta andra kort i samma familj."
+ ],
+ "imageAlt": "Dialog erbjudande att ta bort GPU från en LXC innan tilldela den till VM",
+ "smartTitle": "Granska tillhörande ljud när GPU:n tas bort",
+ "smartBody": "Därefter kan en lista med möjligen oanvända ljudenheter i käll-VM:n visas. Avmarkera sådant som fortfarande behövs. Exempelvis kan 02:00.1 behållas medan 00:1f.3 föreslås tas bort. Valet styr borttagningen; alla ljud-/bildkopplingar är inte garanterade."
+ },
+ "audioPick": {
+ "title": "Välj nödvändiga kontroller om .1-ljud saknas",
+ "body": "Det händer bara för Intel iGPU och liknande uppsättningar av split-audio. En checklista visar varje PCI ljudkontroll på värden (exklusive någon redan i GPU IOMMU grupp), märkt med sin nuvarande drivrutin. Välj de du vill - eller ingen, om VM inte behöver ljud från värd hårdvaran.",
+ "imageAlt": "Checklista dialog med varje värd PCI ljudkontroller (BDF + förare) när GPU har ingen .1 syskon ljud",
+ "warnTitle": "Välj inte ljud som värden behöver",
+ "warnBody": "Ljudtilldelning kan ta bort värdens åtkomst; kontrollern kan inte samtidigt tillhöra en annan aktiv VM. Lämna onödigt ljud omarkerat och kontrollera tilldelningarna. Konsolens pip kommer inte nödvändigtvis från PCI-ljud."
+ },
+ "summary": {
+ "title": "Granska bekräftelse sammanfattning",
+ "body": "Granska den slutliga planen för värd och VM och avbryt om den är fel. Den visar IOMMU-gruppen och antalet enheter i den; medlemmar från en annan PCI-plats listas i föregående steg. Att avbryta stoppar huvudändringarna men återställer inte en tidigare separat bekräftad ändring av IOMMU-startkonfigurationen.",
+ "imageAlt": "Översikt över planerade ändringar på värd och VM"
+ },
+ "hostApply": {
+ "title": "Värdförändringar tillämpas",
+ "intro": "Tillämpningsfasen ändrar värd och VM. Tillhörande ljudrensning kan fortfarande kräva ett val. Möjliga ändringar:",
+ "items": [
+ "/etc/modules - tillägg vfio, vfio_iommu_type1, vfio_pci (plus) vfio_virqfd på Kernels < 6.2).",
+ "/etc/modprobe.d/vfio.conf — AMD/Intel: options vfio-pci ids=<vendor:device,...> disable_vga=1. NVIDIA: softdep nvidia pre: vfio-pci (_drm/_modeset/_uvm); den faktiska bindningen sker per BDF. AMD lägger till inläsningsordningen softdep: vfio-pci → radeon/amdgpu.",
+ "Skriver /etc/modprobe.d/iommu_unsafe_interrupts.conf och kvm.conf med allow_unsafe_interrupts=1 och ignore_msrs=1. Detta är skriptets kompatibilitetsval, inga universella Windows/macOS-krav; osäkra avbrott försvagar avbrottsomappningens skydd.",
+ "/etc/modprobe.d/blacklist.conf: NVIDIA — nouveau/lbm-nouveau; AMD — radeon + amdgpu; Intel — i915. Dessa regler per tillverkare kan påverka andra kort med samma drivrutin. Modulen nvidia blockeras bara via /etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf när alla värdens NVIDIA-kort är registrerade för VFIO.",
+ "/etc/udev/rules.d/10-proxmenux-vfio-bind.rules + /etc/proxmenux/vfio-bind.bdfs — Endast NVIDIA. Sätter ATTR'{'driver_override'}'=\"vfio-pci\" vid PCI ADD för registrerade BDF:er, inklusive berörda IOMMU-gruppfunktioner. Utanför grupperna kan nvidia behållas. BDF-policy delar inte upp hårdvarans IOMMU-grupp.",
+ "Endast AMD. Försöker dumpa ROM från /sys/bus/pci/.../rom eller ACPI VFCT till /usr/share/kvm/vbios_<vendor>_<device>.bin. Vid framgång använder VM:en romfile=. En giltig dump garanterar inte att GPU-initialiseringen lyckas.",
+ "Endast NVIDIA. Stoppar och inaktiverar nvidia-persistenced, nvidia-powerd, nvidia-fabricmanager bara när alla NVIDIA-kort reserverats för VFIO. Vid blandad användning behålls tjänsterna och nvidia för vanliga värdkort.",
+ "update-initramfs -u -k all - körs endast om något av ovanstående faktiskt ändrats."
+ ]
+ },
+ "vmApply": {
+ "title": "VM konfig appliceras via qm set",
+ "body": "VM-konfig på /etc/pve/qemu-server/<vmid>.conf uppdateras via qm set (aldrig via direkt sed):",
+ "after1": "Lägger till x-vga=1 för AMD och NVIDIA, inte Intel. Det är skriptets policy, inget bevis för att alla Intel-iGPU:er saknar firmware eller att flaggan alltid orsakar låsningar.",
+ "after2": "Ytterligare hostpciN-linjer läggs till om GPUs IOMMU-grupp innehåller andra enheter du behöver för att passera tillsammans."
+ },
+ "reboot": {
+ "title": "Starta om när värdändringen kräver det",
+ "body": "Följ omstartsanvisningen vid ändringar av start eller drivrutiner och kontrollera aktiv GPU-bindning före VM-start. Sparad konfiguration bevisar inte att den är aktiv. VM→VM med rätt VFIO-läge kan slippa värdomstart.",
+ "imageAlt": "Sammanfattning skärmen visar vad som ändrades, följt av en omstart prompt"
+ }
+ },
+ "vendors": {
+ "heading": "Anmärkningar per tillverkare",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Behåller en äldre lösning för Code 43: hidden=1, ID NV43FIX i args och kvm=off. Inget universellt krav för moderna GeForce-drivrutiner: NVIDIA aktiverade Windows-VM-passthrough i R465. Felet kan ha andra orsaker; kontrollera GPU och drivrutin.",
+ "nvidiaMultiHeading": "Multi-GPU NVIDIA stöd",
+ "nvidiaMultiBody": "Blandad NVIDIA-användning per BDF. Registrerar vfio-pci-funktioner efter adress, inte bara ID vendor:device. Utanför berörda grupper kan nvidia behållas; kontrollera med nvidia-smi. Isolerar inte två kort i samma grupp.",
+ "amdHeading": "AMD",
+ "amdBody": "Vissa AMD-GPU:er misslyckas med återställning efter VM-stopp. Guiden kontrollerar rapporterade egenskaper, inte alla verkliga cykler. x-vga=1. qm config VMID | grep -E \"cpu|args\" med rätt VMID samt hidden=1 och hv_vendor_id=NV43FIX. Kontrollera även gästdrivrutin, firmware och tilldelning. En ny körning kan avslutas direkt vid befintlig tilldelning.",
+ "amdResetTitle": "AMD GPU fungerar en gång, misslyckas på VM omstart",
+ "amdResetBody": "Ett återställningsfel är en möjlig orsak. Omstart eller av-/påslagning kan hjälpa tillfälligt. Kontrollera stöd och tidig inläsning av vendor-reset; enbart softdep amdgpu pre: vendor-reset garanterar inte inläsning före VFIO. Även RadeonResetBugFix kräver kompatibel GPU.",
+ "stuckBootTitle": "VM fastnade start / GPU inte upptäckt",
+ "stuckBootBody": "Kontrollera den verkliga adressen med lspci -nnk -s PCI_ADDRESS; förvänta Kernel driver in use: vfio-pci. Ersätt PCI_ADDRESS. Om vanlig drivrutin är aktiv, granska bindningspolicyn, inte bara /etc/modprobe.d/blacklist.conf; NVIDIA använder BDF-status. Läs dmesg | grep vfio. Efter rättning, kör update-initramfs -u -k all och följ omstartsplanen.",
+ "darkTitle": "Värd konsol går mörkt efter omstart och jag kan inte SSH",
+ "darkBody": "Svart bild bevisar inte att värden är avstängd. Om även SSH misslyckas, kontrollera nätverk och kontroller i IOMMU-gruppen. Återfå åtkomst via IPMI, seriell konsol eller räddningsmiljö; granska /etc/pve/qemu-server/<vmid>.conf och återställ bara berörda tilldelningar och regler. Radera inte annan konfiguration.",
+ "logTitle": "Kolla installationsloggen",
+ "logBody": "Varje körning skriver /tmp/add_gpu_vm.log. Bifoga loggen när du söker hjälp."
+ },
+ "revert": {
+ "heading": "Återställ ändringar manuellt",
+ "intro": "Stoppa VM:n och ta bara bort berörda PCI-tilldelningar under Hårdvara eller med det uttryckliga indexet nedan. Det lämnar inte tillbaka GPU:n till värdens drivrutin. Använd Byt GPU-läge för det steget och kontrollera berörda gäster före bekräftelse."
+ },
+ "related": {
+ "heading": "Relaterat",
+ "items": [
+ {
+ "label": "Installera NVIDIA Drivers (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — förbered drivrutinen för kort som stannar på värden; en VFIO-bunden GPU kan inte använda den samtidigt."
+ },
+ {
+ "label": "Lägg till GPU i LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " - alternativ modell: dela GPU med flera containrar istället för att dedikera den till en VM."
+ },
+ {
+ "label": "Byt GPU-läge (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — växla samma GPU mellan delning och exklusiv tilldelning."
+ },
+ {
+ "label": "GPU Passthrough kommandon",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " - lspci, IOMMU-verifiering, qm set hostpci referens."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sv/docs/hardware/igpu-acceleration-lxc.json b/web/messages/sv/docs/hardware/igpu-acceleration-lxc.json
new file mode 100644
index 00000000..5ceb8dfd
--- /dev/null
+++ b/web/messages/sv/docs/hardware/igpu-acceleration-lxc.json
@@ -0,0 +1,185 @@
+{
+ "meta": {
+ "title": "Lägg till GPU i LXC | ProxMenux-dokumentation",
+ "description": "Dela Intel-, AMD- eller NVIDIA-GPU med LXC. ProxMenux konfigurerar enheter, grupper och bibliotek efter distribution; appen måste stödja och vara inställd för acceleration."
+ },
+ "header": {
+ "title": "Lägg till GPU i LXC",
+ "description": "Delar GPU-åtkomst med LXC via värdens enheter. Drivrutinen finns kvar på värden; apparna behöver kompatibla bibliotek och egna inställningar.",
+ "section": "Hårdvara: GPU:er och Coral-TPU"
+ },
+ "intro": {
+ "title": "Vad det gör",
+ "body": "Lägger till dev<N>-poster i /etc/pve/lxc/<ctid>.conf för tillämpliga /dev/dri/*-, /dev/kfd- eller /dev/nvidia*-noder. Startar containern, installerar userspace-paket för dess distribution och anpassar, för Intel/AMD, grupperna video och render. Appacceleration kräver fortfarande kompatibel hårdvara, bibliotek och appinställningar."
+ },
+ "compare": {
+ "heading": "LXC-delning jämfört med VM-passthrough",
+ "intro": "LXC delar kerneln och kan dela GPU:n mellan värd och containrar. Med lspci.",
+ "gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
+ "vfio": "GPU:n får inte vara bunden till vfio-pci. Den behöver värdens vanliga drivrutin. Vid VM-tilldelning erbjuder skriptet dev<N>-poster till LXC-konfigen och på oprivilegierade behållare anpassar video och render GID mellan värd och behållare så att GPU-enhetsnoderna nås inifrån utan att du behöver handredigera lxc.idmap."
+ },
+ "running": {
+ "heading": "Kör installationen",
+ "body": "Öppna ProxMenux och välj Hårdvara: GPU:er och Coral-TPU → Lägg till GPU i LXC.",
+ "imageAlt": "Menyval för att lägga till GPU i LXC"
+ },
+ "howRuns": {
+ "heading": "Så fungerar skriptet",
+ "body": "Välj container och GPU-familjer och gå igenom kontrollerna. Därefter stoppas och ändras containern utan ytterligare slutbekräftelse. Valfri VFIO-rensning bekräftas separat och kan ändra värden tidigare."
+ },
+ "walkthrough": {
+ "heading": "Steg för steg",
+ "detect": {
+ "title": "Identifiera värdens GPU:er",
+ "body": "Söker GPU-kontroller med lspci. För NVIDIA kontrolleras modulen nvidia och nvidia-smi; den upptäckta versionen styr containerns .run-installation.",
+ "tipTitle": "NVIDIA är inte redo?",
+ "tipBody": "Om modulen saknas eller NVIDIA inte fungerar på värden, använd först /dev/dri/* eller /dev/nvidia*. /etc/pve/lxc/<ctid>.conf. Numrerade dev<N>-poster innehåller värdens GID för video eller render. Befintliga lxc.mount.entry-bindrader för /dev/dri ersätts av dev:-poster; kontrollera slutlig konfiguration och rättigheter.",
+ "body2": "Exempel efter Intel + NVIDIA på samma container:"
+ },
+ "installDrivers": {
+ "title": "Starta containern och installera drivrutiner inuti",
+ "body": "Startar containern och väntar högst cirka 30 sekunder på att pct exec svarar. Läser distributionen från /etc/os-release och installerar lämpliga paket.",
+ "headerDistro": "Distribution",
+ "headerInt": "Intel / AMD",
+ "headerNvidia": "NVIDIA",
+ "rows": [
+ {
+ "distro": "Alpine",
+ "intel": "apk add mesa-va-gallium intel-media-driver libva-utils",
+ "nvidia": "apk add nvidia-utils"
+ },
+ {
+ "distro": "Arch / Manjaro",
+ "intel": "pacman -Sy intel-media-driver mesa libva-utils",
+ "nvidia": "pacman -Sy nvidia-utils"
+ }
+ ],
+ "debianDistro": "Debian / Ubuntu / andra",
+ "debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo",
+ "debianNvidia": "Packar upp .run på värden → pct push → installerar med --no-kernel-modules --no-dkms.",
+ "whyTitle": "Varför NVIDIA-installationen med .run används på Debian",
+ "whyBody": "Paketen kan avvika från värdens version. Biblioteken måste passa värdens inlästa modul för NVML och nvidia-smi. Debian/glibc använder cachad .run för värdversionen, packar upp och arkiverar på värden, överför med pct push och installerar med --no-kernel-modules --no-dkms. Alpine och Arch använder förrådspaket; kontrollera versionerna."
+ },
+ "alignGids": {
+ "title": "Anpassa GID:n och återställ tillståndet",
+ "body1": "För Intel/AMD läses värdens GID:n för video och render, med 44/104 endast som reservvärden, och sedan ändras /etc/group i containern så att de matchar; körningar med enbart NVIDIA hoppar över steget. Poster som video:44 och render:104 är exempel, inte universella ID:n. Kontrollera appens gruppmedlemskap och faktiska enhetsrättigheter.",
+ "body2": "Vid normal avslutning stoppas en från början stoppad container igen; en som kördes fortsätter köra. Vid start- eller installationsfel, kontrollera slutläget och loggen."
+ }
+ },
+ "vendors": {
+ "heading": "Anmärkningar per tillverkare",
+ "intelHeading": "Intel iGPU",
+ "intelBody": "Intels mediaacceleration, inklusive Quick Sync, beror på GPU-generation, kodekar och appinställningar. Skriptet delar de av /dev/dri/card0, card1, renderD128 och renderD129 som finns; andra nodnummer läggs inte till. Värden måste redan tillhandahålla dem via sin inbyggda drivrutin, exempelvis i915.",
+ "amdHeading": "AMD",
+ "amdBody": "AMD använder DRI för Mesa/VA-API. Om värden har /dev/kfd delas även den. ROCm/OpenCL kräver kompatibel hårdvara och bibliotek; enhetsdelning installerar inte hela ROCm-miljön.",
+ "nvidiaHeading": "NVIDIA",
+ "nvidiaBody": "Delar tillgängliga /dev/nvidia*-enheter. Matchande drivrutinsversioner krävs för nvidia-smi. Debian/glibc använder värdversionens .run, Alpine/Arch förrådspaket. Under 2048 MiB inställt RAM erbjuds en tillfällig höjning med återställning; dessutom krävs 1500 MiB ledigt diskutrymme.",
+ "updateTitle": "Efter NVIDIA-uppdatering på värden, kontrollera LXC-biblioteken",
+ "updateBody": "Gamla bibliotek kan ge versionsfel i nvidia-smi. .run används för Debian/glibc, men enhetstilldelningen kan avslutas tidigt om alla poster redan finns.",
+ "denyTitle": "Tillstånd nekas på /dev/dri/renderD128 inuti containern",
+ "denyBody": "Kontrollera enhetsposten och numeriska rättigheter för render, sedan att appens användare tillhör render. Lägg vid behov till användaren i render med usermod -aG render <user>; ersätt platshållaren med kontot. Starta om sessionen. Byte av privilegieläge är ingen generell lösning.",
+ "vainfoTitle": "vainfo säger: VA-API version 1.xx; misslyckades med att initialisera",
+ "vainfoBody": "Kontrollera åtkomst och VA-API-drivrutin. Paketnamn varierar per distribution: exempelvis intel-media-driver för nyare Intel-GPU:er som stöds, i965-va-driver för äldre och mesa-va-drivers för AMD. Meddelandet bevisar inte ensamt ett saknat paket.",
+ "logTitle": "Installationslogg",
+ "logBody": "Varje körning skriver /tmp/add_gpu_lxc.log på värden. Bifoga loggen när du söker hjälp."
+ },
+ "related": {
+ "heading": "Relaterat",
+ "items": [
+ {
+ "label": "Installera NVIDIA Drivers (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " — installera värdens drivrutin före NVIDIA-delning."
+ },
+ {
+ "label": "Lägg till GPU till VM (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — alternativ för att reservera en GPU för en VM."
+ },
+ {
+ "label": "Byt GPU-läge (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — växla GPU:n mellan LXC-delning och VM-tilldelning."
+ },
+ {
+ "label": "GPU Passthrough kommandon",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — snabb referens för relaterade skalkommandon."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sv/docs/hardware/install-coral-tpu-host.json b/web/messages/sv/docs/hardware/install-coral-tpu-host.json
new file mode 100644
index 00000000..6dccb0d5
--- /dev/null
+++ b/web/messages/sv/docs/hardware/install-coral-tpu-host.json
@@ -0,0 +1,203 @@
+{
+ "meta": {
+ "title": "Installera Coral TPU på värden | ProxMenux-dokumentation",
+ "description": "Installerar Coral-komponenter på Proxmox VE efter upptäckt hårdvara: gasket/apex med DKMS för M.2 / Mini-PCIe och libedgetpu1-std för USB. Kör båda flödena om båda typerna hittas."
+ },
+ "header": {
+ "title": "Installera Coral TPU på värden",
+ "description": "Förbered Proxmox-värden för Coral och LXC-delning. Identifierar M.2 / Mini-PCIe, USB eller båda och kör rätt flöde: DKMS-moduler för PCIe och Google Edge TPU-körmiljö för USB.",
+ "section": "Hårdvara: GPU:er och Coral-TPU"
+ },
+ "intro": {
+ "title": "Vad det gör",
+ "body": "En gemensam installation med hårdvaruidentifiering. PCIe använder gasket och apex med DKMS; framtida byggen kräver kompatibel källkod och headers. USB använder libedgetpu1-std. Båda flödena körs om båda typerna hittas. USB-körmiljön ska finnas där appen körs; för enbart LXC behövs den inte nödvändigtvis även på värden."
+ },
+ "which": {
+ "heading": "Vilken Coral har jag?",
+ "body": "PCIe- och USB-modeller har olika format och krav. Skriptet stöder båda; identifiera din enhet före körning.",
+ "headerForm": "Formfaktor",
+ "headerDetect": "Detektering",
+ "headerInstall": "Installationstyp",
+ "headerReboot": "Starta om?",
+ "pcieForm": "M.2 / Mini-PCIe",
+ "pcieFormSub": "(M.2-kort finns med en eller två Edge TPU:er)",
+ "pcieDetect": "PCI-tillverkar-ID 1ac1",
+ "pcieInstall": "Kernel modul (gasket + apex) via DKMS",
+ "pcieReboot": "Ja",
+ "usbForm": "USB-accelerator",
+ "usbFormSub": "(liten plastdongel)",
+ "usbDetect": "USB 1a6e:089a (oprogrammerad) / 18d1:9302 (programmerad)",
+ "usbInstall": "Användarkörmiljö libedgetpu1-std från Googles APT-förråd",
+ "usbReboot": "Nej"
+ },
+ "prereqs": {
+ "title": "Innan du börjar",
+ "coral": "En ansluten Coral (M.2, Mini-PCIe eller USB) för installation. Utan upptäckt hårdvara kan skriptet städa eller ta bort befintliga komponenter, men installerar ingen ny hårdvaruväg.",
+ "coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
+ "internet": "Internetanslutning på värden för att klona PCIe-drivrutinen från GitHub eller hämta libedgetpu1-std från Googles APT-förråd för USB.",
+ "headers": "Kernelheaders tillgängliga via APT: proxmox-headers-$(uname -r). Behövs bara för PCIe/M.2; skriptet installerar dem.",
+ "reboot": "Planera en omstart för PCIe. Skriptet försöker läsa in de byggda modulerna; en omstart kontrollerar även automatisk inläsning."
+ },
+ "hostPrepTip": {
+ "title": "Detta förbereder bara värden",
+ "body": "Förbereder värden för åtkomst till enheten utan att konfigurera eller testa appen. För att använda Coral i en kompatibel app som Frigate, följ 0x1ac1 i /sys/bus/pci/devices/*/vendor och använder lsusb för USB. Det finns två USB-ID:n beroende på firmwareläget:",
+ "items": [
+ "1a6e:089a — Global Unichip, oprogrammerat läge innan körmiljön läser in firmware.",
+ "18d1:9302 — Google, programmerat läge efter att firmware lästs in."
+ ],
+ "outro": "Om varken Coral eller en befintlig installation hittas visas ett meddelande och skriptet avslutas. Befintliga komponenter kan fortfarande öppna menyn för rensning eller borttagning."
+ },
+ "prompt": {
+ "title": "Bekräfta installationen",
+ "body": "Före installationen visas en dialog med enheter och planerade komponenter. Avbryt för att hoppa över installationen. Valfri rensning av äldre komponenter har en egen tidigare bekräftelse.",
+ "imageAlt": "Översikt över Coral-enheter och installationssteg"
+ },
+ "pcie": {
+ "title": "PCIe: modulerna gasket och apex med DKMS",
+ "body": "Körs bara om en PCIe/M.2-Coral hittas. Bygger moduler för den kernel som värden kör.",
+ "items": [
+ "Rensning. Ett befintligt gasket-dkms-paket tas bort före ombygget; om paketet är i ett felaktigt tillstånd tvingar skriptet fram borttagning och rensning (purge).",
+ "Byggberoenden: git, dkms, build-essential, proxmox-headers-$(uname -r)."
+ ],
+ "cloneIntro": "Klonar drivrutinens källkod. Föredrar no_llseek med noop_llseek.",
+ "Kernel 6.13 eller senare: ändrar argumentet till MODULE_IMPORT_NS(DMA_BUF) till en strängliteral."
+ ],
+ "afterItems": [
+ "Kopierar källkoden till /usr/src/gasket-1.0/, skapar dkms.conf och registrerar med dkms add.",
+ "Bygger och installerar: dkms build följt av dkms install. Vid fel visas de sista 50 raderna i make.log om filen finns.",
+ "Skapar gruppen apex och udev-regler (/etc/udev/rules.d/99-coral-apex.rules) för att tilldela /dev/apex_* rätt grupp.",
+ "Försöker läsa in modulerna: modprobe gasket och modprobe apex."
+ ],
+ "imageAlt": "DKMS-bygge och inläsning av gasket/apex-moduler"
+ },
+ "usb": {
+ "title": "USB: Googles Edge TPU-körmiljö",
+ "body": "Det går bara om en USB-accelerator upptäcktes. Mycket enklare:",
+ "items": [
+ "Lägger till Googles GPG-nyckel i /etc/apt/keyrings/coral-edgetpu.gpg.",
+ "Lägger till APT-förrådet i /etc/apt/sources.list.d/coral-edgetpu.list; signed-by= begränsar verifieringen till dess nyckelring. Detta är enradsformatet .list, inte deb822-formatet .sources.",
+ "Installerar libedgetpu1-std, Edge TPU-körmiljön med standardprestanda.",
+ "Läser om udev och tillämpar paketets regler på USB-enheten."
+ ],
+ "stdTitle": "Varför libedgetpu1-std och inte libedgetpu1-max?",
+ "stdBody": "Paketet max aktiverar högsta frekvens som stöds och ökar prestanda, effektförbrukning och värme. Kontrollera acceleratorns kylning och driftvillkor före bytet. Paketen kan inte vara installerade samtidigt; byt med apt install libedgetpu1-max."
+ },
+ "reboot": {
+ "title": "Valfri omstart efter PCIe-installationen",
+ "body": "Efter PCIe erbjuds omstart. Skriptet har försökt med modprobe; kontrollera modulerna och /dev/apex_0 med gruppen apex. En planerad omstart testar automatisk inläsning. För enbart USB föreslås ingen omstart av värden.",
+ "imageAlt": "Sammanfattning och erbjudande om omstart efter PCIe-installation"
+ }
+ },
+ "legacyCleanup": {
+ "heading": "Rensa äldre gasket-dkms på värdar som bara använder USB",
+ "intro": "Om ingen PCIe/M.2-Coral hittas men en äldre installation av gasket-dkms finns erbjuds valfri rensning med bekräftelse.",
+ "items": [
+ "Om en PCIe/M.2-Coral hittas används det vanliga DKMS-bygget och denna rensning erbjuds inte.",
+ "Rensar bort gasket-dkms, gamla DKMS-registreringar och gasket-källkod samt reparerar väntande dpkg/APT-tillstånd.",
+ "USB-paketen libedgetpu1-std och libedgetpu1-max behålls så att USB-Coral har kvar sin körmiljö.",
+ "Manuset verifierar att arvspaketet är borta och att pakethanteringen är hälsosam innan rapporteringen av framgång."
+ ],
+ "warningTitle": "Bekräfta hårdvaran först",
+ "warningBody": "Om en förväntad PCIe/M.2-Coral saknas, avbryt rensningen och kontrollera kort, kortplats och firmware."
+ },
+ "reinstallUninstall": {
+ "heading": "Reinstallera eller avinstallera",
+ "intro": "Om en PCIe-installation med gasket-dkms, USB med libedgetpu1-std/libedgetpu1-max eller båda hittas visas en åtgärdsmeny.",
+ "imageAlt": "Meny för att installera om, uppdatera eller avinstallera Coral",
+ "imageCaption": "Menyn visas om någon komponent finns: en gasket-registrering i DKMS, paketet libedgetpu1-* eller enheter /dev/apex_*.",
+ "reinstallHeading": "Installera om / uppdatera",
+ "reinstallBody": "Kör den vanliga installationen: bygger om efter kernelbyte eller uppdaterar libedgetpu1-* från Google. Rensar först tidigare DKMS-tillstånd så att en misslyckad installation inte blockerar bygget.",
+ "uninstallHeading": "Avinstallera - vad som tas bort",
+ "uninstallIntro": "Kräver bekräftelse. LXC-appar som använder /dev/apex_* kan förlora åtkomsten under borttagningen eller efter omstart. Stegen är:",
+ "uninstallItems": [
+ "Försöker ta bort apex och gasket ur kerneln; aktiva användare kan förhindra detta.",
+ "Ta bort varje DKMS-registrerad gasket/<version>-post så att modulerna inte kommer tillbaka på nästa kärninstallation.",
+ "Rensar bort gasket-dkms, libedgetpu1-std och libedgetpu1-max och kör apt-get autoremove --purge.",
+ "Tar bort /etc/udev/rules.d/99-coral-apex.rules och återställer standardgruppen i 60-gasket-dkms.rules om filen finns kvar.",
+ "Kontrollerar kompletterande medlemmar i apex. Om listan är tom försöker skriptet ta bort gruppen; annars behålls apex och medlemmarna listas. Användare med gruppen som primär grupp kontrolleras inte fullständigt.",
+ "Tar bort förrådslistan /etc/apt/sources.list.d/coral-edgetpu.list, den äldre coral-cloud.list och gamla nyckelringar med namnet coral-edgetpu-archive-keyring.gpg. Den aktuella nyckelringen i /etc/apt/keyrings/coral-edgetpu.gpg tas inte bort av den här sekvensen.",
+ "Erbjuder omstart bara om PCIe var installerat för att ta bort kvarvarande moduler ur kerneln. Avinstallation av enbart USB kräver ingen omstart."
+ ],
+ "lxcWarnTitle": "LXC containrar med apex genomgång",
+ "lxcWarnBody": "Borttagning av värdens komponenter kan bryta LXC-åtkomsten. Planera underhåll om kompatibla appar som Frigate är beroende av denna Coral."
+ },
+ "updates": {
+ "heading": "Uppdateringsaviseringar",
+ "intro": "ProxMenux registrerar Coral-komponenter och kontrollerar PCIe/M.2 och USB separat. Om båda finns använder varje variant sin egen versionskälla:",
+ "headerVariant": "Variant",
+ "headerTracked": "Registrerad version",
+ "headerUpstream": "Versionskälla",
+ "pcieVariant": "PCIe / M.2",
+ "pcieTracked": "Först den registrerade versionstaggen från en lyckad installation, sedan versionen av ett fungerande gasket-dkms-paket, annars DKMS-modulens version. Den senare anger inte forkens patchnivå.",
+ "pcieUpstream": "Senaste GitHub-taggen för feranick/gasket-driver; sju dagars cache och jämförelse av byggnummer.",
+ "usbVariant": "USB",
+ "usbTracked": "libedgetpu1-std eller libedgetpu1-max apt version",
+ "usbUpstream": "Lokal apt-cache policy kandidat (Google Coral apt repo)",
+ "outro": "Om en ny version hittas skickar Monitor coral_driver_update_available via aktiverade kanaler. Aviseringen leder till installationen: välj Installera om / uppdatera.",
+ "antiTitle": "Inga upprepade aviseringar",
+ "antiBody": "En avisering per variant när den tillgängliga versionen ändras. Ingen upprepning vid varje daglig kontroll; nästa avisering kommer först vid en senare version.",
+ "rebootTitle": "PCIe-uppdateringar: planera en omstart",
+ "rebootBody": "Den ombyggda PCIe-modulen måste läsas in; en planerad omstart testar även automatisk inläsning. USB-biblioteket kräver ingen omstart av värden, men appar som använder den gamla versionen kan behöva startas om."
+ },
+ "manual": {
+ "heading": "Motsvarande manuella steg",
+ "intro": "Dessa kommandon visar huvudstegen i varje flöde för genomgång eller manuell körning.",
+ "pcieHeading": "PCIe / M.2 (gasket + apex via DKMS)",
+ "usbHeading": "USB (libedgetpu-körmiljö)"
+ },
+ "verification": {
+ "heading": "Verifiering",
+ "pcieHeading": "PCIe / M.2",
+ "usbHeading": "USB"
+ },
+ "troubleshoot": {
+ "heading": "Felsökning",
+ "dkmsFailTitle": "DKMS-bygget misslyckas efter kerneluppdatering",
+ "dkmsFailBody": "Saknade headers är en möjlig orsak. Kontrollera proxmox-headers-$(uname -r) med dpkg -l proxmox-headers-$(uname -r) och installera vid behov. Läs byggloggen efter inkompatibilitet med kerneln. En ny körning anropar cleanup_broken_gasket_dkms men kan inte garantera stöd för varje kernel.",
+ "apexMissTitle": "/dev/apex_0 saknas efter omstart",
+ "apexMissBody": "Kontrollera PCIe-identifieringen och att modulen passar aktuell kernel. Prova modprobe apex och läs dmesg | grep -iE \"apex|gasket\". Fel vid bygge, inläsning eller kortplats-/firmwareinställningar kan hindra att enheten skapas.",
+ "lxcMissTitle": "Värden ser /dev/apex_0 men inte LXC",
+ "lxcMissBody": "En synlig enhetsnod bevisar inte att enheten fungerar. Kontrollera åtkomst på värden, LXC-montering, cgroup-regler och numeriska UID/GID-rättigheter. Se libedgetpu1-std och rättigheterna med ls -l /dev/bus/usb/*/*. Appens mappade användare/grupp behöver läs- och skrivåtkomst; root som ägare är inte ett fel i sig. Efter regeländringar, kör udevadm control --reload-rules && udevadm trigger och återanslut vid behov.",
+ "logTitle": "Installationslogg",
+ "logBody": "Varje körning skriver /tmp/coral_install.log. Vid DKMS-fel läggs de sista 50 raderna från /var/lib/dkms/gasket/1.0/build/make.log till om filen finns. Bifoga loggen när du söker hjälp."
+ },
+ "related": {
+ "heading": "Relaterat",
+ "items": [
+ {
+ "label": "Lägg till Coral TPU i LXC",
+ "href": "/docs/hardware/coral-tpu-lxc",
+ "tail": " — ge en container med en kompatibel app åtkomst till värdens Coral."
+ },
+ {
+ "label": "Installera NVIDIA Drivers (Host)",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " - samma idé för NVIDIA GPU."
+ },
+ {
+ "label": "ProxMenux Monitor Hardware Tab",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — Coral-panelen visar drivrutin, moduler, enheter och körmiljöstatus samt temperatur om en sensor som stöds tillhandahåller den."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sv/docs/hardware/nvidia-host.json b/web/messages/sv/docs/hardware/nvidia-host.json
new file mode 100644
index 00000000..0401a1db
--- /dev/null
+++ b/web/messages/sv/docs/hardware/nvidia-host.json
@@ -0,0 +1,175 @@
+{
+ "meta": {
+ "title": "Installera NVIDIA på värden | ProxMenux-dokumentation",
+ "description": "Installera proprietära NVIDIA-drivrutiner på Proxmox VE med ProxMenux: GPU-filtrering, bygg- och DKMS-kontroller, persistens, valfri NVENC-patch och uppdatering av LXC-bibliotek."
+ },
+ "header": {
+ "title": "Installera NVIDIA-drivrutiner på värden",
+ "description": "Installera NVIDIA på Proxmox VE-värden. Filtrerar underhållna grenar efter GPU:ns PCI-ID, kontrollerar bygget, använder DKMS, hanterar nouveau och installerar persistens. Kan även uppdatera bibliotek i LXC med NVIDIA-åtkomst.",
+ "section": "Hårdvara: GPU:er och Coral-TPU"
+ },
+ "intro": {
+ "title": "Vad det gör",
+ "body": "ProxMenux identifierar GPU:n och erbjuder underhållna NVIDIA-grenar som listar dess PCI-ID. Det blockerar nouveau, hämtar den officiella .run-installationen, använder DKMS, installerar nvidia-persistenced, udev-regler och NVIDIA Container Toolkit och erbjuder en valfri NVENC-patch. Byggkontroller bedömer den körande kärnan; en lyckad kompilering garanterar inte att alla appar fungerar. Befintliga NVIDIA-LXC erbjuds en uppdatering av användarbiblioteken, med matchande version utom på Arch."
+ },
+ "who": {
+ "heading": "Vem är detta för?",
+ "body": "För GPU-accelererad video eller beräkning i Plex, Jellyfin, Frigate, Immich eller Stable Diffusion i LXC, installera först NVIDIA på Proxmox-värden. Direkt tilldelning till en VM använder det separata VFIO-flödet."
+ },
+ "prereqs": {
+ "title": "Innan du börjar",
+ "gpu": "En NVIDIA-GPU installerad i värden. Identifieras automatiskt; AMD och Intel hanteras inte här.",
+ "gpuCheck": "lspci | grep -i nvidia",
+ "notVm": "GPU:n får inte vara reserverad för VM via VFIO. Installationen avbryter i detta fall för att inte störa tilldelningen.",
+ "internet": "Internetåtkomst på värden. Hämtar drivrutinen från download.nvidia.com och kan klona nvidia-persistenced och nvidia-patch från GitHub.",
+ "space": "Planera plats i /opt/nvidia för .run och RAM för kompilering. LXC-uppdateringen utanför Arch kontrollerar 1500 MiB ledigt och kan begära en tillfällig ökning till 2048 MiB RAM om gränsen är lägre, och återställer sedan tidigare gräns. Planera för värdens omstart."
+ },
+ "vmWarn": {
+ "title": "GPU reserverad för VM? Stanna här",
+ "body": "Om en NVIDIA-enhet är bunden till vfio-pci avslutas installationen även när VM är stoppad. Reservation betyder inte aktiv användning. Planera återgången till värddrivrutinen och ta bort gamla VM-/VFIO-tilldelningar före omstart och installation."
+ },
+ "running": {
+ "heading": "Kör installatören",
+ "body": "Öppna Hardware Graphics → NVIDIA GPU Driver Installer i ProxMenux. Menyn beror på om en drivrutin redan är aktiv.",
+ "imageAlt": "Hårdvarumeny med NVIDIA-installationen markerad"
+ },
+ "howRuns": {
+ "heading": "Så fungerar skriptet",
+ "body": "Identifierar enheter, väljer version och installerar. Separat bekräftad VFIO-städning kan ske före översikten. Förberedelse av paketförråd/headers och hämtning sker före drivrutinsbytet; alla ändringar börjar inte efter en enda slutbekräftelse."
+ },
+ "walkthrough": {
+ "detect": {
+ "title": "GPU upptäckt och översikt",
+ "body1": "Visar NVIDIA-grafikstyrenheter, drivrutinsstatus eller ”Ingen NVIDIA-drivrutin installerad” samt LXC med konfigurerad NVIDIA-åtkomst och deras drivrutinsversion.",
+ "body2": "Granska GPU och värd-/containerversioner. Avbryt i översikten om urvalet är oväntat; tidigare separat bekräftad VFIO-städning har redan utförts.",
+ "imageAlt": "Översikt före installation: GPU, drivrutin och NVIDIA-LXC"
+ },
+ "version": {
+ "title": "Välj drivrutinsversion",
+ "body1": "Filtrerar versioner från nvidia.com som listar GPU:ns PCI-ID bland stödda kretsar och sorterar bort beta-/utvecklarversioner heuristiskt. <version> — Rekommenderad prioriterar senaste versionen i installerad gren, sedan Production Branch och till sist högsta stödda versionsnummer.",
+ "body2": "Om drivrutinen registrerats med keylase-patch begränsas väljaren till NVENC-patchtabellen. Installera om / uppdatera har fortfarande bekräftelser och patchfrågor; kontrollera slutresultatet.",
+ "whyTitle": "Hur kärnkompatibilitet valideras",
+ "whyBody": "Filtrerar efter underhållna grenar och PCI-ID, utan fast kärn-/drivrutinsmatris. Ett förbygge testar aktuell kärna. Bekräftat byggfel återgår till väljaren; ett otillgängligt förtest kan varna och fortsätta. Slutinstallation och funktionskontroll behövs fortfarande.",
+ "imageAlt": "Väljare för GPU-kompatibla grenar med rekommendation överst"
+ },
+ "uninstall": {
+ "title": "Ta bort tidigare drivrutin vid ominstallation",
+ "body": "Efter hämtning och kontroll av vald installation tas föregående drivrutin bort. Stoppar NVIDIA-tjänster, laddar ur moduler, tar bort DKMS-poster och rensar nvidia-* / libnvidia-* / cuda-*. Gäller även bekräftad ominstallation av samma version."
+ },
+ "prepare": {
+ "title": "Förbered systemet",
+ "body": "Under förberedelsen gör skriptet följande:",
+ "items": [
+ "Kontrollerar paketförråd före borttagning eller installation. Utan prenumeration och med enbart Enterprise frågar det om byte till no-subscription; nej avbryter installationen.",
+ "Installerar pve-headers-$(uname -r) (eller proxmox-headers-$(uname -r)), build-essential och dkms.",
+ "Skapar den ProxMenux-hanterade filen /etc/modprobe.d/proxmenux-nouveau-blacklist.conf med blacklist nouveau och options nouveau modeset=0. Registrerar eventuell tillagd rad i blacklist.conf och försöker ladda ur nouveau.",
+ "Skriver /etc/modules-load.d/nvidia-vfio.conf med nvidia och nvidia_uvm så modulerna laddas tidigt på starten."
+ ]
+ },
+ "download": {
+ "title": "Hämta och kör NVIDIA-installationen",
+ "body": "Hämtar NVIDIA-Linux-x86_64-<version>.run till /opt/nvidia och kontrollerar storlek och körbar filtyp. Det är formatkontroller, inte kontroll av kryptografisk signatur. Registrerar DKMS för kärnändringar; kompatibel källkod och kärna krävs fortfarande.",
+ "imageAlt": "Hämtningsförlopp och NVIDIA-installationens DKMS-bygge"
+ },
+ "persist": {
+ "title": "Persistens service och udev regler",
+ "body": "Installerar /etc/udev/rules.d/70-nvidia.rules för att skapa /dev/nvidia* vid start. Det hjälper till att undvika LXC-åtkomst innan enheterna finns."
+ },
+ "nvenc": {
+ "title": "Valfritt: tillämpa NVENC-patchen",
+ "body": "NVENC-sessionsgränser beror på GPU och drivrutin. nvidia-smi visa ”version mismatch”.",
+ "body2": "Debian / Ubuntu och andra glibc-containrar får den uppackade .run-installationen med --no-kernel-modules --no-dkms --no-install-compat32-libs; RAM kan tillfälligt höjas till 2 GiB och återställas efteråt. Arch, Manjaro och EndeavourOS använder pacman -Syu nvidia-utils från paketförråden, utan låsning till värdversionen: kontrollera resultatet. Alpine får uppackat .run-innehåll via pct push, installerar gcompat och binutils med apk och skapar SONAME-länkar med readelf. Kontrollera funktionen; kompatibilitetslagret garanterar inte alla bibliotek på musl.",
+ "imageAlt": "Dialog med NVIDIA-LXC och versioner för att bekräfta uppdatering"
+ },
+ "reboot": {
+ "title": "Starta om",
+ "body": "Efter installationen av drivrutinen bygger skriptet om initramfs för alla kärnor; dess sista steg erbjuder omstart. Planera den omstarten för att kontrollera den beständiga modul- och nouveau-konfigurationen vid en ny start, även om den nya drivrutinen redan svarar före omstarten."
+ }
+ },
+ "reinstallUninstall": {
+ "heading": "Reinstallera eller avinstallera",
+ "intro": "Om nvidia är laddad och nvidia-smi returnerar en version visas en åtgärdsmeny. Det identifierar en aktiv drivrutin; installerade filer kan finnas även utan laddad modul.",
+ "imageAlt": "NVIDIA-åtgärdsmeny med valen Installera om / uppdatera drivrutin och Avinstallera NVIDIA-drivrutinen helt",
+ "imageCaption": "Åtgärdsmenyn visas när en NVIDIA-drivrutin är aktiv på värden.",
+ "reinstallHeading": "Installera om / uppdatera",
+ "reinstallBody": "Väljer version, förbereder paketförråd/headers, hämtar och kontrollerar bygget före drivrutinsbytet. Kan uppdatera inom underhållen gren eller välja annan stödd gren. Frågor om LXC-bibliotek och NVENC-patch visas igen efteråt.",
+ "uninstallHeading": "Avinstallera - vad som tas bort",
+ "uninstallIntro": "Efter Ja/Nej-bekräftelse tas följande komponenter bort:",
+ "uninstallItems": [
+ "Stoppar och inaktiverar nvidia-persistenced och nvidia-powerd, försöker ladda ur nvidia_uvm, nvidia_drm, nvidia_modeset och nvidia och kör sedan nvidia-uninstall --silent för .run-installationen. NVIDIA-beroende LXC-arbetslaster påverkas; aktiva klienter kan hindra urladdningen.",
+ "Kör apt purge på nvidia-*, libnvidia-*, cuda-* och libcudnn*, tar bort DKMS-källträdet och mapparna nvidia-persistenced och nvidia-patch under /opt/nvidia.",
+ "Tar bort modulkonfigurationen /etc/modules-load.d/nvidia-vfio.conf och ProxMenux egna nouveau-blockeringar. Äldre ProxMenux-filer med de två kända raderna migreras och tas bort; ändrade eller orelaterade administratörsfiler bevaras.",
+ "Tar bort /etc/udev/rules.d/70-nvidia.rules och sätter NVENC-status till removed i registret för hanterade installationer; ingen separat statusfil finns.",
+ "Bygger om initramfs för alla kärnor, kör proxmox-boot-tool refresh enligt startkonfigurationen och frågar om omstart."
+ ],
+ "lxcWarnTitle": "LXC med NVIDIA-åtkomst",
+ "lxcWarnBody": "Borttagning av värddrivrutinen avbryter NVIDIA-beroende LXC-appar även om biblioteken finns kvar. Planera underhåll för Frigate, Plex, Jellyfin, Ollama och andra GPU-appar."
+ },
+ "updates": {
+ "heading": "Aviseringar om uppdateringar",
+ "body": "NVIDIA-drivrutinen följs i registret för hanterade installationer. Vid start och var 24:e timme jämför Monitor versionerna på download.nvidia.com/XFree86/Linux-x86_64/ med den som nvidia-smi rapporterar. Aviserar bara nya underhållsversioner i installerad gren.",
+ "kindsHeading": "Uppdateringsmeddelande",
+ "kindsItems": [
+ "Underhåll i samma gren. Exempel: installerad 580.65.06 → tillgänglig 580.105.08. Monitor drar inga slutsatser om kärnkompatibilitet mellan grenar."
+ ],
+ "antiTitle": "Undvik upprepade aviseringar",
+ "antiBody": "En avisering per ny version, inte vid varje daglig kontroll. Ingen avisering utan nyare version i installerad gren.",
+ "applyTitle": "Applicera uppdateringen",
+ "applyBody": "Monitor meddelar utan automatisk installation. Öppna installationen, välj Installera om / uppdatera och en stödd version, och slutför bygge och installation. Planera omstarten som erbjuds och kontrollera därefter värd och LXC-bibliotek."
+ },
+ "verify": {
+ "heading": "Verifiera installationen",
+ "intro": "Efter värdens omstart, logga in via SSH eller Proxmox-skalet och kör:",
+ "after": "Kontrollera GPU och förväntad version. Processer kan redan visas om värdtjänster eller automatiskt startade containrar använder GPU:n. Kontrollera sedan persistensen:",
+ "imageAlt": "Utdata från nvidia-smi på värden med upptäckt GPU och installerad drivrutinsversion"
+ },
+ "troubleshoot": {
+ "heading": "Felsökning",
+ "smiFailTitle": "nvidia-smi visar ”NVIDIA-SMI has failed”",
+ "smiFailBody": "Möjliga orsaker är nouveau, saknade eller felaktiga kärnheaders, inkompatibel drivrutinskällkod eller andra laddningsfel. Granska lsmod | grep nouveau, dmesg | grep -i nvidia och installations-/DKMS-loggar. Om nouveau-regeln behöver rättas, kontrollera /etc/modprobe.d/proxmenux-nouveau-blacklist.conf före update-initramfs -u -k all och omstart. Alla byggfel beror inte på headers.",
+ "lxcMissTitle": "LXC-container kan inte se GPU efter värduppdatering",
+ "lxcMissBody": "Före ominstallation, kontrollera värdens enheter, LXC-behörigheter och biblioteksversion. Versionskonflikt kan kräva matchande användardrivrutin via distributionens stödda metod; på glibc används --no-kernel-modules. Bibliotek rättar inte saknade monteringar eller behörigheter.",
+ "logTitle": "Kolla installationsloggen",
+ "logBody": "Installationen skriver till /tmp/nvidia_install.log. Vid fel, granska hämtning, DKMS-bygge och tjänster. Bifoga loggen till felrapporten på GitHub."
+ },
+ "manualSteps": {
+ "heading": "Letar du efter manuella steg?",
+ "body": "Se wget och ./NVIDIA-Linux-...run. Guiden förklarar komponenterna men återger inte installationen exakt. Det underhållna ProxMenux-flödet ger GPU-filtrering, byggkontroller, LXC-uppdateringar och VFIO-kontroller."
+ },
+ "related": {
+ "heading": "Relaterat",
+ "items": [
+ {
+ "label": "Lägg till GPU till VM (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — tilldela NVIDIA direkt till en VM via VFIO."
+ },
+ {
+ "label": "Lägg till GPU i LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — dela NVIDIA med en eller flera containrar."
+ },
+ {
+ "label": "Byt GPU-läge (VM ↔ LXC)",
+ "href": "/docs/hardware/switch-gpu-mode",
+ "tail": " — växla mellan VM-genomkoppling och LXC-delning."
+ },
+ {
+ "label": "ProxMenux Monitor — fliken Hårdvara",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — GPU-dialog som öppnar installationen och visar övervakning i realtid."
+ },
+ {
+ "label": "Kommandon för GPU-genomkoppling",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — lspci / dmesg / IOMMU / nvidia-smi referens."
+ }
+ ]
+ }
+}
diff --git a/web/messages/sv/docs/hardware/switch-gpu-mode.json b/web/messages/sv/docs/hardware/switch-gpu-mode.json
new file mode 100644
index 00000000..14c4fac1
--- /dev/null
+++ b/web/messages/sv/docs/hardware/switch-gpu-mode.json
@@ -0,0 +1,172 @@
+{
+ "meta": {
+ "title": "Byt GPU-läge (VM ↔ LXC) | ProxMenux-dokumentation",
+ "description": "Byt GPU mellan VFIO för VM och inbyggd drivrutin för LXC. ProxMenux identifierar drivrutinen, frågar hur berörda gäster ska hanteras, tar bort tillhörande ljudtilldelningar och bygger om initramfs om värdkonfigurationen ändras."
+ },
+ "header": {
+ "title": "Byt GPU-läge (VM ↔ LXC)",
+ "description": "Byt en tilldelad GPU mellan VM-genomkoppling och LXC-delning. ProxMenux hanterar drivrutin, VFIO, moduler och initramfs och frågar hur berörda gäster ska hanteras. Granska valen och kontrollera konfigurationen efter omstart.",
+ "section": "Hårdvara: GPU:er och Coral-TPU"
+ },
+ "intro": {
+ "title": "Vad det gör",
+ "body": "Med vfio-pci reserveras GPU:n för en VM. Med inbyggd drivrutin (i915 / amdgpu / nvidia) kan värden och LXC dela den. Byt GPU-läge hanterar vfio.conf, modulblockering och gästreferenser och varnar om kvarvarande tilldelningar."
+ },
+ "graphics": {
+ "lxcTitle": "Klar för LXC-containrar",
+ "lxcDesc": "Inbyggd drivrutin aktiv",
+ "vmTitle": "Redo för VM-passthrough",
+ "vmDesc": "VFIO-PCI drivrutin aktiv"
+ },
+ "when": {
+ "heading": "När ska jag använda detta?",
+ "intro": "Använd när GPU:n redan är tilldelad och du vill ändra användningen:",
+ "headerSituation": "Situation",
+ "headerUse": "Använd denna sida?",
+ "rows": [
+ {
+ "situation": "GPU ledig och aldrig tilldelad: använd den i en VM.",
+ "useRich": "Nej — använd vfio-pci, jag vill använda den från en LXC istället.",
+ "useRich": "Ja — den här sidan."
+ },
+ {
+ "situation": "GPU delas med en LXC, jag vill ägna den till en VM.",
+ "useRich": "Ja — den här sidan."
+ },
+ {
+ "situation": "Jag vill ta bort alla tilldelningar av denna GPU.",
+ "use": "LXC-läget återför GPU:n till värdens drivrutin; VM-konfliktpolicyn kan ta bort hostpci-poster, men LXC-enhetsposter måste tas bort separat. GPU:n är fortfarande bunden till en drivrutin."
+ }
+ ]
+ },
+ "prereqs": {
+ "title": "Innan du börjar",
+ "assigned": "En redan tilldelad GPU i en VM via VFIO eller i en LXC. För första tilldelningen, använd Lägg till GPU i VM / LXC.",
+ "iommu": "IOMMU måste vara aktivt på värden vid byte till VM-läge. Både firmwareinställningar och kärnstöd spelar roll. Om intel_iommu=on eller amd_iommu=on saknas i den körande kärnan lägger skriptet till det med iommu=pt i /etc/kernel/cmdline (ZFS-rotmarkör) eller /etc/default/grub och kör sedan proxmox-boot-tool refresh eller update-grub. Granska eventuella varningar och starta om när du uppmanas.",
+ "iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
+ "reboot": "Planera en omstart. Beständiga drivrutins- och startändringar kan kräva ombyggnad av initramfs och omstart. Skriptet frågar om detta i slutet.",
+ "knowList": "Ta reda på vilka VM och LXC som använder GPU:n. Skriptet hittar referenser och frågar hur varje gäst ska hanteras; en känd lista underlättar granskningen."
+ },
+ "blocklist": {
+ "title": "Inte alla GPU är säkra att passera till en VM",
+ "body": "Skriptet blockerar VM-läge för enhets-ID 8086:5a84 och 8086:5a85 enligt sin kompatibilitetspolicy. Om en vald GPU matchar avbryts bytet till VM-läge och skriptet återgår till GPU-valet, eller avslutas om det är den enda GPU:n. Blocklistan hindrar inte byte till LXC-läge; andra kontroller kan fortfarande gälla."
+ },
+ "running": {
+ "heading": "Kör skriptet",
+ "body": "Öppna Hårdvara: GPU och Coral-TPU → Byt GPU-läge (VM ↔ LXC) i ProxMenux.",
+ "imageAlt": "Alternativet Byt GPU-läge (VM ↔ LXC) i hårdvarumenyn"
+ },
+ "howRuns": {
+ "heading": "Så fungerar skriptet",
+ "body": "GPU-val och riktning granskas före huvudbytet. Separat städning av gamla VFIO-poster kan fråga tidigare, och berörda gäster har egna konfliktdialoger. Läs varje bekräftelse: en enda slutbekräftelse täcker inte alla ändringar."
+ },
+ "walkthrough": {
+ "heading": "Steg för steg",
+ "detect": {
+ "title": "Identifiera GPU och aktuell drivrutin",
+ "body": "Granskar värdens VGA-, 3D- och Display-styrenheter och kontrollerar /sys/bus/pci/devices/*/driver. Visar namn, PCI-adress och aktuell drivrutin för varje GPU så att läget kan identifieras.",
+ "imageAlt": "GPU checklista som visar varje upptäckt GPU med sin nuvarande drivrutin (vfio-pci / nvidia / amdgpu / i915) och PCI slot"
+ },
+ "pickGpu": {
+ "title": "Välj GPU:er att växla",
+ "body": "En ensam GPU väljs automatiskt. Med flera kan du markera flera, men alla måste vara i samma läge. Blandade lägen kräver att du begränsar urvalet.",
+ "tipTitle": "Växla flera GPU:er samtidigt",
+ "tipBody": "Exempel: växla tre NVIDIA till VM-läge och sedan iGPU:n tillbaka till LXC. Två körningar med ett gemensamt mål i varje, i stället för att växla korten ett i taget."
+ },
+ "direction": {
+ "title": "Granska den föreslagna riktningen",
+ "intro": "Baserat på det aktuella läget föreslår manuset motsatsen som mål:",
+ "items": [
+ "VM → LXC: tar bort bindningen till vfio-pci så att den inbyggda drivrutinen (nvidia, amdgpu, i915) kan använda GPU:n. För NVIDIA tas motsvarande BDF-poster bort från /etc/udev/rules.d/10-proxmenux-vfio-bind.rules inför nästa start.",
+ "LXC → VM: förbereder bindning till vfio-pci. AMD / Intel blockerar den inbyggda drivrutinen och använder options vfio-pci ids=…. För NVIDIA blockeras nvidia globalt endast när varje NVIDIA-GPU på värden är i VFIO; annars sätter regler per BDF driver_override=vfio-pci för enheterna i berörda IOMMU-grupper, och NVIDIA-GPU:er utanför grupperna behåller nvidia. Granska varje gruppmedlem före bytet."
+ ],
+ "outro": "Bekräfta riktningen eller avbryt."
+ },
+ "conflict": {
+ "title": "Val för varje berörd VM eller LXC",
+ "body": "Kontrollerar /etc/pve/lxc/*.conf efter GPU-enheter per drivrutinsfamilj och /etc/pve/qemu-server/*.conf efter PCI-tilldelningar. LXC-detekteringen matchar inte varje kort exakt per BDF. Granska gästerna och välj hantering för varje:",
+ "headerPolicy": "Policy",
+ "headerEffect": "Effekt",
+ "headerWhen": "När ska man välja",
+ "keepPolicy": "Behåll konfiguration, inaktivera automatisk start",
+ "keepEffect": "pct set CTID -onboot 0 eller qm set VMID -onboot 0. GPU-posterna behålls.",
+ "keepWhen": "Om gästen ska användas igen när GPU:n återgår till ursprungligt läge. Försiktigt standardval.",
+ "removePolicy": "Ta bort GPU från konfig",
+ "removeEffect": "Tar bort identifierade hostpci- / dev-poster och äldre referenser som stöds.",
+ "removeWhen": "Om gästen ska fungera utan GPU. Kontrollera appinställningarna först: CPU-reservdrift beror på appen, och enhetsborttagning konfigurerar inte om den automatiskt.",
+ "imageAlt": "Dialog för att hantera varje berörd VM eller LXC"
+ },
+ "audio": {
+ "title": "Ta bort tillhörande ljudtilldelningar när VM-läget lämnas",
+ "body1": "Många separata NVIDIA-/AMD-GPU:er har HDMI-ljud på funktion .1 i samma slot; fler ljudenheter kan också ha tilldelats. När GPU:n tas bort kan gamla ljudposter av typen hostpci bli kvar. Granska vilka tilldelningar som ska behållas.",
+ "body2": "Identifierar ljudets BDF-adresser och visar en lista för att välja tilldelningar att ta bort. Tar även bort deras vendor:device-ID från /etc/modprobe.d/vfio.conf, men bara om ingen annan VM använder dem."
+ },
+ "apply": {
+ "title": "Tillämpa ändringar på värd och gäster",
+ "body": "Efter bekräftelse skrivs värdändringarna: vfio.conf, drivrutinsblockering, moduler och för NVIDIA BDF-regeln /etc/udev/rules.d/10-proxmenux-vfio-bind.rules med status i /etc/proxmenux/vfio-bind.bdfs. Vald konfliktpolicy tillämpas på varje gäst. Om värdkonfigurationen ändrats körs update-initramfs -u -k all följt av proxmox-boot-tool refresh; annars hoppas båda över."
+ },
+ "reboot": {
+ "title": "Starta om",
+ "body": "Starta om värden för att tillämpa den nya beständiga bindningen. Omstarten kan skjutas upp, men kontrollera aktiv drivrutin före start av målgästen: den gamla kan fortfarande vara aktiv fram till omstarten.",
+ "imageAlt": "Sammanfattningsdialog som listar vad som ändrats, följt av omstartsprompten"
+ }
+ },
+ "manual": {
+ "heading": "Manuell granskning",
+ "intro": "Före VM → LXC, granska drivrutin och BDF-policy. NVIDIA-exemplet använder 10de:2204; anpassa till ditt kort. Kommandona läser status; skriptet hanterar även gäster och IOMMU-gruppmedlemmar.",
+ "lxcToVm": "Före LXC → VM, granska PCI-adressen och IOMMU-gruppen. Ersätt exempeladressen och kontrollera alla gruppmedlemmar före tilldelning.",
+ "oneVmTitle": "En fysisk GPU tilldelad via VFIO kan bara användas av en VM i taget",
+ "oneVmBody": "Att sätta flera hostpci-poster med samma PCI-slot i två VM är giltigt konfig men bara en av VM kan börja med GPU - den andra kommer att misslyckas. ProxMenux konfliktpolitiskt steg handlar om att undvika denna fälla."
+ },
+ "verification": {
+ "heading": "Verifiering efter omstart"
+ },
+ "troubleshoot": {
+ "heading": "Felsökning",
+ "stillVfioTitle": "GPU visar fortfarande vfio-pci efter byte till LXC-läge",
+ "stillVfioBody": "En laddad VFIO-modul visar inte vilken drivrutin som äger denna GPU. Kontrollera kortets bindning samt att update-initramfs och omstart slutförts. lsmod | grep vfio listar bara moduler. För AMD / Intel granska vfio.conf; för NVIDIA /etc/proxmenux/vfio-bind.bdfs och /etc/udev/rules.d/10-proxmenux-vfio-bind.rules. Korrigera gamla regler före update-initramfs -u -k all och omstart.",
+ "vmFailTitle": "En VM startar inte efter byte av GPU:n till LXC-läge",
+ "vmFailBody": "Kontrollera gamla hostpci-referenser. Valet Ta bort GPU från konfiguration kan rensa dem under avsett byte. Granska föreslagen riktning innan skriptet körs igen så att läget inte vänds av misstag. Alternativt ta bort tilldelningen i Proxmox när VM är stoppad.",
+ "smiFailTitle": "nvidia-smi visar ”Driver/library version mismatch” efter återgång till LXC",
+ "smiFailBody": "Jämför laddad NVIDIA-modul med installerade bibliotek, även i LXC. Anpassa versionerna först: omstart laddar installerad modul men rättar inte felaktiga bibliotekspaket. Omladdning med modprobe -r nvidia och modprobe nvidia kräver stoppade GPU-klienter och kan misslyckas när beroende moduler används.",
+ "logTitle": "Körningslogg",
+ "logBody": "Varje körning skriver till /tmp/proxmenux_gpu_switch_mode.log på värden. Bifoga loggen när du ber om hjälp på GitHub."
+ },
+ "related": {
+ "heading": "Relaterat",
+ "items": [
+ {
+ "label": "Lägg till GPU till VM (Passthrough)",
+ "href": "/docs/hardware/gpu-vm-passthrough",
+ "tail": " — första konfigurationen av VM-läge."
+ },
+ {
+ "label": "Lägg till GPU i LXC",
+ "href": "/docs/hardware/igpu-acceleration-lxc",
+ "tail": " — första konfigurationen av LXC-läge."
+ },
+ {
+ "label": "Installera NVIDIA-drivrutiner på värden",
+ "href": "/docs/hardware/nvidia-host",
+ "tail": " - krävs för LXC-läge på NVIDIA GPU."
+ },
+ {
+ "label": "ProxMenux Monitor — fliken Hårdvara",
+ "href": "/docs/monitor/dashboard/hardware",
+ "tail": " — avsnittet Grafikkort med aktuellt läge och växlingskontroll."
+ },
+ {
+ "label": "Kommandon för GPU-genomkoppling",
+ "href": "/docs/help-info/gpu-commands",
+ "tail": " — kort kommandoreferens."
+ }
+ ]
+ }
+}