Compare commits

...
Sign in to create a new pull request.

33 commits

Author SHA1 Message Date
Fedora Release Engineering
a9a2e93c7c Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-24 18:51:05 +00:00
Leigh Scott
85465af0fc
Use fedora compression flags 2025-03-06 10:09:00 +00:00
Fedora Release Engineering
5a91c4b4b1 Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild 2025-01-17 09:36:10 +00:00
Fedora Release Engineering
99f961acbc Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild 2024-07-18 12:29:17 +00:00
Fedora Release Engineering
2cd63319b0 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-25 00:43:05 +00:00
Fedora Release Engineering
5aadb92d21 Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild 2024-01-21 01:07:17 +00:00
Fedora Release Engineering
d3f79a681f Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-07-20 09:23:07 +00:00
Fedora Release Engineering
474076d6f1 Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2023-01-19 14:58:21 +00:00
FeRD (Frank Dana)
2de1084241 Fix usage output on unrecognized argument 2023-01-12 01:28:22 -05:00
Fedora Release Engineering
7f1eac8d7a Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-07-21 16:27:31 +00:00
Sérgio M. Basto
138b7e74e6 kernel-abi-whitelists is not needed and break builds on el9 2022-04-03 07:53:40 +01:00
Fedora Release Engineering
2220f8d290 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2022-01-20 15:00:40 +00:00
Nicolas Chauvet
b7b636d9c6 Update changelog 2021-12-20 15:38:24 +01:00
Nicolas Chauvet
93cf8a667b Revert "Take care of OpenSuse distribution in kmodtool-kmodtool"
This reverts commit 703b25c113.
2021-12-20 15:36:49 +01:00
Nicolas Chauvet
72fc032594 Revert "Fix Take care of OpenSuse distribution in kmodtool-kmodtool rhbz#2034193"
This reverts commit 9beff26501.
2021-12-20 15:36:42 +01:00
Nicolas Viéville
9beff26501 Fix Take care of OpenSuse distribution in kmodtool-kmodtool rhbz#2034193
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-12-20 13:37:36 +01:00
Nicolas Viéville
703b25c113 Take care of OpenSuse distribution in kmodtool-kmodtool
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-12-02 20:52:53 +01:00
Nicolas Viéville
1900f33c17 Add signing and zipping modules methods for Fedora and RHEL
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-10-23 00:40:27 +02:00
Nicolas Viéville
67c73b2cf8 Update SPEC file and changelog
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-10-23 00:26:45 +02:00
Nicolas Viéville
4bd6a84826 Try to fix: check if uname from Makefile is the same as kernel variable
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-10-23 00:21:10 +02:00
Nicolas Viéville
4852d351ab Standardize globally kmod package names macros and kernel_uname_r variables in order to ease the build of kmod packages for non-default distribution (Fedora), for example for RHEL
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-10-23 00:21:10 +02:00
Nicolas Viéville
83f7c9f623 Remove grep pipe after find command
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-10-23 00:21:10 +02:00
Nicolas Viéville
063b999a0c Force remove temporary file
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-10-23 00:21:10 +02:00
Nicolas Viéville
c843631516 Remove unused variables and code
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-10-23 00:21:10 +02:00
Nicolas Viéville
b578b49e0a Convert if statement from "[!] $variable" to "[!] -n $variable"
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-10-23 00:21:10 +02:00
Nicolas Viéville
8fbaff07a6 Add installonlypkg(kernel-module) to allow kmod packages co-install (RHEL)
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-10-23 00:21:10 +02:00
Nicolas Viéville
1d832117e5 Fix indentation
Signed-off-by: Nicolas Viéville <nicolas.vieville@uphf.fr>
2021-10-23 00:21:10 +02:00
Fedora Release Engineering
ca789abc9d - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-07-22 10:14:41 +00:00
Fedora Release Engineering
c45f32ac60 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2021-01-26 15:59:01 +00:00
Fedora Release Engineering
643a065273 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-07-28 03:32:10 +00:00
Neal Gompa
72d7d0a864 Always use /lib/modules for kmod install path
The Fedora and RHEL kernels install things into /lib/modules and
generally expect that to be set up that way. Let's not be inconsistent
here, since it causes kmod builds to randomly fail when they get properties
from the kernel makefile build system itself.
2020-07-06 09:39:23 -04:00
Neal Gompa
c83c7f64f8 Don't force-disable debuginfo subpackages
Fedora and RHEL support generating debuginfo from kmods as long as
they are built properly, so don't force-disable debuginfo subpackages.
2020-07-06 09:15:34 -04:00
Fedora Release Engineering
f96249e601 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng@fedoraproject.org>
2020-01-29 07:40:38 +00:00
4 changed files with 493 additions and 158 deletions

45
kmodtool-brp-kmodsign Normal file
View file

@ -0,0 +1,45 @@
#! /bin/bash
# The modules_sign target checks for corresponding .o files for every .ko that
# is signed. This doesn't work for package builds which re-use the same build
# directory for every flavour, and the .config may change between flavours.
# So instead of using this script to just sign lib/modules/$KernelVer/extra,
# sign all .ko in the buildroot.
# This essentially duplicates the 'modules_sign' Kbuild target and runs the
# same commands for those modules.
MODSECKEY="$1"
MODPUBKEY="$2"
KERNELSRCDIR="$4"
MOD_DIR="$3"
SCRIPTS_SIGN_BIN="scripts/sign-file"
if [ -z "${MODSECKEY}" ] || [ -z "${MODPUBKEY}" ] || [ -z "${MOD_DIR}" ] ; then
echo "brp-kmodsign: missing parameters"
exit 1
fi
if [ -z "${KERNELSRCDIR}" ] ; then
KERNELSRCDIR="."
fi
if [ ! -x "${KERNELSRCDIR}/${SCRIPTS_SIGN_BIN}" ] ; then
echo "brp-kmodsign: ${KERNELSRCDIR}/${SCRIPTS_SIGN_BIN} not found or not executable"
exit 1
fi
MODULES=$(find "${MOD_DIR}" -name "*.ko")
for MOD in ${MODULES}
do
"${KERNELSRCDIR}/${SCRIPTS_SIGN_BIN}" sha256 "${MODSECKEY}" "${MODPUBKEY}" "${MOD}"
rm -f "${MOD}".{sig,dig}
done
RANDOMMOD=$(find "${MOD_DIR}" -type f -name "*.ko" | sort -R | head -n 1)
if [ "~Module signature appended~" != "$(tail -c 28 ${RANDOMMOD})" ] ; then
echo "brp-kmodsign: modules are unsigned!"
exit 1
fi
exit 0

View file

@ -35,10 +35,19 @@ build_kernels="current"
kernels_known_variants=
kernel_versions=
kernel_versions_to_build_for=
prefix=
filterfile=
target=
kernel_uname_r=""
kernel_uname_r_vanilla=""
kernel_uname_r_short=""
kernel_uname_r_wo_arch=""
kernel_uname_r_dist=""
kernel_uname_r_rel=""
kernel_uname_r_rel_plus_one=""
kernel_uname_r_short_plus_one=""
kernel_uname_r_rel_minor=""
error_out()
{
local errorlevel=${1}
@ -55,10 +64,87 @@ print_rpmtemplate_header()
echo '%global kmodinstdir_prefix '${usr_lib_modules}/
echo '%global kmodinstdir_postfix '/extra/${kmodname}/
echo '%global kernel_versions '${kernel_versions}
echo '%global debug_package %{nil}'
echo
}
init_kernel_uname_r_vars()
{
## Build some interesting strings with kernel uname -r
## Examples:
## - Fedora and rhel:
## kernel_uname_r 3.10.0-693.2.2.el7.x86_64
## kernel_uname_r_vanilla 3.10.0
## kernel_uname_r_short 3.10.0-693.el7
## kernel_uname_r_wo_arch 3.10.0-693.2.2.el7
## kernel_uname_r_dist el7
## kernel_uname_r_rel 693
## kernel_uname_r_rel_plus_one 694
## kernel_uname_r_short_plus_one 3.10.0-694.el7
## kernel_uname_r_rel_minor 2.2
##
kernel_uname_r=${1}
kernel_uname_r_vanilla=$(echo ${1} | sed -n -e "s/\.${target}//" -e "s/\([[:alnum:]\.]\+\|\)-\(.*\)/\1/p")
kernel_uname_r_short=$(echo ${1} | sed -n -e "s/\.${target}//" -e "s/\(.*\)-\([[:alnum:]]\+\)\(\.[[:alnum:]\.]\+\|\)\(\.el.*\|\.fc.*\)/\1-\2\4/p")
kernel_uname_r_wo_arch=$(echo ${1} | sed -e "s/\.${target}//")
kernel_uname_r_dist=$(echo ${1} | sed -n -e "s/\.${target}//" -e "s/\(.*\)-\([[:alnum:]]\+\.[[:alnum:]]\+\-\|[[:alnum:]]\+\)\([[:alnum:]\.]\+\|\)\(\.el.*\|\.fc.*\)/\4/" -e "s/^\.//p")
kernel_uname_r_rel=$(echo ${1} | sed -n -e "s/\.${target}//" -e "s/\(.*\)-\([[:alnum:]]\+\.[[:alnum:]]\+\-\|[[:alnum:]]\+\.\)\([[:alnum:]\.]\+\|\)\(.*\)/\2/" -e "s/^\.//" -e "s/[\.\-]$//p")
if $(echo "${kernel_uname_r_rel}" | grep -qE '^[0-9]+$') ; then
kernel_uname_r_rel_plus_one=$(( kernel_uname_r_rel+1 ))
else
kernel_uname_r_rel_plus_one=""
fi
kernel_uname_r_short_plus_one=$(echo ${kernel_uname_r_short} | sed -e "s/(//" -e "s/-${kernel_uname_r_rel}\./-${kernel_uname_r_rel_plus_one}\./")
kernel_uname_r_rel_minor=$(echo ${1} | sed -n -e "s/\.${target}//" -e "s/\(.*\)-\([[:alnum:]]\+\.[[:alnum:]]\+\-\|[[:alnum:]]\+\.\)\([[:alnum:]\.]\+\|\)\(\.el.*\|\.fc.*\)/\3/" -e "s/^\.//p")
}
print_rpmtemplate_macros()
{
# Defines package names macros depending on distributions (default
# is Fedora):
# - rhel_kabi is set if building for RHEL
# - kmod_pkg_name and pkg_kmod_name are the two possible forms of
# the package name used when building packages modules. First one
# uses kmod as prefix, the second one uses kmod as suffix. These
# macros allow to modify the naming schema regarding the target
# distribution (for example with suffix and prefix different from
# kmod).
# - kmod_obsolete_name same as kmod_pkg_name and pkg_kmod_name but
# for obsolete package name
#
if [[ -n ${obsolete_name} ]] ; then
echo '%global obsolete_name '${obsolete_name}
fi
cat <<EOF
%{?rhel:%global with_rhel_kabi 1}
%if 0%{?rhel} || 0%{?fedora}
%global kmod_pkg_name kmod-${kmodname}
%global pkg_kmod_name ${kmodname}-kmod
%{?obsolete_name:%global kmod_obsolete_name kmod-%{obsolete_name}}
%endif
EOF
}
print_rpmtemplate_macros_pkg_name_version()
{
# Defines package name with kernel version macros (depends on
# init_kernel_uname_r_vars for kernel_uname_r* variables):
# - rhel_kabi is set if building for RHEL
# - kmod_for_kernel defines target kernel version string
# - package_kmod_name complete package name including target kernel
# version
#
init_kernel_uname_r_vars ${1}
cat <<EOF
%if 0%{?rhel} || 0%{?fedora}
%global kmod_for_kernel %{?with_rhel_kabi:${kernel_uname_r_short}}%{!?with_rhel_kabi:${kernel_uname_r}}
%global package_kmod_name %{kmod_pkg_name}-%{kmod_for_kernel}
%endif
EOF
}
print_akmodtemplate ()
{
echo
@ -69,7 +155,7 @@ rpmbuild --define "_sourcedir %{_sourcedir}" \\\
--define "_srcrpmdir \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/" \\\
%{?dist:--define 'dist %{dist}}' \\\
-bs --nodeps %{_specdir}/%{name}.spec ; \\\
ln -s \$(ls \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/) \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/${kmodname}-kmod.latest
ln -s \$(ls \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/) \$RPM_BUILD_ROOT/%{_usrsrc}/akmods/%{pkg_kmod_name}.latest
%package -n akmod-${kmodname}
Summary: Akmod package for ${kmodname} kernel module(s)
@ -77,11 +163,11 @@ Requires: kmodtool
Requires: akmods
%{?AkmodsBuildRequires:Requires: %{AkmodsBuildRequires}}
# same requires and provides as a kmods package would have
Requires: ${kmodname}-kmod-common >= %{?epoch:%{epoch}:}%{version}
Provides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: %{pkg_kmod_name}-common >= %{?epoch:%{epoch}:}%{version}
Provides: %{pkg_kmod_name} = %{?epoch:%{epoch}:}%{version}-%{release}
EOF
if [[ ${obsolete_name} ]] ; then
if [[ -n "${obsolete_name}" ]] ; then
echo "Provides: akmod-${obsolete_name} = ${obsolete_version}"
echo "Obsoletes: akmod-${obsolete_name} < ${obsolete_version}"
fi
@ -95,7 +181,7 @@ This package provides the akmod package for the ${kmodname} kernel modules.
nohup /usr/sbin/akmods --from-akmod-posttrans --akmod ${kmodname} &> /dev/null &
%post -n akmod-${kmodname}
[ -x /usr/sbin/akmods-ostree-post ] && /usr/sbin/akmods-ostree-post ${kmodname} %{_usrsrc}/akmods/${kmodname}-kmod-%{version}-%{release}.src.rpm
[ -x /usr/sbin/akmods-ostree-post ] && /usr/sbin/akmods-ostree-post ${kmodname} %{_usrsrc}/akmods/%{pkg_kmod_name}-%{version}-%{release}.src.rpm
%files -n akmod-${kmodname}
%defattr(-,root,root,-)
@ -107,28 +193,28 @@ print_akmodmeta ()
{
cat <<EOF
%package -n kmod-${kmodname}
Summary: Metapackage which tracks in ${kmodname} kernel module for newest kernel${dashvariant}
%package -n %{kmod_pkg_name}
Summary: Metapackage which tracks in ${kmodname} kernel module for newest kernel
Provides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
Provides: kmod-${kmodname}-xen = %{?epoch:%{epoch}:}%{version}-%{release}
Provides: kmod-${kmodname}-smp = %{?epoch:%{epoch}:}%{version}-%{release}
Provides: kmod-${kmodname}-PAE = %{?epoch:%{epoch}:}%{version}-%{release}
Provides: %{pkg_kmod_name} = %{?epoch:%{epoch}:}%{version}-%{release}
Provides: %{kmod_pkg_name}-xen = %{?epoch:%{epoch}:}%{version}-%{release}
Provides: %{kmod_pkg_name}-smp = %{?epoch:%{epoch}:}%{version}-%{release}
Provides: %{kmod_pkg_name}-PAE = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: akmod-${kmodname} = %{?epoch:%{epoch}:}%{version}-%{release}
EOF
if [[ ${obsolete_name} ]] ; then
echo "Provides: kmod-${obsolete_name} = ${obsolete_version}"
echo "Obsoletes: kmod-${obsolete_name} < ${obsolete_version}"
if [[ -n "${obsolete_name}" ]] ; then
echo "Provides: %{kmod_obsolete_name} = ${obsolete_version}"
echo "Obsoletes: %{kmod_obsolete_name} < ${obsolete_version}"
fi
cat <<EOF
%description -n kmod-${kmodname}${dashvariant}
%description -n %{kmod_pkg_name}
This is a meta-package without payload which sole purpose is to require the
${kmodname} kernel module(s) for the newest kernel${dashvariant},
${kmodname} kernel module(s) for the newest kernel,
to make sure you get it together with a new kernel.
%files -n kmod-${kmodname}${dashvariant}
%files -n %{kmod_pkg_name}
%defattr(644,root,root,755)
EOF
}
@ -144,64 +230,46 @@ print_rpmtemplate_per_kmodpkg ()
local redhatkernel=true
fi
## Build some interesting strings with kernel uname -r
## Examples:
## kernel_uname_r 3.10.0-693.2.2.el7.x86_64
## kernel_uname_r_short 3.10.0-693.el7
local kernel_uname_r=${1}
local kernel_uname_r_short=$(echo ${1} | sed -e "s/\.${target}//" -e "s/\(.*\)-\([[:alnum:]]\+\)\(\.[[:alnum:]\.]\+\|\)\(\.el.*\|\.fc.*\)/\1-\2\4/")
if [[ -h /sbin ]] ; then
echo '%global _prefix_usr '/usr
fi
# first part
# first part
#
# According to:
# https://github.com/rpm-software-management/yum/blob/master/yum/config.py#L780
# https://github.com/rpm-software-management/dnf/blob/master/dnf/const.py.in#L30
#
# and in order to be able to co-install multiples packages with the
# same name but different version on RHEL without upgrading theme,
# one has to add in package section:
# Provides: installonlypkg(kernel-module)
cat <<EOF
%if 0%{?rhel}
%package -n kmod-${kmodname}-${kernel_uname_r}
Summary: ${kmodname} kernel module(s) for ${kernel_uname_r_short}
Provides: kernel-modules = ${kernel_uname_r}
Provides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: ${kmodname}-kmod-common >= %{?epoch:%{epoch}:}%{version}
%package -n %{package_kmod_name}
Summary: ${kmodname} kernel module(s) for %{kmod_for_kernel}
Provides: kernel-modules%{!?with_rhel_kabi:-for-kernel} = ${kernel_uname_r}
%if %{with rhel_kabi}
Provides: installonlypkg(kernel-module)
%endif
Provides: %{pkg_kmod_name} = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: %{pkg_kmod_name}-common >= %{?epoch:%{epoch}:}%{version}
Requires(post): %{?_prefix_usr}/sbin/depmod
Requires(postun): %{?_prefix_usr}/sbin/depmod
%if %{with rhel_kabi}
Requires(post): %{?_prefix_usr}/sbin/weak-modules
Requires(post): %{?_prefix_usr}/sbin/depmod
Requires(postun): %{?_prefix_usr}/sbin/weak-modules
Requires(postun): %{?_prefix_usr}/sbin/depmod
%else
%package -n kmod-${kmodname}-${kernel_uname_r}
Summary: ${kmodname} kernel module(s) for ${kernel_uname_r}
Provides: kernel-modules-for-kernel = ${kernel_uname_r}
Provides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: ${kmodname}-kmod-common >= %{?epoch:%{epoch}:}%{version}
Requires(post): %{?_prefix_usr}/sbin/depmod
Requires(postun): %{?_prefix_usr}/sbin/depmod
%endif
EOF
if [[ ${obsolete_name} ]] ; then
if [[ -n "${obsolete_name}" ]] ; then
echo
echo "Provides: kmod-${obsolete_name}-${kernel_uname_r} = ${obsolete_version}"
echo "Obsoletes: kmod-${obsolete_name}-${kernel_uname_r} < ${obsolete_version}"
echo "Provides: %{kmod_obsolete_name}-${kernel_uname_r} = ${obsolete_version}"
echo "Obsoletes: %{kmod_obsolete_name}-${kernel_uname_r} < ${obsolete_version}"
fi
# second part
if [[ ! "${customkernel}" ]] ; then
## Build some interesting strings with kernel uname -r
## Examples:
## kernel_uname_r_wo_arch 3.10.0-693.2.2.el7
## kernel_uname_r_dist el7
## kernel_uname_r_rel 693
## kernel_uname_r_rel_plus_one 694
## kernel_uname_r_short_plus_one 3.10.0-694.el7
## kernel_uname_r_rel_minor 2.2
local kernel_uname_r_wo_arch=$(echo ${1} | sed -e "s/\.${target}//")
local kernel_uname_r_dist=$(echo ${1} | sed -e "s/\.${target}//" -e "s/\(.*\)-\([[:alnum:]]\+\)\(\.[[:alnum:]\.]\+\|\)\(\.el.*\|\.fc.*\)/\4/" -e "s/^\.//")
local kernel_uname_r_rel=$(echo ${1} | sed -e "s/\.${target}//" -e "s/\(.*\)-\([[:alnum:]]\+\)\(\.[[:alnum:]\.]\+\|\)\(\.el.*\|\.fc.*\)/\2/" -e "s/^\.//")
local kernel_uname_r_rel_plus_one=$(( kernel_uname_r_rel+1 ))
local kernel_uname_r_short_plus_one=$(echo ${kernel_uname_r_short} | sed -e "s/(//" -e "s/-${kernel_uname_r_rel}\./-${kernel_uname_r_rel_plus_one}\./")
local kernel_uname_r_rel_minor=$(echo ${1} | sed -e "s/\.${target}//" -e "s/\(.*\)-\([[:alnum:]]\+\)\(\.[[:alnum:]\.]\+\|\)\(\.el.*\|\.fc.*\)/\3/" -e "s/^\.//")
if [[ ! -n "${customkernel}" ]] ; then
cat <<EOF
%global _kmodtool_depmod_post \\\
if [ -f /boot/System.map-${kernel_uname_r} ] ; then \\\
@ -212,66 +280,67 @@ else \\\
%{?_prefix_usr}/sbin/depmod -a >/dev/null ; \\\
fi || :
%if 0%{?rhel}
%if %{with rhel_kabi}
Requires: kernel >= ${kernel_uname_r_short}
Requires: kernel < ${kernel_uname_r_short_plus_one}
BuildRequires: kernel-devel = ${kernel_uname_r_wo_arch} redhat-rpm-config kernel-abi-whitelists
%post -n kmod-${kmodname}-${kernel_uname_r}
%{_kmodtool_depmod_post}
modules=( \$(find ${usr_lib_modules}/${kernel_uname_r}/extra/${kmodname}/ | grep -e '\.ko$') )
printf '%s\n' "\${modules[@]}" | %{?_prefix_usr}/sbin/weak-modules --add-modules
%preun -n kmod-${kmodname}-${kernel_uname_r}
rpm -ql kmod-${kmodname}-${kernel_uname_r}-%{version}-%{release}.$(arch) | grep -e '\.ko$' > /var/run/rpm-kmod-${kmodname}-modules
%postun -n kmod-${kmodname}-${kernel_uname_r}
%{_kmodtool_depmod_post}
modules=( \$(cat /var/run/rpm-kmod-${kmodname}-modules) )
rm /var/run/rpm-kmod-${kmodname}-modules
printf '%s\n' "\${modules[@]}" | %{?_prefix_usr}/sbin/weak-modules --remove-modules
BuildRequires: kernel-devel = ${kernel_uname_r_wo_arch} redhat-rpm-config
%else
Requires: kernel-uname-r = ${kernel_uname_r}
BuildRequires: kernel-devel-uname-r = ${kernel_uname_r}
BuildRequires: gcc
%post -n kmod-${kmodname}-${kernel_uname_r}
%endif
%post -n %{package_kmod_name}
%{_kmodtool_depmod_post}
%postun -n kmod-${kmodname}-${kernel_uname_r}
%if %{with rhel_kabi}
modules=( \$(find ${usr_lib_modules}/${kernel_uname_r}/extra/${kmodname}/ -name "*.ko" -o -name "*.ko.xz") )
printf '%s\n' "\${modules[@]}" | %{?_prefix_usr}/sbin/weak-modules --add-modules
%endif
%if %{with rhel_kabi}
%preun -n %{package_kmod_name}
rpm -ql %{package_kmod_name}-%{version}-%{release}.$(arch) | grep -e '\.ko$' -e '\.ko.xz$' > /var/run/rpm-%{package_kmod_name}-modules
%endif
%postun -n %{package_kmod_name}
%{_kmodtool_depmod_post}
%if %{with rhel_kabi}
modules=( \$(cat /var/run/rpm-%{package_kmod_name}-modules) )
rm -f /var/run/rpm-%{package_kmod_name}-modules
printf '%s\n' "\${modules[@]}" | %{?_prefix_usr}/sbin/weak-modules --remove-modules
%endif
EOF
else
cat <<EOF
%if 0%{?rhel}
%post -n kmod-${kmodname}-${kernel_uname_r}
%post -n %{package_kmod_name}
[[ "\$(uname -r)" == "${kernel_uname_r}" ]] && %{?_prefix_usr}/sbin/depmod -a > /dev/null || :
%if %{with rhel_kabi}
if [[ "\$(uname -r)" == "${kernel_uname_r}" ]] ; then
modules=( \$(find ${usr_lib_modules}/${kernel_uname_r}/extra/${kmodname}/ | grep -e '\.ko$') )
printf '%s\n' "\${modules[@]}" | %{?_prefix_usr}/sbin/weak-modules --add-modules
modules=( \$(find ${usr_lib_modules}/${kernel_uname_r}/extra/${kmodname}/ -name "*.ko" -o -name "*.ko.xz") )
printf '%s\n' "\${modules[@]}" | %{?_prefix_usr}/sbin/weak-modules --add-modules
fi
%endif
%preun -n kmod-${kmodname}-${kernel_uname_r}
%if %{with rhel_kabi}
%preun -n %{package_kmod_name}
if [[ "\$(uname -r)" == "${kernel_uname_r}" ]] ; then
rpm -ql kmod-${kmodname}-${kernel_uname_r}-%{version}-%{release}.$(arch) | grep -e '\.ko$' > /var/run/rpm-kmod-${kmodname}-modules
rpm -ql %{package_kmod_name}-%{version}-%{release}.$(arch) | grep -e '\.ko$' -e '\.ko.xz$' > /var/run/rpm-%{package_kmod_name}-modules
fi
%endif
%postun -n kmod-${kmodname}-${kernel_uname_r}
%postun -n %{package_kmod_name}
[[ "\$(uname -r)" == "${kernel_uname_r}" ]] && %{?_prefix_usr}/sbin/depmod -a > /dev/null || :
%if %{with rhel_kabi}
if [[ "\$(uname -r)" == "${kernel_uname_r}" ]] ; then
modules=( \$(cat /var/run/rpm-kmod-${kmodname}-modules) )
rm /var/run/rpm-kmod-${kmodname}-modules
printf '%s\n' "\${modules[@]}" | %{?_prefix_usr}/sbin/weak-modules --remove-modules
modules=( \$(cat /var/run/rpm-%{package_kmod_name}-modules) )
rm -f /var/run/rpm-%{package_kmod_name}-modules
printf '%s\n' "\${modules[@]}" | %{?_prefix_usr}/sbin/weak-modules --remove-modules
fi
%else
%post -n kmod-${kmodname}-${kernel_uname_r}
[[ "\$(uname -r)" == "${kernel_uname_r}" ]] && %{?_prefix_usr}/sbin/depmod -a > /dev/null || :
%postun -n kmod-${kmodname}-${kernel_uname_r}
[[ "\$(uname -r)" == "${kernel_uname_r}" ]] && %{?_prefix_usr}/sbin/depmod -a > /dev/null || :
%endif
EOF
fi
@ -279,53 +348,68 @@ EOF
# third part
cat <<EOF
%if 0%{?rhel}
%description -n kmod-${kmodname}-${kernel_uname_r}
%description -n %{package_kmod_name}
This package provides the ${kmodname} kernel modules built for the Linux
kernel ${kernel_uname_r_short} for the %{_target_cpu} family of processors.
%files -n kmod-${kmodname}-${kernel_uname_r}
kernel %{kmod_for_kernel} for the %{_target_cpu} family of processors.
%files -n %{package_kmod_name}
%defattr(644,root,root,755)
%dir ${usr_lib_modules}/${kernel_uname_r}/extra
${usr_lib_modules}/${kernel_uname_r}/extra/${kmodname}/
%else
%description -n kmod-${kmodname}-${kernel_uname_r}
This package provides the ${kmodname} kernel modules built for the Linux
kernel ${kernel_uname_r} for the %{_target_cpu} family of processors.
%files -n kmod-${kmodname}-${kernel_uname_r}
%defattr(644,root,root,755)
%dir ${usr_lib_modules}/${kernel_uname_r}/extra
${usr_lib_modules}/${kernel_uname_r}/extra/${kmodname}/
%endif
EOF
## Set global macros and update global __spec_install_post macro to
## take in account signing and zipping macros provided in
## /etc/rpm/macros.kmodtool file.
## The global __spec_install_post macro is set per package build and
## is not included in the global /etc/rpm/macros.kmodtool file to
## avoid unwanted effects on other packages builds.
## For further explanations see comments included in
## /etc/rpm/macros.kmodtool file.
# Comment from Fedora kernel.spec about this hack. FIXME candidate.
#
# Disgusting hack alert! We need to ensure we sign modules *after* all
# invocations of strip occur, which is in __debug_install_post if
# find-debuginfo.sh runs, and __os_install_post if not.
#
cat <<EOF
%global __kmodtool_kernel_uname_r ${kernel_uname_r}
%global __spec_install_post \\
%{?__debug_package:%{__debug_install_post}}\\
%{__arch_install_post}\\
%{__os_install_post}\\
%{?__kmodtool_signmodules:%{__kmodtool_modsign_install_post}}\\
%{?__kmodtool_zipmodules:%{__kmodtool_modzip_install_post}}
EOF
}
print_rpmtemplate_kmodmetapkg ()
{
local kernel_uname_r=${1}
local kernel_variant="${2:+-${2}}"
local kernel_variant="${1:+-${1}}"
cat <<EOF
%package -n kmod-${kmodname}${kernel_variant}
%package -n %{kmod_pkg_name}${kernel_variant}
Summary: Metapackage which tracks in ${kmodname} kernel module for newest kernel${kernel_variant}
Provides: ${kmodname}-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: kmod-${kmodname}-${kernel_uname_r} >= %{?epoch:%{epoch}:}%{version}-%{release}
Provides: %{pkg_kmod_name} = %{?epoch:%{epoch}:}%{version}-%{release}
Requires: %{package_kmod_name} >= %{?epoch:%{epoch}:}%{version}-%{release}
EOF
if [[ ${obsolete_name} ]] ; then
echo "Provides: kmod-${obsolete_name}${kernel_variant} = ${obsolete_version}"
echo "Obsoletes: kmod-${obsolete_name}${kernel_variant} < ${obsolete_version}"
if [[ -n "${obsolete_name}" ]] ; then
echo "Provides: %{kmod_obsolete_name}${kernel_variant} = ${obsolete_version}"
echo "Obsoletes: %{kmod_obsolete_name}${kernel_variant} < ${obsolete_version}"
fi
cat <<EOF
%description -n kmod-${kmodname}${kernel_variant}
%description -n %{kmod_pkg_name}${kernel_variant}
This is a meta-package without payload which sole purpose is to require the
${kmodname} kernel module(s) for the newest kernel${kernel_variant}.
to make sure you get it together with a new kernel.
%files -n kmod-${kmodname}${kernel_variant}
%files -n %{kmod_pkg_name}${kernel_variant}
%defattr(644,root,root,755)
@ -342,15 +426,26 @@ print_customrpmtemplate ()
# parse kernel versions string and print template
local kernel_verrelarch=${kernel%%${kernels_known_variants}}
print_rpmtemplate_per_kmodpkg --redhat ${kernel} ${kernel##${kernel_verrelarch}}
elif [[ -e "${usr_lib_modules}"/"${kernel}"/build/Makefile ]] ; then
print_rpmtemplate_macros_pkg_name_version "${kernel}"
print_rpmtemplate_per_kmodpkg --redhat ${kernel##${kernel_verrelarch}}
elif [[ -e "${usr_lib_modules}"/"${kernel}"/source/Makefile ]] ; then
# likely a user-build-kernel with available buildfiles
# fixme: we should check if uname from Makefile is the same as ${kernel}
kernel_versions="${kernel_versions}${kernel}___${usr_lib_modules}/${kernel}/build/ "
print_rpmtemplate_per_kmodpkg --custom "${kernel}"
# check if uname from Makefile is the same as ${kernel}
KMF_VERSION="$(grep -m1 -e "^VERSION = " "${usr_lib_modules}"/"${kernel}"/source/Makefile | sed -e 's/^.*= //g')"
KMF_PATCHLEVEL="$(grep -m1 -e "^PATCHLEVEL = " "${usr_lib_modules}"/"${kernel}"/source/Makefile | sed -e 's/^.*= //g')"
KMF_SUBLEVEL="$(grep -m1 -e "^SUBLEVEL = " "${usr_lib_modules}"/"${kernel}"/source/Makefile | sed -e 's/^.*= //g')"
KMF_EXTRAVERSION="$(grep -m1 -e "^EXTRAVERSION = " "${usr_lib_modules}"/"${kernel}"/source/Makefile | sed -e 's/^.*= //g')"
# Bundled bonus
#KMF_NAME="$(grep -m1 -e "^NAME = " "${usr_lib_modules}"/"${kernel}"/source/Makefile | sed -e 's/^.*= //g')"
if [[ "${KMF_VERSION}.${KMF_PATCHLEVEL}.${KMF_SUBLEVEL}${KMF_EXTRAVERSION}" == "${kernel}" ]] ; then
kernel_versions="${kernel_versions}${kernel}___${usr_lib_modules}/${kernel}/source/ "
print_rpmtemplate_macros_pkg_name_version "${kernel}"
print_rpmtemplate_per_kmodpkg --custom
else
error_out 2 "Kernel uname from ${usr_lib_modules}/${kernel}/source/Makefile doesn't match ${kernel} from --for-kernels argument."
fi
else
error_out 2 "Don't know how to handle ${kernel} -- ${usr_lib_modules}/${kernel}/build/Makefile not found"
error_out 2 "Don't know how to handle ${kernel} -- ${usr_lib_modules}/${kernel}/source/Makefile not found"
fi
done
@ -375,11 +470,13 @@ print_rpmtemplate ()
local kernel_verrelarch=${kernel%%${kernels_known_variants}}
print_rpmtemplate_macros_pkg_name_version "${kernel}"
# create metapackage
print_rpmtemplate_kmodmetapkg ${kernel} ${kernel##${kernel_verrelarch}}
print_rpmtemplate_kmodmetapkg ${kernel##${kernel_verrelarch}}
# create package
print_rpmtemplate_per_kmodpkg ${kernel} ${kernel##${kernel_verrelarch}}
print_rpmtemplate_per_kmodpkg ${kernel##${kernel_verrelarch}}
done
}
@ -401,7 +498,7 @@ while [ "${1}" ] ; do
case "${1}" in
--filterfile)
shift
if [[ ! "${1}" ]] ; then
if [[ ! -n "${1}" ]] ; then
error_out 2 "Please provide path to a filter-file together with --filterfile" >&2
elif [[ ! -e "${1}" ]] ; then
error_out 2 "Filterfile ${1} not found" >&2
@ -411,7 +508,7 @@ while [ "${1}" ] ; do
;;
--kmodname)
shift
if [[ ! "${1}" ]] ; then
if [[ ! -n "${1}" ]] ; then
error_out 2 "Please provide the name of the kmod together with --kmodname" >&2
fi
# strip pending -kmod
@ -420,7 +517,7 @@ while [ "${1}" ] ; do
;;
--repo)
shift
if [[ ! "${1}" ]] ; then
if [[ ! -n "${1}" ]] ; then
error_out 2 "Please provide the name of the repo together with --repo" >&2
fi
repo=${1}
@ -428,7 +525,7 @@ while [ "${1}" ] ; do
;;
--for-kernels)
shift
if [[ ! "${1}" ]] ; then
if [[ ! -n "${1}" ]] ; then
error_out 2 "Please provide the name of the kmod together with --kmodname" >&2
fi
for_kernels="${1}"
@ -440,7 +537,7 @@ while [ "${1}" ] ; do
;;
--obsolete-name)
shift
if [[ ! "${1}" ]] ; then
if [[ ! -n "${1}" ]] ; then
error_out 2 "Please provide the name of the kmod to obsolte together with --obsolete-name" >&2
fi
obsolete_name="${1}"
@ -448,7 +545,7 @@ while [ "${1}" ] ; do
;;
--obsolete-version)
shift
if [[ ! "${1}" ]] ; then
if [[ ! -n "${1}" ]] ; then
error_out 2 "Please provide the version of the kmod to obsolte together with --obsolete-version" >&2
fi
obsolete_version="${1}"
@ -481,17 +578,15 @@ while [ "${1}" ] ; do
;;
*)
echo "Error: Unknown option '${1}'." >&2
usage >&2
myprog_help >&2
exit 2
;;
esac
done
if [[ -h /lib ]] ; then
usr_lib_modules=/usr/lib/modules
else
usr_lib_modules=/lib/modules
fi
# These should always be in /lib/modules
# as that's how the kernel package lays them out
usr_lib_modules=/lib/modules
if [[ -e ./kmodtool-kernel-variants ]] ; then
kernels_known_variants="$(cat ./kmodtool-kernel-variants)"
@ -502,18 +597,19 @@ else
fi
# general sanity checks
if [[ ! "${target}" ]] ; then
if [[ ! -n "${target}" ]] ; then
error_out 2 "please pass target arch with --target"
elif [[ ! "${kmodname}" ]] ; then
elif [[ ! -n "${kmodname}" ]] ; then
error_out 2 "please pass kmodname with --kmodname"
elif [[ ! "${kernels_known_variants}" ]] ; then
elif [[ ! -n "${kernels_known_variants}" ]] ; then
error_out 2 "could not determine known variants"
elif ( [[ "${obsolete_name}" ]] && [[ ! "${obsolete_version}" ]] ) || ( [[ ! "${obsolete_name}" ]] && [[ "${obsolete_version}" ]] ) ; then
elif ( [[ -n "${obsolete_name}" ]] && [[ ! -n "${obsolete_version}" ]] ) || ( [[ ! -n "${obsolete_name}" ]] && [[ -n "${obsolete_version}" ]] ) ; then
error_out 2 "you need to provide both --obsolete-name and --obsolete-version"
fi
# go
if [[ "${for_kernels}" ]] ; then
print_rpmtemplate_macros
if [[ -n "${for_kernels}" ]] ; then
# this is easy:
print_customrpmtemplate "${for_kernels}"
elif [[ "${build_kernels}" == "akmod" ]] ; then
@ -524,7 +620,7 @@ else
# seems we are on out own to decide for which kernels to build
# we need more sanity checks in this case
if [[ ! "${repo}" ]] ; then
if [[ ! -n "${repo}" ]] ; then
error_out 2 "please provide repo name with --repo"
elif ! $(which buildsys-build-${repo}-kerneldevpkgs &> /dev/null) ; then
error_out 2 "buildsys-build-${repo}-kerneldevpkgs not found"
@ -534,7 +630,7 @@ else
cmdoptions="--target ${target}"
# filterfile to filter list of kernels?
if [[ "${filterfile}" ]] ; then
if [[ -n "${filterfile}" ]] ; then
cmdoptions="${cmdoptions} --filterfile ${filterfile}"
fi
@ -544,7 +640,7 @@ else
error_out 2 "buildsys-build-${repo}-kerneldevpkgs failed: $(buildsys-build-${repo}-kerneldevpkgs --${build_kernels} ${cmdoptions})"
fi
if [[ "${build_kernels}" == "current" ]] && [[ ! "${noakmod}" ]] ; then
if [[ "${build_kernels}" == "current" ]] && [[ ! -n "${noakmod}" ]] ; then
print_akmodtemplate
fi

View file

@ -1,12 +1,17 @@
# Define rpm macros directory for rhel6 and rhel7
%{!?_rpmmacrodir: %define _rpmmacrodir /usr/lib/rpm/macros.d}
Name: kmodtool
Version: 1
Release: 37%{?dist}
Version: 1.1
Release: 14%{?dist}
Summary: Tool for building kmod packages
License: MIT
URL: http://rpmfusion.org/Packaging/KernelModules/Kmods2
# We are upstream, these files are maintained directly in pkg-git
Source1: %{name}-kmodtool
Source2: %{name}-kernel-variants
Source3: kmodtool-brp-kmodsign
Source4: macros.kmodtool
BuildArch: noarch
@ -24,22 +29,97 @@ building kmod-packages.
%install
mkdir -p -m 0755 %{buildroot}%{_bindir}
mkdir -p -m 0755 %{buildroot}%{_datadir}/%{name}
mkdir -p -m 0755 %{buildroot}%{_bindir} \
%{buildroot}%{_datadir}/%{name} \
%{buildroot}%{_rpmconfigdir} \
%{buildroot}%{_rpmmacrodir}
install -p -m 0755 %{SOURCE1} %{buildroot}%{_bindir}/kmodtool
install -p -m 0644 %{SOURCE2} %{buildroot}%{_datadir}/%{name}/kernel-variants
# adjust default-path
sed -i 's|^default_prefix=.*|default_prefix=%{_datadir}/%{name}/|' \
$RPM_BUILD_ROOT/%{_bindir}/kmodtool
install -p -m 0755 %{SOURCE3} %{buildroot}%{_rpmconfigdir}/brp-kmodsign
install -p -m 0644 %{SOURCE4} %{buildroot}%{_rpmmacrodir}/
%files
%{_bindir}/*
%{_datadir}/%{name}
%{_rpmconfigdir}/brp-kmodsign
%{_rpmmacrodir}/macros.kmodtool
%changelog
* Thu Jul 24 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Thu Mar 06 2025 Leigh Scott <leigh123linux@gmail.com> - 1.1-13
- Use fedora compression flags
* Fri Jan 17 2025 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-12
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Thu Jul 18 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-11
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Thu Jan 25 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Thu Jul 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Thu Jan 19 2023 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Thu Jan 12 2023 FeRD (Frank Dana) <ferdnyc@gmail.com> - 1.1-6
- Fix usage output on unrecognized argument
* Thu Jul 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Sun Apr 03 2022 Sérgio Basto <sergio@serjux.com> - 1.1-4
- kernel-abi-whitelists is not needed and break builds on el9
* Thu Jan 20 2022 Fedora Release Engineering <releng@fedoraproject.org> - 1.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Mon Dec 20 2021 Nicolas Chauvet <kwizart@gmail.com> - 1.1-2
- Revert suse commit in kmodtool
* Fri Oct 22 2021 Nicolas Viéville <nicolas.vieville@uphf.fr> - 1.1-1
- Add signing module method to use with UEFI Secure Boot machines thanks
to Stanislas Leduc (#1454824) (reworked method)
- Add as well zipping module method and support for it in Fedora and RHEL
* Fri Oct 22 2021 Nicolas Viéville <nicolas.vieville@uphf.fr> - 1-44
- Fix indentation
- Add installonlypkg(kernel-module) to allow kmod packages co-install (RHEL)
- Convert if statement from "[!] $variable" to "[!] -n $variable"
- Remove unused variables and code
- Force remove temporary file
- Remove grep pipe after find command
- Standardize globally kmod package names macros and kernel_uname_r
variables in order to ease the build of kmod packages for non-default
distribution (Fedora), for example for RHEL
- Try to fix: check if uname from Makefile is the same as kernel variable
* Thu Jul 22 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1-43
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1-42
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Tue Jul 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1-41
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Mon Jul 06 2020 Neal Gompa <ngompa13@gmail.com> - 1-40
- Always use /lib/modules for kmod install path
* Mon Jul 06 2020 Neal Gompa <ngompa13@gmail.com> - 1-39
- Don't force-disable debuginfo subpackages
* Wed Jan 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1-38
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Sun Oct 13 2019 Sérgio Basto <sergio@serjux.com> - 1-37
- Fix package name in epel scriptlets

114
macros.kmodtool Normal file
View file

@ -0,0 +1,114 @@
# /etc/rpm/macros.kmodtool: kmodtool keypair sign and zip config.
#
# This file controls signing and zipping modules on the system, included
# akmods ones.
# It uses the rpm macros syntax to define global symbol imported
# directly by kmodtool while rebuilding kmods.
#
# Signing modules
#
# __kmodtool_signmodules can take one of these two values:
# 1 - Modules would be signed when rebuilding modules.
# 0 - No signed modules when rebuilding modules.
# __kmodtool_signmodules_pubkey gives path and name of the public key to
# be used to sign newly build modules.
# __kmodtool_signmodules_privkey gives path and name of the private key to
# be used to sign newly build modules.
#
# __kmodtool_signmodules* macros can be overriden by users and/or
# packagers provided that those values and their dependencies are
# manually checked. Be carefull when modifying these values. To override
# these macros please define these ones in your spec file (one
# underscore as prefix and not two):
# - _kmodtool_signmodules
# - _kmodtool_signmodules_pubkey
# - _kmodtool_signmodules_privkey
# It is also possible to uncomment one or several of the macros provided
# below:
#%%_kmodtool_signmodules 0
#%%_kmodtool_signmodules 1
#%%_kmodtool_signmodules_pubkey /path/to/your/public_key.der
#%%_kmodtool_signmodules_privkey /path/to/your/private_key.der
#
# Signing modules is enabled in Fedora kernels for every arches,
# even if kernels are not signed for arches other than
# %%{ix86} x86_64 aarch64.
#
# Sign modules on x86. Make sure the config files match this setting if
# more architectures are added.
%__kmodtool_signmodules %{?_kmodtool_signmodules:%{_kmodtool_signmodules}}%{!?_kmodtool_signmodules:1}
# This is current keypair enrolled in MOK to sign modules
%__kmodtool_signmodules_pubkey %{?_kmodtool_signmodules_pubkey:%{_kmodtool_signmodules_pubkey}}%{!?_kmodtool_signmodules_pubkey:/etc/pki/akmods/certs/public_key.der}
%__kmodtool_signmodules_privkey %{?_kmodtool_signmodules_privkey:%{_kmodtool_signmodules_privkey}}%{!?_kmodtool_signmodules_privkey:/etc/pki/akmods/private/private_key.priv}
# Define signing macros
#
%__kmodtool_modsign_cmd %{_rpmconfigdir}/brp-kmodsign
%__kmodtool_modsign_install_post \
if [ "%{__kmodtool_signmodules}" -eq "1" ] && [ -x %{__kmodtool_modsign_cmd} ] && [ -e %{__kmodtool_signmodules_privkey} ] && [ -e %{__kmodtool_signmodules_pubkey} ] ; then\
%{__kmodtool_modsign_cmd} %{__kmodtool_signmodules_privkey} %{__kmodtool_signmodules_pubkey} %{buildroot}%{kmodinstdir_prefix}%{__kmodtool_kernel_uname_r}%{kmodinstdir_postfix} /usr/src/kernels/%{__kmodtool_kernel_uname_r}\
fi\
%{nil}
# Zipping modules
#
# __kmodtool_zipmodules can take one of these two values:
# 1 - Modules would be zipped when rebuilding modules.
# 0 - No zipped modules when rebuilding modules.
#
# __kmodtool_zipmodules* macros can be overriden by users and/or packagers
# provided that those values and their dependencies are manually
# checked. Be carefull when modifying these values. To override these
# macros please define these ones in your spec file (one underscore as
# prefix and not two):
# - _kmodtool_zipmodules
# It is also possible to uncomment one of the macros provided below:
#%%_kmodtool_zipmodules 0
#%%_kmodtool_zipmodules 1
#
# Zipping modules according to Fedora kernels sources is enabled only
# for arches %%{ix86} x86_64 aarch64. For information zipping kernel
# modules is available since rhel 7.x and fedora 21.
# Settings below conform to this directives.
#
# Zip modules on x86 x86_64 aarch64. Make sure the config files match
# this setting if more architectures are added.
%__kmodtool_zipmodules_arch_ok %(
echo %{ix86} x86_64 aarch64 | grep -qwo %{_arch}
if [ $? -eq 0 ] ; then
echo 1
else
echo 0
fi
)
# Distributions where zipping is enabled by default
%__kmodtool_zipmodules_dist_ok %(
if (( %{?rhel} + 0 > 6 || %{?fedora} + 0 > 20 )) ; then
echo 1
else
echo 0
fi
)
# Put arches and distributions conditions together
%__kmodtool_zipmodules_ok %(
if (( %{?__kmodtool_zipmodules_arch_ok} && %{?__kmodtool_zipmodules_dist_ok} )) ; then
echo 1
else
echo 0
fi
)
# Put them all in place
%__kmodtool_zipmodules %{?_kmodtool_zipmodules:%{_kmodtool_zipmodules}}%{!?_kmodtool_zipmodules:%{?__kmodtool_zipmodules_ok}}
# Define zipping macros
#
%__kmodtool_modzip_install_post\
if [ "%{__kmodtool_zipmodules}" -eq "1" ] ; then\
find %{buildroot}%{kmodinstdir_prefix}%{__kmodtool_kernel_uname_r}%{kmodinstdir_postfix} -type f -name '*.ko' | xargs xz --compress --check=crc32 --lzma2=dict=1MiB;\
fi\
%{nil}