This condition should be a unusual, but it's possible if users are installing kdumpst right after a kernel upgrade, without rebooting for example. To achieve this, just check if the modules dir exists. Signed-off-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
57 lines
1.9 KiB
Bash
57 lines
1.9 KiB
Bash
load_kdumpst_config
|
|
|
|
# General comment of a caveat here: INITRD_installation() must be
|
|
# reentrant and only install the INITRD handlers if they're not
|
|
# already installed. This is necessary due to a kinda chicken-egg
|
|
# problem: the first time initramfs creation is attempted, we did't
|
|
# necessarily run the INITRD package installation hooks yet, hence
|
|
# we may be unable to properly create the initramfs image. "Easy"
|
|
# solution is to just try to install them always, it's cheap and not
|
|
# dependent of package install time magic.
|
|
|
|
# Parameter passing case - since this is invoked by the kdump-load
|
|
# script, we must be sure that the INITRD package is available.
|
|
if [ -n "$1" ]; then
|
|
|
|
if command -v INITRD 1>/dev/null; then
|
|
INITRD_installation
|
|
|
|
# Worth noticing that it is possible (though unlikely) that during
|
|
# the kdumpst package installation, users are running a previously
|
|
# uninstalled kernel. Imagine if the user upgrades the kernel, and
|
|
# then install kdumpst before rebooting. With that, creating an
|
|
# initrd fails here since it relies on "uname -r". To prevent such
|
|
# unhandled error, check if this kernel's modules directory exists.
|
|
|
|
if [ ! -d "/lib/modules/$1" ]; then
|
|
logger "kdumpst: no kernel modules dir; defer initrd creation to next boot"
|
|
exit 0
|
|
fi
|
|
|
|
create_initramfs_INITRD "$1"
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
while read -r line; do
|
|
# First case is the INITRD package installation.
|
|
if [[ "$line" != */vmlinuz ]]; then
|
|
INITRD_installation
|
|
exit 0
|
|
fi
|
|
|
|
# If reaching this point, we're installing/removing the kernel image.
|
|
VERSION="$(basename "$(dirname "$line")")"
|
|
|
|
# If the file exists, means it's an installation step;
|
|
# notice that alpm suppresses the leading '/'.
|
|
if [ -f /"$line" ]; then
|
|
INITRD_installation
|
|
create_initramfs_INITRD "$VERSION"
|
|
else
|
|
rm -f "${MOUNT_FOLDER}"/kdump-initrd-"$VERSION".img
|
|
|
|
fi
|
|
exit 0
|
|
done
|