#!/bin/sh
#
# Kernel hook to check for filled /boot partitions
#
# Arguments passed to this script: $1 pkgname, $2 version.
#
PKGNAME="$1"
VERSION="$2"

# freespace = blocksize * freeblocks
freespace=$(( $(stat -f -c '%S * %f' /boot) ))

vmlinuz=$(find /boot -maxdepth 1 -type f -name 'vmlinuz*' -printf '%s\n' | sort -n | tail -n1)
initramfs=$(find /boot -maxdepth 1 -type f -name 'initramfs*' -printf '%s\n' | sort -n | tail -n1)
totalneeded=$(( 2 * (initramfs + vmlinuz) ))

# freespace for /boot is <=  2*(largest kernel + largest initrd)
if [ $freespace -le $totalneeded ]; then
	color=false
	if [ -z "$NO_COLOR" ] && [ -t 1 ]; then
		# Set output to be bold and red, if supported
		color=true
		tput setaf 1
		tput bold
	fi
	cat <<-'ENDMSG'
	 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	 * WARNING: /boot may not have enough space for the next kernel. Use     *
	 * `vkpurge` to ensure there will be sufficient space to write the next  *
	 * kernel and generate its initrd. Your system may otherwise become      *
	 * unbootable.                                                           *
	 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
	ENDMSG
	if $color; then
		# Reset output back to normal
		tput sgr0
	fi
fi
