diff --git a/anda/system/nvidia/dkms-nvidia/closed/dkms-nvidia.spec b/anda/system/nvidia/dkms-nvidia/closed/dkms-nvidia.spec index eacf523b2c..211f282f7d 100644 --- a/anda/system/nvidia/dkms-nvidia/closed/dkms-nvidia.spec +++ b/anda/system/nvidia/dkms-nvidia/closed/dkms-nvidia.spec @@ -1,11 +1,13 @@ ## NVIDIA DKMS package, based on the work of Negativo17 with tweaks for Terra. +# RPM inexplicably thinks this package deps on a version of libcrypto it does not? +%global __requires_exclude (libcrypto\\.so\\.1\\.1.*)$ %global debug_package %{nil} %global modulename nvidia Name: dkms-%{modulename} Version: 575.64 -Release: 1%?dist +Release: 2%?dist Summary: NVIDIA display driver kernel module Epoch: 3 License: NVIDIA License diff --git a/anda/system/nvidia/libva-nvidia-driver/libva-nvidia-driver.spec b/anda/system/nvidia/libva-nvidia-driver/libva-nvidia-driver.spec index e3454143c0..cc22ff2df4 100644 --- a/anda/system/nvidia/libva-nvidia-driver/libva-nvidia-driver.spec +++ b/anda/system/nvidia/libva-nvidia-driver/libva-nvidia-driver.spec @@ -11,7 +11,7 @@ Name: libva-nvidia-driver Epoch: 1 Version: 0.0.14%{!?tag:^%{date}git%{shortcommit0}} -Release: 1%?dist +Release: 2%?dist Summary: VA-API user mode driver for Nvidia GPUs License: MIT URL: https://github.com/elFarto/%{upstream_name} @@ -39,6 +39,11 @@ Provides: %{upstream_name} = %{version}-%{release} Provides: nvdec-vaapi-driver = %{version}-%{release} Requires: mesa-filesystem +%if 0%{?fedora} +%ifarch x86_64 +Requires: %{name}(x86-32) = %{?epoch:%{epoch}:}%{version}-%{release} +%endif +%endif %description This is a VA-API implementation that uses NVDEC as a backend. This diff --git a/anda/system/nvidia/nvidia-driver/nvidia-driver.spec b/anda/system/nvidia/nvidia-driver/nvidia-driver.spec index 81da2eeb81..620a205f73 100644 --- a/anda/system/nvidia/nvidia-driver/nvidia-driver.spec +++ b/anda/system/nvidia/nvidia-driver/nvidia-driver.spec @@ -11,7 +11,7 @@ Name: nvidia-driver Version: 575.64 -Release: 1%?dist +Release: 2%?dist Summary: NVIDIA's proprietary display driver for NVIDIA graphic cards Epoch: 3 License: NVIDIA License @@ -48,6 +48,11 @@ BuildRequires: coreutils Requires: nvidia-driver-libs%{?_isa} = %{?epoch:%{epoch}:}%{version} Requires: nvidia-kmod-common = %{?epoch:%{epoch}:}%{version} +%if 0%{?fedora} +%ifarch x86_64 +Requires: %{name}(x86-32) = %{?epoch:%{epoch}:}%{version}-%{release} +%endif +%endif Conflicts: nvidia-x11-drv Conflicts: nvidia-x11-drv-470xx @@ -74,6 +79,11 @@ Requires: libglvnd-glx%{?_isa} >= 1.0 Requires: libglvnd-opengl%{?_isa} >= 1.0 Requires: libnvidia-ml%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} Requires: vulkan-loader +%if 0%{?fedora} +%ifarch x86_64 +Requires: %{name}-libs(x86-32) = %{?epoch:%{epoch}:}%{version}-%{release} +%endif +%endif # dlopened Requires: libnvidia-gpucomp%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} Requires: libnvidia-ml%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} @@ -95,6 +105,11 @@ Requires: libnvidia-ml = %{?epoch:%{epoch}:}%{version}-%{release} %ifarch x86_64 aarch64 Requires: libnvidia-cfg = %{?epoch:%{epoch}:}%{version}-%{release} %endif +%if 0%{?fedora} +%ifarch x86_64 +Requires: %{name}-cuda-libs(x86-32) = %{?epoch:%{epoch}:}%{version}-%{release} +%endif +%endif # dlopened: Requires: libnvidia-gpucomp%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} Requires: libnvidia-ml = %{?epoch:%{epoch}:}%{version}-%{release} @@ -109,6 +124,11 @@ This package provides the CUDA libraries for %{name}-cuda. Summary: NVIDIA OpenGL-based Framebuffer Capture libraries Provides: nvidia-driver-NvFBCOpenGL = %{?epoch:%{epoch}:}%{version}-%{release} Obsoletes: nvidia-driver-NvFBCOpenGL < %{?epoch:%{epoch}:}%{version}-%{release} +%if 0%{?fedora} +%ifarch x86_64 +Requires: libnvidia-fbc(x86-32) = %{?epoch:%{epoch}:}%{version}-%{release} +%endif +%endif # dlopened: Requires: %{name}-cuda-libs%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} @@ -120,6 +140,11 @@ graphics scenarios. %package -n libnvidia-gpucomp Summary: NVIDIA library for shader compilation (nvgpucomp) +%if 0%{?fedora} +%ifarch x86_64 +Requires: libnvidia-gpucomp(x86-32) = %{?epoch:%{epoch}:}%{version}-%{release} +%endif +%endif %description -n libnvidia-gpucomp This package contains the private libnvidia-gpucomp runtime library which is used by @@ -129,6 +154,11 @@ other driver components. Summary: NVIDIA Management Library (NVML) Provides: cuda-nvml%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} Provides: nvidia-driver-NVML = %{?epoch:%{epoch}:}%{version}-%{release} +%if 0%{?fedora} +%ifarch x86_64 +Requires: libnvidia-ml(x86-32) = %{?epoch:%{epoch}:}%{version}-%{release} +%endif +%endif Obsoletes: nvidia-driver-NVML < %{?epoch:%{epoch}:}%{version}-%{release} %description -n libnvidia-ml diff --git a/anda/system/nvidia/nvidia-kmod-common/10-nvidia-fallback.rules b/anda/system/nvidia/nvidia-kmod-common/10-nvidia-fallback.rules new file mode 100644 index 0000000000..5ead9f6780 --- /dev/null +++ b/anda/system/nvidia/nvidia-kmod-common/10-nvidia-fallback.rules @@ -0,0 +1,2 @@ +SUBSYSTEM=="pci", ATTRS{vendor}=="0x12d2", ATTRS{class}=="0x030000", TAG+="systemd", ENV{SYSTEMD_WANTS}="nvidia-fallback.service" +SUBSYSTEM=="pci", ATTRS{vendor}=="0x10de", ATTRS{class}=="0x030[02]00", TAG+="systemd", ENV{SYSTEMD_WANTS}="nvidia-fallback.service" diff --git a/anda/system/nvidia/nvidia-kmod-common/nvidia-fallback.service b/anda/system/nvidia/nvidia-kmod-common/nvidia-fallback.service new file mode 100644 index 0000000000..8e08e806f0 --- /dev/null +++ b/anda/system/nvidia/nvidia-kmod-common/nvidia-fallback.service @@ -0,0 +1,17 @@ +[Unit] +Description=Fallback to nouveau as nvidia did not load +After=akmods.service +Before=display-manager.service +ConditionKernelCommandLine=rd.driver.blacklist=nouveau +ConditionPathExists=!/sys/module/nvidia + + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=-/sbin/modprobe nouveau +ExecStartPost=-/bin/plymouth message --text="NVIDIA kernel module missing. Falling back to Nouveau." + + +[Install] +WantedBy=graphical.target diff --git a/anda/system/nvidia/nvidia-kmod-common/nvidia-kmod-common.spec b/anda/system/nvidia/nvidia-kmod-common/nvidia-kmod-common.spec index b6ad435b42..cf08fd5023 100644 --- a/anda/system/nvidia/nvidia-kmod-common/nvidia-kmod-common.spec +++ b/anda/system/nvidia/nvidia-kmod-common/nvidia-kmod-common.spec @@ -8,7 +8,7 @@ Name: nvidia-kmod-common Version: 575.64 -Release: 1%?dist +Release: 2%?dist Summary: Common file for NVIDIA's proprietary driver kernel modules Epoch: 3 License: NVIDIA License @@ -21,14 +21,19 @@ Source18: MODULE_VARIANT.txt Source19: nvidia-modeset.conf Source20: nvidia.conf Source21: 60-nvidia.rules +Source22: nvidia-fallback.service +Source23: 10-nvidia-fallback.rules # UDev rule location (_udevrulesdir) and systemd macros: BuildRequires: systemd-rpm-macros Requires: dracut Requires: nvidia-modprobe +Requires: nvidia-driver = %{?epoch:%{epoch}:}%{version} +Requires: nvidia-driver-libs = %{?epoch:%{epoch}:}%{version} Requires: (nvidia-open-kmod = %{?epoch:%{epoch}:}%{version} or nvidia-kmod = %{?epoch:%{epoch}:}%{version}) Provides: nvidia-kmod-common = %{?epoch:%{epoch}:}%{version} +Provides: nvidia-open-kmod-common = %{?epoch:%{epoch}:}%{version} Obsoletes: cuda-nvidia-kmod-common < %{?epoch:%{epoch}:}%{version} %description @@ -59,6 +64,11 @@ install -p -m 644 firmware/* %{buildroot}%{_prefix}/lib/firmware/nvidia/%{versio # Old kernel.conf rewritten as a doc file. cp %{SOURCE18} . +# Fallback service. Fall back to Nouveau if NVIDIA drivers fail. +# This is actually from RPM Fusion. +install -Dm644 %{SOURCE22} -t %{buildroot}%{_unitdir} +install -Dm644 %{SOURCE23} -t %{buildroot}%{_udevrulesdir} + %pre # Remove the kernel command line adjustments one last time when doing an upgrade # from a version that was still setting up the command line parameters: @@ -77,7 +87,9 @@ dracut --regenerate-all --force %dir %{_prefix}/lib/firmware/nvidia %{_prefix}/lib/firmware/nvidia/%{version} %config(noreplace) %{_sysconfdir}/modprobe.d/nvidia-modeset.conf +%{_udevrulesdir}/10-nvidia-fallback.rules %{_udevrulesdir}/60-nvidia.rules +%{_unitdir}/nvidia-fallback.service %changelog %autochangelog diff --git a/anda/system/nvidia/nvidia-kmod-common/nvidia.conf b/anda/system/nvidia/nvidia-kmod-common/nvidia.conf index bb90a99750..0e4083bf5e 100644 --- a/anda/system/nvidia/nvidia-kmod-common/nvidia.conf +++ b/anda/system/nvidia/nvidia-kmod-common/nvidia.conf @@ -1,8 +1,6 @@ -# Nouveau must be blacklisted here as well beside from the initrd to avoid a -# delayed loading (for example on Optimus laptops where the Nvidia card is not -# driving the main display). +# NOVA must be blacklisted as it conflicts with both these drivers and Nouveau. -blacklist nouveau +blacklist nova-core # Make a soft dependency for nvidia-uvm as adding the module loading to # /usr/lib/modules-load.d/nvidia-uvm.conf for systemd consumption, makes the