39 lines
1.2 KiB
Bash
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
|