diff --git a/crashkernel/crashkernel.service b/crashkernel/crashkernel.service index fc7ec4b..2a2cf4c 100644 --- a/crashkernel/crashkernel.service +++ b/crashkernel/crashkernel.service @@ -1,5 +1,8 @@ [Unit] -Description=load crashkernel +Description=load crashkernel if enabled +Wants=startup-crashmemory.service +After=startup-crashmemory.service +ConditionPathExists=/node/startup-crashmemory/available ConditionPathExists=/boot/bzImage.crash [Service] diff --git a/crashkernel/startup-crashmemory b/crashkernel/startup-crashmemory new file mode 100755 index 0000000..8ba5f2c --- /dev/null +++ b/crashkernel/startup-crashmemory @@ -0,0 +1,21 @@ +#! /bin/sh + +# Workaround for systemd versions missing certain ConditionXY= features. +# This helper is called by startup-crashmemory.service and creates +# /node/startup-crashmemory/available +# So other services can use +# Wants=startup-crashmemory.service +# After=startup-crashmemory.service +# ConditionPathExists=/node/startup-crashmemory/available +# to start a unit only if the memory can be used +# + +kexec_crash_size='0' +if [ -e /sys/kernel/kexec_crash_size ]; then + kexec_crash_size=$(cat /sys/kernel/kexec_crash_size) +fi +mkdir -p /node/startup-crashmemory +rm /node/startup-crashmemory/* 2>/dev/null +if [ "$kexec_crash_size" != "0" ] ; then + touch /node/startup-crashmemory/available +fi diff --git a/crashkernel/startup-crashmemory.service b/crashkernel/startup-crashmemory.service new file mode 100644 index 0000000..9f289c1 --- /dev/null +++ b/crashkernel/startup-crashmemory.service @@ -0,0 +1,6 @@ +[Unit] + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/sbin/startup-crashmemory