void-packages/srcpkgs/linux-base/files/50-bootsize.postinst

39 lines
1.2 KiB
Bash

#!/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