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