File kernel-cachyos.spec of Package kernel-cachyos-rc
#
# spec file for package kernel-cachyos
#
# Copyright (c) 2024-2026 CachyOS team
# openSUSE Tumbleweed conversion
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon.
#
# norootforbuild
# needssslcertforbuild
# ──────────────────────────────────────────────────────────────────────
# Tumbleweed (suse_version >= 1550) is usrmerged
# ──────────────────────────────────────────────────────────────────────
%if 0%{?suse_version} >= 1550
%define usrmerged 1
%define kernel_module_directory /usr/lib/modules
%else
%define usrmerged 0
%define kernel_module_directory /lib/modules
%endif
# ──────────────────────────────────────────────────────────────────────
# Linux Kernel Versions — change only these three defines for updates
# ──────────────────────────────────────────────────────────────────────
%define _basekver 7.0
%define _stablekver rc5
%define _rpmver %{version}-%{release}
# The actual kernel uname: Makefile sets 7.0.0, EXTRAVERSION adds the rest
%define _kernver 7.0.0
%define _kver %{_kernver}-%{release}.%{_arch}
%define _tarkver %{_basekver}-%{_stablekver}
%define _tag cachyos-%{_tarkver}-2
# ──────────────────────────────────────────────────────────────────────
# Build options
# ──────────────────────────────────────────────────────────────────────
# Build a minimal kernel via modprobed.db to reduce build times
%define _build_minimal 0
# Build the kernel with clang + ThinLTO
%define _build_lto 0
# Build nvidia-open kernel modules (always on)
# Version auto-detected: try .obsinfo (obs_scm), then tarball name (tar_scm); abort if undetectable
%define _nv_ver %(v=$(sed -n 's/^version: //p' %{_sourcedir}/open-gpu-kernel-modules.obsinfo 2>/dev/null); [ -z "$v" ] && v=$(ls %{_sourcedir}/open-gpu-kernel-modules-*.tar 2>/dev/null | head -1 | sed 's/.*open-gpu-kernel-modules-//;s/\\.tar//'); if [ -z "$v" ]; then echo "ERROR: Cannot detect NVIDIA version" >&2; exit 1; fi; echo "$v")
%define _nv_pkg open-gpu-kernel-modules-%{_nv_ver}
# Tickrate (100, 250, 300, 500, 600, 750, 1000)
%define _hz_tick 1000
# x86_64 ISA level (1-4)
%define _x86_64_lvl 3
# ──────────────────────────────────────────────────────────────────────
# Directory layout
# ──────────────────────────────────────────────────────────────────────
%define _kernel_dir %{kernel_module_directory}/%{_kver}
%define _devel_dir /usr/src/linux-%{_kver}
%define _patch_src https://raw.githubusercontent.com/CachyOS/kernel-patches/master/%{_basekver}
%if %{_build_lto}
%define _lto_args CC=clang CXX=clang++ LD=ld.lld LLVM=1 LLVM_IAS=1
%endif
%define _module_args KERNEL_UNAME=%{_kver} IGNORE_PREEMPT_RT_PRESENCE=1 SYSSRC=%{_builddir}/linux-%{_tag} SYSOUT=%{_builddir}/linux-%{_tag}
# ──────────────────────────────────────────────────────────────────────
# Package metadata
# ──────────────────────────────────────────────────────────────────────
Name: kernel-cachyos%{?_lto_args:-lto}
Summary: Linux BORE %{?_lto_args:+ LTO }Cachy Sauce Kernel by CachyOS
Version: %{_basekver}~%{_stablekver}
Release: cachyos1%{?_lto_args:.lto}
License: GPL-2.0-only
Group: System/Kernel
URL: https://cachyos.org
ExclusiveArch: x86_64
AutoReq: no
Provides: kernel = %{_rpmver}
Provides: kernel-base = %{_rpmver}
Provides: kernel-uname-r = %{_kver}
Provides: multiversion(kernel)
Requires(pre): coreutils
Requires(pre): suse-kernel-rpm-scriptlets
Requires(post): suse-kernel-rpm-scriptlets
Requires(post): suse-module-tools
Requires(post): modutils
Requires(preun): suse-kernel-rpm-scriptlets
Requires(postun): suse-kernel-rpm-scriptlets
OrderWithRequires(post): dracut
Suggests: dracut
OrderWithRequires(post): perl-Bootloader
Suggests: perl-Bootloader
OrderWithRequires(post): update-bootloader
Suggests: update-bootloader
Recommends: kernel-firmware
Conflicts: xfsprogs < 4.3.0-1
# ──────────────────────────────────────────────────────────────────────
# Build dependencies
# ──────────────────────────────────────────────────────────────────────
BuildRequires: bc
BuildRequires: bison
BuildRequires: coreutils
BuildRequires: dwarves
BuildRequires: fdupes
BuildRequires: flex
BuildRequires: gcc
BuildRequires: gettext-tools
BuildRequires: libelf-devel
BuildRequires: libopenssl-devel
BuildRequires: make
BuildRequires: modutils
BuildRequires: openssl
BuildRequires: perl
BuildRequires: python3-base
BuildRequires: python3-PyYAML
BuildRequires: clang
BuildRequires: lld
BuildRequires: llvm
BuildRequires: zstd
BuildRequires: gcc-c++
BuildRequires: hostname
BuildRequires: pesign-obs-integration
BuildRequires: suse-module-tools
# ──────────────────────────────────────────────────────────────────────
# Sources & Patches — filenames must match _service download_url names
# ──────────────────────────────────────────────────────────────────────
Source0: %{_tag}.tar.gz
Source1: config
%if %{_build_minimal}
Source2: minimal-modprobed.db
%endif
Source10: %{_nv_pkg}.tar
Source99: kernel-cachyos-rpmlintrc
Patch0: 0001-bore-cachy.patch
%if %{_build_lto}
Patch1: dkms-clang.patch
%endif
Patch2: 0001-acpi-call.patch
Patch3: 0001-cgroup-vram.patch
Patch4: Add-ksym-provides-tool.patch
Patch5: 0001-rt-i915.patch
%description
The CachyOS kernel with the BORE scheduler and additional performance
patches for openSUSE. Contains the kernel image, modules, and boot files.
# ══════════════════════════════════════════════════════════════════════
# == prep ==
# ══════════════════════════════════════════════════════════════════════
%prep
%setup -q -n linux-%{_tag} -b 10
%autopatch -p1 -v -M 9
cp %{SOURCE1} .config
# --- Default kernel config overrides ---
scripts/config -e CACHY -e SCHED_BORE
# Tickrate
case %{_hz_tick} in
100|250|300|500|600|750|1000)
scripts/config -e HZ_%{_hz_tick} --set-val HZ %{_hz_tick};;
*)
echo "Invalid tickrate value, using default 1000"
scripts/config -e HZ_1000 --set-val HZ 1000;;
esac
# x86_64 ISA level
%if %{_x86_64_lvl} < 5 && %{_x86_64_lvl} > 0
scripts/config --set-val X86_64_VERSION %{_x86_64_lvl}
%else
echo "Invalid x86_64 ISA Level. Using x86_64_v3"
scripts/config --set-val X86_64_VERSION 3
%endif
# Secure Boot / IMA
scripts/config -e CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT
scripts/config -e CONFIG_IMA
scripts/config -e CONFIG_IMA_APPRAISE_BOOTPARAM
scripts/config -e CONFIG_IMA_APPRAISE
scripts/config -e CONFIG_IMA_ARCH_POLICY
# Module signing and EFI stub for Secure Boot
scripts/config -e CONFIG_MODULE_SIG
scripts/config -e CONFIG_MODULE_SIG_SHA256
scripts/config --set-str CONFIG_MODULE_SIG_HASH sha256
scripts/config -e CONFIG_MODULE_SIG_ALL
scripts/config -e CONFIG_EFI
scripts/config -e CONFIG_EFI_STUB
%if %{_build_lto}
scripts/config -e LTO_CLANG_THIN
%endif
%if %{_build_minimal}
make %{?_lto_args} %{?_smp_mflags} LSMOD=%{SOURCE2} localmodconfig
%else
make %{?_lto_args} %{?_smp_mflags} olddefconfig
%endif
# --- Signing key setup ---
# If OBS provides signing certs (%_sourcedir/.kernel_signing_key.pem), use them.
# Otherwise generate a self-signed key (user must enroll via mokutil --import).
if [ -f %{_sourcedir}/.kernel_signing_key.pem ]; then
ln -sf %{_sourcedir}/.kernel_signing_key.pem .
else
cat > .kernel.genkey <<GENKEY_EOF
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
O = kernel-cachyos
CN = kernel-cachyos Secure Boot Signing Key
emailAddress = unspecified@unspecified.org
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
GENKEY_EOF
openssl req -new -nodes -utf8 -sha256 -days 36500 \
-batch -x509 -config .kernel.genkey \
-outform PEM -out .kernel_signing_key.pem \
-keyout .kernel_signing_key.pem
fi
scripts/config --set-str CONFIG_MODULE_SIG_KEY ".kernel_signing_key.pem"
diff -u %{SOURCE1} .config || :
# Prepare NVIDIA open-gpu-kernel-modules
# (patches 11-19 reserved for future NVIDIA-specific patches)
# ══════════════════════════════════════════════════════════════════════
# == build ==
# ══════════════════════════════════════════════════════════════════════
%build
make %{?_lto_args} %{?_smp_mflags} EXTRAVERSION=-%{release}.%{_arch} all
make %{?_lto_args} %{?_smp_mflags} -C tools/bpf/bpftool vmlinux.h feature-clang-bpf-co-re=1
# Build NVIDIA open kernel modules
# Disable BTF for out-of-tree modules (awk quoting bug in Makefile.modfinal with gawk on Tumbleweed)
cd %{_builddir}/%{_nv_pkg}
CFLAGS= CXXFLAGS= LDFLAGS= make %{?_smp_mflags} %{_module_args} IGNORE_CC_MISMATCH=yes CONFIG_DEBUG_INFO_BTF_MODULES= modules
# ══════════════════════════════════════════════════════════════════════
# == install ==
# ══════════════════════════════════════════════════════════════════════
%install
# The -devel subpackage provides symlink targets that brp-25-symlink cannot
# see during the main package build. Suppress the stale link error.
export NO_BRP_STALE_LINK_ERROR=yes
# --- Kernel image ---
echo "Installing the kernel image..."
install -Dm644 "$(make %{?_lto_args} %{?_smp_mflags} -s image_name)" "%{buildroot}%{_kernel_dir}/vmlinuz"
zstdmt -19 < Module.symvers > %{buildroot}%{_kernel_dir}/symvers.zst
# --- Boot directory files ---
echo "Installing boot files..."
install -dm755 %{buildroot}/boot
install -m644 "$(make %{?_lto_args} %{?_smp_mflags} -s image_name)" "%{buildroot}/boot/vmlinuz-%{_kver}"
cp System.map %{buildroot}/boot/System.map-%{_kver}
cp .config %{buildroot}/boot/config-%{_kver}
# --- Kernel modules ---
echo "Installing kernel modules..."
ZSTD_CLEVEL=19 make %{?_lto_args} %{?_smp_mflags} INSTALL_MOD_PATH="%{buildroot}%{?usrmerged:/usr}" INSTALL_MOD_STRIP=1 DEPMOD=/doesnt/exist modules_install
# --- Development files ---
echo "Installing development files..."
install -Dt %{buildroot}%{_devel_dir} -m644 .config Makefile Module.symvers System.map tools/bpf/bpftool/vmlinux.h
cp .config %{buildroot}%{_kernel_dir}/config
cp System.map %{buildroot}%{_kernel_dir}/System.map
cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` %{buildroot}%{_devel_dir}
rm -rf %{buildroot}%{_devel_dir}/scripts
rm -rf %{buildroot}%{_devel_dir}/include
cp -a scripts %{buildroot}%{_devel_dir}
rm -rf %{buildroot}%{_devel_dir}/scripts/tracing
rm -f %{buildroot}%{_devel_dir}/scripts/spdxcheck.py
# Files needed for make scripts
cp -a --parents security/selinux/include/classmap.h %{buildroot}%{_devel_dir}
cp -a --parents security/selinux/include/initial_sid_to_string.h %{buildroot}%{_devel_dir}
cp -a --parents tools/include/tools/be_byteshift.h %{buildroot}%{_devel_dir}
cp -a --parents tools/include/tools/le_byteshift.h %{buildroot}%{_devel_dir}
# Files needed for make prepare -- Generic
cp -a --parents tools/include/linux/compiler* %{buildroot}%{_devel_dir}
cp -a --parents tools/include/linux/types.h %{buildroot}%{_devel_dir}
cp -a --parents tools/build/Build.include %{buildroot}%{_devel_dir}
cp --parents tools/build/fixdep.c %{buildroot}%{_devel_dir}
cp --parents tools/objtool/sync-check.sh %{buildroot}%{_devel_dir}
cp -a --parents tools/bpf/resolve_btfids %{buildroot}%{_devel_dir}
cp --parents security/selinux/include/policycap_names.h %{buildroot}%{_devel_dir}
cp --parents security/selinux/include/policycap.h %{buildroot}%{_devel_dir}
cp -a --parents tools/include/asm %{buildroot}%{_devel_dir}
cp -a --parents tools/include/asm-generic %{buildroot}%{_devel_dir}
cp -a --parents tools/include/linux %{buildroot}%{_devel_dir}
cp -a --parents tools/include/uapi/asm %{buildroot}%{_devel_dir}
cp -a --parents tools/include/uapi/asm-generic %{buildroot}%{_devel_dir}
cp -a --parents tools/include/uapi/linux %{buildroot}%{_devel_dir}
cp -a --parents tools/include/vdso %{buildroot}%{_devel_dir}
cp --parents tools/scripts/utilities.mak %{buildroot}%{_devel_dir}
cp -a --parents tools/lib/subcmd %{buildroot}%{_devel_dir}
cp --parents tools/lib/*.c %{buildroot}%{_devel_dir}
cp --parents tools/objtool/*.[ch] %{buildroot}%{_devel_dir}
cp --parents tools/objtool/Build %{buildroot}%{_devel_dir}
cp --parents tools/objtool/include/objtool/*.h %{buildroot}%{_devel_dir}
cp -a --parents tools/lib/bpf %{buildroot}%{_devel_dir}
cp --parents tools/lib/bpf/Build %{buildroot}%{_devel_dir}
# x86_64 headers
cp -a --parents arch/x86/include %{buildroot}%{_devel_dir}
cp -a --parents tools/arch/x86/include %{buildroot}%{_devel_dir}
cp -a include %{buildroot}%{_devel_dir}/include
cp -a sound/soc/sof/sof-audio.h %{buildroot}%{_devel_dir}/sound/soc/sof
cp -a tools/objtool/objtool %{buildroot}%{_devel_dir}/tools/objtool/
cp -a tools/objtool/fixdep %{buildroot}%{_devel_dir}/tools/objtool/
# Files needed for make prepare -- x86_64
cp -a --parents arch/x86/entry/syscalls/syscall_32.tbl %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/entry/syscalls/syscall_64.tbl %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/tools/relocs_32.c %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/tools/relocs_64.c %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/tools/relocs.c %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/tools/relocs_common.c %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/tools/relocs.h %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/purgatory/purgatory.c %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/purgatory/stack.S %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/purgatory/setup-x86_64.S %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/purgatory/entry64.S %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/boot/string.h %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/boot/string.c %{buildroot}%{_devel_dir}
cp -a --parents arch/x86/boot/ctype.h %{buildroot}%{_devel_dir}
cp -a --parents scripts/syscalltbl.sh %{buildroot}%{_devel_dir}
cp -a --parents scripts/syscallhdr.sh %{buildroot}%{_devel_dir}
cp -a --parents tools/arch/x86/include/asm %{buildroot}%{_devel_dir}
cp -a --parents tools/arch/x86/include/uapi/asm %{buildroot}%{_devel_dir}
cp -a --parents tools/objtool/arch/x86/lib %{buildroot}%{_devel_dir}
cp -a --parents tools/arch/x86/lib/ %{buildroot}%{_devel_dir}
cp -a --parents tools/arch/x86/tools/gen-insn-attr-x86.awk %{buildroot}%{_devel_dir}
cp -a --parents tools/objtool/arch/x86/ %{buildroot}%{_devel_dir}
# Cleanup build artifacts from devel tree
echo "Cleaning up development files..."
find %{buildroot}%{_devel_dir}/scripts \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} +
find %{buildroot}%{_devel_dir}/tools \( -iname "*.o" -o -iname "*.cmd" \) -exec rm -f {} +
# Remove dangling symlinks in devel tree (brp-25-symlink errors)
find %{buildroot}%{_devel_dir} -xtype l -delete
touch -r %{buildroot}%{_devel_dir}/Makefile \
%{buildroot}%{_devel_dir}/include/generated/uapi/linux/version.h \
%{buildroot}%{_devel_dir}/include/config/auto.conf
# build/source symlinks
rm -rf %{buildroot}%{_kernel_dir}/build
ln -s %{_devel_dir} %{buildroot}%{_kernel_dir}/build
ln -s %{_kernel_dir}/build %{buildroot}%{_kernel_dir}/source
# Stub initramfs to reserve /boot space (bz#530778 equivalent)
echo "Creating stub initramfs..."
install -dm755 %{buildroot}/boot
dd if=/dev/zero of=%{buildroot}/boot/initramfs-%{_kver}.img bs=1M count=90
# Install NVIDIA open kernel modules
cd %{_builddir}/%{_nv_pkg}
echo "Installing NVIDIA open kernel modules..."
if [ -d kernel-open ] && ls kernel-open/*.ko &>/dev/null; then
install -Dt %{buildroot}%{_kernel_dir}/nvidia -m644 kernel-open/*.ko
find %{buildroot}%{_kernel_dir}/nvidia -name '*.ko' -exec zstd --rm -19 {} +
fi
install -Dm644 COPYING %{buildroot}%{_licensedir}/%{name}-nvidia-open/COPYING
# --- Sign NVIDIA kernel modules ---
# The in-tree modules are signed automatically by the kernel build (CONFIG_MODULE_SIG_ALL).
# Out-of-tree modules (NVIDIA) must be signed explicitly.
cd %{_builddir}/linux-%{_tag}
if ls %{buildroot}%{_kernel_dir}/nvidia/*.ko.zst &>/dev/null; then
for ko in %{buildroot}%{_kernel_dir}/nvidia/*.ko.zst; do
zstd -d --rm "${ko}"
ko_plain="${ko%.zst}"
scripts/sign-file sha256 .kernel_signing_key.pem certs/signing_key.x509 "${ko_plain}"
zstd --rm -19 "${ko_plain}"
done
fi
# --- Secure Boot: pesign-obs-integration ---
# BRP_PESIGN_FILES tells the brp-99-pesign hook which files to sign.
# On OBS with signing permissions, this signs the EFI kernel image and modules.
# Without OBS signing, the self-signed key is used (user enrolls via mokutil).
export BRP_PESIGN_FILES="%{_kernel_dir}/vmlinuz *.ko.zst"
export BRP_PESIGN_COMPRESS_MODULE=zstd
# Install OBS signing certificates if available (for MOK enrollment)
_has_certs=0
if [ -d %{_sourcedir}/.kernel_signing_certs ]; then
for f in %{_sourcedir}/.kernel_signing_certs/*.crt; do
install -Dm644 "${f}" %{buildroot}/etc/uefi/certs/
_has_certs=1
done
fi
# Install the signing key public cert for out-of-tree module building
install -Dm644 certs/signing_key.x509 %{buildroot}%{_devel_dir}/certs/signing_key.x509
# HMAC for FIPS
if [ -x /usr/lib/rpm/pesign/gen-hmac ]; then
/usr/lib/rpm/pesign/gen-hmac -r %{buildroot} /boot/vmlinuz-%{_kver}
fi
# Deduplicate files in devel tree
%fdupes %{buildroot}%{_devel_dir}
# ══════════════════════════════════════════════════════════════════════
# Main package scriptlets
# ══════════════════════════════════════════════════════════════════════
%post
/sbin/depmod -a %{_kver}
if [ -x /usr/bin/dracut ]; then
/usr/bin/dracut -f --kver "%{_kver}" || :
fi
if [ -x /sbin/update-bootloader ]; then
/sbin/update-bootloader --refresh || :
fi
%preun
if [ -x /sbin/update-bootloader ]; then
/sbin/update-bootloader --remove "%{_kver}" || :
fi
%posttrans
if [ -x /sbin/depmod ]; then
/sbin/depmod -a %{_kver}
fi
%files
%license COPYING
%ghost %attr(0600, root, root) /boot/initramfs-%{_kver}.img
/boot/.vmlinuz-%{_kver}.hmac
/boot/vmlinuz-%{_kver}
/boot/System.map-%{_kver}
/boot/config-%{_kver}
%dir %{_kernel_dir}
%{_kernel_dir}/vmlinuz
%{_kernel_dir}/modules.builtin
%{_kernel_dir}/modules.builtin.modinfo
%{_kernel_dir}/symvers.zst
%{_kernel_dir}/config
%{_kernel_dir}/System.map
%{_kernel_dir}/modules.order
%{_kernel_dir}/build
%{_kernel_dir}/source
%{_kernel_dir}/kernel
# ══════════════════════════════════════════════════════════════════════
# Subpackage: kernel-cachyos-devel
# ══════════════════════════════════════════════════════════════════════
%package devel
Summary: Development files for building kernel modules against %{name}
Group: Development/Sources
Provides: kernel-devel = %{_rpmver}
Provides: kernel-devel-uname-r = %{_kver}
AutoReqProv: no
Requires: %{name} = %{_rpmver}
Requires(pre): findutils
Requires: findutils
Requires: perl
Requires: libopenssl-devel
Requires: libelf-devel
Requires: bison
Requires: flex
Requires: make
Requires: modutils
%if %{_build_lto}
Requires: clang
Requires: lld
Requires: llvm
%else
Requires: gcc
%endif
%description devel
This package provides kernel headers and makefiles sufficient to build
modules against the CachyOS kernel.
%files devel
%{_devel_dir}
# ══════════════════════════════════════════════════════════════════════
# Subpackage: kernel-cachyos-devel-matched
# ══════════════════════════════════════════════════════════════════════
%package devel-matched
Summary: Meta package for matching core and devel packages
Group: System/Kernel
Requires: %{name} = %{_rpmver}
Requires: %{name}-devel = %{_rpmver}
%description devel-matched
This meta package ensures matching core and devel packages are installed.
%files devel-matched
# ══════════════════════════════════════════════════════════════════════
# Subpackage: kernel-cachyos-nvidia-open
# ══════════════════════════════════════════════════════════════════════
%package nvidia-open
Summary: NVIDIA open %{_nv_ver} kernel modules for %{name}
Group: System/Kernel
License: MIT AND GPL-2.0-only
Provides: multiversion(kernel)
Requires: kernel-cachyos%{?_lto_args:-lto} = %{_rpmver}
Conflicts: nvidia-gfxG06-kmp
Conflicts: nvidia-open-driver-G06-signed-kmp
Conflicts: nvidia-driver-G06-kmp
Recommends: nvidia-common-G06 >= %{_nv_ver}
%description nvidia-open
This package provides NVIDIA open %{_nv_ver} kernel modules for the
CachyOS kernel. This replaces the need for nvidia-open-dkms.
Requires a Turing (RTX 20xx) or newer GPU.
%post nvidia-open
/sbin/depmod -a %{_kver}
%postun nvidia-open
/sbin/depmod -a %{_kver}
%files nvidia-open
%dir %{_licensedir}/%{name}-nvidia-open
%license %{_licensedir}/%{name}-nvidia-open/COPYING
%{_kernel_dir}/nvidia
%changelog