1%define module @PACKAGE@ 2 3%if !%{defined ksrc} 4%if 0%{?rhel}%{?fedora}%{?openEuler} 5%define ksrc ${kernel_version##*___} 6%else 7%define ksrc "$( \ 8 if [ -e "/usr/src/linux-${kernel_version%%___*}" ]; then \ 9 echo "/usr/src/linux-${kernel_version%%___*}"; \ 10 elif [ -e "/lib/modules/${kernel_version%%___*}/source" ]; then \ 11 echo "/lib/modules/${kernel_version%%___*}/source"; \ 12 else \ 13 echo "/lib/modules/${kernel_version%%___*}/build"; \ 14 fi)" 15%endif 16%endif 17 18%if !%{defined kobj} 19%if 0%{?rhel}%{?fedora}%{?openEuler} 20%define kobj ${kernel_version##*___} 21%else 22%define kobj "$( \ 23 if [ -e "/usr/src/linux-${kernel_version%%___*}" ]; then \ 24 echo "/usr/src/linux-${kernel_version%%___*}"; \ 25 else \ 26 echo "/lib/modules/${kernel_version%%___*}/build"; \ 27 fi)" 28%endif 29%endif 30 31#define repo rpmfusion 32#define repo chaos 33 34# (un)define the next line to either build for the newest or all current kernels 35%define buildforkernels newest 36#define buildforkernels current 37#define buildforkernels akmod 38 39%bcond_with debug 40%bcond_with debuginfo 41 42 43Name: %{module}-kmod 44 45Version: @VERSION@ 46Release: @RELEASE@%{?dist} 47Summary: Kernel module(s) 48 49Group: System Environment/Kernel 50License: @ZFS_META_LICENSE@ 51URL: https://github.com/openzfs/zfs 52Source0: %{module}-%{version}.tar.gz 53Source10: kmodtool 54BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id} -u -n) 55%if 0%{?rhel}%{?fedora}%{?openEuler} 56BuildRequires: gcc, make 57BuildRequires: elfutils-libelf-devel 58%endif 59 60%if (0%{?fedora}%{?suse_version}%{?openEuler}) || (0%{?rhel} && 0%{?rhel} < 9) 61# We don't directly use it, but if this isn't installed, rpmbuild as root can 62# crash+corrupt rpmdb 63# See issue #12071 64BuildRequires: ncompress 65%endif 66 67# The developments headers will conflict with the dkms packages. 68Conflicts: %{module}-dkms 69 70%if %{defined repo} 71 72# Building for a repository use the proper build-sysbuild package 73# to determine which kernel-devel packages should be installed. 74BuildRequires: %{_bindir}/kmodtool 75%{!?kernels:BuildRequires: buildsys-build-%{repo}-kerneldevpkgs-%{?buildforkernels:%{buildforkernels}}%{!?buildforkernels:current}-%{_target_cpu}} 76 77%else 78 79# Building local packages attempt to to use the installed kernel. 80%{?rhel:BuildRequires: kernel-devel} 81%{?fedora:BuildRequires: kernel-devel} 82%{?openEuler:BuildRequires: kernel-devel} 83%{?suse_version:BuildRequires: kernel-source} 84 85%if !%{defined kernels} && !%{defined build_src_rpm} 86 %if 0%{?rhel}%{?fedora}%{?suse_version}%{?openEuler} 87 %define kernels %(ls -1 /usr/src/kernels) 88 %else 89 %define kernels %(ls -1 /lib/modules) 90 %endif 91%endif 92%endif 93 94# LDFLAGS are not sanitized by arch/*/Makefile for these architectures. 95%ifarch ppc ppc64 ppc64le aarch64 96%global __global_ldflags %{nil} 97%endif 98 99# Kmodtool does its magic here. A patched version of kmodtool is shipped 100# with the source rpm until kmod development packages are supported upstream. 101# https://bugzilla.rpmfusion.org/show_bug.cgi?id=2714 102%{expand:%(bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null) } 103 104 105%description 106This package contains the ZFS kernel modules. 107 108%prep 109# Error out if there was something wrong with kmodtool. 110%{?kmodtool_check} 111 112# Print kmodtool output for debugging purposes: 113bash %{SOURCE10} --target %{_target_cpu} %{?repo:--repo %{?repo}} --kmodname %{name} %{?buildforkernels:--%{buildforkernels}} --devel %{?prefix:--prefix "%{?prefix}"} %{?kernels:--for-kernels "%{?kernels}"} %{?kernelbuildroot:--buildroot "%{?kernelbuildroot}"} 2>/dev/null 114 115%if %{with debug} 116 %define debug --enable-debug 117%else 118 %define debug --disable-debug 119%endif 120 121%if %{with debuginfo} 122 %define debuginfo --enable-debuginfo 123%else 124 %define debuginfo --disable-debuginfo 125%endif 126 127# Leverage VPATH from configure to avoid making multiple copies. 128%define _configure ../%{module}-%{version}/configure 129 130%setup -q -c -T -a 0 131 132for kernel_version in %{?kernel_versions}; do 133 %{__mkdir} _kmod_build_${kernel_version%%___*} 134done 135 136%build 137for kernel_version in %{?kernel_versions}; do 138 cd _kmod_build_${kernel_version%%___*} 139 %configure \ 140 --with-config=kernel \ 141 --with-linux=%{ksrc} \ 142 --with-linux-obj=%{kobj} \ 143 %{debug} \ 144 %{debuginfo} \ 145 %{?kernel_cc} \ 146 %{?kernel_ld} \ 147 %{?kernel_llvm} 148 make %{?_smp_mflags} 149 cd .. 150done 151 152 153# Module signing (modsign) 154# 155# This must be run _after_ find-debuginfo.sh runs, otherwise that will strip 156# the signature off of the modules. 157# (Based on Fedora's kernel.spec workaround) 158%define __modsign_install_post \ 159 sign_pem="%{ksrc}/certs/signing_key.pem"; \ 160 sign_x509="%{ksrc}/certs/signing_key.x509"; \ 161 if [ -f "${sign_x509}" ]\ 162 then \ 163 echo "Signing kernel modules ..."; \ 164 for kmod in $(find ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/ -name \*.ko); do \ 165 %{ksrc}/scripts/sign-file sha256 ${sign_pem} ${sign_x509} ${kmod}; \ 166 done \ 167 fi \ 168%{nil} 169 170# hack to ensure signing happens after find-debuginfo.sh runs 171%define __spec_install_post \ 172 %{?__debug_package:%{__debug_install_post}}\ 173 %{__arch_install_post}\ 174 %{__os_install_post}\ 175 %{__modsign_install_post} 176 177%install 178rm -rf ${RPM_BUILD_ROOT} 179 180# Relies on the kernel 'modules_install' make target. 181for kernel_version in %{?kernel_versions}; do 182 cd _kmod_build_${kernel_version%%___*} 183 make install \ 184 DESTDIR=${RPM_BUILD_ROOT} \ 185 %{?prefix:INSTALL_MOD_PATH=%{?prefix}} \ 186 INSTALL_MOD_DIR=%{kmodinstdir_postfix} 187 cd .. 188done 189# find-debuginfo.sh only considers executables 190chmod u+x ${RPM_BUILD_ROOT}%{kmodinstdir_prefix}/*/extra/*/* 191%{?akmod_install} 192 193 194%clean 195rm -rf $RPM_BUILD_ROOT 196