commit 7cfa967c6a93181f9515cb3c9ed7d90e38b3a0d7 Author: Neal Gompa Date: Mon May 26 15:04:41 2025 -0400 Initial package for AlmaLinux diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9e103ea --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.tar.gz +*.run diff --git a/0001-kernel-open-nvidia-drm-Enable-kernel-mode-setting-by.patch b/0001-kernel-open-nvidia-drm-Enable-kernel-mode-setting-by.patch new file mode 100644 index 0000000..78b08d3 --- /dev/null +++ b/0001-kernel-open-nvidia-drm-Enable-kernel-mode-setting-by.patch @@ -0,0 +1,45 @@ +From a2e9b73f8d3f593eed007ebfe51dabc9a0e410c2 Mon Sep 17 00:00:00 2001 +From: Neal Gompa +Date: Mon, 7 Apr 2025 19:36:18 -0400 +Subject: [PATCH] kernel-open/nvidia-drm: Enable kernel mode-setting by default + +The general expectation for the Linux graphics stack for more than +a decade has been to use kernel mode-setting. It is now a requirement +for things to work properly on Wayland-based graphical environments, +so flip the default to use kernel mode-setting by default. + +Signed-off-by: Neal Gompa +--- + kernel-open/nvidia-drm/nvidia-drm-linux.c | 2 +- + kernel-open/nvidia-drm/nvidia-drm-os-interface.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/kernel-open/nvidia-drm/nvidia-drm-linux.c b/kernel-open/nvidia-drm/nvidia-drm-linux.c +index 3cb1815d..209cb469 100644 +--- a/kernel-open/nvidia-drm/nvidia-drm-linux.c ++++ b/kernel-open/nvidia-drm/nvidia-drm-linux.c +@@ -31,7 +31,7 @@ + + MODULE_PARM_DESC( + modeset, +- "Enable atomic kernel modesetting (1 = enable, 0 = disable (default))"); ++ "Enable atomic kernel modesetting (1 = enable (default), 0 = disable)"); + module_param_named(modeset, nv_drm_modeset_module_param, bool, 0400); + + #if defined(NV_DRM_FBDEV_AVAILABLE) +diff --git a/kernel-open/nvidia-drm/nvidia-drm-os-interface.c b/kernel-open/nvidia-drm/nvidia-drm-os-interface.c +index 7617476d..f22afd77 100644 +--- a/kernel-open/nvidia-drm/nvidia-drm-os-interface.c ++++ b/kernel-open/nvidia-drm/nvidia-drm-os-interface.c +@@ -41,7 +41,7 @@ + #include + #endif + +-bool nv_drm_modeset_module_param = false; ++bool nv_drm_modeset_module_param = true; + bool nv_drm_fbdev_module_param = true; + + void *nv_drm_calloc(size_t nmemb, size_t size) +-- +2.48.1 + diff --git a/kmod-nvidia-open.spec.preamble b/kmod-nvidia-open.spec.preamble new file mode 100644 index 0000000..8af9c2c --- /dev/null +++ b/kmod-nvidia-open.spec.preamble @@ -0,0 +1,12 @@ +Conflicts: akmod-%{kmodname} +Conflicts: dkms-%{kmodname} +# Conflict with legacy driver +Conflicts: dkms-nvidia +Conflicts: kmod-nvidia${dashvariant} +# Declare ourselves as a provider of the nvidia kernel module +Conflicts: nvidia-kmod +Provides: nvidia-kmod = 3:%{version}-%{release} +# Require our parts of the stack +Requires: nvidia-open-kmod = %{version}-%{release} +# Install if negativo17 packaged userspace libraries are being installed +Supplements: (kernel${dashvariant} and (nvidia-driver-libs%{?_isa} or nvidia-driver-cuda-libs%{?_isa})) diff --git a/kmodtool-local-override b/kmodtool-local-override new file mode 100755 index 0000000..44ab4b4 --- /dev/null +++ b/kmodtool-local-override @@ -0,0 +1,346 @@ +#!/bin/bash + +# kmodtool - Helper script for building kernel module RPMs +# An original version appeared in Fedora. This version is +# generally called only by the %kernel_module_package RPM macro +# during the process of building Driver Update Packages (which +# are also known as "kmods" in the Fedora community). +# +# Copyright (c) 2003-2010 Ville Skyttä , +# Thorsten Leemhuis +# Jon Masters +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +# Changelog: +# +# 2010/07/28 - Add fixes for filelists in line with LF standard +# - Remove now defunct "framepointer" kernel variant +# - Change version to "rhel6-rh2" as a consequence. +# +# 2010/01/10 - Simplified for RHEL6. We are working on upstream +# moving to a newer format and in any case do not +# need to retain support for really old systems. + +shopt -s extglob + +myprog="kmodtool" +myver="0.10.10_rhel9" +knownvariants=@(debug|kdump|zfcpdump) +kmod_name= +kver= +verrel= +variant= + +get_verrel () +{ + verrel=${1:-$(uname -r)} + verrel=${verrel/%[.+]$knownvariants/} +} + +print_verrel () +{ + get_verrel "$@" + echo "${verrel}" +} + +get_variant () +{ + get_verrel "$@" + variant=${1:-$(uname -r)} + variant=${variant/#$verrel?(.+)/} + variant=${variant:-'""'} +} + +print_variant () +{ + get_variant $@ + echo "${variant}" +} + +# Detect flavor separator character. We have to do that due to +# a systemd-tailored patch for kernel spec[1][2] introduced in Fedora and then +# imported in RHEL 8 that broke all OOT kmod infrastructure for the flavored +# kernels. +# +# [1] https://lists.fedoraproject.org/pipermail/kernel/2013-June/004262.html +# [2] https://src.fedoraproject.org/rpms/kernel/c/faf25207dc86666a611c45ae3ffaf385c170bd2a +# +# $1 - kver +# $2 - variant +get_variant_char () +{ + variant="$2" + [ "$variant" != "default" ] || variant="" + + get_verrel "$1" + + variant_char="" + [ -n "$variant" ] || return 0 + + # We expect that the flavored kernel is already installed in the buildroot + variant_char="+" + [ -e "/usr/src/kernels/${verrel}+${variant}" ] && return 0 + + variant_char="." +} + +print_variant_char () +{ + get_variant_char "$@" + echo "${variant_char}" +} + +print_kernel_source () +{ + get_variant_char "$@" + echo "/usr/src/kernels/${verrel}${variant_char}${variant}" +} + +get_filelist() { + local IFS=$'\n' + filelist=($(cat)) + + if [ ${#filelist[@]} -gt 0 ]; + then + for ((n = 0; n < ${#filelist[@]}; n++)); + do + line="${filelist[n]}" + line=$(echo "$line" \ + | sed -e "s/%verrel/$verrel/g" \ + | sed -e "s/%variant/$variant/g" \ + | sed -e "s/%dashvariant/$dashvariant/g" \ + | sed -e "s/%dotvariant/$dotvariant/g" \ + | sed -e "s/\+%1/$dotvariant/g" \ + | sed -e "s/\.%1/$dotvariant/g" \ + | sed -e "s/\-%1/$dotvariant/g" \ + | sed -e "s/%2/$verrel/g") + echo "$line" + done + else + echo "%defattr(644,root,root,755)" + echo "/lib/modules/${verrel}${dotvariant}" + fi +} + + +get_rpmtemplate () +{ + local variant="${1}" + + get_variant_char "${verrel}" "${variant}" + + local dashvariant="${variant:+-${variant}}" + local dotvariant="${variant:+${variant_char}${variant}}" + + echo "%package -n kmod-${kmod_name}${dashvariant}" + + if [ -z "$kmod_provides_summary" ]; then + echo "Summary: ${kmod_name} kernel module(s)" + fi + + if [ -z "$kmod_provides_group" ]; then + echo "Group: System Environment/Kernel" + fi + + if [ ! -z "$kmod_version" ]; then + echo "Version: %{kmod_version}" + fi + + if [ ! -z "$kmod_release" ]; then + echo "Release: %{kmod_release}" + fi + + cat <= ${verrel}${dotvariant} +Provides: kernel${dashvariant}-modules >= ${verrel} +Provides: ${kmod_name}-kmod = %{?epoch:%{epoch}:}%{version}-%{release} +Requires(post): /usr/sbin/depmod +Requires(postun): /usr/sbin/depmod +Requires(post): /usr/sbin/weak-modules +Requires(postun): /usr/sbin/weak-modules +EOF + + if [ "yes" != "$nobuildreqs" ] + then + cat < /dev/null || : +fi + +modules=( \$(find /lib/modules/${verrel}${dotvariant}/extra/${kmod_name} | grep -E '\.ko(\.gz|\.bz2|\.xz|\.zst)?$') ) +if [ -x "/usr/sbin/weak-modules" ]; then + printf '%s\n' "\${modules[@]}" \ + | /usr/sbin/weak-modules --add-modules +fi +EOF + +cat < /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules +EOF + +cat < /dev/null || : +fi + +modules=( \$(cat /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules) ) +rm /var/run/rpm-kmod-${kmod_name}${dashvariant}-modules +if [ -x "/usr/sbin/weak-modules" ]; then + printf '%s\n' "\${modules[@]}" \ + | /usr/sbin/weak-modules --remove-modules +fi +EOF + +echo "%files -n kmod-${kmod_name}${dashvariant}" + +if [ "" == "$override_filelist" ]; +then + echo "%defattr(644,root,root,755)" + echo "/lib/modules/${verrel}${dotvariant}" +else + cat "$override_filelist" | get_filelist +fi +} + +print_rpmtemplate () +{ + kmod_name="${1}" + shift + kver="${1}" + get_verrel "${1}" + shift + if [ -z "${kmod_name}" ] ; then + echo "Please provide the kmodule-name as first parameter." >&2 + exit 2 + elif [ -z "${kver}" ] ; then + echo "Please provide the kver as second parameter." >&2 + exit 2 + elif [ -z "${verrel}" ] ; then + echo "Couldn't find out the verrel." >&2 + exit 2 + fi + + for variant in "$@" ; do + if [ "default" == "$variant" ]; + then + get_rpmtemplate "" + else + get_rpmtemplate "${variant}" + fi + done +} + +usage () +{ + cat <