mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 19:02:31 +00:00
Describe the GPU and Coral assistants as the scripts run them
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
},
|
||||
"prereqs": {
|
||||
"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'",
|
||||
"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."
|
||||
@@ -44,7 +44,7 @@
|
||||
},
|
||||
"gpuHint": {
|
||||
"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": {
|
||||
"title": "Write LXC config — USB path",
|
||||
@@ -55,7 +55,7 @@
|
||||
"pcie": {
|
||||
"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:",
|
||||
"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",
|
||||
"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": {
|
||||
"heading": "Troubleshooting",
|
||||
"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",
|
||||
"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",
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
"heading": "Walking through the flow",
|
||||
"detect": {
|
||||
"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?",
|
||||
"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"
|
||||
@@ -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>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>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:",
|
||||
"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": [
|
||||
"<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 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",
|
||||
"smartTitle": "Audio siblings are cleaned up smartly too",
|
||||
@@ -90,7 +90,7 @@
|
||||
},
|
||||
"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"
|
||||
},
|
||||
"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.",
|
||||
"<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.",
|
||||
"<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.",
|
||||
"<code>update-initramfs -u -k all</code> — only runs if any of the above actually changed."
|
||||
]
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
},
|
||||
"intro": {
|
||||
"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": {
|
||||
"heading": "LXC sharing vs VM passthrough",
|
||||
@@ -78,7 +78,7 @@
|
||||
},
|
||||
"pickCt": {
|
||||
"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"
|
||||
},
|
||||
"selectGpu": {
|
||||
@@ -98,7 +98,7 @@
|
||||
},
|
||||
"applyConfig": {
|
||||
"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:"
|
||||
},
|
||||
"installDrivers": {
|
||||
@@ -127,14 +127,14 @@
|
||||
},
|
||||
"alignGids": {
|
||||
"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."
|
||||
}
|
||||
},
|
||||
"vendors": {
|
||||
"heading": "Vendor-specific notes",
|
||||
"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",
|
||||
"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",
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
"title": "PCIe path — gasket + apex kernel modules via DKMS",
|
||||
"body": "Only runs if the script found a PCIe / M.2 Coral. It's the heavier of the two paths because it's compiling a kernel module for your exact running kernel.",
|
||||
"items": [
|
||||
"<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>."
|
||||
],
|
||||
"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>.",
|
||||
"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.",
|
||||
"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."
|
||||
],
|
||||
"lxcWarnTitle": "LXC containers with apex passthrough",
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
},
|
||||
"intro": {
|
||||
"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": {
|
||||
"heading": "Who is this for?",
|
||||
@@ -89,7 +89,7 @@
|
||||
},
|
||||
"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": {
|
||||
@@ -102,8 +102,8 @@
|
||||
"uninstallHeading": "Uninstall — what gets removed",
|
||||
"uninstallIntro": "After a yes/no confirmation, the uninstall removes the following driver components:",
|
||||
"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.",
|
||||
"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.",
|
||||
"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>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 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."
|
||||
|
||||
@@ -42,21 +42,21 @@
|
||||
},
|
||||
{
|
||||
"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": {
|
||||
"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.",
|
||||
"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",
|
||||
"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."
|
||||
},
|
||||
"blocklist": {
|
||||
"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": {
|
||||
"heading": "Running the script",
|
||||
@@ -85,7 +85,7 @@
|
||||
"intro": "Based on the current mode, the script proposes the opposite as target:",
|
||||
"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>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."
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user