mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-01 10:22:08 +00:00
Describe the GPU and Coral assistants as the scripts run them
This commit is contained in:
@@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"prereqs": {
|
"prereqs": {
|
||||||
"title": "Vorbereitung",
|
"title": "Vorbereitung",
|
||||||
"drivers": "<strong>Coral auf dem Host vorbereiten</strong>. M.2 / PCIe benötigt den geladenen Host-Treiber, USB den Gerätezugriff mit passenden Berechtigungen. Siehe <hostLink>Coral TPU auf dem Host installieren</hostLink>. Die Anwendungslaufzeit muss im Container vorhanden sein.",
|
"drivers": "<strong>Das Coral-Gerät auf dem Host vorbereiten</strong>. M.2 / PCIe benötigt den geladenen Host-Treiber, USB den Gerätezugriff mit passenden Berechtigungen. Siehe <hostLink>Coral TPU auf dem Host installieren</hostLink>. Das Skript installiert die Anwendungslaufzeit in Debian/Ubuntu-Containern; andere Distributionen müssen sie separat bereitstellen.",
|
||||||
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||||
"container": "<strong>Vorhandener LXC-Container</strong>, vorzugsweise auf Basis von <strong>Debian / Ubuntu</strong>: Die Installation nutzt <code>apt-get</code>. <strong>Container anderer Distributionen</strong> können den <strong>reinen Passthrough-Modus</strong> nutzen, der die APT-Installation von <code>libedgetpu</code> überspringt. Geeignet, wenn die Anwendung die Laufzeit bereits mitbringt, etwa das Frigate-Docker-Image.",
|
"container": "<strong>Vorhandener LXC-Container</strong>, vorzugsweise auf Basis von <strong>Debian / Ubuntu</strong>: Die Installation nutzt <code>apt-get</code>. <strong>Container anderer Distributionen</strong> können den <strong>reinen Passthrough-Modus</strong> nutzen, der die APT-Installation von <code>libedgetpu</code> überspringt. Geeignet, wenn die Anwendung die Laufzeit bereits mitbringt, etwa das Frigate-Docker-Image.",
|
||||||
"downtime": "<strong>Kurze Ausfallzeit einplanen</strong>. Das Skript stoppt den Container für die Konfiguration und startet ihn zur Laufzeitinstallation. Für diese Änderungen ist kein Host-Neustart nötig."
|
"downtime": "<strong>Kurze Ausfallzeit einplanen</strong>. Das Skript stoppt den Container für die Konfiguration und startet ihn zur Laufzeitinstallation. Für diese Änderungen ist kein Host-Neustart nötig."
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"gpuHint": {
|
"gpuHint": {
|
||||||
"title": "Optionaler Hinweis zum GPU-Zugriff",
|
"title": "Optionaler Hinweis zum GPU-Zugriff",
|
||||||
"body": "Wird eine GPU ohne Container-Zuordnung erkannt, empfiehlt ein Dialog <lxcGpuLink>GPU zu LXC hinzufügen</lxcGpuLink> für Videodekodierung, etwa Quick Sync, VA-API oder NVDEC. Die Frage lautet, ob nur Coral eingerichtet werden soll: Ja setzt fort, Nein beendet den Ablauf für die vorherige GPU-Einrichtung."
|
"body": "Wird eine GPU erkannt, die für diesen Container nicht konfiguriert ist, empfiehlt ein Dialog <lxcGpuLink>GPU zu LXC hinzufügen</lxcGpuLink> für die Hardware-Videodekodierung, etwa Quick Sync, VA-API oder NVENC. Er fragt, ob nur mit Coral fortgefahren werden soll: Ja setzt die TPU-Einrichtung fort, Nein beendet den Ablauf, damit Sie zuerst die GPU konfigurieren können."
|
||||||
},
|
},
|
||||||
"usb": {
|
"usb": {
|
||||||
"title": "USB-Zugriff im LXC konfigurieren",
|
"title": "USB-Zugriff im LXC konfigurieren",
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
"pcie": {
|
"pcie": {
|
||||||
"title": "M.2-/PCIe-Zugriff im LXC konfigurieren",
|
"title": "M.2-/PCIe-Zugriff im LXC konfigurieren",
|
||||||
"body1": "Bei erkannter M.2-/PCIe-Coral und vorhandenem <code>/dev/apex_0</code> nutzt das Skript die Proxmox-API <code>dev</code> für cgroup2-Berechtigungen in privilegierten und unprivilegierten LXC:",
|
"body1": "Bei erkannter M.2-/PCIe-Coral und vorhandenem <code>/dev/apex_0</code> nutzt das Skript die Proxmox-API <code>dev</code> für cgroup2-Berechtigungen in privilegierten und unprivilegierten LXC:",
|
||||||
"body2": "Wenn nach <hostLink>Coral auf dem Host installieren</hostLink> noch kein <code>/dev/apex_0</code> existiert, wird die klassische cgroup2-Konfiguration mit optionalem Bind-Mount und <code>create=file</code> verwendet. Das erzeugt allein noch kein funktionsfähiges Gerät:",
|
"body2": "Wenn nach <hostLink>Coral auf dem Host installieren</hostLink> kein <code>/dev/apex_0</code> vorhanden ist, schreibt das Skript einen Bind-Mount mit <code>create=file</code> und, nur wenn die Apex-Major-Nummer in <code>/proc/devices</code> 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",
|
"rebootTitle": "Starten Sie den Host zuerst neu, wenn Sie gerade Coral-Treiber installiert haben",
|
||||||
"rebootBody": "Der Ersatz-Mount lädt den Host-Treiber <code>apex</code> 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."
|
"rebootBody": "Der Ersatz-Mount lädt den Host-Treiber <code>apex</code> 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."
|
||||||
},
|
},
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
"troubleshoot": {
|
"troubleshoot": {
|
||||||
"heading": "Fehlerbehebung",
|
"heading": "Fehlerbehebung",
|
||||||
"apexTitle": "LXC gestartet, aber /dev/apex_0 fehlt",
|
"apexTitle": "LXC gestartet, aber /dev/apex_0 fehlt",
|
||||||
"apexBody": "Host-Treiber prüfen: <code>lsmod | grep apex</code>. Falls nicht geladen, versuchen Sie <code>modprobe apex</code> oder starten nach der Treiberinstallation neu. Sobald <code>/dev/apex_0</code> auf dem Host existiert, prüfen Sie den LXC-Geräteeintrag und starten mit <code>pct stop <ctid> && pct start <ctid></code> neu.",
|
"apexBody": "Prüfen Sie zuerst den Host-Treiber: <code>lsmod | grep apex</code>. Falls nicht geladen, versuchen Sie <code>modprobe apex</code> oder starten nach der Treiberinstallation neu. Sobald <code>/dev/apex_0</code> 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 <code>pct stop <ctid> && pct start <ctid></code> neu.",
|
||||||
"replugTitle": "USB-Coral verschwindet nach Anschluss an einen anderen Port",
|
"replugTitle": "USB-Coral verschwindet nach Anschluss an einen anderen Port",
|
||||||
"replugBody": "Prüfen Sie, ob der LXC <code>/dev/bus/usb</code> statt des Links <code>/dev/coral</code> einbindet. Die Konfiguration sollte <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> enthalten und nicht direkt von <code>/dev/coral</code> abhängen. Führen Sie bei alten Konfigurationen das Skript erneut aus.",
|
"replugBody": "Prüfen Sie, ob der LXC <code>/dev/bus/usb</code> statt des Links <code>/dev/coral</code> einbindet. Die Konfiguration sollte <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> enthalten und nicht direkt von <code>/dev/coral</code> abhängen. Führen Sie bei alten Konfigurationen das Skript erneut aus.",
|
||||||
"alpineTitle": "Alpine / Arch / RHEL / SUSE: Laufzeit nicht installiert",
|
"alpineTitle": "Alpine / Arch / RHEL / SUSE: Laufzeit nicht installiert",
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
"heading": "Schritt für Schritt",
|
"heading": "Schritt für Schritt",
|
||||||
"detect": {
|
"detect": {
|
||||||
"title": "GPUs erkennen und IOMMU überprüfen",
|
"title": "GPUs erkennen und IOMMU überprüfen",
|
||||||
"body": "Prüft aktives IOMMU, nicht nur Parameter. Separat bestätigt kann <code>intel_iommu=on</code> oder <code>amd_iommu=on</code> mit <code>iommu=pt</code> ergänzt werden. Nutzt <code>/etc/kernel/cmdline</code> bei ZFS-Marker wie <code>root=ZFS=</code>, sonst <code>/etc/default/grub</code>. Dies ist eine Heuristik, kein Bootloadernachweis. Änderung nach Neustart aktiv; tatsächliche Gruppen prüfen.",
|
"body": "Betrachtet IOMMU nur dann als aktiv, wenn der laufende Kernel <code>intel_iommu=on</code> oder <code>amd_iommu=on</code> 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 <code>iommu=pt</code> ergänzen. Die Heuristik für die Bootdatei nutzt <code>/etc/kernel/cmdline</code>, wenn dort ein ZFS-Root-Marker wie <code>root=ZFS=</code> vorhanden ist, sonst <code>/etc/default/grub</code>. 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?",
|
"tipTitle": "Nachinstallation bereits eingerichtet?",
|
||||||
"tipBody": "Bei bereits konfiguriertem und aktivem <postLink>VFIO-IOMMU-Support</postLink> besteht die Prüfung. Eine Einstellung für den nächsten Start allein beweist keinen aktiven Zustand.",
|
"tipBody": "Bei bereits konfiguriertem und aktivem <postLink>VFIO-IOMMU-Support</postLink> besteht die Prüfung. Eine Einstellung für den nächsten Start allein beweist keinen aktiven Zustand.",
|
||||||
"imageAlt": "Liste der erkannten GPUs mit Hersteller- und PCI-Adresse"
|
"imageAlt": "Liste der erkannten GPUs mit Hersteller- und PCI-Adresse"
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
"<strong>Nur eine GPU.</strong> Die lokale Konsole kann durch VFIO ihre Ausgabe verlieren. Zuvor SSH- oder Webzugriff von einem anderen Rechner prüfen.",
|
"<strong>Nur eine GPU.</strong> Die lokale Konsole kann durch VFIO ihre Ausgabe verlieren. Zuvor SSH- oder Webzugriff von einem anderen Rechner prüfen.",
|
||||||
"<strong>AMD-Reset-Richtlinie.</strong> Liest <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU oder dedizierte Karte ohne FLR wird <em>durch die Assistentenrichtlinie blockiert</em>; unbekannter Untertyp ohne FLR verlangt Bestätigung. Dies beweist keine generelle technische Unmöglichkeit.",
|
"<strong>AMD-Reset-Richtlinie.</strong> Liest <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU oder dedizierte Karte ohne FLR wird <em>durch die Assistentenrichtlinie blockiert</em>; unbekannter Untertyp ohne FLR verlangt Bestätigung. Dies beweist keine generelle technische Unmöglichkeit.",
|
||||||
"<strong>D3cold-Zustand.</strong> AMD-Karten mit gemeldetem <code>D3cold</code> werden wegen möglicher Aktivierungsfehler blockiert. Stromversorgung und Firmware prüfen.",
|
"<strong>D3cold-Zustand.</strong> AMD-Karten mit gemeldetem <code>D3cold</code> werden wegen möglicher Aktivierungsfehler blockiert. Stromversorgung und Firmware prüfen.",
|
||||||
"<strong>IOMMU-Gruppe.</strong> Liest <code>/sys/kernel/iommu_groups/</code> und plant <em>alle Nicht-Brücken-Geräte</em> ein, auch Netzwerk- oder Speichercontroller. Vor Bestätigung prüfen. Bei ausstehendem IOMMU-Neustart wird zunächst nur die GPU-Funktion eingeplant; Isolation danach prüfen."
|
"<strong>Analyse der IOMMU-Gruppe.</strong> Liest <code>/sys/kernel/iommu_groups/</code> und nimmt <em>alle Nicht-Brücken-Geräte</em> in den VM-Plan auf, möglicherweise auch Netzwerk- oder Speichercontroller. Das Skript listet sie nicht auf; prüfen Sie die Gruppe daher vor der Bestätigung selbst. 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": "<strong>Zugehöriges Audio.</strong> Zwei Fälle je nach Controllerposition:",
|
"audioIntro": "<strong>Zugehöriges Audio.</strong> Zwei Fälle je nach Controllerposition:",
|
||||||
"audioDgpu": "<strong>Dedizierte GPU:</strong> HDMI-Audio liegt oft auf Funktion <code>.1</code> desselben PCI-Slots und wird bei Erkennung aufgenommen. Nutzt der Host es bisher, verliert er durch die VM-Reservierung den Zugriff.",
|
"audioDgpu": "<strong>Dedizierte GPU:</strong> HDMI-Audio liegt oft auf Funktion <code>.1</code> desselben PCI-Slots und wird bei Erkennung aufgenommen. Nutzt der Host es bisher, verliert er durch die VM-Reservierung den Zugriff.",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"items": [
|
"items": [
|
||||||
"<strong>GPU verfügbar.</strong> Fortfahren ohne alte Zuweisung zu entfernen.",
|
"<strong>GPU verfügbar.</strong> Fortfahren ohne alte Zuweisung zu entfernen.",
|
||||||
"<strong>Anderer VM zugewiesen.</strong> Quell-VM zuerst stoppen. Entweder <em>Einträge behalten und Autostart deaktivieren</em> oder <em>Einträge entfernen und Autostart behalten</em>. Bei bestehendem <code>vfio-pci</code> ohne nötige Hoständerungen kann VM→VM ohne Host-Neustart erfolgen.",
|
"<strong>Anderer VM zugewiesen.</strong> Quell-VM zuerst stoppen. Entweder <em>Einträge behalten und Autostart deaktivieren</em> oder <em>Einträge entfernen und Autostart behalten</em>. Bei bestehendem <code>vfio-pci</code> ohne nötige Hoständerungen kann VM→VM ohne Host-Neustart erfolgen.",
|
||||||
"<strong>Von LXC genutzt.</strong> Bei normalen Containern <em>Konfiguration behalten und Autostart deaktivieren</em> oder <em>Geräte und alte <code>lxc.cgroup2.devices.allow</code>/<code>lxc.mount.entry</code>-Regeln entfernen, Autostart behalten</em>. OCI behält die Konfiguration und wird ohne Autostart gestoppt; GPU unter Apps entfernen. Familienbasierte Erkennung kann weitere Karten erfassen."
|
"<strong>Von LXC genutzte GPU.</strong> Bei normalen Containern wählen Sie <em>GPU-Konfiguration behalten und Autostart deaktivieren</em> oder <em>GPU-Gerätekonfiguration entfernen und Autostart behalten</em>. Das Entfernen löscht die <code>devN</code>-Einträge und bei AMD/Intel auch alte <code>/dev/dri</code>-Regeln <code>lxc.mount.entry</code> und <code>lxc.cgroup2.devices.allow</code>. 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",
|
"imageAlt": "Dialogangebot zum Entfernen des GPU aus einem LXC, bevor es dem VM zugewiesen wird",
|
||||||
"smartTitle": "Zugehöriges Audio beim Entfernen prüfen",
|
"smartTitle": "Zugehöriges Audio beim Entfernen prüfen",
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
},
|
},
|
||||||
"summary": {
|
"summary": {
|
||||||
"title": "Überprüfung der Bestätigungszusammenfassung",
|
"title": "Überprüfung der Bestätigungszusammenfassung",
|
||||||
"body": "Endplan und besonders alle IOMMU-Mitglieder prüfen; bei Fehlern abbrechen. Das verhindert die Hauptänderungen, macht aber eine zuvor bestätigte IOMMU-Bootänderung nicht rückgängig.",
|
"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, nicht jedes Mitglied; prüfen Sie die Gruppe daher vorher. 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"
|
"imageAlt": "Übersicht geplanter Änderungen an Host und VM"
|
||||||
},
|
},
|
||||||
"hostApply": {
|
"hostApply": {
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"Schreibt <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> und <code>kvm.conf</code> mit <code>allow_unsafe_interrupts=1</code> und <code>ignore_msrs=1</code>. Kompatibilitätseinstellungen des Skripts, keine allgemeinen Windows/macOS-Anforderungen; unsichere Interrupts schwächen den Interrupt-Remapping-Schutz.",
|
"Schreibt <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> und <code>kvm.conf</code> mit <code>allow_unsafe_interrupts=1</code> und <code>ignore_msrs=1</code>. Kompatibilitätseinstellungen des Skripts, keine allgemeinen Windows/macOS-Anforderungen; unsichere Interrupts schwächen den Interrupt-Remapping-Schutz.",
|
||||||
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Diese herstellerweiten Regeln können andere Karten mit demselben Treiber betreffen. Das Modul <code>nvidia</code> wird <strong>nur</strong> über <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> blockiert, wenn <em>alle</em> NVIDIA-Karten für VFIO erfasst sind.",
|
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Diese herstellerweiten Regeln können andere Karten mit demselben Treiber betreffen. Das Modul <code>nvidia</code> wird <strong>nur</strong> über <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> blockiert, wenn <em>alle</em> NVIDIA-Karten für VFIO erfasst sind.",
|
||||||
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Nur NVIDIA.</strong> Setzt <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> bei PCI ADD für erfasste BDFs einschließlich betroffener IOMMU-Gruppenfunktionen. Außerhalb kann <code>nvidia</code> erhalten bleiben. BDF-Regeln teilen keine Hardware-IOMMU-Gruppe.",
|
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Nur NVIDIA.</strong> Setzt <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> bei PCI ADD für erfasste BDFs einschließlich betroffener IOMMU-Gruppenfunktionen. Außerhalb kann <code>nvidia</code> erhalten bleiben. BDF-Regeln teilen keine Hardware-IOMMU-Gruppe.",
|
||||||
"<strong>Nur AMD.</strong> Versucht ROM aus <code>/sys/bus/pci/.../rom</code> oder ACPI VFCT nach <code>/usr/share/kvm/vbios_<card>.bin</code> zu sichern. Bei Erfolg nutzt die VM <code>romfile=</code>. Ein gültiges ROM garantiert keine Initialisierung.",
|
"<strong>Nur AMD.</strong> Versucht, das ROM aus <code>/sys/bus/pci/.../rom</code> oder ACPI VFCT nach <code>/usr/share/kvm/vbios_<vendor>_<device>.bin</code> zu sichern. Bei Erfolg nutzt die VM <code>romfile=</code>. Ein gültiger Dump garantiert keine erfolgreiche GPU-Initialisierung.",
|
||||||
"<strong>Nur NVIDIA.</strong> Stoppt und deaktiviert <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> nur, wenn alle NVIDIA-Karten VFIO zugeordnet sind. Im Mischbetrieb bleiben Dienste und <code>nvidia</code> für native Karten erhalten.",
|
"<strong>Nur NVIDIA.</strong> Stoppt und deaktiviert <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> nur, wenn alle NVIDIA-Karten VFIO zugeordnet sind. Im Mischbetrieb bleiben Dienste und <code>nvidia</code> für native Karten erhalten.",
|
||||||
"<code>update-initramfs -u -k all</code> — läuft nur, wenn einer der oben genannten tatsächlich geändert."
|
"<code>update-initramfs -u -k all</code> — läuft nur, wenn einer der oben genannten tatsächlich geändert."
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Funktionsweise",
|
"title": "Funktionsweise",
|
||||||
"body": "Fügt <code>dev<N></code> zu <code>/etc/pve/lxc/<ctid>.conf</code> für passende <code>/dev/dri/*</code>-, <code>/dev/kfd</code>- oder <code>/dev/nvidia*</code>-Geräte hinzu. Startet den Container, installiert distributionsabhängige Bibliotheken und gleicht <code>video</code> und <code>render</code> ab. Beschleunigung erfordert kompatible Hardware, Bibliotheken und App-Einstellungen."
|
"body": "Fügt <code>dev<N></code>-Einträge zu <code>/etc/pve/lxc/<ctid>.conf</code> für passende <code>/dev/dri/*</code>-, <code>/dev/kfd</code>- oder <code>/dev/nvidia*</code>-Knoten hinzu. Startet den Container, installiert Userspace-Pakete für dessen Distribution und gleicht bei Intel/AMD die Gruppen <code>video</code> und <code>render</code> ab. Die Anwendungsbeschleunigung erfordert weiterhin kompatible Hardware, Bibliotheken und App-Einstellungen."
|
||||||
},
|
},
|
||||||
"compare": {
|
"compare": {
|
||||||
"heading": "LXC-Freigabe und VM-Passthrough im Vergleich",
|
"heading": "LXC-Freigabe und VM-Passthrough im Vergleich",
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
},
|
},
|
||||||
"pickCt": {
|
"pickCt": {
|
||||||
"title": "LXC-Container auswählen",
|
"title": "LXC-Container auswählen",
|
||||||
"body": "Listet geeignete LXC-Container mit ID und Name. OCI-Container fehlen bewusst; ihre Geräte werden unter Apps im OCI-Manager geändert. Der Container wird zur Konfiguration gestoppt, zur Installation gestartet und normalerweise in den Ausgangszustand zurückversetzt.",
|
"body": "Listet geeignete LXC-Container mit ID und Name; OCI-Container sind ausgeschlossen und nutzen für Geräte OCI manager Apps. Der Container wird gestoppt, falls er läuft, zur Treiberinstallation gestartet und normalerweise in seinen ursprünglichen Zustand (laufend/gestoppt) zurückversetzt.",
|
||||||
"imageAlt": "Auswahl eines vorhandenen LXC-Containers"
|
"imageAlt": "Auswahl eines vorhandenen LXC-Containers"
|
||||||
},
|
},
|
||||||
"selectGpu": {
|
"selectGpu": {
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
},
|
},
|
||||||
"applyConfig": {
|
"applyConfig": {
|
||||||
"title": "Anwenden der LXC-Konfigurationsänderungen",
|
"title": "Anwenden der LXC-Konfigurationsänderungen",
|
||||||
"body1": "Stoppt den Container und bearbeitet <code>/etc/pve/lxc/<ctid>.conf</code>. <code>dev<N></code>-Einträge enthalten die gewählten GIDs. Der <code>dev:</code>-Mechanismus ersetzt hier manuelle <code>lxc.mount.entry</code>-Regeln. Ergebnis und Rechte prüfen.",
|
"body1": "Stoppt den Container, falls er läuft, und bearbeitet <code>/etc/pve/lxc/<ctid>.conf</code>. Nummerierte <code>dev<N></code>-Einträge enthalten die Host-GID von <code>video</code> oder <code>render</code>. Vorhandene <code>lxc.mount.entry</code>-Bind-Zeilen für <code>/dev/dri</code> werden durch <code>dev:</code>-Einträge ersetzt; prüfen Sie die resultierende Konfiguration und die Rechte.",
|
||||||
"body2": "Beispiel nach Intel + NVIDIA auf demselben Container:"
|
"body2": "Beispiel nach Intel + NVIDIA auf demselben Container:"
|
||||||
},
|
},
|
||||||
"installDrivers": {
|
"installDrivers": {
|
||||||
@@ -127,14 +127,14 @@
|
|||||||
},
|
},
|
||||||
"alignGids": {
|
"alignGids": {
|
||||||
"title": "GIDs ausrichten und Zustand wiederherstellen",
|
"title": "GIDs ausrichten und Zustand wiederherstellen",
|
||||||
"body1": "Liest die Host-GIDs von <code>video</code> und <code>render</code>; 44/104 sind nur Ersatzwerte. Passt <code>/etc/group</code> im Container an. <code>video:44</code> und <code>render:104</code> sind Beispiele, keine universellen IDs. App-Mitgliedschaft und wirksame Rechte prüfen.",
|
"body1": "Liest bei Intel/AMD die Host-GIDs von <code>video</code> und <code>render</code>, wobei 44/104 nur als Ersatzwerte dienen, und passt dann <code>/etc/group</code> im Container entsprechend an; reine NVIDIA-Durchläufe überspringen diesen Schritt. Einträge wie <code>video:44</code> und <code>render:104</code> 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."
|
"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": {
|
"vendors": {
|
||||||
"heading": "Herstellerspezifische Hinweise",
|
"heading": "Herstellerspezifische Hinweise",
|
||||||
"intelHeading": "Intel iGPU",
|
"intelHeading": "Intel iGPU",
|
||||||
"intelBody": "Intel-Beschleunigung mit <em>Quick Sync</em> hängt von Generation, Codecs und App-Einstellungen ab. Teilt vorhandene Knoten wie <code>/dev/dri/card0</code> und <code>/dev/dri/renderD128</code>; Nummern können abweichen. Der native Host-Treiber, etwa <code>i915</code>, muss sie bereitstellen.",
|
"intelBody": "Intel-Medienbeschleunigung, einschließlich <em>Quick Sync</em>, hängt von GPU-Generation, Codecs und App-Einstellungen ab. Das Skript teilt diejenigen von <code>/dev/dri/card0</code>, <code>card1</code>, <code>renderD128</code> und <code>renderD129</code>, die vorhanden sind; andere Knotennummern werden nicht hinzugefügt. Der Host muss sie bereits über seinen nativen Treiber bereitstellen, etwa <code>i915</code>.",
|
||||||
"amdHeading": "AMD",
|
"amdHeading": "AMD",
|
||||||
"amdBody": "AMD nutzt DRI für Mesa/VA-API. Vorhandenes <code>/dev/kfd</code> wird ebenfalls geteilt. ROCm/OpenCL benötigt unterstützte Hardware und passende Bibliotheken; die Gerätefreigabe installiert keinen vollständigen ROCm-Stack.",
|
"amdBody": "AMD nutzt DRI für Mesa/VA-API. Vorhandenes <code>/dev/kfd</code> wird ebenfalls geteilt. ROCm/OpenCL benötigt unterstützte Hardware und passende Bibliotheken; die Gerätefreigabe installiert keinen vollständigen ROCm-Stack.",
|
||||||
"nvidiaHeading": "NVIDIA",
|
"nvidiaHeading": "NVIDIA",
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
"title": "PCIe: Kernelmodule gasket und apex über DKMS",
|
"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.",
|
"body": "Läuft nur bei erkannter PCIe-/M.2-Coral. Die Module werden für den aktuell laufenden Host-Kernel gebaut.",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>Bereinigung.</strong> Bei einem fehlerhaften Paketstatus einer früheren <code>gasket-dkms</code>-Installation versucht das Skript, sie vor dem Neubau zu entfernen.",
|
"<strong>Bereinigung.</strong> Ein vorhandenes <code>gasket-dkms</code>-Paket wird vor dem Neubau entfernt; befindet es sich in einem fehlerhaften Paketstatus, erzwingt das Skript dessen Entfernung und Purge.",
|
||||||
"<strong>Build-Abhängigkeiten:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
"<strong>Build-Abhängigkeiten:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
||||||
],
|
],
|
||||||
"cloneIntro": "<strong>Treiberquellen klonen.</strong> Bevorzugt <feranickLink>feranick/gasket-driver</feranickLink>, ersatzweise <googleLink>google/gasket-driver</googleLink>. Ein erfolgreicher Build setzt Kernelkompatibilität voraus. Die Google-Quellen erhalten folgende versionsabhängige Patches:",
|
"cloneIntro": "<strong>Treiberquellen klonen.</strong> Bevorzugt <feranickLink>feranick/gasket-driver</feranickLink>, ersatzweise <googleLink>google/gasket-driver</googleLink>. Ein erfolgreicher Build setzt Kernelkompatibilität voraus. Die Google-Quellen erhalten folgende versionsabhängige Patches:",
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
"Entfernt <code>gasket-dkms</code>, <code>libedgetpu1-std</code> und <code>libedgetpu1-max</code> vollständig und führt <code>apt-get autoremove --purge</code> aus.",
|
"Entfernt <code>gasket-dkms</code>, <code>libedgetpu1-std</code> und <code>libedgetpu1-max</code> vollständig und führt <code>apt-get autoremove --purge</code> aus.",
|
||||||
"Löscht <code>/etc/udev/rules.d/99-coral-apex.rules</code> und stellt die Standardgruppe in <code>60-gasket-dkms.rules</code> wieder her, falls vorhanden.",
|
"Löscht <code>/etc/udev/rules.d/99-coral-apex.rules</code> und stellt die Standardgruppe in <code>60-gasket-dkms.rules</code> wieder her, falls vorhanden.",
|
||||||
"Prüft die zusätzlichen Mitglieder von <code>apex</code>. <strong>Bei leerer Liste</strong> wird die Gruppe zu entfernen versucht, sonst bleibt <code>apex</code> mit Mitgliederhinweis erhalten. Benutzer mit dieser primären Gruppe werden nicht vollständig geprüft.",
|
"Prüft die zusätzlichen Mitglieder von <code>apex</code>. <strong>Bei leerer Liste</strong> wird die Gruppe zu entfernen versucht, sonst bleibt <code>apex</code> mit Mitgliederhinweis erhalten. Benutzer mit dieser primären Gruppe werden nicht vollständig geprüft.",
|
||||||
"Entfernt alte Repository-Einträge wie <code>/etc/apt/sources.list.d/coral-edgetpu.list</code> und Schlüsselbunde namens <code>coral-edgetpu-archive-keyring.gpg</code>. Der aktuelle Schlüsselbund /etc/apt/keyrings/coral-edgetpu.gpg bleibt erhalten.",
|
"Entfernt die Repository-Liste <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, die alte <code>coral-cloud.list</code> und alte Schlüsselbunde namens <code>coral-edgetpu-archive-keyring.gpg</code>. Der aktuelle Schlüsselbund unter <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> wird durch diesen Ablauf nicht entfernt.",
|
||||||
"Bietet einen Neustart <strong>nur bei zuvor installiertem PCIe-Pfad</strong> an, um noch aktive Module zu entladen. Reine USB-Entfernung braucht keinen Neustart."
|
"Bietet einen Neustart <strong>nur bei zuvor installiertem PCIe-Pfad</strong> an, um noch aktive Module zu entladen. Reine USB-Entfernung braucht keinen Neustart."
|
||||||
],
|
],
|
||||||
"lxcWarnTitle": "LXC Container mit apex Passthrough",
|
"lxcWarnTitle": "LXC Container mit apex Passthrough",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Funktionsweise",
|
"title": "Funktionsweise",
|
||||||
"body": "Erkennt die GPU und bietet gepflegte Zweige mit ihrer PCI-ID. Sperrt <code>nouveau</code>, lädt den offiziellen <code>.run</code>-Installer, nutzt DKMS und installiert <code>nvidia-persistenced</code> sowie udev-Regeln; NVENC-Patch optional. Build-Prüfungen beziehen sich auf den laufenden Kernel; erfolgreiche Kompilierung garantiert nicht jede App. NVIDIA-LXC können passende Userspace-Bibliotheken erhalten."
|
"body": "ProxMenux erkennt die GPU und bietet gepflegte NVIDIA-Zweige an, die ihre PCI-ID aufführen. Es sperrt <code>nouveau</code>, lädt den offiziellen <code>.run</code>-Installer, nutzt DKMS, installiert <code>nvidia-persistenced</code>, 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": {
|
"who": {
|
||||||
"heading": "Für wen ist das?",
|
"heading": "Für wen ist das?",
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Neustart",
|
"title": "Neustart",
|
||||||
"body": "Erstellt <code>initramfs</code> für alle Kernel neu und bietet den Neustart an. <strong>Diesen Neustart einplanen</strong>, um Module und nouveau-Konfiguration beim Start zu prüfen, auch wenn der Treiber vorher bereits antwortet."
|
"body": "Nach der Treiberinstallation erstellt das Skript <code>initramfs</code> für alle Kernel neu; sein letzter Schritt bietet einen Neustart an. <strong>Diesen Neustart einplanen</strong>, 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": {
|
"reinstallUninstall": {
|
||||||
@@ -102,8 +102,8 @@
|
|||||||
"uninstallHeading": "Deinstallieren – Was entfernt wird",
|
"uninstallHeading": "Deinstallieren – Was entfernt wird",
|
||||||
"uninstallIntro": "Nach einer Ja/Nein-Bestätigung werden folgende Komponenten entfernt:",
|
"uninstallIntro": "Nach einer Ja/Nein-Bestätigung werden folgende Komponenten entfernt:",
|
||||||
"uninstallItems": [
|
"uninstallItems": [
|
||||||
"Führt <code>nvidia-uninstall --silent</code> für die <code>.run</code>-Installation aus, stoppt und deaktiviert <code>nvidia-persistenced</code> und <code>nvidia-powerd</code> und versucht, <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> und <code>nvidia</code> zu entladen. NVIDIA-LXC sind betroffen; aktive Clients können das Entladen verhindern.",
|
"Stoppt und deaktiviert <code>nvidia-persistenced</code> und <code>nvidia-powerd</code>, versucht, <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> und <code>nvidia</code> zu entladen, und führt dann <code>nvidia-uninstall --silent</code> für die <code>.run</code>-Installation aus. Von NVIDIA abhängige LXC-Workloads sind betroffen; aktive Clients können das Entladen verhindern.",
|
||||||
"Führt <code>apt purge</code> auf <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> und <code>libcudnn*</code> aus, entfernt den DKMS-Quellbaum und den <code>/opt/nvidia</code>-.run-Installer-Cache.",
|
"Führt <code>apt purge</code> auf <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> und <code>libcudnn*</code> aus, entfernt den DKMS-Quellbaum sowie die Ordner <code>nvidia-persistenced</code> und <code>nvidia-patch</code> unter <code>/opt/nvidia</code>.",
|
||||||
"Entfernt die Module-Load Config (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) 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 die Module-Load Config (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) 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 <code>/etc/udev/rules.d/70-nvidia.rules</code> und setzt den NVENC-Status im verwalteten Installationsverzeichnis auf <em>removed</em>; es gibt keine separate Statusdatei.",
|
"Entfernt <code>/etc/udev/rules.d/70-nvidia.rules</code> und setzt den NVENC-Status im verwalteten Installationsverzeichnis auf <em>removed</em>; es gibt keine separate Statusdatei.",
|
||||||
"Erstellt <code>initramfs</code> für alle Kernel neu, führt passend zur Bootkonfiguration <code>proxmox-boot-tool refresh</code> aus und fragt nach einem Neustart."
|
"Erstellt <code>initramfs</code> für alle Kernel neu, führt passend zur Bootkonfiguration <code>proxmox-boot-tool refresh</code> aus und fragt nach einem Neustart."
|
||||||
|
|||||||
@@ -42,21 +42,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"situation": "Ich möchte alle Gastzuweisungen dieser GPU entfernen.",
|
"situation": "Ich möchte alle Gastzuweisungen dieser GPU entfernen.",
|
||||||
"use": "Der LXC-Modus gibt die GPU an den Host-Treiber zurück; entfernen Sie Gastzuweisungen über die jeweiligen Konfliktoptionen. Die GPU bleibt dabei an einen Treiber gebunden."
|
"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": {
|
"prereqs": {
|
||||||
"title": "Vorbereitung",
|
"title": "Vorbereitung",
|
||||||
"assigned": "<strong>Bereits zugewiesene GPU</strong> in einer VM über VFIO oder in einem LXC. Für die erste Zuweisung GPU zu VM / LXC hinzufügen verwenden.",
|
"assigned": "<strong>Bereits zugewiesene GPU</strong> in einer VM über VFIO oder in einem LXC. Für die erste Zuweisung GPU zu VM / LXC hinzufügen verwenden.",
|
||||||
"iommu": "<strong>IOMMU muss auf dem Host aktiv sein</strong> beim Wechsel <em>in</em> den VM-Modus. Firmware und Kernel-Unterstützung sind entscheidend; explizite Parameter sind nicht immer nötig. Bei Bedarf versucht das Skript <code>intel_iommu=on iommu=pt</code> oder <code>amd_iommu=on</code> über den aktiven Bootweg mit <code>proxmox-boot-tool refresh</code> oder <code>update-grub</code>. Warnungen prüfen und bei Aufforderung neu starten.",
|
"iommu": "<strong>IOMMU muss auf dem Host aktiv sein</strong> beim Wechsel <em>in</em> den VM-Modus. Firmware-Einstellungen und Kernel-Unterstützung sind beide entscheidend. Fehlt <code>intel_iommu=on</code> oder <code>amd_iommu=on</code> im laufenden Kernel, fügt das Skript es mit <code>iommu=pt</code> zu <code>/etc/kernel/cmdline</code> (ZFS-Root-Marker) oder <code>/etc/default/grub</code> hinzu und führt dann <code>proxmox-boot-tool refresh</code> oder <code>update-grub</code> aus. Prüfen Sie eventuelle Warnungen und starten Sie bei Aufforderung neu.",
|
||||||
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
||||||
"reboot": "<strong>Neustart einplanen.</strong> Dauerhafte Treiber- und Bootänderungen können ein neues initramfs und einen Neustart erfordern. Das Skript fragt am Ende danach.",
|
"reboot": "<strong>Neustart einplanen.</strong> Dauerhafte Treiber- und Bootänderungen können ein neues initramfs und einen Neustart erfordern. Das Skript fragt am Ende danach.",
|
||||||
"knowList": "<strong>Betroffene VMs und LXC kennen.</strong> Das Skript erkennt Verweise und fragt nach dem Umgang mit jedem Gast; eine bekannte Liste erleichtert die Prüfung."
|
"knowList": "<strong>Betroffene VMs und LXC kennen.</strong> Das Skript erkennt Verweise und fragt nach dem Umgang mit jedem Gast; eine bekannte Liste erleichtert die Prüfung."
|
||||||
},
|
},
|
||||||
"blocklist": {
|
"blocklist": {
|
||||||
"title": "Nicht alle GPUs können sicher an einen VM übergeben werden",
|
"title": "Nicht alle GPUs können sicher an einen VM übergeben werden",
|
||||||
"body": "Das Skript sperrt den VM-Modus für bestimmte Geräte-IDs, darunter <code>8086:5a84</code> und <code>8086:5a85</code>, gemäß seiner Kompatibilitätsrichtlinie. Bei Übereinstimmung erscheint eine Warnung. Die Liste verhindert nicht den Wechsel <em>in</em> den LXC-Modus; andere Prüfungen gelten weiterhin."
|
"body": "Das Skript sperrt den VM-Modus für die Geräte-IDs <code>8086:5a84</code> und <code>8086:5a85</code> 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 <em>in</em> den LXC-Modus; andere Prüfungen können weiterhin gelten."
|
||||||
},
|
},
|
||||||
"running": {
|
"running": {
|
||||||
"heading": "Skript ausführen",
|
"heading": "Skript ausführen",
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
"intro": "Basierend auf dem aktuellen Modus schlägt das Skript das Gegenteil als Ziel vor:",
|
"intro": "Basierend auf dem aktuellen Modus schlägt das Skript das Gegenteil als Ziel vor:",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>VM → LXC:</strong> Entfernt die Bindung an <code>vfio-pci</code>, damit der native Treiber (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) die GPU nutzen kann. Bei NVIDIA werden die betreffenden BDF-Einträge aus <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> für den nächsten Start entfernt.",
|
"<strong>VM → LXC:</strong> Entfernt die Bindung an <code>vfio-pci</code>, damit der native Treiber (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) die GPU nutzen kann. Bei NVIDIA werden die betreffenden BDF-Einträge aus <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> für den nächsten Start entfernt.",
|
||||||
"<strong>LXC → VM:</strong> bereitet die Bindung an <code>vfio-pci</code> vor. AMD / Intel sperrt den nativen Treiber und nutzt <code>options vfio-pci ids=…</code>. Bei NVIDIA wird <code>nvidia</code> <strong>nicht</strong> global gesperrt: BDF-Regeln setzen <code>driver_override=vfio-pci</code> für Geräte der betroffenen IOMMU-Gruppen. NVIDIA-GPUs außerhalb dieser Gruppen können <code>nvidia</code> behalten. Alle Gruppenmitglieder prüfen."
|
"<strong>LXC → VM:</strong> bereitet die Bindung an <code>vfio-pci</code> vor. AMD / Intel sperren den nativen Treiber und nutzen <code>options vfio-pci ids=…</code>. Bei NVIDIA wird <code>nvidia</code> nur dann global gesperrt, wenn jede NVIDIA-GPU des Hosts in VFIO ist; andernfalls setzen Regeln pro BDF <code>driver_override=vfio-pci</code> für die Geräte der betroffenen IOMMU-Gruppen, und NVIDIA-GPUs außerhalb dieser Gruppen behalten <code>nvidia</code>. Prüfen Sie vor dem Wechsel alle Gruppenmitglieder."
|
||||||
],
|
],
|
||||||
"outro": "Bestätigen Sie die Richtung oder brechen Sie ab."
|
"outro": "Bestätigen Sie die Richtung oder brechen Sie ab."
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"prereqs": {
|
"prereqs": {
|
||||||
"title": "Before you start",
|
"title": "Before you start",
|
||||||
"drivers": "<strong>Prepare the Coral device on the host</strong>. M.2 / PCIe needs the host driver loaded; USB needs device access and suitable permissions. See <hostLink>Install Coral TPU on the Host</hostLink>. The app runtime must be available inside the container.",
|
"drivers": "<strong>Prepare the Coral device on the host</strong>. M.2 / PCIe needs the host driver loaded; USB needs device access and suitable permissions. See <hostLink>Install Coral TPU on the Host</hostLink>. The script installs the app runtime in Debian/Ubuntu containers; other distributions must provide it separately.",
|
||||||
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||||
"container": "<strong>An existing LXC container</strong>, ideally running a <strong>Debian / Ubuntu</strong>-based distro — the in-container runtime install uses <code>apt-get</code>. <strong>Non-Debian containers</strong> (Alpine, Arch, RHEL, SUSE…) are still supported in <strong>passthrough-only mode</strong>: the script detects the distro and offers a prompt to skip the <code>libedgetpu</code> APT install while still writing the device passthrough config — useful for app containers that bundle the runtime themselves (e.g. the Frigate Docker image).",
|
"container": "<strong>An existing LXC container</strong>, ideally running a <strong>Debian / Ubuntu</strong>-based distro — the in-container runtime install uses <code>apt-get</code>. <strong>Non-Debian containers</strong> (Alpine, Arch, RHEL, SUSE…) are still supported in <strong>passthrough-only mode</strong>: the script detects the distro and offers a prompt to skip the <code>libedgetpu</code> 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": "<strong>Be OK with a brief downtime</strong> of the container. The script stops it to apply config changes, then starts it back up to install drivers inside. No host reboot needed."
|
"downtime": "<strong>Be OK with a brief downtime</strong> of the container. The script stops it to apply config changes, then starts it back up to install drivers inside. No host reboot needed."
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"gpuHint": {
|
"gpuHint": {
|
||||||
"title": "GPU passthrough suggestion (optional)",
|
"title": "GPU passthrough suggestion (optional)",
|
||||||
"body": "If a GPU is detected but not configured for this container, a dialog recommends <lxcGpuLink>Add GPU to LXC</lxcGpuLink> for hardware video decoding, such as Quick Sync, VA-API or NVDEC. It asks whether to continue with Coral only: Yes continues TPU setup; No exits so you can configure the GPU first."
|
"body": "If a GPU is detected but not configured for this container, a dialog recommends <lxcGpuLink>Add GPU to LXC</lxcGpuLink> for hardware video decoding, such as Quick Sync, VA-API or NVENC. It asks whether to continue with Coral only: Yes continues TPU setup; No exits so you can configure the GPU first."
|
||||||
},
|
},
|
||||||
"usb": {
|
"usb": {
|
||||||
"title": "Write LXC config — USB path",
|
"title": "Write LXC config — USB path",
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
"pcie": {
|
"pcie": {
|
||||||
"title": "Write LXC config — M.2 / PCIe path",
|
"title": "Write LXC config — M.2 / PCIe path",
|
||||||
"body1": "If a M.2 / PCIe Coral is present on the host and <code>/dev/apex_0</code> exists (the apex kernel module is loaded), the script uses the modern Proxmox <code>dev</code> API which handles cgroup2 permissions automatically for both privileged and unprivileged containers:",
|
"body1": "If a M.2 / PCIe Coral is present on the host and <code>/dev/apex_0</code> exists (the apex kernel module is loaded), the script uses the modern Proxmox <code>dev</code> API which handles cgroup2 permissions automatically for both privileged and unprivileged containers:",
|
||||||
"body2": "If <code>/dev/apex_0</code> is absent after <hostLink>Install Coral on Host</hostLink>, the script writes a classic cgroup2 configuration and optional bind mount with <code>create=file</code>. This does not itself create a working device:",
|
"body2": "If <code>/dev/apex_0</code> is absent after <hostLink>Install Coral on Host</hostLink>, the script writes a bind mount with <code>create=file</code> and, only when the apex major number is listed in <code>/proc/devices</code>, a classic cgroup2 rule. Neither creates a working device:",
|
||||||
"rebootTitle": "Reboot the host first if you just installed Coral drivers",
|
"rebootTitle": "Reboot the host first if you just installed Coral drivers",
|
||||||
"rebootBody": "The fallback mount does not load the host <code>apex</code> 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."
|
"rebootBody": "The fallback mount does not load the host <code>apex</code> 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."
|
||||||
},
|
},
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
"troubleshoot": {
|
"troubleshoot": {
|
||||||
"heading": "Troubleshooting",
|
"heading": "Troubleshooting",
|
||||||
"apexTitle": "Container started but /dev/apex_0 missing inside",
|
"apexTitle": "Container started but /dev/apex_0 missing inside",
|
||||||
"apexBody": "Check the host driver first: <code>lsmod | grep apex</code>. If missing, try <code>modprobe apex</code> or reboot after driver installation. Once <code>/dev/apex_0</code> exists on the host, verify the LXC device entry and restart the container with <code>pct stop <ctid> && pct start <ctid></code>.",
|
"apexBody": "Check the host driver first: <code>lsmod | grep apex</code>. If missing, try <code>modprobe apex</code> or reboot after driver installation. Once <code>/dev/apex_0</code> 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 <code>pct stop <ctid> && pct start <ctid></code>.",
|
||||||
"replugTitle": "USB Coral disappears after replug in a different port",
|
"replugTitle": "USB Coral disappears after replug in a different port",
|
||||||
"replugBody": "This is exactly why the script mounts <code>/dev/bus/usb</code> instead of the <code>/dev/coral</code> symlink. If you're hitting this, check your LXC config has <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> and not a reference to <code>/dev/coral</code> directly. Old configs from earlier script versions may need updating — re-run the script on the same container and the config gets refreshed.",
|
"replugBody": "This is exactly why the script mounts <code>/dev/bus/usb</code> instead of the <code>/dev/coral</code> symlink. If you're hitting this, check your LXC config has <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> and not a reference to <code>/dev/coral</code> 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",
|
"alpineTitle": "Alpine / Arch / RHEL / SUSE container — runtime not installed",
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
"heading": "Walking through the flow",
|
"heading": "Walking through the flow",
|
||||||
"detect": {
|
"detect": {
|
||||||
"title": "Detect GPUs and check IOMMU",
|
"title": "Detect GPUs and check IOMMU",
|
||||||
"body": "Checks active IOMMU support, not just explicit kernel parameters. If inactive, a separately confirmed step can add <code>intel_iommu=on</code> or <code>amd_iommu=on</code> with <code>iommu=pt</code>. Its boot-file heuristic uses <code>/etc/kernel/cmdline</code> when a ZFS-root marker such as <code>root=ZFS=</code> exists there; otherwise it uses <code>/etc/default/grub</code>. That heuristic is not proof of the actual bootloader. Newly configured IOMMU takes effect after reboot; inspect the real groups afterwards.",
|
"body": "Treats IOMMU as active only when the running kernel has <code>intel_iommu=on</code> or <code>amd_iommu=on</code> 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 <code>iommu=pt</code>. Its boot-file heuristic uses <code>/etc/kernel/cmdline</code> when a ZFS-root marker such as <code>root=ZFS=</code> exists there; otherwise it uses <code>/etc/default/grub</code>. 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?",
|
"tipTitle": "Already ran post-install?",
|
||||||
"tipBody": "If <postLink>VFIO IOMMU support</postLink> was previously configured and is active in the running kernel, this check passes. A saved next-boot setting alone does not prove it is active.",
|
"tipBody": "If <postLink>VFIO IOMMU support</postLink> was previously configured and is active in the running kernel, this check passes. A saved next-boot setting alone does not prove it is active.",
|
||||||
"imageAlt": "List of detected GPUs with vendor and PCI address"
|
"imageAlt": "List of detected GPUs with vendor and PCI address"
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
"<strong>Single-GPU warning.</strong> If this is the only GPU in the host, you get a scary dialog reminding you that after reboot the console goes dark — make sure you have SSH or web-UI access from another machine.",
|
"<strong>Single-GPU warning.</strong> If this is the only GPU in the host, you get a scary dialog reminding you that after reboot the console goes dark — make sure you have SSH or web-UI access from another machine.",
|
||||||
"<strong>AMD reset policy.</strong> Reads <code>/sys/bus/pci/devices/<pci>/reset_method</code>. An APU or dedicated card without FLR is <em>blocked by this assistant’s policy</em>; an unknown subtype without FLR requires an explicit override. This does not establish universal hardware impossibility.",
|
"<strong>AMD reset policy.</strong> Reads <code>/sys/bus/pci/devices/<pci>/reset_method</code>. An APU or dedicated card without FLR is <em>blocked by this assistant’s policy</em>; an unknown subtype without FLR requires an explicit override. This does not establish universal hardware impossibility.",
|
||||||
"<strong>Not in D3cold.</strong> Some AMD cards report <code>D3cold</code> power state while idle, which makes them invisible during VM startup. Blocked until you wake the GPU.",
|
"<strong>Not in D3cold.</strong> Some AMD cards report <code>D3cold</code> power state while idle, which makes them invisible during VM startup. Blocked until you wake the GPU.",
|
||||||
"<strong>IOMMU group analysis.</strong> Reads <code>/sys/kernel/iommu_groups/</code> and includes <em>all non-bridge members</em> in the VM plan, possibly network or storage controllers. Inspect them before confirming. If IOMMU is pending reboot, real groups are unavailable and the plan initially contains only the selected GPU function; verify isolation after reboot."
|
"<strong>IOMMU group analysis.</strong> Reads <code>/sys/kernel/iommu_groups/</code> and includes <em>all non-bridge members</em> in the VM plan, possibly network or storage controllers. The script does not list them, so inspect the group yourself before confirming. If IOMMU is pending reboot, real groups are unavailable and the plan initially contains only the selected GPU function; verify isolation after reboot."
|
||||||
],
|
],
|
||||||
"audioIntro": "<strong>Audio companion.</strong> Two paths, depending on where the audio lives:",
|
"audioIntro": "<strong>Audio companion.</strong> Two paths, depending on where the audio lives:",
|
||||||
"audioDgpu": "<strong>Discrete GPU:</strong> HDMI audio often occupies function <code>.1</code> 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.",
|
"audioDgpu": "<strong>Discrete GPU:</strong> HDMI audio often occupies function <code>.1</code> 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.",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"items": [
|
"items": [
|
||||||
"<strong>GPU is free.</strong> Nothing to do, continue.",
|
"<strong>GPU is free.</strong> Nothing to do, continue.",
|
||||||
"<strong>GPU is in a different VM.</strong> 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: <em>Keep GPU in the source VM's config but disable Start on boot</em>, or <em>Remove the GPU lines from the source VM's config and keep Start on boot</em>. A fast-path also exists: if the GPU is already bound to <code>vfio-pci</code> and the source VM is a plain VM→VM swap, no host reconfiguration is done and no reboot is needed.",
|
"<strong>GPU is in a different VM.</strong> 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: <em>Keep GPU in the source VM's config but disable Start on boot</em>, or <em>Remove the GPU lines from the source VM's config and keep Start on boot</em>. A fast-path also exists: if the GPU is already bound to <code>vfio-pci</code> and the source VM is a plain VM→VM swap, no host reconfiguration is done and no reboot is needed.",
|
||||||
"<strong>GPU used by LXC.</strong> For ordinary containers, choose <em>keep the GPU configuration and disable Start on boot</em> or <em>remove GPU device configuration, including legacy <code>lxc.cgroup2.devices.allow</code>/<code>lxc.mount.entry</code> rules, and keep Start on boot</em>. 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."
|
"<strong>GPU used by LXC.</strong> For ordinary containers, choose <em>keep the GPU configuration and disable Start on boot</em> or <em>remove GPU device configuration and keep Start on boot</em>. Removal deletes the <code>devN</code> entries and, for AMD/Intel, also legacy <code>/dev/dri</code> <code>lxc.mount.entry</code> and <code>lxc.cgroup2.devices.allow</code> 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",
|
"imageAlt": "Dialog offering to remove the GPU from an LXC before assigning it to the VM",
|
||||||
"smartTitle": "Audio siblings are cleaned up smartly too",
|
"smartTitle": "Audio siblings are cleaned up smartly too",
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
},
|
},
|
||||||
"summary": {
|
"summary": {
|
||||||
"title": "Review the confirmation summary",
|
"title": "Review the confirmation summary",
|
||||||
"body": "Review the final host and VM plan, especially every IOMMU-group member, and cancel if it is wrong. This stops the main changes; it does not undo an earlier separately confirmed IOMMU boot-configuration change.",
|
"body": "Review the final host and VM plan and cancel if it is wrong. It shows the IOMMU group and its device count, not each member, so check the group beforehand. 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"
|
"imageAlt": "Summary dialog listing host changes (VFIO/blacklist files) and VM config changes (hostpci lines) before applying"
|
||||||
},
|
},
|
||||||
"hostApply": {
|
"hostApply": {
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"Writes <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> and <code>kvm.conf</code> with <code>allow_unsafe_interrupts=1</code> and <code>ignore_msrs=1</code>. These are compatibility settings applied by the script, not universal Windows/macOS requirements; unsafe interrupts relax interrupt-remapping protection.",
|
"Writes <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> and <code>kvm.conf</code> with <code>allow_unsafe_interrupts=1</code> and <code>ignore_msrs=1</code>. These are compatibility settings applied by the script, not universal Windows/macOS requirements; unsafe interrupts relax interrupt-remapping protection.",
|
||||||
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. These vendor-wide entries may affect other cards using the same driver. The proprietary <code>nvidia</code> module is blocked <strong>only</strong> through <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> when <em>all</em> host NVIDIA cards are tracked for VFIO.",
|
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. These vendor-wide entries may affect other cards using the same driver. The proprietary <code>nvidia</code> module is blocked <strong>only</strong> through <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> when <em>all</em> host NVIDIA cards are tracked for VFIO.",
|
||||||
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>NVIDIA only.</strong> The udev rule sets <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> at PCI ADD for tracked BDFs, including affected IOMMU-group functions. Cards outside those groups can retain the <code>nvidia</code> driver. Per-BDF policy does not split a hardware IOMMU group.",
|
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>NVIDIA only.</strong> The udev rule sets <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> at PCI ADD for tracked BDFs, including affected IOMMU-group functions. Cards outside those groups can retain the <code>nvidia</code> driver. Per-BDF policy does not split a hardware IOMMU group.",
|
||||||
"<strong>AMD only.</strong> Attempts a ROM dump from <code>/sys/bus/pci/.../rom</code> or ACPI VFCT into <code>/usr/share/kvm/vbios_<card>.bin</code>. If successful, the VM uses <code>romfile=</code>. A valid dump does not guarantee successful GPU initialization.",
|
"<strong>AMD only.</strong> Attempts a ROM dump from <code>/sys/bus/pci/.../rom</code> or ACPI VFCT into <code>/usr/share/kvm/vbios_<vendor>_<device>.bin</code>. If successful, the VM uses <code>romfile=</code>. A valid dump does not guarantee successful GPU initialization.",
|
||||||
"<strong>NVIDIA only.</strong> Host NVIDIA services (<code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code>) are stopped and disabled only when every NVIDIA GPU is assigned to VFIO. With a mixed host they remain active, together with the <code>nvidia</code> module, for the GPU(s) that stay native.",
|
"<strong>NVIDIA only.</strong> Host NVIDIA services (<code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code>) are stopped and disabled only when every NVIDIA GPU is assigned to VFIO. With a mixed host they remain active, together with the <code>nvidia</code> module, for the GPU(s) that stay native.",
|
||||||
"<code>update-initramfs -u -k all</code> — only runs if any of the above actually changed."
|
"<code>update-initramfs -u -k all</code> — only runs if any of the above actually changed."
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "What this does",
|
"title": "What this does",
|
||||||
"body": "Adds <code>dev<N></code> entries to <code>/etc/pve/lxc/<ctid>.conf</code> for applicable <code>/dev/dri/*</code>, <code>/dev/kfd</code> or <code>/dev/nvidia*</code> nodes. It starts the container and installs userspace packages for its distribution, aligning <code>video</code> and <code>render</code> groups. Application acceleration still requires compatible hardware, libraries and app configuration."
|
"body": "Adds <code>dev<N></code> entries to <code>/etc/pve/lxc/<ctid>.conf</code> for applicable <code>/dev/dri/*</code>, <code>/dev/kfd</code> or <code>/dev/nvidia*</code> nodes. It starts the container, installs userspace packages for its distribution and, for Intel/AMD, aligns the <code>video</code> and <code>render</code> groups. Application acceleration still requires compatible hardware, libraries and app configuration."
|
||||||
},
|
},
|
||||||
"compare": {
|
"compare": {
|
||||||
"heading": "LXC sharing vs VM passthrough",
|
"heading": "LXC sharing vs VM passthrough",
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
},
|
},
|
||||||
"pickCt": {
|
"pickCt": {
|
||||||
"title": "Pick an LXC container",
|
"title": "Pick an LXC container",
|
||||||
"body": "Lists eligible LXC containers by ID and name; OCI containers are excluded and use OCI manager Apps for devices. A running container is stopped for configuration, started for driver installation and normally returned to its original running/stopped state.",
|
"body": "Lists eligible LXC containers by ID and name; OCI containers are excluded and use OCI manager Apps for devices. The container is stopped if running, started for driver installation and normally returned to its original running/stopped state.",
|
||||||
"imageAlt": "Dialog listing existing LXC containers to choose from"
|
"imageAlt": "Dialog listing existing LXC containers to choose from"
|
||||||
},
|
},
|
||||||
"selectGpu": {
|
"selectGpu": {
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
},
|
},
|
||||||
"applyConfig": {
|
"applyConfig": {
|
||||||
"title": "Apply the LXC config changes",
|
"title": "Apply the LXC config changes",
|
||||||
"body1": "Stops the container if running and edits <code>/etc/pve/lxc/<ctid>.conf</code>. Numbered <code>dev<N></code> entries carry the chosen group IDs. The <code>dev:</code> device mechanism replaces manual <code>lxc.mount.entry</code> rules in this assistant; inspect the resulting configuration and permissions.",
|
"body1": "Stops the container if running and edits <code>/etc/pve/lxc/<ctid>.conf</code>. Numbered <code>dev<N></code> entries carry the host <code>video</code> or <code>render</code> GID. Existing <code>lxc.mount.entry</code> bind lines for <code>/dev/dri</code> are replaced by <code>dev:</code> entries; inspect the resulting configuration and permissions.",
|
||||||
"body2": "Example after Intel + NVIDIA on the same container:"
|
"body2": "Example after Intel + NVIDIA on the same container:"
|
||||||
},
|
},
|
||||||
"installDrivers": {
|
"installDrivers": {
|
||||||
@@ -127,14 +127,14 @@
|
|||||||
},
|
},
|
||||||
"alignGids": {
|
"alignGids": {
|
||||||
"title": "Align GIDs and restore state",
|
"title": "Align GIDs and restore state",
|
||||||
"body1": "Reads the host GIDs for <code>video</code> and <code>render</code>, using 44/104 only as fallbacks, then edits <code>/etc/group</code> inside the container to match. Entries such as <code>video:44</code> and <code>render:104</code> are examples, not universal IDs. Verify app membership and effective device permissions.",
|
"body1": "For Intel/AMD, reads the host GIDs for <code>video</code> and <code>render</code>, using 44/104 only as fallbacks, then edits <code>/etc/group</code> inside the container to match; NVIDIA-only runs skip this step. Entries such as <code>video:44</code> and <code>render:104</code> 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."
|
"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": {
|
"vendors": {
|
||||||
"heading": "Vendor-specific notes",
|
"heading": "Vendor-specific notes",
|
||||||
"intelHeading": "Intel iGPU",
|
"intelHeading": "Intel iGPU",
|
||||||
"intelBody": "Intel media acceleration, including <em>Quick Sync</em>, depends on GPU generation, codecs and app configuration. The script shares existing nodes such as <code>/dev/dri/card0</code> and <code>/dev/dri/renderD128</code>; numbering can differ. The host must already provide them through its native driver, for example <code>i915</code>.",
|
"intelBody": "Intel media acceleration, including <em>Quick Sync</em>, depends on GPU generation, codecs and app configuration. The script shares whichever of <code>/dev/dri/card0</code>, <code>card1</code>, <code>renderD128</code> and <code>renderD129</code> exist; other node numbers are not added. The host must already provide them through its native driver, for example <code>i915</code>.",
|
||||||
"amdHeading": "AMD",
|
"amdHeading": "AMD",
|
||||||
"amdBody": "AMD uses DRI nodes for Mesa/VA-API. If the host exposes <code>/dev/kfd</code>, 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.",
|
"amdBody": "AMD uses DRI nodes for Mesa/VA-API. If the host exposes <code>/dev/kfd</code>, 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",
|
"nvidiaHeading": "NVIDIA",
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
"title": "PCIe path — gasket + apex kernel modules via DKMS",
|
"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.",
|
"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": [
|
"items": [
|
||||||
"<strong>Cleanup.</strong> If a previous <code>gasket-dkms</code> installation left a broken package state, the script attempts to purge it before rebuilding.",
|
"<strong>Cleanup.</strong> Any existing <code>gasket-dkms</code> package is removed before rebuilding; if it is in a broken package state, the script forces its removal and purge.",
|
||||||
"<strong>Install build deps:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
"<strong>Install build deps:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
||||||
],
|
],
|
||||||
"cloneIntro": "<strong>Clone the driver source.</strong> Prefers <feranickLink>feranick/gasket-driver</feranickLink>, falling back to <googleLink>google/gasket-driver</googleLink> if unavailable. A successful build still depends on kernel compatibility. The Google fallback receives these version-dependent patches:",
|
"cloneIntro": "<strong>Clone the driver source.</strong> Prefers <feranickLink>feranick/gasket-driver</feranickLink>, falling back to <googleLink>google/gasket-driver</googleLink> if unavailable. A successful build still depends on kernel compatibility. The Google fallback receives these version-dependent patches:",
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
"Purges the <code>gasket-dkms</code>, <code>libedgetpu1-std</code> and <code>libedgetpu1-max</code> apt packages, then runs <code>apt-get autoremove --purge</code>.",
|
"Purges the <code>gasket-dkms</code>, <code>libedgetpu1-std</code> and <code>libedgetpu1-max</code> apt packages, then runs <code>apt-get autoremove --purge</code>.",
|
||||||
"Deletes the udev rule <code>/etc/udev/rules.d/99-coral-apex.rules</code> ProxMenux wrote; restores the upstream <code>60-gasket-dkms.rules</code> group to its default if it's still present.",
|
"Deletes the udev rule <code>/etc/udev/rules.d/99-coral-apex.rules</code> ProxMenux wrote; restores the upstream <code>60-gasket-dkms.rules</code> group to its default if it's still present.",
|
||||||
"Checks the supplementary member list of <code>apex</code>. <strong>If that list is empty</strong>, it attempts group removal; otherwise it retains <code>apex</code> and lists its members. This is not a complete check of primary-group users.",
|
"Checks the supplementary member list of <code>apex</code>. <strong>If that list is empty</strong>, it attempts group removal; otherwise it retains <code>apex</code> and lists its members. This is not a complete check of primary-group users.",
|
||||||
"Removes legacy repository entries including <code>/etc/apt/sources.list.d/coral-edgetpu.list</code> and old keyrings named <code>coral-edgetpu-archive-keyring.gpg</code>. The current keyring at /etc/apt/keyrings/coral-edgetpu.gpg is not removed by this sequence.",
|
"Removes the repository list <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, the legacy <code>coral-cloud.list</code> and old keyrings named <code>coral-edgetpu-archive-keyring.gpg</code>. The current keyring at <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> is not removed by this sequence.",
|
||||||
"Prompts for a reboot at the end <strong>only if the PCIe path was installed</strong> — the cleanest way to flush the kernel modules. USB-only uninstalls don't need one."
|
"Prompts for a reboot at the end <strong>only if the PCIe path was installed</strong> — the cleanest way to flush the kernel modules. USB-only uninstalls don't need one."
|
||||||
],
|
],
|
||||||
"lxcWarnTitle": "LXC containers with apex passthrough",
|
"lxcWarnTitle": "LXC containers with apex passthrough",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "What this does",
|
"title": "What this does",
|
||||||
"body": "ProxMenux detects the GPU and offers maintained NVIDIA branches listing its PCI ID. It blacklists <code>nouveau</code>, downloads the official <code>.run</code> installer, uses DKMS, installs <code>nvidia-persistenced</code> and udev rules, and offers an optional NVENC patch. Build checks assess the running kernel; successful compilation does not guarantee every app works. Existing NVIDIA LXCs can receive matching userspace libraries."
|
"body": "ProxMenux detects the GPU and offers maintained NVIDIA branches listing its PCI ID. It blacklists <code>nouveau</code>, downloads the official <code>.run</code> installer, uses DKMS, installs <code>nvidia-persistenced</code>, 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": {
|
"who": {
|
||||||
"heading": "Who is this for?",
|
"heading": "Who is this for?",
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Reboot",
|
"title": "Reboot",
|
||||||
"body": "Finally, the script rebuilds <code>initramfs</code> for all kernels and offers a reboot. <strong>Plan that restart</strong> to verify the persistent module and nouveau configuration on a fresh boot, even when the new driver already responds before reboot."
|
"body": "After the driver installation, the script rebuilds <code>initramfs</code> for all kernels; its last step offers a reboot. <strong>Plan that restart</strong> to verify the persistent module and nouveau configuration on a fresh boot, even when the new driver already responds before reboot."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"reinstallUninstall": {
|
"reinstallUninstall": {
|
||||||
@@ -102,8 +102,8 @@
|
|||||||
"uninstallHeading": "Uninstall — what gets removed",
|
"uninstallHeading": "Uninstall — what gets removed",
|
||||||
"uninstallIntro": "After a yes/no confirmation, the uninstall removes the following driver components:",
|
"uninstallIntro": "After a yes/no confirmation, the uninstall removes the following driver components:",
|
||||||
"uninstallItems": [
|
"uninstallItems": [
|
||||||
"First runs <code>nvidia-uninstall --silent</code> for the <code>.run</code> installation, then stops and disables <code>nvidia-persistenced</code> and <code>nvidia-powerd</code>. It attempts to unload <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> and <code>nvidia</code>. NVIDIA-dependent LXC workloads are affected; active clients can prevent unloading.",
|
"Stops and disables <code>nvidia-persistenced</code> and <code>nvidia-powerd</code>, attempts to unload <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> and <code>nvidia</code>, then runs <code>nvidia-uninstall --silent</code> for the <code>.run</code> installation. NVIDIA-dependent LXC workloads are affected; active clients can prevent unloading.",
|
||||||
"Runs <code>apt purge</code> on <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> and <code>libcudnn*</code>, removes the DKMS source tree and the <code>/opt/nvidia</code> .run installer cache.",
|
"Runs <code>apt purge</code> on <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> and <code>libcudnn*</code>, removes the DKMS source tree and the <code>nvidia-persistenced</code> and <code>nvidia-patch</code> folders under <code>/opt/nvidia</code>.",
|
||||||
"Removes the modules-load config (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) 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 modules-load config (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) 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 (<code>/etc/udev/rules.d/70-nvidia.rules</code>) and clears the NVENC patch state (a field in the ProxMenux managed-installs registry, set to <em>removed</em> — no separate file to delete).",
|
"Removes the udev rules (<code>/etc/udev/rules.d/70-nvidia.rules</code>) and clears the NVENC patch state (a field in the ProxMenux managed-installs registry, set to <em>removed</em> — no separate file to delete).",
|
||||||
"Rebuilds <code>initramfs</code> for all kernels, runs <code>proxmox-boot-tool refresh</code> on systemd-boot hosts, and prompts for a reboot to finalise."
|
"Rebuilds <code>initramfs</code> for all kernels, runs <code>proxmox-boot-tool refresh</code> on systemd-boot hosts, and prompts for a reboot to finalise."
|
||||||
|
|||||||
@@ -42,21 +42,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"situation": "I just want to completely unbind a GPU from everything.",
|
"situation": "I just want to completely unbind a GPU from everything.",
|
||||||
"use": "LXC mode restores host-driver ownership; removing guest assignments still needs the relevant conflict-policy choices. This does not leave the GPU unbound from every driver."
|
"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": {
|
"prereqs": {
|
||||||
"title": "Before you start",
|
"title": "Before you start",
|
||||||
"assigned": "<strong>A GPU already assigned</strong> — 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.",
|
"assigned": "<strong>A GPU already assigned</strong> — 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": "<strong>IOMMU must be active on the host</strong> when switching <em>to</em> VM mode. Firmware settings and kernel support both matter; explicit arguments are not always necessary. If needed, the script attempts <code>intel_iommu=on iommu=pt</code> or <code>amd_iommu=on</code> using the active boot setup, with <code>proxmox-boot-tool refresh</code> or <code>update-grub</code>. Check any warnings and reboot when prompted.",
|
"iommu": "<strong>IOMMU must be active on the host</strong> when switching <em>to</em> VM mode. Firmware settings and kernel support both matter. If <code>intel_iommu=on</code> or <code>amd_iommu=on</code> is missing from the running kernel, the script adds it with <code>iommu=pt</code> to <code>/etc/kernel/cmdline</code> (ZFS-root marker) or <code>/etc/default/grub</code>, then runs <code>proxmox-boot-tool refresh</code> or <code>update-grub</code>. Check any warnings and reboot when prompted.",
|
||||||
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
||||||
"reboot": "<strong>Plan for a reboot.</strong> Persistent driver and boot changes may require rebuilding initramfs and rebooting. The script presents a reboot prompt at the end.",
|
"reboot": "<strong>Plan for a reboot.</strong> Persistent driver and boot changes may require rebuilding initramfs and rebooting. The script presents a reboot prompt at the end.",
|
||||||
"knowList": "<strong>Know which VMs / LXCs are using the GPU.</strong> The script will find them and ask what to do with each, but it's faster if you already know the list."
|
"knowList": "<strong>Know which VMs / LXCs are using the GPU.</strong> The script will find them and ask what to do with each, but it's faster if you already know the list."
|
||||||
},
|
},
|
||||||
"blocklist": {
|
"blocklist": {
|
||||||
"title": "Not all GPUs are safe to pass to a VM",
|
"title": "Not all GPUs are safe to pass to a VM",
|
||||||
"body": "The script blocks VM mode for certain device IDs, including <code>8086:5a84</code> and <code>8086:5a85</code>, under its compatibility policy. If a selected GPU matches, it displays a warning. This blocklist does not prevent switching <em>to</em> LXC mode; other checks can still apply."
|
"body": "The script blocks VM mode for device IDs <code>8086:5a84</code> and <code>8086:5a85</code> 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 <em>to</em> LXC mode; other checks can still apply."
|
||||||
},
|
},
|
||||||
"running": {
|
"running": {
|
||||||
"heading": "Running the script",
|
"heading": "Running the script",
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
"intro": "Based on the current mode, the script proposes the opposite as target:",
|
"intro": "Based on the current mode, the script proposes the opposite as target:",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>VM → LXC:</strong> unbind from <code>vfio-pci</code>, let the native driver (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) reclaim the card so LXCs can share it. On NVIDIA, the per-BDF entry is removed from <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> so the nvidia module reclaims the GPU after reboot.",
|
"<strong>VM → LXC:</strong> unbind from <code>vfio-pci</code>, let the native driver (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) reclaim the card so LXCs can share it. On NVIDIA, the per-BDF entry is removed from <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> so the nvidia module reclaims the GPU after reboot.",
|
||||||
"<strong>LXC → VM:</strong> prepares <code>vfio-pci</code> ownership. AMD / Intel use native-driver blacklisting and <code>options vfio-pci ids=…</code>. For NVIDIA, <code>nvidia</code> is <strong>not</strong> globally blacklisted: per-BDF rules set <code>driver_override=vfio-pci</code> for the affected IOMMU-group devices. NVIDIA GPUs outside those groups can retain <code>nvidia</code>. Review every group member before switching."
|
"<strong>LXC → VM:</strong> prepares <code>vfio-pci</code> ownership. AMD / Intel use native-driver blacklisting and <code>options vfio-pci ids=…</code>. For NVIDIA, <code>nvidia</code> is globally blacklisted only when every host NVIDIA GPU is in VFIO; otherwise per-BDF rules set <code>driver_override=vfio-pci</code> for the affected IOMMU-group devices, and NVIDIA GPUs outside those groups keep <code>nvidia</code>. Review every group member before switching."
|
||||||
],
|
],
|
||||||
"outro": "Confirm the direction or cancel."
|
"outro": "Confirm the direction or cancel."
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"header": {
|
"header": {
|
||||||
"title": "Añadir Coral TPU a LXC",
|
"title": "Añadir Coral TPU a LXC",
|
||||||
"description": "Comparte una Coral USB Accelerator o M.2 / Mini-PCIe con un LXC. ProxMenux configura el contenedor y el runtime Edge TPU. Esta opción solo gestiona la TPU: para Quick Sync, VA-API o NVENC, ejecuta también Añadir GPU a LXC.",
|
"description": "Comparte una Coral USB Accelerator o M.2 / Mini-PCIe con un LXC. ProxMenux configura el contenedor y el runtime Edge TPU. Esta opción solo gestiona la TPU: para Quick Sync, VA-API o NVENC, ejecuta también Añadir GPU a LXC.",
|
||||||
"section": "Hardware: GPUs y Coral-TPU"
|
"section": "Hardware: GPU y Coral-TPU"
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Qué hace",
|
"title": "Qué hace",
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"prereqs": {
|
"prereqs": {
|
||||||
"title": "Antes de empezar",
|
"title": "Antes de empezar",
|
||||||
"drivers": "<strong>Prepara la Coral en el host</strong>. M.2 / PCIe necesita el controlador cargado; USB, acceso al dispositivo y permisos adecuados. Consulta <hostLink>Instalar Coral TPU en el host</hostLink>. El runtime de la aplicación debe estar dentro del contenedor.",
|
"drivers": "<strong>Prepara la Coral en el host</strong>. M.2 / PCIe necesita el controlador cargado; USB, acceso al dispositivo y permisos adecuados. Consulta <hostLink>Instalar Coral TPU en el host</hostLink>. El script instala el runtime de la aplicación en contenedores Debian/Ubuntu; en otras distribuciones hay que instalarlo aparte.",
|
||||||
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||||
"container": "<strong>Un LXC existente</strong>, preferiblemente basado en <strong>Debian / Ubuntu</strong>: la instalación usa <code>apt-get</code>. Los <strong>contenedores de otras distribuciones</strong> pueden usar el <strong>modo de solo acceso al dispositivo</strong>, que omite la instalación APT de <code>libedgetpu</code>. Resulta útil si la aplicación ya incluye ese runtime, como la imagen Docker de Frigate.",
|
"container": "<strong>Un LXC existente</strong>, preferiblemente basado en <strong>Debian / Ubuntu</strong>: la instalación usa <code>apt-get</code>. Los <strong>contenedores de otras distribuciones</strong> pueden usar el <strong>modo de solo acceso al dispositivo</strong>, que omite la instalación APT de <code>libedgetpu</code>. Resulta útil si la aplicación ya incluye ese runtime, como la imagen Docker de Frigate.",
|
||||||
"downtime": "<strong>Prepara una breve interrupción</strong> del contenedor. El script lo detiene para cambiar la configuración y lo arranca para instalar el runtime. No necesita reiniciar el host para estos cambios."
|
"downtime": "<strong>Prepara una breve interrupción</strong> del contenedor. El script lo detiene para cambiar la configuración y lo arranca para instalar el runtime. No necesita reiniciar el host para estos cambios."
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"gpuHint": {
|
"gpuHint": {
|
||||||
"title": "Sugerencia opcional de acceso a GPU",
|
"title": "Sugerencia opcional de acceso a GPU",
|
||||||
"body": "Si detecta GPU pero no está configurada para el contenedor, recomienda <lxcGpuLink>Añadir GPU a LXC</lxcGpuLink> para decodificación de vídeo (Quick Sync, VA-API o NVDEC). Pregunta si quieres continuar solo con Coral: Sí continúa; No sale para que configures antes la GPU."
|
"body": "Si detecta GPU pero no está configurada para el contenedor, recomienda <lxcGpuLink>Añadir GPU a LXC</lxcGpuLink> para decodificación de vídeo (Quick Sync, VA-API o NVENC). Pregunta si quieres continuar solo con Coral: Sí continúa; No sale para que configures antes la GPU."
|
||||||
},
|
},
|
||||||
"usb": {
|
"usb": {
|
||||||
"title": "Configurar el acceso USB del LXC",
|
"title": "Configurar el acceso USB del LXC",
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
"pcie": {
|
"pcie": {
|
||||||
"title": "Configurar el acceso M.2 / PCIe del LXC",
|
"title": "Configurar el acceso M.2 / PCIe del LXC",
|
||||||
"body1": "Si detecta una Coral M.2 / PCIe y existe <code>/dev/apex_0</code>, usa la API <code>dev</code> de Proxmox para gestionar cgroup2 tanto en LXC privilegiados como sin privilegios:",
|
"body1": "Si detecta una Coral M.2 / PCIe y existe <code>/dev/apex_0</code>, usa la API <code>dev</code> de Proxmox para gestionar cgroup2 tanto en LXC privilegiados como sin privilegios:",
|
||||||
"body2": "Si acabas de ejecutar <hostLink>Instalar Coral en el host</hostLink> y aún no existe <code>/dev/apex_0</code>, utiliza la configuración clásica cgroup2 y un montaje opcional con <code>create=file</code>. Esto no crea un dispositivo funcional por sí solo:",
|
"body2": "Si acabas de ejecutar <hostLink>Instalar Coral en el host</hostLink> y aún no existe <code>/dev/apex_0</code>, escribe un montaje con <code>create=file</code> y, solo si el número mayor de apex aparece en <code>/proc/devices</code>, una regla clásica cgroup2. Ninguno de los dos crea un dispositivo funcional:",
|
||||||
"rebootTitle": "Reinicia el host primero si acabas de instalar los drivers de Coral",
|
"rebootTitle": "Reinicia el host primero si acabas de instalar los drivers de Coral",
|
||||||
"rebootBody": "El montaje alternativo no carga <code>apex</code> en el host. Carga el controlador o reinicia tras instalarlo y comprueba el dispositivo. Cuando esté listo, ejecuta otra vez el script para aplicar la entrada moderna y reinicia el contenedor."
|
"rebootBody": "El montaje alternativo no carga <code>apex</code> en el host. Carga el controlador o reinicia tras instalarlo y comprueba el dispositivo. Cuando esté listo, ejecuta otra vez el script para aplicar la entrada moderna y reinicia el contenedor."
|
||||||
},
|
},
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
"troubleshoot": {
|
"troubleshoot": {
|
||||||
"heading": "Solución de problemas",
|
"heading": "Solución de problemas",
|
||||||
"apexTitle": "El LXC arranca pero falta /dev/apex_0",
|
"apexTitle": "El LXC arranca pero falta /dev/apex_0",
|
||||||
"apexBody": "Comprueba el controlador del host: <code>lsmod | grep apex</code>. Si falta, prueba <code>modprobe apex</code> o reinicia tras instalarlo. Cuando exista <code>/dev/apex_0</code> en el host, verifica la configuración del LXC y reinícialo con <code>pct stop <ctid> && pct start <ctid></code>.",
|
"apexBody": "Comprueba el controlador del host: <code>lsmod | grep apex</code>. Si falta, prueba <code>modprobe apex</code> o reinicia tras instalarlo. Cuando exista <code>/dev/apex_0</code> en el host, verifica la configuración del LXC (vuelve a ejecutar el script si solo se escribieron las entradas alternativas) y reinícialo con <code>pct stop <ctid> && pct start <ctid></code>.",
|
||||||
"replugTitle": "Coral USB desaparece al conectarla a otro puerto",
|
"replugTitle": "Coral USB desaparece al conectarla a otro puerto",
|
||||||
"replugBody": "Comprueba que el LXC monta <code>/dev/bus/usb</code> y no el enlace <code>/dev/coral</code>. La configuración debe incluir <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code>, sin depender directamente de <code>/dev/coral</code>. Vuelve a ejecutar el script si conservas una configuración antigua.",
|
"replugBody": "Comprueba que el LXC monta <code>/dev/bus/usb</code> y no el enlace <code>/dev/coral</code>. La configuración debe incluir <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code>, sin depender directamente de <code>/dev/coral</code>. Vuelve a ejecutar el script si conservas una configuración antigua.",
|
||||||
"alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime sin instalar",
|
"alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime sin instalar",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"header": {
|
"header": {
|
||||||
"title": "Añadir GPU a VM (Passthrough)",
|
"title": "Añadir GPU a VM (Passthrough)",
|
||||||
"description": "Detecta GPU Intel, AMD o NVIDIA y prepara acceso directo desde una VM. Revisa IOMMU y los dispositivos asociados, configura VFIO y la VM y aplica sus reglas de compatibilidad. Comprueba siempre todos los dispositivos afectados.",
|
"description": "Detecta GPU Intel, AMD o NVIDIA y prepara acceso directo desde una VM. Revisa IOMMU y los dispositivos asociados, configura VFIO y la VM y aplica sus reglas de compatibilidad. Comprueba siempre todos los dispositivos afectados.",
|
||||||
"section": "Hardware: GPUs y Coral-TPU"
|
"section": "Hardware: GPU y Coral-TPU"
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Qué hace",
|
"title": "Qué hace",
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
"heading": "Proceso paso a paso",
|
"heading": "Proceso paso a paso",
|
||||||
"detect": {
|
"detect": {
|
||||||
"title": "Detectar GPUs y comprobar IOMMU",
|
"title": "Detectar GPUs y comprobar IOMMU",
|
||||||
"body": "Comprueba IOMMU activo, no solo parámetros. Con confirmación aparte puede añadir <code>intel_iommu=on</code> o <code>amd_iommu=on</code> con <code>iommu=pt</code>. Elige <code>/etc/kernel/cmdline</code> si encuentra una marca ZFS como <code>root=ZFS=</code>; si no, <code>/etc/default/grub</code>. Es una heurística, no una prueba del cargador. Reinicia para activar el cambio y revisa los grupos reales.",
|
"body": "Considera IOMMU activo solo si el kernel en ejecución tiene <code>intel_iommu=on</code> o <code>amd_iommu=on</code> y existen grupos IOMMU. Si el parámetro ya está guardado para el próximo arranque, continúa en modo pendiente de reinicio; si no, con confirmación aparte puede añadirlo con <code>iommu=pt</code>. Elige <code>/etc/kernel/cmdline</code> si encuentra una marca ZFS como <code>root=ZFS=</code>; si no, <code>/etc/default/grub</code>. Es una heurística, no una prueba del cargador. Reinicia para activar el cambio y revisa los grupos reales.",
|
||||||
"tipTitle": "¿Ya configuraste la postinstalación?",
|
"tipTitle": "¿Ya configuraste la postinstalación?",
|
||||||
"tipBody": "Si el <postLink>soporte VFIO IOMMU</postLink> ya está configurado y activo en el kernel, supera la comprobación. Guardarlo para el próximo arranque no prueba que esté activo ahora.",
|
"tipBody": "Si el <postLink>soporte VFIO IOMMU</postLink> ya está configurado y activo en el kernel, supera la comprobación. Guardarlo para el próximo arranque no prueba que esté activo ahora.",
|
||||||
"imageAlt": "Lista de GPUs detectadas con fabricante y dirección PCI"
|
"imageAlt": "Lista de GPUs detectadas con fabricante y dirección PCI"
|
||||||
@@ -58,10 +58,10 @@
|
|||||||
"<strong>Una sola GPU.</strong> La consola local puede perder su salida al reservarla para VFIO. Comprueba antes el acceso SSH o web desde otro equipo.",
|
"<strong>Una sola GPU.</strong> La consola local puede perder su salida al reservarla para VFIO. Comprueba antes el acceso SSH o web desde otro equipo.",
|
||||||
"<strong>Política de reinicio AMD.</strong> Lee <code>/sys/bus/pci/devices/<pci>/reset_method</code>. Una APU o dedicada sin FLR queda <em>bloqueada por la política del asistente</em>; un subtipo desconocido sin FLR exige confirmación. No demuestra que sea imposible en todo entorno.",
|
"<strong>Política de reinicio AMD.</strong> Lee <code>/sys/bus/pci/devices/<pci>/reset_method</code>. Una APU o dedicada sin FLR queda <em>bloqueada por la política del asistente</em>; un subtipo desconocido sin FLR exige confirmación. No demuestra que sea imposible en todo entorno.",
|
||||||
"<strong>Estado D3cold.</strong> El asistente bloquea tarjetas AMD que indican <code>D3cold</code> por riesgo de fallo al activarlas. Revisa alimentación y firmware antes de continuar.",
|
"<strong>Estado D3cold.</strong> El asistente bloquea tarjetas AMD que indican <code>D3cold</code> por riesgo de fallo al activarlas. Revisa alimentación y firmware antes de continuar.",
|
||||||
"<strong>Grupo IOMMU.</strong> Lee <code>/sys/kernel/iommu_groups/</code> e incluye <em>todos los miembros que no sean puentes</em>, incluso controladores de red o discos. Revísalos antes de confirmar. Si falta reiniciar para activar IOMMU, solo puede planificar inicialmente la función GPU; comprueba el aislamiento después."
|
"<strong>Grupo IOMMU.</strong> Lee <code>/sys/kernel/iommu_groups/</code> e incluye <em>todos los miembros que no sean puentes</em>, incluso controladores de red o discos. El script no los muestra, así que revisa el grupo antes de confirmar. Si falta reiniciar para activar IOMMU, solo puede planificar inicialmente la función GPU; comprueba el aislamiento después."
|
||||||
],
|
],
|
||||||
"audioIntro": "<strong>Audio asociado.</strong> Dos casos según dónde esté el controlador:",
|
"audioIntro": "<strong>Audio asociado.</strong> Dos casos según dónde esté el controlador:",
|
||||||
"audioDgpu": "<strong>GPU dedicada:</strong> el audio HDMI suele ocupar la función <code>.1</code> de la misma ranura y se incluye al detectarlo. Si el host lo usaba, pierde acceso al reservarlo para la VM.",
|
"audioDgpu": "<strong>GPU dedicada:</strong> el audio HDMI suele ocupar la función <code>.1</code> del mismo slot y se incluye al detectarlo. Si el host lo usaba, pierde acceso al reservarlo para la VM.",
|
||||||
"audioIgpu": "<strong>Sin función de audio <code>.1</code>:</strong> puede estar en otro dispositivo, como <code>00:1f.3</code>. Lista controladores y sus drivers, por ejemplo <code>snd_hda_intel</code>. Por defecto no selecciona <strong>ninguno</strong>; elige solo los necesarios."
|
"audioIgpu": "<strong>Sin función de audio <code>.1</code>:</strong> puede estar en otro dispositivo, como <code>00:1f.3</code>. Lista controladores y sus drivers, por ejemplo <code>snd_hda_intel</code>. Por defecto no selecciona <strong>ninguno</strong>; elige solo los necesarios."
|
||||||
},
|
},
|
||||||
"pickVm": {
|
"pickVm": {
|
||||||
@@ -75,22 +75,22 @@
|
|||||||
"items": [
|
"items": [
|
||||||
"<strong>GPU disponible.</strong> Continúa sin retirar asignaciones.",
|
"<strong>GPU disponible.</strong> Continúa sin retirar asignaciones.",
|
||||||
"<strong>Asignada a otra VM.</strong> Detén primero la VM origen. Puedes <em>conservar sus entradas y desactivar el arranque automático</em> o <em>retirarlas conservando el arranque automático</em>. Si ya usa <code>vfio-pci</code> y no requiere cambios del host, el traspaso VM→VM puede evitar reiniciar el host.",
|
"<strong>Asignada a otra VM.</strong> Detén primero la VM origen. Puedes <em>conservar sus entradas y desactivar el arranque automático</em> o <em>retirarlas conservando el arranque automático</em>. Si ya usa <code>vfio-pci</code> y no requiere cambios del host, el traspaso VM→VM puede evitar reiniciar el host.",
|
||||||
"<strong>Usada por LXC.</strong> En contenedores normales elige <em>conservar configuración y desactivar arranque automático</em> o <em>retirar dispositivos y reglas antiguas <code>lxc.cgroup2.devices.allow</code>/<code>lxc.mount.entry</code>, conservando arranque automático</em>. OCI conserva la configuración y se detiene sin arranque automático; retira su GPU desde Apps. La detección por familia puede afectar a otras tarjetas similares."
|
"<strong>Usada por LXC.</strong> En contenedores normales elige <em>conservar configuración y desactivar arranque automático</em> o <em>eliminar la configuración de la GPU y conservar arranque automático</em>. Esta opción elimina las entradas <code>devN</code> y, en AMD/Intel, también las reglas antiguas <code>lxc.mount.entry</code> de <code>/dev/dri</code> y <code>lxc.cgroup2.devices.allow</code>. OCI conserva la configuración y se detiene sin arranque automático; elimina su GPU desde Apps del gestor OCI. La detección por familia puede afectar a otras tarjetas similares."
|
||||||
],
|
],
|
||||||
"imageAlt": "Diálogo que ofrece quitar la GPU de un LXC antes de asignarla a la VM",
|
"imageAlt": "Diálogo que ofrece eliminar la GPU de un LXC antes de asignarla a la VM",
|
||||||
"smartTitle": "Revisión de audio asociado al retirar la GPU",
|
"smartTitle": "Revisión de audio asociado al retirar la GPU",
|
||||||
"smartBody": "Después ofrece una lista de <strong>audio posiblemente sin uso</strong> en la VM origen. Desmarca lo que aún necesite. Por ejemplo, puede conservar <code>02:00.1</code> y ofrecer retirar <code>00:1f.3</code>. La lista decide qué audio adicional se quita; no garantiza toda asociación entre pantalla y audio."
|
"smartBody": "Después ofrece una lista de <strong>audio posiblemente sin uso</strong> en la VM origen. Desmarca lo que aún necesite. Por ejemplo, puede conservar <code>02:00.1</code> y ofrecer retirar <code>00:1f.3</code>. La lista decide qué audio adicional se elimina; no garantiza toda asociación entre pantalla y audio."
|
||||||
},
|
},
|
||||||
"audioPick": {
|
"audioPick": {
|
||||||
"title": "Si no hay audio .1, selecciona los controladores que necesites",
|
"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.",
|
"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",
|
"imageAlt": "Diálogo checklist con cada controlador de audio PCI del host (BDF + driver) cuando la GPU no tiene audio hermano .1",
|
||||||
"warnTitle": "No selecciones audio que necesita el host",
|
"warnTitle": "No selecciones audio que necesita el host",
|
||||||
"warnBody": "Asignar audio puede quitar acceso al host; tampoco puede pertenecer a otra VM activa a la vez. Deja audio opcional sin seleccionar si no lo necesitas y revisa sus asignaciones. El pitido de consola no procede necesariamente del audio PCI."
|
"warnBody": "Asignar audio puede dejar al host sin acceso; tampoco puede pertenecer a otra VM activa a la vez. Deja audio opcional sin seleccionar si no lo necesitas y revisa sus asignaciones. El pitido de consola no procede necesariamente del audio PCI."
|
||||||
},
|
},
|
||||||
"summary": {
|
"summary": {
|
||||||
"title": "Revisar el resumen de confirmación",
|
"title": "Revisar el resumen de confirmación",
|
||||||
"body": "Revisa el plan final, sobre todo cada miembro del grupo IOMMU, y cancela si no es correcto. Detiene los cambios principales, pero no revierte una activación de IOMMU confirmada anteriormente.",
|
"body": "Revisa el plan final y cancela si no es correcto. Muestra el grupo IOMMU y su número de dispositivos, no cada miembro, así que revisa el grupo antes. Cancelar detiene los cambios principales, pero no revierte una activación de IOMMU confirmada anteriormente.",
|
||||||
"imageAlt": "Resumen de cambios previstos en host y VM"
|
"imageAlt": "Resumen de cambios previstos en host y VM"
|
||||||
},
|
},
|
||||||
"hostApply": {
|
"hostApply": {
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"Escribe <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> y <code>kvm.conf</code> con <code>allow_unsafe_interrupts=1</code> e <code>ignore_msrs=1</code>. Son ajustes del script, no requisitos universales de Windows/macOS; permitir interrupciones inseguras reduce esa protección.",
|
"Escribe <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> y <code>kvm.conf</code> con <code>allow_unsafe_interrupts=1</code> e <code>ignore_msrs=1</code>. Son ajustes del script, no requisitos universales de Windows/macOS; permitir interrupciones inseguras reduce esa protección.",
|
||||||
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Estas reglas por fabricante pueden afectar a otras tarjetas con el mismo controlador. El módulo <code>nvidia</code> se bloquea <strong>solo</strong> mediante <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> cuando <em>todas</em> las NVIDIA del host están reservadas a VFIO.",
|
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Estas reglas por fabricante pueden afectar a otras tarjetas con el mismo controlador. El módulo <code>nvidia</code> se bloquea <strong>solo</strong> mediante <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> cuando <em>todas</em> las NVIDIA del host están reservadas a VFIO.",
|
||||||
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Solo NVIDIA.</strong> Aplica <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> al evento PCI ADD de BDF registrados, incluidas funciones del grupo IOMMU afectado. Fuera de esos grupos puede conservarse <code>nvidia</code>. La política por BDF no divide grupos IOMMU.",
|
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Solo NVIDIA.</strong> Aplica <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> al evento PCI ADD de BDF registrados, incluidas funciones del grupo IOMMU afectado. Fuera de esos grupos puede conservarse <code>nvidia</code>. La política por BDF no divide grupos IOMMU.",
|
||||||
"<strong>Solo AMD.</strong> Intenta extraer ROM de <code>/sys/bus/pci/.../rom</code> o ACPI VFCT a <code>/usr/share/kvm/vbios_<card>.bin</code>. Si funciona, usa <code>romfile=</code>. Una ROM válida no garantiza que la GPU se inicialice.",
|
"<strong>Solo AMD.</strong> Intenta extraer ROM de <code>/sys/bus/pci/.../rom</code> o ACPI VFCT a <code>/usr/share/kvm/vbios_<vendor>_<device>.bin</code>. Si funciona, usa <code>romfile=</code>. Una ROM válida no garantiza que la GPU se inicialice.",
|
||||||
"<strong>Solo NVIDIA.</strong> Detiene y deshabilita <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> solo cuando todas las NVIDIA están reservadas para VFIO. En uso mixto conserva los servicios y <code>nvidia</code> para las tarjetas nativas.",
|
"<strong>Solo NVIDIA.</strong> Detiene y deshabilita <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> solo cuando todas las NVIDIA están reservadas para VFIO. En uso mixto conserva los servicios y <code>nvidia</code> para las tarjetas nativas.",
|
||||||
"<code>update-initramfs -u -k all</code> — solo se ejecuta si algo de lo de arriba ha cambiado realmente."
|
"<code>update-initramfs -u -k all</code> — solo se ejecuta si algo de lo de arriba ha cambiado realmente."
|
||||||
]
|
]
|
||||||
@@ -148,7 +148,7 @@
|
|||||||
},
|
},
|
||||||
"revert": {
|
"revert": {
|
||||||
"heading": "Deshacer cambios manualmente",
|
"heading": "Deshacer cambios manualmente",
|
||||||
"intro": "Detén la VM y retira solo sus asignaciones PCI correspondientes desde Hardware o mediante el índice explícito del ejemplo. Quitarla de la VM no devuelve la GPU al controlador del host. Para eso usa Cambiar modo de GPU y revisa los invitados afectados antes de confirmar."
|
"intro": "Detén la VM y retira solo sus asignaciones PCI correspondientes desde Hardware o mediante el índice explícito del ejemplo. Eliminarla de la VM no devuelve la GPU al controlador del host. Para eso usa Cambiar modo de GPU y revisa los invitados afectados antes de confirmar."
|
||||||
},
|
},
|
||||||
"related": {
|
"related": {
|
||||||
"heading": "Relacionado",
|
"heading": "Relacionado",
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
"header": {
|
"header": {
|
||||||
"title": "Añadir GPU a LXC",
|
"title": "Añadir GPU a LXC",
|
||||||
"description": "Comparte acceso a GPU con LXC mediante dispositivos del host. El controlador sigue en el host; las aplicaciones usan bibliotecas compatibles y requieren su propia configuración.",
|
"description": "Comparte acceso a GPU con LXC mediante dispositivos del host. El controlador sigue en el host; las aplicaciones usan bibliotecas compatibles y requieren su propia configuración.",
|
||||||
"section": "Hardware: GPUs y Coral-TPU"
|
"section": "Hardware: GPU y Coral-TPU"
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Qué hace",
|
"title": "Qué hace",
|
||||||
"body": "Añade entradas <code>dev<N></code> a <code>/etc/pve/lxc/<ctid>.conf</code> para los dispositivos <code>/dev/dri/*</code>, <code>/dev/kfd</code> o <code>/dev/nvidia*</code> que correspondan. Arranca el LXC e instala paquetes según la distribución, alineando los grupos <code>video</code> y <code>render</code>. La aceleración requiere hardware y bibliotecas compatibles y configurar la app."
|
"body": "Añade entradas <code>dev<N></code> a <code>/etc/pve/lxc/<ctid>.conf</code> para los dispositivos <code>/dev/dri/*</code>, <code>/dev/kfd</code> o <code>/dev/nvidia*</code> que correspondan. Arranca el LXC, instala paquetes según la distribución y, en Intel/AMD, alinea los grupos <code>video</code> y <code>render</code>. La aceleración requiere hardware y bibliotecas compatibles y configurar la app."
|
||||||
},
|
},
|
||||||
"compare": {
|
"compare": {
|
||||||
"heading": "Compartir con LXC frente a asignar a una VM",
|
"heading": "Compartir con LXC frente a asignar a una VM",
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
},
|
},
|
||||||
"pickCt": {
|
"pickCt": {
|
||||||
"title": "Elige un contenedor LXC",
|
"title": "Elige un contenedor LXC",
|
||||||
"body": "Lista los LXC admitidos por ID y nombre. Excluye OCI: sus dispositivos se gestionan en Apps del gestor OCI. Detiene el LXC para configurarlo, lo arranca para instalar y normalmente recupera su estado inicial.",
|
"body": "Lista los LXC admitidos por ID y nombre. Excluye OCI: sus dispositivos se gestionan en Apps del gestor OCI. Detiene el LXC si está en marcha, lo arranca para instalar y normalmente recupera su estado inicial.",
|
||||||
"imageAlt": "Selección de un contenedor LXC existente"
|
"imageAlt": "Selección de un contenedor LXC existente"
|
||||||
},
|
},
|
||||||
"selectGpu": {
|
"selectGpu": {
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
},
|
},
|
||||||
"applyConfig": {
|
"applyConfig": {
|
||||||
"title": "Aplica los cambios de config del LXC",
|
"title": "Aplica los cambios de config del LXC",
|
||||||
"body1": "Detiene el LXC y edita <code>/etc/pve/lxc/<ctid>.conf</code>. Las entradas <code>dev<N></code> incluyen los GID elegidos. Usa el mecanismo <code>dev:</code> en lugar de reglas manuales <code>lxc.mount.entry</code>. Revisa configuración y permisos resultantes.",
|
"body1": "Detiene el LXC si está en marcha y edita <code>/etc/pve/lxc/<ctid>.conf</code>. Las entradas <code>dev<N></code> llevan el GID <code>video</code> o <code>render</code> del host. Sustituye las líneas <code>lxc.mount.entry</code> de <code>/dev/dri</code> por entradas <code>dev:</code>. Revisa configuración y permisos resultantes.",
|
||||||
"body2": "Ejemplo después de Intel + NVIDIA en el mismo contenedor:"
|
"body2": "Ejemplo después de Intel + NVIDIA en el mismo contenedor:"
|
||||||
},
|
},
|
||||||
"installDrivers": {
|
"installDrivers": {
|
||||||
@@ -127,14 +127,14 @@
|
|||||||
},
|
},
|
||||||
"alignGids": {
|
"alignGids": {
|
||||||
"title": "Alinear GIDs y restaurar el estado",
|
"title": "Alinear GIDs y restaurar el estado",
|
||||||
"body1": "Lee los GID del host para <code>video</code> y <code>render</code>; usa 44/104 solo como alternativa. Ajusta <code>/etc/group</code> dentro del LXC. <code>video:44</code> y <code>render:104</code> son ejemplos, no valores universales. Verifica grupos de la app y permisos efectivos.",
|
"body1": "En Intel/AMD, lee los GID del host para <code>video</code> y <code>render</code>; usa 44/104 solo como alternativa. Ajusta <code>/etc/group</code> dentro del LXC; si solo hay NVIDIA, omite este paso. <code>video:44</code> y <code>render:104</code> son ejemplos, no valores universales. Verifica grupos de la app y permisos efectivos.",
|
||||||
"body2": "Al completar normalmente, vuelve a detener el LXC si inicialmente estaba parado; si estaba funcionando, lo deja activo. Ante un fallo de arranque o instalación, revisa el estado final y el registro."
|
"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": {
|
"vendors": {
|
||||||
"heading": "Notas por fabricante",
|
"heading": "Notas por fabricante",
|
||||||
"intelHeading": "iGPU Intel",
|
"intelHeading": "iGPU Intel",
|
||||||
"intelBody": "La aceleración Intel, incluido <em>Quick Sync</em>, depende de generación, códecs y configuración de la app. Comparte nodos existentes como <code>/dev/dri/card0</code> y <code>/dev/dri/renderD128</code>, cuya numeración puede variar. Debe crearlos antes el controlador nativo del host, como <code>i915</code>.",
|
"intelBody": "La aceleración Intel, incluido <em>Quick Sync</em>, depende de generación, códecs y configuración de la app. Comparte los nodos que existan entre <code>/dev/dri/card0</code>, <code>card1</code>, <code>renderD128</code> y <code>renderD129</code>; no añade otros números. Debe crearlos antes el controlador nativo del host, como <code>i915</code>.",
|
||||||
"amdHeading": "AMD",
|
"amdHeading": "AMD",
|
||||||
"amdBody": "AMD usa DRI para Mesa/VA-API. Si existe <code>/dev/kfd</code> en el host, lo comparte también. ROCm/OpenCL requiere hardware y paquetes compatibles; compartir el dispositivo no instala toda la pila ROCm.",
|
"amdBody": "AMD usa DRI para Mesa/VA-API. Si existe <code>/dev/kfd</code> en el host, lo comparte también. ROCm/OpenCL requiere hardware y paquetes compatibles; compartir el dispositivo no instala toda la pila ROCm.",
|
||||||
"nvidiaHeading": "NVIDIA",
|
"nvidiaHeading": "NVIDIA",
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"header": {
|
"header": {
|
||||||
"title": "Instalar Coral TPU en el host",
|
"title": "Instalar Coral TPU en el host",
|
||||||
"description": "Prepara el host Proxmox para usar Coral y compartirla con LXC. Detecta M.2 / Mini-PCIe, USB o ambos y ejecuta el proceso correspondiente: módulos DKMS para PCIe y runtime Google Edge TPU para USB.",
|
"description": "Prepara el host Proxmox para usar Coral y compartirla con LXC. Detecta M.2 / Mini-PCIe, USB o ambos y ejecuta el proceso correspondiente: módulos DKMS para PCIe y runtime Google Edge TPU para USB.",
|
||||||
"section": "Hardware: GPUs y Coral-TPU"
|
"section": "Hardware: GPU y Coral-TPU"
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Qué hace",
|
"title": "Qué hace",
|
||||||
@@ -71,7 +71,7 @@
|
|||||||
"title": "PCIe: módulos gasket y apex mediante DKMS",
|
"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.",
|
"body": "Solo se ejecuta si detecta una Coral PCIe/M.2. Compila módulos para el kernel que está ejecutando el host.",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>Limpieza.</strong> Si una instalación anterior de <code>gasket-dkms</code> dejó paquetes en mal estado, intenta purgarla antes de compilar.",
|
"<strong>Limpieza.</strong> Elimina cualquier paquete <code>gasket-dkms</code> existente antes de compilar; si está en mal estado, fuerza su eliminación y lo purga.",
|
||||||
"<strong>Dependencias de compilación:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
"<strong>Dependencias de compilación:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
||||||
],
|
],
|
||||||
"cloneIntro": "<strong>Clona el controlador.</strong> Prefiere <feranickLink>feranick/gasket-driver</feranickLink> y recurre a <googleLink>google/gasket-driver</googleLink> si no está disponible. Compilar requiere compatibilidad con el kernel. Al código de Google le aplica estos parches según la versión:",
|
"cloneIntro": "<strong>Clona el controlador.</strong> Prefiere <feranickLink>feranick/gasket-driver</feranickLink> y recurre a <googleLink>google/gasket-driver</googleLink> si no está disponible. Compilar requiere compatibilidad con el kernel. Al código de Google le aplica estos parches según la versión:",
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
"Antes de indicar que ha terminado correctamente, el script verifica que el paquete antiguo ya no existe y que el gestor de paquetes está en buen estado."
|
"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",
|
"warningTitle": "Confirma primero el hardware",
|
||||||
"warningBody": "Si esperabas una Coral PCIe/M.2 y no aparece, cancela la limpieza y revisa tarjeta, ranura y firmware."
|
"warningBody": "Si esperabas una Coral PCIe/M.2 y no aparece, cancela la limpieza y revisa tarjeta, slot y firmware."
|
||||||
},
|
},
|
||||||
"reinstallUninstall": {
|
"reinstallUninstall": {
|
||||||
"heading": "Reinstalar o desinstalar",
|
"heading": "Reinstalar o desinstalar",
|
||||||
@@ -128,11 +128,11 @@
|
|||||||
"uninstallIntro": "Requiere confirmación. Las apps LXC que usan <code>/dev/apex_*</code> pueden perder acceso durante la desinstalación o tras reiniciar. El proceso es:",
|
"uninstallIntro": "Requiere confirmación. Las apps LXC que usan <code>/dev/apex_*</code> pueden perder acceso durante la desinstalación o tras reiniciar. El proceso es:",
|
||||||
"uninstallItems": [
|
"uninstallItems": [
|
||||||
"Intenta descargar <code>apex</code> y <code>gasket</code>; si están en uso pueden permanecer cargados.",
|
"Intenta descargar <code>apex</code> y <code>gasket</code>; si están en uso pueden permanecer cargados.",
|
||||||
"Quita cada entrada <code>gasket/<version></code> registrada en DKMS para que los módulos no vuelvan en la siguiente instalación de kernel.",
|
"Elimina cada entrada <code>gasket/<version></code> registrada en DKMS para que los módulos no vuelvan en la siguiente instalación de kernel.",
|
||||||
"Purga <code>gasket-dkms</code>, <code>libedgetpu1-std</code> y <code>libedgetpu1-max</code> y ejecuta <code>apt-get autoremove --purge</code>.",
|
"Purga <code>gasket-dkms</code>, <code>libedgetpu1-std</code> y <code>libedgetpu1-max</code> y ejecuta <code>apt-get autoremove --purge</code>.",
|
||||||
"Elimina <code>/etc/udev/rules.d/99-coral-apex.rules</code> y restaura el grupo predeterminado de <code>60-gasket-dkms.rules</code> si aún existe.",
|
"Elimina <code>/etc/udev/rules.d/99-coral-apex.rules</code> y restaura el grupo predeterminado de <code>60-gasket-dkms.rules</code> si aún existe.",
|
||||||
"Consulta los miembros secundarios de <code>apex</code>. <strong>Si la lista está vacía</strong>, intenta eliminar el grupo; si no, conserva <code>apex</code> y muestra sus miembros. No comprueba por completo los usuarios que lo tienen como grupo principal.",
|
"Consulta los miembros secundarios de <code>apex</code>. <strong>Si la lista está vacía</strong>, intenta eliminar el grupo; si no, conserva <code>apex</code> y muestra sus miembros. No comprueba por completo los usuarios que lo tienen como grupo principal.",
|
||||||
"Elimina repositorios antiguos como <code>/etc/apt/sources.list.d/coral-edgetpu.list</code> y llaveros llamados <code>coral-edgetpu-archive-keyring.gpg</code>. Este proceso no elimina el llavero actual /etc/apt/keyrings/coral-edgetpu.gpg.",
|
"Elimina la lista del repositorio <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, la antigua <code>coral-cloud.list</code> y los llaveros antiguos llamados <code>coral-edgetpu-archive-keyring.gpg</code>. Este proceso no elimina el llavero actual <code>/etc/apt/keyrings/coral-edgetpu.gpg</code>.",
|
||||||
"Ofrece reiniciar <strong>solo si estaba instalado PCIe</strong> para descargar los módulos que sigan activos. Desinstalar solo USB no requiere reinicio."
|
"Ofrece reiniciar <strong>solo si estaba instalado PCIe</strong> para descargar los módulos que sigan activos. Desinstalar solo USB no requiere reinicio."
|
||||||
],
|
],
|
||||||
"lxcWarnTitle": "Contenedores LXC con passthrough de apex",
|
"lxcWarnTitle": "Contenedores LXC con passthrough de apex",
|
||||||
@@ -172,7 +172,7 @@
|
|||||||
"dkmsFailTitle": "Falla la compilación DKMS tras actualizar el kernel",
|
"dkmsFailTitle": "Falla la compilación DKMS tras actualizar el kernel",
|
||||||
"dkmsFailBody": "Una causa posible son cabeceras ausentes. Comprueba <code>proxmox-headers-$(uname -r)</code> con <code>dpkg -l proxmox-headers-$(uname -r)</code>. Instálalas si faltan y revisa incompatibilidades en el registro. Al repetir ejecuta <code>cleanup_broken_gasket_dkms</code>, pero limpiar no garantiza compatibilidad con cualquier kernel.",
|
"dkmsFailBody": "Una causa posible son cabeceras ausentes. Comprueba <code>proxmox-headers-$(uname -r)</code> con <code>dpkg -l proxmox-headers-$(uname -r)</code>. Instálalas si faltan y revisa incompatibilidades en el registro. Al repetir ejecuta <code>cleanup_broken_gasket_dkms</code>, pero limpiar no garantiza compatibilidad con cualquier kernel.",
|
||||||
"apexMissTitle": "/dev/apex_0 no está después del reinicio",
|
"apexMissTitle": "/dev/apex_0 no está después del reinicio",
|
||||||
"apexMissBody": "Comprueba la detección PCIe y que el módulo corresponda al kernel activo. Prueba <code>modprobe apex</code> y consulta <code>dmesg | grep -iE \"apex|gasket\"</code>. Fallos de compilación, carga o configuración de ranura/firmware pueden impedir crear el dispositivo.",
|
"apexMissBody": "Comprueba la detección PCIe y que el módulo corresponda al kernel activo. Prueba <code>modprobe apex</code> y consulta <code>dmesg | grep -iE \"apex|gasket\"</code>. Fallos de compilación, carga o configuración de slot/firmware pueden impedir crear el dispositivo.",
|
||||||
"lxcMissTitle": "El host ve /dev/apex_0, pero el LXC no",
|
"lxcMissTitle": "El host ve /dev/apex_0, pero el LXC no",
|
||||||
"lxcMissBody": "Ver el nodo no prueba que funcione. Verifica acceso en el host, montaje LXC, reglas cgroup y permisos de UID/GID. Consulta <lxcLink>Añadir Coral TPU a un LXC</lxcLink>.",
|
"lxcMissBody": "Ver el nodo no prueba que funcione. Verifica acceso en el host, montaje LXC, reglas cgroup y permisos de UID/GID. Consulta <lxcLink>Añadir Coral TPU a un LXC</lxcLink>.",
|
||||||
"usbUnreachTitle": "USB Accelerator detectado pero Frigate / TFLite no llega a él",
|
"usbUnreachTitle": "USB Accelerator detectado pero Frigate / TFLite no llega a él",
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
"header": {
|
"header": {
|
||||||
"title": "Instalar drivers NVIDIA en el host",
|
"title": "Instalar drivers NVIDIA en el host",
|
||||||
"description": "Instala NVIDIA en el host Proxmox VE. Filtra las ramas mantenidas según el ID PCI de la GPU, comprueba la compilación, usa DKMS, gestiona nouveau e instala persistencia. También puede actualizar bibliotecas de LXC con acceso NVIDIA.",
|
"description": "Instala NVIDIA en el host Proxmox VE. Filtra las ramas mantenidas según el ID PCI de la GPU, comprueba la compilación, usa DKMS, gestiona nouveau e instala persistencia. También puede actualizar bibliotecas de LXC con acceso NVIDIA.",
|
||||||
"section": "Hardware: GPUs y Coral-TPU"
|
"section": "Hardware: GPU y Coral-TPU"
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Qué hace",
|
"title": "Qué hace",
|
||||||
"body": "Detecta la GPU y ofrece ramas mantenidas que incluyen su ID PCI. Bloquea <code>nouveau</code>, descarga el instalador oficial <code>.run</code>, usa DKMS e instala <code>nvidia-persistenced</code> y reglas udev, con parche NVENC opcional. Las comprobaciones de compilación evalúan el kernel actual; compilar no garantiza que todas las apps funcionen. Puede actualizar bibliotecas de LXC NVIDIA."
|
"body": "Detecta la GPU y ofrece ramas mantenidas que incluyen su ID PCI. Bloquea <code>nouveau</code>, descarga el instalador oficial <code>.run</code>, usa DKMS, instala <code>nvidia-persistenced</code>, reglas udev y NVIDIA Container Toolkit, con parche NVENC opcional. Las comprobaciones de compilación evalúan el kernel actual; compilar no garantiza que todas las apps funcionen. Ofrece actualizar las bibliotecas de los LXC NVIDIA existentes, con la misma versión salvo en Arch."
|
||||||
},
|
},
|
||||||
"who": {
|
"who": {
|
||||||
"heading": "¿Para quién es esto?",
|
"heading": "¿Para quién es esto?",
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
"title": "Preparar el sistema",
|
"title": "Preparar el sistema",
|
||||||
"body": "Durante la preparación, el script:",
|
"body": "Durante la preparación, el script:",
|
||||||
"items": [
|
"items": [
|
||||||
"Comprueba repositorios antes de quitar o instalar componentes. Si no hay suscripción y solo está Enterprise, pide permiso para usar no-subscription; si rechazas el cambio, detiene la instalación.",
|
"Comprueba repositorios antes de eliminar o instalar componentes. Si no hay suscripción y solo está Enterprise, pide permiso para usar no-subscription; si rechazas el cambio, detiene la instalación.",
|
||||||
"Instala <code>pve-headers-$(uname -r)</code> (o <code>proxmox-headers-$(uname -r)</code>), <code>build-essential</code> y <code>dkms</code>.",
|
"Instala <code>pve-headers-$(uname -r)</code> (o <code>proxmox-headers-$(uname -r)</code>), <code>build-essential</code> y <code>dkms</code>.",
|
||||||
"Crea <code>/etc/modprobe.d/proxmenux-nouveau-blacklist.conf</code>, gestionado por ProxMenux, con <code>blacklist nouveau</code> y <code>options nouveau modeset=0</code>. Registra si añadió la línea complementaria a <code>blacklist.conf</code> e intenta descargar nouveau.",
|
"Crea <code>/etc/modprobe.d/proxmenux-nouveau-blacklist.conf</code>, gestionado por ProxMenux, con <code>blacklist nouveau</code> y <code>options nouveau modeset=0</code>. Registra si añadió la línea complementaria a <code>blacklist.conf</code> e intenta descargar nouveau.",
|
||||||
"Escribe <code>/etc/modules-load.d/nvidia-vfio.conf</code> con <code>nvidia</code> y <code>nvidia_uvm</code> para que los módulos se carguen pronto en el arranque."
|
"Escribe <code>/etc/modules-load.d/nvidia-vfio.conf</code> con <code>nvidia</code> y <code>nvidia_uvm</code> para que los módulos se carguen pronto en el arranque."
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Reiniciar",
|
"title": "Reiniciar",
|
||||||
"body": "Regenera <code>initramfs</code> para todos los kernels y ofrece reiniciar. <strong>Planifica ese reinicio</strong> para verificar módulos y bloqueo de nouveau en un arranque limpio, aunque el controlador ya responda antes."
|
"body": "Tras instalar el controlador, regenera <code>initramfs</code> para todos los kernels; el último paso ofrece reiniciar. <strong>Planifica ese reinicio</strong> para verificar módulos y bloqueo de nouveau en un arranque limpio, aunque el controlador ya responda antes."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"reinstallUninstall": {
|
"reinstallUninstall": {
|
||||||
@@ -102,9 +102,9 @@
|
|||||||
"uninstallHeading": "Desinstalar — qué se elimina",
|
"uninstallHeading": "Desinstalar — qué se elimina",
|
||||||
"uninstallIntro": "Tras confirmar con Sí/No, desinstala estos componentes:",
|
"uninstallIntro": "Tras confirmar con Sí/No, desinstala estos componentes:",
|
||||||
"uninstallItems": [
|
"uninstallItems": [
|
||||||
"Ejecuta <code>nvidia-uninstall --silent</code> para la instalación <code>.run</code>, detiene y deshabilita <code>nvidia-persistenced</code> y <code>nvidia-powerd</code> e intenta descargar <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> y <code>nvidia</code>. Afecta a las apps LXC que usan NVIDIA; clientes activos pueden impedir la descarga.",
|
"Detiene y desactiva <code>nvidia-persistenced</code> y <code>nvidia-powerd</code>, intenta descargar <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> y <code>nvidia</code> y después ejecuta <code>nvidia-uninstall --silent</code> para la instalación <code>.run</code>. Afecta a las apps LXC que usan NVIDIA; clientes activos pueden impedir la descarga.",
|
||||||
"Ejecuta <code>apt purge</code> sobre <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> y <code>libcudnn*</code>, quita el árbol fuente DKMS y la caché del instalador .run de <code>/opt/nvidia</code>.",
|
"Ejecuta <code>apt purge</code> sobre <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> y <code>libcudnn*</code>, elimina el árbol fuente DKMS y las carpetas <code>nvidia-persistenced</code> y <code>nvidia-patch</code> de <code>/opt/nvidia</code>.",
|
||||||
"Quita la configuración de carga de módulos (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) y las entradas de blacklist de nouveau creadas por ProxMenux. También migra y elimina los archivos antiguos de ProxMenux con las dos líneas conocidas; conserva los archivos modificados o ajenos del administrador.",
|
"Elimina la configuración de carga de módulos (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) y las entradas de blacklist de nouveau creadas por ProxMenux. También migra y elimina los archivos antiguos de ProxMenux con las dos líneas conocidas; conserva los archivos modificados o ajenos del administrador.",
|
||||||
"Retira <code>/etc/udev/rules.d/70-nvidia.rules</code> y marca el estado NVENC como <em>removed</em> en el registro de instalaciones gestionadas; no hay un archivo de estado separado.",
|
"Retira <code>/etc/udev/rules.d/70-nvidia.rules</code> y marca el estado NVENC como <em>removed</em> en el registro de instalaciones gestionadas; no hay un archivo de estado separado.",
|
||||||
"Regenera <code>initramfs</code> para todos los kernels, ejecuta <code>proxmox-boot-tool refresh</code> según la configuración de arranque y solicita reiniciar."
|
"Regenera <code>initramfs</code> para todos los kernels, ejecuta <code>proxmox-boot-tool refresh</code> según la configuración de arranque y solicita reiniciar."
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"header": {
|
"header": {
|
||||||
"title": "Cambiar modo GPU (VM ↔ LXC)",
|
"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.",
|
"description": "Cambia una GPU asignada entre acceso directo a VM y uso compartido en LXC. ProxMenux gestiona controlador, VFIO, módulos e initramfs y pregunta cómo tratar los invitados afectados. Revisa las opciones y verifica el resultado tras reiniciar.",
|
||||||
"section": "Hardware: GPUs y Coral-TPU"
|
"section": "Hardware: GPU y Coral-TPU"
|
||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Qué hace",
|
"title": "Qué hace",
|
||||||
@@ -42,21 +42,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"situation": "Quiero retirar todas las asignaciones de esta GPU.",
|
"situation": "Quiero retirar todas las asignaciones de esta GPU.",
|
||||||
"use": "El modo LXC devuelve la GPU al controlador del host; retira las asignaciones de invitados con las opciones de conflicto correspondientes. No deja la GPU sin controlador."
|
"use": "El modo LXC devuelve la GPU al controlador del host; la política de conflictos de VM puede eliminar las entradas hostpci, pero las entradas de dispositivo de los LXC hay que eliminarlas aparte. No deja la GPU sin controlador."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"prereqs": {
|
"prereqs": {
|
||||||
"title": "Antes de empezar",
|
"title": "Antes de empezar",
|
||||||
"assigned": "<strong>Una GPU ya asignada</strong> a una VM por VFIO o a un LXC. Para la primera asignación, usa Añadir GPU a VM / LXC.",
|
"assigned": "<strong>Una GPU ya asignada</strong> a una VM por VFIO o a un LXC. Para la primera asignación, usa Añadir GPU a VM / LXC.",
|
||||||
"iommu": "<strong>IOMMU debe estar activo en el host</strong> al pasar <em>a</em> modo VM. Depende del firmware y del kernel; no siempre hacen falta parámetros explícitos. Si es necesario, intenta añadir <code>intel_iommu=on iommu=pt</code> o <code>amd_iommu=on</code> según el arranque, con <code>proxmox-boot-tool refresh</code> o <code>update-grub</code>. Revisa los avisos y reinicia cuando lo solicite.",
|
"iommu": "<strong>IOMMU debe estar activo en el host</strong> al pasar <em>a</em> modo VM. Depende del firmware y del kernel. Si al kernel en ejecución le falta <code>intel_iommu=on</code> o <code>amd_iommu=on</code>, el script lo añade con <code>iommu=pt</code> a <code>/etc/kernel/cmdline</code> (marca de raíz ZFS) o a <code>/etc/default/grub</code> y ejecuta <code>proxmox-boot-tool refresh</code> o <code>update-grub</code>. Revisa los avisos y reinicia cuando lo solicite.",
|
||||||
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
||||||
"reboot": "<strong>Planifica un reinicio.</strong> Los cambios persistentes de controlador y arranque pueden requerir regenerar initramfs y reiniciar. El script muestra la solicitud al terminar.",
|
"reboot": "<strong>Planifica un reinicio.</strong> Los cambios persistentes de controlador y arranque pueden requerir regenerar initramfs y reiniciar. El script muestra la solicitud al terminar.",
|
||||||
"knowList": "<strong>Identifica las VM y LXC que usan la GPU.</strong> El script detecta referencias y pregunta qué hacer con cada invitado; conocerlos facilita revisar la selección."
|
"knowList": "<strong>Identifica las VM y LXC que usan la GPU.</strong> El script detecta referencias y pregunta qué hacer con cada invitado; conocerlos facilita revisar la selección."
|
||||||
},
|
},
|
||||||
"blocklist": {
|
"blocklist": {
|
||||||
"title": "No todas las GPUs son seguras para pasar a una VM",
|
"title": "No todas las GPUs son seguras para pasar a una VM",
|
||||||
"body": "El script bloquea el modo VM para ciertos ID, incluidos <code>8086:5a84</code> y <code>8086:5a85</code>, por su política de compatibilidad. Si coincide la GPU, muestra un aviso. Esta lista no impide pasar <em>a</em> LXC, aunque siguen aplicándose otras comprobaciones."
|
"body": "El script bloquea el modo VM para los ID <code>8086:5a84</code> y <code>8086:5a85</code> por su política de compatibilidad. Si coincide la GPU elegida, detiene el cambio a modo VM y vuelve a la selección de GPU, o sale si es la única GPU. Esta lista no impide pasar <em>a</em> LXC, aunque siguen aplicándose otras comprobaciones."
|
||||||
},
|
},
|
||||||
"running": {
|
"running": {
|
||||||
"heading": "Ejecutar el script",
|
"heading": "Ejecutar el script",
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
"intro": "Según el modo actual, el script propone el opuesto como destino:",
|
"intro": "Según el modo actual, el script propone el opuesto como destino:",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>VM → LXC:</strong> retira la asignación a <code>vfio-pci</code> para que el controlador nativo (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) pueda usar la GPU. En NVIDIA elimina las entradas BDF correspondientes de <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> para el próximo arranque.",
|
"<strong>VM → LXC:</strong> retira la asignación a <code>vfio-pci</code> para que el controlador nativo (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) pueda usar la GPU. En NVIDIA elimina las entradas BDF correspondientes de <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> para el próximo arranque.",
|
||||||
"<strong>LXC → VM:</strong> prepara la asignación a <code>vfio-pci</code>. AMD / Intel bloquea el controlador nativo y usa <code>options vfio-pci ids=…</code>. En NVIDIA, <code>nvidia</code> <strong>no</strong> se bloquea globalmente: las reglas BDF aplican <code>driver_override=vfio-pci</code> a los dispositivos de los grupos IOMMU afectados. Las GPU externas a esos grupos pueden conservar <code>nvidia</code>. Revisa cada miembro del grupo."
|
"<strong>LXC → VM:</strong> prepara la asignación a <code>vfio-pci</code>. AMD / Intel bloquea el controlador nativo y usa <code>options vfio-pci ids=…</code>. En NVIDIA, <code>nvidia</code> solo se bloquea globalmente si todas las GPU NVIDIA del host están en VFIO; si no, las reglas BDF aplican <code>driver_override=vfio-pci</code> a los dispositivos de los grupos IOMMU afectados y las GPU NVIDIA externas a esos grupos conservan <code>nvidia</code>. Revisa cada miembro del grupo."
|
||||||
],
|
],
|
||||||
"outro": "Confirma la dirección o cancela."
|
"outro": "Confirma la dirección o cancela."
|
||||||
},
|
},
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
"keepPolicy": "Conservar configuración y desactivar arranque automático",
|
"keepPolicy": "Conservar configuración y desactivar arranque automático",
|
||||||
"keepEffect": "<code>pct set CTID -onboot 0</code> o <code>qm set VMID -onboot 0</code>. Conserva las entradas de GPU.",
|
"keepEffect": "<code>pct set CTID -onboot 0</code> o <code>qm set VMID -onboot 0</code>. Conserva las entradas de GPU.",
|
||||||
"keepWhen": "Si piensas reutilizar el invitado cuando la GPU vuelva al modo anterior. Opción predeterminada conservadora.",
|
"keepWhen": "Si piensas reutilizar el invitado cuando la GPU vuelva al modo anterior. Opción predeterminada conservadora.",
|
||||||
"removePolicy": "Quitar GPU de la config",
|
"removePolicy": "Eliminar la GPU de la configuración",
|
||||||
"removeEffect": "Retira las entradas <code>hostpci</code> / <code>dev</code> identificadas y las referencias antiguas compatibles.",
|
"removeEffect": "Retira las entradas <code>hostpci</code> / <code>dev</code> identificadas y las referencias antiguas compatibles.",
|
||||||
"removeWhen": "Elígelo si el invitado debe funcionar sin GPU. Revisa antes la aplicación: el uso alternativo de CPU depende de ella y retirar el dispositivo no la reconfigura automáticamente.",
|
"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"
|
"imageAlt": "Diálogo para elegir qué hacer con cada VM o LXC afectado"
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
"stillVfioTitle": "La GPU sigue mostrando vfio-pci tras cambiar a modo LXC",
|
"stillVfioTitle": "La GPU sigue mostrando vfio-pci tras cambiar a modo LXC",
|
||||||
"stillVfioBody": "Un módulo VFIO cargado no demuestra qué controlador usa esta GPU. Revisa la tarjeta y si finalizaron <code>update-initramfs</code> y el reinicio. <code>lsmod | grep vfio</code> solo lista módulos. En AMD / Intel revisa <code>vfio.conf</code>; en NVIDIA, <code>/etc/proxmenux/vfio-bind.bdfs</code> y <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code>. Corrige las reglas antiguas antes de ejecutar <code>update-initramfs -u -k all</code> y reiniciar.",
|
"stillVfioBody": "Un módulo VFIO cargado no demuestra qué controlador usa esta GPU. Revisa la tarjeta y si finalizaron <code>update-initramfs</code> y el reinicio. <code>lsmod | grep vfio</code> solo lista módulos. En AMD / Intel revisa <code>vfio.conf</code>; en NVIDIA, <code>/etc/proxmenux/vfio-bind.bdfs</code> y <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code>. Corrige las reglas antiguas antes de ejecutar <code>update-initramfs -u -k all</code> y reiniciar.",
|
||||||
"vmFailTitle": "Una VM no arranca tras pasar la GPU a LXC",
|
"vmFailTitle": "Una VM no arranca tras pasar la GPU a LXC",
|
||||||
"vmFailBody": "Comprueba si conserva referencias <code>hostpci</code> obsoletas. La política <em>Quitar GPU de la configuración</em> puede retirarlas durante el cambio previsto; revisa la dirección antes de repetir el script para no invertir el modo por error. También puedes retirar la asignación en Proxmox con la VM parada.",
|
"vmFailBody": "Comprueba si conserva referencias <code>hostpci</code> obsoletas. La política <em>Eliminar la GPU de la configuración</em> puede retirarlas durante el cambio previsto; revisa la dirección antes de repetir el script para no invertir el modo por error. También puedes retirar la asignación en Proxmox con la VM parada.",
|
||||||
"smiFailTitle": "nvidia-smi muestra «Driver/library version mismatch» al volver a LXC",
|
"smiFailTitle": "nvidia-smi muestra «Driver/library version mismatch» al volver a LXC",
|
||||||
"smiFailBody": "Compara el módulo NVIDIA cargado con las bibliotecas instaladas, también en LXC. Iguala versiones: reiniciar carga el módulo instalado, pero no corrige paquetes incompatibles. Recargar con <code>modprobe -r nvidia</code> y <code>modprobe nvidia</code> requiere detener los clientes GPU y puede fallar si hay módulos dependientes en uso.",
|
"smiFailBody": "Compara el módulo NVIDIA cargado con las bibliotecas instaladas, también en LXC. Iguala versiones: reiniciar carga el módulo instalado, pero no corrige paquetes incompatibles. Recargar con <code>modprobe -r nvidia</code> y <code>modprobe nvidia</code> requiere detener los clientes GPU y puede fallar si hay módulos dependientes en uso.",
|
||||||
"logTitle": "Registro de ejecución",
|
"logTitle": "Registro de ejecución",
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"prereqs": {
|
"prereqs": {
|
||||||
"title": "Avant de commencer",
|
"title": "Avant de commencer",
|
||||||
"drivers": "<strong>Préparez le Coral sur l’hôte</strong>. M.2 / PCIe nécessite le pilote hôte chargé ; USB nécessite l’accès au périphérique et les droits adaptés. Voir <hostLink>Installer Coral TPU sur l’hôte</hostLink>. L’environnement d’exécution doit être disponible dans le conteneur.",
|
"drivers": "<strong>Préparez le périphérique Coral sur l’hôte</strong>. M.2 / PCIe nécessite le pilote hôte chargé ; USB nécessite l’accès au périphérique et les droits adaptés. Voir <hostLink>Installer Coral TPU sur l’hôte</hostLink>. Le script installe l’environnement d’exécution de l’application dans les conteneurs Debian/Ubuntu ; les autres distributions doivent le fournir séparément.",
|
||||||
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||||
"container": "<strong>Un LXC existant</strong>, idéalement basé sur <strong>Debian / Ubuntu</strong> : l’installation utilise <code>apt-get</code>. Les <strong>conteneurs d’autres distributions</strong> peuvent choisir le <strong>mode passthrough uniquement</strong>, sans installation APT de <code>libedgetpu</code>. Utile si l’application inclut déjà cet environnement, comme l’image Docker Frigate.",
|
"container": "<strong>Un LXC existant</strong>, idéalement basé sur <strong>Debian / Ubuntu</strong> : l’installation utilise <code>apt-get</code>. Les <strong>conteneurs d’autres distributions</strong> peuvent choisir le <strong>mode passthrough uniquement</strong>, sans installation APT de <code>libedgetpu</code>. Utile si l’application inclut déjà cet environnement, comme l’image Docker Frigate.",
|
||||||
"downtime": "<strong>Prévoyez une courte interruption</strong> 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."
|
"downtime": "<strong>Prévoyez une courte interruption</strong> 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."
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"gpuHint": {
|
"gpuHint": {
|
||||||
"title": "Suggestion facultative pour l’accès GPU",
|
"title": "Suggestion facultative pour l’accès GPU",
|
||||||
"body": "Si un GPU est détecté mais non configuré pour ce conteneur, le dialogue recommande <lxcGpuLink>Ajouter un GPU à LXC</lxcGpuLink> pour le décodage vidéo, par exemple Quick Sync, VA-API ou NVDEC. Continuer avec Coral uniquement : Oui poursuit ; Non quitte pour configurer d’abord le GPU."
|
"body": "Si un GPU est détecté mais non configuré pour ce conteneur, un dialogue recommande <lxcGpuLink>Ajouter un GPU à LXC</lxcGpuLink> pour le décodage vidéo matériel, par exemple Quick Sync, VA-API ou NVENC. Il demande s’il faut continuer avec Coral uniquement : Oui poursuit la configuration du TPU ; Non quitte pour vous permettre de configurer d’abord le GPU."
|
||||||
},
|
},
|
||||||
"usb": {
|
"usb": {
|
||||||
"title": "Configurer l’accès USB du LXC",
|
"title": "Configurer l’accès USB du LXC",
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
"pcie": {
|
"pcie": {
|
||||||
"title": "Configurer l’accès M.2 / PCIe du LXC",
|
"title": "Configurer l’accès M.2 / PCIe du LXC",
|
||||||
"body1": "Si un Coral M.2 / PCIe est détecté et que <code>/dev/apex_0</code> existe, le script utilise l’API Proxmox <code>dev</code> pour gérer cgroup2 dans les LXC privilégiés et non privilégiés :",
|
"body1": "Si un Coral M.2 / PCIe est détecté et que <code>/dev/apex_0</code> existe, le script utilise l’API Proxmox <code>dev</code> pour gérer cgroup2 dans les LXC privilégiés et non privilégiés :",
|
||||||
"body2": "Si <code>/dev/apex_0</code> n’existe pas encore après <hostLink>Installer Coral sur l’hôte</hostLink>, le script utilise cgroup2 et un montage bind facultatif avec <code>create=file</code>. Cela ne crée pas à lui seul un périphérique fonctionnel :",
|
"body2": "Si <code>/dev/apex_0</code> est absent après <hostLink>Installer Coral sur l’hôte</hostLink>, le script écrit un montage bind avec <code>create=file</code> et, uniquement lorsque le numéro majeur apex figure dans <code>/proc/devices</code>, 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",
|
"rebootTitle": "Redémarrez l'hôte d'abord si vous venez d'installer des pilotes Coral",
|
||||||
"rebootBody": "Le montage de secours ne charge pas <code>apex</code> 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."
|
"rebootBody": "Le montage de secours ne charge pas <code>apex</code> 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."
|
||||||
},
|
},
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
"troubleshoot": {
|
"troubleshoot": {
|
||||||
"heading": "Dépannage",
|
"heading": "Dépannage",
|
||||||
"apexTitle": "LXC démarré, mais /dev/apex_0 absent",
|
"apexTitle": "LXC démarré, mais /dev/apex_0 absent",
|
||||||
"apexBody": "Vérifiez le pilote hôte : <code>lsmod | grep apex</code>. S’il manque, essayez <code>modprobe apex</code> ou redémarrez après installation. Une fois <code>/dev/apex_0</code> présent sur l’hôte, vérifiez l’entrée LXC puis redémarrez avec <code>pct stop <ctid> && pct start <ctid></code>.",
|
"apexBody": "Vérifiez d’abord le pilote hôte : <code>lsmod | grep apex</code>. S’il manque, essayez <code>modprobe apex</code> ou redémarrez après l’installation du pilote. Une fois <code>/dev/apex_0</code> 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 <code>pct stop <ctid> && pct start <ctid></code>.",
|
||||||
"replugTitle": "Coral USB disparaît après reconnexion sur un autre port",
|
"replugTitle": "Coral USB disparaît après reconnexion sur un autre port",
|
||||||
"replugBody": "Vérifiez que le LXC monte <code>/dev/bus/usb</code> plutôt que le lien <code>/dev/coral</code>. Sa configuration doit contenir <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> sans dépendre directement de <code>/dev/coral</code>. Relancez le script si la configuration est ancienne.",
|
"replugBody": "Vérifiez que le LXC monte <code>/dev/bus/usb</code> plutôt que le lien <code>/dev/coral</code>. Sa configuration doit contenir <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> sans dépendre directement de <code>/dev/coral</code>. Relancez le script si la configuration est ancienne.",
|
||||||
"alpineTitle": "Alpine / Arch / RHEL / SUSE : environnement non installé",
|
"alpineTitle": "Alpine / Arch / RHEL / SUSE : environnement non installé",
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
"heading": "Étapes de la procédure",
|
"heading": "Étapes de la procédure",
|
||||||
"detect": {
|
"detect": {
|
||||||
"title": "Détecter les GPU et vérifier IOMMU",
|
"title": "Détecter les GPU et vérifier IOMMU",
|
||||||
"body": "Vérifie IOMMU actif, pas seulement les paramètres. Après confirmation séparée, peut ajouter <code>intel_iommu=on</code> ou <code>amd_iommu=on</code> avec <code>iommu=pt</code>. Choisit <code>/etc/kernel/cmdline</code> si un marqueur ZFS comme <code>root=ZFS=</code> existe, sinon <code>/etc/default/grub</code>. Cette heuristique ne prouve pas le chargeur utilisé. Redémarrez puis vérifiez les groupes réels.",
|
"body": "Considère IOMMU comme actif uniquement si le noyau en cours a <code>intel_iommu=on</code> ou <code>amd_iommu=on</code> 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 <code>iommu=pt</code>. Son heuristique de fichier d’amorçage utilise <code>/etc/kernel/cmdline</code> lorsqu’un marqueur de racine ZFS comme <code>root=ZFS=</code> s’y trouve ; sinon, elle utilise <code>/etc/default/grub</code>. 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 ?",
|
"tipTitle": "Post-installation déjà configurée ?",
|
||||||
"tipBody": "Si la <postLink>prise en charge VFIO IOMMU</postLink> est configurée et active dans le noyau, le contrôle passe. Un réglage prévu pour le prochain démarrage ne prouve pas son activation actuelle.",
|
"tipBody": "Si la <postLink>prise en charge VFIO IOMMU</postLink> est configurée et active dans le noyau, le contrôle passe. Un réglage prévu pour le prochain démarrage ne prouve pas son activation actuelle.",
|
||||||
"imageAlt": "Liste des GPU détectés avec l'adresse du fournisseur et du PCI"
|
"imageAlt": "Liste des GPU détectés avec l'adresse du fournisseur et du PCI"
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
"<strong>Un seul GPU.</strong> La console locale peut perdre son affichage lorsque VFIO le réserve. Vérifiez d’abord l’accès SSH ou web depuis un autre ordinateur.",
|
"<strong>Un seul GPU.</strong> La console locale peut perdre son affichage lorsque VFIO le réserve. Vérifiez d’abord l’accès SSH ou web depuis un autre ordinateur.",
|
||||||
"<strong>Politique de réinitialisation AMD.</strong> Lit <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU ou carte dédiée sans FLR est <em>bloquée par la politique de l’assistant</em> ; un sous-type inconnu sans FLR exige confirmation. Cela ne prouve pas une impossibilité universelle.",
|
"<strong>Politique de réinitialisation AMD.</strong> Lit <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU ou carte dédiée sans FLR est <em>bloquée par la politique de l’assistant</em> ; un sous-type inconnu sans FLR exige confirmation. Cela ne prouve pas une impossibilité universelle.",
|
||||||
"<strong>État D3cold.</strong> L’assistant bloque les cartes AMD signalant <code>D3cold</code> en raison du risque d’échec d’activation. Vérifiez alimentation et micrologiciel.",
|
"<strong>État D3cold.</strong> L’assistant bloque les cartes AMD signalant <code>D3cold</code> en raison du risque d’échec d’activation. Vérifiez alimentation et micrologiciel.",
|
||||||
"<strong>Groupe IOMMU.</strong> Lit <code>/sys/kernel/iommu_groups/</code> et inclut <em>tous les membres sauf les ponts</em>, parfois des contrôleurs réseau ou de stockage. Vérifiez avant confirmation. Si IOMMU attend un redémarrage, seule la fonction GPU est initialement prévue ; contrôlez l’isolation après."
|
"<strong>Analyse du groupe IOMMU.</strong> Lit <code>/sys/kernel/iommu_groups/</code> et inclut dans le plan de la VM <em>tous les membres sauf les ponts</em>, éventuellement des contrôleurs réseau ou de stockage. Le script ne les liste pas : vérifiez vous-même le groupe avant de confirmer. 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": "<strong>Audio associé.</strong> Deux cas selon l’emplacement du contrôleur :",
|
"audioIntro": "<strong>Audio associé.</strong> Deux cas selon l’emplacement du contrôleur :",
|
||||||
"audioDgpu": "<strong>GPU dédié :</strong> l’audio HDMI occupe souvent la fonction <code>.1</code> 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.",
|
"audioDgpu": "<strong>GPU dédié :</strong> l’audio HDMI occupe souvent la fonction <code>.1</code> 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.",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"items": [
|
"items": [
|
||||||
"<strong>GPU disponible.</strong> Continue sans retirer d’attribution.",
|
"<strong>GPU disponible.</strong> Continue sans retirer d’attribution.",
|
||||||
"<strong>Attribué à une autre VM.</strong> Arrêtez d’abord la source. Vous pouvez <em>garder ses entrées et désactiver le démarrage automatique</em> ou <em>retirer les entrées en conservant le démarrage automatique</em>. Avec <code>vfio-pci</code> déjà actif et sans changement hôte, le transfert VM→VM peut éviter un redémarrage hôte.",
|
"<strong>Attribué à une autre VM.</strong> Arrêtez d’abord la source. Vous pouvez <em>garder ses entrées et désactiver le démarrage automatique</em> ou <em>retirer les entrées en conservant le démarrage automatique</em>. Avec <code>vfio-pci</code> déjà actif et sans changement hôte, le transfert VM→VM peut éviter un redémarrage hôte.",
|
||||||
"<strong>Utilisé par LXC.</strong> Pour les conteneurs ordinaires, <em>garder la configuration et désactiver le démarrage automatique</em> ou <em>retirer les périphériques et règles anciennes <code>lxc.cgroup2.devices.allow</code>/<code>lxc.mount.entry</code> en conservant le démarrage automatique</em>. OCI conserve la configuration, est arrêté sans démarrage automatique ; retirez son GPU dans Apps. La détection par famille peut inclure d’autres cartes."
|
"<strong>GPU utilisé par LXC.</strong> Pour les conteneurs ordinaires, choisissez <em>garder la configuration GPU et désactiver le démarrage automatique</em> ou <em>retirer la configuration du périphérique GPU en conservant le démarrage automatique</em>. Le retrait supprime les entrées <code>devN</code> et, pour AMD/Intel, aussi les anciennes règles <code>/dev/dri</code> <code>lxc.mount.entry</code> et <code>lxc.cgroup2.devices.allow</code>. 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",
|
"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",
|
"smartTitle": "Vérifier l’audio associé au retrait du GPU",
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
},
|
},
|
||||||
"summary": {
|
"summary": {
|
||||||
"title": "Examiner le résumé de la confirmation",
|
"title": "Examiner le résumé de la confirmation",
|
||||||
"body": "Vérifiez le plan final, surtout chaque membre IOMMU, et annulez s’il est incorrect. Empêche les changements principaux, sans annuler une activation IOMMU précédemment confirmée.",
|
"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, pas chaque membre : vérifiez donc le groupe au préalable. 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"
|
"imageAlt": "Résumé des modifications prévues sur hôte et VM"
|
||||||
},
|
},
|
||||||
"hostApply": {
|
"hostApply": {
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"Écrit <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> et <code>kvm.conf</code> avec <code>allow_unsafe_interrupts=1</code> et <code>ignore_msrs=1</code>. Réglages du script, pas des exigences universelles Windows/macOS ; les interruptions non sûres réduisent la protection du remappage.",
|
"Écrit <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> et <code>kvm.conf</code> avec <code>allow_unsafe_interrupts=1</code> et <code>ignore_msrs=1</code>. Réglages du script, pas des exigences universelles Windows/macOS ; les interruptions non sûres réduisent la protection du remappage.",
|
||||||
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Ces règles globales au fabricant peuvent toucher d’autres cartes utilisant le même pilote. Le module <code>nvidia</code> est bloqué <strong>uniquement</strong> via <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> lorsque <em>toutes</em> les NVIDIA de l’hôte sont réservées à VFIO.",
|
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Ces règles globales au fabricant peuvent toucher d’autres cartes utilisant le même pilote. Le module <code>nvidia</code> est bloqué <strong>uniquement</strong> via <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> lorsque <em>toutes</em> les NVIDIA de l’hôte sont réservées à VFIO.",
|
||||||
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>NVIDIA seulement.</strong> Applique <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> au PCI ADD des BDF enregistrés, y compris les fonctions du groupe IOMMU concerné. Hors de ces groupes, <code>nvidia</code> peut rester actif. La politique BDF ne divise pas les groupes matériels.",
|
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>NVIDIA seulement.</strong> Applique <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> au PCI ADD des BDF enregistrés, y compris les fonctions du groupe IOMMU concerné. Hors de ces groupes, <code>nvidia</code> peut rester actif. La politique BDF ne divise pas les groupes matériels.",
|
||||||
"<strong>AMD seulement.</strong> Tente d’extraire la ROM de <code>/sys/bus/pci/.../rom</code> ou ACPI VFCT vers <code>/usr/share/kvm/vbios_<card>.bin</code>. Si réussi, utilise <code>romfile=</code>. Une ROM valide ne garantit pas l’initialisation GPU.",
|
"<strong>AMD seulement.</strong> Tente d’extraire la ROM de <code>/sys/bus/pci/.../rom</code> ou ACPI VFCT vers <code>/usr/share/kvm/vbios_<vendor>_<device>.bin</code>. En cas de réussite, la VM utilise <code>romfile=</code>. Une extraction valide ne garantit pas la réussite de l’initialisation du GPU.",
|
||||||
"<strong>NVIDIA seulement.</strong> Arrête et désactive <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> seulement si toutes les NVIDIA sont réservées à VFIO. En usage mixte, conserve les services et <code>nvidia</code> pour les cartes natives.",
|
"<strong>NVIDIA seulement.</strong> Arrête et désactive <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> seulement si toutes les NVIDIA sont réservées à VFIO. En usage mixte, conserve les services et <code>nvidia</code> pour les cartes natives.",
|
||||||
"<code>update-initramfs -u -k all</code> — ne fonctionne que si l'un des éléments ci-dessus a réellement changé."
|
"<code>update-initramfs -u -k all</code> — ne fonctionne que si l'un des éléments ci-dessus a réellement changé."
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Fonctionnement",
|
"title": "Fonctionnement",
|
||||||
"body": "Ajoute <code>dev<N></code> à <code>/etc/pve/lxc/<ctid>.conf</code> pour les périphériques <code>/dev/dri/*</code>, <code>/dev/kfd</code> ou <code>/dev/nvidia*</code> concernés. Démarre le conteneur, installe les paquets adaptés et aligne <code>video</code> et <code>render</code>. L’accélération exige matériel, bibliothèques et configuration d’application compatibles."
|
"body": "Ajoute des entrées <code>dev<N></code> à <code>/etc/pve/lxc/<ctid>.conf</code> pour les nœuds <code>/dev/dri/*</code>, <code>/dev/kfd</code> ou <code>/dev/nvidia*</code> concernés. Démarre le conteneur, installe les paquets userspace de sa distribution et, pour Intel/AMD, aligne les groupes <code>video</code> et <code>render</code>. L’accélération des applications exige toujours matériel, bibliothèques et configuration d’application compatibles."
|
||||||
},
|
},
|
||||||
"compare": {
|
"compare": {
|
||||||
"heading": "Partage LXC ou attribution directe à une VM",
|
"heading": "Partage LXC ou attribution directe à une VM",
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
},
|
},
|
||||||
"pickCt": {
|
"pickCt": {
|
||||||
"title": "Choisir un conteneur LXC",
|
"title": "Choisir un conteneur LXC",
|
||||||
"body": "Liste les LXC admissibles par ID et nom. Les conteneurs OCI utilisent Apps du gestionnaire OCI pour leurs périphériques. Le conteneur est arrêté pour configuration, démarré pour installation, puis retrouve normalement son état initial.",
|
"body": "Liste les conteneurs LXC admissibles par ID et nom ; les conteneurs OCI sont exclus et utilisent OCI manager Apps pour leurs périphériques. Le conteneur est arrêté s’il est en cours d’exécution, démarré pour l’installation des pilotes, puis retrouve normalement son état initial (en marche/arrêté).",
|
||||||
"imageAlt": "Sélection d’un conteneur LXC existant"
|
"imageAlt": "Sélection d’un conteneur LXC existant"
|
||||||
},
|
},
|
||||||
"selectGpu": {
|
"selectGpu": {
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
},
|
},
|
||||||
"applyConfig": {
|
"applyConfig": {
|
||||||
"title": "Appliquer les modifications de configuration LXC",
|
"title": "Appliquer les modifications de configuration LXC",
|
||||||
"body1": "Arrête le conteneur et modifie <code>/etc/pve/lxc/<ctid>.conf</code>. Les entrées <code>dev<N></code> portent les GID choisis. Le mécanisme <code>dev:</code> remplace ici les règles manuelles <code>lxc.mount.entry</code>. Vérifiez configuration et droits.",
|
"body1": "Arrête le conteneur s’il est en cours d’exécution et modifie <code>/etc/pve/lxc/<ctid>.conf</code>. Les entrées numérotées <code>dev<N></code> portent le GID hôte de <code>video</code> ou <code>render</code>. Les lignes bind <code>lxc.mount.entry</code> existantes pour <code>/dev/dri</code> sont remplacées par des entrées <code>dev:</code> ; vérifiez la configuration et les droits obtenus.",
|
||||||
"body2": "Exemple après Intel + NVIDIA sur le même conteneur:"
|
"body2": "Exemple après Intel + NVIDIA sur le même conteneur:"
|
||||||
},
|
},
|
||||||
"installDrivers": {
|
"installDrivers": {
|
||||||
@@ -127,14 +127,14 @@
|
|||||||
},
|
},
|
||||||
"alignGids": {
|
"alignGids": {
|
||||||
"title": "Aligner les GID et restaurer l'état",
|
"title": "Aligner les GID et restaurer l'état",
|
||||||
"body1": "Lit les GID hôte de <code>video</code> et <code>render</code>, avec 44/104 comme valeurs de secours, puis adapte <code>/etc/group</code> dans le conteneur. <code>video:44</code> et <code>render:104</code> sont des exemples. Vérifiez les groupes de l’application et les droits effectifs.",
|
"body1": "Pour Intel/AMD, lit les GID hôte de <code>video</code> et <code>render</code>, avec 44/104 uniquement comme valeurs de secours, puis modifie <code>/etc/group</code> dans le conteneur pour qu’ils correspondent ; les exécutions NVIDIA seul sautent cette étape. Des entrées comme <code>video:44</code> et <code>render:104</code> 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."
|
"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": {
|
"vendors": {
|
||||||
"heading": "Notes par fabricant",
|
"heading": "Notes par fabricant",
|
||||||
"intelHeading": "Intel iGPU",
|
"intelHeading": "Intel iGPU",
|
||||||
"intelBody": "L’accélération Intel, dont <em>Quick Sync</em>, dépend de la génération, des codecs et de l’application. Partage les nœuds existants comme <code>/dev/dri/card0</code> et <code>/dev/dri/renderD128</code>, dont les numéros peuvent varier. Le pilote natif de l’hôte, par exemple <code>i915</code>, doit les fournir.",
|
"intelBody": "L’accélération multimédia Intel, dont <em>Quick Sync</em>, dépend de la génération du GPU, des codecs et de la configuration de l’application. Le script partage ceux de <code>/dev/dri/card0</code>, <code>card1</code>, <code>renderD128</code> et <code>renderD129</code> 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 <code>i915</code>.",
|
||||||
"amdHeading": "AMD",
|
"amdHeading": "AMD",
|
||||||
"amdBody": "AMD utilise DRI pour Mesa/VA-API. Si <code>/dev/kfd</code> 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.",
|
"amdBody": "AMD utilise DRI pour Mesa/VA-API. Si <code>/dev/kfd</code> 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",
|
"nvidiaHeading": "NVIDIA",
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
"title": "PCIe : modules gasket et apex via DKMS",
|
"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.",
|
"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": [
|
"items": [
|
||||||
"<strong>Nettoyage.</strong> Si une installation précédente de <code>gasket-dkms</code> a laissé les paquets dans un état défectueux, le script tente de la purger avant compilation.",
|
"<strong>Nettoyage.</strong> Tout paquet <code>gasket-dkms</code> existant est supprimé avant la recompilation ; s’il est dans un état de paquet défectueux, le script force sa suppression et sa purge.",
|
||||||
"<strong>Dépendances de compilation :</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
"<strong>Dépendances de compilation :</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
||||||
],
|
],
|
||||||
"cloneIntro": "<strong>Clone les sources du pilote.</strong> Préfère <feranickLink>feranick/gasket-driver</feranickLink>, sinon utilise <googleLink>google/gasket-driver</googleLink>. La compilation dépend de la compatibilité du noyau. Les sources Google reçoivent ces correctifs selon la version :",
|
"cloneIntro": "<strong>Clone les sources du pilote.</strong> Préfère <feranickLink>feranick/gasket-driver</feranickLink>, sinon utilise <googleLink>google/gasket-driver</googleLink>. La compilation dépend de la compatibilité du noyau. Les sources Google reçoivent ces correctifs selon la version :",
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
"Purge <code>gasket-dkms</code>, <code>libedgetpu1-std</code> et <code>libedgetpu1-max</code>, puis exécute <code>apt-get autoremove --purge</code>.",
|
"Purge <code>gasket-dkms</code>, <code>libedgetpu1-std</code> et <code>libedgetpu1-max</code>, puis exécute <code>apt-get autoremove --purge</code>.",
|
||||||
"Supprime <code>/etc/udev/rules.d/99-coral-apex.rules</code> et restaure le groupe par défaut de <code>60-gasket-dkms.rules</code> si ce fichier existe encore.",
|
"Supprime <code>/etc/udev/rules.d/99-coral-apex.rules</code> et restaure le groupe par défaut de <code>60-gasket-dkms.rules</code> si ce fichier existe encore.",
|
||||||
"Vérifie les membres supplémentaires de <code>apex</code>. <strong>Si la liste est vide</strong>, tente de supprimer le groupe ; sinon conserve <code>apex</code> et liste ses membres. Ce n’est pas une vérification complète des utilisateurs dont c’est le groupe principal.",
|
"Vérifie les membres supplémentaires de <code>apex</code>. <strong>Si la liste est vide</strong>, tente de supprimer le groupe ; sinon conserve <code>apex</code> et liste ses membres. Ce n’est pas une vérification complète des utilisateurs dont c’est le groupe principal.",
|
||||||
"Supprime les anciens dépôts dont <code>/etc/apt/sources.list.d/coral-edgetpu.list</code> et les trousseaux nommés <code>coral-edgetpu-archive-keyring.gpg</code>. Le trousseau actuel /etc/apt/keyrings/coral-edgetpu.gpg reste présent.",
|
"Supprime la liste de dépôts <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, l’ancien <code>coral-cloud.list</code> et les anciens trousseaux nommés <code>coral-edgetpu-archive-keyring.gpg</code>. Le trousseau actuel <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> n’est pas supprimé par cette séquence.",
|
||||||
"Propose un redémarrage <strong>seulement si PCIe était installé</strong> pour retirer les modules encore actifs. USB seul ne nécessite pas de redémarrage."
|
"Propose un redémarrage <strong>seulement si PCIe était installé</strong> pour retirer les modules encore actifs. USB seul ne nécessite pas de redémarrage."
|
||||||
],
|
],
|
||||||
"lxcWarnTitle": "Récipients LXC avec passage apex",
|
"lxcWarnTitle": "Récipients LXC avec passage apex",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Fonctionnement",
|
"title": "Fonctionnement",
|
||||||
"body": "Détecte le GPU et propose des branches maintenues incluant son ID PCI. Bloque <code>nouveau</code>, télécharge l’installateur officiel <code>.run</code>, utilise DKMS et installe <code>nvidia-persistenced</code> avec les règles udev ; correctif NVENC facultatif. La compilation vérifie le noyau actuel sans garantir toutes les applications. Les LXC NVIDIA peuvent recevoir des bibliothèques correspondantes."
|
"body": "ProxMenux détecte le GPU et propose des branches NVIDIA maintenues incluant son ID PCI. Il bloque <code>nouveau</code>, télécharge l’installateur officiel <code>.run</code>, utilise DKMS, installe <code>nvidia-persistenced</code>, 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": {
|
"who": {
|
||||||
"heading": "C'est pour qui ?",
|
"heading": "C'est pour qui ?",
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Redémarrer",
|
"title": "Redémarrer",
|
||||||
"body": "Reconstruit <code>initramfs</code> pour tous les noyaux et propose un redémarrage. <strong>Prévoyez ce redémarrage</strong> pour vérifier modules et configuration nouveau au démarrage, même si le pilote répond déjà."
|
"body": "Après l’installation du pilote, le script reconstruit <code>initramfs</code> pour tous les noyaux ; sa dernière étape propose un redémarrage. <strong>Prévoyez ce redémarrage</strong> 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": {
|
"reinstallUninstall": {
|
||||||
@@ -102,8 +102,8 @@
|
|||||||
"uninstallHeading": "Désinstaller — ce qui est enlevé",
|
"uninstallHeading": "Désinstaller — ce qui est enlevé",
|
||||||
"uninstallIntro": "Après confirmation Oui/Non, retire les composants suivants :",
|
"uninstallIntro": "Après confirmation Oui/Non, retire les composants suivants :",
|
||||||
"uninstallItems": [
|
"uninstallItems": [
|
||||||
"Exécute <code>nvidia-uninstall --silent</code> pour l’installation <code>.run</code>, arrête et désactive <code>nvidia-persistenced</code> et <code>nvidia-powerd</code>, puis tente de décharger <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> et <code>nvidia</code>. Les applications LXC NVIDIA sont affectées ; des clients actifs peuvent empêcher le déchargement.",
|
"Arrête et désactive <code>nvidia-persistenced</code> et <code>nvidia-powerd</code>, tente de décharger <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> et <code>nvidia</code>, puis exécute <code>nvidia-uninstall --silent</code> pour l’installation <code>.run</code>. Les charges de travail LXC dépendant de NVIDIA sont affectées ; des clients actifs peuvent empêcher le déchargement.",
|
||||||
"Exécute <code>apt purge</code> sur <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> et <code>libcudnn*</code>, supprime l'arborescence des sources DKMS et le cache d'installation <code>/opt/nvidia</code> .run.",
|
"Exécute <code>apt purge</code> sur <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> et <code>libcudnn*</code>, supprime l'arborescence des sources DKMS et les dossiers <code>nvidia-persistenced</code> et <code>nvidia-patch</code> sous <code>/opt/nvidia</code>.",
|
||||||
"Supprime la configuration de chargement des modules (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) 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.",
|
"Supprime la configuration de chargement des modules (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) 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 <code>/etc/udev/rules.d/70-nvidia.rules</code> et marque NVENC <em>removed</em> dans le registre des installations gérées ; aucun fichier d’état séparé.",
|
"Retire <code>/etc/udev/rules.d/70-nvidia.rules</code> et marque NVENC <em>removed</em> dans le registre des installations gérées ; aucun fichier d’état séparé.",
|
||||||
"Reconstruit <code>initramfs</code> pour tous les noyaux, exécute <code>proxmox-boot-tool refresh</code> selon l’amorçage et propose un redémarrage."
|
"Reconstruit <code>initramfs</code> pour tous les noyaux, exécute <code>proxmox-boot-tool refresh</code> selon l’amorçage et propose un redémarrage."
|
||||||
|
|||||||
@@ -42,21 +42,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"situation": "Je veux retirer toutes les affectations de ce GPU.",
|
"situation": "Je veux retirer toutes les affectations de ce GPU.",
|
||||||
"use": "Le mode LXC rend le GPU au pilote hôte ; retirez les affectations des invités via les choix de conflit correspondants. Le GPU reste associé à un pilote."
|
"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": {
|
"prereqs": {
|
||||||
"title": "Avant de commencer",
|
"title": "Avant de commencer",
|
||||||
"assigned": "<strong>Un GPU déjà attribué</strong> à une VM via VFIO ou à un LXC. Pour la première affectation, utilisez Ajouter un GPU à VM / LXC.",
|
"assigned": "<strong>Un GPU déjà attribué</strong> à une VM via VFIO ou à un LXC. Pour la première affectation, utilisez Ajouter un GPU à VM / LXC.",
|
||||||
"iommu": "<strong>IOMMU doit être actif sur l’hôte</strong> pour passer <em>au</em> mode VM. Firmware et noyau doivent le permettre ; les paramètres explicites ne sont pas toujours nécessaires. Si besoin, le script tente <code>intel_iommu=on iommu=pt</code> ou <code>amd_iommu=on</code> selon le système d’amorçage, avec <code>proxmox-boot-tool refresh</code> ou <code>update-grub</code>. Vérifiez les avertissements et redémarrez si demandé.",
|
"iommu": "<strong>IOMMU doit être actif sur l’hôte</strong> pour passer <em>au</em> mode VM. Les réglages du firmware et la prise en charge par le noyau comptent tous les deux. Si <code>intel_iommu=on</code> ou <code>amd_iommu=on</code> manque dans le noyau en cours, le script l’ajoute avec <code>iommu=pt</code> à <code>/etc/kernel/cmdline</code> (marqueur de racine ZFS) ou à <code>/etc/default/grub</code>, puis exécute <code>proxmox-boot-tool refresh</code> ou <code>update-grub</code>. Vérifiez les éventuels avertissements et redémarrez si demandé.",
|
||||||
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
||||||
"reboot": "<strong>Prévoyez un redémarrage.</strong> 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.",
|
"reboot": "<strong>Prévoyez un redémarrage.</strong> 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": "<strong>Identifiez les VM et LXC utilisant le GPU.</strong> Le script détecte les références et demande quoi faire pour chaque invité ; connaître la liste facilite la vérification."
|
"knowList": "<strong>Identifiez les VM et LXC utilisant le GPU.</strong> Le script détecte les références et demande quoi faire pour chaque invité ; connaître la liste facilite la vérification."
|
||||||
},
|
},
|
||||||
"blocklist": {
|
"blocklist": {
|
||||||
"title": "Tous les GPU ne sont pas sûrs de passer à un VM",
|
"title": "Tous les GPU ne sont pas sûrs de passer à un VM",
|
||||||
"body": "Le script bloque le mode VM pour certains identifiants, dont <code>8086:5a84</code> et <code>8086:5a85</code>, selon sa politique de compatibilité. Une correspondance déclenche un avertissement. Cette liste n’empêche pas de passer <em>au</em> mode LXC ; d’autres contrôles restent possibles."
|
"body": "Le script bloque le mode VM pour les identifiants de périphérique <code>8086:5a84</code> et <code>8086:5a85</code> 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 <em>au</em> mode LXC ; d’autres contrôles peuvent encore s’appliquer."
|
||||||
},
|
},
|
||||||
"running": {
|
"running": {
|
||||||
"heading": "Exécuter le script",
|
"heading": "Exécuter le script",
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
"intro": "Basé sur le mode actuel, le script propose le contraire comme cible:",
|
"intro": "Basé sur le mode actuel, le script propose le contraire comme cible:",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>VM → LXC :</strong> retire l’affectation à <code>vfio-pci</code> pour permettre au pilote natif (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) de prendre en charge le GPU. Pour NVIDIA, supprime les entrées BDF correspondantes de <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> au prochain démarrage.",
|
"<strong>VM → LXC :</strong> retire l’affectation à <code>vfio-pci</code> pour permettre au pilote natif (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) de prendre en charge le GPU. Pour NVIDIA, supprime les entrées BDF correspondantes de <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> au prochain démarrage.",
|
||||||
"<strong>LXC → VM :</strong> prépare l’affectation à <code>vfio-pci</code>. AMD / Intel bloque le pilote natif et utilise <code>options vfio-pci ids=…</code>. Pour NVIDIA, <code>nvidia</code> n’est <strong>pas</strong> bloqué globalement : les règles BDF appliquent <code>driver_override=vfio-pci</code> aux périphériques des groupes IOMMU concernés. Les GPU hors de ces groupes peuvent conserver <code>nvidia</code>. Vérifiez chaque membre."
|
"<strong>LXC → VM :</strong> prépare l’affectation à <code>vfio-pci</code>. AMD / Intel bloquent le pilote natif et utilisent <code>options vfio-pci ids=…</code>. Pour NVIDIA, <code>nvidia</code> n’est bloqué globalement que si chaque GPU NVIDIA de l’hôte est en VFIO ; sinon, des règles par BDF appliquent <code>driver_override=vfio-pci</code> aux périphériques des groupes IOMMU concernés, et les GPU NVIDIA hors de ces groupes conservent <code>nvidia</code>. Vérifiez chaque membre du groupe avant de basculer."
|
||||||
],
|
],
|
||||||
"outro": "Confirmez la direction ou annulez."
|
"outro": "Confirmez la direction ou annulez."
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"prereqs": {
|
"prereqs": {
|
||||||
"title": "Prima di iniziare",
|
"title": "Prima di iniziare",
|
||||||
"drivers": "<strong>Prepara Coral sull’host</strong>. M.2 / PCIe richiede il driver host caricato; USB richiede accesso al dispositivo e permessi adeguati. Vedi <hostLink>Installa Coral TPU sull’host</hostLink>. Il runtime dell’applicazione deve essere disponibile nel container.",
|
"drivers": "<strong>Prepara il dispositivo Coral sull’host</strong>. M.2 / PCIe richiede il driver host caricato; USB richiede accesso al dispositivo e permessi adeguati. Vedi <hostLink>Installa Coral TPU sull’host</hostLink>. Lo script installa il runtime dell’applicazione nei container Debian/Ubuntu; le altre distribuzioni devono fornirlo separatamente.",
|
||||||
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||||
"container": "<strong>Un LXC esistente</strong>, preferibilmente basato su <strong>Debian / Ubuntu</strong>: l’installazione usa <code>apt-get</code>. I <strong>container di altre distribuzioni</strong> possono usare la <strong>modalità solo passthrough</strong>, che salta l’installazione APT di <code>libedgetpu</code>. Utile se l’applicazione include già il runtime, come l’immagine Docker Frigate.",
|
"container": "<strong>Un LXC esistente</strong>, preferibilmente basato su <strong>Debian / Ubuntu</strong>: l’installazione usa <code>apt-get</code>. I <strong>container di altre distribuzioni</strong> possono usare la <strong>modalità solo passthrough</strong>, che salta l’installazione APT di <code>libedgetpu</code>. Utile se l’applicazione include già il runtime, come l’immagine Docker Frigate.",
|
||||||
"downtime": "<strong>Prevedi una breve interruzione</strong> del container. Lo script lo ferma per configurarlo e lo avvia per installare il runtime. Queste modifiche non richiedono il riavvio dell’host."
|
"downtime": "<strong>Prevedi una breve interruzione</strong> del container. Lo script lo ferma per configurarlo e lo avvia per installare il runtime. Queste modifiche non richiedono il riavvio dell’host."
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"gpuHint": {
|
"gpuHint": {
|
||||||
"title": "Suggerimento facoltativo per l’accesso GPU",
|
"title": "Suggerimento facoltativo per l’accesso GPU",
|
||||||
"body": "Se rileva un GPU non configurato per il container, un dialogo consiglia <lxcGpuLink>Aggiungi GPU a LXC</lxcGpuLink> per decodifica video, come Quick Sync, VA-API o NVDEC. Alla domanda se proseguire solo con Coral, Sì continua e No esce per configurare prima il GPU."
|
"body": "Se viene rilevato un GPU non configurato per questo container, un dialogo consiglia <lxcGpuLink>Aggiungi GPU a LXC</lxcGpuLink> per la decodifica video hardware, come Quick Sync, VA-API o NVENC. Chiede se proseguire solo con Coral: Sì continua la configurazione del TPU; No esce per permetterti di configurare prima il GPU."
|
||||||
},
|
},
|
||||||
"usb": {
|
"usb": {
|
||||||
"title": "Configurare l’accesso USB del LXC",
|
"title": "Configurare l’accesso USB del LXC",
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
"pcie": {
|
"pcie": {
|
||||||
"title": "Configurare l’accesso M.2 / PCIe del LXC",
|
"title": "Configurare l’accesso M.2 / PCIe del LXC",
|
||||||
"body1": "Se rileva Coral M.2 / PCIe ed esiste <code>/dev/apex_0</code>, usa l’API Proxmox <code>dev</code> per gestire cgroup2 nei LXC privilegiati e non privilegiati:",
|
"body1": "Se rileva Coral M.2 / PCIe ed esiste <code>/dev/apex_0</code>, usa l’API Proxmox <code>dev</code> per gestire cgroup2 nei LXC privilegiati e non privilegiati:",
|
||||||
"body2": "Se <code>/dev/apex_0</code> non esiste ancora dopo <hostLink>Installa Coral sull’host</hostLink>, usa cgroup2 e un bind mount facoltativo con <code>create=file</code>. Questo non crea da solo un dispositivo funzionante:",
|
"body2": "Se <code>/dev/apex_0</code> è assente dopo <hostLink>Installa Coral sull’host</hostLink>, lo script scrive un bind mount con <code>create=file</code> e, solo quando il numero major di apex è elencato in <code>/proc/devices</code>, una regola cgroup2 classica. Nessuno dei due crea un dispositivo funzionante:",
|
||||||
"rebootTitle": "Riavviare l'host prima se hai appena installato i driver Coral",
|
"rebootTitle": "Riavviare l'host prima se hai appena installato i driver Coral",
|
||||||
"rebootBody": "Il montaggio alternativo non carica <code>apex</code> 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."
|
"rebootBody": "Il montaggio alternativo non carica <code>apex</code> 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."
|
||||||
},
|
},
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
"troubleshoot": {
|
"troubleshoot": {
|
||||||
"heading": "Risoluzione dei problemi",
|
"heading": "Risoluzione dei problemi",
|
||||||
"apexTitle": "LXC avviato, ma manca /dev/apex_0",
|
"apexTitle": "LXC avviato, ma manca /dev/apex_0",
|
||||||
"apexBody": "Verifica il driver host: <code>lsmod | grep apex</code>. Se manca, prova <code>modprobe apex</code> o riavvia dopo l’installazione. Quando <code>/dev/apex_0</code> esiste sull’host, verifica la voce LXC e riavvia con <code>pct stop <ctid> && pct start <ctid></code>.",
|
"apexBody": "Verifica prima il driver host: <code>lsmod | grep apex</code>. Se manca, prova <code>modprobe apex</code> o riavvia dopo l’installazione del driver. Quando <code>/dev/apex_0</code> 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 <code>pct stop <ctid> && pct start <ctid></code>.",
|
||||||
"replugTitle": "Coral USB scompare dopo la riconnessione a un’altra porta",
|
"replugTitle": "Coral USB scompare dopo la riconnessione a un’altra porta",
|
||||||
"replugBody": "Verifica che il LXC monti <code>/dev/bus/usb</code> anziché il link <code>/dev/coral</code>. La configurazione deve contenere <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> senza dipendere direttamente da <code>/dev/coral</code>. Riesegui lo script se la configurazione è vecchia.",
|
"replugBody": "Verifica che il LXC monti <code>/dev/bus/usb</code> anziché il link <code>/dev/coral</code>. La configurazione deve contenere <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> senza dipendere direttamente da <code>/dev/coral</code>. Riesegui lo script se la configurazione è vecchia.",
|
||||||
"alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime non installato",
|
"alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime non installato",
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
"heading": "Procedura passo per passo",
|
"heading": "Procedura passo per passo",
|
||||||
"detect": {
|
"detect": {
|
||||||
"title": "Rileva GPU e controlla IOMMU",
|
"title": "Rileva GPU e controlla IOMMU",
|
||||||
"body": "Verifica IOMMU attivo, non solo i parametri. Con conferma separata può aggiungere <code>intel_iommu=on</code> o <code>amd_iommu=on</code> con <code>iommu=pt</code>. Usa <code>/etc/kernel/cmdline</code> con un marcatore ZFS come <code>root=ZFS=</code>, altrimenti <code>/etc/default/grub</code>. È un’euristica, non prova del bootloader. Riavvia per attivare e verifica i gruppi reali.",
|
"body": "Considera IOMMU attivo solo quando il kernel in esecuzione ha <code>intel_iommu=on</code> o <code>amd_iommu=on</code> 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 <code>iommu=pt</code>. La sua euristica per il file di avvio usa <code>/etc/kernel/cmdline</code> quando vi si trova un marcatore di root ZFS come <code>root=ZFS=</code>; altrimenti usa <code>/etc/default/grub</code>. 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?",
|
"tipTitle": "Hai già configurato la post-installazione?",
|
||||||
"tipBody": "Se il <postLink>supporto VFIO IOMMU</postLink> è già configurato e attivo nel kernel, il controllo passa. Un’impostazione per il prossimo avvio non prova che sia attivo ora.",
|
"tipBody": "Se il <postLink>supporto VFIO IOMMU</postLink> è già configurato e attivo nel kernel, il controllo passa. Un’impostazione per il prossimo avvio non prova che sia attivo ora.",
|
||||||
"imageAlt": "Elenco delle GPU rilevate con indirizzo fornitore e PCI"
|
"imageAlt": "Elenco delle GPU rilevate con indirizzo fornitore e PCI"
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
"<strong>Una sola GPU.</strong> La console locale può perdere l’uscita quando VFIO la riserva. Verifica prima l’accesso SSH o web da un altro computer.",
|
"<strong>Una sola GPU.</strong> La console locale può perdere l’uscita quando VFIO la riserva. Verifica prima l’accesso SSH o web da un altro computer.",
|
||||||
"<strong>Politica di reset AMD.</strong> Legge <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU o scheda dedicata senza FLR viene <em>bloccata dalla politica dell’assistente</em>; un sottotipo sconosciuto senza FLR richiede conferma. Non prova un’impossibilità universale.",
|
"<strong>Politica di reset AMD.</strong> Legge <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU o scheda dedicata senza FLR viene <em>bloccata dalla politica dell’assistente</em>; un sottotipo sconosciuto senza FLR richiede conferma. Non prova un’impossibilità universale.",
|
||||||
"<strong>Stato D3cold.</strong> Blocca schede AMD che indicano <code>D3cold</code> per il rischio di mancata attivazione. Verifica alimentazione e firmware.",
|
"<strong>Stato D3cold.</strong> Blocca schede AMD che indicano <code>D3cold</code> per il rischio di mancata attivazione. Verifica alimentazione e firmware.",
|
||||||
"<strong>Gruppo IOMMU.</strong> Legge <code>/sys/kernel/iommu_groups/</code> e include <em>tutti i membri non bridge</em>, anche controller di rete o dischi. Verifica prima di confermare. Se IOMMU attende un riavvio, pianifica inizialmente solo la funzione GPU; verifica poi l’isolamento."
|
"<strong>Analisi del gruppo IOMMU.</strong> Legge <code>/sys/kernel/iommu_groups/</code> e include nel piano della VM <em>tutti i membri non bridge</em>, eventualmente controller di rete o di archiviazione. Lo script non li elenca, quindi verifica tu stesso il gruppo prima di confermare. 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": "<strong>Audio associato.</strong> Due casi secondo la posizione del controller:",
|
"audioIntro": "<strong>Audio associato.</strong> Due casi secondo la posizione del controller:",
|
||||||
"audioDgpu": "<strong>GPU dedicata:</strong> l’audio HDMI occupa spesso la funzione <code>.1</code> dello stesso slot PCI ed è incluso se rilevato. Se l’host lo usava, perde l’accesso riservandolo alla VM.",
|
"audioDgpu": "<strong>GPU dedicata:</strong> l’audio HDMI occupa spesso la funzione <code>.1</code> dello stesso slot PCI ed è incluso se rilevato. Se l’host lo usava, perde l’accesso riservandolo alla VM.",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"items": [
|
"items": [
|
||||||
"<strong>GPU disponibile.</strong> Prosegue senza rimuovere assegnazioni.",
|
"<strong>GPU disponibile.</strong> Prosegue senza rimuovere assegnazioni.",
|
||||||
"<strong>Assegnata a un’altra VM.</strong> Arresta prima la sorgente. Puoi <em>mantenere le voci disattivando l’avvio automatico</em> oppure <em>rimuoverle mantenendo l’avvio automatico</em>. Con <code>vfio-pci</code> già attivo e nessuna modifica host necessaria, il trasferimento VM→VM può evitare il riavvio host.",
|
"<strong>Assegnata a un’altra VM.</strong> Arresta prima la sorgente. Puoi <em>mantenere le voci disattivando l’avvio automatico</em> oppure <em>rimuoverle mantenendo l’avvio automatico</em>. Con <code>vfio-pci</code> già attivo e nessuna modifica host necessaria, il trasferimento VM→VM può evitare il riavvio host.",
|
||||||
"<strong>Usata da LXC.</strong> Nei container normali scegli <em>mantenere la configurazione e disattivare l’avvio automatico</em> o <em>rimuovere dispositivi e vecchie regole <code>lxc.cgroup2.devices.allow</code>/<code>lxc.mount.entry</code>, mantenendo l’avvio automatico</em>. OCI conserva la configurazione e viene fermato senza avvio automatico; rimuovi la GPU da Apps. Il rilevamento per famiglia può includere altre schede."
|
"<strong>GPU usata da LXC.</strong> Nei container normali scegli <em>mantenere la configurazione GPU e disattivare l’avvio automatico</em> o <em>rimuovere la configurazione del dispositivo GPU mantenendo l’avvio automatico</em>. La rimozione elimina le voci <code>devN</code> e, per AMD/Intel, anche le vecchie regole <code>/dev/dri</code> <code>lxc.mount.entry</code> e <code>lxc.cgroup2.devices.allow</code>. 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",
|
"imageAlt": "Offerta di dialogo per rimuovere il GPU da un LXC prima di assegnarlo al VM",
|
||||||
"smartTitle": "Verificare l’audio associato rimuovendo la GPU",
|
"smartTitle": "Verificare l’audio associato rimuovendo la GPU",
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
},
|
},
|
||||||
"summary": {
|
"summary": {
|
||||||
"title": "Riepilogo della conferma",
|
"title": "Riepilogo della conferma",
|
||||||
"body": "Verifica il piano finale, soprattutto ogni membro IOMMU, e annulla se errato. Ferma le modifiche principali, ma non annulla un’attivazione IOMMU confermata in precedenza.",
|
"body": "Verifica il piano finale dell’host e della VM e annulla se è errato. Mostra il gruppo IOMMU e il numero dei suoi dispositivi, non ogni membro, quindi controlla prima il gruppo. 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"
|
"imageAlt": "Riepilogo delle modifiche previste a host e VM"
|
||||||
},
|
},
|
||||||
"hostApply": {
|
"hostApply": {
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"Scrive <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> e <code>kvm.conf</code> con <code>allow_unsafe_interrupts=1</code> e <code>ignore_msrs=1</code>. Sono impostazioni dello script, non requisiti universali Windows/macOS; gli interrupt non sicuri riducono la protezione del remapping.",
|
"Scrive <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> e <code>kvm.conf</code> con <code>allow_unsafe_interrupts=1</code> e <code>ignore_msrs=1</code>. Sono impostazioni dello script, non requisiti universali Windows/macOS; gli interrupt non sicuri riducono la protezione del remapping.",
|
||||||
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Queste regole per produttore possono influire su altre schede con lo stesso driver. Il modulo <code>nvidia</code> è bloccato <strong>solo</strong> tramite <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> quando <em>tutte</em> le NVIDIA host sono riservate a VFIO.",
|
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Queste regole per produttore possono influire su altre schede con lo stesso driver. Il modulo <code>nvidia</code> è bloccato <strong>solo</strong> tramite <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> quando <em>tutte</em> le NVIDIA host sono riservate a VFIO.",
|
||||||
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Solo NVIDIA.</strong> Applica <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> al PCI ADD dei BDF registrati, incluse le funzioni del gruppo IOMMU interessato. Fuori da quei gruppi può restare <code>nvidia</code>. La politica BDF non divide gruppi IOMMU hardware.",
|
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Solo NVIDIA.</strong> Applica <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> al PCI ADD dei BDF registrati, incluse le funzioni del gruppo IOMMU interessato. Fuori da quei gruppi può restare <code>nvidia</code>. La politica BDF non divide gruppi IOMMU hardware.",
|
||||||
"<strong>Solo AMD.</strong> Tenta di estrarre la ROM da <code>/sys/bus/pci/.../rom</code> o ACPI VFCT in <code>/usr/share/kvm/vbios_<card>.bin</code>. Se riesce, usa <code>romfile=</code>. Una ROM valida non garantisce l’inizializzazione GPU.",
|
"<strong>Solo AMD.</strong> Tenta un dump della ROM da <code>/sys/bus/pci/.../rom</code> o ACPI VFCT in <code>/usr/share/kvm/vbios_<vendor>_<device>.bin</code>. Se riesce, la VM usa <code>romfile=</code>. Un dump valido non garantisce la corretta inizializzazione della GPU.",
|
||||||
"<strong>Solo NVIDIA.</strong> Ferma e disattiva <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> solo se tutte le NVIDIA sono riservate a VFIO. In uso misto mantiene servizi e <code>nvidia</code> per le schede native.",
|
"<strong>Solo NVIDIA.</strong> Ferma e disattiva <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> solo se tutte le NVIDIA sono riservate a VFIO. In uso misto mantiene servizi e <code>nvidia</code> per le schede native.",
|
||||||
"<code>update-initramfs -u -k all</code> — funziona solo se uno dei suddetti effettivamente cambiato."
|
"<code>update-initramfs -u -k all</code> — funziona solo se uno dei suddetti effettivamente cambiato."
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Cosa fa",
|
"title": "Cosa fa",
|
||||||
"body": "Aggiunge <code>dev<N></code> a <code>/etc/pve/lxc/<ctid>.conf</code> per i dispositivi <code>/dev/dri/*</code>, <code>/dev/kfd</code> o <code>/dev/nvidia*</code> pertinenti. Avvia il container, installa i pacchetti adatti e allinea <code>video</code> e <code>render</code>. L’accelerazione richiede hardware e librerie compatibili e configurazione dell’app."
|
"body": "Aggiunge voci <code>dev<N></code> a <code>/etc/pve/lxc/<ctid>.conf</code> per i nodi <code>/dev/dri/*</code>, <code>/dev/kfd</code> o <code>/dev/nvidia*</code> pertinenti. Avvia il container, installa i pacchetti userspace della sua distribuzione e, per Intel/AMD, allinea i gruppi <code>video</code> e <code>render</code>. L’accelerazione delle applicazioni richiede comunque hardware e librerie compatibili e configurazione dell’app."
|
||||||
},
|
},
|
||||||
"compare": {
|
"compare": {
|
||||||
"heading": "Condivisione LXC e passthrough VM a confronto",
|
"heading": "Condivisione LXC e passthrough VM a confronto",
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
},
|
},
|
||||||
"pickCt": {
|
"pickCt": {
|
||||||
"title": "Scegli un container LXC",
|
"title": "Scegli un container LXC",
|
||||||
"body": "Elenca i LXC idonei per ID e nome. I container OCI sono esclusi: gestisci i dispositivi da Apps nel gestore OCI. Arresta per configurare, avvia per installare e normalmente ripristina lo stato iniziale.",
|
"body": "Elenca i container LXC idonei per ID e nome; i container OCI sono esclusi e usano OCI manager Apps per i dispositivi. Il container viene arrestato se è in esecuzione, avviato per l’installazione dei driver e normalmente riportato allo stato iniziale (in esecuzione/arrestato).",
|
||||||
"imageAlt": "Selezione di un container LXC esistente"
|
"imageAlt": "Selezione di un container LXC esistente"
|
||||||
},
|
},
|
||||||
"selectGpu": {
|
"selectGpu": {
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
},
|
},
|
||||||
"applyConfig": {
|
"applyConfig": {
|
||||||
"title": "Applicare le modifiche di configurazione LXC",
|
"title": "Applicare le modifiche di configurazione LXC",
|
||||||
"body1": "Arresta il container e modifica <code>/etc/pve/lxc/<ctid>.conf</code>. Le voci <code>dev<N></code> includono i GID scelti. Il meccanismo <code>dev:</code> sostituisce qui le regole manuali <code>lxc.mount.entry</code>. Verifica configurazione e permessi.",
|
"body1": "Arresta il container se è in esecuzione e modifica <code>/etc/pve/lxc/<ctid>.conf</code>. Le voci numerate <code>dev<N></code> includono il GID host di <code>video</code> o <code>render</code>. Le righe bind <code>lxc.mount.entry</code> esistenti per <code>/dev/dri</code> vengono sostituite da voci <code>dev:</code>; verifica la configurazione e i permessi risultanti.",
|
||||||
"body2": "Esempio dopo Intel + NVIDIA sullo stesso contenitore:"
|
"body2": "Esempio dopo Intel + NVIDIA sullo stesso contenitore:"
|
||||||
},
|
},
|
||||||
"installDrivers": {
|
"installDrivers": {
|
||||||
@@ -127,14 +127,14 @@
|
|||||||
},
|
},
|
||||||
"alignGids": {
|
"alignGids": {
|
||||||
"title": "Allineare GID e ripristinare lo stato",
|
"title": "Allineare GID e ripristinare lo stato",
|
||||||
"body1": "Legge i GID host di <code>video</code> e <code>render</code>, con 44/104 come ripiego, poi adatta <code>/etc/group</code> nel container. <code>video:44</code> e <code>render:104</code> sono esempi, non ID universali. Verifica gruppi dell’app e permessi effettivi.",
|
"body1": "Per Intel/AMD legge i GID host di <code>video</code> e <code>render</code>, usando 44/104 solo come ripiego, poi modifica <code>/etc/group</code> nel container perché corrispondano; le esecuzioni solo NVIDIA saltano questo passaggio. Voci come <code>video:44</code> e <code>render:104</code> 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."
|
"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": {
|
"vendors": {
|
||||||
"heading": "Note per produttore",
|
"heading": "Note per produttore",
|
||||||
"intelHeading": "Intel iGPU",
|
"intelHeading": "Intel iGPU",
|
||||||
"intelBody": "L’accelerazione Intel, incluso <em>Quick Sync</em>, dipende da generazione, codec e app. Condivide nodi esistenti come <code>/dev/dri/card0</code> e <code>/dev/dri/renderD128</code>; i numeri possono variare. Deve fornirli il driver nativo host, per esempio <code>i915</code>.",
|
"intelBody": "L’accelerazione multimediale Intel, incluso <em>Quick Sync</em>, dipende da generazione del GPU, codec e configurazione dell’app. Lo script condivide quelli tra <code>/dev/dri/card0</code>, <code>card1</code>, <code>renderD128</code> e <code>renderD129</code> che esistono; altri numeri di nodo non vengono aggiunti. L’host deve già fornirli tramite il proprio driver nativo, per esempio <code>i915</code>.",
|
||||||
"amdHeading": "AMD",
|
"amdHeading": "AMD",
|
||||||
"amdBody": "AMD usa DRI per Mesa/VA-API. Se l’host espone <code>/dev/kfd</code>, lo condivide. ROCm/OpenCL richiede hardware e librerie compatibili; condividere il dispositivo non installa l’intero stack ROCm.",
|
"amdBody": "AMD usa DRI per Mesa/VA-API. Se l’host espone <code>/dev/kfd</code>, lo condivide. ROCm/OpenCL richiede hardware e librerie compatibili; condividere il dispositivo non installa l’intero stack ROCm.",
|
||||||
"nvidiaHeading": "NVIDIA",
|
"nvidiaHeading": "NVIDIA",
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
"title": "PCIe: moduli gasket e apex tramite DKMS",
|
"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.",
|
"body": "Eseguito solo se rileva un Coral PCIe/M.2. Compila i moduli per il kernel attualmente in esecuzione sull’host.",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>Pulizia.</strong> Se una precedente installazione di <code>gasket-dkms</code> ha lasciato pacchetti in stato incoerente, tenta di eliminarla prima della compilazione.",
|
"<strong>Pulizia.</strong> Qualsiasi pacchetto <code>gasket-dkms</code> esistente viene rimosso prima della ricompilazione; se è in uno stato incoerente, lo script ne forza la rimozione e la purga.",
|
||||||
"<strong>Dipendenze di compilazione:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
"<strong>Dipendenze di compilazione:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
||||||
],
|
],
|
||||||
"cloneIntro": "<strong>Clona i sorgenti del driver.</strong> Preferisce <feranickLink>feranick/gasket-driver</feranickLink>, altrimenti usa <googleLink>google/gasket-driver</googleLink>. La compilazione dipende dalla compatibilità del kernel. Applica queste patch ai sorgenti Google secondo la versione:",
|
"cloneIntro": "<strong>Clona i sorgenti del driver.</strong> Preferisce <feranickLink>feranick/gasket-driver</feranickLink>, altrimenti usa <googleLink>google/gasket-driver</googleLink>. La compilazione dipende dalla compatibilità del kernel. Applica queste patch ai sorgenti Google secondo la versione:",
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
"Elimina completamente <code>gasket-dkms</code>, <code>libedgetpu1-std</code> e <code>libedgetpu1-max</code>, poi esegue <code>apt-get autoremove --purge</code>.",
|
"Elimina completamente <code>gasket-dkms</code>, <code>libedgetpu1-std</code> e <code>libedgetpu1-max</code>, poi esegue <code>apt-get autoremove --purge</code>.",
|
||||||
"Elimina <code>/etc/udev/rules.d/99-coral-apex.rules</code> e ripristina il gruppo predefinito in <code>60-gasket-dkms.rules</code>, se esiste ancora.",
|
"Elimina <code>/etc/udev/rules.d/99-coral-apex.rules</code> e ripristina il gruppo predefinito in <code>60-gasket-dkms.rules</code>, se esiste ancora.",
|
||||||
"Controlla i membri supplementari di <code>apex</code>. <strong>Se l’elenco è vuoto</strong>, tenta di rimuovere il gruppo; altrimenti mantiene <code>apex</code> ed elenca i membri. Non verifica completamente gli utenti che lo hanno come gruppo principale.",
|
"Controlla i membri supplementari di <code>apex</code>. <strong>Se l’elenco è vuoto</strong>, tenta di rimuovere il gruppo; altrimenti mantiene <code>apex</code> ed elenca i membri. Non verifica completamente gli utenti che lo hanno come gruppo principale.",
|
||||||
"Rimuove i vecchi repository, tra cui <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, e portachiavi chiamati <code>coral-edgetpu-archive-keyring.gpg</code>. Il portachiavi attuale /etc/apt/keyrings/coral-edgetpu.gpg rimane.",
|
"Rimuove l’elenco dei repository <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, il vecchio <code>coral-cloud.list</code> e i vecchi portachiavi chiamati <code>coral-edgetpu-archive-keyring.gpg</code>. Il portachiavi attuale in <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> non viene rimosso da questa sequenza.",
|
||||||
"Propone un riavvio <strong>solo se PCIe era installato</strong> per scaricare i moduli ancora attivi. Rimuovere solo USB non richiede riavvio."
|
"Propone un riavvio <strong>solo se PCIe era installato</strong> per scaricare i moduli ancora attivi. Rimuovere solo USB non richiede riavvio."
|
||||||
],
|
],
|
||||||
"lxcWarnTitle": "LXC contenitori con apex passthrough",
|
"lxcWarnTitle": "LXC contenitori con apex passthrough",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Cosa fa",
|
"title": "Cosa fa",
|
||||||
"body": "Rileva il GPU e propone rami mantenuti che includono il suo ID PCI. Blocca <code>nouveau</code>, scarica l’installer ufficiale <code>.run</code>, usa DKMS e installa <code>nvidia-persistenced</code> con regole udev; patch NVENC facoltativa. La compilazione verifica il kernel attuale senza garantire tutte le app. I LXC NVIDIA possono ricevere librerie corrispondenti."
|
"body": "ProxMenux rileva il GPU e propone rami NVIDIA mantenuti che includono il suo ID PCI. Blocca <code>nouveau</code>, scarica l’installer ufficiale <code>.run</code>, usa DKMS, installa <code>nvidia-persistenced</code>, 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": {
|
"who": {
|
||||||
"heading": "Per chi è questo?",
|
"heading": "Per chi è questo?",
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Riavvia",
|
"title": "Riavvia",
|
||||||
"body": "Rigenera <code>initramfs</code> per tutti i kernel e propone il riavvio. <strong>Prevedi questo riavvio</strong> per verificare moduli e configurazione nouveau all’avvio, anche se il driver risponde già prima."
|
"body": "Dopo l’installazione del driver, lo script rigenera <code>initramfs</code> per tutti i kernel; il suo ultimo passaggio propone il riavvio. <strong>Prevedi questo riavvio</strong> 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": {
|
"reinstallUninstall": {
|
||||||
@@ -102,8 +102,8 @@
|
|||||||
"uninstallHeading": "Disinstallare — ciò che viene rimosso",
|
"uninstallHeading": "Disinstallare — ciò che viene rimosso",
|
||||||
"uninstallIntro": "Dopo conferma Sì/No, rimuove i seguenti componenti:",
|
"uninstallIntro": "Dopo conferma Sì/No, rimuove i seguenti componenti:",
|
||||||
"uninstallItems": [
|
"uninstallItems": [
|
||||||
"Esegue <code>nvidia-uninstall --silent</code> per l’installazione <code>.run</code>, ferma e disabilita <code>nvidia-persistenced</code> e <code>nvidia-powerd</code> e tenta di scaricare <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> e <code>nvidia</code>. Le app LXC NVIDIA sono coinvolte; client attivi possono impedire lo scaricamento.",
|
"Ferma e disabilita <code>nvidia-persistenced</code> e <code>nvidia-powerd</code>, tenta di scaricare <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> e <code>nvidia</code>, poi esegue <code>nvidia-uninstall --silent</code> per l’installazione <code>.run</code>. I carichi di lavoro LXC che dipendono da NVIDIA sono coinvolti; client attivi possono impedire lo scaricamento.",
|
||||||
"Esegue <code>apt purge</code> su <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> e <code>libcudnn*</code>, rimuove l'albero sorgente DKMS e la cache dell'installatore <code>/opt/nvidia</code> .run.",
|
"Esegue <code>apt purge</code> su <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> e <code>libcudnn*</code>, rimuove l'albero sorgente DKMS e le cartelle <code>nvidia-persistenced</code> e <code>nvidia-patch</code> in <code>/opt/nvidia</code>.",
|
||||||
"Rimuove la configurazione di caricamento moduli <code>/etc/modules-load.d/nvidia-vfio.conf</code> 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 la configurazione di caricamento moduli <code>/etc/modules-load.d/nvidia-vfio.conf</code> 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 <code>/etc/udev/rules.d/70-nvidia.rules</code> e imposta NVENC su <em>removed</em> nel registro delle installazioni gestite; non esiste un file di stato separato.",
|
"Rimuove <code>/etc/udev/rules.d/70-nvidia.rules</code> e imposta NVENC su <em>removed</em> nel registro delle installazioni gestite; non esiste un file di stato separato.",
|
||||||
"Rigenera <code>initramfs</code> per tutti i kernel, esegue <code>proxmox-boot-tool refresh</code> secondo la configurazione di avvio e chiede di riavviare."
|
"Rigenera <code>initramfs</code> per tutti i kernel, esegue <code>proxmox-boot-tool refresh</code> secondo la configurazione di avvio e chiede di riavviare."
|
||||||
|
|||||||
@@ -42,21 +42,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"situation": "Voglio rimuovere tutte le assegnazioni di questo GPU.",
|
"situation": "Voglio rimuovere tutte le assegnazioni di questo GPU.",
|
||||||
"use": "La modalità LXC restituisce il GPU al driver host; rimuovi le assegnazioni degli ospiti con le opzioni di conflitto appropriate. Il GPU resta associato a un driver."
|
"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": {
|
"prereqs": {
|
||||||
"title": "Prima di iniziare",
|
"title": "Prima di iniziare",
|
||||||
"assigned": "<strong>Un GPU già assegnato</strong> a una VM tramite VFIO o a un LXC. Per la prima assegnazione usa Aggiungi GPU a VM / LXC.",
|
"assigned": "<strong>Un GPU già assegnato</strong> a una VM tramite VFIO o a un LXC. Per la prima assegnazione usa Aggiungi GPU a VM / LXC.",
|
||||||
"iommu": "<strong>IOMMU deve essere attivo sull’host</strong> passando <em>alla</em> modalità VM. Contano firmware e supporto del kernel; i parametri espliciti non sono sempre necessari. Se serve, lo script tenta <code>intel_iommu=on iommu=pt</code> o <code>amd_iommu=on</code> tramite il sistema di avvio attivo, con <code>proxmox-boot-tool refresh</code> o <code>update-grub</code>. Controlla gli avvisi e riavvia quando richiesto.",
|
"iommu": "<strong>IOMMU deve essere attivo sull’host</strong> passando <em>alla</em> modalità VM. Contano sia le impostazioni del firmware sia il supporto del kernel. Se <code>intel_iommu=on</code> o <code>amd_iommu=on</code> manca nel kernel in esecuzione, lo script lo aggiunge con <code>iommu=pt</code> a <code>/etc/kernel/cmdline</code> (marcatore di root ZFS) o a <code>/etc/default/grub</code>, poi esegue <code>proxmox-boot-tool refresh</code> o <code>update-grub</code>. Controlla eventuali avvisi e riavvia quando richiesto.",
|
||||||
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
||||||
"reboot": "<strong>Prevedi un riavvio.</strong> Le modifiche persistenti a driver e avvio possono richiedere la rigenerazione di initramfs e un riavvio. Lo script lo propone al termine.",
|
"reboot": "<strong>Prevedi un riavvio.</strong> Le modifiche persistenti a driver e avvio possono richiedere la rigenerazione di initramfs e un riavvio. Lo script lo propone al termine.",
|
||||||
"knowList": "<strong>Identifica VM e LXC che usano il GPU.</strong> Lo script rileva i riferimenti e chiede come trattare ogni ospite; conoscere l’elenco facilita la verifica."
|
"knowList": "<strong>Identifica VM e LXC che usano il GPU.</strong> Lo script rileva i riferimenti e chiede come trattare ogni ospite; conoscere l’elenco facilita la verifica."
|
||||||
},
|
},
|
||||||
"blocklist": {
|
"blocklist": {
|
||||||
"title": "Non tutte le GPU sono sicure per passare a un VM",
|
"title": "Non tutte le GPU sono sicure per passare a un VM",
|
||||||
"body": "Lo script blocca la modalità VM per alcuni ID, inclusi <code>8086:5a84</code> e <code>8086:5a85</code>, secondo la propria politica di compatibilità. In caso di corrispondenza mostra un avviso. L’elenco non impedisce il passaggio <em>alla</em> modalità LXC; restano gli altri controlli."
|
"body": "Lo script blocca la modalità VM per gli ID dispositivo <code>8086:5a84</code> e <code>8086:5a85</code> 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 <em>alla</em> modalità LXC; altri controlli possono comunque applicarsi."
|
||||||
},
|
},
|
||||||
"running": {
|
"running": {
|
||||||
"heading": "Eseguire lo script",
|
"heading": "Eseguire lo script",
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
"intro": "Sulla base della modalità corrente, lo script propone il contrario come obiettivo:",
|
"intro": "Sulla base della modalità corrente, lo script propone il contrario come obiettivo:",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>VM → LXC:</strong> rimuove l’associazione a <code>vfio-pci</code> affinché il driver nativo (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) possa usare il GPU. Per NVIDIA elimina le voci BDF corrispondenti da <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> per il prossimo avvio.",
|
"<strong>VM → LXC:</strong> rimuove l’associazione a <code>vfio-pci</code> affinché il driver nativo (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) possa usare il GPU. Per NVIDIA elimina le voci BDF corrispondenti da <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> per il prossimo avvio.",
|
||||||
"<strong>LXC → VM:</strong> prepara l’associazione a <code>vfio-pci</code>. AMD / Intel blocca il driver nativo e usa <code>options vfio-pci ids=…</code>. Per NVIDIA, <code>nvidia</code> <strong>non</strong> è bloccato globalmente: regole BDF applicano <code>driver_override=vfio-pci</code> ai dispositivi dei gruppi IOMMU coinvolti. I GPU esterni a questi gruppi possono conservare <code>nvidia</code>. Controlla ogni membro."
|
"<strong>LXC → VM:</strong> prepara l’associazione a <code>vfio-pci</code>. AMD / Intel bloccano il driver nativo e usano <code>options vfio-pci ids=…</code>. Per NVIDIA, <code>nvidia</code> viene bloccato globalmente solo quando ogni GPU NVIDIA dell’host è in VFIO; altrimenti regole per BDF applicano <code>driver_override=vfio-pci</code> ai dispositivi dei gruppi IOMMU coinvolti, e i GPU NVIDIA esterni a questi gruppi conservano <code>nvidia</code>. Controlla ogni membro del gruppo prima del passaggio."
|
||||||
],
|
],
|
||||||
"outro": "Confermare la direzione o annullare."
|
"outro": "Confermare la direzione o annullare."
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"prereqs": {
|
"prereqs": {
|
||||||
"title": "Antes de começar",
|
"title": "Antes de começar",
|
||||||
"drivers": "<strong>Prepare o Coral no anfitrião</strong>. M.2 / PCIe exige o controlador carregado; USB exige acesso ao dispositivo e permissões adequadas. Consulte <hostLink>Instalar Coral TPU no anfitrião</hostLink>. O runtime da aplicação deve estar disponível no contentor.",
|
"drivers": "<strong>Prepare o dispositivo Coral no anfitrião</strong>. M.2 / PCIe exige o controlador do anfitrião carregado; USB exige acesso ao dispositivo e permissões adequadas. Consulte <hostLink>Instalar Coral TPU no anfitrião</hostLink>. O script instala o runtime da aplicação em contentores Debian/Ubuntu; as outras distribuições têm de o disponibilizar separadamente.",
|
||||||
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||||
"container": "<strong>Um LXC existente</strong>, de preferência baseado em <strong>Debian / Ubuntu</strong>: a instalação utiliza <code>apt-get</code>. Os <strong>contentores de outras distribuições</strong> podem usar o <strong>modo apenas de passagem direta</strong>, que omite a instalação APT de <code>libedgetpu</code>. É útil se a aplicação já incluir o runtime, como a imagem Docker Frigate.",
|
"container": "<strong>Um LXC existente</strong>, de preferência baseado em <strong>Debian / Ubuntu</strong>: a instalação utiliza <code>apt-get</code>. Os <strong>contentores de outras distribuições</strong> podem usar o <strong>modo apenas de passagem direta</strong>, que omite a instalação APT de <code>libedgetpu</code>. É útil se a aplicação já incluir o runtime, como a imagem Docker Frigate.",
|
||||||
"downtime": "<strong>Preveja uma breve interrupção</strong> 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."
|
"downtime": "<strong>Preveja uma breve interrupção</strong> 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."
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"gpuHint": {
|
"gpuHint": {
|
||||||
"title": "Sugestão opcional de acesso ao GPU",
|
"title": "Sugestão opcional de acesso ao GPU",
|
||||||
"body": "Se detetar um GPU não configurado para o contentor, recomenda <lxcGpuLink>Adicionar GPU ao LXC</lxcGpuLink> para descodificação de vídeo, como Quick Sync, VA-API ou NVDEC. Pergunta se pretende continuar apenas com Coral: Sim continua; Não sai para configurar primeiro o GPU."
|
"body": "Se for detetado um GPU não configurado para este contentor, uma caixa de diálogo recomenda <lxcGpuLink>Adicionar GPU ao LXC</lxcGpuLink> para descodificação de vídeo por hardware, como Quick Sync, VA-API ou NVENC. Pergunta se pretende continuar apenas com Coral: Sim continua a configuração do TPU; Não sai para que possa configurar primeiro o GPU."
|
||||||
},
|
},
|
||||||
"usb": {
|
"usb": {
|
||||||
"title": "Configurar acesso USB no LXC",
|
"title": "Configurar acesso USB no LXC",
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
"pcie": {
|
"pcie": {
|
||||||
"title": "Configurar acesso M.2 / PCIe no LXC",
|
"title": "Configurar acesso M.2 / PCIe no LXC",
|
||||||
"body1": "Se detetar Coral M.2 / PCIe e existir <code>/dev/apex_0</code>, utiliza a API Proxmox <code>dev</code> para gerir cgroup2 em LXC com e sem privilégios:",
|
"body1": "Se detetar Coral M.2 / PCIe e existir <code>/dev/apex_0</code>, utiliza a API Proxmox <code>dev</code> para gerir cgroup2 em LXC com e sem privilégios:",
|
||||||
"body2": "Se <code>/dev/apex_0</code> ainda não existir após <hostLink>Instalar Coral no anfitrião</hostLink>, utiliza cgroup2 e um bind mount opcional com <code>create=file</code>. Isto não cria por si só um dispositivo funcional:",
|
"body2": "Se <code>/dev/apex_0</code> estiver ausente após <hostLink>Instalar Coral no anfitrião</hostLink>, o script escreve um bind mount com <code>create=file</code> e, apenas quando o número major do apex consta de <code>/proc/devices</code>, 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",
|
"rebootTitle": "Reiniciar o host primeiro se você acabou de instalar os drivers Coral",
|
||||||
"rebootBody": "A montagem alternativa não carrega <code>apex</code> 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."
|
"rebootBody": "A montagem alternativa não carrega <code>apex</code> 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."
|
||||||
},
|
},
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
"troubleshoot": {
|
"troubleshoot": {
|
||||||
"heading": "Resolução de problemas",
|
"heading": "Resolução de problemas",
|
||||||
"apexTitle": "LXC iniciado, mas falta /dev/apex_0",
|
"apexTitle": "LXC iniciado, mas falta /dev/apex_0",
|
||||||
"apexBody": "Verifique o controlador do anfitrião: <code>lsmod | grep apex</code>. Se faltar, tente <code>modprobe apex</code> ou reinicie após a instalação. Quando existir <code>/dev/apex_0</code> no anfitrião, verifique a entrada LXC e reinicie com <code>pct stop <ctid> && pct start <ctid></code>.",
|
"apexBody": "Verifique primeiro o controlador do anfitrião: <code>lsmod | grep apex</code>. Se faltar, tente <code>modprobe apex</code> ou reinicie após a instalação do controlador. Quando existir <code>/dev/apex_0</code> 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 <code>pct stop <ctid> && pct start <ctid></code>.",
|
||||||
"replugTitle": "Coral USB desaparece ao ligar noutra porta",
|
"replugTitle": "Coral USB desaparece ao ligar noutra porta",
|
||||||
"replugBody": "Confirme que o LXC monta <code>/dev/bus/usb</code> em vez da ligação <code>/dev/coral</code>. A configuração deve incluir <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> sem depender diretamente de <code>/dev/coral</code>. Execute novamente o script se a configuração for antiga.",
|
"replugBody": "Confirme que o LXC monta <code>/dev/bus/usb</code> em vez da ligação <code>/dev/coral</code>. A configuração deve incluir <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> sem depender diretamente de <code>/dev/coral</code>. Execute novamente o script se a configuração for antiga.",
|
||||||
"alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime não instalado",
|
"alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime não instalado",
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
"heading": "Procedimento passo a passo",
|
"heading": "Procedimento passo a passo",
|
||||||
"detect": {
|
"detect": {
|
||||||
"title": "Detectar GPUs e verificar IOMMU",
|
"title": "Detectar GPUs e verificar IOMMU",
|
||||||
"body": "Verifica IOMMU ativo, não só parâmetros. Com confirmação separada pode adicionar <code>intel_iommu=on</code> ou <code>amd_iommu=on</code> com <code>iommu=pt</code>. Usa <code>/etc/kernel/cmdline</code> se houver marca ZFS como <code>root=ZFS=</code>, senão <code>/etc/default/grub</code>. É uma heurística, não prova do carregador. Reinicie para ativar e verifique os grupos reais.",
|
"body": "Considera o IOMMU ativo apenas quando o kernel em execução tem <code>intel_iommu=on</code> ou <code>amd_iommu=on</code> 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 <code>iommu=pt</code>. A sua heurística de ficheiro de arranque utiliza <code>/etc/kernel/cmdline</code> quando aí existe uma marca de raiz ZFS como <code>root=ZFS=</code>; caso contrário, utiliza <code>/etc/default/grub</code>. 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?",
|
"tipTitle": "Já configurou a pós-instalação?",
|
||||||
"tipBody": "Se o <postLink>suporte VFIO IOMMU</postLink> já estiver configurado e ativo no kernel, passa a verificação. Uma definição para o próximo arranque não prova que esteja ativo agora.",
|
"tipBody": "Se o <postLink>suporte VFIO IOMMU</postLink> já estiver configurado e ativo no kernel, passa a verificação. Uma definição para o próximo arranque não prova que esteja ativo agora.",
|
||||||
"imageAlt": "Lista de GPUs detectadas com fornecedor e endereço PCI"
|
"imageAlt": "Lista de GPUs detectadas com fornecedor e endereço PCI"
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
"<strong>Uma só GPU.</strong> A consola local pode perder a imagem ao reservá-la para VFIO. Verifique antes o acesso SSH ou web de outro computador.",
|
"<strong>Uma só GPU.</strong> A consola local pode perder a imagem ao reservá-la para VFIO. Verifique antes o acesso SSH ou web de outro computador.",
|
||||||
"<strong>Política de reset AMD.</strong> Lê <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU ou dedicada sem FLR fica <em>bloqueada pela política do assistente</em>; subtipo desconhecido sem FLR exige confirmação. Não prova impossibilidade universal.",
|
"<strong>Política de reset AMD.</strong> Lê <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU ou dedicada sem FLR fica <em>bloqueada pela política do assistente</em>; subtipo desconhecido sem FLR exige confirmação. Não prova impossibilidade universal.",
|
||||||
"<strong>Estado D3cold.</strong> Bloqueia placas AMD que indicam <code>D3cold</code> pelo risco de falha na ativação. Verifique alimentação e firmware.",
|
"<strong>Estado D3cold.</strong> Bloqueia placas AMD que indicam <code>D3cold</code> pelo risco de falha na ativação. Verifique alimentação e firmware.",
|
||||||
"<strong>Grupo IOMMU.</strong> Lê <code>/sys/kernel/iommu_groups/</code> e inclui <em>todos os membros exceto pontes</em>, mesmo controladores de rede ou discos. Verifique antes de confirmar. Se IOMMU aguardar reinício, planeia inicialmente só a função GPU; confirme o isolamento depois."
|
"<strong>Análise do grupo IOMMU.</strong> Lê <code>/sys/kernel/iommu_groups/</code> e inclui no plano da VM <em>todos os membros exceto pontes</em>, possivelmente controladores de rede ou de armazenamento. O script não os lista, por isso verifique o grupo por si mesmo antes de confirmar. 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": "<strong>Áudio associado.</strong> Dois casos consoante a localização do controlador:",
|
"audioIntro": "<strong>Áudio associado.</strong> Dois casos consoante a localização do controlador:",
|
||||||
"audioDgpu": "<strong>GPU dedicada:</strong> o áudio HDMI ocupa frequentemente a função <code>.1</code> da mesma ranhura PCI e é incluído se detetado. Se o anfitrião o usava, perde acesso ao reservá-lo à VM.",
|
"audioDgpu": "<strong>GPU dedicada:</strong> o áudio HDMI ocupa frequentemente a função <code>.1</code> da mesma ranhura PCI e é incluído se detetado. Se o anfitrião o usava, perde acesso ao reservá-lo à VM.",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"items": [
|
"items": [
|
||||||
"<strong>GPU disponível.</strong> Continua sem remover atribuições.",
|
"<strong>GPU disponível.</strong> Continua sem remover atribuições.",
|
||||||
"<strong>Atribuída a outra VM.</strong> Pare primeiro a origem. Pode <em>manter as entradas e desativar o arranque automático</em> ou <em>removê-las mantendo o arranque automático</em>. Com <code>vfio-pci</code> já ativo e sem alterações necessárias no anfitrião, VM→VM pode evitar reiniciá-lo.",
|
"<strong>Atribuída a outra VM.</strong> Pare primeiro a origem. Pode <em>manter as entradas e desativar o arranque automático</em> ou <em>removê-las mantendo o arranque automático</em>. Com <code>vfio-pci</code> já ativo e sem alterações necessárias no anfitrião, VM→VM pode evitar reiniciá-lo.",
|
||||||
"<strong>Usada por LXC.</strong> Nos contentores normais escolha <em>manter a configuração e desativar o arranque automático</em> ou <em>remover dispositivos e regras antigas <code>lxc.cgroup2.devices.allow</code>/<code>lxc.mount.entry</code>, mantendo o arranque automático</em>. OCI conserva a configuração e é parado sem arranque automático; remova a GPU em Apps. A deteção por família pode abranger outras placas."
|
"<strong>GPU usada por LXC.</strong> Nos contentores normais escolha <em>manter a configuração da GPU e desativar o arranque automático</em> ou <em>remover a configuração do dispositivo GPU, mantendo o arranque automático</em>. A remoção elimina as entradas <code>devN</code> e, em AMD/Intel, também as regras antigas <code>/dev/dri</code> <code>lxc.mount.entry</code> e <code>lxc.cgroup2.devices.allow</code>. 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",
|
"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",
|
"smartTitle": "Rever áudio associado ao remover a GPU",
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
},
|
},
|
||||||
"summary": {
|
"summary": {
|
||||||
"title": "Rever o resumo da confirmação",
|
"title": "Rever o resumo da confirmação",
|
||||||
"body": "Verifique o plano final, sobretudo cada membro IOMMU, e cancele se incorreto. Impede as alterações principais, mas não reverte uma ativação IOMMU confirmada anteriormente.",
|
"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, não cada membro, por isso verifique o grupo antecipadamente. 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"
|
"imageAlt": "Resumo das alterações previstas no anfitrião e VM"
|
||||||
},
|
},
|
||||||
"hostApply": {
|
"hostApply": {
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"Escreve <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> e <code>kvm.conf</code> com <code>allow_unsafe_interrupts=1</code> e <code>ignore_msrs=1</code>. São definições do script, não requisitos universais Windows/macOS; interrupções inseguras reduzem a proteção do remapeamento.",
|
"Escreve <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> e <code>kvm.conf</code> com <code>allow_unsafe_interrupts=1</code> e <code>ignore_msrs=1</code>. São definições do script, não requisitos universais Windows/macOS; interrupções inseguras reduzem a proteção do remapeamento.",
|
||||||
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Estas regras por fabricante podem afetar outras placas com o mesmo controlador. O módulo <code>nvidia</code> é bloqueado <strong>apenas</strong> por <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> quando <em>todas</em> as NVIDIA do anfitrião estão reservadas a VFIO.",
|
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Estas regras por fabricante podem afetar outras placas com o mesmo controlador. O módulo <code>nvidia</code> é bloqueado <strong>apenas</strong> por <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> quando <em>todas</em> as NVIDIA do anfitrião estão reservadas a VFIO.",
|
||||||
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Apenas NVIDIA.</strong> Aplica <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> no PCI ADD dos BDF registados, incluindo funções do grupo IOMMU afetado. Fora desses grupos pode manter-se <code>nvidia</code>. A política BDF não divide grupos IOMMU físicos.",
|
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Apenas NVIDIA.</strong> Aplica <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> no PCI ADD dos BDF registados, incluindo funções do grupo IOMMU afetado. Fora desses grupos pode manter-se <code>nvidia</code>. A política BDF não divide grupos IOMMU físicos.",
|
||||||
"<strong>Apenas AMD.</strong> Tenta extrair ROM de <code>/sys/bus/pci/.../rom</code> ou ACPI VFCT para <code>/usr/share/kvm/vbios_<card>.bin</code>. Se conseguir, usa <code>romfile=</code>. Uma ROM válida não garante inicialização da GPU.",
|
"<strong>Apenas AMD.</strong> Tenta extrair a ROM de <code>/sys/bus/pci/.../rom</code> ou ACPI VFCT para <code>/usr/share/kvm/vbios_<vendor>_<device>.bin</code>. Se conseguir, a VM usa <code>romfile=</code>. Uma extração válida não garante a inicialização bem-sucedida da GPU.",
|
||||||
"<strong>Apenas NVIDIA.</strong> Para e desativa <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> só quando todas as NVIDIA estão reservadas a VFIO. Em uso misto conserva os serviços e <code>nvidia</code> para as placas nativas.",
|
"<strong>Apenas NVIDIA.</strong> Para e desativa <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> só quando todas as NVIDIA estão reservadas a VFIO. Em uso misto conserva os serviços e <code>nvidia</code> para as placas nativas.",
|
||||||
"<code>update-initramfs -u -k all</code> — só é executado se alguma das acima referidas tiver realmente mudado."
|
"<code>update-initramfs -u -k all</code> — só é executado se alguma das acima referidas tiver realmente mudado."
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "O que faz",
|
"title": "O que faz",
|
||||||
"body": "Adiciona <code>dev<N></code> a <code>/etc/pve/lxc/<ctid>.conf</code> para os dispositivos <code>/dev/dri/*</code>, <code>/dev/kfd</code> ou <code>/dev/nvidia*</code> aplicáveis. Inicia o contentor, instala pacotes adequados e alinha <code>video</code> e <code>render</code>. A aceleração exige hardware, bibliotecas e configuração da aplicação compatíveis."
|
"body": "Adiciona entradas <code>dev<N></code> a <code>/etc/pve/lxc/<ctid>.conf</code> para os nós <code>/dev/dri/*</code>, <code>/dev/kfd</code> ou <code>/dev/nvidia*</code> aplicáveis. Inicia o contentor, instala pacotes userspace da sua distribuição e, para Intel/AMD, alinha os grupos <code>video</code> e <code>render</code>. A aceleração das aplicações continua a exigir hardware, bibliotecas e configuração da aplicação compatíveis."
|
||||||
},
|
},
|
||||||
"compare": {
|
"compare": {
|
||||||
"heading": "Partilha LXC ou atribuição direta a uma VM",
|
"heading": "Partilha LXC ou atribuição direta a uma VM",
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
},
|
},
|
||||||
"pickCt": {
|
"pickCt": {
|
||||||
"title": "Escolha um contentor LXC",
|
"title": "Escolha um contentor LXC",
|
||||||
"body": "Lista os LXC elegíveis por ID e nome. Exclui OCI: os seus dispositivos gerem-se em Apps do gestor OCI. Para para configurar, inicia para instalar e normalmente recupera o estado inicial.",
|
"body": "Lista os contentores LXC elegíveis por ID e nome; os contentores OCI são excluídos e utilizam OCI manager Apps para os dispositivos. O contentor é parado se estiver em execução, iniciado para a instalação dos controladores e normalmente reposto no estado original (em execução/parado).",
|
||||||
"imageAlt": "Seleção de um contentor LXC existente"
|
"imageAlt": "Seleção de um contentor LXC existente"
|
||||||
},
|
},
|
||||||
"selectGpu": {
|
"selectGpu": {
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
},
|
},
|
||||||
"applyConfig": {
|
"applyConfig": {
|
||||||
"title": "Aplicar as alterações de configuração do LXC",
|
"title": "Aplicar as alterações de configuração do LXC",
|
||||||
"body1": "Para o contentor e altera <code>/etc/pve/lxc/<ctid>.conf</code>. As entradas <code>dev<N></code> incluem os GID escolhidos. O mecanismo <code>dev:</code> substitui aqui regras manuais <code>lxc.mount.entry</code>. Verifique configuração e permissões.",
|
"body1": "Para o contentor, se estiver em execução, e altera <code>/etc/pve/lxc/<ctid>.conf</code>. As entradas numeradas <code>dev<N></code> incluem o GID do anfitrião de <code>video</code> ou <code>render</code>. As linhas bind <code>lxc.mount.entry</code> existentes para <code>/dev/dri</code> são substituídas por entradas <code>dev:</code>; verifique a configuração e as permissões resultantes.",
|
||||||
"body2": "Exemplo após Intel + NVIDIA no mesmo recipiente:"
|
"body2": "Exemplo após Intel + NVIDIA no mesmo recipiente:"
|
||||||
},
|
},
|
||||||
"installDrivers": {
|
"installDrivers": {
|
||||||
@@ -127,14 +127,14 @@
|
|||||||
},
|
},
|
||||||
"alignGids": {
|
"alignGids": {
|
||||||
"title": "Alinhar GIDs e restaurar o estado",
|
"title": "Alinhar GIDs e restaurar o estado",
|
||||||
"body1": "Lê os GID do anfitrião de <code>video</code> e <code>render</code>, usando 44/104 como alternativa, e ajusta <code>/etc/group</code> no contentor. <code>video:44</code> e <code>render:104</code> são exemplos. Verifique grupos da aplicação e permissões efetivas.",
|
"body1": "Para Intel/AMD, lê os GID do anfitrião de <code>video</code> e <code>render</code>, usando 44/104 apenas como alternativa, e depois altera <code>/etc/group</code> no contentor para corresponderem; as execuções apenas com NVIDIA saltam este passo. Entradas como <code>video:44</code> e <code>render:104</code> 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."
|
"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": {
|
"vendors": {
|
||||||
"heading": "Notas por fabricante",
|
"heading": "Notas por fabricante",
|
||||||
"intelHeading": "Intel iGPU",
|
"intelHeading": "Intel iGPU",
|
||||||
"intelBody": "A aceleração Intel, incluindo <em>Quick Sync</em>, depende da geração, codecs e aplicação. Partilha nós existentes como <code>/dev/dri/card0</code> e <code>/dev/dri/renderD128</code>; a numeração pode variar. O controlador nativo do anfitrião, como <code>i915</code>, tem de os disponibilizar.",
|
"intelBody": "A aceleração multimédia Intel, incluindo <em>Quick Sync</em>, depende da geração do GPU, dos codecs e da configuração da aplicação. O script partilha os que existirem de entre <code>/dev/dri/card0</code>, <code>card1</code>, <code>renderD128</code> e <code>renderD129</code>; 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 <code>i915</code>.",
|
||||||
"amdHeading": "AMD",
|
"amdHeading": "AMD",
|
||||||
"amdBody": "AMD usa DRI para Mesa/VA-API. Se existir <code>/dev/kfd</code> 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.",
|
"amdBody": "AMD usa DRI para Mesa/VA-API. Se existir <code>/dev/kfd</code> 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",
|
"nvidiaHeading": "NVIDIA",
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
"title": "PCIe: módulos gasket e apex via DKMS",
|
"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.",
|
"body": "Executado apenas se detetar um Coral PCIe/M.2. Compila os módulos para o kernel em execução no anfitrião.",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>Limpeza.</strong> Se uma instalação anterior de <code>gasket-dkms</code> deixou pacotes num estado incorreto, tenta purgá-la antes de compilar.",
|
"<strong>Limpeza.</strong> Qualquer pacote <code>gasket-dkms</code> existente é removido antes de recompilar; se estiver num estado incorreto, o script força a sua remoção e purga.",
|
||||||
"<strong>Dependências de compilação:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
"<strong>Dependências de compilação:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
||||||
],
|
],
|
||||||
"cloneIntro": "<strong>Clona o código do controlador.</strong> Prefere <feranickLink>feranick/gasket-driver</feranickLink>, recorrendo a <googleLink>google/gasket-driver</googleLink> se indisponível. A compilação depende da compatibilidade do kernel. Aplica estas correções ao código Google conforme a versão:",
|
"cloneIntro": "<strong>Clona o código do controlador.</strong> Prefere <feranickLink>feranick/gasket-driver</feranickLink>, recorrendo a <googleLink>google/gasket-driver</googleLink> se indisponível. A compilação depende da compatibilidade do kernel. Aplica estas correções ao código Google conforme a versão:",
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
"Purga <code>gasket-dkms</code>, <code>libedgetpu1-std</code> e <code>libedgetpu1-max</code> e executa <code>apt-get autoremove --purge</code>.",
|
"Purga <code>gasket-dkms</code>, <code>libedgetpu1-std</code> e <code>libedgetpu1-max</code> e executa <code>apt-get autoremove --purge</code>.",
|
||||||
"Elimina <code>/etc/udev/rules.d/99-coral-apex.rules</code> e restaura o grupo predefinido de <code>60-gasket-dkms.rules</code> se ainda existir.",
|
"Elimina <code>/etc/udev/rules.d/99-coral-apex.rules</code> e restaura o grupo predefinido de <code>60-gasket-dkms.rules</code> se ainda existir.",
|
||||||
"Verifica os membros suplementares de <code>apex</code>. <strong>Se a lista estiver vazia</strong>, tenta remover o grupo; caso contrário mantém <code>apex</code> e lista os membros. Não verifica completamente os utilizadores que o têm como grupo principal.",
|
"Verifica os membros suplementares de <code>apex</code>. <strong>Se a lista estiver vazia</strong>, tenta remover o grupo; caso contrário mantém <code>apex</code> e lista os membros. Não verifica completamente os utilizadores que o têm como grupo principal.",
|
||||||
"Remove repositórios antigos como <code>/etc/apt/sources.list.d/coral-edgetpu.list</code> e chaveiros chamados <code>coral-edgetpu-archive-keyring.gpg</code>. O chaveiro atual /etc/apt/keyrings/coral-edgetpu.gpg permanece.",
|
"Remove a lista de repositórios <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, o antigo <code>coral-cloud.list</code> e chaveiros antigos chamados <code>coral-edgetpu-archive-keyring.gpg</code>. O chaveiro atual em <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> não é removido por esta sequência.",
|
||||||
"Propõe reiniciar <strong>apenas se PCIe estava instalado</strong> para descarregar os módulos ainda ativos. Remover apenas USB não exige reinício."
|
"Propõe reiniciar <strong>apenas se PCIe estava instalado</strong> para descarregar os módulos ainda ativos. Remover apenas USB não exige reinício."
|
||||||
],
|
],
|
||||||
"lxcWarnTitle": "LXC contêineres com apex passagem",
|
"lxcWarnTitle": "LXC contêineres com apex passagem",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "O que faz",
|
"title": "O que faz",
|
||||||
"body": "Deteta o GPU e oferece ramos mantidos que incluem o ID PCI. Bloqueia <code>nouveau</code>, descarrega o instalador oficial <code>.run</code>, utiliza DKMS e instala <code>nvidia-persistenced</code> com regras udev; patch NVENC opcional. A compilação verifica o kernel atual sem garantir todas as aplicações. Os LXC NVIDIA podem receber bibliotecas correspondentes."
|
"body": "O ProxMenux deteta o GPU e oferece ramos NVIDIA mantidos que incluem o seu ID PCI. Bloqueia <code>nouveau</code>, descarrega o instalador oficial <code>.run</code>, utiliza DKMS, instala <code>nvidia-persistenced</code>, 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": {
|
"who": {
|
||||||
"heading": "Para quem é isto?",
|
"heading": "Para quem é isto?",
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Reiniciar",
|
"title": "Reiniciar",
|
||||||
"body": "Regenera <code>initramfs</code> para todos os kernels e oferece reiniciar. <strong>Preveja esse reinício</strong> para verificar módulos e configuração nouveau no arranque, mesmo que o controlador já responda antes."
|
"body": "Após a instalação do controlador, o script regenera <code>initramfs</code> para todos os kernels; o seu último passo oferece reiniciar. <strong>Preveja esse reinício</strong> 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": {
|
"reinstallUninstall": {
|
||||||
@@ -102,8 +102,8 @@
|
|||||||
"uninstallHeading": "Desinstalar — o que é removido",
|
"uninstallHeading": "Desinstalar — o que é removido",
|
||||||
"uninstallIntro": "Após confirmação Sim/Não, remove os seguintes componentes:",
|
"uninstallIntro": "Após confirmação Sim/Não, remove os seguintes componentes:",
|
||||||
"uninstallItems": [
|
"uninstallItems": [
|
||||||
"Executa <code>nvidia-uninstall --silent</code> para a instalação <code>.run</code>, para e desativa <code>nvidia-persistenced</code> e <code>nvidia-powerd</code> e tenta descarregar <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> e <code>nvidia</code>. Afeta aplicações LXC NVIDIA; clientes ativos podem impedir a descarga.",
|
"Para e desativa <code>nvidia-persistenced</code> e <code>nvidia-powerd</code>, tenta descarregar <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> e <code>nvidia</code> e depois executa <code>nvidia-uninstall --silent</code> para a instalação <code>.run</code>. Afeta as cargas de trabalho LXC dependentes de NVIDIA; clientes ativos podem impedir a descarga.",
|
||||||
"Executa <code>apt purge</code> em <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> e <code>libcudnn*</code>, remove a árvore fonte DKMS e o cache do instalador <code>/opt/nvidia</code>.run.",
|
"Executa <code>apt purge</code> em <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> e <code>libcudnn*</code>, remove a árvore fonte DKMS e as pastas <code>nvidia-persistenced</code> e <code>nvidia-patch</code> em <code>/opt/nvidia</code>.",
|
||||||
"Remove a configuração de carregamento <code>/etc/modules-load.d/nvidia-vfio.conf</code> 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 a configuração de carregamento <code>/etc/modules-load.d/nvidia-vfio.conf</code> 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 <code>/etc/udev/rules.d/70-nvidia.rules</code> e marca NVENC como <em>removed</em> no registo de instalações geridas; não existe ficheiro de estado separado.",
|
"Remove <code>/etc/udev/rules.d/70-nvidia.rules</code> e marca NVENC como <em>removed</em> no registo de instalações geridas; não existe ficheiro de estado separado.",
|
||||||
"Regenera <code>initramfs</code> para todos os kernels, executa <code>proxmox-boot-tool refresh</code> conforme o arranque e pede reinício."
|
"Regenera <code>initramfs</code> para todos os kernels, executa <code>proxmox-boot-tool refresh</code> conforme o arranque e pede reinício."
|
||||||
|
|||||||
@@ -42,21 +42,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"situation": "Quero remover todas as atribuições deste GPU.",
|
"situation": "Quero remover todas as atribuições deste GPU.",
|
||||||
"use": "O modo LXC devolve o GPU ao controlador do anfitrião; remova as atribuições dos convidados nas opções de conflito correspondentes. O GPU continua associado a um controlador."
|
"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": {
|
"prereqs": {
|
||||||
"title": "Antes de começar",
|
"title": "Antes de começar",
|
||||||
"assigned": "<strong>Um GPU já atribuído</strong> a uma VM por VFIO ou a um LXC. Para a primeira atribuição utilize Adicionar GPU a VM / LXC.",
|
"assigned": "<strong>Um GPU já atribuído</strong> a uma VM por VFIO ou a um LXC. Para a primeira atribuição utilize Adicionar GPU a VM / LXC.",
|
||||||
"iommu": "<strong>IOMMU deve estar ativo no anfitrião</strong> ao passar <em>para</em> modo VM. Depende do firmware e do kernel; parâmetros explícitos nem sempre são necessários. Se necessário, tenta <code>intel_iommu=on iommu=pt</code> ou <code>amd_iommu=on</code> conforme o arranque, com <code>proxmox-boot-tool refresh</code> ou <code>update-grub</code>. Reveja os avisos e reinicie quando solicitado.",
|
"iommu": "<strong>IOMMU deve estar ativo no anfitrião</strong> ao passar <em>para</em> modo VM. Tanto as definições do firmware como o suporte do kernel são importantes. Se faltar <code>intel_iommu=on</code> ou <code>amd_iommu=on</code> no kernel em execução, o script adiciona-o com <code>iommu=pt</code> a <code>/etc/kernel/cmdline</code> (marca de raiz ZFS) ou a <code>/etc/default/grub</code> e depois executa <code>proxmox-boot-tool refresh</code> ou <code>update-grub</code>. Reveja eventuais avisos e reinicie quando solicitado.",
|
||||||
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
||||||
"reboot": "<strong>Preveja um reinício.</strong> Alterações persistentes ao controlador e ao arranque podem exigir regenerar initramfs e reiniciar. O script apresenta a opção no final.",
|
"reboot": "<strong>Preveja um reinício.</strong> Alterações persistentes ao controlador e ao arranque podem exigir regenerar initramfs e reiniciar. O script apresenta a opção no final.",
|
||||||
"knowList": "<strong>Identifique as VM e LXC que utilizam o GPU.</strong> O script deteta referências e pergunta como tratar cada convidado; conhecer a lista facilita a revisão."
|
"knowList": "<strong>Identifique as VM e LXC que utilizam o GPU.</strong> O script deteta referências e pergunta como tratar cada convidado; conhecer a lista facilita a revisão."
|
||||||
},
|
},
|
||||||
"blocklist": {
|
"blocklist": {
|
||||||
"title": "Nem todas as GPUs são seguras para passar para um VM",
|
"title": "Nem todas as GPUs são seguras para passar para um VM",
|
||||||
"body": "O script bloqueia o modo VM para certos ID, incluindo <code>8086:5a84</code> e <code>8086:5a85</code>, segundo a política de compatibilidade. Uma correspondência apresenta um aviso. A lista não impede passar <em>para</em> modo LXC; continuam a aplicar-se outras verificações."
|
"body": "O script bloqueia o modo VM para os ID de dispositivo <code>8086:5a84</code> e <code>8086:5a85</code>, 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 <em>para</em> modo LXC; outras verificações podem continuar a aplicar-se."
|
||||||
},
|
},
|
||||||
"running": {
|
"running": {
|
||||||
"heading": "Executar o script",
|
"heading": "Executar o script",
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
"intro": "Com base no modo atual, o script propõe o oposto como alvo:",
|
"intro": "Com base no modo atual, o script propõe o oposto como alvo:",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>VM → LXC:</strong> remove a associação a <code>vfio-pci</code> para que o controlador nativo (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) possa utilizar o GPU. Para NVIDIA remove as entradas BDF correspondentes de <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> para o próximo arranque.",
|
"<strong>VM → LXC:</strong> remove a associação a <code>vfio-pci</code> para que o controlador nativo (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) possa utilizar o GPU. Para NVIDIA remove as entradas BDF correspondentes de <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> para o próximo arranque.",
|
||||||
"<strong>LXC → VM:</strong> prepara a associação a <code>vfio-pci</code>. AMD / Intel bloqueia o controlador nativo e utiliza <code>options vfio-pci ids=…</code>. Em NVIDIA, <code>nvidia</code> <strong>não</strong> é bloqueado globalmente: regras BDF aplicam <code>driver_override=vfio-pci</code> aos dispositivos dos grupos IOMMU afetados. GPU fora desses grupos podem manter <code>nvidia</code>. Reveja todos os membros."
|
"<strong>LXC → VM:</strong> prepara a associação a <code>vfio-pci</code>. AMD / Intel bloqueiam o controlador nativo e utilizam <code>options vfio-pci ids=…</code>. Em NVIDIA, <code>nvidia</code> só é bloqueado globalmente quando todas as GPU NVIDIA do anfitrião estão em VFIO; caso contrário, regras por BDF aplicam <code>driver_override=vfio-pci</code> aos dispositivos dos grupos IOMMU afetados, e as GPU NVIDIA fora desses grupos mantêm <code>nvidia</code>. Reveja todos os membros do grupo antes de mudar."
|
||||||
],
|
],
|
||||||
"outro": "Confirme a direção ou cancele."
|
"outro": "Confirme a direção ou cancele."
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"prereqs": {
|
"prereqs": {
|
||||||
"title": "Skôr ako začnete",
|
"title": "Skôr ako začnete",
|
||||||
"drivers": "<strong>Pripravte Coral na hostiteľovi</strong>. M.2 / PCIe vyžaduje načítaný ovládač hostiteľa; USB prístup k zariadeniu a správne oprávnenia. Pozrite <hostLink>Inštalácia Coral TPU na hostiteľa</hostLink>. Runtime aplikácie musí byť dostupný v kontajneri.",
|
"drivers": "<strong>Pripravte zariadenie Coral na hostiteľovi</strong>. M.2 / PCIe vyžaduje načítaný ovládač hostiteľa; USB prístup k zariadeniu a správne oprávnenia. Pozrite <hostLink>Inštalácia Coral TPU na hostiteľa</hostLink>. Skript nainštaluje runtime aplikácie v kontajneroch Debian/Ubuntu; ostatné distribúcie ho musia poskytnúť samostatne.",
|
||||||
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||||
"container": "<strong>Existujúci LXC</strong>, ideálne založený na <strong>Debian / Ubuntu</strong>: inštalácia používa <code>apt-get</code>. <strong>Kontajnery iných distribúcií</strong> môžu zvoliť <strong>režim iba sprístupnenia zariadenia</strong>, ktorý preskočí APT inštaláciu <code>libedgetpu</code>. Hodí sa, ak aplikácia už runtime obsahuje, napríklad Docker obraz Frigate.",
|
"container": "<strong>Existujúci LXC</strong>, ideálne založený na <strong>Debian / Ubuntu</strong>: inštalácia používa <code>apt-get</code>. <strong>Kontajnery iných distribúcií</strong> môžu zvoliť <strong>režim iba sprístupnenia zariadenia</strong>, ktorý preskočí APT inštaláciu <code>libedgetpu</code>. Hodí sa, ak aplikácia už runtime obsahuje, napríklad Docker obraz Frigate.",
|
||||||
"downtime": "<strong>Počítajte s krátkym výpadkom</strong> kontajnera. Skript ho zastaví kvôli konfigurácii a spustí na inštaláciu runtime. Tieto zmeny nevyžadujú reštart hostiteľa."
|
"downtime": "<strong>Počítajte s krátkym výpadkom</strong> kontajnera. Skript ho zastaví kvôli konfigurácii a spustí na inštaláciu runtime. Tieto zmeny nevyžadujú reštart hostiteľa."
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"gpuHint": {
|
"gpuHint": {
|
||||||
"title": "Voliteľné odporúčanie prístupu ku GPU",
|
"title": "Voliteľné odporúčanie prístupu ku GPU",
|
||||||
"body": "Ak zistí GPU bez konfigurácie pre kontajner, odporučí <lxcGpuLink>Pridať GPU do LXC</lxcGpuLink> na dekódovanie videa, napríklad Quick Sync, VA-API alebo NVDEC. Pýta sa, či pokračovať iba s Coral: Áno pokračuje; Nie ukončí postup, aby ste najprv nastavili GPU."
|
"body": "Ak sa zistí GPU, ktorá nie je nakonfigurovaná pre tento kontajner, dialóg odporučí <lxcGpuLink>Pridať GPU do LXC</lxcGpuLink> na hardvérové dekódovanie videa, napríklad Quick Sync, VA-API alebo NVENC. Pýta sa, či pokračovať iba s Coral: Áno pokračuje v nastavení TPU; Nie ukončí postup, aby ste najprv mohli nastaviť GPU."
|
||||||
},
|
},
|
||||||
"usb": {
|
"usb": {
|
||||||
"title": "Nastavenie prístupu USB v LXC",
|
"title": "Nastavenie prístupu USB v LXC",
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
"pcie": {
|
"pcie": {
|
||||||
"title": "Nastavenie prístupu M.2 / PCIe v LXC",
|
"title": "Nastavenie prístupu M.2 / PCIe v LXC",
|
||||||
"body1": "Ak zistí Coral M.2 / PCIe a existuje <code>/dev/apex_0</code>, použije API Proxmoxu <code>dev</code> na správu cgroup2 v privilegovaných aj neprivilegovaných LXC:",
|
"body1": "Ak zistí Coral M.2 / PCIe a existuje <code>/dev/apex_0</code>, použije API Proxmoxu <code>dev</code> na správu cgroup2 v privilegovaných aj neprivilegovaných LXC:",
|
||||||
"body2": "Ak po <hostLink>Inštalácii Coral na hostiteľa</hostLink> ešte neexistuje <code>/dev/apex_0</code>, použije klasické cgroup2 a voliteľný bind mount s <code>create=file</code>. Samotný zápis nevytvorí funkčné zariadenie:",
|
"body2": "Ak po <hostLink>Inštalácii Coral na hostiteľa</hostLink> chýba <code>/dev/apex_0</code>, skript zapíše bind mount s <code>create=file</code> a iba vtedy, keď je číslo major zariadenia apex uvedené v <code>/proc/devices</code>, 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",
|
"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č <code>apex</code> 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."
|
"rebootBody": "Náhradné pripojenie nenačíta ovládač <code>apex</code> 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."
|
||||||
},
|
},
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
"troubleshoot": {
|
"troubleshoot": {
|
||||||
"heading": "Riešenie problémov",
|
"heading": "Riešenie problémov",
|
||||||
"apexTitle": "LXC je spustený, ale chýba /dev/apex_0",
|
"apexTitle": "LXC je spustený, ale chýba /dev/apex_0",
|
||||||
"apexBody": "Overte ovládač hostiteľa: <code>lsmod | grep apex</code>. Ak chýba, skúste <code>modprobe apex</code> alebo po inštalácii reštartujte. Keď na hostiteľovi existuje <code>/dev/apex_0</code>, overte položku LXC a reštartujte cez <code>pct stop <ctid> && pct start <ctid></code>.",
|
"apexBody": "Najprv overte ovládač hostiteľa: <code>lsmod | grep apex</code>. Ak chýba, skúste <code>modprobe apex</code> alebo po inštalácii ovládača reštartujte. Keď na hostiteľovi existuje <code>/dev/apex_0</code>, overte položku zariadenia LXC (ak sa zapísali iba náhradné položky, spustite skript znova) a reštartujte kontajner cez <code>pct stop <ctid> && pct start <ctid></code>.",
|
||||||
"replugTitle": "USB Coral zmizne po pripojení do iného portu",
|
"replugTitle": "USB Coral zmizne po pripojení do iného portu",
|
||||||
"replugBody": "Overte, že LXC pripája <code>/dev/bus/usb</code> namiesto odkazu <code>/dev/coral</code>. Konfigurácia má obsahovať <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> bez priamej závislosti od <code>/dev/coral</code>. Pri starej konfigurácii skript spustite znova.",
|
"replugBody": "Overte, že LXC pripája <code>/dev/bus/usb</code> namiesto odkazu <code>/dev/coral</code>. Konfigurácia má obsahovať <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> bez priamej závislosti od <code>/dev/coral</code>. Pri starej konfigurácii skript spustite znova.",
|
||||||
"alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime nie je nainštalovaný",
|
"alpineTitle": "Alpine / Arch / RHEL / SUSE: runtime nie je nainštalovaný",
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
"heading": "Postup krok za krokom",
|
"heading": "Postup krok za krokom",
|
||||||
"detect": {
|
"detect": {
|
||||||
"title": "Detekovať GPU a skontrolovať IOMMU",
|
"title": "Detekovať GPU a skontrolovať IOMMU",
|
||||||
"body": "Overí aktívne IOMMU, nielen parametre. Po samostatnom potvrdení môže pridať <code>intel_iommu=on</code> alebo <code>amd_iommu=on</code> s <code>iommu=pt</code>. Použije <code>/etc/kernel/cmdline</code> pri značke ZFS ako <code>root=ZFS=</code>, inak <code>/etc/default/grub</code>. Heuristika nedokazuje použitý zavádzač. Reštartujte a overte skutočné skupiny.",
|
"body": "Považuje IOMMU za aktívne iba vtedy, keď bežiace jadro má <code>intel_iommu=on</code> alebo <code>amd_iommu=on</code> 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 <code>iommu=pt</code>. Jeho heuristika zavádzacieho súboru použije <code>/etc/kernel/cmdline</code>, keď sa v ňom nachádza značka koreňa ZFS ako <code>root=ZFS=</code>; inak použije <code>/etc/default/grub</code>. 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?",
|
"tipTitle": "Už ste nastavili kroky po inštalácii?",
|
||||||
"tipBody": "Ak je <postLink>podpora VFIO IOMMU</postLink> nastavená a aktívna v jadre, kontrola prejde. Nastavenie pre ďalší štart samo osebe nedokazuje aktuálne zapnutie.",
|
"tipBody": "Ak je <postLink>podpora VFIO IOMMU</postLink> nastavená a aktívna v jadre, kontrola prejde. Nastavenie pre ďalší štart samo osebe nedokazuje aktuálne zapnutie.",
|
||||||
"imageAlt": "Zoznam zistených GPU s predávajúcim a PCI adresa"
|
"imageAlt": "Zoznam zistených GPU s predávajúcim a PCI adresa"
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
"<strong>Jediná GPU.</strong> Po rezervovaní pre VFIO môže miestna konzola stratiť obraz. Najprv overte SSH alebo webový prístup z iného počítača.",
|
"<strong>Jediná GPU.</strong> Po rezervovaní pre VFIO môže miestna konzola stratiť obraz. Najprv overte SSH alebo webový prístup z iného počítača.",
|
||||||
"<strong>Politika resetovania AMD.</strong> Číta <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU alebo samostatná karta bez FLR je <em>blokovaná politikou sprievodcu</em>; neznámy podtyp bez FLR vyžaduje potvrdenie. Nedokazuje to všeobecnú nemožnosť.",
|
"<strong>Politika resetovania AMD.</strong> Číta <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU alebo samostatná karta bez FLR je <em>blokovaná politikou sprievodcu</em>; neznámy podtyp bez FLR vyžaduje potvrdenie. Nedokazuje to všeobecnú nemožnosť.",
|
||||||
"<strong>Stav D3cold.</strong> Sprievodca blokuje AMD karty so stavom <code>D3cold</code> pre riziko zlyhania aktivácie. Overte napájanie a firmvér.",
|
"<strong>Stav D3cold.</strong> Sprievodca blokuje AMD karty so stavom <code>D3cold</code> pre riziko zlyhania aktivácie. Overte napájanie a firmvér.",
|
||||||
"<strong>Skupina IOMMU.</strong> Číta <code>/sys/kernel/iommu_groups/</code> a zahrnie <em>všetkých členov okrem mostov</em>, aj sieťové či diskové radiče. Overte ich pred potvrdením. Pri čakajúcom reštarte IOMMU plánuje najprv iba funkciu GPU; izoláciu overte po reštarte."
|
"<strong>Analýza skupiny IOMMU.</strong> Číta <code>/sys/kernel/iommu_groups/</code> a do plánu VM zahrnie <em>všetkých členov okrem mostov</em>, prípadne aj sieťové či úložné radiče. Skript ich nevypíše, preto skupinu pred potvrdením overte sami. 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": "<strong>Pridružený zvuk.</strong> Dva prípady podľa umiestnenia radiča:",
|
"audioIntro": "<strong>Pridružený zvuk.</strong> Dva prípady podľa umiestnenia radiča:",
|
||||||
"audioDgpu": "<strong>Samostatná GPU:</strong> zvuk HDMI býva vo funkcii <code>.1</code> rovnakého PCI slotu a pri zistení sa zahrnie. Ak ho používal hostiteľ, rezervovaním pre VM stratí prístup.",
|
"audioDgpu": "<strong>Samostatná GPU:</strong> zvuk HDMI býva vo funkcii <code>.1</code> rovnakého PCI slotu a pri zistení sa zahrnie. Ak ho používal hostiteľ, rezervovaním pre VM stratí prístup.",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"items": [
|
"items": [
|
||||||
"<strong>GPU je voľná.</strong> Pokračuje bez odstránenia priradení.",
|
"<strong>GPU je voľná.</strong> Pokračuje bez odstránenia priradení.",
|
||||||
"<strong>Priradená inej VM.</strong> Najprv zastavte zdrojovú VM. Môžete <em>ponechať položky a vypnúť automatický štart</em> alebo <em>odstrániť položky a ponechať automatický štart</em>. Pri aktívnom <code>vfio-pci</code> bez potrebných zmien hostiteľa možno presun VM→VM vykonať bez jeho reštartu.",
|
"<strong>Priradená inej VM.</strong> Najprv zastavte zdrojovú VM. Môžete <em>ponechať položky a vypnúť automatický štart</em> alebo <em>odstrániť položky a ponechať automatický štart</em>. Pri aktívnom <code>vfio-pci</code> bez potrebných zmien hostiteľa možno presun VM→VM vykonať bez jeho reštartu.",
|
||||||
"<strong>Používaná LXC.</strong> Pri bežných kontajneroch <em>ponechať konfiguráciu a vypnúť automatický štart</em> alebo <em>odstrániť zariadenia a staré pravidlá <code>lxc.cgroup2.devices.allow</code>/<code>lxc.mount.entry</code>, automatický štart ponechať</em>. OCI ponechá konfiguráciu a zastaví sa bez automatického štartu; GPU odstráňte cez Apps. Detekcia podľa rodiny môže zahrnúť ďalšie karty."
|
"<strong>GPU používaná LXC.</strong> Pri bežných kontajneroch zvoľte <em>ponechať konfiguráciu GPU a vypnúť automatický štart</em> alebo <em>odstrániť konfiguráciu zariadenia GPU a automatický štart ponechať</em>. Odstránenie vymaže položky <code>devN</code> a pri AMD/Intel aj staré pravidlá <code>/dev/dri</code> <code>lxc.mount.entry</code> a <code>lxc.cgroup2.devices.allow</code>. 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",
|
"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",
|
"smartTitle": "Kontrola pridruženého zvuku pri odstránení GPU",
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
},
|
},
|
||||||
"summary": {
|
"summary": {
|
||||||
"title": "Preskúmanie zhrnutia potvrdenia",
|
"title": "Preskúmanie zhrnutia potvrdenia",
|
||||||
"body": "Overte konečný plán, najmä všetkých členov IOMMU, a pri chybe zrušte. Zastaví hlavné zmeny, nevráti však skoršie potvrdené zapnutie IOMMU v nastavení štartu.",
|
"body": "Overte konečný plán hostiteľa a VM a pri chybe ho zrušte. Zobrazuje skupinu IOMMU a počet jej zariadení, nie jednotlivých členov, preto skupinu overte vopred. 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"
|
"imageAlt": "Súhrn plánovaných zmien hostiteľa a VM"
|
||||||
},
|
},
|
||||||
"hostApply": {
|
"hostApply": {
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"Zapíše <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> a <code>kvm.conf</code> s <code>allow_unsafe_interrupts=1</code> a <code>ignore_msrs=1</code>. Ide o nastavenia skriptu, nie všeobecné požiadavky Windows/macOS; nebezpečné prerušenia oslabujú ochranu premapovania.",
|
"Zapíše <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> a <code>kvm.conf</code> s <code>allow_unsafe_interrupts=1</code> a <code>ignore_msrs=1</code>. Ide o nastavenia skriptu, nie všeobecné požiadavky Windows/macOS; nebezpečné prerušenia oslabujú ochranu premapovania.",
|
||||||
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Tieto pravidlá výrobcu môžu ovplyvniť ďalšie karty s rovnakým ovládačom. Modul <code>nvidia</code> sa blokuje <strong>iba</strong> cez <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code>, keď sú <em>všetky</em> NVIDIA hostiteľa evidované pre VFIO.",
|
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Tieto pravidlá výrobcu môžu ovplyvniť ďalšie karty s rovnakým ovládačom. Modul <code>nvidia</code> sa blokuje <strong>iba</strong> cez <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code>, keď sú <em>všetky</em> NVIDIA hostiteľa evidované pre VFIO.",
|
||||||
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Iba NVIDIA.</strong> Nastaví <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> pri PCI ADD pre evidované BDF vrátane funkcií dotknutej skupiny IOMMU. Mimo skupín môže zostať <code>nvidia</code>. Politika BDF nerozdelí hardvérovú skupinu IOMMU.",
|
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Iba NVIDIA.</strong> Nastaví <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> pri PCI ADD pre evidované BDF vrátane funkcií dotknutej skupiny IOMMU. Mimo skupín môže zostať <code>nvidia</code>. Politika BDF nerozdelí hardvérovú skupinu IOMMU.",
|
||||||
"<strong>Iba AMD.</strong> Pokúsi sa získať ROM z <code>/sys/bus/pci/.../rom</code> alebo ACPI VFCT do <code>/usr/share/kvm/vbios_<card>.bin</code>. Pri úspechu použije <code>romfile=</code>. Platná ROM nezaručí inicializáciu GPU.",
|
"<strong>Iba AMD.</strong> Pokúsi sa o výpis ROM z <code>/sys/bus/pci/.../rom</code> alebo ACPI VFCT do <code>/usr/share/kvm/vbios_<vendor>_<device>.bin</code>. Pri úspechu VM použije <code>romfile=</code>. Platný výpis nezaručí úspešnú inicializáciu GPU.",
|
||||||
"<strong>Iba NVIDIA.</strong> Zastaví a vypne <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> iba ak sú všetky NVIDIA rezervované pre VFIO. Pri zmiešanom použití zachová služby a <code>nvidia</code> pre natívne karty.",
|
"<strong>Iba NVIDIA.</strong> Zastaví a vypne <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> iba ak sú všetky NVIDIA rezervované pre VFIO. Pri zmiešanom použití zachová služby a <code>nvidia</code> pre natívne karty.",
|
||||||
"<code>update-initramfs -u -k all</code> — spustí sa iba pri zmene nastavenia hostiteľa."
|
"<code>update-initramfs -u -k all</code> — spustí sa iba pri zmene nastavenia hostiteľa."
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Čo robí",
|
"title": "Čo robí",
|
||||||
"body": "Pridá <code>dev<N></code> do <code>/etc/pve/lxc/<ctid>.conf</code> pre príslušné zariadenia <code>/dev/dri/*</code>, <code>/dev/kfd</code> alebo <code>/dev/nvidia*</code>. Spustí kontajner, nainštaluje balíky distribúcie a zosúladí <code>video</code> a <code>render</code>. Akcelerácia vyžaduje kompatibilný hardvér, knižnice a nastavenie aplikácie."
|
"body": "Pridá položky <code>dev<N></code> do <code>/etc/pve/lxc/<ctid>.conf</code> pre príslušné uzly <code>/dev/dri/*</code>, <code>/dev/kfd</code> alebo <code>/dev/nvidia*</code>. Spustí kontajner, nainštaluje balíky používateľského priestoru pre jeho distribúciu a pri Intel/AMD zosúladí skupiny <code>video</code> a <code>render</code>. Akcelerácia aplikácií naďalej vyžaduje kompatibilný hardvér, knižnice a nastavenie aplikácie."
|
||||||
},
|
},
|
||||||
"compare": {
|
"compare": {
|
||||||
"heading": "Zdieľanie LXC a priame priradenie VM",
|
"heading": "Zdieľanie LXC a priame priradenie VM",
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
},
|
},
|
||||||
"pickCt": {
|
"pickCt": {
|
||||||
"title": "Vyberte kontajner LXC",
|
"title": "Vyberte kontajner LXC",
|
||||||
"body": "Zobrazí vhodné LXC podľa ID a názvu. OCI sú vylúčené; ich zariadenia nastavíte v Apps správcu OCI. Kontajner zastaví na konfiguráciu, spustí na inštaláciu a bežne obnoví pôvodný stav.",
|
"body": "Zobrazí vhodné kontajnery LXC podľa ID a názvu; kontajnery OCI sú vylúčené a pre zariadenia používajú OCI manager Apps. Kontajner sa zastaví, ak beží, spustí sa na inštaláciu ovládačov a bežne sa vráti do pôvodného stavu (spustený/zastavený).",
|
||||||
"imageAlt": "Výber existujúceho kontajnera LXC"
|
"imageAlt": "Výber existujúceho kontajnera LXC"
|
||||||
},
|
},
|
||||||
"selectGpu": {
|
"selectGpu": {
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
},
|
},
|
||||||
"applyConfig": {
|
"applyConfig": {
|
||||||
"title": "Použiť zmeny konfigurácie LXC",
|
"title": "Použiť zmeny konfigurácie LXC",
|
||||||
"body1": "Zastaví kontajner a upraví <code>/etc/pve/lxc/<ctid>.conf</code>. Položky <code>dev<N></code> obsahujú zvolené GID. Mechanizmus <code>dev:</code> tu nahrádza ručné pravidlá <code>lxc.mount.entry</code>. Overte výslednú konfiguráciu a oprávnenia.",
|
"body1": "Zastaví kontajner, ak beží, a upraví <code>/etc/pve/lxc/<ctid>.conf</code>. Číslované položky <code>dev<N></code> obsahujú GID hostiteľa pre <code>video</code> alebo <code>render</code>. Existujúce riadky bind <code>lxc.mount.entry</code> pre <code>/dev/dri</code> sa nahradia položkami <code>dev:</code>; overte výslednú konfiguráciu a oprávnenia.",
|
||||||
"body2": "Príklad po Intel + NVIDIA na tom istom kontajneri:"
|
"body2": "Príklad po Intel + NVIDIA na tom istom kontajneri:"
|
||||||
},
|
},
|
||||||
"installDrivers": {
|
"installDrivers": {
|
||||||
@@ -127,14 +127,14 @@
|
|||||||
},
|
},
|
||||||
"alignGids": {
|
"alignGids": {
|
||||||
"title": "Zarovnať GID a obnoviť stav",
|
"title": "Zarovnať GID a obnoviť stav",
|
||||||
"body1": "Načíta GID hostiteľa pre <code>video</code> a <code>render</code>; 44/104 použije iba ako náhradné hodnoty. Upraví <code>/etc/group</code> v kontajneri. <code>video:44</code> a <code>render:104</code> sú príklady, nie univerzálne ID. Overte členstvo aplikácie a účinné oprávnenia.",
|
"body1": "Pri Intel/AMD načíta GID hostiteľa pre <code>video</code> a <code>render</code>, pričom 44/104 použije iba ako náhradné hodnoty, a potom upraví <code>/etc/group</code> v kontajneri tak, aby zodpovedali; pri behu iba s NVIDIA sa tento krok preskočí. Položky ako <code>video:44</code> a <code>render:104</code> 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."
|
"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": {
|
"vendors": {
|
||||||
"heading": "Poznámky podľa výrobcu",
|
"heading": "Poznámky podľa výrobcu",
|
||||||
"intelHeading": "Intel iGPU",
|
"intelHeading": "Intel iGPU",
|
||||||
"intelBody": "Akcelerácia Intel vrátane <em>Quick Sync</em> závisí od generácie, kodekov a aplikácie. Zdieľa existujúce uzly ako <code>/dev/dri/card0</code> a <code>/dev/dri/renderD128</code>; číslovanie sa môže líšiť. Musí ich poskytovať natívny ovládač hostiteľa, napríklad <code>i915</code>.",
|
"intelBody": "Akcelerácia médií Intel vrátane <em>Quick Sync</em> závisí od generácie GPU, kodekov a nastavenia aplikácie. Skript zdieľa tie z <code>/dev/dri/card0</code>, <code>card1</code>, <code>renderD128</code> a <code>renderD129</code>, ktoré existujú; iné čísla uzlov sa nepridajú. Hostiteľ ich už musí poskytovať prostredníctvom natívneho ovládača, napríklad <code>i915</code>.",
|
||||||
"amdHeading": "AMD",
|
"amdHeading": "AMD",
|
||||||
"amdBody": "AMD používa DRI pre Mesa/VA-API. Ak hostiteľ poskytuje <code>/dev/kfd</code>, zdieľa aj ten. ROCm/OpenCL potrebuje podporovaný hardvér a kompatibilné knižnice; zdieľanie zariadenia nenainštaluje celé prostredie ROCm.",
|
"amdBody": "AMD používa DRI pre Mesa/VA-API. Ak hostiteľ poskytuje <code>/dev/kfd</code>, zdieľa aj ten. ROCm/OpenCL potrebuje podporovaný hardvér a kompatibilné knižnice; zdieľanie zariadenia nenainštaluje celé prostredie ROCm.",
|
||||||
"nvidiaHeading": "NVIDIA",
|
"nvidiaHeading": "NVIDIA",
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
"title": "PCIe: moduly gasket a apex cez DKMS",
|
"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.",
|
"body": "Spustí sa iba pri zistenom Coral PCIe/M.2. Zostaví moduly pre aktuálne spustené jadro hostiteľa.",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>Čistenie.</strong> Ak predchádzajúca inštalácia <code>gasket-dkms</code> zanechala chybný stav balíkov, skript sa ju pred zostavením pokúsi odstrániť.",
|
"<strong>Čistenie.</strong> Existujúci balík <code>gasket-dkms</code> sa pred opätovným zostavením odstráni; ak je v chybnom stave, skript vynúti jeho odstránenie a vyčistenie (purge).",
|
||||||
"<strong>Závislosti na zostavenie:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
"<strong>Závislosti na zostavenie:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
||||||
],
|
],
|
||||||
"cloneIntro": "<strong>Klonuje zdroje ovládača.</strong> Uprednostní <feranickLink>feranick/gasket-driver</feranickLink>, inak použije <googleLink>google/gasket-driver</googleLink>. Úspešné zostavenie závisí od kompatibility jadra. Na zdroje Google aplikuje tieto opravy podľa verzie:",
|
"cloneIntro": "<strong>Klonuje zdroje ovládača.</strong> Uprednostní <feranickLink>feranick/gasket-driver</feranickLink>, inak použije <googleLink>google/gasket-driver</googleLink>. Úspešné zostavenie závisí od kompatibility jadra. Na zdroje Google aplikuje tieto opravy podľa verzie:",
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
"Úplne odstráni <code>gasket-dkms</code>, <code>libedgetpu1-std</code> a <code>libedgetpu1-max</code> a spustí <code>apt-get autoremove --purge</code>.",
|
"Úplne odstráni <code>gasket-dkms</code>, <code>libedgetpu1-std</code> a <code>libedgetpu1-max</code> a spustí <code>apt-get autoremove --purge</code>.",
|
||||||
"Odstráni <code>/etc/udev/rules.d/99-coral-apex.rules</code> a obnoví predvolenú skupinu v <code>60-gasket-dkms.rules</code>, ak súbor ešte existuje.",
|
"Odstráni <code>/etc/udev/rules.d/99-coral-apex.rules</code> a obnoví predvolenú skupinu v <code>60-gasket-dkms.rules</code>, ak súbor ešte existuje.",
|
||||||
"Skontroluje doplnkových členov <code>apex</code>. <strong>Ak je zoznam prázdny</strong>, pokúsi sa skupinu odstrániť; inak <code>apex</code> zachová a vypíše členov. Nejde o úplnú kontrolu používateľov s touto primárnou skupinou.",
|
"Skontroluje doplnkových členov <code>apex</code>. <strong>Ak je zoznam prázdny</strong>, pokúsi sa skupinu odstrániť; inak <code>apex</code> zachová a vypíše členov. Nejde o úplnú kontrolu používateľov s touto primárnou skupinou.",
|
||||||
"Odstráni staré repozitáre vrátane <code>/etc/apt/sources.list.d/coral-edgetpu.list</code> a zväzky kľúčov s názvom <code>coral-edgetpu-archive-keyring.gpg</code>. Aktuálny zväzok /etc/apt/keyrings/coral-edgetpu.gpg zostane.",
|
"Odstráni zoznam repozitárov <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, starší <code>coral-cloud.list</code> a staré zväzky kľúčov s názvom <code>coral-edgetpu-archive-keyring.gpg</code>. Aktuálny zväzok kľúčov v <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> tento postup neodstráni.",
|
||||||
"Ponúkne reštart <strong>iba ak bol nainštalovaný PCIe postup</strong>, aby uvoľnil stále aktívne moduly. Odstránenie samotného USB reštart nevyžaduje."
|
"Ponúkne reštart <strong>iba ak bol nainštalovaný PCIe postup</strong>, aby uvoľnil stále aktívne moduly. Odstránenie samotného USB reštart nevyžaduje."
|
||||||
],
|
],
|
||||||
"lxcWarnTitle": "Nádoby LXC s priechodom apex",
|
"lxcWarnTitle": "Nádoby LXC s priechodom apex",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Čo robí",
|
"title": "Čo robí",
|
||||||
"body": "Zistí GPU a ponúkne udržiavané vetvy s jeho PCI ID. Zablokuje <code>nouveau</code>, stiahne oficiálny inštalátor <code>.run</code>, používa DKMS a nainštaluje <code>nvidia-persistenced</code> s pravidlami udev; patch NVENC je voliteľný. Zostavenie overuje aktuálne jadro, nezaručuje však všetky aplikácie. LXC NVIDIA môžu dostať zodpovedajúce knižnice."
|
"body": "ProxMenux zistí GPU a ponúkne udržiavané vetvy NVIDIA, ktoré uvádzajú jeho PCI ID. Zablokuje <code>nouveau</code>, stiahne oficiálny inštalátor <code>.run</code>, používa DKMS, nainštaluje <code>nvidia-persistenced</code>, 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": {
|
"who": {
|
||||||
"heading": "Pre koho je toto?",
|
"heading": "Pre koho je toto?",
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Reštartovať",
|
"title": "Reštartovať",
|
||||||
"body": "Obnoví <code>initramfs</code> pre všetky jadrá a ponúkne reštart. <strong>Naplánujte tento reštart</strong> na overenie modulov a konfigurácie nouveau pri štarte, aj keď ovládač odpovedá už predtým."
|
"body": "Po inštalácii ovládača skript obnoví <code>initramfs</code> pre všetky jadrá; jeho posledný krok ponúkne reštart. <strong>Naplánujte tento reštart</strong> na overenie trvalej konfigurácie modulov a nouveau pri novom štarte, aj keď nový ovládač odpovedá už pred reštartom."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"reinstallUninstall": {
|
"reinstallUninstall": {
|
||||||
@@ -102,8 +102,8 @@
|
|||||||
"uninstallHeading": "Odinštalovať čo sa odstráni",
|
"uninstallHeading": "Odinštalovať čo sa odstráni",
|
||||||
"uninstallIntro": "Po potvrdení Áno/Nie odstráni nasledujúce komponenty:",
|
"uninstallIntro": "Po potvrdení Áno/Nie odstráni nasledujúce komponenty:",
|
||||||
"uninstallItems": [
|
"uninstallItems": [
|
||||||
"Spustí <code>nvidia-uninstall --silent</code> pre inštaláciu <code>.run</code>, zastaví a zakáže <code>nvidia-persistenced</code> a <code>nvidia-powerd</code> a skúsi odpojiť <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> a <code>nvidia</code>. Ovplyvní aplikácie LXC NVIDIA; aktívni klienti môžu odpojenie blokovať.",
|
"Zastaví a zakáže <code>nvidia-persistenced</code> a <code>nvidia-powerd</code>, skúsi odpojiť <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> a <code>nvidia</code> a potom spustí <code>nvidia-uninstall --silent</code> pre inštaláciu <code>.run</code>. Ovplyvní záťaže LXC závislé od NVIDIA; aktívni klienti môžu odpojenie blokovať.",
|
||||||
"Spustí <code>apt purge</code> pre <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> a <code>libcudnn*</code>, odstráni zdrojový strom DKMS a vyrovnávaciu pamäť inštalátora .run v <code>/opt/nvidia</code>.",
|
"Spustí <code>apt purge</code> pre <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> a <code>libcudnn*</code>, odstráni zdrojový strom DKMS a priečinky <code>nvidia-persistenced</code> a <code>nvidia-patch</code> v <code>/opt/nvidia</code>.",
|
||||||
"Odstráni konfiguráciu načítavania modulov (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) 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 konfiguráciu načítavania modulov (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) 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 <code>/etc/udev/rules.d/70-nvidia.rules</code> a nastaví stav NVENC na <em>removed</em> v registri spravovaných inštalácií; samostatný stavový súbor neexistuje.",
|
"Odstráni <code>/etc/udev/rules.d/70-nvidia.rules</code> a nastaví stav NVENC na <em>removed</em> v registri spravovaných inštalácií; samostatný stavový súbor neexistuje.",
|
||||||
"Obnoví <code>initramfs</code> pre všetky jadrá, podľa konfigurácie zavádzania spustí <code>proxmox-boot-tool refresh</code> a vyzve na reštart."
|
"Obnoví <code>initramfs</code> pre všetky jadrá, podľa konfigurácie zavádzania spustí <code>proxmox-boot-tool refresh</code> a vyzve na reštart."
|
||||||
|
|||||||
@@ -42,21 +42,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"situation": "Chcem odstrániť všetky priradenia tohto GPU.",
|
"situation": "Chcem odstrániť všetky priradenia tohto GPU.",
|
||||||
"use": "Režim LXC vráti GPU ovládaču hostiteľa; priradenia hostí odstráňte príslušnými voľbami konfliktov. GPU zostane pripojený k ovládaču."
|
"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": {
|
"prereqs": {
|
||||||
"title": "Skôr ako začnete",
|
"title": "Skôr ako začnete",
|
||||||
"assigned": "<strong>Už priradený GPU</strong> do VM cez VFIO alebo do LXC. Pri prvom priradení použite Pridať GPU do VM / LXC.",
|
"assigned": "<strong>Už priradený GPU</strong> do VM cez VFIO alebo do LXC. Pri prvom priradení použite Pridať GPU do VM / LXC.",
|
||||||
"iommu": "<strong>IOMMU musí byť aktívne na hostiteľovi</strong> pri prechode <em>do</em> režimu VM. Záleží na firmvéri a podpore jadra; explicitné parametre nie sú vždy potrebné. V prípade potreby skript skúsi <code>intel_iommu=on iommu=pt</code> alebo <code>amd_iommu=on</code> cez aktívny spôsob zavádzania s <code>proxmox-boot-tool refresh</code> alebo <code>update-grub</code>. Skontrolujte varovania a podľa výzvy reštartujte.",
|
"iommu": "<strong>IOMMU musí byť aktívne na hostiteľovi</strong> pri prechode <em>do</em> režimu VM. Záleží na nastaveniach firmvéru aj na podpore jadra. Ak v bežiacom jadre chýba <code>intel_iommu=on</code> alebo <code>amd_iommu=on</code>, skript ho pridá s <code>iommu=pt</code> do <code>/etc/kernel/cmdline</code> (značka koreňa ZFS) alebo <code>/etc/default/grub</code> a potom spustí <code>proxmox-boot-tool refresh</code> alebo <code>update-grub</code>. Skontrolujte prípadné varovania a podľa výzvy reštartujte.",
|
||||||
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
||||||
"reboot": "<strong>Počítajte s reštartom.</strong> Trvalé zmeny ovládača a zavádzania môžu vyžadovať obnovu initramfs a reštart. Skript na to vyzve na konci.",
|
"reboot": "<strong>Počítajte s reštartom.</strong> Trvalé zmeny ovládača a zavádzania môžu vyžadovať obnovu initramfs a reštart. Skript na to vyzve na konci.",
|
||||||
"knowList": "<strong>Zistite, ktoré VM a LXC používajú GPU.</strong> Skript vyhľadá odkazy a spýta sa na každého hosťa; známy zoznam uľahčí kontrolu."
|
"knowList": "<strong>Zistite, ktoré VM a LXC používajú GPU.</strong> Skript vyhľadá odkazy a spýta sa na každého hosťa; známy zoznam uľahčí kontrolu."
|
||||||
},
|
},
|
||||||
"blocklist": {
|
"blocklist": {
|
||||||
"title": "Nie všetky GPU sú bezpečné prejsť na VM",
|
"title": "Nie všetky GPU sú bezpečné prejsť na VM",
|
||||||
"body": "Skript blokuje režim VM pre niektoré ID vrátane <code>8086:5a84</code> a <code>8086:5a85</code> podľa pravidiel kompatibility. Pri zhode zobrazí varovanie. Tento zoznam nebráni prechodu <em>do</em> režimu LXC; ďalšie kontroly naďalej platia."
|
"body": "Skript podľa svojich pravidiel kompatibility blokuje režim VM pre ID zariadení <code>8086:5a84</code> a <code>8086:5a85</code>. 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 <em>do</em> režimu LXC; ďalšie kontroly môžu naďalej platiť."
|
||||||
},
|
},
|
||||||
"running": {
|
"running": {
|
||||||
"heading": "Spustenie skriptu",
|
"heading": "Spustenie skriptu",
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
"intro": "Na základe aktuálneho režimu, skript navrhuje opak ako cieľ:",
|
"intro": "Na základe aktuálneho režimu, skript navrhuje opak ako cieľ:",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>VM → LXC:</strong> odstráni väzbu na <code>vfio-pci</code>, aby GPU mohol používať natívny ovládač (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>). Pre NVIDIA odstráni príslušné položky BDF z <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> pre ďalší štart.",
|
"<strong>VM → LXC:</strong> odstráni väzbu na <code>vfio-pci</code>, aby GPU mohol používať natívny ovládač (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>). Pre NVIDIA odstráni príslušné položky BDF z <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> pre ďalší štart.",
|
||||||
"<strong>LXC → VM:</strong> pripraví priradenie k <code>vfio-pci</code>. AMD / Intel blokuje natívny ovládač a používa <code>options vfio-pci ids=…</code>. Pre NVIDIA sa <code>nvidia</code> <strong>neblokuje</strong> globálne: pravidlá BDF nastavia <code>driver_override=vfio-pci</code> zariadeniam dotknutých skupín IOMMU. GPU mimo týchto skupín si môžu ponechať <code>nvidia</code>. Skontrolujte každého člena skupiny."
|
"<strong>LXC → VM:</strong> pripraví priradenie k <code>vfio-pci</code>. AMD / Intel blokujú natívny ovládač a používajú <code>options vfio-pci ids=…</code>. Pre NVIDIA sa <code>nvidia</code> globálne blokuje iba vtedy, keď je každá NVIDIA GPU hostiteľa vo VFIO; inak pravidlá podľa BDF nastavia <code>driver_override=vfio-pci</code> zariadeniam dotknutých skupín IOMMU a NVIDIA GPU mimo týchto skupín si ponechajú <code>nvidia</code>. Pred prepnutím skontrolujte každého člena skupiny."
|
||||||
],
|
],
|
||||||
"outro": "Potvrdiť smer alebo zrušiť."
|
"outro": "Potvrdiť smer alebo zrušiť."
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
},
|
},
|
||||||
"prereqs": {
|
"prereqs": {
|
||||||
"title": "Innan du börjar",
|
"title": "Innan du börjar",
|
||||||
"drivers": "<strong>Förbered Coral på värden</strong>. M.2 / PCIe kräver att värddrivrutinen är laddad; USB kräver enhetsåtkomst och rätt behörigheter. Se <hostLink>Installera Coral TPU på värden</hostLink>. Appens körmiljö måste finnas i containern.",
|
"drivers": "<strong>Förbered Coral-enheten på värden</strong>. M.2 / PCIe kräver att värddrivrutinen är laddad; USB kräver enhetsåtkomst och rätt behörigheter. Se <hostLink>Installera Coral TPU på värden</hostLink>. Skriptet installerar appens körmiljö i Debian/Ubuntu-containrar; andra distributioner måste tillhandahålla den separat.",
|
||||||
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||||
"container": "<strong>En befintlig LXC</strong>, helst baserad på <strong>Debian / Ubuntu</strong>: installationen använder <code>apt-get</code>. <strong>Containrar med andra distributioner</strong> kan välja <strong>läge med enbart enhetsåtkomst</strong>, som hoppar över APT-installationen av <code>libedgetpu</code>. Passar om appen redan innehåller körmiljön, som Frigates Docker-avbildning.",
|
"container": "<strong>En befintlig LXC</strong>, helst baserad på <strong>Debian / Ubuntu</strong>: installationen använder <code>apt-get</code>. <strong>Containrar med andra distributioner</strong> kan välja <strong>läge med enbart enhetsåtkomst</strong>, som hoppar över APT-installationen av <code>libedgetpu</code>. Passar om appen redan innehåller körmiljön, som Frigates Docker-avbildning.",
|
||||||
"downtime": "<strong>Planera ett kort driftstopp</strong> 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."
|
"downtime": "<strong>Planera ett kort driftstopp</strong> 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."
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
},
|
},
|
||||||
"gpuHint": {
|
"gpuHint": {
|
||||||
"title": "Valfritt förslag om GPU-åtkomst",
|
"title": "Valfritt förslag om GPU-åtkomst",
|
||||||
"body": "Om en GPU hittas men inte är konfigurerad för containern rekommenderas <lxcGpuLink>Lägg till GPU i LXC</lxcGpuLink> för videoavkodning, som Quick Sync, VA-API eller NVDEC. Frågan gäller fortsatt installation av enbart Coral: Ja fortsätter, Nej avslutar så att GPU:n kan konfigureras först."
|
"body": "Om en GPU hittas men inte är konfigurerad för den här containern rekommenderar en dialog <lxcGpuLink>Lägg till GPU i LXC</lxcGpuLink> för hårdvaruavkodning av video, som Quick Sync, VA-API eller NVENC. Den frågar om installationen ska fortsätta med enbart Coral: Ja fortsätter TPU-konfigurationen, Nej avslutar så att du kan konfigurera GPU:n först."
|
||||||
},
|
},
|
||||||
"usb": {
|
"usb": {
|
||||||
"title": "Konfigurera USB-åtkomst i LXC",
|
"title": "Konfigurera USB-åtkomst i LXC",
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
"pcie": {
|
"pcie": {
|
||||||
"title": "Konfigurera M.2 / PCIe-åtkomst i LXC",
|
"title": "Konfigurera M.2 / PCIe-åtkomst i LXC",
|
||||||
"body1": "Om M.2 / PCIe-Coral hittas och <code>/dev/apex_0</code> finns används Proxmox API <code>dev</code> för cgroup2-behörigheter i privilegierade och oprivilegierade LXC:",
|
"body1": "Om M.2 / PCIe-Coral hittas och <code>/dev/apex_0</code> finns används Proxmox API <code>dev</code> för cgroup2-behörigheter i privilegierade och oprivilegierade LXC:",
|
||||||
"body2": "Om <code>/dev/apex_0</code> ännu saknas efter <hostLink>Installera Coral på värden</hostLink> används klassisk cgroup2-konfiguration och en valfri bind-montering med <code>create=file</code>. Det skapar inte i sig en fungerande enhet:",
|
"body2": "Om <code>/dev/apex_0</code> saknas efter <hostLink>Installera Coral på värden</hostLink> skriver skriptet en bind-montering med <code>create=file</code> och, endast när apex-majornumret finns listat i <code>/proc/devices</code>, en klassisk cgroup2-regel. Ingen av dem skapar en fungerande enhet:",
|
||||||
"rebootTitle": "Starta om värden först om du nyss installerat Coral-drivrutiner",
|
"rebootTitle": "Starta om värden först om du nyss installerat Coral-drivrutiner",
|
||||||
"rebootBody": "Reservmonteringen laddar inte värdens <code>apex</code>-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."
|
"rebootBody": "Reservmonteringen laddar inte värdens <code>apex</code>-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."
|
||||||
},
|
},
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
"troubleshoot": {
|
"troubleshoot": {
|
||||||
"heading": "Felsökning",
|
"heading": "Felsökning",
|
||||||
"apexTitle": "LXC har startat men /dev/apex_0 saknas",
|
"apexTitle": "LXC har startat men /dev/apex_0 saknas",
|
||||||
"apexBody": "Kontrollera värdens drivrutin: <code>lsmod | grep apex</code>. Om den saknas, prova <code>modprobe apex</code> eller starta om efter installationen. När <code>/dev/apex_0</code> finns på värden, kontrollera LXC-enhetsposten och starta om med <code>pct stop <ctid> && pct start <ctid></code>.",
|
"apexBody": "Kontrollera först värdens drivrutin: <code>lsmod | grep apex</code>. Om den saknas, prova <code>modprobe apex</code> eller starta om efter installationen av drivrutinen. När <code>/dev/apex_0</code> finns på värden, kontrollera LXC-enhetsposten (kör skriptet igen om bara reservposterna skrevs) och starta om containern med <code>pct stop <ctid> && pct start <ctid></code>.",
|
||||||
"replugTitle": "USB-Coral försvinner efter återanslutning till en annan port",
|
"replugTitle": "USB-Coral försvinner efter återanslutning till en annan port",
|
||||||
"replugBody": "Kontrollera att LXC monterar <code>/dev/bus/usb</code> i stället för länken <code>/dev/coral</code>. Konfigurationen ska innehålla <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> utan direkt beroende av <code>/dev/coral</code>. Kör skriptet igen om konfigurationen är gammal.",
|
"replugBody": "Kontrollera att LXC monterar <code>/dev/bus/usb</code> i stället för länken <code>/dev/coral</code>. Konfigurationen ska innehålla <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> utan direkt beroende av <code>/dev/coral</code>. Kör skriptet igen om konfigurationen är gammal.",
|
||||||
"alpineTitle": "Alpine / Arch / RHEL / SUSE: körmiljö inte installerad",
|
"alpineTitle": "Alpine / Arch / RHEL / SUSE: körmiljö inte installerad",
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
"heading": "Steg för steg",
|
"heading": "Steg för steg",
|
||||||
"detect": {
|
"detect": {
|
||||||
"title": "Upptäck GPU och kontrollera IOMMU",
|
"title": "Upptäck GPU och kontrollera IOMMU",
|
||||||
"body": "Kontrollerar aktiv IOMMU, inte bara parametrar. Separat bekräftelse kan lägga till <code>intel_iommu=on</code> eller <code>amd_iommu=on</code> med <code>iommu=pt</code>. Väljer <code>/etc/kernel/cmdline</code> vid ZFS-markör som <code>root=ZFS=</code>, annars <code>/etc/default/grub</code>. Heuristiken bevisar inte vilken starthanterare som används. Starta om och kontrollera faktiska grupper.",
|
"body": "Betraktar IOMMU som aktivt endast när den körande kärnan har <code>intel_iommu=on</code> eller <code>amd_iommu=on</code> 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 <code>iommu=pt</code>. Dess heuristik för startfilen använder <code>/etc/kernel/cmdline</code> när en ZFS-rotmarkör som <code>root=ZFS=</code> finns där; annars används <code>/etc/default/grub</code>. 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?",
|
"tipTitle": "Har du redan gjort efterinstallationen?",
|
||||||
"tipBody": "Om <postLink>VFIO IOMMU-stöd</postLink> redan är inställt och aktivt i kerneln godkänns kontrollen. En inställning för nästa start bevisar inte att det är aktivt nu.",
|
"tipBody": "Om <postLink>VFIO IOMMU-stöd</postLink> redan är inställt och aktivt i kerneln godkänns kontrollen. En inställning för nästa start bevisar inte att det är aktivt nu.",
|
||||||
"imageAlt": "Lista över upptäckta GPU med leverantör och PCI-adress"
|
"imageAlt": "Lista över upptäckta GPU med leverantör och PCI-adress"
|
||||||
@@ -58,7 +58,7 @@
|
|||||||
"<strong>En enda GPU.</strong> Den lokala konsolen kan förlora bildutmatningen när VFIO reserverar GPU:n. Kontrollera först SSH- eller webbåtkomst från en annan dator.",
|
"<strong>En enda GPU.</strong> Den lokala konsolen kan förlora bildutmatningen när VFIO reserverar GPU:n. Kontrollera först SSH- eller webbåtkomst från en annan dator.",
|
||||||
"<strong>AMD-policy för återställning.</strong> Läser <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU eller separat kort utan FLR <em>blockeras av guidens policy</em>; okänd undertyp utan FLR kräver bekräftelse. Det bevisar inte att funktionen är omöjlig i alla miljöer.",
|
"<strong>AMD-policy för återställning.</strong> Läser <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU eller separat kort utan FLR <em>blockeras av guidens policy</em>; okänd undertyp utan FLR kräver bekräftelse. Det bevisar inte att funktionen är omöjlig i alla miljöer.",
|
||||||
"<strong>D3cold-läge.</strong> Guiden blockerar AMD-kort som rapporterar <code>D3cold</code> på grund av risk för aktiveringsfel. Kontrollera strömhantering och firmware.",
|
"<strong>D3cold-läge.</strong> Guiden blockerar AMD-kort som rapporterar <code>D3cold</code> på grund av risk för aktiveringsfel. Kontrollera strömhantering och firmware.",
|
||||||
"<strong>IOMMU-grupp.</strong> Läser <code>/sys/kernel/iommu_groups/</code> och tar med <em>alla medlemmar utom bryggor</em>, även nätverks- eller lagringskontroller. Kontrollera före bekräftelse. Om IOMMU väntar på omstart planeras först bara GPU-funktionen; kontrollera isoleringen efteråt."
|
"<strong>Analys av IOMMU-grupp.</strong> Läser <code>/sys/kernel/iommu_groups/</code> och tar med <em>alla medlemmar utom bryggor</em> i VM-planen, möjligen nätverks- eller lagringskontroller. Skriptet listar dem inte, så kontrollera gruppen själv före bekräftelse. 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": "<strong>Tillhörande ljud.</strong> Två fall beroende på var kontrollern finns:",
|
"audioIntro": "<strong>Tillhörande ljud.</strong> Två fall beroende på var kontrollern finns:",
|
||||||
"audioDgpu": "<strong>Separat GPU:</strong> HDMI-ljud finns ofta på funktion <code>.1</code> 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.",
|
"audioDgpu": "<strong>Separat GPU:</strong> HDMI-ljud finns ofta på funktion <code>.1</code> 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.",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"items": [
|
"items": [
|
||||||
"<strong>GPU tillgänglig.</strong> Fortsätter utan att ta bort tilldelningar.",
|
"<strong>GPU tillgänglig.</strong> Fortsätter utan att ta bort tilldelningar.",
|
||||||
"<strong>Tilldelad till en annan VM.</strong> Stoppa först källan. Välj <em>behåll poster och inaktivera automatisk start</em> eller <em>ta bort poster och behåll automatisk start</em>. Med aktiv <code>vfio-pci</code> utan nödvändiga värdändringar kan VM→VM ske utan omstart av värden.",
|
"<strong>Tilldelad till en annan VM.</strong> Stoppa först källan. Välj <em>behåll poster och inaktivera automatisk start</em> eller <em>ta bort poster och behåll automatisk start</em>. Med aktiv <code>vfio-pci</code> utan nödvändiga värdändringar kan VM→VM ske utan omstart av värden.",
|
||||||
"<strong>Används av LXC.</strong> För vanliga containrar, <em>behåll konfigurationen och inaktivera automatisk start</em> eller <em>ta bort enheter och äldre <code>lxc.cgroup2.devices.allow</code>/<code>lxc.mount.entry</code>-regler men behåll automatisk start</em>. OCI behåller konfigurationen och stoppas utan automatisk start; ta bort dess GPU i Apps. Familjebaserad identifiering kan omfatta fler kort."
|
"<strong>GPU som används av LXC.</strong> För vanliga containrar, välj <em>behåll GPU-konfigurationen och inaktivera automatisk start</em> eller <em>ta bort GPU-enhetskonfigurationen och behåll automatisk start</em>. Borttagningen raderar <code>devN</code>-posterna och, för AMD/Intel, även äldre <code>/dev/dri</code>-regler för <code>lxc.mount.entry</code> och <code>lxc.cgroup2.devices.allow</code>. 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",
|
"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",
|
"smartTitle": "Granska tillhörande ljud när GPU:n tas bort",
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
},
|
},
|
||||||
"summary": {
|
"summary": {
|
||||||
"title": "Granska bekräftelse sammanfattning",
|
"title": "Granska bekräftelse sammanfattning",
|
||||||
"body": "Granska slutplanen, särskilt varje IOMMU-medlem, och avbryt om något är fel. Stoppar huvudändringarna men återställer inte en tidigare separat bekräftad IOMMU-startändring.",
|
"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, inte varje medlem, så kontrollera gruppen i förväg. 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"
|
"imageAlt": "Översikt över planerade ändringar på värd och VM"
|
||||||
},
|
},
|
||||||
"hostApply": {
|
"hostApply": {
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
"Skriver <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> och <code>kvm.conf</code> med <code>allow_unsafe_interrupts=1</code> och <code>ignore_msrs=1</code>. Detta är skriptets kompatibilitetsval, inga universella Windows/macOS-krav; osäkra avbrott försvagar avbrottsomappningens skydd.",
|
"Skriver <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> och <code>kvm.conf</code> med <code>allow_unsafe_interrupts=1</code> och <code>ignore_msrs=1</code>. Detta är skriptets kompatibilitetsval, inga universella Windows/macOS-krav; osäkra avbrott försvagar avbrottsomappningens skydd.",
|
||||||
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Dessa regler per tillverkare kan påverka andra kort med samma drivrutin. Modulen <code>nvidia</code> blockeras <strong>bara</strong> via <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> när <em>alla</em> värdens NVIDIA-kort är registrerade för VFIO.",
|
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Dessa regler per tillverkare kan påverka andra kort med samma drivrutin. Modulen <code>nvidia</code> blockeras <strong>bara</strong> via <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> när <em>alla</em> värdens NVIDIA-kort är registrerade för VFIO.",
|
||||||
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Endast NVIDIA.</strong> Sätter <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> vid PCI ADD för registrerade BDF:er, inklusive berörda IOMMU-gruppfunktioner. Utanför grupperna kan <code>nvidia</code> behållas. BDF-policy delar inte upp hårdvarans IOMMU-grupp.",
|
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Endast NVIDIA.</strong> Sätter <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> vid PCI ADD för registrerade BDF:er, inklusive berörda IOMMU-gruppfunktioner. Utanför grupperna kan <code>nvidia</code> behållas. BDF-policy delar inte upp hårdvarans IOMMU-grupp.",
|
||||||
"<strong>Endast AMD.</strong> Försöker läsa ROM från <code>/sys/bus/pci/.../rom</code> eller ACPI VFCT till <code>/usr/share/kvm/vbios_<card>.bin</code>. Vid framgång används <code>romfile=</code>. En giltig ROM garanterar inte GPU-initialisering.",
|
"<strong>Endast AMD.</strong> Försöker dumpa ROM från <code>/sys/bus/pci/.../rom</code> eller ACPI VFCT till <code>/usr/share/kvm/vbios_<vendor>_<device>.bin</code>. Vid framgång använder VM:en <code>romfile=</code>. En giltig dump garanterar inte att GPU-initialiseringen lyckas.",
|
||||||
"<strong>Endast NVIDIA.</strong> Stoppar och inaktiverar <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> bara när alla NVIDIA-kort reserverats för VFIO. Vid blandad användning behålls tjänsterna och <code>nvidia</code> för vanliga värdkort.",
|
"<strong>Endast NVIDIA.</strong> Stoppar och inaktiverar <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> bara när alla NVIDIA-kort reserverats för VFIO. Vid blandad användning behålls tjänsterna och <code>nvidia</code> för vanliga värdkort.",
|
||||||
"<code>update-initramfs -u -k all</code> - körs endast om något av ovanstående faktiskt ändrats."
|
"<code>update-initramfs -u -k all</code> - körs endast om något av ovanstående faktiskt ändrats."
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Vad det gör",
|
"title": "Vad det gör",
|
||||||
"body": "Lägger till <code>dev<N></code> i <code>/etc/pve/lxc/<ctid>.conf</code> för tillämpliga <code>/dev/dri/*</code>-, <code>/dev/kfd</code>- eller <code>/dev/nvidia*</code>-enheter. Startar containern, installerar distributionspaket och anpassar <code>video</code> och <code>render</code>. Acceleration kräver kompatibel hårdvara, bibliotek och appinställningar."
|
"body": "Lägger till <code>dev<N></code>-poster i <code>/etc/pve/lxc/<ctid>.conf</code> för tillämpliga <code>/dev/dri/*</code>-, <code>/dev/kfd</code>- eller <code>/dev/nvidia*</code>-noder. Startar containern, installerar userspace-paket för dess distribution och anpassar, för Intel/AMD, grupperna <code>video</code> och <code>render</code>. Appacceleration kräver fortfarande kompatibel hårdvara, bibliotek och appinställningar."
|
||||||
},
|
},
|
||||||
"compare": {
|
"compare": {
|
||||||
"heading": "LXC-delning jämfört med VM-passthrough",
|
"heading": "LXC-delning jämfört med VM-passthrough",
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
},
|
},
|
||||||
"pickCt": {
|
"pickCt": {
|
||||||
"title": "Välj en LXC-container",
|
"title": "Välj en LXC-container",
|
||||||
"body": "Listar lämpliga LXC-containrar med ID och namn. OCI undantas; enheterna ändras under Apps i OCI-hanteraren. Containern stoppas för konfigurering, startas för installation och återgår normalt till ursprungligt läge.",
|
"body": "Listar lämpliga LXC-containrar med ID och namn; OCI-containrar undantas och använder OCI manager Apps för enheter. Containern stoppas om den körs, startas för installation av drivrutiner och återgår normalt till sitt ursprungliga läge (igång/stoppad).",
|
||||||
"imageAlt": "Val av en befintlig LXC-container"
|
"imageAlt": "Val av en befintlig LXC-container"
|
||||||
},
|
},
|
||||||
"selectGpu": {
|
"selectGpu": {
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
},
|
},
|
||||||
"applyConfig": {
|
"applyConfig": {
|
||||||
"title": "Tillämpa ändringarna i LXC-konfigurationen",
|
"title": "Tillämpa ändringarna i LXC-konfigurationen",
|
||||||
"body1": "Stoppar containern och ändrar <code>/etc/pve/lxc/<ctid>.conf</code>. Poster av typen <code>dev<N></code> innehåller valda GID:n. Mekanismen <code>dev:</code> ersätter här manuella <code>lxc.mount.entry</code>-regler. Kontrollera slutlig konfiguration och rättigheter.",
|
"body1": "Stoppar containern om den körs och ändrar <code>/etc/pve/lxc/<ctid>.conf</code>. Numrerade <code>dev<N></code>-poster innehåller värdens GID för <code>video</code> eller <code>render</code>. Befintliga <code>lxc.mount.entry</code>-bindrader för <code>/dev/dri</code> ersätts av <code>dev:</code>-poster; kontrollera slutlig konfiguration och rättigheter.",
|
||||||
"body2": "Exempel efter Intel + NVIDIA på samma container:"
|
"body2": "Exempel efter Intel + NVIDIA på samma container:"
|
||||||
},
|
},
|
||||||
"installDrivers": {
|
"installDrivers": {
|
||||||
@@ -127,14 +127,14 @@
|
|||||||
},
|
},
|
||||||
"alignGids": {
|
"alignGids": {
|
||||||
"title": "Anpassa GID:n och återställ tillståndet",
|
"title": "Anpassa GID:n och återställ tillståndet",
|
||||||
"body1": "Läser värdens GID:n för <code>video</code> och <code>render</code>, med 44/104 som reservvärden, och ändrar <code>/etc/group</code> i containern. <code>video:44</code> och <code>render:104</code> är exempel, inte universella ID:n. Kontrollera appens grupper och faktiska rättigheter.",
|
"body1": "För Intel/AMD läses värdens GID:n för <code>video</code> och <code>render</code>, med 44/104 endast som reservvärden, och sedan ändras <code>/etc/group</code> i containern så att de matchar; körningar med enbart NVIDIA hoppar över steget. Poster som <code>video:44</code> och <code>render:104</code> ä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."
|
"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": {
|
"vendors": {
|
||||||
"heading": "Anmärkningar per tillverkare",
|
"heading": "Anmärkningar per tillverkare",
|
||||||
"intelHeading": "Intel iGPU",
|
"intelHeading": "Intel iGPU",
|
||||||
"intelBody": "Intel-acceleration med <em>Quick Sync</em> beror på generation, kodekar och appinställningar. Delar befintliga noder som <code>/dev/dri/card0</code> och <code>/dev/dri/renderD128</code>; numreringen kan variera. Värdens vanliga drivrutin, exempelvis <code>i915</code>, måste tillhandahålla dem.",
|
"intelBody": "Intels mediaacceleration, inklusive <em>Quick Sync</em>, beror på GPU-generation, kodekar och appinställningar. Skriptet delar de av <code>/dev/dri/card0</code>, <code>card1</code>, <code>renderD128</code> och <code>renderD129</code> som finns; andra nodnummer läggs inte till. Värden måste redan tillhandahålla dem via sin inbyggda drivrutin, exempelvis <code>i915</code>.",
|
||||||
"amdHeading": "AMD",
|
"amdHeading": "AMD",
|
||||||
"amdBody": "AMD använder DRI för Mesa/VA-API. Om värden har <code>/dev/kfd</code> delas även den. ROCm/OpenCL kräver kompatibel hårdvara och bibliotek; enhetsdelning installerar inte hela ROCm-miljön.",
|
"amdBody": "AMD använder DRI för Mesa/VA-API. Om värden har <code>/dev/kfd</code> delas även den. ROCm/OpenCL kräver kompatibel hårdvara och bibliotek; enhetsdelning installerar inte hela ROCm-miljön.",
|
||||||
"nvidiaHeading": "NVIDIA",
|
"nvidiaHeading": "NVIDIA",
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
"title": "PCIe: modulerna gasket och apex med DKMS",
|
"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.",
|
"body": "Körs bara om en PCIe/M.2-Coral hittas. Bygger moduler för den kernel som värden kör.",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>Rensning.</strong> Om en tidigare installation av <code>gasket-dkms</code> lämnat paketen i felaktigt tillstånd försöker skriptet rensa bort den före bygget.",
|
"<strong>Rensning.</strong> Ett befintligt <code>gasket-dkms</code>-paket tas bort före ombygget; om paketet är i ett felaktigt tillstånd tvingar skriptet fram borttagning och rensning (purge).",
|
||||||
"<strong>Byggberoenden:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
"<strong>Byggberoenden:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
||||||
],
|
],
|
||||||
"cloneIntro": "<strong>Klonar drivrutinens källkod.</strong> Föredrar <feranickLink>feranick/gasket-driver</feranickLink>, annars används <googleLink>google/gasket-driver</googleLink>. Bygget kräver en kompatibel kernel. Google-koden får följande versionsberoende ändringar:",
|
"cloneIntro": "<strong>Klonar drivrutinens källkod.</strong> Föredrar <feranickLink>feranick/gasket-driver</feranickLink>, annars används <googleLink>google/gasket-driver</googleLink>. Bygget kräver en kompatibel kernel. Google-koden får följande versionsberoende ändringar:",
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
"Rensar bort <code>gasket-dkms</code>, <code>libedgetpu1-std</code> och <code>libedgetpu1-max</code> och kör <code>apt-get autoremove --purge</code>.",
|
"Rensar bort <code>gasket-dkms</code>, <code>libedgetpu1-std</code> och <code>libedgetpu1-max</code> och kör <code>apt-get autoremove --purge</code>.",
|
||||||
"Tar bort <code>/etc/udev/rules.d/99-coral-apex.rules</code> och återställer standardgruppen i <code>60-gasket-dkms.rules</code> om filen finns kvar.",
|
"Tar bort <code>/etc/udev/rules.d/99-coral-apex.rules</code> och återställer standardgruppen i <code>60-gasket-dkms.rules</code> om filen finns kvar.",
|
||||||
"Kontrollerar kompletterande medlemmar i <code>apex</code>. <strong>Om listan är tom</strong> försöker skriptet ta bort gruppen; annars behålls <code>apex</code> och medlemmarna listas. Användare med gruppen som primär grupp kontrolleras inte fullständigt.",
|
"Kontrollerar kompletterande medlemmar i <code>apex</code>. <strong>Om listan är tom</strong> försöker skriptet ta bort gruppen; annars behålls <code>apex</code> och medlemmarna listas. Användare med gruppen som primär grupp kontrolleras inte fullständigt.",
|
||||||
"Tar bort äldre förrådsfiler som <code>/etc/apt/sources.list.d/coral-edgetpu.list</code> och nyckelringar med namnet <code>coral-edgetpu-archive-keyring.gpg</code>. Den aktuella nyckelringen /etc/apt/keyrings/coral-edgetpu.gpg lämnas kvar.",
|
"Tar bort förrådslistan <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>, den äldre <code>coral-cloud.list</code> och gamla nyckelringar med namnet <code>coral-edgetpu-archive-keyring.gpg</code>. Den aktuella nyckelringen i <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> tas inte bort av den här sekvensen.",
|
||||||
"Erbjuder omstart <strong>bara om PCIe var installerat</strong> för att ta bort kvarvarande moduler ur kerneln. Avinstallation av enbart USB kräver ingen omstart."
|
"Erbjuder omstart <strong>bara om PCIe var installerat</strong> för att ta bort kvarvarande moduler ur kerneln. Avinstallation av enbart USB kräver ingen omstart."
|
||||||
],
|
],
|
||||||
"lxcWarnTitle": "LXC containrar med apex genomgång",
|
"lxcWarnTitle": "LXC containrar med apex genomgång",
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
},
|
},
|
||||||
"intro": {
|
"intro": {
|
||||||
"title": "Vad det gör",
|
"title": "Vad det gör",
|
||||||
"body": "Identifierar GPU:n och erbjuder underhållna grenar med dess PCI-ID. Blockerar <code>nouveau</code>, hämtar den officiella <code>.run</code>-installationen, använder DKMS och installerar <code>nvidia-persistenced</code> med udev-regler; NVENC-patch är valfri. Byggkontroller gäller aktuell kärna utan att garantera alla appar. NVIDIA-LXC kan få matchande användarbibliotek."
|
"body": "ProxMenux identifierar GPU:n och erbjuder underhållna NVIDIA-grenar som listar dess PCI-ID. Det blockerar <code>nouveau</code>, hämtar den officiella <code>.run</code>-installationen, använder DKMS, installerar <code>nvidia-persistenced</code>, 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": {
|
"who": {
|
||||||
"heading": "Vem är detta för?",
|
"heading": "Vem är detta för?",
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
},
|
},
|
||||||
"reboot": {
|
"reboot": {
|
||||||
"title": "Starta om",
|
"title": "Starta om",
|
||||||
"body": "Bygger om <code>initramfs</code> för alla kärnor och erbjuder omstart. <strong>Planera den omstarten</strong> för att kontrollera moduler och nouveau-konfiguration vid ny start, även om drivrutinen redan svarar före omstarten."
|
"body": "Efter installationen av drivrutinen bygger skriptet om <code>initramfs</code> för alla kärnor; dess sista steg erbjuder omstart. <strong>Planera den omstarten</strong> 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": {
|
"reinstallUninstall": {
|
||||||
@@ -102,8 +102,8 @@
|
|||||||
"uninstallHeading": "Avinstallera - vad som tas bort",
|
"uninstallHeading": "Avinstallera - vad som tas bort",
|
||||||
"uninstallIntro": "Efter Ja/Nej-bekräftelse tas följande komponenter bort:",
|
"uninstallIntro": "Efter Ja/Nej-bekräftelse tas följande komponenter bort:",
|
||||||
"uninstallItems": [
|
"uninstallItems": [
|
||||||
"Kör <code>nvidia-uninstall --silent</code> för <code>.run</code>-installationen, stoppar och inaktiverar <code>nvidia-persistenced</code> och <code>nvidia-powerd</code> och försöker ladda ur <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> och <code>nvidia</code>. NVIDIA-LXC påverkas; aktiva klienter kan hindra urladdningen.",
|
"Stoppar och inaktiverar <code>nvidia-persistenced</code> och <code>nvidia-powerd</code>, försöker ladda ur <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> och <code>nvidia</code> och kör sedan <code>nvidia-uninstall --silent</code> för <code>.run</code>-installationen. NVIDIA-beroende LXC-arbetslaster påverkas; aktiva klienter kan hindra urladdningen.",
|
||||||
"Kör <code>apt purge</code> på <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> och <code>libcudnn*</code>, tar bort DKMS källträd och <code>/opt/nvidia</code> .run installer cache.",
|
"Kör <code>apt purge</code> på <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> och <code>libcudnn*</code>, tar bort DKMS-källträdet och mapparna <code>nvidia-persistenced</code> och <code>nvidia-patch</code> under <code>/opt/nvidia</code>.",
|
||||||
"Tar bort modulkonfigurationen <code>/etc/modules-load.d/nvidia-vfio.conf</code> 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 modulkonfigurationen <code>/etc/modules-load.d/nvidia-vfio.conf</code> 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 <code>/etc/udev/rules.d/70-nvidia.rules</code> och sätter NVENC-status till <em>removed</em> i registret för hanterade installationer; ingen separat statusfil finns.",
|
"Tar bort <code>/etc/udev/rules.d/70-nvidia.rules</code> och sätter NVENC-status till <em>removed</em> i registret för hanterade installationer; ingen separat statusfil finns.",
|
||||||
"Bygger om <code>initramfs</code> för alla kärnor, kör <code>proxmox-boot-tool refresh</code> enligt startkonfigurationen och frågar om omstart."
|
"Bygger om <code>initramfs</code> för alla kärnor, kör <code>proxmox-boot-tool refresh</code> enligt startkonfigurationen och frågar om omstart."
|
||||||
|
|||||||
@@ -42,21 +42,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"situation": "Jag vill ta bort alla tilldelningar av denna GPU.",
|
"situation": "Jag vill ta bort alla tilldelningar av denna GPU.",
|
||||||
"use": "LXC-läget återför GPU:n till värdens drivrutin; ta bort gästtilldelningar med motsvarande konfliktval. GPU:n är fortfarande bunden till en drivrutin."
|
"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": {
|
"prereqs": {
|
||||||
"title": "Innan du börjar",
|
"title": "Innan du börjar",
|
||||||
"assigned": "<strong>En redan tilldelad GPU</strong> i en VM via VFIO eller i en LXC. För första tilldelningen, använd Lägg till GPU i VM / LXC.",
|
"assigned": "<strong>En redan tilldelad GPU</strong> i en VM via VFIO eller i en LXC. För första tilldelningen, använd Lägg till GPU i VM / LXC.",
|
||||||
"iommu": "<strong>IOMMU måste vara aktivt på värden</strong> vid byte <em>till</em> VM-läge. Firmware och kärnstöd behövs; explicita parametrar är inte alltid nödvändiga. Vid behov försöker skriptet lägga till <code>intel_iommu=on iommu=pt</code> eller <code>amd_iommu=on</code> via aktiv startkonfiguration med <code>proxmox-boot-tool refresh</code> eller <code>update-grub</code>. Granska varningar och starta om när du uppmanas.",
|
"iommu": "<strong>IOMMU måste vara aktivt på värden</strong> vid byte <em>till</em> VM-läge. Både firmwareinställningar och kärnstöd spelar roll. Om <code>intel_iommu=on</code> eller <code>amd_iommu=on</code> saknas i den körande kärnan lägger skriptet till det med <code>iommu=pt</code> i <code>/etc/kernel/cmdline</code> (ZFS-rotmarkör) eller <code>/etc/default/grub</code> och kör sedan <code>proxmox-boot-tool refresh</code> eller <code>update-grub</code>. Granska eventuella varningar och starta om när du uppmanas.",
|
||||||
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
||||||
"reboot": "<strong>Planera en omstart.</strong> Beständiga drivrutins- och startändringar kan kräva ombyggnad av initramfs och omstart. Skriptet frågar om detta i slutet.",
|
"reboot": "<strong>Planera en omstart.</strong> Beständiga drivrutins- och startändringar kan kräva ombyggnad av initramfs och omstart. Skriptet frågar om detta i slutet.",
|
||||||
"knowList": "<strong>Ta reda på vilka VM och LXC som använder GPU:n.</strong> Skriptet hittar referenser och frågar hur varje gäst ska hanteras; en känd lista underlättar granskningen."
|
"knowList": "<strong>Ta reda på vilka VM och LXC som använder GPU:n.</strong> Skriptet hittar referenser och frågar hur varje gäst ska hanteras; en känd lista underlättar granskningen."
|
||||||
},
|
},
|
||||||
"blocklist": {
|
"blocklist": {
|
||||||
"title": "Inte alla GPU är säkra att passera till en VM",
|
"title": "Inte alla GPU är säkra att passera till en VM",
|
||||||
"body": "Skriptet blockerar VM-läge för vissa enhets-ID, bland annat <code>8086:5a84</code> och <code>8086:5a85</code>, enligt sin kompatibilitetspolicy. En träff visar en varning. Listan hindrar inte byte <em>till</em> LXC-läge; andra kontroller kan fortfarande gälla."
|
"body": "Skriptet blockerar VM-läge för enhets-ID <code>8086:5a84</code> och <code>8086:5a85</code> 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 <em>till</em> LXC-läge; andra kontroller kan fortfarande gälla."
|
||||||
},
|
},
|
||||||
"running": {
|
"running": {
|
||||||
"heading": "Kör skriptet",
|
"heading": "Kör skriptet",
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
"intro": "Baserat på det aktuella läget föreslår manuset motsatsen som mål:",
|
"intro": "Baserat på det aktuella läget föreslår manuset motsatsen som mål:",
|
||||||
"items": [
|
"items": [
|
||||||
"<strong>VM → LXC:</strong> tar bort bindningen till <code>vfio-pci</code> så att den inbyggda drivrutinen (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) kan använda GPU:n. För NVIDIA tas motsvarande BDF-poster bort från <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> inför nästa start.",
|
"<strong>VM → LXC:</strong> tar bort bindningen till <code>vfio-pci</code> så att den inbyggda drivrutinen (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) kan använda GPU:n. För NVIDIA tas motsvarande BDF-poster bort från <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> inför nästa start.",
|
||||||
"<strong>LXC → VM:</strong> förbereder bindning till <code>vfio-pci</code>. AMD / Intel blockerar den inbyggda drivrutinen och använder <code>options vfio-pci ids=…</code>. För NVIDIA blockeras <code>nvidia</code> <strong>inte</strong> globalt: BDF-regler sätter <code>driver_override=vfio-pci</code> för enheterna i berörda IOMMU-grupper. GPU:er utanför grupperna kan behålla <code>nvidia</code>. Granska varje gruppmedlem."
|
"<strong>LXC → VM:</strong> förbereder bindning till <code>vfio-pci</code>. AMD / Intel blockerar den inbyggda drivrutinen och använder <code>options vfio-pci ids=…</code>. För NVIDIA blockeras <code>nvidia</code> globalt endast när varje NVIDIA-GPU på värden är i VFIO; annars sätter regler per BDF <code>driver_override=vfio-pci</code> för enheterna i berörda IOMMU-grupper, och NVIDIA-GPU:er utanför grupperna behåller <code>nvidia</code>. Granska varje gruppmedlem före bytet."
|
||||||
],
|
],
|
||||||
"outro": "Bekräfta riktningen eller avbryt."
|
"outro": "Bekräfta riktningen eller avbryt."
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user