]> git.ipfire.org Git - ipfire-3.x.git/blob - kernel/kernel.nm
kernel: Remove grsecurity patchset
[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 = 4.1.7
8 release = 4
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 = http://www.kernel.org/pub/linux/kernel/v4.x/
29 sources = %{thisapp}.tar.xz
30
31 build
32 kernel_logo = /usr/share/pixmaps/kernel-logo.ppm
33
34 requires
35 asciidoc
36 audit-devel
37 bc
38 binutils >= 2.23.51.0.3-3
39 binutils-devel
40 bison
41 elfutils-devel
42 flex
43 gcc >= 4.9
44 gcc-plugin-devel
45 gettext
46 libunwind-devel
47 ncurses-devel
48 net-tools
49 newt-devel
50 pciutils-devel
51 perl
52 python-devel
53 slang-devel
54 xmlto
55 xz
56
57 /sbin/depmod
58 %{kernel_logo}
59 end
60
61 # i686 needs librmi for cpupower.
62 if "%{DISTRO_ARCH}" == "i686"
63 requires += liblrmi-devel
64 end
65
66 # A list of kernels to build.
67 kernels =
68
69 # Arguments that are passed to the kernel build command.
70 kernel_build_flags =
71
72 kernel_arch = %{DISTRO_PLATFORM}
73 kernel_target = bzImage
74 kernel_image = arch/%{kernel_arch}/boot/%{kernel_target}
75
76 if "%{DISTRO_ARCH}" == "i686"
77 # Build a default and legacy kernel for the
78 # i686 architecture.
79 build_kernel_default = 1
80 build_kernel_legacy = 1
81 end
82
83 if "%{DISTRO_ARCH}" == "x86_64"
84 build_kernel_default = 1
85 end
86
87 if "%{DISTRO_ARCH}" == "aarch64"
88 # Disable for now because it won't compile
89 build_kernel_default = 0
90
91 kernel_arch = arm64
92 kernel_target = Image.gz
93 end
94
95 if "%{DISTRO_ARCH}" == "armv7hl"
96 # Build the default unified kernel.
97 build_kernel_default = 1
98
99 kernel_target = zImage
100 end
101
102 # mkimage is a requirement to build uImage images.
103 if "%{kernel_target}" == "uImage"
104 requires += u-boot-tools
105 end
106
107 # Build default kernel.
108 if "%{build_kernel_default}" == "1"
109 kernels += default
110 end
111
112 # Build legacy kernel.
113 if "%{build_kernel_legacy}" == "1"
114 kernels += legacy
115 end
116
117 perf_make = make %{MAKETUNING} -C tools/perf V=1 WERROR=0 \
118 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_LIBNUMA=1 \
119 NO_STRLCPY=1 NO_BIONIC=1 prefix=%{prefix} perfexecdir=lib/perf-core
120
121 prepare_cmds
122 # Disable the colorize plugin.
123 # It's generally very nice but it clutters our
124 # logfiles.
125 sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \
126 -i Makefile
127
128 sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile
129
130 cp -vf %{kernel_logo} \
131 drivers/video/logo/logo_linux_clut224.ppm
132
133 # Get rid of unwanted files resulting from patch fuzz.
134 find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null
135
136 # Remove unnecessary SCM files.
137 find . -name .gitignore -exec rm -f {} \; >/dev/null
138
139 # This prevents scripts/setlocalversion from mucking with our version numbers.
140 touch .scmversion
141
142 mkdir -pv configs
143
144 cd %{DIR_SOURCE}
145 configure_kernel() {
146 local flavour=${1}
147 local suffix
148 if [ "${flavour}" != "default" ]; then
149 suffix="-${flavour}"
150 fi
151
152 scripts/configure --kernel-dir=%{DIR_APP} \
153 merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour}
154 }
155
156 # Generate configuration files for all kernels we are going to
157 # build.
158 for kernel in %{kernels}; do
159 configure_kernel ${kernel}
160 done
161
162 # Tools
163 # Prevent perf from installing any files in /usr/libexec
164 sed -i %{DIR_APP}/tools/perf/config/Makefile -e "s/libexec/lib/g"
165 end
166
167 build
168 build_kernel() {
169 local flavour=${1}
170 local suffix
171 local localversion="%{localversion}"
172 local fullversion="%{fullver}"
173 if [ "${flavour}" != "default" ]; then
174 suffix="-${flavour}"
175 localversion="${localversion}.${flavour}"
176 fullversion="${fullversion}.${flavour}"
177 fi
178
179 # Label the build.
180 sed -i Makefile \
181 -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/"
182
183 # Clean up the source tree.
184 make mrproper
185
186 # Install configuration file.
187 cp configs/config.${flavour} .config
188 cat .config
189
190 # Run the build.
191 make ARCH=%{kernel_arch} oldnoconfig >/dev/null
192 make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules \
193 %{kernel_build_flags} %{PARALLELISMFLAGS}
194
195 # Compile Flattened Device Tree database
196 case "${DISTRO_ARCH}" in
197 aarch64|arm*)
198 make ARCH=%{kernel_arch} dtbs
199
200 mkdir -pv %{BUILDROOT}/boot/dtb-${fullversion}
201 for file in arch/arm/boot/dts/*.dtb; do
202 [ -e "${file}" ] || continue
203
204 install -m 644 ${file} %{BUILDROOT}/boot/dtb-${fullversion} || exit 1
205 rm -f ${file}
206 done
207 ;;
208 esac
209
210 # Install the results.
211 mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/usr/lib/modules/${fullversion}
212 install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion}
213 install -m 644 .config %{BUILDROOT}/boot/config-${fullversion}
214 install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion}
215
216 # Create empty initramfs (20M).
217 dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20
218
219 # Install modules.
220 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT}/usr mod-fw= V=1 \
221 KERNELRELEASE=${fullversion} modules_install
222
223 # Install vdso.
224 case "%{DISTRO_ARCH}" in
225 i686)
226 make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \
227 KERNELRELEASE=${fullversion} vdso_install
228 ;;
229 esac
230
231 # Create an empty settings file for dracut
232 mkdir -p %{BUILDROOT}/etc/ld.so.conf.d
233 echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \
234 > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf
235
236 # And now the scary looking part.
237 #
238 # Recreate source and build links.
239 rm -f %{BUILDROOT}/usr/lib/modules/${fullversion}/{build,source}
240 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/build
241 ln -sf build %{BUILDROOT}/usr/lib/modules/${fullversion}/source
242
243 # Create dirs for extra modules.
244 mkdir -p %{BUILDROOT}/usr/lib/modules/${fullversion}/extra
245
246 cp --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \
247 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
248 cp Module.symvers System.map \
249 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
250 rm -rf %{BUILDROOT}/usr/lib/modules/${fullversion}/build/{Documentation,scripts,include}
251
252 cp .config %{BUILDROOT}/usr/lib/modules/${fullversion}/build
253 cp -a scripts %{BUILDROOT}/usr/lib/modules/${fullversion}/build
254 find %{BUILDROOT}/usr/lib/modules/${fullversion}/build/scripts -name "*.o" \
255 -exec rm -vf {} \;
256
257 cp -a --parents arch/%{kernel_arch}/include \
258 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
259 cp -a include %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include
260
261 # Make sure we can build external modules.
262 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/Makefile \
263 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/linux/version.h
264 touch -r %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
265 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/autoconf.h
266 cp %{BUILDROOT}/usr/lib/modules/${fullversion}/build/.config \
267 %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
268
269 find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
270 xargs --no-run-if-empty chmod u+x
271
272 # Move all development files to /usr/src.
273 mkdir -p %{BUILDROOT}/usr/src/kernels
274 mv %{BUILDROOT}/usr/lib/modules/${fullversion}/build \
275 %{BUILDROOT}/usr/src/kernels/${fullversion}
276 ln -sf ../../../src/kernels/${fullversion} \
277 %{BUILDROOT}/usr/lib/modules/${fullversion}/build
278
279 # Fix permissions.
280 find %{BUILDROOT}/usr/src/kernels -name "modules.order" \
281 -exec chmod 644 {} \;
282
283 find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \;
284 }
285
286 for kernel in %{kernels}; do
287 build_kernel ${kernel}
288 done
289
290 # Build tools.
291 # perf
292 %{perf_make} DESTDIR=%{BUILDROOT} all
293
294 # cpupower
295 chmod +x tools/power/cpupower/utils/version-gen.sh
296 make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS}
297
298 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
299 pushd tools/power/cpupower/debug/x86_64
300 make %{MAKETUNING} centrino-decode powernow-k8-decode
301 popd
302 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
303 pushd tools/power/cpupower/debug/i386
304 make %{MAKETUNING} centrino-decode powernow-k8-decode
305 popd
306 fi
307
308 # Should be built for all x86 architectures
309 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
310 # Won't compile on i686
311 # x86_energy_perf_policy.c: In function ‘validate_cpuid’:
312 # x86_energy_perf_policy.c:154:2: error: PIC register clobbered by ‘ebx’ in ‘asm’
313 # asm("cpuid" : "=a" (fms), "=c" (ecx), "=d" (edx) : "a" (1) : "ebx");
314 # ^
315 pushd tools/power/x86/x86_energy_perf_policy
316 make
317 popd
318
319 # Same as above
320 pushd tools/power/x86/turbostat
321 make
322 popd
323 fi
324
325 pushd tools/thermal/tmon
326 make
327 popd
328 end
329
330 install
331 # When no kernels are configured, we create a default config
332 # which enables us to install at least the header files.
333 [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig
334
335 # Install the header files
336 make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install
337 mkdir -pv %{BUILDROOT}/usr/include
338 find dest/include \( -name .install -o -name ..install.cmd \) -delete
339 cp -rv dest/include/* %{BUILDROOT}/usr/include
340
341 # Glibc provides these headers
342 rm -rfv %{BUILDROOT}/usr/include/scsi \
343 %{BUILDROOT}/usr/include/asm*/atomic.h \
344 %{BUILDROOT}/usr/include/asm*/io.h \
345 %{BUILDROOT}/usr/include/asm*/irq.h
346
347 # Remove all firmware files which are distributed by linux-firmware
348 rm -rfv %{BUILDROOT}/lib/firmware
349
350 # Install tools.
351 %{perf_make} DESTDIR=%{BUILDROOT} install-bin install-python_ext
352
353 # cpupower
354 make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \
355 mandir=%{mandir} CPUFREQ_BENCH=false install
356
357 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
358 pushd tools/power/cpupower/debug/x86_64
359 install -m 755 centrino-decode \
360 %{BUILDROOT}/usr/bin/centrino-decode
361 install -m 755 powernow-k8-decode \
362 %{BUILDROOT}/usr/bin/powernow-k8-decode
363 popd
364 elif [ "%{DISTRO_ARCH}" = "i686" ]; then
365 pushd tools/power/cpupower/debug/i386
366 install -m 755 centrino-decode \
367 %{BUILDROOT}/usr/bin/centrino-decode
368 install -m 755 powernow-k8-decode \
369 %{BUILDROOT}/usr/bin/powernow-k8-decode
370 popd
371 fi
372
373 chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so*
374
375 # This should be built for all x86 architectures
376 if [ "%{DISTRO_ARCH}" = "x86_64" ]; then
377 mkdir -pv %{BUILDROOT}%{mandir}/man8
378
379 pushd tools/power/x86/x86_energy_perf_policy
380 make DESTDIR=%{BUILDROOT} install
381 popd
382
383 pushd tools/power/x86/turbostat
384 make DESTDIR=%{BUILDROOT} install
385 popd
386 fi
387
388 # tmon
389 pushd tools/thermal/tmon
390 make INSTALL_ROOT=%{BUILDROOT} install
391 popd
392 end
393 end
394
395 packages
396 template KERNEL
397 kernel_name = kernel
398 kernel_release = %{fullver}
399
400 summary = The Linux kernel %{kernel_release}.
401
402 prerequires
403 /sbin/depmod
404 end
405
406 provides
407 kernel=%{kernel_release}
408 end
409
410 requires
411 dracut
412 grubby
413 linux-firmware
414 end
415
416 files
417 /boot/System.map-%{kernel_release}
418 /boot/dtb-%{kernel_release}
419 /boot/vmlinuz-%{kernel_release}
420 /boot/initramfs-%{kernel_release}.img
421 /etc/ld.so.conf.d/kernel-%{kernel_release}.conf
422 /usr/lib/modules/%{kernel_release}
423 end
424
425 _posttrans
426 /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release}
427 /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release}
428 end
429
430 script posttransin
431 %{_posttrans}
432 end
433
434 script posttransup
435 %{_posttrans}
436 end
437
438 script postin
439 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
440 end
441
442 script postup
443 /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release}
444 end
445
446 script preun
447 /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release}
448 end
449 end
450
451 template KERNELDEVEL
452 kernel_release = %{fullver}
453
454 summary = Development files of kernel-%{kernel_release}.
455 description
456 %{summary}
457
458 Install this package in order to compile modules for
459 kernel release %{kernel_release}.
460 end
461
462 provides
463 kernel-devel = %{thisver}
464 end
465
466 filter_requires
467 perl>=[0-9]\:.*
468 end
469
470 files
471 /usr/lib/modules/%{kernel_release}/build
472 /usr/lib/modules/%{kernel_release}/source
473 /usr/src/kernels/%{kernel_release}
474 end
475 end
476
477 if "%{build_kernel_default}" == "1"
478 if "%{DISTRO_ARCH}" == "armv7hl"
479 package kernel
480 template KERNEL
481
482 kernel_name = kernel
483 kernel_release = %{fullver}
484
485 # Replace the Exynos kernel.
486 obsoletes += kernel-exynos < %{kernel_release}
487 conflicts += kernel-exynos < %{kernel_release}
488
489 # Replace the OMAP kernel.
490 obsoletes += kernel-omap < %{kernel_release}
491 conflicts += kernel-omap < %{kernel_release}
492 end
493
494 package kernel-devel
495 template KERNELDEVEL
496
497 kernel_name = kernel
498 kernel_release = %{fullver}
499
500 # Replace the Exynos kernel.
501 obsoletes += kernel-exynos-devel < %{kernel_release}
502 conflicts += kernel-exynos-devel < %{kernel_release}
503
504 # Replace the OMAP kernel.
505 obsoletes += kernel-omap-devel < %{kernel_release}
506 conflicts += kernel-omap-devel < %{kernel_release}
507 end
508
509 else
510 package kernel
511 template KERNEL
512
513 kernel_name = kernel
514 kernel_release = %{fullver}
515 end
516
517 package kernel-devel
518 template KERNELDEVEL
519
520 kernel_name = kernel
521 kernel_release = %{fullver}
522 end
523 end
524 end
525
526 if "%{build_kernel_legacy}" == "1"
527 package kernel-legacy
528 template KERNEL
529
530 kernel_name = kernel-legacy
531 kernel_release = %{fullver}.legacy
532 end
533
534 package kernel-legacy-devel
535 template KERNELDEVEL
536
537 kernel_name = kernel-legacy
538 kernel_release = %{fullver}.legacy
539 end
540 end
541
542 package kernel-headers
543 summary = Header files of the kernel release %{fullver}.
544 desciption = %{summary}
545
546 files
547 /usr/include
548 end
549 end
550
551 package kernel-tools
552 summary = Assortment of tools for the Linux kernel.
553 description = %{summary}
554
555 filter_requires
556 perl>=[0-9]\:.*
557 end
558
559 files
560 /
561 !/boot
562 !/usr/include
563 !/usr/lib/modules
564 !/usr/src
565 !/usr/src/debug
566 !/usr/lib/debug
567 end
568 end
569 end