2022-09-26 13:57:18 +03:00
|
|
|
%kroko_kmods_dir %{_datadir}/auto-krokodil/kmods
|
|
|
|
|
2021-10-10 11:24:34 +03:00
|
|
|
# Versioning must be the same when building both inside nvidia and kernel pkg,
|
|
|
|
# but the first part will indicate a newer build, the second part will indicate from which SRPM
|
|
|
|
# this module was built from and will allow to avoid same filenames of RPMs with
|
|
|
|
# modules from different SRPMs even if they are built at the same time (second).
|
|
|
|
# Unfortunately, if we generate release inside %%kroko_kmod_pkg, every usage of
|
|
|
|
# a macro with it will cause its regeneration, so it may be incosistent across one package.
|
|
|
|
# Usage example:
|
2022-09-14 12:09:59 +03:00
|
|
|
# %%define kroko_release %%kroko_mk_release -n %%{NAME}
|
2021-10-10 11:24:34 +03:00
|
|
|
# %%kroko_kmod_pkg -r %%kroko_mk_release <...>
|
2022-09-14 12:09:59 +03:00
|
|
|
%kroko_mk_release(n:) %(echo $(( $(date +%%s) - $(date -d "Sep 12 00:00:00 MSK 2022" +%%s) ))).%(printf "%%d" "'$(head -c1 /dev/urandom | base64)").%(echo %{-n*} | sha1sum | head -c5)
|
|
|
|
|
2021-10-10 11:24:34 +03:00
|
|
|
# r - Release, generated using %%kroko_mk_release
|
|
|
|
# j - major Nvidia version (e.g. 390 from full version 390.13)
|
|
|
|
# n - minor Nvidia version (e.g. 13 from full version 390.13)
|
|
|
|
# f - kernel flavour (e.g. generic from kernel-5.10-generic)
|
|
|
|
# k - kernel version (e.g. 5.10 from kernel-5.10-generic)
|
|
|
|
# m - kernel patch level (71 from 5.10.71)
|
|
|
|
# p - full kernel version (uname -r), e.g.: 5.10.71-generic-1rosa2021.1-x86_64)
|
|
|
|
# s - source package name (e.g.: nvidia390, kernel-5.10-generic)
|
2022-09-13 20:03:37 +03:00
|
|
|
# c - module compression (.zst, .xz, .gz or "")
|
2022-09-14 12:09:59 +03:00
|
|
|
%kroko_kmod_pkg(r:j:n:f:k:m:p:s:c:d:) \
|
2021-10-10 11:24:34 +03:00
|
|
|
# e.g.: kernel-modules-nvidia390-5.10-generic \
|
|
|
|
%define pkg kernel-modules-nvidia%{-j*}-%{-k*}-%{-f*} \
|
|
|
|
\
|
|
|
|
%{expand: \
|
|
|
|
%package -n %{pkg} \
|
|
|
|
Summary: Binary modules of Nvidia %{-j*}.%{-n*} for kernel-%{-k*}-%{-f*} \
|
|
|
|
Group: System/Kernel and hardware \
|
|
|
|
Version: %{-j*}.%{-n*} \
|
2022-09-14 12:09:59 +03:00
|
|
|
Release: %{-r*} \
|
2021-10-10 11:24:34 +03:00
|
|
|
Supplements: (kernel-%{-k*}-%{-f*} and nvidia%{-j*}) \
|
|
|
|
Provides: installonlypkg(kernel) = %{-k*}.%{-m*}.module \
|
|
|
|
# e.g.: kmod-nvidia390.13-kabi(5.10.71-generic-1rosa2021.1-x86_64) = 456.2e9d1.15 \
|
2022-09-14 12:09:59 +03:00
|
|
|
Provides: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) = %{-r*} \
|
|
|
|
Provides: kmod-nvidia%{-j*}-kabi(%{-p*}) = %{-r*} \
|
2021-10-10 11:24:34 +03:00
|
|
|
# e.g.: kmod-nvidia390-kabi(5.10.71-generic-1rosa2021.1-x86_64) = 456.2e9d1.15 \
|
|
|
|
# Do not keep older builds for the same kernel installed via installonlypkg() \
|
|
|
|
# () and provides are not allowed in Obsoletes, only real package names work as Obsoletes, \
|
2022-09-14 12:09:59 +03:00
|
|
|
# so we can't write: "Obsoletes: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) < %{-r*}" \\
|
2021-10-10 11:24:34 +03:00
|
|
|
# XXX Without Obsoletes for now, otherwise modules for e.g. 5.10.71 will be removed when updating to 5.10.72 \
|
2022-09-14 12:09:59 +03:00
|
|
|
#Obsoletes: %{pkg} < %{-j*}.%{-n*}-%{-r*} \
|
2021-10-10 11:24:34 +03:00
|
|
|
# the same files conflict \
|
2022-09-14 12:09:59 +03:00
|
|
|
#Conflicts: kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) < %{-r*} \
|
2021-10-10 11:24:34 +03:00
|
|
|
# e.g.: kmod-nvidia-5.10-generic(390.13) = 456.2e9d1.15 \
|
2022-09-26 13:57:18 +03:00
|
|
|
Provides: kmod-nvidia-%{-k*}-%{-f*}(%{-j*}.%{-n*}) = %{-r*} \
|
2021-10-10 11:24:34 +03:00
|
|
|
Requires: kernel-abi(%{-p*}) \
|
2022-09-26 13:57:18 +03:00
|
|
|
# modules dependencies must be installed when depmod is run \
|
|
|
|
Requires(post): kernel-abi(%{-p*}) \
|
|
|
|
Requires(post): update-alternatives \
|
|
|
|
Requires(post): %{_sbindir}/depmod \
|
|
|
|
Requires(postun): update-alternatives \
|
|
|
|
Requires(postun): %{_sbindir}/depmod \
|
2021-10-10 11:24:34 +03:00
|
|
|
%description -n %{pkg} \
|
|
|
|
Binary modules of Nvidia %{-j*}.%{-n*} for kernel-%{-k*}-%{-f*} \
|
|
|
|
Built from %{-s*} \
|
|
|
|
%files -n %{pkg} \
|
2022-09-27 21:52:13 +03:00
|
|
|
%dir %{kroko_kmods_dir}/nvidia%{-j*}.%{-r*}-%{-p*} \
|
|
|
|
%{kroko_kmods_dir}/nvidia%{-j*}.%{-r*}-%{-p*}/*.ko%{-c*} \
|
2022-09-26 13:57:18 +03:00
|
|
|
%ghost /lib/modules/%{-p*}/kernel/drivers/video/nvidia%{-j*} \
|
|
|
|
/var/spool/initramfs-regen/nvidia%{-j*}.%{-r*} \
|
|
|
|
%post -n %{pkg} \
|
|
|
|
update-alternatives --install \
|
|
|
|
/lib/modules/%{-p*}/kernel/drivers/video/nvidia%{-j*} \
|
|
|
|
kmods-nvidia%{-j*} \
|
2022-09-27 21:52:13 +03:00
|
|
|
%{kroko_kmods_dir}/nvidia%{-j*}.%{-r*}-%{-p*} \
|
2022-09-26 13:57:18 +03:00
|
|
|
%(echo %{-r*} | awk -F '.' '{print $1}') \
|
|
|
|
%{_sbindir}/depmod -a %{-p*} \
|
|
|
|
%postun -n %{pkg} \
|
|
|
|
[ $1 = 0 ] || exit 0 \
|
2022-09-27 21:52:13 +03:00
|
|
|
update-alternatives --remove kmods-nvidia%{-j*} %{kroko_kmods_dir}/nvidia%{-j*}.%{-r*}-%{-p*} \
|
2022-09-26 13:57:18 +03:00
|
|
|
if [ -d /lib/modules/%{-p*} ]; then %{_sbindir}/depmod -a %{-p*} || : ; fi
|
2021-10-10 11:24:34 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
# "Requires" in kernel package
|
|
|
|
%kroko_req_modules_in_kernel(j:n:p:) \
|
|
|
|
%{expand: \
|
|
|
|
Requires: (kmod-nvidia%{-j*}.%{-n*}-kabi(%{-p*}) if nvidia%{-j*}) \
|
|
|
|
%{nil} \
|
|
|
|
}
|
|
|
|
|
|
|
|
# "Requires" in nvidiaXXX package
|
|
|
|
%kroko_req_modules_in_nvidia(k:f:j:n:) \
|
|
|
|
%{expand: \
|
|
|
|
# e.g.: (kmod-nvdia-5.10-generic(390.13) if kernel-5.10-generic)
|
|
|
|
Requires: (kmod-nvidia-%{-k*}-%{-f*}(%{-j*}.%{-n*}) if kernel-%{-k*}-%{-f*}) \
|
|
|
|
%{nil} \
|
|
|
|
}
|
2022-09-20 14:42:53 +03:00
|
|
|
|
|
|
|
# Extract major and minor versions of package $1
|
|
|
|
# Example:
|
|
|
|
# kernel-source-nvidia390 has version 390.5
|
|
|
|
# korko_j will extract 390, kroko_n will extract 5
|
|
|
|
# See also: https://github.com/rpm-software-management/rpm/pull/1794
|
|
|
|
# p - name of package which version to extract (e.g.: kernel-source-nvidia390)
|
|
|
|
# r - any number (e.g.: 0, 1, 390 etc.)
|
|
|
|
# needed at SRPM stage when _j and _n cannot extract real versions to avoid duplicate subpackages
|
|
|
|
%kroko_j(p:r:) %(if rpm -q %{-p*} >/dev/null 2>&1; then rpm -q --qf '%%{version}' %{-p*} | awk -F '.' '{print $1}'; else echo %{-r*}; fi)
|
|
|
|
%kroko_n(p:r:) %(if rpm -q %{-p*} >/dev/null 2>&1; then rpm -q --qf '%%{version}' %{-p*} | awk -F '.' '{print $2}'; else echo %{-r*}; fi)
|