[kexec-tools] Port check_config from rhel6
Dave Young
yangrr at fedoraproject.org
Thu Jun 14 02:10:46 UTC 2012
commit 836815ff670ebcc52d2ec99f93d7f7577a4cc3b3
Author: Dave Young <dyoung at redhat.com>
Date: Thu Jun 14 09:57:27 2012 +0800
Port check_config from rhel6
Resolves: bz805778
Simply the logic and optimize the code
Move check_exist, check_executable, rebuild_initrd to functions
remove BOOTDIR which is not used
Note: There might be modules which are newer than last built initramfs,
we always rebuild the initramfs when extra_moduels= is specified.
Signed-off-by: Dave Young <dyoung at redhat.com>
kdumpctl | 106 ++++++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 69 insertions(+), 37 deletions(-)
---
diff --git a/kdumpctl b/kdumpctl
index 5833422..a2587ab 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -1,10 +1,6 @@
#! /bin/sh
KEXEC=/sbin/kexec
-# Will be different for ia64, for example. For now, that architecture isn't
-# supported. Code needs to be added here when we do.
-BOOTDIR="/boot"
-
KDUMP_KERNELVER=""
KDUMP_COMMANDLINE=""
KEXEC_ARGS=""
@@ -47,8 +43,43 @@ function save_core()
fi
}
+function rebuild_initrd()
+{
+ $MKDUMPRD $kdump_initrd $kdump_kver
+ if [ $? != 0 ]; then
+ echo "Failed to run mkdumprd"
+ $LOGGER "mkdumprd: failed to make kdump initrd"
+ return 1
+ fi
+}
+
+#$1: the files to be checked with IFS=' '
+function check_exist()
+{
+ for file in $1; do
+ if [ ! -f "$file" ]; then
+ echo -n "Error: $file not found."; echo
+ return 1
+ fi
+ done
+}
+
+#$1: the files to be checked with IFS=' '
+function check_executable()
+{
+ for file in $1; do
+ if [ ! -x "$file" ]; then
+ echo -n "Error: $file is not executable."; echo
+ return 1
+ fi
+ done
+}
+
function check_config()
{
+ local extra_modules modified_files=""
+ local force_rebuild=0
+
if [ -z "$KDUMP_KERNELVER" ]; then
kdump_kver=`uname -r`
else
@@ -58,45 +89,46 @@ function check_config()
kdump_kernel="${KDUMP_BOOTDIR}/${KDUMP_IMG}-${kdump_kver}${KDUMP_IMG_EXT}"
kdump_initrd="${KDUMP_BOOTDIR}/initramfs-${kdump_kver}kdump.img"
- if [ ! -f $kdump_kernel ]; then
- echo -n "No kdump kernel image found."; echo
- echo "Tried to locate ${kdump_kernel}"
- return 0
- fi
+ #will rebuild every time if extra_modules are specified
+ extra_modules=`grep ^extra_modules $KDUMP_CONFIG_FILE`
+ [ -n "$extra_modules" ] && force_rebuild=1
- if [ ! -f $kdump_initrd ]; then
- echo -n "No kdump initial ramdisk found."; echo
- echo "Rebuilding $kdump_initrd"
- $MKDUMPRD $kdump_initrd $kdump_kver
- if [ $? != 0 ]; then
- echo "Failed to run mkdumprd"
- $LOGGER "mkdumprd: failed to make kdump initrd"
- exit 1
- fi
- return 0
+ #check to see if dependent files has been modified
+ #since last build of the image file
+ if [ -f $kdump_initrd ]; then
+ image_time=`stat -c "%Y" $kdump_initrd 2>/dev/null`
+ else
+ image_time=0
fi
- #check to see if config file has been modified after
- #last build of the image file
- config_time=0
- if [ -f $KDUMP_CONFIG_FILE ]; then
- config_time=`stat -c "%Y" $KDUMP_CONFIG_FILE`
- fi
- kernel_time=`stat -c "%Y" $kdump_kernel`
- image_time=`stat -c "%Y" $kdump_initrd`
-
- if [ "$config_time" -gt "$image_time" ] ||
- [ "$kernel_time" -gt "$image_time" ]; then
- echo "Detected $KDUMP_CONFIG_FILE or $kdump_kernel change"
- echo "Rebuilding $kdump_initrd"
- $MKDUMPRD $kdump_initrd $kdump_kver
- if [ $? != 0 ]; then
- echo "Failed to run mkdumprd"
- $LOGGER "mkdumprd: failed to make kdump initrd"
- return 1
+
+ EXTRA_BINS=`grep ^extra_bins $KDUMP_CONFIG_FILE | cut -d\ -f2-`
+ files="$KDUMP_CONFIG_FILE $kdump_kernel $EXTRA_BINS"
+
+ check_exist "$files" && check_executable "$EXTRA_BINS"
+ [ $? -ne 0 ] && return 1
+
+ for file in $files; do
+ time_stamp=`stat -c "%Y" $file`
+ if [ "$time_stamp" -gt "$image_time" ]; then
+ modified_files="$modified_files $file"
fi
+ done
+
+ if [ $image_time -eq 0 ]; then
+ echo -n "No kdump initial ramdisk found."; echo
+ elif [ "$force_rebuild" -ne 0 ]; then
+ echo -n "Force rebuild $kdump_initrd"; echo
+ elif [ -n "$modified_files" ]; then
+ echo "Detected change(s) the following file(s):"
+ echo -n " "; echo "$modified_files" | sed 's/\s/\n /g'
+ else
+ return 0
fi
+ echo "Rebuilding $kdump_initrd"
+ rebuild_initrd
+ return $?
}
# This function check iomem and determines if we have more than
More information about the scm-commits
mailing list