summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Bauer2018-05-09 12:18:08 +0200
committerJonathan Bauer2018-05-09 12:18:08 +0200
commit0a4f45363ee3ca3190ccae98c02b2c0f74769ef7 (patch)
tree313b85c1d95204580125c93e984c0c080e48d639
parent[dnbd3-rootfs] add support for configurable kernel (diff)
downloadsystemd-init-0a4f45363ee3ca3190ccae98c02b2c0f74769ef7.tar.gz
systemd-init-0a4f45363ee3ca3190ccae98c02b2c0f74769ef7.tar.xz
systemd-init-0a4f45363ee3ca3190ccae98c02b2c0f74769ef7.zip
add simple kexec-reboot script
-rwxr-xr-xbuilder/modules.d/kexec-reboot/module-setup.sh18
-rwxr-xr-xbuilder/modules.d/kexec-reboot/scripts/kexec-reboot36
2 files changed, 54 insertions, 0 deletions
diff --git a/builder/modules.d/kexec-reboot/module-setup.sh b/builder/modules.d/kexec-reboot/module-setup.sh
new file mode 100755
index 00000000..76df3e61
--- /dev/null
+++ b/builder/modules.d/kexec-reboot/module-setup.sh
@@ -0,0 +1,18 @@
+#!/usr/bin/env bash
+
+check() {
+ # Tell dracut that this module should only be included if it is required
+ # explicitly.
+ if ! which kexec 2>/dev/null; then
+ derror "Failed to find kexec, please install it when using this module."
+ return 1
+ fi
+ return 255
+}
+depends() {
+ echo dnbd3-rootfs
+}
+install() {
+ inst_simple "$moddir/scripts/kexec-reboot" "/bin/kexec-reboot"
+ inst_multiple kexec
+}
diff --git a/builder/modules.d/kexec-reboot/scripts/kexec-reboot b/builder/modules.d/kexec-reboot/scripts/kexec-reboot
new file mode 100755
index 00000000..ec41d32e
--- /dev/null
+++ b/builder/modules.d/kexec-reboot/scripts/kexec-reboot
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+# download_retry <url> <path>
+download_retry() {
+ [ $# -ne 2 ] && return 1
+ for TIMEOUT in 1 1 2 3 END; do
+ [ "x$TIMEOUT" = "xEND" ] && break
+ if wget -T 2 -O "$2" "$1"; then
+ return 0
+ break
+ fi
+ sleep $TIMEOUT
+ done
+ return 1
+}
+
+kexec_load() {
+ . /lib/dracut-lib.sh
+
+ local DIR="$(mktemp -d)"
+
+ for FILE in kernel initramfs-stage31; do
+ if ! download_retry "http://$(getarg slxsrv)/$(getarg slxbase)/${FILE}" "${DIR}/${FILE}" ; then
+ echo "Failed to download ${FILE}."
+ return 1
+ fi
+ done
+
+ if ! /bin/kexec -l "${DIR}/kernel" --initrd "${DIR}/initramfs-stage31" --reuse-cmdline; then
+ echo "Failed to load kernel/initrd from ${DIR}"
+ return 1
+ fi
+ return 0
+}
+
+kexec_load && /bin/kexec -e