commit b756208efc655b037b76ae61b3e43e5489f53866 Author: Pratham Patel Date: Tue Sep 12 16:49:32 2023 +0530 init commit diff --git a/configure-linux.sh b/configure-linux.sh new file mode 100644 index 0000000..d28fa9d --- /dev/null +++ b/configure-linux.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +set -xeu + +export EXTRA_LINUX_MODULES=() +export EXTRA_LINUX_BUILTIN=() +EXTRA_LINUX_CONFIG=() + +for FILE in ./extra-configs/*.sh; do + source "${FILE}" +done + +if [[ "${EXTRA_LINUX_MODULES[*]}" != "" ]]; then + for CONFIG_MODULE in "${EXTRA_LINUX_MODULES[@]}"; do + EXTRA_LINUX_CONFIG+=("${CONFIG_MODULE}"'=m') + done +fi + +if [[ "${EXTRA_LINUX_BUILTIN[*]}" != "" ]]; then + for CONFIG_BUILTIN in "${EXTRA_LINUX_BUILTIN[@]}"; do + EXTRA_LINUX_CONFIG+=("${CONFIG_BUILTIN}"'=y') + done +fi + +function verify_config { + [[ "${EXTRA_LINUX_CONFIG[*]}" == "" ]] && >&2 echo '**** WARNING: List of extra config options to check is empty, doing nothing.' + + if [[ ! -f .config ]]; then + >&2 echo '**** ERROR: The config file could not be found.' + exit 1 + fi + + for CONFIG_OPTION in "${EXTRA_LINUX_CONFIG[@]}"; do + if ! grep "${CONFIG_OPTION}" .config 2>&1 /dev/null; then + >&2 echo "**** ERROR: Config option '${CONFIG_OPTION}' not found in the config file." + exit 1 + fi + done +} diff --git a/extra-configs/r8169.sh b/extra-configs/r8169.sh new file mode 100644 index 0000000..1ff93d3 --- /dev/null +++ b/extra-configs/r8169.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +EXTRA_LINUX_MODULES+=('CONFIG_R8169') +# Q: What requires this option to be enabled? +# A: Enabling this option adds support for the Realtek RTL8125 2.5GbE Controller +# that is present on the Radxa Rock 5 Model B SBC, connected via the PCIe bus. +# ```sh +# $ sudo lspci -k +# 0004:01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05) +# Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller +# Kernel driver in use: r8169 +# Kernel modules: r8169 +# ``` +# +# Q: Why wasn't this option enabled by `make defconfig`? +# A: There are two reasons for this: +# 1. None of the symbols that are enabled by the defconfig (built-in or +# otherwise)--that are needed by CONFIG_R8169--"select" this option. The +# dependencies are already enabled (built-in or otherwise). So all that +# needs to be done is to enable this tristate module as a **loadable module**. +# 2. Since this Ethernet controller is connected via the PCIe bus and is not +# the Ethernet PHY offered by the RK3588 SoC itself, it is not selected +# by 'CONFIG_ARCH_ROCKCHIP' either. diff --git a/kernel-collabora-tfg.spec b/kernel-collabora-tfg.spec new file mode 100644 index 0000000..19670f7 --- /dev/null +++ b/kernel-collabora-tfg.spec @@ -0,0 +1,15 @@ +# change version here +%global fake_ver 1 +%global rel_ver 0 +%global commit_id b034abfca55f329be85c37a84768775c60f52885 +%global short_commit_id b034abfc + +Name: kernel-collabora-tfg +Version: %{fake_ver}.%{short_commit_id} +Release: %{rel_ver}%{?dist} + +Source0: https://gitlab.collabora.com/hardware-enablement/rockchip-3588/linux/-/archive/%{commit_id}.tar.gz +Source1: master.inc + +%global src_dir linux-%{commit_id} +%include %{SOURCE1} diff --git a/kernel-lts-tfg.spec b/kernel-lts-tfg.spec new file mode 100644 index 0000000..1489c9c --- /dev/null +++ b/kernel-lts-tfg.spec @@ -0,0 +1,18 @@ +# change version here +%global rel_ver 0 +%global major_ver 6 +%global minor_ver 1 +%global patch_ver 52 +%global lts_flag 1 + +Name: kernel-lts-tfg +Version: %{major_ver}.%{minor_ver}.%{patch_ver} +Release: %{rel_ver}%{?dist} +BuildRequires: gnupg2 + +Source0: https://cdn.kernel.org/pub/linux/kernel/v%{major_ver}.x/linux-%{version}.tar.gz +Source1: master.inc +Source99: https://cdn.kernel.org/pub/linux/kernel/v%{major_ver}.x/linux-%{version}.tar.sign + +%global src_dir linux-%{version} +%include %{SOURCE1} diff --git a/kernel-next-tfg.spec b/kernel-next-tfg.spec new file mode 100644 index 0000000..131bddd --- /dev/null +++ b/kernel-next-tfg.spec @@ -0,0 +1,13 @@ +# change version here +%global rel_ver 0 +%global next_snapshot_date 20230911 + +Name: kernel-next-tfg +Version: %{next_snapshot_date} +Release: %{rel_ver}%{?dist} + +Source0: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/snapshot/linux-next-next-%{next_snapshot_date}.tar.gz +Source1: master.inc + +%global src_dir linux-next-next-%{next_snapshot_date} +%include %{SOURCE1} diff --git a/kernel-rc-tfg.spec b/kernel-rc-tfg.spec new file mode 100644 index 0000000..330b78f --- /dev/null +++ b/kernel-rc-tfg.spec @@ -0,0 +1,15 @@ +# change version here +%global rel_ver 0 +%global major_ver 6 +%global minor_ver 6 +%global rc_ver 1 + +Name: kernel-rc-tfg +Version: %{major_ver}.%{minor_ver}.0 +Release: rc%{rc_ver}.%{rel_ver}%{?dist} + +Source0: https://git.kernel.org/torvalds/t/linux-%{major_ver}.%{minor_ver}-rc%{rc_ver}.tar.gz +Source1: master.inc + +%global src_dir linux-%{major_ver}.%{minor_ver}-rc%{rc_ver} +%include %{SOURCE1} diff --git a/kernel-stable-tfg.spec b/kernel-stable-tfg.spec new file mode 100644 index 0000000..542d7e4 --- /dev/null +++ b/kernel-stable-tfg.spec @@ -0,0 +1,17 @@ +# change version here +%global rel_ver 0 +%global major_ver 6 +%global minor_ver 5 +%global patch_ver 2 + +Name: kernel-stable-tfg +Version: %{major_ver}.%{minor_ver}.%{patch_ver} +Release: %{rel_ver}%{?dist} +BuildRequires: gnupg2 + +Source0: https://cdn.kernel.org/pub/linux/kernel/v%{major_ver}.x/linux-%{version}.tar.gz +Source1: master.inc +Source99: https://cdn.kernel.org/pub/linux/kernel/v%{major_ver}.x/linux-%{version}.tar.sign + +%global src_dir linux-%{version} +%include %{SOURCE1} diff --git a/master.inc b/master.inc new file mode 100644 index 0000000..1c2789d --- /dev/null +++ b/master.inc @@ -0,0 +1,184 @@ +%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 + +Summary: The Linux Kernel +License: GPL +URL: https://www.kernel.org +Provides: %{name}-%{KVERREL} +BuildRequires: bc binutils bison dwarves +BuildRequires: (elfutils-libelf-devel or libelf-devel) flex +BuildRequires: gcc make openssl openssl-devel perl python3 rsync +BuildRequires: opencsd-devel +BuildRequires: kmod +BuildRequires: python3-devel +Requires: coreutils systemd dracut +Requires: /usr/bin/kernel-install +Requires: linux-firmware + +%ifarch aarch64 +%global build_arch arm64 +%global make_targets Image.gz modules dtbs +%endif + +%ifarch riscv64 +%global build_arch riscv64 +%global make_targets Image.gz modules dtbs +%endif + +%global kernel_image $(make -s image_name) +%global make make KERNELRELEASE=%{KVERREL} + +Source2: https://git.thefossguy.com/enterprise-linux/kernel-tfg/archive/master.tar.gz + +%description +The Linux Kernel, the operating system core itself + +%package headers +Summary: Header files for the Linux kernel for use by glibc +%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 +%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 + 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} + +# 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 + +tar -xf %{SOURCE2} -C . +cp -vr kernel-tfg/{configure-linux.sh,extra-configs} . +rm -rf kernel-tfg/ + +source ./configure-linux.sh + +[ -f .config ] && rm -vf .config* +%{make} distclean + +%{make} "${EXTRA_LINUX_CONFIG[@]}" defconfig +verify_config + +%build +source ./configure-linux.sh +%{make} %{?_smp_mflags} PYTHON=%{__python3} %{make_targets} +verify_config + +%install +rm -rf $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT + +mkdir -p $RPM_BUILD_ROOT/boot +mkdir -p $RPM_BUILD_ROOT%{_libexecdir} +mkdir -p $RPM_BUILD_ROOT/lib/modules/%{KVERREL} +mkdir -p $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/systemtap + +# install DTBs +%ifarch aarch64 || riscv64 +%{make} %{?_smp_mflags} dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/boot/dtb-%{KVERREL} +cp -r $RPM_BUILD_ROOT/boot/dtb-%{KVERREL} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/dtb +find arch/%{build_arch}/boot/dts -name '*.dtb' -type f -delete +%endif + +# install modules +# Disable depmod with by passing '/doesnt/exist' to the DEPMOD environment variable. +# '$(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} %{?_smp_mflags} modules_install INSTALL_MOD_PATH=$RPM_BUILD_ROOT DEPMOD=/doesnt/exist mod-fw= + +# install headers +%{make} %{?_smp_mflags} headers_install INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr + +# install other key files too +cp System.map $RPM_BUILD_ROOT/boot/System.map-%{KVERREL} +cp .config $RPM_BUILD_ROOT/boot/config-%{KVERREL} + +# install the kernel +cp %{kernel_image} $RPM_BUILD_ROOT/boot/vmlinuz-%{KVERREL} +chmod 755 $RPM_BUILD_ROOT/boot/vmlinuz-%{KVERREL} +cp $RPM_BUILD_ROOT/boot/vmlinuz-%{KVERREL} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/vmlinuz + +# cleanup of sorts +EXCLUDES="--exclude=SCCS --exclude=BitKeeper --exclude=.svn \ + --exclude=CVS --exclude=.pc --exclude=.hg --exclude=.git \ + --exclude=*vmlinux* --exclude=*.mod \ + --exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation \ + --exclude=.config.old --exclude=.missing-syscalls.d --exclude=*.s" +rm -rf $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/build +rm -rf $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/source +mkdir -p $RPM_BUILD_ROOT/usr/src/kernels/%{KVERREL} +tar cf - $EXCLUDES . | tar xf - -C $RPM_BUILD_ROOT/usr/src/kernels/%{KVERREL} +cd $RPM_BUILD_ROOT/lib/modules/%{KVERREL} +ln -fns /usr/src/kernels/%{KVERREL} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/build +ln -fns /usr/src/kernels/%{KVERREL} $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/source + +%clean +rm -rf $RPM_BUILD_ROOT + +%post +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 + +%preun +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 + +%files +%defattr (-, root, root) +/boot +/lib/modules/%{KVERREL} + +%files headers +/usr/include + +%files devel +/usr/src/kernels/%{KVERREL}