Skip to content

nvidia: close the hardware acceleration step when no GPU is usable | pin the whole NVIDIA userspace to the host's driver version - #215

Merged
MickLesk merged 4 commits into
mainfrom
fix/nvidia-userspace-version-pin
Nov 7, 2026
Merged

MickLesk merged 4 commits into
mainfrom
fix/nvidia-userspace-version-pin

Conversation

@MickLesk

@MickLesk MickLesk commented Nov 6, 2026 •

Copy link
Copy Markdown
Member

✍️ Description

libcuda1 needs libnvidia-ptxjitcompiler1, libnvidia-gpucomp and libnvidia-pkcs11-openssl3 at exactly its own version. Only the four top-level packages were requested at the host's version, so apt resolved the rest to the newest release in the CUDA repo and the install failed. A version stanza now covers the whole libnvidia-* family. It has to come before the origin pin: apt takes the first stanza that matches a version, so behind the origin pin it is never read.

msg_warn leaves the step, its error message and the failed apt record in place, so a later failure would be reported under hardware acceleration with the NVIDIA error. The success line keeps its old text, since telemetry reports it as the step.

🔗 Related Issue

Fixes #209

✅ Prerequisites (X in brackets)

  • Self-review completed – Code follows project standards.
  • Tested thoroughly – Changes work as expected (Proxmox VE and/or Incus, as applicable).
  • No security risks – No hardcoded secrets, unnecessary privilege escalations, or permission issues.
  • API.txt regenerated – If a function signature or behavior changed, API.txt was updated to match.

🛠️ Type of Change (X in brackets)

  • 🐞 Bug fix – Resolves an issue without breaking functionality.
  • ✨ New feature – Adds new, non-breaking functionality.
  • 💥 Breaking change – Alters existing behavior in a way that may require updates in every downstream script.
  • 🔧 Refactoring / Code Cleanup – Improves readability or maintainability without changing functionality.
  • 📝 Documentation update – Changes to README, docs/, CONTRIBUTING.md, or other docs.

🤖 AI Assistance (X in brackets)

If you used an AI tool (GitHub Copilot, Claude, ChatGPT, etc.) to write or generate any code in this PR, you must confirm compliance below.
Select exactly one option.

  • No AI used – Code was written without AI assistance.
  • AI was used – The output has been reviewed and corrected, and I take responsibility for it matching this repo's conventions.

libcuda1 needs libnvidia-ptxjitcompiler1, libnvidia-gpucomp and
libnvidia-pkcs11-openssl3 at exactly its own version. Only the four
top-level packages were requested at the host's version, so apt resolved
the rest to the newest release in the CUDA repo and the install failed
(#209). A version stanza now covers the whole libnvidia-* family. It has
to come before the origin pin: apt takes the first stanza that matches a
version, so behind the origin pin it is never read.

The fallback that kept only libcuda1 pinned could not work either --
libnvcuvid1 at the newest release depends on libcuda1 at that release --
so it is replaced by an error that carries apt's own reason.

setup_hwaccel no longer prints a green line when no GPU ended up usable,
and an AMD APU now reports amd instead of none.
msg_warn leaves the step, its error message and the failed apt record in
place, so a later failure would be reported under hardware acceleration
with the NVIDIA error. The success line keeps its old text, since
telemetry reports it as the step.
@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

Try this branch

The engine and the scripts resolve independently, so a production script can
be run against the engine from this PR by setting one variable:

COMMUNITY_SCRIPTS_CORE_URL=https://raw.githubusercontent.com/community-scripts/core/fix/nvidia-userspace-version-pin \
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/debian.sh)"

Swap ct/debian.sh for whatever exercises the change.

Run a script from a fork as well
curl -fsSL https://raw.githubusercontent.com/community-scripts/core/fix/nvidia-userspace-version-pin/tools/run.sh |
  bash -s -- https://raw.githubusercontent.com/YOU/DevScripts/your-branch ct/debian.sh \
             https://raw.githubusercontent.com/community-scripts/core/fix/nvidia-userspace-version-pin

Note that run.sh is reached through a pipe, so the script it starts inherits
an exhausted stdin. Whiptail is fine — it opens /dev/tty — but a plain read
would see EOF. The single-variable form above does not have that problem.

Useful flags while testing

dev_mode=net logs every engine fetch with status and duration, which is the
quickest way to confirm the branch is really being used. dev_mode=keep stops a
failed build from deleting the container along with the evidence.

Co-authored-by: MickLesk <47820557+MickLesk@users.noreply.github.com>
@MickLesk
MickLesk marked this pull request as draft November 6, 2026 16:57
Review findings on the NVIDIA version pin:
- apt -y refuses the downgrade a host rollback needs even with the pin
  in place, so the install passes --allow-downgrades. The simulation
  that explains a failure runs with the same flags.
- A failed run no longer rewrites the pin file without the version
  stanza, which left an earlier install free to move on the next
  apt upgrade. The origin-only file is written only when none exists.
- AMD_APU reports amd_apu instead of amd: consumers read amd as ROCm,
  and an APU gets Mesa only.
@MickLesk
MickLesk marked this pull request as ready for review November 7, 2026 20:35
@MickLesk
MickLesk merged commit e2711a5 into main Nov 7, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

NVIDIA: userspace installation fails because exact-version dependencies are not pinned

2 participants