diff options
author | Jonathan Bauer | 2018-05-09 12:18:08 +0200 |
---|---|---|
committer | Jonathan Bauer | 2018-05-09 12:18:08 +0200 |
commit | 0a4f45363ee3ca3190ccae98c02b2c0f74769ef7 (patch) | |
tree | 313b85c1d95204580125c93e984c0c080e48d639 | |
parent | [dnbd3-rootfs] add support for configurable kernel (diff) | |
download | systemd-init-0a4f45363ee3ca3190ccae98c02b2c0f74769ef7.tar.gz systemd-init-0a4f45363ee3ca3190ccae98c02b2c0f74769ef7.tar.xz systemd-init-0a4f45363ee3ca3190ccae98c02b2c0f74769ef7.zip |
add simple kexec-reboot script
-rwxr-xr-x | builder/modules.d/kexec-reboot/module-setup.sh | 18 | ||||
-rwxr-xr-x | builder/modules.d/kexec-reboot/scripts/kexec-reboot | 36 |
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 |