diff options
author | Jonathan Bauer | 2018-05-09 14:12:48 +0200 |
---|---|---|
committer | Jonathan Bauer | 2018-05-09 14:12:48 +0200 |
commit | 734b03a129bea74d50eb457ddeb29c9228739011 (patch) | |
tree | e1196bb234e2fde7d172cb686e3b18c9f9054bce | |
parent | add simple kexec-reboot script (diff) | |
download | systemd-init-734b03a129bea74d50eb457ddeb29c9228739011.tar.gz systemd-init-734b03a129bea74d50eb457ddeb29c9228739011.tar.xz systemd-init-734b03a129bea74d50eb457ddeb29c9228739011.zip |
[kexec-reboot] bail if kexec is not found
-rwxr-xr-x | builder/modules.d/kexec-reboot/module-setup.sh | 2 | ||||
-rwxr-xr-x | builder/modules.d/kexec-reboot/scripts/kexec-reboot | 36 | ||||
-rwxr-xr-x | builder/modules.d/kexec-reboot/scripts/kexec-reboot.sh | 52 |
3 files changed, 53 insertions, 37 deletions
diff --git a/builder/modules.d/kexec-reboot/module-setup.sh b/builder/modules.d/kexec-reboot/module-setup.sh index 76df3e61..db41cce6 100755 --- a/builder/modules.d/kexec-reboot/module-setup.sh +++ b/builder/modules.d/kexec-reboot/module-setup.sh @@ -13,6 +13,6 @@ depends() { echo dnbd3-rootfs } install() { - inst_simple "$moddir/scripts/kexec-reboot" "/bin/kexec-reboot" + inst_simple "$moddir/scripts/kexec-reboot.sh" "/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 deleted file mode 100755 index ec41d32e..00000000 --- a/builder/modules.d/kexec-reboot/scripts/kexec-reboot +++ /dev/null @@ -1,36 +0,0 @@ -#!/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 diff --git a/builder/modules.d/kexec-reboot/scripts/kexec-reboot.sh b/builder/modules.d/kexec-reboot/scripts/kexec-reboot.sh new file mode 100755 index 00000000..709758bb --- /dev/null +++ b/builder/modules.d/kexec-reboot/scripts/kexec-reboot.sh @@ -0,0 +1,52 @@ +#!/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 SLXSRV="$(getarg slxsrv)" + local SLXBASE="$(getarg slxbase)" + local DIR="$(mktemp -d)" + + if [ -z "$SLXSRV" -o -z "$SLXBASE" -o -z "$DIR" ]; then + echo "Failed to construct download URL..." + return 1 + fi + for FILE in kernel initramfs-stage31; do + if ! download_retry "http://${SLXSRV}/${SLXBASE}/${FILE}" "${DIR}/${FILE}" ; then + echo "Failed to download ${FILE}." + return 1 + fi + done + + if ! kexec --load "${DIR}/kernel" --initrd "${DIR}/initramfs-stage31" --reuse-cmdline; then + echo "Failed to load kernel/initrd from ${DIR}" + return 1 + fi + return 0 +} + +if ! type -p kexec 2>/dev/null; then + echo "kexec binary not found, aborting..." + exit 1 +fi + +if kexec_load; then + kexec -e +else + echo "Failed to execute kexec --load" + exit 1 +fi |