############################################################################### # IPFire.org - An Open Source Firewall Solution # # Copyright (C) - IPFire Development Team # ############################################################################### name = kernel version = 3.4.4 release = 3 thisapp = linux-%{version} maintainer = Michael Tremer groups = System/Kernels url = http://www.kernel.org/ license = GPLv2 summary = The Linux kernel. description The kernel package contains the Linux kernel (vmlinuz), the core of any Linux operating system. The kernel handles the basic functions of the operating system: memory allocation, process allocation, device input and output, etc. end # Version helper variables. localversion = %{release}.%{DISTRO_DISTTAG}.%{DISTRO_ARCH} fullver = %{version}-%{localversion} source_dl = http://www.kernel.org/pub/linux/kernel/v3.x/ sources = %{thisapp}.tar.xz build # icecream cannot be used to compile the kernel. # Because the PaX patch does use GCC plugins to harden the kernel which # are not available on the remote compilers, we need to disable it here. export ICECC=no requires asciidoc binutils >= 2.22.52.0.3-2 binutils-devel bison elfutils-devel flex gcc-plugin-devel gettext ncurses-devel net-tools perl python-devel xmlto /sbin/depmod end tools_cpupower_requires newt-devel pciutils-devel slang-devel end # A list of kernels to build. kernels = # Should we build cpupower? build_cpupower = 1 kernel_target = bzImage if "%{DISTRO_ARCH}" == "i686" # Build a default and legacy kernel for the # i686 architecture. build_kernel_default = 1 build_kernel_legacy = 1 kernel_arch = x86 kernel_image = arch/%{kernel_arch}/boot/bzImage end if "%{DISTRO_ARCH}" == "x86_64" build_kernel_default = 1 kernel_arch = x86 kernel_image = arch/%{kernel_arch}/boot/bzImage end if "%{DISTRO_ARCH}" == "armv5tel" # ERROR Currently all kernel images are disabled, because they # won't build with the grsecurity patch. # Build versatile kernel. build_kernel_versatile = 1 # Build a kernel for Marvell Kirkwood-based devices. build_kernel_kirkwood = 1 kernel_arch = arm kernel_image = arch/%{kernel_arch}/boot/zImage # ARM does not support cpupower. build_cpupower = 0 end if "%{DISTRO_ARCH}" == "armv7hl" # Build a kernel for TI OMAP SoCs. build_kernel_omap = 1 kernel_arch = arm kernel_image = arch/%{kernel_arch}/boot/zImage # ARM does not support cpupower. build_cpupower = 0 end # Build default kernel. if "%{build_kernel_default}" == "1" kernels += default end # Build legacy kernel. if "%{build_kernel_legacy}" == "1" kernels += legacy end # Build ARM versatile kernel. if "%{build_kernel_versatile}" == "1" kernels += versatile end # Build ARM kirkwood kernel. if "%{build_kernel_kirkwood}" == "1" kernels += kirkwood end # Build ARM omap kernel. if "%{build_kernel_omap}" == "1" kernels += omap end # Add tools' build requirements if build is requested. if "%{build_cpupower}" == "1" requires += %{tools_cpupower_requires} end prepare_cmds rm -f %{DIR_APP}/localversion-grsec # Remove -Werror flag to fix ARMv5 build. sed -e "s/-Werror//g" -i grsecurity/Makefile # Disable the colorize plugin. # It's generally very nice but it clutters our # logfiles. sed -e "/^COLORIZE_PLUGIN_CFLAGS/d" \ -i Makefile sed -e "s/^HOSTCFLAGS.*=.*/& -fPIC/g" -i Makefile cp -vf %{DIR_SOURCE}/%{DISTRO_SNAME}_logo.ppm \ drivers/video/logo/logo_linux_clut224.ppm # Get rid of unwanted files resulting from patch fuzz. find . \( -name "*.orig" -o -name "*~" \) -exec rm -f {} \; >/dev/null # Remove unnecessary SCM files. find . -name .gitignore -exec rm -f {} \; >/dev/null # This prevents scripts/setlocalversion from mucking with our version numbers. touch .scmversion mkdir -pv configs cd %{DIR_SOURCE} configure_kernel() { local flavour=${1} local suffix if [ "${flavour}" != "default" ]; then suffix="-${flavour}" fi scripts/configure --kernel-dir=%{DIR_APP} \ merge %{DISTRO_ARCH} ${flavour} %{DIR_APP}/configs/config.${flavour} } # Generate configuration files for all kernels we are going to # build. for kernel in %{kernels}; do configure_kernel ${kernel} done end build build_kernel() { local flavour=${1} local suffix local localversion="%{localversion}" local fullversion="%{fullver}" if [ "${flavour}" != "default" ]; then suffix="-${flavour}" localversion="${localversion}.${flavour}" fullversion="${fullversion}.${flavour}" fi # Label the build. sed -i Makefile \ -e "s/^EXTRAVERSION.*/EXTRAVERSION = -${localversion}/" # Clean up the source tree. make mrproper # Install configuration file. cp configs/config.${flavour} .config cat .config # Run the build. make ARCH=%{kernel_arch} oldnoconfig >/dev/null make ARCH=%{kernel_arch} CC="gcc -fno-PIE" %{kernel_target} modules %{PARALLELISMFLAGS} # Install the results. mkdir -pv %{BUILDROOT}/boot %{BUILDROOT}/lib/modules/${fullversion} install -m 755 %{kernel_image} %{BUILDROOT}/boot/vmlinuz-${fullversion} install -m 644 .config %{BUILDROOT}/boot/config-${fullversion} install -m 644 System.map %{BUILDROOT}/boot/System.map-${fullversion} # Create empty initramfs (20M). dd if=/dev/zero of=%{BUILDROOT}/boot/initramfs-${fullversion}.img bs=1M count=20 # Install modules. make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} mod-fw= \ KERNELRELEASE=${fullversion} modules_install # Install vdso. case "%{DISTRO_ARCH}" in i686) make ARCH=%{kernel_arch} INSTALL_MOD_PATH=%{BUILDROOT} \ KERNELRELEASE=${fullversion} vdso_install ;; esac # Create an empty settings file for dracut mkdir -pv %{BUILDROOT}/etc/ld.so.conf.d echo "# Placeholder file, no vDSO hwcap entries used in this kernel." \ > %{BUILDROOT}/etc/ld.so.conf.d/kernel-${fullversion}.conf # And now the scary looking part. # # Recreate source and build links. rm -vf %{BUILDROOT}/lib/modules/${fullversion}/{build,source} mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/build ln -svf build %{BUILDROOT}/lib/modules/${fullversion}/source # Create dirs for extra modules. mkdir -pv %{BUILDROOT}/lib/modules/${fullversion}/extra cp -v --parents $(find -type f -name "Makefile*" -o -name "Kconfig*") \ %{BUILDROOT}/lib/modules/${fullversion}/build cp -v Module.symvers System.map \ %{BUILDROOT}/lib/modules/${fullversion}/build rm -vrf %{BUILDROOT}/lib/modules/${fullversion}/build/{Documentation,scripts,include} cp -v .config %{BUILDROOT}/lib/modules/${fullversion}/build cp -va scripts %{BUILDROOT}/lib/modules/${fullversion}/build find %{BUILDROOT}/lib/modules/${fullversion}/build/scripts -name "*.o" \ -exec rm -vf {} \; cp -va --parents arch/%{kernel_arch}/include \ %{BUILDROOT}/lib/modules/${fullversion}/build cp -va include %{BUILDROOT}/lib/modules/${fullversion}/build/include # Make sure we can build external modules. touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/Makefile \ %{BUILDROOT}/lib/modules/${fullversion}/build/include/linux/version.h touch -r %{BUILDROOT}/lib/modules/${fullversion}/build/.config \ %{BUILDROOT}/lib/modules/${fullversion}/build/autoconf.h cp -v %{BUILDROOT}/lib/modules/${fullversion}/build/.config \ %{BUILDROOT}/lib/modules/${fullversion}/build/include/config/auto.conf find %{BUILDROOT}/lib/modules/${fullversion} -name "*.ko" -type f | \ xargs chmod u+x # Move all development files to /usr/src. mkdir -pv %{BUILDROOT}/usr/src/kernels mv -v %{BUILDROOT}/lib/modules/${fullversion}/build \ %{BUILDROOT}/usr/src/kernels/${fullversion} ln -svf ../../../usr/src/kernels/${fullversion} \ %{BUILDROOT}/lib/modules/${fullversion}/build find %{BUILDROOT}/usr/src/kernels -name ".*.cmd" -exec rm -f {} \; } for kernel in %{kernels}; do build_kernel ${kernel} done # Build tools. # cpupower if [ "%{build_cpupower}" = "1" ]; then chmod +x tools/power/cpupower/utils/version-gen.sh make -C tools/power/cpupower CPUFREQ_BENCH=false %{PARALLELISMFLAGS} cd tools/power/cpupower/debug/i386 make %{PARALLELISMFLAGS} centrino-decode powernow-k8-decode cd - fi end install # When no kernels are configured, we create a default config # which enables us to install at least the header files. [ -n "%{kernels}" ] || make ARCH=%{kernel_arch} defconfig # Install the header files make ARCH=%{kernel_arch} INSTALL_HDR_PATH=dest headers_install mkdir -pv %{BUILDROOT}/usr/include find dest/include \( -name .install -o -name ..install.cmd \) -delete cp -rv dest/include/* %{BUILDROOT}/usr/include # Glibc provides these headers rm -rfv %{BUILDROOT}/usr/include/scsi \ %{BUILDROOT}/usr/include/asm*/atomic.h \ %{BUILDROOT}/usr/include/asm*/io.h \ %{BUILDROOT}/usr/include/asm*/irq.h # Remove all firmware files which are distributed by linux-firmware rm -rfv %{BUILDROOT}/lib/firmware # Install tools. make -C tools/perf DESTDIR=%{BUILDROOT} \ HAVE_CPLUS_DEMANGLE=1 prefix=/usr perfexecdir=lib/perf-core \ install install-man # cpupower if [ "%{build_cpupower}" = "1" ]; then make -C tools/power/cpupower DESTDIR=%{BUILDROOT} libdir=%{libdir} \ mandir=%{mandir} CPUFREQ_BENCH=false install cd tools/power/cpupower/debug/i386 install -m 755 centrino-decode %{BUILDROOT}/usr/bin/centrino-decode install -m 755 powernow-k8-decode %{BUILDROOT}/usr/bin/powernow-k8-decode cd - chmod 0755 %{BUILDROOT}%{libdir}/libcpupower.so* fi end end packages template KERNEL kernel_name = kernel kernel_release = %{fullver} summary = The Linux kernel %{kernel_release}. prerequires /sbin/depmod end provides kernel=%{kernel_release} end requires dracut grubby linux-firmware end files /boot/System.map-%{kernel_release} /boot/vmlinuz-%{kernel_release} /boot/initramfs-%{kernel_release}.img /etc/ld.so.conf.d/kernel-%{kernel_release}.conf /lib/modules/%{kernel_release} end _posttrans /sbin/new-kernel-pkg --package %{kernel_name} --mkinitrd --dracut --depmod --update %{kernel_release} /sbin/new-kernel-pkg --package %{kernel_name} --rpmposttrans %{kernel_release} end script posttransin %{_posttrans} end script posttransup %{_posttrans} end script postin /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release} end script postup /sbin/new-kernel-pkg --package %{kernel_name} --install %{kernel_release} end script preun /sbin/new-kernel-pkg --rminitrd --rmmoddep --remove %{kernel_release} end end template KERNELDEVEL kernel_release = %{fullver} summary = Development files of kernel-%{kernel_release}. description %{summary} Install this package in order to compile modules for kernel release %{kernel_release}. end filter_requires perl>=[0-9]\:.* end files /lib/modules/%{kernel_release}/build /lib/modules/%{kernel_release}/source /usr/src/kernels/%{kernel_release} end end if "%{build_kernel_default}" == "1" package kernel template KERNEL kernel_name = kernel kernel_release = %{fullver} end package kernel-devel template KERNELDEVEL kernel_name = kernel kernel_release = %{fullver} end end if "%{build_kernel_legacy}" == "1" package kernel-legacy template KERNEL kernel_name = kernel-legacy kernel_release = %{fullver}.legacy end package kernel-legacy-devel template KERNELDEVEL kernel_name = kernel-legacy kernel_release = %{fullver}.legacy end end if "%{build_kernel_versatile}" == "1" package kernel-versatile template KERNEL kernel_name = kernel-versatile kernel_release = %{fullver}.versatile end package kernel-versatile-devel template KERNELDEVEL kernel_name = kernel-versatile kernel_release = %{fullver}.versatile end end if "%{build_kernel_kirkwood}" == "1" package kernel-kirkwood template KERNEL kernel_name = kernel-kirkwood kernel_release = %{fullver}.kirkwood end package kernel-kirkwood-devel template KERNELDEVEL kernel_name = kernel-kirkwood kernel_release = %{fullver}.kirkwood end end if "%{build_kernel_omap}" == "1" package kernel-omap template KERNEL kernel_name = kernel-omap kernel_release = %{fullver}.omap end package kernel-omap-devel template KERNELDEVEL kernel_name = kernel-omap kernel_release = %{fullver}.omap end end package kernel-headers summary = Header files of the kernel release %{fullver}. desciption = %{summary} files /usr/include end end package kernel-tools summary = Assortment of tools for the Linux kernel. description = %{summary} filter_requires perl>=[0-9]\:.* end files / !/boot !/lib/modules !/usr/include !/usr/src !/usr/src/debug !/usr/lib/debug end end end