summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Bauer2018-05-09 14:12:48 +0200
committerJonathan Bauer2018-05-09 14:12:48 +0200
commit734b03a129bea74d50eb457ddeb29c9228739011 (patch)
treee1196bb234e2fde7d172cb686e3b18c9f9054bce
parentadd simple kexec-reboot script (diff)
downloadsystemd-init-734b03a129bea74d50eb457ddeb29c9228739011.tar.gz
systemd-init-734b03a129bea74d50eb457ddeb29c9228739011.tar.xz
systemd-init-734b03a129bea74d50eb457ddeb29c9228739011.zip
[kexec-reboot] bail if kexec is not found
-rwxr-xr-xbuilder/modules.d/kexec-reboot/module-setup.sh2
-rwxr-xr-xbuilder/modules.d/kexec-reboot/scripts/kexec-reboot36
-rwxr-xr-xbuilder/modules.d/kexec-reboot/scripts/kexec-reboot.sh52
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