diff options
author | Jonathan Bauer | 2018-02-15 13:20:33 +0100 |
---|---|---|
committer | Jonathan Bauer | 2018-02-15 13:20:33 +0100 |
commit | 510ae767a5abe5812ceab620ed6c5748cecaf36b (patch) | |
tree | f22caa34cb605f1116ca6a60a1b6e07d19d47c6c /core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_load | |
parent | [run-virt] relax /tmp mount detection regex (diff) | |
download | mltk-510ae767a5abe5812ceab620ed6c5748cecaf36b.tar.gz mltk-510ae767a5abe5812ceab620ed6c5748cecaf36b.tar.xz mltk-510ae767a5abe5812ceab620ed6c5748cecaf36b.zip |
[kexec-reboot] fast reboot via kexec
bound to ctrl-alt-del on ttys
TODO enable Xorg support
Diffstat (limited to 'core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_load')
-rwxr-xr-x | core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_load | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_load b/core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_load new file mode 100755 index 00000000..ca092b3e --- /dev/null +++ b/core/modules/kexec-reboot/data/opt/openslx/scripts/systemd-kexec_load @@ -0,0 +1,40 @@ +#!/bin/ash + +kexec=$(which kexec 2>/dev/null) +if [ -z "$kexec" ]; then + echo "Failed to find kexec binary in PATH. Exiting." + exit 1 +fi + +# 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() { + . /opt/openslx/config + local DIR="$(mktemp -d)" + + for FILE in kernel initramfs-stage31; do + if ! download_retry "http://${SLX_KCL_SERVERS}/${SLX_BASE_PATH}/${FILE}" "${DIR}/${FILE}" ; then + echo "Failed to download ${FILE}." + exit 1 + fi + done + + if ! kexec -l "${DIR}/kernel" --initrd "${DIR}/initramfs-stage31" --reuse-cmdline; then + echo "Failed to load kernel/initrd from ${DIR}" + exit 1 + fi +} + +kexec_load |