commit: 467c2e82e62b75b5cf9884f3d741926a65338f15
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 23 19:18:07 2019 +0000
Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Tue Jul 23 19:37:02 2019 +0000
URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=467c2e82
Add feature to check for free disk space early at genkernel start
To avoid preventable errors like running out of disk space while building
a new kernel, two new options, --check-free-disk-space-bootdir and
--check-free-disk-space-kerneloutputdir, were added.
When set, disabled by default, genkernel will check early before
starting to build kernel/initramfs for specified amount of free
disk space.
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>
doc/genkernel.8.txt | 8 +++
gen_cmdline.sh | 14 ++++
gen_determineargs.sh | 191 ++++++++++++++++++++++++++-------------------------
gen_funcs.sh | 79 +++++++++++++++++++++
genkernel | 2 +
genkernel.conf | 6 ++
6 files changed, 206 insertions(+), 94 deletions(-)
diff --git a/doc/genkernel.8.txt b/doc/genkernel.8.txt
index 72029d6..8650881 100644
--- a/doc/genkernel.8.txt
+++ b/doc/genkernel.8.txt
@@ -395,6 +395,14 @@ INTERNALS
*--cachedir*=<dir>::
Override the default cache location.
+*--check-free-disk-space-bootdir*=<MB>::
+ When set to a non-zero value, genkernel will check early on start for
+ specified amount of free disk space in megabyte in *BOOTDIR*.
+
+*--check-free-disk-space-kerneloutputdir*=<MB>::
+ When set to a non-zero value, genkernel will check early on start for
+ specified amount of free disk space in megabyte in *KERNEL_OUTPUTDIR*.
+
*--*[*no-*]*clear-cachedir*::
Clears or skips clearing all files in cache location on genkernel start.
diff --git a/gen_cmdline.sh b/gen_cmdline.sh
index a05e277..c93cffd 100755
--- a/gen_cmdline.sh
+++ b/gen_cmdline.sh
@@ -168,6 +168,12 @@ longusage() {
echo " --real-root=<foo> Specify a default for real_root="
echo " Internals"
echo " --cachedir=<dir> Override the default cache location"
+ echo " --check-free-disk-space-bootdir=<MB>"
+ echo " Check for specified amount of free disk
space in MB in BOOTDIR"
+ echo " at genkernel start"
+ echo " --check-free-disk-space-kerneloutputdir=<MB>"
+ echo " Check for specified amount of free disk
space in MB in"
+ echo " kernel outputdir at genkernel start"
echo " --clear-cachedir Clear genkernel's cache location on
start. Useful"
echo " if you want to force rebuild of
included tools"
echo " like BusyBox, DMRAID, GnuPG, LVM, MDADM
..."
@@ -601,6 +607,14 @@ parse_cmdline() {
CMD_POSTCLEAR=$(parse_optbool "$*")
print_info 3 "CMD_POSTCLEAR: ${CMD_POSTCLEAR}"
;;
+ --check-free-disk-space-bootdir=*)
+ CMD_CHECK_FREE_DISK_SPACE_BOOTDIR="${*#*=}"
+ print_info 3 "CMD_CHECK_FREE_DISK_SPACE_BOOTDIR:
${CMD_CHECK_FREE_DISK_SPACE_BOOTDIR}"
+ ;;
+ --check-free-disk-space-kerneloutputdir=*)
+ CMD_CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR="${*#*=}"
+ print_info 3
"CMD_CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR:
${CMD_CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR}"
+ ;;
--color|--no-color)
CMD_COLOR=$(parse_optbool "$*")
if isTrue "${CMD_COLOR}"
diff --git a/gen_determineargs.sh b/gen_determineargs.sh
index eb0cd74..69a6ee7 100755
--- a/gen_determineargs.sh
+++ b/gen_determineargs.sh
@@ -95,100 +95,103 @@ determine_real_args() {
print_info 4 "Resolving config file, command line, and arch default
settings."
- # Dest / Config File Command Line
Arch Default
- # ------------------ ------------
------------
- set_config_with_override STRING TMPDIR CMD_TMPDIR
"/var/tmp/genkernel"
- set_config_with_override STRING LOGFILE CMD_LOGFILE
"/var/log/genkernel.conf"
- set_config_with_override STRING KERNEL_DIR CMD_KERNEL_DIR
"${DEFAULT_KERNEL_SOURCE}"
- set_config_with_override BOOL KERNEL_SOURCES
CMD_KERNEL_SOURCES "yes"
- set_config_with_override STRING KNAME CMD_KERNNAME
"genkernel"
-
- set_config_with_override STRING COMPRESS_INITRD
CMD_COMPRESS_INITRD "$DEFAULT_COMPRESS_INITRD"
- set_config_with_override STRING COMPRESS_INITRD_TYPE
CMD_COMPRESS_INITRD_TYPE "$DEFAULT_COMPRESS_INITRD_TYPE"
- set_config_with_override STRING MAKEOPTS CMD_MAKEOPTS
"$DEFAULT_MAKEOPTS"
- set_config_with_override STRING NICE CMD_NICE
"10"
- set_config_with_override STRING KERNEL_MAKE
CMD_KERNEL_MAKE "$DEFAULT_KERNEL_MAKE"
- set_config_with_override STRING UTILS_CFLAGS
CMD_UTILS_CFLAGS "$DEFAULT_UTILS_CFLAGS"
- set_config_with_override STRING UTILS_MAKE CMD_UTILS_MAKE
"$DEFAULT_UTILS_MAKE"
- set_config_with_override STRING KERNEL_CC CMD_KERNEL_CC
"$DEFAULT_KERNEL_CC"
- set_config_with_override STRING KERNEL_LD CMD_KERNEL_LD
"$DEFAULT_KERNEL_LD"
- set_config_with_override STRING KERNEL_AS CMD_KERNEL_AS
"$DEFAULT_KERNEL_AS"
- set_config_with_override STRING UTILS_CC CMD_UTILS_CC
"$DEFAULT_UTILS_CC"
- set_config_with_override STRING UTILS_LD CMD_UTILS_LD
"$DEFAULT_UTILS_LD"
- set_config_with_override STRING UTILS_AS CMD_UTILS_AS
"$DEFAULT_UTILS_AS"
-
- set_config_with_override STRING CROSS_COMPILE
CMD_CROSS_COMPILE
- set_config_with_override STRING BOOTDIR CMD_BOOTDIR
"/boot"
- set_config_with_override STRING KERNEL_OUTPUTDIR
CMD_KERNEL_OUTPUTDIR "${KERNEL_DIR}"
- set_config_with_override STRING KERNEL_LOCALVERSION
CMD_KERNEL_LOCALVERSION
- set_config_with_override STRING MODPROBEDIR
CMD_MODPROBEDIR "/etc/modprobe.d"
-
- set_config_with_override BOOL SPLASH CMD_SPLASH
"no"
- set_config_with_override BOOL CLEAR_CACHEDIR
CMD_CLEAR_CACHEDIR "no"
- set_config_with_override BOOL POSTCLEAR CMD_POSTCLEAR
"no"
- set_config_with_override BOOL MRPROPER CMD_MRPROPER
"yes"
- set_config_with_override BOOL MENUCONFIG CMD_MENUCONFIG
"no"
- set_config_with_override BOOL GCONFIG CMD_GCONFIG
"no"
- set_config_with_override BOOL NCONFIG CMD_NCONFIG
"no"
- set_config_with_override BOOL XCONFIG CMD_XCONFIG
"no"
- set_config_with_override BOOL CLEAN CMD_CLEAN
"yes"
-
- set_config_with_override STRING MINKERNPACKAGE
CMD_MINKERNPACKAGE
- set_config_with_override STRING MODULESPACKAGE
CMD_MODULESPACKAGE
- set_config_with_override BOOL MODULEREBUILD
CMD_MODULEREBUILD "yes"
- set_config_with_override STRING KERNCACHE CMD_KERNCACHE
- set_config_with_override BOOL RAMDISKMODULES
CMD_RAMDISKMODULES "yes"
- set_config_with_override BOOL ALLRAMDISKMODULES
CMD_ALLRAMDISKMODULES "no"
- set_config_with_override STRING INITRAMFS_OVERLAY
CMD_INITRAMFS_OVERLAY
- set_config_with_override BOOL MOUNTBOOT CMD_MOUNTBOOT
"yes"
- set_config_with_override BOOL BUILD_STATIC CMD_STATIC
"no"
- set_config_with_override BOOL SAVE_CONFIG
CMD_SAVE_CONFIG "yes"
- set_config_with_override BOOL SYMLINK CMD_SYMLINK
"no"
- set_config_with_override STRING INSTALL_MOD_PATH
CMD_INSTALL_MOD_PATH
- set_config_with_override BOOL OLDCONFIG CMD_OLDCONFIG
"yes"
- set_config_with_override BOOL SANDBOX CMD_SANDBOX
"yes"
- set_config_with_override BOOL SSH CMD_SSH
"no"
- set_config_with_override STRING SSH_AUTHORIZED_KEYS_FILE
CMD_SSH_AUTHORIZED_KEYS_FILE "/etc/dropbear/authorized_keys"
- set_config_with_override STRING SSH_HOST_KEYS
CMD_SSH_HOST_KEYS "create"
- set_config_with_override BOOL STRACE CMD_STRACE
"no"
- set_config_with_override BOOL BCACHE CMD_BCACHE
"no"
- set_config_with_override BOOL LVM CMD_LVM
"no"
- set_config_with_override BOOL DMRAID CMD_DMRAID
"no"
- set_config_with_override BOOL ISCSI CMD_ISCSI
"no"
- set_config_with_override BOOL HYPERV CMD_HYPERV
"no"
- set_config_with_override STRING BOOTLOADER CMD_BOOTLOADER
"no"
- set_config_with_override BOOL BUSYBOX CMD_BUSYBOX
"yes"
- set_config_with_override STRING BUSYBOX_CONFIG
CMD_BUSYBOX_CONFIG
- set_config_with_override BOOL NFS CMD_NFS
"yes"
- set_config_with_override STRING MICROCODE CMD_MICROCODE
"all"
- set_config_with_override BOOL MICROCODE_INITRAMFS
CMD_MICROCODE_INITRAMFS "yes"
- set_config_with_override BOOL UNIONFS CMD_UNIONFS
"no"
- set_config_with_override BOOL NETBOOT CMD_NETBOOT
"no"
- set_config_with_override STRING REAL_ROOT CMD_REAL_ROOT
- set_config_with_override BOOL DISKLABEL CMD_DISKLABEL
"yes"
- set_config_with_override BOOL LUKS CMD_LUKS
"no"
- set_config_with_override BOOL GPG CMD_GPG
"no"
- set_config_with_override BOOL MDADM CMD_MDADM
"no"
- set_config_with_override STRING MDADM_CONFIG
CMD_MDADM_CONFIG
- set_config_with_override BOOL E2FSPROGS CMD_E2FSPROGS
"no"
- set_config_with_override BOOL XFSPROGS CMD_XFSPROGS
"no"
- set_config_with_override BOOL ZFS CMD_ZFS
"$(rootfs_type_is zfs)"
- set_config_with_override BOOL BTRFS CMD_BTRFS
"$(rootfs_type_is btrfs)"
- set_config_with_override BOOL VIRTIO CMD_VIRTIO
"no"
- set_config_with_override BOOL MULTIPATH CMD_MULTIPATH
"no"
- set_config_with_override BOOL FIRMWARE CMD_FIRMWARE
"no"
- set_config_with_override STRING FIRMWARE_DIR
CMD_FIRMWARE_DIR "/lib/firmware"
- set_config_with_override STRING FIRMWARE_FILES
CMD_FIRMWARE_FILES
- set_config_with_override BOOL FIRMWARE_INSTALL
CMD_FIRMWARE_INSTALL "no"
- set_config_with_override BOOL INTEGRATED_INITRAMFS
CMD_INTEGRATED_INITRAMFS "no"
- set_config_with_override BOOL WRAP_INITRD
CMD_WRAP_INITRD "no"
- set_config_with_override BOOL GENZIMAGE CMD_GENZIMAGE
"no"
- set_config_with_override BOOL KEYMAP CMD_KEYMAP
"yes"
- set_config_with_override BOOL DOKEYMAPAUTO
CMD_DOKEYMAPAUTO "no"
- set_config_with_override STRING BUSYBOX_CONFIG
CMD_BUSYBOX_CONFIG
- set_config_with_override STRING STRIP_TYPE CMD_STRIP_TYPE
"modules"
- set_config_with_override BOOL INSTALL CMD_INSTALL
"yes"
- set_config_with_override BOOL CLEANUP CMD_CLEANUP
"yes"
+ # Dest / Config File
Command Line Arch Default
+ # ------------------
------------ ------------
+ set_config_with_override STRING TMPDIR
CMD_TMPDIR "/var/tmp/genkernel"
+ set_config_with_override STRING LOGFILE
CMD_LOGFILE "/var/log/genkernel.conf"
+ set_config_with_override STRING KERNEL_DIR
CMD_KERNEL_DIR "${DEFAULT_KERNEL_SOURCE}"
+ set_config_with_override BOOL KERNEL_SOURCES
CMD_KERNEL_SOURCES "yes"
+ set_config_with_override STRING KNAME
CMD_KERNNAME "genkernel"
+
+ set_config_with_override STRING CHECK_FREE_DISK_SPACE_BOOTDIR
CMD_CHECK_FREE_DISK_SPACE_BOOTDIR
+ set_config_with_override STRING CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR
CMD_CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR
+
+ set_config_with_override STRING COMPRESS_INITRD
CMD_COMPRESS_INITRD "$DEFAULT_COMPRESS_INITRD"
+ set_config_with_override STRING COMPRESS_INITRD_TYPE
CMD_COMPRESS_INITRD_TYPE "$DEFAULT_COMPRESS_INITRD_TYPE"
+ set_config_with_override STRING MAKEOPTS
CMD_MAKEOPTS "$DEFAULT_MAKEOPTS"
+ set_config_with_override STRING NICE
CMD_NICE "10"
+ set_config_with_override STRING KERNEL_MAKE
CMD_KERNEL_MAKE "$DEFAULT_KERNEL_MAKE"
+ set_config_with_override STRING UTILS_CFLAGS
CMD_UTILS_CFLAGS "$DEFAULT_UTILS_CFLAGS"
+ set_config_with_override STRING UTILS_MAKE
CMD_UTILS_MAKE "$DEFAULT_UTILS_MAKE"
+ set_config_with_override STRING KERNEL_CC
CMD_KERNEL_CC "$DEFAULT_KERNEL_CC"
+ set_config_with_override STRING KERNEL_LD
CMD_KERNEL_LD "$DEFAULT_KERNEL_LD"
+ set_config_with_override STRING KERNEL_AS
CMD_KERNEL_AS "$DEFAULT_KERNEL_AS"
+ set_config_with_override STRING UTILS_CC
CMD_UTILS_CC "$DEFAULT_UTILS_CC"
+ set_config_with_override STRING UTILS_LD
CMD_UTILS_LD "$DEFAULT_UTILS_LD"
+ set_config_with_override STRING UTILS_AS
CMD_UTILS_AS "$DEFAULT_UTILS_AS"
+
+ set_config_with_override STRING CROSS_COMPILE
CMD_CROSS_COMPILE
+ set_config_with_override STRING BOOTDIR
CMD_BOOTDIR "/boot"
+ set_config_with_override STRING KERNEL_OUTPUTDIR
CMD_KERNEL_OUTPUTDIR "${KERNEL_DIR}"
+ set_config_with_override STRING KERNEL_LOCALVERSION
CMD_KERNEL_LOCALVERSION
+ set_config_with_override STRING MODPROBEDIR
CMD_MODPROBEDIR "/etc/modprobe.d"
+
+ set_config_with_override BOOL SPLASH
CMD_SPLASH "no"
+ set_config_with_override BOOL CLEAR_CACHEDIR
CMD_CLEAR_CACHEDIR "no"
+ set_config_with_override BOOL POSTCLEAR
CMD_POSTCLEAR "no"
+ set_config_with_override BOOL MRPROPER
CMD_MRPROPER "yes"
+ set_config_with_override BOOL MENUCONFIG
CMD_MENUCONFIG "no"
+ set_config_with_override BOOL GCONFIG
CMD_GCONFIG "no"
+ set_config_with_override BOOL NCONFIG
CMD_NCONFIG "no"
+ set_config_with_override BOOL XCONFIG
CMD_XCONFIG "no"
+ set_config_with_override BOOL CLEAN
CMD_CLEAN "yes"
+
+ set_config_with_override STRING MINKERNPACKAGE
CMD_MINKERNPACKAGE
+ set_config_with_override STRING MODULESPACKAGE
CMD_MODULESPACKAGE
+ set_config_with_override BOOL MODULEREBUILD
CMD_MODULEREBUILD "yes"
+ set_config_with_override STRING KERNCACHE
CMD_KERNCACHE
+ set_config_with_override BOOL RAMDISKMODULES
CMD_RAMDISKMODULES "yes"
+ set_config_with_override BOOL ALLRAMDISKMODULES
CMD_ALLRAMDISKMODULES "no"
+ set_config_with_override STRING INITRAMFS_OVERLAY
CMD_INITRAMFS_OVERLAY
+ set_config_with_override BOOL MOUNTBOOT
CMD_MOUNTBOOT "yes"
+ set_config_with_override BOOL BUILD_STATIC
CMD_STATIC "no"
+ set_config_with_override BOOL SAVE_CONFIG
CMD_SAVE_CONFIG "yes"
+ set_config_with_override BOOL SYMLINK
CMD_SYMLINK "no"
+ set_config_with_override STRING INSTALL_MOD_PATH
CMD_INSTALL_MOD_PATH
+ set_config_with_override BOOL OLDCONFIG
CMD_OLDCONFIG "yes"
+ set_config_with_override BOOL SANDBOX
CMD_SANDBOX "yes"
+ set_config_with_override BOOL SSH
CMD_SSH "no"
+ set_config_with_override STRING SSH_AUTHORIZED_KEYS_FILE
CMD_SSH_AUTHORIZED_KEYS_FILE "/etc/dropbear/authorized_keys"
+ set_config_with_override STRING SSH_HOST_KEYS
CMD_SSH_HOST_KEYS "create"
+ set_config_with_override BOOL STRACE
CMD_STRACE "no"
+ set_config_with_override BOOL BCACHE
CMD_BCACHE "no"
+ set_config_with_override BOOL LVM
CMD_LVM "no"
+ set_config_with_override BOOL DMRAID
CMD_DMRAID "no"
+ set_config_with_override BOOL ISCSI
CMD_ISCSI "no"
+ set_config_with_override BOOL HYPERV
CMD_HYPERV "no"
+ set_config_with_override STRING BOOTLOADER
CMD_BOOTLOADER "no"
+ set_config_with_override BOOL BUSYBOX
CMD_BUSYBOX "yes"
+ set_config_with_override STRING BUSYBOX_CONFIG
CMD_BUSYBOX_CONFIG
+ set_config_with_override BOOL NFS
CMD_NFS "yes"
+ set_config_with_override STRING MICROCODE
CMD_MICROCODE "all"
+ set_config_with_override BOOL MICROCODE_INITRAMFS
CMD_MICROCODE_INITRAMFS "yes"
+ set_config_with_override BOOL UNIONFS
CMD_UNIONFS "no"
+ set_config_with_override BOOL NETBOOT
CMD_NETBOOT "no"
+ set_config_with_override STRING REAL_ROOT
CMD_REAL_ROOT
+ set_config_with_override BOOL DISKLABEL
CMD_DISKLABEL "yes"
+ set_config_with_override BOOL LUKS
CMD_LUKS "no"
+ set_config_with_override BOOL GPG
CMD_GPG "no"
+ set_config_with_override BOOL MDADM
CMD_MDADM "no"
+ set_config_with_override STRING MDADM_CONFIG
CMD_MDADM_CONFIG
+ set_config_with_override BOOL E2FSPROGS
CMD_E2FSPROGS "no"
+ set_config_with_override BOOL XFSPROGS
CMD_XFSPROGS "no"
+ set_config_with_override BOOL ZFS
CMD_ZFS "$(rootfs_type_is zfs)"
+ set_config_with_override BOOL BTRFS
CMD_BTRFS "$(rootfs_type_is btrfs)"
+ set_config_with_override BOOL VIRTIO
CMD_VIRTIO "no"
+ set_config_with_override BOOL MULTIPATH
CMD_MULTIPATH "no"
+ set_config_with_override BOOL FIRMWARE
CMD_FIRMWARE "no"
+ set_config_with_override STRING FIRMWARE_DIR
CMD_FIRMWARE_DIR "/lib/firmware"
+ set_config_with_override STRING FIRMWARE_FILES
CMD_FIRMWARE_FILES
+ set_config_with_override BOOL FIRMWARE_INSTALL
CMD_FIRMWARE_INSTALL "no"
+ set_config_with_override BOOL INTEGRATED_INITRAMFS
CMD_INTEGRATED_INITRAMFS "no"
+ set_config_with_override BOOL WRAP_INITRD
CMD_WRAP_INITRD "no"
+ set_config_with_override BOOL GENZIMAGE
CMD_GENZIMAGE "no"
+ set_config_with_override BOOL KEYMAP
CMD_KEYMAP "yes"
+ set_config_with_override BOOL DOKEYMAPAUTO
CMD_DOKEYMAPAUTO "no"
+ set_config_with_override STRING BUSYBOX_CONFIG
CMD_BUSYBOX_CONFIG
+ set_config_with_override STRING STRIP_TYPE
CMD_STRIP_TYPE "modules"
+ set_config_with_override BOOL INSTALL
CMD_INSTALL "yes"
+ set_config_with_override BOOL CLEANUP
CMD_CLEANUP "yes"
local can_write_log=no
if [ -w "${LOGFILE}" ]
diff --git a/gen_funcs.sh b/gen_funcs.sh
index 3c91372..94bf550 100755
--- a/gen_funcs.sh
+++ b/gen_funcs.sh
@@ -1462,6 +1462,85 @@ rootfs_type_is() {
fi
}
+check_disk_space_requirements() {
+ local number_pattern='^[1-9]{1}[0-9]+$'
+ local available_free_disk_space=
+
+ # Start check for BOOTDIR
+ local need_to_check=yes
+
+ if [ -z "${CHECK_FREE_DISK_SPACE_BOOTDIR}" -o
"${CHECK_FREE_DISK_SPACE_BOOTDIR}" = '0' ]
+ then
+ need_to_check=no
+ fi
+
+ if isTrue "${need_to_check}" && ! isTrue "${CMD_INSTALL}"
+ then
+ need_to_check=no
+ fi
+
+ if isTrue "${need_to_check}"
+ then
+ if [[ ! "${CHECK_FREE_DISK_SPACE_BOOTDIR}" =~ ${number_pattern}
]]
+ then
+ gen_die "--check-free-disk-space-bootdir value
'${CHECK_FREE_DISK_SPACE_BOOTDIR}' is not a valid number!"
+ fi
+
+ available_free_disk_space=$(unset POSIXLY_CORRECT && df -BM
"${BOOTDIR}" | awk '$3 ~ /[0-9]+/ { print $4 }')
+ if [ -n "${available_free_disk_space}" ]
+ then
+ print_info 2 '' 1 0
+ print_info 2 "Checking for at least
${CHECK_FREE_DISK_SPACE_BOOTDIR} MB free disk space in '${BOOTDIR}' ..."
+ print_info 5 "df reading: ${available_free_disk_space}"
+
+ available_free_disk_space=${available_free_disk_space%M}
+ if [ ${available_free_disk_space} -lt
${CHECK_FREE_DISK_SPACE_BOOTDIR} ]
+ then
+ gen_die "${CHECK_FREE_DISK_SPACE_BOOTDIR} MB
free disk space is required in '${BOOTDIR}' but only
${available_free_disk_space} MB is available!"
+ fi
+ else
+ print_warning 1 "Invalid df value; Skipping free disk
space check for '${BOOTDIR}' ..."
+ fi
+ fi
+
+ # Start check for kernel outputdir
+ need_to_check=yes
+
+ if [ -z "${CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR}" -o
"${CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR}" = '0' ]
+ then
+ need_to_check=no
+ fi
+
+ if isTrue "${need_to_check}" && ! isTrue "${BUILD_KERNEL}"
+ then
+ need_to_check=no
+ fi
+
+ if isTrue "${need_to_check}"
+ then
+ if [[ ! "${CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR}" =~
${number_pattern} ]]
+ then
+ gen_die "--check-free-disk-space-kerneloutputdir value
'${CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR}' is not a valid number!"
+ fi
+
+ available_free_disk_space=$(unset POSIXLY_CORRECT && df -BM
"${KERNEL_OUTPUTDIR}" | awk '$3 ~ /[0-9]+/ { print $4 }')
+ if [ -n "${available_free_disk_space}" ]
+ then
+ print_info 2 '' 1 0
+ print_info 2 "Checking for at least
${CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR} MB free disk space in
'${KERNEL_OUTPUTDIR}' ..."
+ print_info 5 "df reading: ${available_free_disk_space}"
+
+ available_free_disk_space=${available_free_disk_space%M}
+ if [ ${available_free_disk_space} -lt
${CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR} ]
+ then
+ gen_die
"${CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR} MB free disk space is required in
'${BOOTDIR}' but only ${available_free_disk_space} MB is available!"
+ fi
+ else
+ print_warning 1 "Invalid df value; Skipping free disk
space check for '${KERNEL_OUTPUTDIR}' ..."
+ fi
+ fi
+}
+
check_distfiles() {
local source_files=( $(compgen -A variable |grep '^GKPKG_.*SRCTAR$') )
diff --git a/genkernel b/genkernel
index d5e9b06..0368acd 100755
--- a/genkernel
+++ b/genkernel
@@ -197,6 +197,8 @@ fi
isTrue "${CMD_INSTALL}" && make_bootdir_writable
+check_disk_space_requirements
+
if isTrue "${BUILD_KERNEL}" && ! isTrue "${KERNCACHE_IS_VALID}"
then
print_info 1 '' 1 0
diff --git a/genkernel.conf b/genkernel.conf
index b2af4de..0c1a2e7 100644
--- a/genkernel.conf
+++ b/genkernel.conf
@@ -52,6 +52,12 @@ NOCOLOR="false"
# Clear all tmp files and caches after genkernel has run
#POSTCLEAR="no"
+# Check for x MB free disk space in BOOTDIR
+#CHECK_FREE_DISK_SPACE_BOOTDIR=0
+
+# Check for x MB free disk space in kernel outputdir
+#CHECK_FREE_DISK_SPACE_KERNELOUTPUTDIR=0
+
# Genkernel uses an independent configuration for MAKEOPTS, and does not source
# /etc/portage/make.conf . You can override the default setting by uncommenting
# and tweaking the following line. Default setting is set up by