From 16ae64650a071469c6ecf8076f61d26cad472b06 Mon Sep 17 00:00:00 2001 From: Carlos Eduardo Arango Gutierrez Date: Thu, 7 Aug 2025 12:38:24 +0200 Subject: [PATCH] [no-relnote] Auto-regenerate CDI spec on toolkit changes Monitor /usr/bin/nvidia-ctk for changes and trigger CDI refresh during package installation to ensure CDI specifications stay current with both driver and toolkit updates. - Add nvidia-ctk binary monitoring to systemd path unit - Trigger CDI refresh in DEB/RPM post-install scripts - Reorganize RPM spec to handle base package services correctly Signed-off-by: Carlos Eduardo Arango Gutierrez --- deployments/systemd/nvidia-cdi-refresh.path | 3 ++- .../nvidia-container-toolkit-base.postinst | 4 +++ .../rpm/SPECS/nvidia-container-toolkit.spec | 27 +++++++++++-------- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/deployments/systemd/nvidia-cdi-refresh.path b/deployments/systemd/nvidia-cdi-refresh.path index a1c1e2419..a42ea1b5b 100644 --- a/deployments/systemd/nvidia-cdi-refresh.path +++ b/deployments/systemd/nvidia-cdi-refresh.path @@ -13,11 +13,12 @@ # limitations under the License. [Unit] -Description=Trigger CDI refresh on NVIDIA driver install / uninstall events +Description=Trigger CDI refresh on NVIDIA driver or toolkit install / upgrade events [Path] PathChanged=/lib/modules/%v/modules.dep PathChanged=/lib/modules/%v/modules.dep.bin +PathChanged=/usr/bin/nvidia-ctk [Install] WantedBy=multi-user.target diff --git a/packaging/debian/nvidia-container-toolkit-base.postinst b/packaging/debian/nvidia-container-toolkit-base.postinst index 312933b57..e7155f70f 100644 --- a/packaging/debian/nvidia-container-toolkit-base.postinst +++ b/packaging/debian/nvidia-container-toolkit-base.postinst @@ -13,6 +13,10 @@ case "$1" in systemctl daemon-reload || echo "Warning: Failed to reload systemd daemon" >&2 systemctl enable --now nvidia-cdi-refresh.path || echo "Warning: Failed to enable nvidia-cdi-refresh.path" >&2 systemctl enable --now nvidia-cdi-refresh.service || echo "Warning: Failed to enable nvidia-cdi-refresh.service" >&2 + + # Trigger CDI spec regeneration immediately after install/upgrade + echo "Regenerating NVIDIA CDI specification..." + systemctl start nvidia-cdi-refresh.service || echo "Warning: Failed to trigger CDI refresh" >&2 fi ;; diff --git a/packaging/rpm/SPECS/nvidia-container-toolkit.spec b/packaging/rpm/SPECS/nvidia-container-toolkit.spec index 408068668..316b1bc7f 100644 --- a/packaging/rpm/SPECS/nvidia-container-toolkit.spec +++ b/packaging/rpm/SPECS/nvidia-container-toolkit.spec @@ -54,14 +54,6 @@ if [ $1 -gt 1 ]; then # only on package upgrade cp -af %{_bindir}/nvidia-container-runtime-hook %{_localstatedir}/lib/rpm-state/nvidia-container-toolkit fi -# Reload systemd unit cache and enable nvidia-cdi-refresh services on both install and upgrade -if command -v systemctl >/dev/null 2>&1 \ - && systemctl --quiet is-system-running 2>/dev/null; then - systemctl daemon-reload || echo "Warning: Failed to reload systemd daemon" >&2 - systemctl enable --now nvidia-cdi-refresh.path || echo "Warning: Failed to enable nvidia-cdi-refresh.path" >&2 - systemctl enable --now nvidia-cdi-refresh.service || echo "Warning: Failed to enable nvidia-cdi-refresh.service" >&2 -fi - %posttrans if [ ! -e %{_bindir}/nvidia-container-runtime-hook ]; then # repairing lost file nvidia-container-runtime-hook @@ -70,9 +62,6 @@ fi rm -rf %{_localstatedir}/lib/rpm-state/nvidia-container-toolkit ln -sf %{_bindir}/nvidia-container-runtime-hook %{_bindir}/nvidia-container-toolkit -# Generate the default config; If this file already exists no changes are made. -%{_bindir}/nvidia-ctk --quiet config --config-file=%{_sysconfdir}/nvidia-container-runtime/config.toml --in-place - %postun if [ "$1" = 0 ]; then # package is uninstalled, not upgraded if [ -L %{_bindir}/nvidia-container-toolkit ]; then rm -f %{_bindir}/nvidia-container-toolkit; fi @@ -101,6 +90,22 @@ Conflicts: nvidia-container-toolkit <= 1.10.0-1 %description base Provides tools such as the NVIDIA Container Runtime and NVIDIA Container Toolkit CLI to enable GPU support in containers. +%post base +# Generate the default config; If this file already exists no changes are made. +%{_bindir}/nvidia-ctk --quiet config --config-file=%{_sysconfdir}/nvidia-container-runtime/config.toml --in-place + +# Reload systemd unit cache and enable nvidia-cdi-refresh services on both install and upgrade +if command -v systemctl >/dev/null 2>&1 \ + && systemctl --quiet is-system-running 2>/dev/null; then + systemctl daemon-reload || echo "Warning: Failed to reload systemd daemon" >&2 + systemctl enable --now nvidia-cdi-refresh.path || echo "Warning: Failed to enable nvidia-cdi-refresh.path" >&2 + systemctl enable --now nvidia-cdi-refresh.service || echo "Warning: Failed to enable nvidia-cdi-refresh.service" >&2 + + # Trigger CDI spec regeneration immediately after install/upgrade + echo "Regenerating NVIDIA CDI specification..." + systemctl start nvidia-cdi-refresh.service || echo "Warning: Failed to trigger CDI refresh" >&2 +fi + %files base %license LICENSE %{_bindir}/nvidia-container-runtime