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