#!/bin/ksh set -e function bomb { echo error: $@ exit 1 } [[ -z $1 ]] && echo "${0##*/} [reiser4-patch.gz]" && exit 1 linuxtar=$1 patch=$2 mem=`free -m | grep ^Mem | awk '{print $2}'` (( mem < 4096 )) && print at least 4 GiB of RAM is recommended && exit 1 unset mem [[ -z $MAKEFLAGS ]] && echo MAKEFLAGS not defined && exit 1 #j=$((`grep ^processor /proc/cpuinfo | tail -1 | awk '{print $3}'` + 1)) #lscpu | grep ^Thread [[ ! -f $linuxtar ]] && print could not find $linuxtar && exit 1 linux=${linuxtar%\.tar} print extracting $linuxtar ... \\c rm -rf $linux/ tar xf $linuxtar && print done cd $linux/ if [[ -n $patch ]]; then [[ ! -f ../$patch ]] && print could not find patch $patch && exit 1 print applying $patch ... \\c zcat ../$patch | patch -p1 >/dev/null && print done fi mv -i Makefile Makefile.dist sed 's/^EXTRAVERSION =/EXTRAVERSION = .domU/' Makefile.dist > Makefile print x86_64_defconfig ... \\c make x86_64_defconfig >/dev/null && print done print xen config ... \\c make xen.config >/dev/null && print done echo print disable kvm and xen dom0 but enable pvh cat >> .config </dev/null && print done\\n print vmm optimizations and tmem if there is cat >> .config <> .config </dev/null && print done\\n [[ -z `grep ^CONFIG_F2FS .config` ]] && bomb failed to setup F2FS print enable network features cat >> .config </dev/null && print done\\n print enable nftables and friends cat >> .config </dev/null && print done\\n print enable states tracker cat >> .config </dev/null && print done\\n [[ -z `grep ^CONFIG_NF_CONNTRACK_EVENTS .config` ]] && bomb failed to setup NF_CONNTRACK_EVENTS print grab check-config.sh ... \\c wget -q -O - https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > ../check-config.sh && echo done chmod +x ../check-config.sh print check for docker kernel features ../check-config.sh .config | grep missing | sed -r 's/^[[:space:]]*- .*(CONFIG_[^:]+).*: .*missing.*/\1=y/' | grep ^CONFIG > .config.docker.tmp sed 's/[^[:alnum:]_]//g' .config.docker.tmp | sed -r 's/my$/=y/' >> .config rm -f ../check-config.sh make olddefconfig >/dev/null && print done\\n print enable missing k8s kernel features cat >> .config </dev/null && print done\\n print almost no modules mv -f .config .config.m sed 's/=m$/=y/' .config.m > .config make olddefconfig && print done grep =m$ .config || print OK NO MODULE AT ALL print '' [[ -n $patch && -z `grep ^CONFIG_REISER4_FS=y .config` ]] && bomb failed to setup REISER4 [[ -z `grep ^CONFIG_XEN_PVH=y .config` ]] && bomb failed to setup XEN_PVH print '' print ready? read -r print tail -F /usr/src/domU.log\\n time make > ../domU.log && print BUILT || bomb FAIL print '' tail -1 ../domU.log print '' fullversion=`file arch/x86/boot/bzImage | awk '{print $9}'` echo VERSION IS $fullversion [[ -z $fullversion ]] && print ERROR \$fullversion NOT DEFINED && exit 1 [[ -d /lib/modules/$fullversion/ ]] && rm -rf /lib/modules/$fullversion/ && echo cleaned-up print modules_install... \\c make modules_install >/dev/null && echo done du -sh /lib/modules/$fullversion/ # domU 84K / 320K mkdir -p /data/kernels/ cp arch/x86/boot/bzImage /data/kernels/$fullversion.vmlinuz cp .config /data/kernels/$fullversion.config tar czf /data/kernels/$fullversion.modules.tar.gz -C /lib/modules/ $fullversion/ cd ../ tar czf /data/kernels/$fullversion.src.tar.gz $linux/ print '' cat <