From bcd14e609c4bf8bfb02206b349409328ddc22939 Mon Sep 17 00:00:00 2001 From: Andrew Benson Date: Mon, 29 May 2023 13:55:46 -0500 Subject: [PATCH] linux-base: post-install hook for /boot freespace Co-authored-by: classabbyamp <5366828+classabbyamp@users.noreply.github.com> --- srcpkgs/linux-base/files/50-bootsize.postinst | 35 +++++++++++++++++++ srcpkgs/linux-base/template | 7 ++-- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 srcpkgs/linux-base/files/50-bootsize.postinst diff --git a/srcpkgs/linux-base/files/50-bootsize.postinst b/srcpkgs/linux-base/files/50-bootsize.postinst new file mode 100644 index 000000000000..6a313d638624 --- /dev/null +++ b/srcpkgs/linux-base/files/50-bootsize.postinst @@ -0,0 +1,35 @@ +#!/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 /boot) * $(stat -f -c %f /boot) )) + +vmlinuz=$(find /boot -maxdepth 1 -type f -name 'vmlinuz*' | xargs stat -c '%s' | sort -r | head -n1) +initramfs=$(find /boot -maxdepth 1 -type f -name 'initramfs*' | xargs stat -c '%s' | sort -r | head -n1) +totalneeded=$(( 2 * (initramfs + vmlinuz) )) + +# freespace for /boot is <= 2*(largest kernel + largest initrd) +if [ $freespace -le $totalneeded ]; then + if [ -z "$NO_COLOR" -a -t 1 -a -n "$(tput colors)" ]; then + # Set output to be bold and red, if supported + tput setaf 1 + tput bold + fi + cat <<-'ENDMSG' + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * WARNING: /boot has less than 100MB available. 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 [ -z "$NO_COLOR" -a -t 1 -a -n "$(tput colors)" ]; then + # Reset output back to normal + tput sgr0 + fi +fi diff --git a/srcpkgs/linux-base/template b/srcpkgs/linux-base/template index 249f21fa27f2..d04e7ad12bb6 100644 --- a/srcpkgs/linux-base/template +++ b/srcpkgs/linux-base/template @@ -1,8 +1,7 @@ # Template file for 'linux-base' pkgname=linux-base -version=2021.07.21 +version=2023.05.29 revision=1 -build_style=meta short_desc="Linux kernel base dependencies" maintainer="Érico Nogueira " license="Public Domain" @@ -16,3 +15,7 @@ case "$XBPS_TARGET_MACHINE" in depends="linux-firmware-amd linux-firmware-nvidia linux-firmware-network dracut" ;; esac + +do_install() { + vinstall ${FILESDIR}/50-bootsize.postinst 0755 etc/kernel.d/post-install 50-bootsize +}