File Index
Files and directories
Sign in
FILE

kernel.spec

File preview with syntax highlighting.

linux-6.19.14/scripts/package/kernel.spec RPMSPEC
  1# _arch is undefined if /usr/lib/rpm/platform/*/macros was not included.
  2%{!?_arch: %define _arch dummy}
  3%{!?make: %define make make}
  4%define makeflags %{?_smp_mflags} ARCH=%{ARCH}
  5
  6Name: kernel
  7Summary: The Linux Kernel
  8Version: %(echo %{KERNELRELEASE} | sed -e 's/-/_/g')
  9Release: %{pkg_release}
 10License: GPL
 11Group: System Environment/Kernel
 12Vendor: The Linux Community
 13URL: https://www.kernel.org
 14Source0: linux.tar.gz
 15Source1: config
 16Source2: diff.patch
 17Provides: kernel-%{KERNELRELEASE}
 18BuildRequires: bc binutils bison dwarves
 19BuildRequires: (elfutils-devel or libdw-devel)
 20BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
 21BuildRequires: gcc make openssl openssl-devel perl python3 rsync
 22
 23%description
 24The Linux Kernel, the operating system core itself
 25
 26%package headers
 27Summary: Header files for the Linux kernel for use by glibc
 28Group: Development/System
 29Obsoletes: kernel-headers < %{version}
 30Provides: kernel-headers = %{version}
 31%description headers
 32Kernel-headers includes the C header files that specify the interface
 33between the Linux kernel and userspace libraries and programs.  The
 34header files define structures and constants that are needed for
 35building most standard programs and are also needed for rebuilding the
 36glibc package.
 37
 38%if %{with_devel}
 39%package devel
 40Summary: Development package for building kernel modules to match the %{version} kernel
 41Group: System Environment/Kernel
 42AutoReqProv: no
 43%description -n kernel-devel
 44This package provides kernel headers and makefiles sufficient to build modules
 45against the %{version} kernel package.
 46%endif
 47
 48%if %{with_debuginfo_manual}
 49%package debuginfo
 50Summary: Debug information package for the Linux kernel
 51Group: Development/Debug
 52AutoReq: 0
 53AutoProv: 1
 54%description debuginfo
 55This package provides debug information for the kernel image and modules from the
 56%{version} package.
 57%define install_mod_strip 1
 58%endif
 59
 60%if %{with_debuginfo_rpm}
 61# list of debuginfo-related options taken from distribution kernel.spec
 62# files
 63%undefine _include_minidebuginfo
 64%undefine _find_debuginfo_dwz_opts
 65%undefine _unique_build_ids
 66%undefine _unique_debug_names
 67%undefine _unique_debug_srcs
 68%undefine _debugsource_packages
 69%undefine _debuginfo_subpackages
 70%global _find_debuginfo_opts -r
 71%global _missing_build_ids_terminate_build 1
 72%global _no_recompute_build_ids 1
 73%{debug_package}
 74
 75# later, we make all modules executable so that find-debuginfo.sh strips
 76# them up. but they don't actually need to be executable, so remove the
 77# executable bit, taking care to do it _after_ find-debuginfo.sh has run
 78%define __spec_install_post \
 79	%{?__debug_package:%{__debug_install_post}} \
 80	%{__arch_install_post} \
 81	%{__os_install_post} \
 82	find %{buildroot}/lib/modules/%{KERNELRELEASE} -name "*.ko" -type f \\\
 83		| xargs --no-run-if-empty chmod u-x
 84%else
 85%define __spec_install_post /usr/lib/rpm/brp-compress || :
 86%endif
 87# some (but not all) versions of rpmbuild emit %%debug_package with
 88# %%install. since we've already emitted it manually, that would cause
 89# a package redefinition error. ensure that doesn't happen
 90%define debug_package %{nil}
 91
 92%prep
 93%setup -q -n linux
 94cp %{SOURCE1} .config
 95patch -p1 < %{SOURCE2}
 96
 97%build
 98%{make} %{makeflags} KERNELRELEASE=%{KERNELRELEASE} KBUILD_BUILD_VERSION=%{release}
 99
100%install
101mkdir -p %{buildroot}/lib/modules/%{KERNELRELEASE}
102cp $(%{make} %{makeflags} -s image_name) %{buildroot}/lib/modules/%{KERNELRELEASE}/vmlinuz
103# DEPMOD=true makes depmod no-op. We do not package depmod-generated files.
104%{make} %{makeflags} INSTALL_MOD_PATH=%{buildroot} %{?install_mod_strip:INSTALL_MOD_STRIP=1} DEPMOD=true modules_install
105%{make} %{makeflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
106cp System.map %{buildroot}/lib/modules/%{KERNELRELEASE}
107cp .config %{buildroot}/lib/modules/%{KERNELRELEASE}/config
108if %{make} %{makeflags} run-command KBUILD_RUN_COMMAND='test -d ${srctree}/arch/${SRCARCH}/boot/dts' 2>/dev/null; then
109	%{make} %{makeflags} INSTALL_DTBS_PATH=%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb dtbs_install
110fi
111ln -fns /usr/src/kernels/%{KERNELRELEASE} %{buildroot}/lib/modules/%{KERNELRELEASE}/build
112%if %{with_devel}
113%{make} %{makeflags} run-command KBUILD_RUN_COMMAND='${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
114%endif
115
116{
117	echo "/lib/modules/%{KERNELRELEASE}"
118
119	for x in alias alias.bin builtin.alias.bin builtin.bin dep dep.bin \
120				devname softdep symbols symbols.bin weakdep; do
121		echo "%ghost /lib/modules/%{KERNELRELEASE}/modules.${x}"
122	done
123
124	for x in System.map config vmlinuz; do
125		echo "%ghost /boot/${x}-%{KERNELRELEASE}"
126	done
127
128	if [ -d "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" ];then
129		find "%{buildroot}/lib/modules/%{KERNELRELEASE}/dtb" -printf "%%%ghost /boot/dtb-%{KERNELRELEASE}/%%P\n"
130	fi
131
132	echo "%exclude /lib/modules/%{KERNELRELEASE}/build"
133} > %{buildroot}/kernel.list
134
135%if 0%{with_debuginfo_manual}%{with_debuginfo_rpm} > 0
136# copying vmlinux directly to the debug directory means it will not get
137# stripped (but its source paths will still be collected + fixed up)
138mkdir -p %{buildroot}/usr/lib/debug/lib/modules/%{KERNELRELEASE}
139cp vmlinux %{buildroot}/usr/lib/debug/lib/modules/%{KERNELRELEASE}
140%endif
141
142%if %{with_debuginfo_rpm}
143# make modules executable so that find-debuginfo.sh strips them. this
144# will be undone later in %%__spec_install_post
145find %{buildroot}/lib/modules/%{KERNELRELEASE} -name "*.ko" -type f \
146	| xargs --no-run-if-empty chmod u+x
147%endif
148
149%if %{with_debuginfo_manual}
150echo /usr/lib/debug/lib/modules/%{KERNELRELEASE}/vmlinux > %{buildroot}/debuginfo.list
151while read -r mod; do
152	mod="${mod%.o}.ko"
153	dbg="%{buildroot}/usr/lib/debug/lib/modules/%{KERNELRELEASE}/kernel/${mod}"
154	buildid=$("${READELF:-readelf}" -n "${mod}" | sed -n 's@^.*Build ID: \(..\)\(.*\)@\1/\2@p')
155	link="%{buildroot}/usr/lib/debug/.build-id/${buildid}.debug"
156
157	mkdir -p "${dbg%/*}" "${link%/*}"
158	"${OBJCOPY:-objcopy}" --only-keep-debug "${mod}" "${dbg}"
159	ln -sf --relative "${dbg}" "${link}"
160
161	echo "${dbg#%{buildroot}}" >> %{buildroot}/debuginfo.list
162	echo "${link#%{buildroot}}" >> %{buildroot}/debuginfo.list
163done < modules.order
164%endif
165
166%clean
167rm -rf %{buildroot}
168%if %{with_debuginfo_rpm}
169rm -f debugfiles.list debuglinks.list debugsourcefiles.list debugsources.list \
170	elfbins.list
171%endif
172
173%post
174if [ -x /usr/bin/kernel-install ]; then
175	/usr/bin/kernel-install add %{KERNELRELEASE} /lib/modules/%{KERNELRELEASE}/vmlinuz
176fi
177for file in vmlinuz System.map config; do
178	if ! cmp --silent "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"; then
179		cp "/lib/modules/%{KERNELRELEASE}/${file}" "/boot/${file}-%{KERNELRELEASE}"
180	fi
181done
182if [ -d "/lib/modules/%{KERNELRELEASE}/dtb" ] && \
183   ! diff -rq "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}" >/dev/null 2>&1; then
184	rm -rf "/boot/dtb-%{KERNELRELEASE}"
185	cp -r "/lib/modules/%{KERNELRELEASE}/dtb" "/boot/dtb-%{KERNELRELEASE}"
186fi
187if [ ! -e "/lib/modules/%{KERNELRELEASE}/modules.dep" ]; then
188	/usr/sbin/depmod %{KERNELRELEASE}
189fi
190
191%preun
192if [ -x /usr/bin/kernel-install ]; then
193kernel-install remove %{KERNELRELEASE}
194fi
195
196%files -f %{buildroot}/kernel.list
197%defattr (-, root, root)
198%exclude /kernel.list
199
200%files headers
201%defattr (-, root, root)
202/usr/include
203
204%if %{with_devel}
205%files devel
206%defattr (-, root, root)
207/usr/src/kernels/%{KERNELRELEASE}
208/lib/modules/%{KERNELRELEASE}/build
209%endif
210
211%if %{with_debuginfo_manual}
212%files -f %{buildroot}/debuginfo.list debuginfo
213%defattr (-, root, root)
214%exclude /debuginfo.list
215%endif
~/ Read-only file preview.