2023-07-22 12:48:02 +08:00
|
|
|
# _arch is undefined if /usr/lib/rpm/platform/*/macros was not included.
|
|
|
|
%{!?_arch: %define _arch dummy}
|
|
|
|
%{!?make: %define make make}
|
|
|
|
%define makeflags %{?_smp_mflags} ARCH=%{ARCH}
|
|
|
|
%define __spec_install_post /usr/lib/rpm/brp-compress || :
|
|
|
|
%define debug_package %{nil}
|
|
|
|
|
|
|
|
Name: kernel
|
|
|
|
Summary: The Linux Kernel
|
|
|
|
Version: %(echo %{KERNELRELEASE} | sed -e 's/-/_/g')
|
|
|
|
Release: %{pkg_release}
|
|
|
|
License: GPL
|
|
|
|
Group: System Environment/Kernel
|
|
|
|
Vendor: The Linux Community
|
|
|
|
URL: https://www.kernel.org
|
|
|
|
Source0: linux.tar.gz
|
|
|
|
Source1: config
|
|
|
|
Source2: diff.patch
|
|
|
|
Provides: kernel-%{KERNELRELEASE}
|
|
|
|
BuildRequires: bc binutils bison dwarves
|
|
|
|
BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
|
|
|
|
BuildRequires: gcc make openssl openssl-devel perl python3 rsync
|
|
|
|
|
|
|
|
%description
|
|
|
|
The Linux Kernel, the operating system core itself
|
|
|
|
|
|
|
|
%package headers
|
|
|
|
Summary: Header files for the Linux kernel for use by glibc
|
|
|
|
Group: Development/System
|
2024-06-12 05:11:21 +08:00
|
|
|
Obsoletes: kernel-headers < %{version}
|
2023-07-22 12:48:02 +08:00
|
|
|
Provides: kernel-headers = %{version}
|
|
|
|
%description headers
|
|
|
|
Kernel-headers includes the C header files that specify the interface
|
|
|
|
between the Linux kernel and userspace libraries and programs. The
|
|
|
|
header files define structures and constants that are needed for
|
|
|
|
building most standard programs and are also needed for rebuilding the
|
|
|
|
glibc package.
|
|
|
|
|
|
|
|
%if %{with_devel}
|
|
|
|
%package devel
|
|
|
|
Summary: Development package for building kernel modules to match the %{version} kernel
|
|
|
|
Group: System Environment/Kernel
|
|
|
|
AutoReqProv: no
|
|
|
|
%description -n kernel-devel
|
|
|
|
This package provides kernel headers and makefiles sufficient to build modules
|
|
|
|
against the %{version} kernel package.
|
|
|
|
%endif
|
|
|
|
|
|
|
|
%prep
|
|
|
|
%setup -q -n linux
|
|
|
|
cp %{SOURCE1} .config
|
|
|
|
patch -p1 < %{SOURCE2}
|
|
|
|
|
|
|
|
%build
|
|
|
|
%{make} %{makeflags} KERNELRELEASE=%{KERNELRELEASE} KBUILD_BUILD_VERSION=%{release}
|
|
|
|
|
|
|
|
%install
|
kbuild: rpm-pkg: simplify installkernel %post
The new installkernel application that is now included in systemd-udev
package allows installation although destination files are already present
in the boot directory of the kernel package, but is failing with the
implemented workaround for the old installkernel application from grubby
package.
For the new installkernel application, as Davide says:
<<The %post currently does a shuffling dance before calling installkernel.
This isn't actually necessary afaict, and the current implementation
ends up triggering downstream issues such as
https://github.com/systemd/systemd/issues/29568
This commit simplifies the logic to remove the shuffling. For reference,
the original logic was added in commit 3c9c7a14b627("rpm-pkg: add %post
section to create initramfs and grub hooks").>>
But we need to keep the old behavior as well, because the old installkernel
application from grubby package, does not allow this simplification and
we need to be backward compatible to avoid issues with the different
packages.
Mimic Fedora shipping process and store vmlinuz, config amd System.map
in the module directory instead of the boot directory. In this way, we will
avoid the commented problem for all the cases, because the new destination
files are not going to exist in the boot directory of the kernel package.
Replace installkernel tool with kernel-install tool, because the latter is
more complete.
Besides, after installkernel tool execution, check to complete if the
correct package files vmlinuz, System.map and config files are present
in /boot directory, and if necessary, copy manually for install operation.
In this way, take into account if files were not previously copied from
/usr/lib/kernel/install.d/* scripts and if the suitable files for the
requested package are present (it could be others if the rpm files were
replace with a new pacakge with the same release and a different build).
Tested with Fedora 38, Fedora 39, RHEL 9, Oracle Linux 9.3,
openSUSE Tumbleweed and openMandrive ROME, using dnf/zypper and rpm tools.
cc: stable@vger.kernel.org
Co-Developed-by: Davide Cavalca <dcavalca@meta.com>
Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
2024-01-29 17:28:19 +08:00
|
|
|
mkdir -p %{buildroot}/lib/modules/%{KERNELRELEASE}
|
|
|
|
cp $(%{make} %{makeflags} -s image_name) %{buildroot}/lib/modules/%{KERNELRELEASE}/vmlinuz
|
2024-06-18 19:08:43 +08:00
|
|
|
# DEPMOD=true makes depmod no-op. We do not package depmod-generated files.
|
|
|
|
%{make} %{makeflags} INSTALL_MOD_PATH=%{buildroot} DEPMOD=true modules_install
|
2023-07-22 12:48:02 +08:00
|
|
|
%{make} %{makeflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
|
kbuild: rpm-pkg: simplify installkernel %post
The new installkernel application that is now included in systemd-udev
package allows installation although destination files are already present
in the boot directory of the kernel package, but is failing with the
implemented workaround for the old installkernel application from grubby
package.
For the new installkernel application, as Davide says:
<<The %post currently does a shuffling dance before calling installkernel.
This isn't actually necessary afaict, and the current implementation
ends up triggering downstream issues such as
https://github.com/systemd/systemd/issues/29568
This commit simplifies the logic to remove the shuffling. For reference,
the original logic was added in commit 3c9c7a14b627("rpm-pkg: add %post
section to create initramfs and grub hooks").>>
But we need to keep the old behavior as well, because the old installkernel
application from grubby package, does not allow this simplification and
we need to be backward compatible to avoid issues with the different
packages.
Mimic Fedora shipping process and store vmlinuz, config amd System.map
in the module directory instead of the boot directory. In this way, we will
avoid the commented problem for all the cases, because the new destination
files are not going to exist in the boot directory of the kernel package.
Replace installkernel tool with kernel-install tool, because the latter is
more complete.
Besides, after installkernel tool execution, check to complete if the
correct package files vmlinuz, System.map and config files are present
in /boot directory, and if necessary, copy manually for install operation.
In this way, take into account if files were not previously copied from
/usr/lib/kernel/install.d/* scripts and if the suitable files for the
requested package are present (it could be others if the rpm files were
replace with a new pacakge with the same release and a different build).
Tested with Fedora 38, Fedora 39, RHEL 9, Oracle Linux 9.3,
openSUSE Tumbleweed and openMandrive ROME, using dnf/zypper and rpm tools.
cc: stable@vger.kernel.org
Co-Developed-by: Davide Cavalca <dcavalca@meta.com>
Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
2024-01-29 17:28:19 +08:00
|
|
|
cp System.map %{buildroot}/lib/modules/%{KERNELRELEASE}
|
|
|
|
cp .config %{buildroot}/lib/modules/%{KERNELRELEASE}/config
|
2024-03-12 00:22:38 +08:00
|
|
|
if %{make} %{makeflags} run-command KBUILD_RUN_COMMAND='test -d ${srctree}/arch/${SRCARCH}/boot/dts' 2>/dev/null; then
|
|
|
|
%{make} %{makeflags} INSTALL_DTBS_PATH=%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb dtbs_install
|
|
|
|
fi
|
2023-07-22 12:48:02 +08:00
|
|
|
ln -fns /usr/src/kernels/%{KERNELRELEASE} %{buildroot}/lib/modules/%{KERNELRELEASE}/build
|
|
|
|
%if %{with_devel}
|
|
|
|
%{make} %{makeflags} run-command KBUILD_RUN_COMMAND='${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
|
|
|
|
%endif
|
|
|
|
|
2024-02-02 21:35:17 +08:00
|
|
|
{
|
2024-06-18 19:08:43 +08:00
|
|
|
echo "/lib/modules/%{KERNELRELEASE}"
|
2024-02-02 21:35:17 +08:00
|
|
|
|
|
|
|
for x in alias alias.bin builtin.alias.bin builtin.bin dep dep.bin \
|
2024-07-26 17:00:26 +08:00
|
|
|
devname softdep symbols symbols.bin weakdep; do
|
2024-02-02 21:35:17 +08:00
|
|
|
echo "%ghost /lib/modules/%{KERNELRELEASE}/modules.${x}"
|
|
|
|
done
|
|
|
|
|
2024-02-02 21:35:18 +08:00
|
|
|
for x in System.map config vmlinuz; do
|
|
|
|
echo "%ghost /boot/${x}-%{KERNELRELEASE}"
|
|
|
|
done
|
|
|
|
|
2024-03-12 00:22:38 +08:00
|
|
|
if [ -d "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" ];then
|
|
|
|
find "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" -printf "%%%ghost /boot/dtb-%{KERNELRELEASE}/%%P\n"
|
|
|
|
fi
|
|
|
|
|
2024-02-02 21:35:17 +08:00
|
|
|
echo "%exclude /lib/modules/%{KERNELRELEASE}/build"
|
|
|
|
} > %{buildroot}/kernel.list
|
|
|
|
|
2023-07-22 12:48:02 +08:00
|
|
|
%clean
|
|
|
|
rm -rf %{buildroot}
|
|
|
|
|
|
|
|
%post
|
kbuild: rpm-pkg: simplify installkernel %post
The new installkernel application that is now included in systemd-udev
package allows installation although destination files are already present
in the boot directory of the kernel package, but is failing with the
implemented workaround for the old installkernel application from grubby
package.
For the new installkernel application, as Davide says:
<<The %post currently does a shuffling dance before calling installkernel.
This isn't actually necessary afaict, and the current implementation
ends up triggering downstream issues such as
https://github.com/systemd/systemd/issues/29568
This commit simplifies the logic to remove the shuffling. For reference,
the original logic was added in commit 3c9c7a14b627("rpm-pkg: add %post
section to create initramfs and grub hooks").>>
But we need to keep the old behavior as well, because the old installkernel
application from grubby package, does not allow this simplification and
we need to be backward compatible to avoid issues with the different
packages.
Mimic Fedora shipping process and store vmlinuz, config amd System.map
in the module directory instead of the boot directory. In this way, we will
avoid the commented problem for all the cases, because the new destination
files are not going to exist in the boot directory of the kernel package.
Replace installkernel tool with kernel-install tool, because the latter is
more complete.
Besides, after installkernel tool execution, check to complete if the
correct package files vmlinuz, System.map and config files are present
in /boot directory, and if necessary, copy manually for install operation.
In this way, take into account if files were not previously copied from
/usr/lib/kernel/install.d/* scripts and if the suitable files for the
requested package are present (it could be others if the rpm files were
replace with a new pacakge with the same release and a different build).
Tested with Fedora 38, Fedora 39, RHEL 9, Oracle Linux 9.3,
openSUSE Tumbleweed and openMandrive ROME, using dnf/zypper and rpm tools.
cc: stable@vger.kernel.org
Co-Developed-by: Davide Cavalca <dcavalca@meta.com>
Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
2024-01-29 17:28:19 +08:00
|
|
|
if [ -x /usr/bin/kernel-install ]; then
|
|
|
|
/usr/bin/kernel-install add %{KERNELRELEASE} /lib/modules/%{KERNELRELEASE}/vmlinuz
|
2023-07-22 12:48:02 +08:00
|
|
|
fi
|
kbuild: rpm-pkg: simplify installkernel %post
The new installkernel application that is now included in systemd-udev
package allows installation although destination files are already present
in the boot directory of the kernel package, but is failing with the
implemented workaround for the old installkernel application from grubby
package.
For the new installkernel application, as Davide says:
<<The %post currently does a shuffling dance before calling installkernel.
This isn't actually necessary afaict, and the current implementation
ends up triggering downstream issues such as
https://github.com/systemd/systemd/issues/29568
This commit simplifies the logic to remove the shuffling. For reference,
the original logic was added in commit 3c9c7a14b627("rpm-pkg: add %post
section to create initramfs and grub hooks").>>
But we need to keep the old behavior as well, because the old installkernel
application from grubby package, does not allow this simplification and
we need to be backward compatible to avoid issues with the different
packages.
Mimic Fedora shipping process and store vmlinuz, config amd System.map
in the module directory instead of the boot directory. In this way, we will
avoid the commented problem for all the cases, because the new destination
files are not going to exist in the boot directory of the kernel package.
Replace installkernel tool with kernel-install tool, because the latter is
more complete.
Besides, after installkernel tool execution, check to complete if the
correct package files vmlinuz, System.map and config files are present
in /boot directory, and if necessary, copy manually for install operation.
In this way, take into account if files were not previously copied from
/usr/lib/kernel/install.d/* scripts and if the suitable files for the
requested package are present (it could be others if the rpm files were
replace with a new pacakge with the same release and a different build).
Tested with Fedora 38, Fedora 39, RHEL 9, Oracle Linux 9.3,
openSUSE Tumbleweed and openMandrive ROME, using dnf/zypper and rpm tools.
cc: stable@vger.kernel.org
Co-Developed-by: Davide Cavalca <dcavalca@meta.com>
Signed-off-by: Jose Ignacio Tornos Martinez <jtornosm@redhat.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
2024-01-29 17:28:19 +08:00
|
|
|
for file in vmlinuz System.map config; do
|
|
|
|
if ! cmp --silent "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"; then
|
|
|
|
cp "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"
|
|
|
|
fi
|
|
|
|
done
|
2024-03-12 00:22:38 +08:00
|
|
|
if [ -d "/lib/modules/%{KERNELRELEASE}/dtb" ] && \
|
|
|
|
! diff -rq "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}" >/dev/null 2>&1; then
|
|
|
|
rm -rf "/boot/dtb-%{KERNELRELEASE}"
|
|
|
|
cp -r "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}"
|
|
|
|
fi
|
2024-02-02 21:35:17 +08:00
|
|
|
if [ ! -e "/lib/modules/%{KERNELRELEASE}/modules.dep" ]; then
|
|
|
|
/usr/sbin/depmod %{KERNELRELEASE}
|
|
|
|
fi
|
2023-07-22 12:48:02 +08:00
|
|
|
|
|
|
|
%preun
|
2024-02-02 21:35:20 +08:00
|
|
|
if [ -x /usr/bin/kernel-install ]; then
|
2023-07-22 12:48:02 +08:00
|
|
|
kernel-install remove %{KERNELRELEASE}
|
|
|
|
fi
|
|
|
|
|
2024-02-02 21:35:17 +08:00
|
|
|
%files -f %{buildroot}/kernel.list
|
2023-07-22 12:48:02 +08:00
|
|
|
%defattr (-, root, root)
|
2024-02-02 21:35:17 +08:00
|
|
|
%exclude /kernel.list
|
2023-07-22 12:48:02 +08:00
|
|
|
|
|
|
|
%files headers
|
|
|
|
%defattr (-, root, root)
|
|
|
|
/usr/include
|
|
|
|
|
|
|
|
%if %{with_devel}
|
|
|
|
%files devel
|
|
|
|
%defattr (-, root, root)
|
|
|
|
/usr/src/kernels/%{KERNELRELEASE}
|
|
|
|
/lib/modules/%{KERNELRELEASE}/build
|
|
|
|
%endif
|