Adapt kernel packaging for dnf methods of handling kernels

dnf is able to coinstall multiple versions of one package with the same name,
use it to handle clean up of old kernels.
This commit is contained in:
Mikhail Novosyolov 2021-05-03 15:56:13 +03:00
parent 846f0d6a2f
commit 8e1fdb84a2
2 changed files with 145 additions and 280 deletions

View file

@ -1,10 +1,6 @@
# _get_email() in %%build contains bashisms for regexping # _get_email() in %%build contains bashisms for regexping
%define _buildshell /bin/bash %define _buildshell /bin/bash
# Prevent RPM scripts from stripping signatures,
# we strip binaries manually in %%build
%define __strip %(which true)
# brp-python-bytecompile uses /usr/bin/python, # brp-python-bytecompile uses /usr/bin/python,
# but it is a different python version in different ROSA # but it is a different python version in different ROSA
# releases; there is no good way to tell brp-python-bytecompile # releases; there is no good way to tell brp-python-bytecompile
@ -18,22 +14,29 @@
# so we do not loose much by disabling it. # so we do not loose much by disabling it.
%global _find_debuginfo_dwz_opts %{nil} %global _find_debuginfo_dwz_opts %{nil}
# Put everything into one non-standard debuginfo subpackage
# TODO: make multiple debuginfo packages coinstallable as installonlypkg,
# to achive this, there must be no conflicting files.
# Probably signing and compressing of kernel modules
# has to be moved to %%_spec_install_post.
%global _debuginfo_subpackages %{nil}
%global _debuginfo_template %{nil}
%undefine _debugsource_packages
# Hack: flavour and major version are variable, make %%_build_pkgcheck_* always detect and use this config
%global _build_pkgcheck_set %(echo "%{_build_pkgcheck_set}" | sed -e 's,/%{name}.rpmlintrc,/kernel.rpmlintrc,')
%global _build_pkgcheck_srpm %(echo "%{_build_pkgcheck_srpm}" | sed -e 's,/%{name}.rpmlintrc,/kernel.rpmlintrc,')
%define kernelversion 5 %define kernelversion 5
%define patchlevel 10 %define patchlevel 10
%define sublevel 34 %define sublevel 34
# Release number. Increase this before a rebuild. # Release number. Increase this before a rebuild.
%define rpmrel 1 %define rpmrel 2
%define fullrpmrel %{rpmrel} %define fullrpmrel %{rpmrel}
%define rpmtag %{disttag} %define rpmtag %{disttag}
# fakerel and fakever never change, they are used to fool
# rpm/urpmi/smart and ensure the kernels are installed,
# not upgraded so old kernel is not overwritten or removed
%define fakever 1
%define fakerel %mkrel 1
# version defines # version defines
%define kversion %{kernelversion}.%{patchlevel}.%{sublevel} %define kversion %{kernelversion}.%{patchlevel}.%{sublevel}
%define kverrel %{kversion}-%{fullrpmrel} %define kverrel %{kversion}-%{fullrpmrel}
@ -145,6 +148,15 @@
%define certs_key_config_rnd %{certs_dir_rnd}/x509.genkey %define certs_key_config_rnd %{certs_dir_rnd}/x509.genkey
%define certs_public_keys %{certs_dir_rnd}/public.pem %define certs_public_keys %{certs_dir_rnd}/public.pem
%define certs_verify_tmp %{certs_dir_rnd}/verify.tmp %define certs_verify_tmp %{certs_dir_rnd}/verify.tmp
%define kernel_files %{_builddir}/kernel_files.list
%define debuginfo_files %{_builddir}/debuginfo_files.list
# Append list of files generate by find-debuginfo.sh to our custom list
%global __debug_install_post \
%{__debug_install_post} \
cat %{_builddir}/debugfiles.list >> %{debuginfo_files}
############################################################################ ############################################################################
# Build defines # Build defines
@ -221,7 +233,7 @@
# SRC RPM description # SRC RPM description
# #
Summary: The Linux kernel Summary: The Linux kernel
Name: kernel Name: kernel-%{kernelversion}.%{patchlevel}-%{flavour}
Version: %{kversion} Version: %{kversion}
Release: %{fullrpmrel} Release: %{fullrpmrel}
License: GPLv2 License: GPLv2
@ -407,64 +419,42 @@ BuildRequires: ccache
BuildRequires: zstd BuildRequires: zstd
%endif %endif
# might be useful too: Provides: kernel = %{EVRD}
Recommends: microcode Provides: kernel-%{flavour} = %{EVRD}
# dnf config-manager --dump | grep installonly
Provides: installonlypkg(kernel) = %{EVRD}.image
%description Provides: installonlypkg(kernel) = %{EVRD}.modules
The kernel package contains the Linux kernel (vmlinuz), the core of your
operating system. The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device
input and output, etc.
############################################################################
%package -n kernel-%{flavour}-%{buildrel}
Version: %{fakever}
Release: %{fakerel}
Provides: kernel = %{kverrel}
Provides: kernel = %{kernelversion}.%{patchlevel}
Provides: kernel-%{flavour} = %{kverrel}
Provides: alsa = 1.0.27
Provides: should-restart = system
Requires(post): dracut Requires(post): dracut
Requires(post): kmod Requires(post): kmod
# Usually necessary, but sometimes user may want to not install them # Usually necessary, but sometimes user may want to not install them
Recommends: linux-firmware Recommends: linux-firmware
Recommends: wireless-regdb Recommends: wireless-regdb
Recommends: crda Recommends: crda
Recommends: microcode
%if %{with flow_abi}
Requires: kernel-%{kernelversion}.%{patchlevel}-rosa-flow-abi
%endif
# Set BFQ as default scheduler for HDDs # Set BFQ as default scheduler for HDDs
# https://www.phoronix.com/scan.php?page=article&item=linux-50hdd-io # https://www.phoronix.com/scan.php?page=article&item=linux-50hdd-io
Recommends: udev-rules-ioschedulers Recommends: udev-rules-ioschedulers
# Keep these deps on old platforms %if %{with flow_abi}
# but get rid of puling gcc etc. by the kernel on newer platforms Requires: kernel-%{kernelversion}.%{patchlevel}-rosa-flow-abi
%if %{build_devel} && %{mdvver} < 201900
Requires: kernel-%{flavour}-devel-%{buildrel}
Requires(post): kernel-%{flavour}-devel-%{buildrel}
%endif %endif
%ifarch %{ix86} %ifarch %{ix86}
Conflicts: arch(x86_64) Conflicts: arch(x86_64)
%endif %endif
Summary: A general-purpose Linux Kernel Obsoletes: kernel-%{flavour}-%{kernelversion}.%{patchlevel}-latest < 5.10.34-2
Group: System/Kernel and hardware Provides: kernel-%{flavour}-%{kernelversion}.%{patchlevel}-latest = %{EVRD}
%description -n kernel-%{flavour}-%{buildrel} %description
The kernel package contains the Linux kernel (vmlinuz), the core of your The kernel package contains the Linux kernel (vmlinuz), the core of your
operating system. The kernel handles the basic functions operating system. The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device of the operating system: memory allocation, process allocation, device
input and output, etc. This is a general-purpose kernel. input and output, etc. This is a general-purpose kernel.
%posttrans -n kernel-%{flavour}-%{buildrel} %posttrans
# We always regenerate initrd here, even if it already exists. This may # We always regenerate initrd here, even if it already exists. This may
# happen if kernel-<...>-devel is installed first, triggers rebuild of # happen if kernel-<...>-devel is installed first, triggers rebuild of
# DKMS modules and some of these request remaking of initrd. The initrd # DKMS modules and some of these request remaking of initrd. The initrd
@ -483,7 +473,7 @@ input and output, etc. This is a general-purpose kernel.
# File triggers from grub packages will handle this. # File triggers from grub packages will handle this.
#/usr/sbin/update-grub2 #/usr/sbin/update-grub2
%postun -n kernel-%{flavour}-%{buildrel} %postun
# Do not remove just installed kernel if package is being reinstalled # Do not remove just installed kernel if package is being reinstalled
if [ "$1" -gt 0 ]; then exit 0; fi if [ "$1" -gt 0 ]; then exit 0; fi
@ -499,16 +489,43 @@ rm -rf /lib/modules/%{kver_full}/modules*
# Remove /lib/modules/<...>/ if it is empty (-devel uses it too). # Remove /lib/modules/<...>/ if it is empty (-devel uses it too).
find /lib/modules/%{kver_full} -maxdepth 0 -empty -exec rm -rf {} \; || true find /lib/modules/%{kver_full} -maxdepth 0 -empty -exec rm -rf {} \; || true
%files -f %{kernel_files}
%files -n kernel-%{flavour}-%{buildrel} -f kernel_files.%{flavour} %{_bootdir}/System.map-%{kver_full}
%{_bootdir}/symvers-%{kver_full}.zst
%{_bootdir}/config-%{kver_full}
%{_bootdir}/vmlinuz-%{kver_full}
%ifarch %{armx}
%{_bootdir}/dtb-%{kver_full}
%endif
%{_modulesdir}/%{kver_full}/modules.*
%if %{with flow_abi}
%{_modulesdir}/%{kver_full}/kernel/zzz-%{kernelversion}.%{patchlevel}-rosa-flow-abi
%endif
%if %{with binary_extra_modules}
# 8821ce.ko.debug will not be excluded and will be in the main debug subpackage
%exclude %{_modulesdir}/%{kver_full}/kernel/net/wireless/8821ce.ko%{kmod_suffix}
%if %{with binary_shredder}
%exclude %{_modulesdir}/%{kver_full}/kernel/extra/shredder-kernel.ko%{kmod_suffix}
%endif
%if %{with binary_virtualbox_host}
# vbox host modules may be built here (vboxnetflt vboxnetadp vboxdrv vboxpci)
# vbox guest modules are in the mainline kernel now (vboxvideo vboxguest vboxsf)
%exclude %{_modulesdir}/%{kver_full}/kernel/misc/vbox*.ko%{kmod_suffix}
%endif
%exclude %{_modulesdir}/%{kver_full}/kernel/net/xt_TRIPSO.ko%{kmod_suffix}
%exclude %{_modulesdir}/%{kver_full}/kernel/net/xt_so.ko%{kmod_suffix}
%if %{with nickel}
%exclude %{_modulesdir}/%{kver_full}/kernel/misc/nlkm.ko%{kmod_suffix}
%exclude %{_modulesdir}/%{kver_full}/kernel/misc/memfreetest.ko%{kmod_suffix}
%exclude %{_modulesdir}/%{kver_full}/kernel/misc/pcietest.ko%{kmod_suffix}
%endif
%endif #with binary_extra_modules
############################################################################ ############################################################################
%if %build_devel %if %build_devel
%package -n kernel-%{flavour}-devel-%{buildrel} %package devel
Version: %{fakever} Summary: Development files for %{name}
Release: %{fakerel}
Summary: Development files for kernel-%{flavour}-%{buildrel}
Group: Development/Kernel Group: Development/Kernel
Requires: glibc-devel Requires: glibc-devel
Requires: ncurses-devel Requires: ncurses-devel
@ -517,27 +534,28 @@ Requires: gcc
Requires: perl Requires: perl
Provides: kernel-devel = %{kverrel} Provides: kernel-devel = %{kverrel}
Provides: kernel-%{flavour}-devel = %{kverrel} Provides: kernel-%{flavour}-devel = %{kverrel}
Provides: installonlypkg(kernel) = %{EVRD}.devel
Obsoletes: kernel-%{flavour}-%{kernelversion}.%{patchlevel}-devel-latest < 5.10.34-2
Provides: kernel-%{flavour}-%{kernelversion}.%{patchlevel}-devel-latest = %{EVRD}
# Have dkms updated/installed before the kernel, scriptlet here checks if dkms exists # Have dkms updated/installed before the kernel, scriptlet here checks if dkms exists
%if %rpm4
OrderWithRequires(post): dkms OrderWithRequires(post): dkms
%endif
%ifarch %{ix86} %ifarch %{ix86}
Conflicts: arch(x86_64) Conflicts: arch(x86_64)
%endif %endif
%description -n kernel-%{flavour}-devel-%{buildrel} %description devel
This package contains the kernel files (headers and build tools) This package contains the kernel files (headers and build tools)
that should be enough to build additional drivers for that should be enough to build additional drivers for
use with kernel-%{flavour}-%{buildrel}. use with %{name}.
%post -n kernel-%{flavour}-devel-%{buildrel} %post devel
if command -v dkms_autoinstaller >/dev/null 2>&1; then if command -v dkms_autoinstaller >/dev/null 2>&1; then
dkms_autoinstaller start %{kver_full} dkms_autoinstaller start %{kver_full}
fi fi
%preun -n kernel-%{flavour}-devel-%{buildrel} %preun devel
# If any DKMS modules with REMAKE_INITRD=yes in their configs have been # If any DKMS modules with REMAKE_INITRD=yes in their configs have been
# uninstalled, initrd has been regenerated for the given kernel. However, # uninstalled, initrd has been regenerated for the given kernel. However,
@ -558,7 +576,7 @@ for ii in $(/usr/sbin/dkms status -k %{kver_full} | awk '{ print $1 $2; }'); do
/usr/sbin/dkms --rpm_safe_upgrade uninstall -m $mod -v $ver -k %{kver_full} || : /usr/sbin/dkms --rpm_safe_upgrade uninstall -m $mod -v $ver -k %{kver_full} || :
done done
%postun -n kernel-%{flavour}-devel-%{buildrel} %postun devel
rm -rf /usr/src/linux-%{kver_full} >/dev/null rm -rf /usr/src/linux-%{kver_full} >/dev/null
# depmod (called when removing DKMS modules) might have created files in # depmod (called when removing DKMS modules) might have created files in
# /lib/modules/.../. Remove these first. # /lib/modules/.../. Remove these first.
@ -567,7 +585,7 @@ rm -rf /lib/modules/%{kver_full}/modules*
find /lib/modules/%{kver_full} -maxdepth 0 -empty -exec rm -rf {} \; || true find /lib/modules/%{kver_full} -maxdepth 0 -empty -exec rm -rf {} \; || true
%files -n kernel-%{flavour}-devel-%{buildrel} %files devel
%{devel_root}/Documentation %{devel_root}/Documentation
%dir %{devel_root} %dir %{devel_root}
%dir %{devel_root}/arch %dir %{devel_root}/arch
@ -632,88 +650,38 @@ find /lib/modules/%{kver_full} -maxdepth 0 -empty -exec rm -rf {} \; || true
%{_modulesdir}/%{kver_full}/build %{_modulesdir}/%{kver_full}/build
%{_modulesdir}/%{kver_full}/source %{_modulesdir}/%{kver_full}/source
%endif %endif # /build_devel
############################################################################ ############################################################################
%if %build_debug %if %build_debug
%package -n kernel-%{flavour}-%{buildrel}-debuginfo %package debuginfo
Version: %{fakever} Summary: Debuginfo for %{name}
Release: %{fakerel}
Summary: Debuginfo for kernel-%{flavour}-%{buildrel}
Group: Development/Debug Group: Development/Debug
Provides: kernel-debug = %{kverrel} Provides: kernel-debug = %{kverrel}
AutoReq: 0
AutoProv: 0
%ifarch %{ix86} %description debuginfo
Conflicts: arch(x86_64) This package contains the files with debuginfo for %{name}.
%endif
%description -n kernel-%{flavour}-%{buildrel}-debuginfo %files debuginfo -f %{debuginfo_files}
This package contains the files with debuginfo for kernel-%{flavour}-%{buildrel}. %{_bootdir}/vmlinux-%{kver_full}
%files -n kernel-%{flavour}-%{buildrel}-debuginfo -f kernel_debug_files.%{flavour} %endif # /build_debug
%endif
############################################################################
%package -n kernel-%{flavour}-%{kernelversion}.%{patchlevel}-latest
Version: %{kversion}
Release: %{fullrpmrel}
Summary: Meta package for the latest kernel-%{flavour} in %{kernelversion}.%{patchlevel} series
Group: System/Kernel and hardware
Requires: kernel-%{flavour}-%{buildrel}
%ifarch %{ix86}
Conflicts: arch(x86_64)
%endif
%description -n kernel-%{flavour}-%{kernelversion}.%{patchlevel}-latest
This meta package aims to make sure you always have the
latest kernel-%{flavour} %{kernelversion}.%{patchlevel}.x installed.
%files -n kernel-%{flavour}-%{kernelversion}.%{patchlevel}-latest
# no files
############################################################################
%if %build_devel
%package -n kernel-%{flavour}-%{kernelversion}.%{patchlevel}-devel-latest
Version: %{kversion}
Release: %{fullrpmrel}
Summary: Meta package for the latest kernel-%{flavour}-devel in %{kernelversion}.%{patchlevel} series
Group: Development/Kernel
Requires: kernel-%{flavour}-devel-%{buildrel}
Provides: kernel-devel-latest
%ifarch %{ix86}
Conflicts: arch(x86_64)
%endif
%description -n kernel-%{flavour}-%{kernelversion}.%{patchlevel}-devel-latest
This meta package aims to make sure you always have the
latest kernel-%{flavour}-devel %{kernelversion}.%{patchlevel}.x installed.
%files -n kernel-%{flavour}-%{kernelversion}.%{patchlevel}-devel-latest
# no files
%endif
############################################################################ ############################################################################
%if %build_doc %if %build_doc
%package -n kernel-doc %package doc
Version: %{kversion}
Release: %{fullrpmrel}
Summary: Various documentation bits found in the kernel source Summary: Various documentation bits found in the kernel source
Group: Documentation Group: Documentation
Buildarch: noarch Buildarch: noarch
%description -n kernel-doc %description doc
This package contains documentation files from the kernel source. This package contains documentation files from the kernel source.
%files -n kernel-doc %files doc
%doc linux-%{tar_ver}/Documentation/* %doc linux-%{tar_ver}/Documentation/*
%endif %endif
@ -722,8 +690,6 @@ This package contains documentation files from the kernel source.
%if %{build_perf} %if %{build_perf}
%package -n perf %package -n perf
Version: %{kversion}
Release: %{fullrpmrel}
Summary: perf tool and the supporting documentation Summary: perf tool and the supporting documentation
Group: System/Kernel and hardware Group: System/Kernel and hardware
@ -754,14 +720,9 @@ The package contains perf tool and the supporting documentation.
%if %{build_cpupower} %if %{build_cpupower}
%package -n cpupower %package -n cpupower
Version: %{kversion}
Release: %{fullrpmrel}
Summary: The cpupower tools Summary: The cpupower tools
Group: System/Kernel and hardware Group: System/Kernel and hardware
Requires(post): rpm-helper >= 0.24.0-3
Requires(preun): rpm-helper >= 0.24.0-3
Obsoletes: cpufreq < 3.0
Obsoletes: cpufrequtils < 10.0
%description -n cpupower %description -n cpupower
The cpupower tools. The cpupower tools.
@ -795,11 +756,9 @@ fi
############################################################################ ############################################################################
%package -n cpupower-devel %package -n cpupower-devel
Version: %{kversion}
Release: %{fullrpmrel}
Summary: Development files for cpupower Summary: Development files for cpupower
Group: Development/Kernel Group: Development/Kernel
Requires: cpupower = %{kversion}-%{fullrpmrel} Requires: cpupower = %{EVRD}
Conflicts: %{_lib}cpufreq-devel Conflicts: %{_lib}cpufreq-devel
%description -n cpupower-devel %description -n cpupower-devel
@ -815,16 +774,14 @@ This package contains the development files for cpupower.
############################################################################ ############################################################################
%if %{build_headers} %if %{build_headers}
%package headers %package -n kernel-headers
Version: %kversion
Release: %fullrpmrel
Summary: Linux kernel header files mostly used by your C library Summary: Linux kernel header files mostly used by your C library
Group: System/Kernel and hardware Group: System/Kernel and hardware
Epoch: 1 Epoch: 1
Provides: linux-userspace-headers = %{EVRD} Provides: linux-userspace-headers = %{EVRD}
Provides: kernel-release-headers = %{EVRD} Provides: kernel-release-headers = %{EVRD}
%description headers %description -n kernel-headers
C header files from the Linux kernel. The header files define C header files from the Linux kernel. The header files define
structures and constants that are needed for building most structures and constants that are needed for building most
standard programs, notably the C library. standard programs, notably the C library.
@ -832,7 +789,7 @@ standard programs, notably the C library.
This package is not suitable for building kernel modules, you This package is not suitable for building kernel modules, you
should use the 'kernel-devel' package instead. should use the 'kernel-devel' package instead.
%files headers %files -n kernel-headers
%{_includedir}/* %{_includedir}/*
# Don't conflict with cpupower-devel # Don't conflict with cpupower-devel
%if %{build_cpupower} %if %{build_cpupower}
@ -845,79 +802,40 @@ should use the 'kernel-devel' package instead.
%if %{with uml} %if %{with uml}
%package -n kernel-uml-%{flavour}-%{buildrel} %package uml
Version: %{fakever}
Release: %{fakerel}
Provides: kernel-uml = %{kverrel}
Provides: kernel-uml-%{flavour} = %{kverrel}
Summary: User Mode Linux binary Summary: User Mode Linux binary
Group: System/Kernel and hardware Group: System/Kernel and hardware
Provides: kernel-uml = %{kverrel}
Provides: kernel-uml-%{flavour} = %{kverrel}
Provides: installonlypkg(kernel) = %{EVRD}.uml
Obsoletes: kernel-uml-%{flavour}-%{kernelversion}.%{patchlevel}-latest < 5.10.34-2
Provides: kernel-uml-%{flavour}-%{kernelversion}.%{patchlevel}-latest = %{EVRD}
%description -n kernel-uml-%{flavour}-%{buildrel} %description uml
User Mode Linux binary. User Mode Linux binary.
Stripped, debug is in kernel-%{flavour}-%{buildrel}-debuginfo. Stripped, debug is in %{name}-debuginfo.
%files -n kernel-uml-%{flavour}-%{buildrel} %files uml
%{_bindir}/linux-uml-%{kver_full} %{_bindir}/linux-uml-%{kver_full}
#------------------------------------------------ #------------------------------------------------
%package -n kernel-uml-modules-%{flavour}-%{buildrel} %package uml-modules
Version: %{fakever}
Release: %{fakerel}
Provides: kernel-uml-modules = %{kverrel}
Provides: kernel-uml-modules-%{flavour} = %{kverrel}
Summary: User Mode Linux (UML) kernel modules Summary: User Mode Linux (UML) kernel modules
Group: System/Kernel and hardware Group: System/Kernel and hardware
Provides: kernel-uml-modules = %{kverrel}
Provides: kernel-uml-modules-%{flavour} = %{kverrel}
Provides: installonlypkg(kernel-module) = %{EVRD}.uml
Obsoletes: kernel-uml-modules-%{flavour}-%{kernelversion}.%{patchlevel}-latest < 5.10.34-2
Provides: kernel-uml-modules-%{flavour}-%{kernelversion}.%{patchlevel}-latest = %{EVRD}
%description -n kernel-uml-modules-%{flavour}-%{buildrel} %description uml-modules
User Mode Linux (UML) kernel modules User Mode Linux (UML) kernel modules
- not compressed - not compressed
- not stripped - not stripped
- signed - signed
%files -n kernel-uml-modules-%{flavour}-%{buildrel} %files uml-modules
/lib/modules-uml/%{kver_full} /lib/modules-uml/%{kver_full}
#------------------------------------------------
%package -n kernel-uml-%{flavour}-%{kernelversion}.%{patchlevel}-latest
Version: %{kversion}
Release: %{fullrpmrel}
Summary: Meta package for the latest kernel-uml-%{flavour} in %{kernelversion}.%{patchlevel} series
Group: System/Kernel and hardware
Requires: kernel-uml-%{flavour}-%{buildrel}
%ifarch %{ix86}
Conflicts: arch(x86_64)
%endif
%description -n kernel-uml-%{flavour}-%{kernelversion}.%{patchlevel}-latest
This meta package aims to make sure you always have the
latest kernel-uml-%{flavour} %{kernelversion}.%{patchlevel}.x
(User Mode Linux binary) installed.
%files -n kernel-uml-%{flavour}-%{kernelversion}.%{patchlevel}-latest
# no files
#------------------------------------------------
%package -n kernel-uml-modules-%{flavour}-%{kernelversion}.%{patchlevel}-latest
Version: %{kversion}
Release: %{fullrpmrel}
Summary: Meta package for the latest kernel-uml-modules-%{flavour} in %{kernelversion}.%{patchlevel} series
Group: System/Kernel and hardware
Requires: kernel-uml-modules-%{flavour}-%{buildrel}
%ifarch %{ix86}
Conflicts: arch(x86_64)
%endif
%description -n kernel-uml-modules-%{flavour}-%{kernelversion}.%{patchlevel}-latest
This meta package aims to make sure you always have the
latest kernel-uml-modules-%{flavour} %{kernelversion}.%{patchlevel}.x
(User Mode Linux kernel modules) installed.
%files -n kernel-uml-modules-%{flavour}-%{kernelversion}.%{patchlevel}-latest
# no files
#------------------------------------------------
%endif #endif uml %endif #endif uml
@ -943,20 +861,19 @@ latest kernel-uml-modules-%{flavour} %{kernelversion}.%{patchlevel}.x
%ksob_mk_module_pkg -n vboxpci -s misc %ksob_mk_module_pkg -n vboxpci -s misc
# a package which will pull all those modules # a package which will pull all those modules
%package -n kernel-modules-virtualbox-host-%{flavour}-%{kernelversion}.%{patchlevel}-latest %package -n kernel-modules-virtualbox-host-%{ksob_kernel}
Summary: Meta package to pull VirtualBox host kernel modules for kernel-%{flavour}-%{kernelversion}.%{patchlevel} Summary: Meta package to pull VirtualBox host kernel modules for kernel-%{flavour}-%{kernelversion}.%{patchlevel}
Group: System/Kernel and hardware Group: System/Kernel and hardware
Version: %{kversion} Requires: kernel-module-vboxnetflt-%{ksob_kernel}
Release: %{fullrpmrel} Requires: kernel-module-vboxnetadp-%{ksob_kernel}
Requires: kernel-module-vboxnetflt-%{flavour}-%{buildrel} Requires: kernel-module-vboxdrv-%{ksob_kernel}
Requires: kernel-module-vboxnetadp-%{flavour}-%{buildrel} Requires: kernel-module-vboxpci-%{ksob_kernel}
Requires: kernel-module-vboxdrv-%{flavour}-%{buildrel} Obsoletes: kernel-modules-virtualbox-host-%{flavour}-%{kernelversion}.%{patchlevel}-latest < 5.10.34-2
Requires: kernel-module-vboxpci-%{flavour}-%{buildrel}
%description -n kernel-modules-virtualbox-host-%{flavour}-%{kernelversion}.%{patchlevel}-latest %description -n kernel-modules-virtualbox-host-%{ksob_kernel}
Meta package to pull VirtualBox host kernel modules for kernel-%{flavour}-%{kernelversion}.%{patchlevel} Meta package to pull VirtualBox host kernel modules for %{name}
%files -n kernel-modules-virtualbox-host-%{flavour}-%{kernelversion}.%{patchlevel}-latest %files -n kernel-modules-virtualbox-host-%{ksob_kernel}
# empty # empty
%endif #ifarch x86 %endif #ifarch x86
#------------------------------------------------ #------------------------------------------------
@ -996,6 +913,12 @@ This package does nothing, just owns a directory for third-party binary kernel m
################################################ ################################################
%prep %prep
# avoid accidental merge
%if 0%{?rpm5}
%{error:Package structure is for dnf, not for urpmi!}
%endif
%setup -q -n %top_dir_name -c %setup -q -n %top_dir_name -c
%if %{with uml} %if %{with uml}
cp -r %{src_dir} %{src_dir}.uml cp -r %{src_dir} %{src_dir}.uml
@ -1450,13 +1373,8 @@ patch -p1 --fuzz=0 -d %{temp_devel_root} -i %{SOURCE2}
# endif build_devel # endif build_devel
%endif %endif
# Manage the files with debug info, provide the debug links in the # TODO: maybe move to /usr/lib/debug?
# kernel modules.
%if %build_debug %if %build_debug
install -m 644 vmlinux %{temp_boot}/vmlinux-%{kver_full}
kernel_debug_files=../kernel_debug_files.%{flavour}
echo "%{_bootdir}/vmlinux-%{kver_full}" >> $kernel_debug_files
find %{temp_modules}/%{kver_full}/kernel \ find %{temp_modules}/%{kver_full}/kernel \
-name "*.ko" | \ -name "*.ko" | \
%kxargs -I '{}' objcopy --only-keep-debug '{}' '{}'.debug %kxargs -I '{}' objcopy --only-keep-debug '{}' '{}'.debug
@ -1465,19 +1383,7 @@ find %{temp_modules}/%{kver_full}/kernel \
sh -c 'cd `dirname {}`; \ sh -c 'cd `dirname {}`; \
objcopy --add-gnu-debuglink=`basename {}`.debug \ objcopy --add-gnu-debuglink=`basename {}`.debug \
--strip-debug `basename {}`' --strip-debug `basename {}`'
%endif # /build_debug
pushd %{temp_modules}
find %{kver_full}/kernel -name "*.ko.debug" > debug_module_list
popd
cat %{temp_modules}/debug_module_list | \
sed 's|\(.*\)|%{_modulesdir}/\1|' >> $kernel_debug_files
cat %{temp_modules}/debug_module_list | \
sed 's|\(.*\)|%exclude %{_modulesdir}/\1|' \
>> ../kernel_exclude_debug_files.%{flavour}
rm -f %{temp_modules}/debug_module_list
# endif build_debug
%endif
# https://patchwork.kernel.org/patch/11446123/ # https://patchwork.kernel.org/patch/11446123/
_libressl_sign(){ _libressl_sign(){
@ -1504,44 +1410,6 @@ find %{temp_modules}/%{kver_full}/kernel \
xargs --null -P "$(nproc)" -I {} "$SHELL" -e -x -c 'if ! _libressl_sign "{}"; \ xargs --null -P "$(nproc)" -I {} "$SHELL" -e -x -c 'if ! _libressl_sign "{}"; \
then echo Failed _libressl_sign on "{}" && exit 1; fi' then echo Failed _libressl_sign on "{}" && exit 1; fi'
# Create the list of files for the kernel.
kernel_files=../kernel_files.%{flavour}
cat > $kernel_files <<EOF
%{_bootdir}/System.map-%{kver_full}
%{_bootdir}/symvers-%{kver_full}.zst
%{_bootdir}/config-%{kver_full}
%{_bootdir}/vmlinuz-%{kver_full}
%ifarch %{armx}
%{_bootdir}/dtb-%{kver_full}
%endif
%{_modulesdir}/%{kver_full}/kernel
%if %{with binary_extra_modules}
# 8821ce.ko.debug will not be excluded and will be in the main debug subpackage
%exclude %{_modulesdir}/%{kver_full}/kernel/net/wireless/8821ce.ko%{kmod_suffix}
%if %{with binary_shredder}
%exclude %{_modulesdir}/%{kver_full}/kernel/extra/shredder-kernel.ko%{kmod_suffix}
%endif
%if %{with binary_virtualbox_host}
# vbox host modules may be built here (vboxnetflt vboxnetadp vboxdrv vboxpci)
# vbox guest modules are in the mainline kernel now (vboxvideo vboxguest vboxsf)
%exclude %{_modulesdir}/%{kver_full}/kernel/misc/vbox*.ko%{kmod_suffix}
%endif
%exclude %{_modulesdir}/%{kver_full}/kernel/net/xt_TRIPSO.ko%{kmod_suffix}
%exclude %{_modulesdir}/%{kver_full}/kernel/net/xt_so.ko%{kmod_suffix}
%if %{with nickel}
%exclude %{_modulesdir}/%{kver_full}/kernel/misc/nlkm.ko%{kmod_suffix}
%exclude %{_modulesdir}/%{kver_full}/kernel/misc/memfreetest.ko%{kmod_suffix}
%exclude %{_modulesdir}/%{kver_full}/kernel/misc/pcietest.ko%{kmod_suffix}
%endif
%endif #with binary_extra_modules
%{_modulesdir}/%{kver_full}/modules.*
EOF
%if %build_debug
cat ../kernel_exclude_debug_files.%{flavour} >> $kernel_files
%endif
# set extraversion to match srpm to get nice version reported by the tools # set extraversion to match srpm to get nice version reported by the tools
LC_ALL=C sed -ri "s/^EXTRAVERSION.*/EXTRAVERSION = -%{fullrpmrel}/" Makefile LC_ALL=C sed -ri "s/^EXTRAVERSION.*/EXTRAVERSION = -%{fullrpmrel}/" Makefile
@ -1602,6 +1470,14 @@ rm -f %{certs_verify_tmp}
find %{target_modules} -name "*.ko" | %kxargs %{zstd_cmd} --rm -T1 find %{target_modules} -name "*.ko" | %kxargs %{zstd_cmd} --rm -T1
%endif %endif
find %{buildroot}%{_modulesdir} -type f -name '*.ko%{kmod_suffix}' | sed -e 's,^%{buildroot},,' | sort -u >> %{kernel_files}
find %{buildroot}%{_modulesdir} -type d -name '*.ko%{kmod_suffix}' | sed -e 's,^%{buildroot},,' -e 's,^,%dir ,' | sort -u >> %{kernel_files}
%if %build_debug
install -m 644 vmlinux %{buildroot}%{_bootdir}/vmlinux-%{kver_full}
find %{buildroot}%{_modulesdir} -type f -name '*.debug' | sed -e 's,^%{buildroot},,' | sort -u >> %{debuginfo_files}
%endif # /build_debug
pushd %{target_modules} pushd %{target_modules}
for i in *; do for i in *; do
rm -f $i/build $i/source rm -f $i/build $i/source

View file

@ -6,7 +6,7 @@
# TODO: define it somewhere else... # TODO: define it somewhere else...
# TODO: avoid depending from %%flavour, %%buildrel etc ?! # TODO: avoid depending from %%flavour, %%buildrel etc ?!
# TODO: fail if needed macros are not defined # TODO: fail if needed macros are not defined
%ksob_kernel %{flavour}-%{buildrel} %ksob_kernel %{kernelversion}.%{patchlevel}-%{flavour}
# %%ksob_mk_module_pkg -n module name -s module section [ -r additional requires for this package ] # %%ksob_mk_module_pkg -n module name -s module section [ -r additional requires for this package ]
# Examples: # Examples:
@ -16,7 +16,6 @@
\ \
%define module_name %{-n:%{-n*}}%{!-n:%{error:Module name not defined!}} \ %define module_name %{-n:%{-n*}}%{!-n:%{error:Module name not defined!}} \
%define pkg_main kernel-module-%{module_name}-%{ksob_kernel} \ %define pkg_main kernel-module-%{module_name}-%{ksob_kernel} \
%define pkg_latest kernel-module-%{module_name}-%{flavour}-%{kernelversion}.%{patchlevel}-latest \
%define module_section %{-s:%{-s*}}%{!-s:%{error:Module section (e.g. extra) not defined!}} \ %define module_section %{-s:%{-s*}}%{!-s:%{error:Module section (e.g. extra) not defined!}} \
\ \
%{expand: \ %{expand: \
@ -24,9 +23,11 @@
# TODO: convert long kernel name to one macro \ # TODO: convert long kernel name to one macro \
Summary: Binary module %{module_name} for kernel-%{ksob_kernel} \ Summary: Binary module %{module_name} for kernel-%{ksob_kernel} \
Group: System/Kernel and hardware \ Group: System/Kernel and hardware \
Version: 1 \ \
Release: 1 \
%{-r:Requires: %{-r*}} \ %{-r:Requires: %{-r*}} \
Provides: installonlypkg(kernel-module) = %{EVRD}.module.%{module_name} \
Provides: kernel-module-%{module_name}-%{flavour}-%{kernelversion}.%{patchlevel}-latest = %{EVRD} \
Obsoletes: kernel-module-%{module_name}-%{flavour}-%{kernelversion}.%{patchlevel}-latest < 5.10.34-2 \
\ \
%description -n %{pkg_main} \ %description -n %{pkg_main} \
Binary module %{module_name} for kernel-%{ksob_kernel} \ Binary module %{module_name} for kernel-%{ksob_kernel} \
@ -35,17 +36,5 @@ Binary module %{module_name} for kernel-%{ksob_kernel} \
# XXX TODO: how to %%exclude these files from the main package automatically? \ # XXX TODO: how to %%exclude these files from the main package automatically? \
%{_modulesdir}/%{kver_full}/kernel/%{module_section}/%{module_name}.ko%{kmod_suffix} \ %{_modulesdir}/%{kver_full}/kernel/%{module_section}/%{module_name}.ko%{kmod_suffix} \
\ \
%package -n %{pkg_latest} \
Summary: Meta package for the latest binary module %{module_name} for the latest kernel-%{flavour} in %{kernelversion}.%{patchlevel} series \
Group: System/Kernel and hardware \
Version: %{kversion} \
Release: %{fullrpmrel} \
Requires: %{pkg_main} \
\
%description -n %{pkg_latest} \
Meta package for the latest binary module %{module_name} for the latest \
kernel-%{flavour} in %{kernelversion}.%{patchlevel} series \
# No files \
%files -n %{pkg_latest} \
%{nil} \ %{nil} \
} }