From 4c124d84f6a080c0d18d0a6a64d4fa2d915fdcc1 Mon Sep 17 00:00:00 2001 From: Benjamin Sherman Date: Thu, 27 Jun 2024 11:16:39 -0500 Subject: [PATCH] feat: swap to negativo17 as nvidia driver source, again (#173) Co-authored-by: Kyle Gospodnetich --- .github/workflows/reusable-build.yml | 1 - Containerfile.nvidia | 13 +++------- build-kmod-nvidia.sh | 37 +++++++++++----------------- build-ublue-os-nvidia-addons.sh | 11 +++++++++ ublue-os-nvidia-addons.spec | 13 ++++++++++ 5 files changed, 43 insertions(+), 32 deletions(-) diff --git a/.github/workflows/reusable-build.yml b/.github/workflows/reusable-build.yml index 657179dc..efaac02f 100644 --- a/.github/workflows/reusable-build.yml +++ b/.github/workflows/reusable-build.yml @@ -64,7 +64,6 @@ jobs: echo "SOURCE_ORG=${SOURCE_ORG}" >> $GITHUB_ENV echo "FQ_SOURCE_IMAGE=quay.io/${SOURCE_ORG}/${SOURCE_IMAGE}:${{ matrix.fedora_version }}" >> $GITHUB_ENV - - name: Generate tags id: generate-tags shell: bash diff --git a/Containerfile.nvidia b/Containerfile.nvidia index 232feb50..7ae1d4fb 100644 --- a/Containerfile.nvidia +++ b/Containerfile.nvidia @@ -19,15 +19,9 @@ COPY certs /tmp/certs # files for nvidia COPY ublue-os-nvidia-addons.spec /tmp/ublue-os-nvidia-addons/ublue-os-nvidia-addons.spec -ADD https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo \ - /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/nvidia-container-toolkit.repo -ADD https://copr.fedorainfracloud.org/coprs/eyecantcu/supergfxctl/repo/fedora-${FEDORA_MAJOR_VERSION}/eyecantcu-supergfxctl-fedora-${FEDORA_MAJOR_VERSION}.repo \ - /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/eyecantcu-supergfxctl.repo -ADD https://raw.githubusercontent.com/NVIDIA/dgx-selinux/master/bin/RHEL9/nvidia-container.pp \ - /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/nvidia-container.pp -ADD files/etc/sway/environment /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/environment -ADD files/usr/lib/systemd/system/ublue-nvctk-cdi.service /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/ublue-nvctk-cdi.service -ADD files/usr/lib/systemd/system-preset/70-ublue-nvctk-cdi.preset /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/70-ublue-nvctk-cdi.preset +COPY files/etc/sway/environment /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/environment +COPY files/usr/lib/systemd/system/ublue-nvctk-cdi.service /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/ublue-nvctk-cdi.service +COPY files/usr/lib/systemd/system-preset/70-ublue-nvctk-cdi.preset /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/70-ublue-nvctk-cdi.preset RUN /tmp/build-prep.sh @@ -43,6 +37,7 @@ RUN if grep -qv "surface" <<< "${KERNEL_FLAVOR}"; then \ RUN cp /tmp/ublue-os-nvidia-addons/rpmbuild/RPMS/noarch/ublue-os-nvidia-addons*.rpm \ /var/cache/rpms/ublue-os/ + RUN for RPM in $(find /var/cache/akmods/ -type f -name \*.rpm); do \ cp "${RPM}" /var/cache/rpms/kmods/; \ done diff --git a/build-kmod-nvidia.sh b/build-kmod-nvidia.sh index 0113481c..d3a7dcfa 100755 --- a/build-kmod-nvidia.sh +++ b/build-kmod-nvidia.sh @@ -2,45 +2,38 @@ set -oeux pipefail -NVIDIA_MAJOR_VERSION=${1} - RELEASE="$(rpm -E '%fedora.%_arch')" -echo NVIDIA_MAJOR_VERSION=${NVIDIA_MAJOR_VERSION} cd /tmp ### BUILD nvidia -# nvidia 520.xxx and newer currently don't have a -$VERSIONxx suffix in their -# package names -if [[ "${NVIDIA_MAJOR_VERSION}" -ge 520 ]]; then - NVIDIA_PACKAGE_NAME="nvidia" -else - NVIDIA_PACKAGE_NAME="nvidia-${NVIDIA_MAJOR_VERSION}xx" -fi + +# disable rpmfusion and enable negativo17 +sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/rpmfusion-*.repo +cp /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/negativo17-fedora-nvidia.repo /etc/yum.repos.d/ rpm-ostree install \ - akmod-${NVIDIA_PACKAGE_NAME}*:${NVIDIA_MAJOR_VERSION}.*.fc${RELEASE} \ - xorg-x11-drv-${NVIDIA_PACKAGE_NAME}-{,cuda,devel,kmodsrc,power}*:${NVIDIA_MAJOR_VERSION}.*.fc${RELEASE} + akmod-nvidia*.fc${RELEASE} # Either successfully build and install the kernel modules, or fail early with debug output +rpm -qa |grep nvidia KERNEL_VERSION="$(rpm -q "${KERNEL_NAME}" --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}')" -NVIDIA_AKMOD_VERSION="$(basename "$(rpm -q "akmod-${NVIDIA_PACKAGE_NAME}" --queryformat '%{VERSION}-%{RELEASE}')" ".fc${RELEASE%%.*}")" -NVIDIA_LIB_VERSION="$(basename "$(rpm -q "xorg-x11-drv-${NVIDIA_PACKAGE_NAME}" --queryformat '%{VERSION}-%{RELEASE}')" ".fc${RELEASE%%.*}")" -NVIDIA_FULL_VERSION="$(rpm -q "xorg-x11-drv-${NVIDIA_PACKAGE_NAME}" --queryformat '%{EPOCH}:%{VERSION}-%{RELEASE}.%{ARCH}')" +NVIDIA_AKMOD_VERSION="$(basename "$(rpm -q "akmod-nvidia" --queryformat '%{VERSION}-%{RELEASE}')" ".fc${RELEASE%%.*}")" + + +akmods --force --kernels "${KERNEL_VERSION}" --kmod "nvidia" + +modinfo /usr/lib/modules/${KERNEL_VERSION}/extra/nvidia/nvidia{,-drm,-modeset,-peermem,-uvm}.ko.xz > /dev/null || \ +(cat /var/cache/akmods/nvidia/${NVIDIA_AKMOD_VERSION}-for-${KERNEL_VERSION}.failed.log && exit 1) -akmods --force --kernels "${KERNEL_VERSION}" --kmod "${NVIDIA_PACKAGE_NAME}" +# create a directory for later copying of resulting nvidia specific artifacts +mkdir -p /var/cache/rpms/kmods/nvidia -modinfo /usr/lib/modules/${KERNEL_VERSION}/extra/${NVIDIA_PACKAGE_NAME}/nvidia{,-drm,-modeset,-peermem,-uvm}.ko.xz > /dev/null || \ -(cat /var/cache/akmods/${NVIDIA_PACKAGE_NAME}/${NVIDIA_AKMOD_VERSION}-for-${KERNEL_VERSION}.failed.log && exit 1) cat < /var/cache/rpms/kmods/nvidia-vars KERNEL_VERSION=${KERNEL_VERSION} RELEASE=${RELEASE} -NVIDIA_PACKAGE_NAME=${NVIDIA_PACKAGE_NAME} -NVIDIA_MAJOR_VERSION=${NVIDIA_MAJOR_VERSION} -NVIDIA_FULL_VERSION=${NVIDIA_FULL_VERSION} NVIDIA_AKMOD_VERSION=${NVIDIA_AKMOD_VERSION} -NVIDIA_LIB_VERSION=${NVIDIA_LIB_VERSION} EOF diff --git a/build-ublue-os-nvidia-addons.sh b/build-ublue-os-nvidia-addons.sh index 4a7755ea..08ab4754 100755 --- a/build-ublue-os-nvidia-addons.sh +++ b/build-ublue-os-nvidia-addons.sh @@ -2,9 +2,20 @@ set -oeux pipefail +curl -L https://negativo17.org/repos/fedora-nvidia.repo \ + -o /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/negativo17-fedora-nvidia.repo +curl -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo \ + -o /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/nvidia-container-toolkit.repo sed -i "s@gpgcheck=0@gpgcheck=1@" /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/nvidia-container-toolkit.repo +curl -L https://raw.githubusercontent.com/NVIDIA/dgx-selinux/master/bin/RHEL9/nvidia-container.pp \ + -o /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/nvidia-container.pp + +curl -L https://copr.fedorainfracloud.org/coprs/eyecantcu/supergfxctl/repo/fedora-${FEDORA_MAJOR_VERSION}/eyecantcu-supergfxctl-fedora-${FEDORA_MAJOR_VERSION}.repo \ + -o /tmp/ublue-os-nvidia-addons/rpmbuild/SOURCES/eyecantcu-supergfxctl.repo + + rpmbuild -ba \ --define '_topdir /tmp/ublue-os-nvidia-addons/rpmbuild' \ --define '%_tmppath %{_topdir}/tmp' \ diff --git a/ublue-os-nvidia-addons.spec b/ublue-os-nvidia-addons.spec index 0e28230f..026f8b32 100644 --- a/ublue-os-nvidia-addons.spec +++ b/ublue-os-nvidia-addons.spec @@ -15,6 +15,7 @@ Source2: nvidia-container.pp Source3: environment Source4: ublue-nvctk-cdi.service Source5: 70-ublue-nvctk-cdi.preset +Source6: negativo17-fedora-nvidia.repo %description Adds various runtime files for nvidia support. @@ -24,6 +25,7 @@ Adds various runtime files for nvidia support. %build +install -Dm0644 %{SOURCE6} %{buildroot}%{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/negativo17-fedora-nvidia.repo install -Dm0644 %{SOURCE0} %{buildroot}%{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/nvidia-container-toolkit.repo install -Dm0644 %{SOURCE1} %{buildroot}%{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/eyecantcu-supergfxctl.repo install -Dm0644 %{SOURCE2} %{buildroot}%{_datadir}/ublue-os/%{_datadir}/selinux/packages/nvidia-container.pp @@ -31,17 +33,24 @@ install -Dm0644 %{SOURCE3} %{buildroot}%{_datadir}/ublue-os/%{_sysconfdir}/sway/ install -Dm0644 %{SOURCE4} %{buildroot}%{_datadir}/ublue-os/%{_unitdir}/ublue-nvctk-cdi.service install -Dm0644 %{SOURCE5} %{buildroot}%{_presetdir}/70-ublue-nvctk-cdi.preset +sed -i 's@enabled=1@enabled=0@g' %{buildroot}%{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/negativo17-fedora-nvidia.repo +sed -i 's@enabled=1@enabled=0@g' %{buildroot}%{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/nvidia-container-toolkit.repo +sed -i 's@enabled=1@enabled=0@g' %{buildroot}%{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/eyecantcu-supergfxctl.repo + +install -Dm0644 %{buildroot}%{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/negativo17-fedora-nvidia.repo %{buildroot}%{_sysconfdir}/yum.repos.d/negativo17-fedora-nvidia.repo install -Dm0644 %{buildroot}%{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/nvidia-container-toolkit.repo %{buildroot}%{_sysconfdir}/yum.repos.d/nvidia-container-toolkit.repo install -Dm0644 %{buildroot}%{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/eyecantcu-supergfxctl.repo %{buildroot}%{_sysconfdir}/yum.repos.d/eyecantcu-supergfxctl.repo install -Dm0644 %{buildroot}%{_datadir}/ublue-os/%{_datadir}/selinux/packages/nvidia-container.pp %{buildroot}%{_datadir}/selinux/packages/nvidia-container.pp install -Dm0644 %{buildroot}%{_datadir}/ublue-os/%{_unitdir}/ublue-nvctk-cdi.service %{buildroot}%{_unitdir}/ublue-nvctk-cdi.service %files +%attr(0644,root,root) %{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/negativo17-fedora-nvidia.repo %attr(0644,root,root) %{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/nvidia-container-toolkit.repo %attr(0644,root,root) %{_datadir}/ublue-os/%{_sysconfdir}/yum.repos.d/eyecantcu-supergfxctl.repo %attr(0644,root,root) %{_datadir}/ublue-os/%{_datadir}/selinux/packages/nvidia-container.pp %attr(0644,root,root) %{_datadir}/ublue-os/%{_sysconfdir}/sway/environment %attr(0644,root,root) %{_datadir}/ublue-os/%{_unitdir}/ublue-nvctk-cdi.service +%attr(0644,root,root) %{_sysconfdir}/yum.repos.d/negativo17-fedora-nvidia.repo %attr(0644,root,root) %{_sysconfdir}/yum.repos.d/nvidia-container-toolkit.repo %attr(0644,root,root) %{_sysconfdir}/yum.repos.d/eyecantcu-supergfxctl.repo %attr(0644,root,root) %{_datadir}/selinux/packages/nvidia-container.pp @@ -49,6 +58,10 @@ install -Dm0644 %{buildroot}%{_datadir}/ublue-os/%{_unitdir}/ublue-nvctk-cdi.ser %attr(0644,root,root) %{_presetdir}/70-ublue-nvctk-cdi.preset %changelog +* Sat Apr 13 Benjamin Sherman - 0.11 +- Add negativo17 fedora-nvidia repo for switch of NVIDIA driver source +- Provided third-party repos are no longer enabled by default + * Fri Oct 6 2023 Benjamin Sherman - 0.10 - add ublue-nvctk-cdi service to auto-generate NVIDIA CDI GPU definitions