#!/bin/sh
#
# builddeb 1.3
# Copyright 2003 Wichert Akkerman <wichert@wiggy.net>
#
# Simple script to generate a deb package for a Linux kernel. All the
# complexity of what to do with a kernel after it is installed or removed
# is left to other scripts and packages: they can install scripts in the
# /etc/kernel/{pre,post}{inst,rm}.d/ directories (or an alternative location
# specified in KDEB_HOOKDIR) that will be called on package install and
# removal.

set -e

is_enabled() {
	grep -q "^$1=y" include/config/auto.conf
}

if_enabled_echo() {
	if is_enabled "$1"; then
		echo -n "$2"
	elif [ $# -ge 3 ]; then
		echo -n "$3"
	fi
}

create_package() {
	local pname="$1" pdir="$2"
	local dpkg_deb_opts

	mkdir -m 755 -p "$pdir/DEBIAN"
	mkdir -p "$pdir/usr/share/doc/$pname"
	cp debian/copyright "$pdir/usr/share/doc/$pname/"
	cp debian/changelog "$pdir/usr/share/doc/$pname/changelog.Debian"
	gzip -n -9 "$pdir/usr/share/doc/$pname/changelog.Debian"
	sh -c "cd '$pdir'; find . -type f ! -path './DEBIAN/*' -printf '%P\0' \
		| xargs -r0 md5sum > DEBIAN/md5sums"

	# Fix ownership and permissions
	if [ "$DEB_RULES_REQUIRES_ROOT" = "no" ]; then
		dpkg_deb_opts="--root-owner-group"
	else
		chown -R root:root "$pdir"
	fi
	chmod -R go-w "$pdir"
	# in case we are in a restrictive umask environment like 0077
	chmod -R a+rX "$pdir"
	# in case we build in a setuid/setgid directory
	chmod -R ug-s "$pdir"

	# Create preinstall and post install script to remove dtb
	if [[ "$1" == *dtb* ]]; then
		cat >> $pdir/DEBIAN/preinst <<-EOF
		#!/bin/bash
		EOF

		cat >> $pdir/DEBIAN/postinst <<-EOF
		#!/bin/bash
		cd /boot
		ln -sfT dtb-$version dtb 2> /dev/null || mv dtb-$version dtb
		cd - > /dev/null
		echo dtb-$version > /boot/.dtb.tmp
		exit 0
		EOF
		chmod 775 $pdir/DEBIAN/preinst ; chmod 775 $pdir/DEBIAN/postinst
	fi

	# Create postinst prerm scripts for headers
	if [[ "$1" == *headers* ]]; then
		cat >> $pdir/DEBIAN/postinst <<-EOF
		#!/bin/bash
		cd /usr/src/linux-headers-$version
		echo "Compiling headers - please wait ..."
		find -type f -exec touch {} +

		pwd
		gcc -v

		echo "Compiling headers - make -j8 -s scripts > /dev/null 2>&1..."
		#make -j\$(grep -c 'processor' /proc/cpuinfo) -s scripts > /dev/null 2>&1 || exit 1
		# Guoping changed to J8 avoid using too many jobs for building in build server
		#make -j8-s scripts > /dev/null 2>&1 || exit 1
		make -j8 -s scripts 2>&1 > log.txt || exit 1

		echo "Compiling headers - make -j8 -s M=scripts/mod/ > /dev/null 2>&1..."
		#make -j\$(grep -c 'processor' /proc/cpuinfo) -s M=scripts/mod/ > /dev/null 2>&1 || exit 1
		# Guoping changed to J8 avoid using too many jobs for building in build server
		#make -j8 -s M=scripts/mod/ > /dev/null 2>&1 || exit 1
		make -j8 -s M=scripts/mod/ 2>&1 > log.txt || exit 1

		echo "Compiling headers - Done ..."

		#exit 0
		EOF

		cat >> $pdir/DEBIAN/prerm <<-EOF
		cd /usr/src/linux-headers-$version
		rm -rf scripts .config.old
		EOF

		chmod 775 $pdir/DEBIAN/postinst ; chmod 775 $pdir/DEBIAN/prerm
	fi

	# Create the package
	echo "Building package: $pdir $pname.deb"
	dpkg-gencontrol -p$pname -P"$pdir"

	## For HOST jammy, dpkg-deb default use zstd for compress,
	# it will cause failed log "uses unknown compression for member 'control.tar.zst', giving up"
	# dpkg -i need xz compress, but HOST jammy default use zst, so de-compress the debs and re-compress to xz
	# HOST jammy: control.tar.zst  data.tar.zst  debian-binary
	# HOST focal : control.tar.xz  data.tar.xz  debian-binary
	dpkg-deb $dpkg_deb_opts ${KDEB_COMPRESS:+-Z$KDEB_COMPRESS} --build "$pdir" ..
}

deploy_kernel_headers () {
	pdir=$1

	rm -rf $pdir

	(
		cd $srctree
		find . arch/$SRCARCH -maxdepth 1 -name Makefile\*
		find include scripts -type f -o -type l
		find security/*/include -type f
		find arch/$SRCARCH -name Kbuild.platforms -o -name Platform
		find $(find arch/$SRCARCH -name include -o -name scripts -type d) -type f
	) > debian/hdrsrcfiles

	{
		if is_enabled CONFIG_STACK_VALIDATION; then
			echo tools/objtool/objtool
		fi

		find arch/$SRCARCH/include Module.symvers include scripts -type f

		if is_enabled CONFIG_GCC_PLUGINS; then
			find scripts/gcc-plugins -name \*.so
		fi
	} > debian/hdrobjfiles

	destdir=$pdir/usr/src/linux-headers-$version
	mkdir -p $destdir
	(cd $destdir; patch -p1 < /tmp/headers-debian-byteshift.patch)
	tar -c -f - -C $srctree -T debian/hdrsrcfiles | tar -xf - -C $destdir
	tar -c -f - -T debian/hdrobjfiles | tar -xf - -C $destdir
	rm -f debian/hdrsrcfiles debian/hdrobjfiles

	(cd $destdir; export sub_make_done=0; make M=scripts clean;)

	# copy .config manually to be where it's expected to be
	cp $KCONFIG_CONFIG $destdir/.config

	mkdir -p $pdir/lib/modules/$version/
	ln -s /usr/src/linux-headers-$version $pdir/lib/modules/$version/build
}

deploy_libc_headers () {
	pdir=$1

	rm -rf $pdir

	$MAKE -f $srctree/Makefile headers
	$MAKE -f $srctree/Makefile headers_install INSTALL_HDR_PATH=$pdir/usr

	# move asm headers to /usr/include/<libc-machine>/asm to match the structure
	# used by Debian-based distros (to support multi-arch)
	host_arch=$(dpkg-architecture -a$(cat debian/arch) -qDEB_HOST_MULTIARCH)
	mkdir $pdir/usr/include/$host_arch
	mv $pdir/usr/include/asm $pdir/usr/include/$host_arch/
}

version=$KERNELRELEASE
tmpdir=debian/linux-image
dbg_dir=debian/linux-image-dbg
dtb_dir=debian/linux-dtb
packagename=linux-image"$LOCAL_VERSION"
dtb_packagename=linux-dtb"$LOCAL_VERSION"
dbg_packagename=$packagename-dbg


echo "Building packagename: $packagename.deb"
echo "Building dtb_packagename: $dtb_packagename.deb"

if [ "$ARCH" = "um" ] ; then
	packagename=user-mode-linux-$version
fi

# Not all arches have the same installed path in debian
# XXX: have each arch Makefile export a variable of the canonical image install
# path instead
case $ARCH in
aarch64|arm64)
   image_name=Image
   installed_image_path="boot/vmlinuz-$version"

   ;;
arm*)
   image_name=zImage
   installed_image_path="boot/vmlinuz-$version"
   ;;
um)
	installed_image_path="usr/bin/linux-$version"
	;;
parisc|mips|powerpc)
	installed_image_path="boot/vmlinux-$version"
	;;
*)
	installed_image_path="boot/vmlinuz-$version"
esac

BUILD_DEBUG=$(if_enabled_echo CONFIG_DEBUG_INFO Yes)

# Setup the directory structure
rm -rf "$tmpdir" "$dbg_dir" "$dtb_dir" debian/files
mkdir -m 755 -p "$dtb_dir/DEBIAN"
mkdir -p "$dtb_dir/boot/dtb-$version" "$dtb_dir/usr/share/doc/$dtb_packagename"
mkdir -m 755 -p "$tmpdir/DEBIAN"
mkdir -p "$tmpdir/lib" "$tmpdir/boot"

# Install the kernel
if [ "$ARCH" = "um" ] ; then
	mkdir -p "$tmpdir/usr/lib/uml/modules/$version" "$tmpdir/usr/bin" "$tmpdir/usr/share/doc/$packagename"
	cp System.map "$tmpdir/usr/lib/uml/modules/$version/System.map"
	cp $KCONFIG_CONFIG "$tmpdir/usr/share/doc/$packagename/config"
	gzip "$tmpdir/usr/share/doc/$packagename/config"
else
	cp System.map "$tmpdir/boot/System.map-$version"
	cp $KCONFIG_CONFIG "$tmpdir/boot/config-$version"
fi
cp arch/$ARCH/boot/Image "$tmpdir/$installed_image_path"

if is_enabled CONFIG_OF_EARLY_FLATTREE; then
	# Only some architectures with OF support have this target
	if [ -d "${srctree}/arch/$SRCARCH/boot/dts" ]; then
		if [ -n "$DTBS" ]; then
			$MAKE -f $srctree/Makefile INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install dtb-y="$DTBS"
		else
			$MAKE -f $srctree/Makefile INSTALL_DTBS_PATH="$tmpdir/usr/lib/$packagename" dtbs_install
		fi
	fi
fi

if is_enabled CONFIG_MODULES; then
	INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_install
	rm -f "$tmpdir/lib/modules/$version/build"
	rm -f "$tmpdir/lib/modules/$version/source"
	if [ "$ARCH" = "um" ] ; then
		mv "$tmpdir/lib/modules/$version"/* "$tmpdir/usr/lib/uml/modules/$version/"
		rmdir "$tmpdir/lib/modules/$version"
	fi
	if [ -n "$BUILD_DEBUG" ] ; then
		for module in $(find $tmpdir/lib/modules/ -name *.ko -printf '%P\n'); do
			module=lib/modules/$module
			mkdir -p $(dirname $dbg_dir/usr/lib/debug/$module)
			# only keep debug symbols in the debug file
			$OBJCOPY --only-keep-debug $tmpdir/$module $dbg_dir/usr/lib/debug/$module
			# strip original module from debug symbols
			$OBJCOPY --strip-debug $tmpdir/$module
			# then add a link to those
			$OBJCOPY --add-gnu-debuglink=$dbg_dir/usr/lib/debug/$module $tmpdir/$module
		done

		# resign stripped modules
		if is_enabled CONFIG_MODULE_SIG_ALL; then
			INSTALL_MOD_PATH="$tmpdir" $MAKE -f $srctree/Makefile modules_sign
		fi
	fi
fi

if grep -q '^CONFIG_OF=y' $KCONFIG_CONFIG ; then
	if [ -n "$DTBS" ]; then
		INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install dtb-y="$DTBS"
	else
		INSTALL_DTBS_PATH="$dtb_dir/boot/dtb-$version" $MAKE KBUILD_SRC= dtbs_install
	fi
fi

# Install the maintainer scripts
# Note: hook scripts under /etc/kernel are also executed by official Debian
# kernel packages, as well as kernel packages built using make-kpkg.
# make-kpkg sets $INITRD to indicate whether an initramfs is wanted, and
# so do we; recent versions of dracut and initramfs-tools will obey this.
debhookdir=${KDEB_HOOKDIR:-/etc/kernel}
for script in postinst postrm preinst prerm ; do
	mkdir -p "$tmpdir$debhookdir/$script.d"
	cat <<EOF > "$tmpdir/DEBIAN/$script"
#!/bin/bash

set -e

# Pass maintainer script parameters to hook scripts
export DEB_MAINT_PARAMS="\$*"

# Tell initramfs builder whether it's wanted
export INITRD=$(if_enabled_echo CONFIG_BLK_DEV_INITRD Yes No)

test -d $debhookdir/$script.d && run-parts --arg="$version" --arg="/$installed_image_path" $debhookdir/$script.d
exit 0
EOF
	chmod 755 "$tmpdir/DEBIAN/$script"
done


##
## Create sym link to kernel image
##
sed -e "s/set -e//g" -i $tmpdir/DEBIAN/postinst
sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/postinst
cat >> $tmpdir/DEBIAN/postinst <<EOT
if [ "\$(grep nand /proc/partitions)" != "" ] && [ "\$(grep mmc /proc/partitions)" = "" ]; then
   mkimage -A arm -O linux -T kernel -C none -a "0x40008000" -e "0x40008000" -n "Linux kernel" -d /$installed_image_path /boot/uImage  > /dev/null 2>&1
   cp /boot/uImage /tmp/uImage
   sync
   mountpoint -q /boot || mount /boot
   cp /tmp/uImage /boot/uImage
   rm -f /$installed_image_path
else
   ln -sf $(basename $installed_image_path) /boot/Image > /dev/null 2>&1 || mv /$installed_image_path /boot/Image
fi
exit 0
EOT

##
## FAT install workaround
##
sed -e "s/set -e//g" -i $tmpdir/DEBIAN/preinst
sed -e "s/exit 0//g" -i $tmpdir/DEBIAN/preinst
cat >> $tmpdir/DEBIAN/preinst <<EOT
# exit if we are running chroot
if [ "\$(stat -c %d:%i /)" != "\$(stat -c %d:%i /proc/1/root/.)" ]; then exit 0; fi

check_and_unmount (){
   boot_device=\$(mountpoint -d /boot)

   for file in /dev/* ; do
       CURRENT_DEVICE=\$(printf "%d:%d" \$(stat --printf="0x%t 0x%T" \$file))
       if [[ "\$CURRENT_DEVICE" = "\$boot_device" ]]; then
           boot_partition=\$file
           break
       fi
   done

   bootfstype=\$(blkid -s TYPE -o value \$boot_partition)
   if [ "\$bootfstype" = "vfat" ]; then
       rm -f /boot/System.map* /boot/config* /boot/vmlinuz* /boot/$image_name /boot/uImage
   fi
}
mountpoint -q /boot && check_and_unmount
EOT
echo "exit 0" >> $tmpdir/DEBIAN/preinst

if [ "$ARCH" != "um" ]; then
	if is_enabled CONFIG_MODULES; then
		deploy_kernel_headers debian/linux-headers
		create_package linux-headers-$version debian/linux-headers
	fi

	deploy_libc_headers debian/linux-libc-dev
	create_package linux-libc-dev debian/linux-libc-dev

	create_package "$dtb_packagename" "$dtb_dir" "dtb"
fi

create_package "$packagename" "$tmpdir"

if [ -n "$BUILD_DEBUG" ] ; then
	# Build debug package
	# Different tools want the image in different locations
	# perf
	mkdir -p $dbg_dir/usr/lib/debug/lib/modules/$version/
	cp vmlinux $dbg_dir/usr/lib/debug/lib/modules/$version/
	# systemtap
	mkdir -p $dbg_dir/usr/lib/debug/boot/
	ln -s ../lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/boot/vmlinux-$version
	# kdump-tools
	ln -s lib/modules/$version/vmlinux $dbg_dir/usr/lib/debug/vmlinux-$version
	create_package "$dbg_packagename" "$dbg_dir"
fi

exit 0
