Ubuntu packaging changes for 590+, branch and version locking for Debian/Ubuntu

Ubuntu packaging changes for 590+

From branch 590 onward the Ubuntu packages will no longer have the branch in the name (ex. libnvidia-compute-580libnvidia-compute), so the installation procedure will change slightly. Compared to packages up to and including 580, the upgrade will no longer be an uninstall/reinstall or swap of the packages, but the normal use case will be a driver upgrade and the branch locking will be “opt in”.

To make the branch locking (tracking only a specific branch) and version locking (stick to a single driver release), we’re introducing driver pinning packages.

For specialized systems (ex. DGX or compute clusters) that do custom installations (compute only, etc.) making sure the pinning package is installed before the driver provides a more consistent experience.

Branch and version locking for Debian/Ubuntu

New releases of drivers in the current supported branches (535 , 570, 580 at the moment of writing this) will have two new packages available, a branch locking package and a version locking package. For example, with the release of 580.105.08, these packages will be available:

  • nvidia-driver-pinning-580.105.08
  • nvidia-driver-pinning-580

When installed, the configuration will instruct APT to consider one specific branch or one specific version as the highest version available in the repositories; so any upgrade command will install the specific branch or version requested.

In Debian, where the packages already had consistent naming across releases, there will be the option to move to any branch/version from any branch/version where the version locking packages are available.

In Ubuntu, where package names historically carried the branch in the name, it will only be possible to do “lateral” movements within any given branch until the first 590 release. Afterwards, (so 590+) it’s possible to move from any branch/version to any other branch/version.

The NVIDIA Driver Installation Guide has been already updated with the upcoming changes:

Benefits

  • Ubuntu - All packages are aligned to the same driver branch, including ones that were never consistent (nvidia-modprobe, etc.).
  • Ubuntu - All packages can be renamed, simplified and made consistent for across branches. This means consistent documentation and consistent instructions that don’t need to be changed release to release.
  • Ubuntu - Solves the issue where Canonical packages may get mixed into a transaction with NVIDIA packages when installing / upgrading.
  • Ubuntu - “Normal” users (laptops, workstations, etc.) can just add the repository and get upgraded to the latest drivers like any other package. This has been a long requested feature.
  • Ubuntu/Debian - Users can now downgrade easily.
  • Ubuntu/Debian - Users can move back and forth on branches or versions.
  • Ubuntu/Debian - Users can lock a specific driver version.
  • Ubuntu/Debian - The number of Transitional packages in the Ubuntu repositories stops increasing.
8 Likes

Version locking use cases

Aligned packages

All packages are aligned to the same driver branch, including ones that were never consistent (nvidia-modprobe. etc.).

# apt-get -V dist-upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
   nvidia-modprobe (580.95.05-0ubuntu1)
Use 'apt autoremove' to remove it.
The following packages will be DOWNGRADED:
   libnvidia-nscq (590.17-0ubuntu1 => 580.95.05-1)
   libnvsdm (590.17-0ubuntu1 => 580.95.05-1)
   nvidia-fabricmanager (590.17-0ubuntu1 => 580.95.05-1)
   nvidia-imex (590.17-0ubuntu1 => 580.95.05-1)
   nvidia-modprobe (590.17-0ubuntu1 => 580.95.05-0ubuntu1)
   nvidia-persistenced (590.17-0ubuntu1 => 580.95.05-0ubuntu1)
0 upgraded, 0 newly installed, 6 downgraded, 0 to remove and 0 not upgraded.
Need to get 16.4 MB of archives.
After this operation, 4013 kB disk space will be freed.
Do you want to continue? [Y/n]
[...]

All packages can have proper versions even if we must declare dependencies as equal or higher (ex. nvidia-fabricmanager, etc.) due to APT limitations.

# apt-get -V install nvidia-driver-cuda nvidia-driver
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
   firmware-nvidia-gsp (570.195.03-1)
   libcuda1 (570.195.03-1)
   libcuda1:i386 (570.195.03-1)
   libcudadebugger1 (570.195.03-1)
   libegl-nvidia0 (570.195.03-1)
   libegl-nvidia0:i386 (570.195.03-1)
   libgles-nvidia1 (570.195.03-1)
   libgles-nvidia1:i386 (570.195.03-1)
   libgles-nvidia2 (570.195.03-1)
   libgles-nvidia2:i386 (570.195.03-1)
   libglx-nvidia0 (570.195.03-1)
   libglx-nvidia0:i386 (570.195.03-1)
   libnvcuvid1 (570.195.03-1)
   libnvidia-allocator1 (570.195.03-1)
   libnvidia-allocator1:i386 (570.195.03-1)
   libnvidia-api1 (570.195.03-1)
   libnvidia-cfg1 (570.195.03-1)
   libnvidia-egl-gbm1 (1.1.2.1-2)
   libnvidia-egl-gbm1:i386 (1.1.2.1-2)
   libnvidia-egl-wayland1 (1:1.1.20-1)
   libnvidia-egl-wayland1:i386 (1:1.1.20-1)
   libnvidia-egl-xcb1 (1:1.0.3-1)
   libnvidia-egl-xcb1:i386 (1:1.0.3-1)
   libnvidia-egl-xlib1 (1:1.0.3-1)
   libnvidia-egl-xlib1:i386 (1:1.0.3-1)
   libnvidia-eglcore (570.195.03-1)
   libnvidia-eglcore:i386 (570.195.03-1)
   libnvidia-encode1 (570.195.03-1)
   libnvidia-fbc1 (570.195.03-1)
   libnvidia-glcore (570.195.03-1)
   libnvidia-glcore:i386 (570.195.03-1)
   libnvidia-glvkspirv (570.195.03-1)
   libnvidia-glvkspirv:i386 (570.195.03-1)
   libnvidia-gpucomp (570.195.03-1)
   libnvidia-gpucomp:i386 (570.195.03-1)
   libnvidia-ml1 (570.195.03-1)
   libnvidia-ml1:i386 (570.195.03-1)
   libnvidia-ngx1 (570.195.03-1)
   libnvidia-nvvm4 (570.195.03-1)
   libnvidia-opticalflow1 (570.195.03-1)
   libnvidia-pkcs11-openssl3 (570.195.03-1)
   libnvidia-ptxjitcompiler1 (570.195.03-1)
   libnvidia-ptxjitcompiler1:i386 (570.195.03-1)
   libnvidia-rtcore (570.195.03-1)
   libnvidia-sandboxutils (570.195.03-1)
   libnvidia-vksc-core (570.195.03-1)
   libnvoptix1 (570.195.03-1)
   nvidia-driver-libs (570.195.03-1)
   nvidia-driver-libs:i386 (570.195.03-1)
   nvidia-egl-icd (570.195.03-1)
   nvidia-kernel-dkms (570.195.03-1)
   nvidia-kernel-support (570.195.03-1)
   nvidia-modprobe (570.195.03-1)
   nvidia-opencl-icd (570.195.03-1)
   nvidia-persistenced (570.195.03-1)
   nvidia-vdpau-driver (570.195.03-1)
   nvidia-vulkan-icd (570.195.03-1)
   nvidia-vulkan-icd:i386 (570.195.03-1)
   xserver-xorg-video-nvidia (570.195.03-1)
Suggested packages:
   nvidia-settings (570.195.03-1)
   libnvidia-fbc
   vulkan-tools (1.3.239.0+dfsg1-1)
   vulkan-tools:i386 (1.3.239.0+dfsg1-1)
The following NEW packages will be installed:
   firmware-nvidia-gsp (570.195.03-1)
   libcuda1 (570.195.03-1)
   libcuda1:i386 (570.195.03-1)
   libcudadebugger1 (570.195.03-1)
   libegl-nvidia0 (570.195.03-1)
   libegl-nvidia0:i386 (570.195.03-1)
   libgles-nvidia1 (570.195.03-1)
   libgles-nvidia1:i386 (570.195.03-1)
   libgles-nvidia2 (570.195.03-1)
   libgles-nvidia2:i386 (570.195.03-1)
   libglx-nvidia0 (570.195.03-1)
   libglx-nvidia0:i386 (570.195.03-1)
   libnvcuvid1 (570.195.03-1)
   libnvidia-allocator1 (570.195.03-1)
   libnvidia-allocator1:i386 (570.195.03-1)
   libnvidia-api1 (570.195.03-1)
   libnvidia-cfg1 (570.195.03-1)
   libnvidia-egl-gbm1 (1.1.2.1-2)
   libnvidia-egl-gbm1:i386 (1.1.2.1-2)
   libnvidia-egl-wayland1 (1:1.1.20-1)
   libnvidia-egl-wayland1:i386 (1:1.1.20-1)
   libnvidia-egl-xcb1 (1:1.0.3-1)
   libnvidia-egl-xcb1:i386 (1:1.0.3-1)
   libnvidia-egl-xlib1 (1:1.0.3-1)
   libnvidia-egl-xlib1:i386 (1:1.0.3-1)
   libnvidia-eglcore (570.195.03-1)
   libnvidia-eglcore:i386 (570.195.03-1)
   libnvidia-encode1 (570.195.03-1)
   libnvidia-fbc1 (570.195.03-1)
   libnvidia-glcore (570.195.03-1)
   libnvidia-glcore:i386 (570.195.03-1)
   libnvidia-glvkspirv (570.195.03-1)
   libnvidia-glvkspirv:i386 (570.195.03-1)
   libnvidia-gpucomp (570.195.03-1)
   libnvidia-gpucomp:i386 (570.195.03-1)
   libnvidia-ml1 (570.195.03-1)
   libnvidia-ml1:i386 (570.195.03-1)
   libnvidia-ngx1 (570.195.03-1)
   libnvidia-nvvm4 (570.195.03-1)
   libnvidia-opticalflow1 (570.195.03-1)
   libnvidia-pkcs11-openssl3 (570.195.03-1)
   libnvidia-ptxjitcompiler1 (570.195.03-1)
   libnvidia-ptxjitcompiler1:i386 (570.195.03-1)
   libnvidia-rtcore (570.195.03-1)
   libnvidia-sandboxutils (570.195.03-1)
   libnvidia-vksc-core (570.195.03-1)
   libnvoptix1 (570.195.03-1)
   nvidia-driver (570.195.03-1)
   nvidia-driver-cuda (570.195.03-1)
   nvidia-driver-libs (570.195.03-1)
   nvidia-driver-libs:i386 (570.195.03-1)
   nvidia-egl-icd (570.195.03-1)
   nvidia-kernel-dkms (570.195.03-1)
   nvidia-kernel-support (570.195.03-1)
   nvidia-modprobe (570.195.03-1)
   nvidia-opencl-icd (570.195.03-1)
   nvidia-persistenced (570.195.03-1)
   nvidia-vdpau-driver (570.195.03-1)
   nvidia-vulkan-icd (570.195.03-1)
   nvidia-vulkan-icd:i386 (570.195.03-1)
   xserver-xorg-video-nvidia (570.195.03-1)
0 upgraded, 61 newly installed, 0 to remove and 0 not upgraded.
Need to get 406 MB/407 MB of archives.
After this operation, 1252 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Consistency

All packages can be renamed, simplified and made consistent for all branches. This means consistent documentation and consistent instructions that we don’t need to edit every time we release a new branch.

Mixing of Canonical packages

We solve the issue where one or more random Canonical packages are pulled down mixed in a transaction with NVIDIA packages when installing / upgrading.

# apt-get -V install libnvidia-compute-580 libnvidia-gl-580 libnvsdm-580 nvidia-fabricmanager-580 nvidia-imex-580 libnvidia-nscq-580
[...]
# dpkg -l | grep nvidia | grep ubuntu0
ii  libnvidia-nscq-580              580.65.06-0ubuntu0.24.04.1        amd64        NVSwitch Configuration and Query library
ii  nvidia-fabricmanager-580        580.65.06-0ubuntu0.24.04.1        amd64        Fabric Manager for NVSwitch based systems.
ii  nvidia-imex-580                 580.65.06-0ubuntu0.24.04.1        amd64        IMEX Manager for NVIDIA based systems.
# apt-get install nvidia-driver-pinning-580
[...]
# apt-get -V install libnvidia-compute-580 libnvidia-gl-580 libnvsdm nvidia-fabricmanager nvidia-imex libnvidia-nscq
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
libnvidia-compute-580 is already the newest version (580.95.05-0ubuntu1).
libnvidia-gl-580 is already the newest version (580.95.05-0ubuntu1).
libnvsdm is already the newest version (580.95.05-1).
The following packages will be REMOVED:
   libnvidia-nscq-580
   nvidia-fabricmanager-580
   nvidia-imex-580
The following NEW packages will be installed:
   libnvidia-nscq (580.95.05-1)
   nvidia-fabricmanager (580.95.05-1)
   nvidia-imex (580.95.05-1)
0 upgraded, 3 newly installed, 3 to remove and 0 not upgraded.
Need to get 15.8 MB of archives.
After this operation, 26.6 kB of additional disk space will be used.
Do you want to continue? [Y/n] ^C
[...]

Easy downgrade

Users can also downgrade easily, which is not really the case now.

# apt-get -V dist-upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following package was automatically installed and is no longer required:
  libnvidia-nvvm704 (590.17-1)
Use 'apt autoremove' to remove it.
The following packages will be REMOVED:
  libnvidia-present (590.17-1)
  libnvidia-tileiras (590.17-1)
The following packages will be DOWNGRADED:
  firmware-nvidia-gsp (590.17-1 => 570.195.03-1)
  libcuda1 (590.17-1 => 570.195.03-1)
  libcuda1:i386 (590.17-1 => 570.195.03-1)
  libcudadebugger1 (590.17-1 => 570.195.03-1)
  libegl-nvidia0 (590.17-1 => 570.195.03-1)
  libegl-nvidia0:i386 (590.17-1 => 570.195.03-1)
  libgles-nvidia1 (590.17-1 => 570.195.03-1)
  libgles-nvidia1:i386 (590.17-1 => 570.195.03-1)
  libgles-nvidia2 (590.17-1 => 570.195.03-1)
  libgles-nvidia2:i386 (590.17-1 => 570.195.03-1)
  libglx-nvidia0 (590.17-1 => 570.195.03-1)
  libglx-nvidia0:i386 (590.17-1 => 570.195.03-1)
  libnvcuvid1 (590.17-1 => 570.195.03-1)
  libnvidia-allocator1 (590.17-1 => 570.195.03-1)
  libnvidia-allocator1:i386 (590.17-1 => 570.195.03-1)
  libnvidia-api1 (590.17-1 => 570.195.03-1)
  libnvidia-cfg1 (590.17-1 => 570.195.03-1)
  libnvidia-eglcore (590.17-1 => 570.195.03-1)
  libnvidia-eglcore:i386 (590.17-1 => 570.195.03-1)
  libnvidia-encode1 (590.17-1 => 570.195.03-1)
  libnvidia-fbc1 (590.17-1 => 570.195.03-1)
  libnvidia-glcore (590.17-1 => 570.195.03-1)
  libnvidia-glcore:i386 (590.17-1 => 570.195.03-1)
  libnvidia-glvkspirv (590.17-1 => 570.195.03-1)
  libnvidia-glvkspirv:i386 (590.17-1 => 570.195.03-1)
  libnvidia-gpucomp (590.17-1 => 570.195.03-1)
  libnvidia-gpucomp:i386 (590.17-1 => 570.195.03-1)
  libnvidia-ml1 (590.17-1 => 570.195.03-1)
  libnvidia-ml1:i386 (590.17-1 => 570.195.03-1)
  libnvidia-ngx1 (590.17-1 => 570.195.03-1)
  libnvidia-nvvm4 (590.17-1 => 570.195.03-1)
  libnvidia-opticalflow1 (590.17-1 => 570.195.03-1)
  libnvidia-pkcs11-openssl3 (590.17-1 => 570.195.03-1)
  libnvidia-ptxjitcompiler1 (590.17-1 => 570.195.03-1)
  libnvidia-ptxjitcompiler1:i386 (590.17-1 => 570.195.03-1)
  libnvidia-rtcore (590.17-1 => 570.195.03-1)
  libnvidia-sandboxutils (590.17-1 => 570.195.03-1)
  libnvidia-vksc-core (590.17-1 => 570.195.03-1)
  libnvoptix1 (590.17-1 => 570.195.03-1)
  nvidia-driver (590.17-1 => 570.195.03-1)
  nvidia-driver-cuda (590.17-1 => 570.195.03-1)
  nvidia-driver-libs (590.17-1 => 570.195.03-1)
  nvidia-driver-libs:i386 (590.17-1 => 570.195.03-1)
  nvidia-egl-icd (590.17-1 => 570.195.03-1)
  nvidia-kernel-dkms (590.17-1 => 570.195.03-1)
  nvidia-kernel-support (590.17-1 => 570.195.03-1)
  nvidia-modprobe (590.17-1 => 570.195.03-1)
  nvidia-opencl-icd (590.17-1 => 570.195.03-1)
  nvidia-persistenced (590.17-1 => 570.195.03-1)
  nvidia-vdpau-driver (590.17-1 => 570.195.03-1)
  nvidia-vulkan-icd (590.17-1 => 570.195.03-1)
  nvidia-vulkan-icd:i386 (590.17-1 => 570.195.03-1)
  xserver-xorg-video-nvidia (590.17-1 => 570.195.03-1)
0 upgraded, 0 newly installed, 53 downgraded, 2 to remove and 0 not upgraded.
Need to get 406 MB of archives.
After this operation, 112 MB disk space will be freed.
Do you want to continue? [Y/n]
[...]

Installing a specific driver version

Users can pin a specific driver build and switch to it effortlessly.

# apt-get install nvidia-driver-pinning-570.199
[..]
# apt-get -V dist-upgrade --autoremove
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages will be REMOVED:
   libnvidia-nvvm704 (595.00-36675729)
   libnvidia-present (580.103-1)
The following packages will be DOWNGRADED:
   firmware-nvidia-gsp (580.103-1 => 570.199-1)
   libcuda1 (580.103-1 => 570.199-1)
   libcuda1:i386 (580.103-1 => 570.199-1)
   libcudadebugger1 (580.103-1 => 570.199-1)
   libegl-nvidia0 (580.103-1 => 570.199-1)
   libegl-nvidia0:i386 (580.103-1 => 570.199-1)
   libgles-nvidia1 (580.103-1 => 570.199-1)
   libgles-nvidia1:i386 (580.103-1 => 570.199-1)
   libgles-nvidia2 (580.103-1 => 570.199-1)
   libgles-nvidia2:i386 (580.103-1 => 570.199-1)
   libglx-nvidia0 (580.103-1 => 570.199-1)
   libglx-nvidia0:i386 (580.103-1 => 570.199-1)
   libnvcuvid1 (580.103-1 => 570.199-1)
   libnvidia-allocator1 (580.103-1 => 570.199-1)
   libnvidia-allocator1:i386 (580.103-1 => 570.199-1)
   libnvidia-api1 (580.103-1 => 570.199-1)
   libnvidia-cfg1 (580.103-1 => 570.199-1)
   libnvidia-eglcore (580.103-1 => 570.199-1)
   libnvidia-eglcore:i386 (580.103-1 => 570.199-1)
   libnvidia-encode1 (580.103-1 => 570.199-1)
   libnvidia-fbc1 (580.103-1 => 570.199-1)
   libnvidia-glcore (580.103-1 => 570.199-1)
   libnvidia-glcore:i386 (580.103-1 => 570.199-1)
   libnvidia-glvkspirv (580.103-1 => 570.199-1)
   libnvidia-glvkspirv:i386 (580.103-1 => 570.199-1)
   libnvidia-gpucomp (580.103-1 => 570.199-1)
   libnvidia-gpucomp:i386 (580.103-1 => 570.199-1)
   libnvidia-ml1 (580.103-1 => 570.199-1)
   libnvidia-ml1:i386 (580.103-1 => 570.199-1)
   libnvidia-ngx1 (580.103-1 => 570.199-1)
   libnvidia-nvvm4 (580.103-1 => 570.199-1)
   libnvidia-opticalflow1 (580.103-1 => 570.199-1)
   libnvidia-pkcs11-openssl3 (580.103-1 => 570.199-1)
   libnvidia-ptxjitcompiler1 (580.103-1 => 570.199-1)
   libnvidia-ptxjitcompiler1:i386 (580.103-1 => 570.199-1)
   libnvidia-rtcore (580.103-1 => 570.199-1)
   libnvidia-sandboxutils (580.103-1 => 570.199-1)
   libnvidia-vksc-core (580.103-1 => 570.199-1)
   libnvoptix1 (580.103-1 => 570.199-1)
   libxnvctrl0 (580.103-1 => 570.199-1)
   nvidia-driver (580.103-1 => 570.199-1)
   nvidia-driver-cuda (580.103-1 => 570.199-1)
   nvidia-driver-libs (580.103-1 => 570.199-1)
   nvidia-driver-libs:i386 (580.103-1 => 570.199-1)
   nvidia-egl-icd (580.103-1 => 570.199-1)
   nvidia-kernel-open-dkms (580.103-1 => 570.199-1)
   nvidia-kernel-support (580.103-1 => 570.199-1)
   nvidia-modprobe (580.103-1 => 570.199-1)
   nvidia-open (580.103-1 => 570.199-1)
   nvidia-opencl-icd (580.103-1 => 570.199-1)
   nvidia-persistenced (580.103-1 => 570.199-1)
   nvidia-settings (580.103-1 => 570.199-1)
   nvidia-vdpau-driver (580.103-1 => 570.199-1)
   nvidia-vulkan-icd (580.103-1 => 570.199-1)
   nvidia-vulkan-icd:i386 (580.103-1 => 570.199-1)
   nvidia-xconfig (580.103-1 => 570.199-1)
   xserver-xorg-video-nvidia (580.103-1 => 570.199-1)
0 upgraded, 0 newly installed, 57 downgraded, 2 to remove and 0 not upgraded.
Need to get 0 B/341 MB of archives.
After this operation, 171 MB disk space will be freed.
Do you want to continue? [Y/n]

Tracking latest driver

Non-enterprise users (laptops, workstations, etc.) can just add the repository and get upgraded to the latest drivers (there are bugs open on this topic).

# apt-get -V dist-upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
   libnvidia-tileiras (590.17-1)
The following packages will be upgraded:
   firmware-nvidia-gsp (580.95.05-1 => 590.17-1)
   libcuda1 (580.95.05-1 => 590.17-1)
   libcuda1:i386 (580.95.05-1 => 590.17-1)
   libcudadebugger1 (580.95.05-1 => 590.17-1)
   libegl-nvidia0 (580.95.05-1 => 590.17-1)
   libegl-nvidia0:i386 (580.95.05-1 => 590.17-1)
   libgles-nvidia1 (580.95.05-1 => 590.17-1)
   libgles-nvidia1:i386 (580.95.05-1 => 590.17-1)
   libgles-nvidia2 (580.95.05-1 => 590.17-1)
   libgles-nvidia2:i386 (580.95.05-1 => 590.17-1)
   libglx-nvidia0 (580.95.05-1 => 590.17-1)
   libglx-nvidia0:i386 (580.95.05-1 => 590.17-1)
   libnvcuvid1 (580.95.05-1 => 590.17-1)
   libnvidia-allocator1 (580.95.05-1 => 590.17-1)
   libnvidia-allocator1:i386 (580.95.05-1 => 590.17-1)
   libnvidia-api1 (580.95.05-1 => 590.17-1)
   libnvidia-cfg1 (580.95.05-1 => 590.17-1)
   libnvidia-eglcore (580.95.05-1 => 590.17-1)
   libnvidia-eglcore:i386 (580.95.05-1 => 590.17-1)
   libnvidia-encode1 (580.95.05-1 => 590.17-1)
   libnvidia-fbc1 (580.95.05-1 => 590.17-1)
   libnvidia-glcore (580.95.05-1 => 590.17-1)
   libnvidia-glcore:i386 (580.95.05-1 => 590.17-1)
   libnvidia-glvkspirv (580.95.05-1 => 590.17-1)
   libnvidia-glvkspirv:i386 (580.95.05-1 => 590.17-1)
   libnvidia-gpucomp (580.95.05-1 => 590.17-1)
   libnvidia-gpucomp:i386 (580.95.05-1 => 590.17-1)
   libnvidia-ml1 (580.95.05-1 => 590.17-1)
   libnvidia-ml1:i386 (580.95.05-1 => 590.17-1)
   libnvidia-ngx1 (580.95.05-1 => 590.17-1)
   libnvidia-nvvm4 (580.95.05-1 => 590.17-1)
   libnvidia-nvvm704 (580.95.05-1 => 590.17-1)
   libnvidia-opticalflow1 (580.95.05-1 => 590.17-1)
   libnvidia-pkcs11-openssl3 (580.95.05-1 => 590.17-1)
   libnvidia-present (580.95.05-1 => 590.17-1)
   libnvidia-ptxjitcompiler1 (580.95.05-1 => 590.17-1)
   libnvidia-ptxjitcompiler1:i386 (580.95.05-1 => 590.17-1)
   libnvidia-rtcore (580.95.05-1 => 590.17-1)
   libnvidia-sandboxutils (580.95.05-1 => 590.17-1)
   libnvidia-vksc-core (580.95.05-1 => 590.17-1)
   libnvoptix1 (580.95.05-1 => 590.17-1)
   nvidia-driver (580.95.05-1 => 590.17-1)
   nvidia-driver-cuda (580.95.05-1 => 590.17-1)
   nvidia-driver-libs (580.95.05-1 => 590.17-1)
   nvidia-driver-libs:i386 (580.95.05-1 => 590.17-1)
   nvidia-egl-icd (580.95.05-1 => 590.17-1)
   nvidia-kernel-dkms (580.95.05-1 => 590.17-1)
   nvidia-kernel-support (580.95.05-1 => 590.17-1)
   nvidia-modprobe (580.95.05-1 => 590.17-1)
   nvidia-opencl-icd (580.95.05-1 => 590.17-1)
   nvidia-persistenced (580.95.05-1 => 590.17-1)
   nvidia-vdpau-driver (580.95.05-1 => 590.17-1)
   nvidia-vulkan-icd (580.95.05-1 => 590.17-1)
   nvidia-vulkan-icd:i386 (580.95.05-1 => 590.17-1)
   xserver-xorg-video-nvidia (580.95.05-1 => 590.17-1)
55 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/432 MB of archives.
After this operation, 44.5 MB disk space will be freed.
Do you want to continue? [Y/n]

Upgrade warning messages

Renaming the packages without the branch also solves the errors when switching packages that provide virtual packages.

# apt-get -V install --purge libnvidia-compute-580 libnvidia-gl-580
[...]
Removing nvidia-driver-575-open (575.57.08-0ubuntu1) ...
Removing nvidia-utils-575 (575.57.08-0ubuntu1) ...
Removing xserver-xorg-video-nvidia-575 (575.57.08-0ubuntu1) ...
dpkg: libnvidia-compute-575:amd64: dependency problems, but removing anyway as you requested:
 nvidia-compute-utils-575 depends on libnvidia-compute-575.
 libnvidia-gl-575:amd64 depends on libnvidia-compute-575 (>= 575.57.08).

Removing libnvidia-compute-575:amd64 (575.57.08-0ubuntu1) ...
(Reading database ... 37374 files and directories currently installed.)
Preparing to unpack .../nvidia-persistenced_580.101-0ubuntu1_amd64.deb ...
Unpacking nvidia-persistenced (580.101-0ubuntu1) over (580.95.05-0ubuntu1) ...
dpkg: libnvidia-cfg1-575:amd64: dependency problems, but removing anyway as you requested:
 nvidia-persistenced depends on libnvidia-cfg1; however:
  Package libnvidia-cfg1 is not installed.
  Package libnvidia-cfg1-575:amd64 which provides libnvidia-cfg1 is to be removed.

(Reading database ... 37374 files and directories currently installed.)
Removing libnvidia-cfg1-575:amd64 (575.57.08-0ubuntu1) ...
Selecting previously unselected package libnvidia-cfg1-580:amd64.
(Reading database ... 37369 files and directories currently installed.)
Preparing to unpack .../libnvidia-cfg1-580_580.101-0ubuntu1_amd64.deb ...
Unpacking libnvidia-cfg1-580:amd64 (580.101-0ubuntu1) ...
[...]

Simpler documentation

The documentation will be much simpler, we will add notes for the pinning package already in 580, but for example, from 590 onwards the whole documentation will not require any editing at every new branch.

Pinning, if needed:

# apt install nvidia-driver-pinning-580

Installing:

# apt install libnvidia-gl libnvidia-gl:i386
# apt install libnvidia-compute libnvidia-gl
# apt install libnvidia-compute libnvidia-nscq libnvsdm nvidia-fabricmanager nvidia-imex

Switching branch to upgrade:

# apt install nvidia-driver-pinning-590
# apt upgrade

DGX systems

On DGX systems, where only a few branches are supported, the pinning package should be preinstalled or directly required by another package, so branches can be switched by the team controlling those packages.

5 Likes

still can’t understand

when I install nvidia-driver-pinning-580, nvidia modprobe not installed. Driver not loaded
after I add lock to apt sources like here – Version locking — NVIDIA Driver Installation Guide

I have all version of 580, but !
Failed to initialize NVML: Driver/library version mismatch
NVML library version: 590.44

sudo dpkg -l | grep nvidia

dia-gpucomp-580:amd64 580.105.08-0ubuntu1 amd64 NVIDIA binary GPU compiler library
ii libnvidia-gpucomp-580:i386 580.105.08-0ubuntu1 i386 NVIDIA binary GPU compiler library
ii nvidia-dkms-580 580.105.08-0ubuntu1 amd64 NVIDIA DKMS package
ii nvidia-driver-580 580.105.08-0ubuntu1 amd64 NVIDIA driver metapackage
ii nvidia-driver-pinning-580 580-1ubuntu3 all APT driver pinning file for driver branch 580
ii nvidia-firmware-580 580.105.08-0ubuntu1 amd64 Firmware files used by the kernel module
ii nvidia-kernel-common-580 580.105.08-0ubuntu1 amd64 Shared files used with the kernel module
ii nvidia-kernel-source-580 580.105.08-0ubuntu1 amd64 NVIDIA kernel source package
ii nvidia-modprobe 580.105.08-0ubuntu1 amd64 Load the NVIDIA kernel driver and create device files
ii nvidia-persistenced 580.105.08-0ubuntu1 amd64 daemon to maintain persistent software state in the NVIDIA driver
ii nvidia-settings 580.105.08-0ubuntu1 amd64 Tool for configuring the NVIDIA graphics driver
ii nvidia-utils-580 580.105.08-0ubuntu1 amd64 Transitional dummy package
ii screen-resolution-extra 0.18.3ubuntu0.24.04.1 all Extension for the nvidia-settings control panel

why still 590???

It seems you still have 590 components installed. Please do the following:

$ dpkg -l | grep -E '580|590'
$ cat /proc/driver/nvidia/version

Nope ( after full remove and reinstall base driver 580 with version locks (not pinned) still the same

cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  580.105.08  Wed Oct 29 23:15:11 UTC 2025
GCC version:  gcc version 13.3.0 (Ubuntu 13.3.0-6ubuntu2~24.04) 
 

79.161565] NVRM: API mismatch: the client 'nvidia-smi' (pid 3629)
               NVRM: has the version 590.44.01, but this kernel module has
               NVRM: the version 580.105.08.  Please make sure that this
               NVRM: kernel module and all NVIDIA driver components
               NVRM: have the same version.
[   96.283521] warning: `ThreadPoolForeg' uses wireless extensions which will stop working for Wi-Fi 7 hardware; use nl80211
[   96.455950] NVRM: API mismatch: the client 'chrome' (pid 3713)
               NVRM: has the version 590.44.01, but this kernel module has
               NVRM: the version 580.105.08.  Please make sure that this
               NVRM: kernel module and all NVIDIA driver components
               NVRM: have the same version.

nvidia-smi
Failed to initialize NVML: Driver/library version mismatch
NVML library version: 590.44


dpkg -l | grep -E '580|590'
ii  less                                          590-2ubuntu2.1                           amd64        pager program similar to more
ii  libnvidia-cfg1-580:amd64                      580.105.08-0ubuntu1                      amd64        NVIDIA binary OpenGL/GLX configuration library
ii  libnvidia-common-580                          580.105.08-0ubuntu1                      all          Shared files used by the NVIDIA libraries
ii  libnvidia-compute-580:amd64                   580.105.08-0ubuntu1                      amd64        NVIDIA libcompute package
ii  libnvidia-compute-580:i386                    580.105.08-0ubuntu1                      i386         NVIDIA libcompute package
ii  libnvidia-decode-580:amd64                    580.105.08-0ubuntu1                      amd64        NVIDIA Video Decoding runtime libraries
ii  libnvidia-decode-580:i386                     580.105.08-0ubuntu1                      i386         NVIDIA Video Decoding runtime libraries
ii  libnvidia-encode-580:amd64                    580.105.08-0ubuntu1                      amd64        NVENC Video Encoding runtime library
ii  libnvidia-encode-580:i386                     580.105.08-0ubuntu1                      i386         NVENC Video Encoding runtime library
ii  libnvidia-extra-580:amd64                     580.105.08-0ubuntu1                      amd64        Extra libraries for the NVIDIA driver
ii  libnvidia-fbc1-580:amd64                      580.105.08-0ubuntu1                      amd64        NVIDIA OpenGL-based Framebuffer Capture runtime library
ii  libnvidia-fbc1-580:i386                       580.105.08-0ubuntu1                      i386         NVIDIA OpenGL-based Framebuffer Capture runtime library
ii  libnvidia-gl-580:amd64                        580.105.08-0ubuntu1                      amd64        NVIDIA OpenGL/GLX/EGL/GLES GLVND libraries and Vulkan ICD
ii  libnvidia-gl-580:i386                         580.105.08-0ubuntu1                      i386         NVIDIA OpenGL/GLX/EGL/GLES GLVND libraries and Vulkan ICD
ii  libnvidia-gpucomp-580:amd64                   580.105.08-0ubuntu1                      amd64        NVIDIA binary GPU compiler library
ii  libnvidia-gpucomp-580:i386                    580.105.08-0ubuntu1                      i386         NVIDIA binary GPU compiler library
ii  libxnvctrl0:amd64                             580.105.08-0ubuntu1                      amd64        NV-CONTROL X extension (runtime library)
ii  nvidia-dkms-580                               580.105.08-0ubuntu1                      amd64        NVIDIA DKMS package
ii  nvidia-driver-580                             580.105.08-0ubuntu1                      amd64        NVIDIA driver metapackage
ii  nvidia-firmware-580                           580.105.08-0ubuntu1                      amd64        Firmware files used by the kernel module
ii  nvidia-kernel-common-580                      580.105.08-0ubuntu1                      amd64        Shared files used with the kernel module
ii  nvidia-kernel-source-580                      580.105.08-0ubuntu1                      amd64        NVIDIA kernel source package
ii  nvidia-modprobe                               580.105.08-0ubuntu1                      amd64        Load the NVIDIA kernel driver and create device files
ii  nvidia-persistenced                           580.105.08-0ubuntu1                      amd64        daemon to maintain persistent software state in the NVIDIA driver
ii  nvidia-settings                               580.105.08-0ubuntu1                      amd64        Tool for configuring the NVIDIA graphics driver
ii  xserver-xorg-video-nvidia-580                 580.105.08-0ubuntu1                      amd64        NVIDIA binary Xorg driver

is it possible that you are running nvidia-smi from some container or chroot’ed environment? I’ve made such a mistake before ;-) In case of Chrome it may be a Flatpak container.

Hello @scaronni,
I’ve noticed that v590 of the documentation has been published at Driver Installation Guide — NVIDIA Driver Installation Guide , but it still mentions only version 12 for Debian. Does it mean that Debian-13 is not officially supported regardless of the apt repo release at Index of /compute/cuda/repos/debian13/x86_64 ?

Thanks!

Debian 13 is in the list of supported distributions: Introduction — NVIDIA Driver Installation Guide

2 Likes

There will also be another update today which adds Debian 13 in the other sections where appropriate.

1 Like

I know this is probably FrankenDebian territory, but out of curiosity, does NVIDIA provide any repositories that will support Debian testing or unstable? Or are the release-specific repositories intentionally tied to particular Debian Stable versions due to the exact versions of system libraries, kernel headers, and toolchain components packaged for those releases?

Officially no: these are too much of a moving target.
In practice, since Forky (testing) has been branched from Trixie (13) quite recently, current Debian-13 repos will most likely work fine on Forky for now.

Yes, this is the general idea. For example Bookworm (12) repos do not support glibc-2.41, so if you use them on D-13, you will run to issues with header files.

1 Like

I didn’t think there was anything to compile from source in the Debian repositories. I was under the impressions that you install the packages and the only thing that gets compiled (via nvidia-kernel-dkms) is the kernel modules which uses the systems kernel headers.

Your assumption was correct: these header files are a part of CUDA dev toolkit, that does not get compiled when you install it, but allows you to compile your CUDA apps later. The only thing that gets compiled upon installation are the kernel modules as you correctly assumed.