]> git.ipfire.org Git - people/stevee/ipfire-3.x.git/blame - kernel/kernel.nm
kernel: Cryptographically sign all kernel modules
[people/stevee/ipfire-3.x.git] / kernel / kernel.nm
CommitLineData
166a6c21 1###############################################################################
802ea3af
MT
2# IPFire.org - An Open Source Firewall Solution #
3# Copyright (C) - IPFire Development Team <info@ipfire.org> #
166a6c21
MT
4###############################################################################
5
15a11c5b 6name = kernel
d8d7d102 7version = 6.0.6
04859b28 8release = 0.6
15a11c5b 9thisapp = linux-%{version}
166a6c21 10
81bb0557 11maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
802ea3af
MT
12groups = System/Kernels
13url = http://www.kernel.org/
14license = GPLv2
15summary = The Linux kernel.
166a6c21 16
802ea3af 17description
4c928ab7
MT
18 The kernel package contains the Linux kernel (vmlinuz), the core of any
19 Linux operating system. The kernel handles the basic functions
20 of the operating system: memory allocation, process allocation, device
166a6c21 21 input and output, etc.
802ea3af 22end
166a6c21 23
802ea3af 24# Version helper variables.
bcf38aec
MT
25localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH}
26fullver = %{version}-%{localversion}
802ea3af 27
d8d7d102 28source_dl = https://www.kernel.org/pub/linux/kernel/v6.x/
fe014038 29sources = %{thisapp}.tar.xz
802ea3af
MT
30
31build
6b6a8ff6
MT
32 kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
33
802ea3af 34 requires
662414a4 35 asciidoc
7f6f4de5 36 bc
849a0073 37 binutils >= 2.25
bcf38aec 38 binutils-devel
c6e2a6c8 39 bison
bcf38aec 40 elfutils-devel
c6e2a6c8 41 flex
0f52a9b7 42 gcc >= 8
fe2de317 43 gcc-plugin-devel
6e9df6a3 44 gettext
849a0073 45 hostname
81bb0557 46 libunwind-devel
802ea3af 47 ncurses-devel
ebeed08a 48 net-tools
7c69f2c2 49 newt-devel
04859b28 50 openssl
7c69f2c2 51 pciutils-devel
802ea3af 52 perl
e42c2c0b 53 python3
bcf38aec 54 python-devel
1b1a9c16 55 rsync
849a0073 56 openssl-devel
7c69f2c2 57 slang-devel
662414a4 58 xmlto
bf6ee3f7 59 xz
4c928ab7
MT
60
61 /sbin/depmod
6b6a8ff6 62 %{kernel_logo}
bcf38aec
MT
63 end
64
34520606 65 kernel_arch = %{DISTRO_PLATFORM}
45088e83 66 kernel_target = bzImage
967da24b
MT
67 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
68
d5383c43 69 if "%{DISTRO_ARCH}" == "aarch64"
d5383c43
MT
70 kernel_arch = arm64
71 kernel_target = Image.gz
72 end
73
802ea3af 74 prepare_cmds
5e856224
MT
75 # Disable the colorize plugin.
76 # It's generally very nice but it clutters our
77 # logfiles.
78 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
79 -i Makefile
80
202187a3 81 sed -e "s/\$(HOST_LFS_CFLAGS)/& -fPIC/g" -i Makefile
802ea3af 82
6b6a8ff6 83 cp -vf %{kernel_logo} \
802ea3af
MT
84 drivers/video/logo/logo_linux_clut224.ppm
85
bcf38aec
MT
86 # Get rid of unwanted files resulting from patch fuzz.
87 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
88
89 # Remove unnecessary SCM files.
90 find . -name .gitignore -exec rm -f {} \; >/dev/null
91
ebeed08a
MT
92 # This prevents scripts/setlocalversion from mucking with our version numbers.
93 touch .scmversion
94
bcf38aec 95 mkdir -pv configs
4c928ab7
MT
96
97 cd %{DIR_SOURCE}
bcf38aec
MT
98 configure_kernel() {
99 local flavour=${1}
100 local suffix
f05d9a85 101 if [ "${flavour}" != "generic" ]; then
bcf38aec
MT
102 suffix="-${flavour}"
103 fi
104
d8d7d102 105 bash scripts/configure --kernel-dir=%{DIR_APP} \
4c928ab7 106 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
bcf38aec
MT
107 }
108
109 # Generate configuration files for all kernels we are going to
110 # build.
f05d9a85 111 configure_kernel "generic"
802ea3af
MT
112 end
113
114 build
bcf38aec
MT
115 build_kernel() {
116 local flavour=${1}
117 local suffix
118 local localversion="%{localversion}"
119 local fullversion="%{fullver}"
f05d9a85 120 if [ "${flavour}" != "generic" ]; then
bcf38aec
MT
121 suffix="-${flavour}"
122 localversion="${localversion}.${flavour}"
123 fullversion="${fullversion}.${flavour}"
124 fi
802ea3af 125
ebeed08a
MT
126 # Label the build.
127 sed -i Makefile \
128 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
129
bcf38aec
MT
130 # Clean up the source tree.
131 make mrproper
802ea3af 132
bcf38aec
MT
133 # Install configuration file.
134 cp configs/config.${flavour} .config
c6e2a6c8 135 cat .config
802ea3af 136
bcf38aec 137 # Run the build.
1349854e 138 make ARCH=%{kernel_arch} olddefconfig >/dev/null
65c2deba 139 make ARCH=%{kernel_arch} %{kernel_target} modules \
18c3200a 140 KERNELRELEASE=${fullversion} %{PARALLELISMFLAGS}
bcf38aec 141
9d4be168
MT
142 # Compile Flattened Device Tree database
143 case "${DISTRO_ARCH}" in
d8d7d102 144 aarch64)
9d4be168
MT
145 make ARCH=%{kernel_arch} dtbs
146
147 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
148 for file in arch/arm/boot/dts/*.dtb; do
149 [ -e "${file}" ] || continue
150
151 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
152 rm -f ${file}
153 done
154 ;;
155 esac
156
bcf38aec 157 # Install the results.
c4ef5c45 158 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
bcf38aec
MT
159 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
160 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
161 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
162
163 # Create empty initramfs (20M).
164 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
165
166 # Install modules.
81bb0557 167 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
bcf38aec 168 KERNELRELEASE=${fullversion} modules_install
c8f122e5 169
bcf38aec
MT
170 # And now the scary looking part.
171 #
172 # Recreate source and build links.
7c69f2c2
MT
173 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
174 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
175 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
802ea3af 176
bcf38aec 177 # Create dirs for extra modules.
7c69f2c2 178 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
802ea3af 179
7c69f2c2 180 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
c4ef5c45 181 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 182 cp Module.symvers System.map \
c4ef5c45 183 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 184 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
bcf38aec 185
7c69f2c2
MT
186 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
187 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
c4ef5c45 188 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
bcf38aec
MT
189 -exec rm -vf {} \;
190
7c69f2c2 191 cp -a --parents arch/%{kernel_arch}/include \
c4ef5c45 192 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
7c69f2c2 193 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
bcf38aec
MT
194
195 # Make sure we can build external modules.
c4ef5c45
MT
196 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
197 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
198 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
199 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
7c69f2c2 200 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
c4ef5c45
MT
201 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
202
203 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
bf6ee3f7 204 xargs --no-run-if-empty chmod u+x
bcf38aec 205
bcf38aec 206 # Move all development files to /usr/src.
7c69f2c2
MT
207 mkdir -p %{BUILDROOT}/usr/src/kernels
208 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
bcf38aec 209 %{BUILDROOT}/usr/src/kernels/${fullversion}
7c69f2c2 210 ln -sf ../../../src/kernels/${fullversion} \
c4ef5c45 211 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
bcf38aec 212
81bb0557
MT
213 # Fix permissions.
214 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
215 -exec chmod 644 {} \;
216
bcf38aec 217 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
d27a5bdd
AF
218
219 # remove device tree compiler because there are dead links
220 rm -rf %{BUILDROOT}/usr/src/kernels/*/scripts/dtc
bcf38aec
MT
221 }
222
d8d7d102 223 # Build the kernel
f05d9a85 224 build_kernel "generic"
6e9df6a3 225
6e9df6a3 226 # cpupower
7c69f2c2
MT
227 chmod +x tools/power/cpupower/utils/version-gen.sh
228 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
229
302e8df8
MT
230 pushd tools/thermal/tmon
231 make
232 popd
bcf38aec
MT
233 end
234
235 install
4c928ab7
MT
236 # When no kernels are configured, we create a default config
237 # which enables us to install at least the header files.
238 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
239
802ea3af 240 # Install the header files
c8f122e5 241 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
802ea3af
MT
242 mkdir -pv %{BUILDROOT}/usr/include
243 find dest/include \( -name .install -o -name ..install.cmd \) -delete
244 cp -rv dest/include/* %{BUILDROOT}/usr/include
245
246 # Glibc provides these headers
247 rm -rfv %{BUILDROOT}/usr/include/scsi \
248 %{BUILDROOT}/usr/include/asm*/atomic.h \
249 %{BUILDROOT}/usr/include/asm*/io.h \
250 %{BUILDROOT}/usr/include/asm*/irq.h
251
15a11c5b
MT
252 # Remove all firmware files which are distributed by linux-firmware
253 rm -rfv %{BUILDROOT}/lib/firmware
bcf38aec
MT
254
255 # Install tools.
6e9df6a3 256 # cpupower
7c69f2c2
MT
257 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
258 mandir=%{mandir} CPUFREQ_BENCH=false install
259
7c69f2c2 260 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
302e8df8 261
302e8df8
MT
262 # tmon
263 pushd tools/thermal/tmon
264 make INSTALL_ROOT=%{BUILDROOT} install
265 popd
802ea3af
MT
266 end
267end
268
269packages
d8d7d102
MT
270 package kernel-tools
271 summary = Assortment of tools for the Linux kernel.
272 description = %{summary}
bcf38aec 273
d8d7d102
MT
274 filter_requires
275 perl>=[0-9]\:.*
276 end
277 end
278
279 package kernel
280 summary = The Linux kernel %{fullver}
bcf38aec 281
1c9b6c79 282 prerequires
4c928ab7 283 /sbin/depmod
1c9b6c79
MT
284 end
285
286 provides
d8d7d102 287 kernel = %{fullver}
1c9b6c79
MT
288 end
289
802ea3af 290 requires
4c928ab7 291 dracut
868edea1 292 kernel-updater
802ea3af 293 linux-firmware
aa7960eb 294 intel-microcode
802ea3af 295 end
ad1ea534 296
bcf38aec 297 files
d8d7d102
MT
298 /boot/System.map-%{fullver}
299 /boot/dtb-%{fullver}
300 /boot/vmlinuz-%{fullver}
301 /boot/initramfs-%{fullver}.img
302 /usr/lib/modules/%{fullver}
bcf38aec
MT
303 end
304
aa3ab846 305 _posttrans
d8d7d102 306 kernel-updater install %{fullver}
aa3ab846
MT
307 end
308
ad1ea534 309 script posttransin
aa3ab846
MT
310 %{_posttrans}
311 end
312
313 script posttransup
314 %{_posttrans}
315 end
316
868edea1 317 script postun
d8d7d102 318 kernel-updater uninstall %{fullver}
bcf38aec
MT
319 end
320 end
321
d8d7d102
MT
322 package kernel-devel
323 summary = Development files of kernel-%{fullver}
bcf38aec
MT
324 description
325 %{summary}
326
327 Install this package in order to compile modules for
d8d7d102 328 kernel release %{fullver}.
bcf38aec
MT
329 end
330
10756fd5
MT
331 provides
332 kernel-devel = %{thisver}
333 end
334
bcf38aec
MT
335 filter_requires
336 perl>=[0-9]\:.*
ad1ea534
MT
337 end
338
bcf38aec 339 files
d8d7d102
MT
340 /usr/lib/modules/%{fullver}/build
341 /usr/lib/modules/%{fullver}/source
342 /usr/src/kernels/%{fullver}
45088e83 343 end
bcf38aec 344 end
81bb0557 345
802ea3af 346 package kernel-headers
d8d7d102 347 summary = Header files of the kernel release %{fullver}
802ea3af 348 desciption = %{summary}
c698e4be
MT
349
350 files
351 /usr/include
352 end
802ea3af 353 end
802ea3af 354end