%global KVERREL %{version}-%{release}.%{_target_cpu} # disable the '-debug{info,source}' pkgs %define debug_package %{nil} # also disable packaging files in '/usr/lib/.build-id/' %define _build_id_links none Name: kernel-%{kname}-tfg Summary: The Linux Kernel License: GPL URL: https://www.kernel.org Provides: kernel-%{kname}-tfg = %{KVERREL} BuildRequires: bc binutils bison dwarves BuildRequires: elfutils-libelf-devel flex BuildRequires: make openssl openssl-devel perl python3 rsync BuildRequires: clang lld llvm llvm-devel BuildRequires: opencsd-devel BuildRequires: kmod BuildRequires: /usr/bin/pathfix.py Requires: coreutils systemd dracut Requires: /usr/bin/kernel-install Requires: /usr/sbin/installkernel Requires: linux-firmware %ifarch aarch64 %global build_arch arm64 %global make_targets olddefconfig Image.gz modules dtbs %endif %ifarch riscv64 %global build_arch riscv64 %global make_targets olddefconfig Image.gz modules dtbs %endif %global make make -j$(( $(nproc) + 2 )) KERNELRELEASE=%{KVERREL} Source2: https://git.resf.org/thefossguy/kernel-tfg/archive/master.tar.gz Source3: config %description The Linux Kernel, the operating system core itself %package headers Summary: Header files for the Linux kernel for use by glibc Obsoletes: kernel-%{kname}-headers-tfg Provides: kernel-%{kname}-headers-tfg = %{KVERREL} %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 %package devel Summary: Development package for building kernel modules to match the kernel Provides: kernel-%{kname}-devel-tfg = %{KVERREL} AutoReqProv: no %description devel This package provides kernel headers and makefiles sufficient to build modules against the kernel package. %prep if [ -f ../SOURCES/linux-%{version}.tar.sign ]; then [ -f ../SOURCES/linux-%{version}.tar ] || gzip --decompress --keep %{SOURCE0} gpg2 --locate-keys torvalds@kernel.org gregkh@kernel.org gpg2 --verify %{SOURCE99} || exit 1 # not needed anymore, might as well delete it to make space for the # build and install phases rm -vf linux-%{version}.tar fi %setup -q -n %{src_dir} find ../../SOURCES -type f -name "patch-*.patch" -print0 | sort -z | xargs --no-run-if-empty -t -0 -n 1 patch -p1 -i # Mangle all Python shebangs to be Python 3 explicitly. # -i specifies the interpreter for the shebang # -n prevents creating ~backup files # -p preserves timestamps # This fixes errors such as # *** ERROR: ambiguous python shebang in /usr/bin/kvm_stat: #!/usr/bin/python. Change it to python3 (or python2) explicitly. # Process all files in the Documentation, scripts and tools directories. pathfix.py -i "%{__python3} %{py3_shbang_opts}" -n -p \ tools/kvm/kvm_stat/kvm_stat \ scripts/show_delta \ scripts/jobserver-exec \ scripts/diffconfig \ scripts/clang-tools \ scripts/bloat-o-meter \ tools \ scripts \ Documentation \ drivers >/dev/null 2>&1 export LLVM=1 AR=llvm-ar CC=clang HOSTAR=llvm-ar HOSTCC=clang HOSTCXX=clang++ HOSTLD=ld.lld LD=ld.lld NM=llvm-nm OBJCOPY=llvm-objcopy OBJDUMP=llvm-objdump READELF=llvm-readelf STRIP=llvm-strip [ -f .config ] && rm -vf .config* %{make} distclean cp %{SOURCE3} .config tar -xf %{SOURCE2} -C . cp -vr kernel-tfg/{configure-linux.sh,extra-configs} . rm -rf kernel-tfg/ ./configure-linux.sh %if "%{name}" == "*opi5*" sed -i 's@KBUILD_IMAGE := $(boot)/Image.gz@KBUILD_IMAGE := $(boot)/Image@' arch/arm64/Makefile %global make_targets olddefconfig Image modules dtbs %endif %build %{make} PYTHON=%{__python3} %{make_targets} %install rm -rf %{buildroot} mkdir -p %{buildroot} # install the kernel mkdir -p %{buildroot}/boot cp $(%{make} -s image_name) %{buildroot}/boot/vmlinuz-%{KVERREL} chmod 755 %{buildroot}/boot/vmlinuz-%{KVERREL} # install DTBs %ifarch aarch64 || riscv64 %{make} INSTALL_DTBS_PATH=%{buildroot}/boot/dtb-%{KVERREL} dtbs_install # delete "arch/%{build_arch}/boot/dts" because "$PWD" will be packaged in "%devel" find arch/%{build_arch}/boot/dts -name '*.dtb' -type f -delete %endif # install modules # '$(mod-fw)' is overridden because there is no reason to install any firmware # since we already have 'linux-firmware' package as the dependency of this package. %{make} INSTALL_MOD_STRIP=1 INSTALL_MOD_PATH=%{buildroot} mod-fw= modules_install # install headers %{make} INSTALL_HDR_PATH=%{buildroot}/usr headers_install # install other key files too install -m 644 .config %{buildroot}/boot/config-%{KVERREL} install -m 644 .config %{buildroot}/lib/modules/%{KVERREL}/config install -m 644 System.map %{buildroot}/boot/System.map-%{KVERREL} install -m 644 System.map %{buildroot}/lib/modules/%{KVERREL}/System.map # fix links rm -rf %{buildroot}/lib/modules/%{KVERREL}/build rm -rf %{buildroot}/lib/modules/%{KVERREL}/source ln -fns /usr/src/kernels/%{KVERREL} %{buildroot}/lib/modules/%{KVERREL}/build ln -fns /usr/src/kernels/%{KVERREL} %{buildroot}/lib/modules/%{KVERREL}/source # install actual Linux src to /usr/src/kernels/%{KVERREL} mkdir -p %{buildroot}/usr/src/kernels/%{KVERREL} if [ -f scripts/package/install-extmod-build ]; then %{make} run-command KBUILD_RUN_COMMAND='%{_builddir}/%{src_dir}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KVERREL}' else touch %{buildroot}/usr/src/kernels/%{KVERREL}/MAYBE_THIS_WORKS fi %clean rm -rf %{buildroot} %post set -xeuf -o pipefail if [ -x /sbin/installkernel -a -r /boot/vmlinuz-%{KVERREL} -a -r /boot/System.map-%{KVERREL} ]; then cp /boot/vmlinuz-%{KVERREL} /boot/.vmlinuz-%{KVERREL}-rpm cp /boot/System.map-%{KVERREL} /boot/.System.map-%{KVERREL}-rpm rm -f /boot/vmlinuz-%{KVERREL} /boot/System.map-%{KVERREL} /sbin/installkernel %{KVERREL} /boot/.vmlinuz-%{KVERREL}-rpm /boot/.System.map-%{KVERREL}-rpm rm -f /boot/.vmlinuz-%{KVERREL}-rpm /boot/.System.map-%{KVERREL}-rpm fi # we pushd into /boot because we want our symlinks to be # vmlinuz -> vmlinuz-6.6.0-20231004.6.el9.aarch64 # and not # vmlinuz -> /boot/vmlinuz-6.6.0-20231004.6.el9.aarch64 pushd /boot rm -rvf dtb initramfs.img System.map vmlinuz ln -s dtb-%{KVERREL} dtb ln -s initramfs-%{KVERREL}.img initramfs.img ln -s System.map-%{KVERREL} System.map ln -s vmlinuz-%{KVERREL} vmlinuz popd %preun # remove symlinks rm -vf /boot/initramfs.img rm -vf /boot/System.map rm -vf /boot/vmlinuz if [ -x /sbin/new-kernel-pkg ]; then new-kernel-pkg --remove %{KVERREL} --rminitrd --initrdfile=/boot/initramfs-%{KVERREL}.img elif [ -x /usr/bin/kernel-install ]; then kernel-install remove %{KVERREL} fi %postun if [ -x /sbin/update-bootloader ]; then /sbin/update-bootloader --remove %{KVERREL} fi [ -d /boot/dtb ] && rm -rf /boot/dtb %files headers %defattr (-, root, root) /usr/include %files devel %defattr (-, root, root) /usr/src/kernels/%{KVERREL} /lib/modules/%{KVERREL}/build /lib/modules/%{KVERREL}/source %files %defattr (-, root, root) %exclude /lib/modules/%{KVERREL}/build %exclude /lib/modules/%{KVERREL}/source /lib/modules/%{KVERREL} /boot/*