If the system is configured fence kdump, we need to update kdump
initramfs if cluster or fence_kdump config is newer.
In RHEL7, cluster config is no longer keeping locally but stored
remotely. Fortunately we can use a pcs tool to retrieve the xml based
config and parse the last changed time from that.
/etc/sysconfig/fence_kdump is used to configure runtime arguments to
fence_kdump_send. So We have to pass the arguments to 2nd kernel.
When cluster config or /etc/sysconfig/fence_kdump is newer than local
kdump initramfs, we must rebuild initramfs to adapt changes in cluster.
For example:
Detected change(s) the following file(s):
cluster-cib /etc/sysconfig/fence_kdump
Rebuilding /boot/initramfs-xxxkdump.img
[..]
Signed-off-by: WANG Chao <chaowang(a)redhat.com>
---
kdumpctl | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/kdumpctl b/kdumpctl
index 46ae633..abcdffd 100755
--- a/kdumpctl
+++ b/kdumpctl
@@ -132,6 +132,25 @@ function check_config()
return 0
}
+# check_fence_kdump <image timestamp>
+# return 0 if fence_kdump is configured and kdump initrd needs to be rebuilt
+function check_fence_kdump()
+{
+ local image_time=$1
+ local cib_time
+
+ is_fence_kdump || return 1
+
+ cib_time=`pcs cluster cib | xmllint --xpath 'string(/cib/@cib-last-written)' - |
\
+ xargs -0 date +%s --date`
+
+ if [ -z $cib_time -o $cib_time -le $image_time ]; then
+ return 1
+ fi
+
+ return 0
+}
+
function check_rebuild()
{
local extra_modules modified_files=""
@@ -167,6 +186,9 @@ function check_rebuild()
image_time=0
fi
+ #also rebuild when cluster conf is changed and fence kdump is enabled.
+ check_fence_kdump $image_time && modified_files="cluster-cib"
+
EXTRA_BINS=`grep ^kdump_post $KDUMP_CONFIG_FILE | cut -d\ -f2`
CHECK_FILES=`grep ^kdump_pre $KDUMP_CONFIG_FILE | cut -d\ -f2`
EXTRA_BINS="$EXTRA_BINS $CHECK_FILES"
@@ -174,6 +196,10 @@ function check_rebuild()
EXTRA_BINS="$EXTRA_BINS $CHECK_FILES"
files="$KDUMP_CONFIG_FILE $kdump_kernel $EXTRA_BINS"
+ if [ -f $FENCE_KDUMP_CONFIG ]; then
+ files="$files $FENCE_KDUMP_CONFIG"
+ fi
+
check_exist "$files" && check_executable "$EXTRA_BINS"
[ $? -ne 0 ] && return 1
--
1.8.4.2