#!/bin/sh

if [ ! -z ${kernel:+x} ]; then
    vmlinuz="/boot/vmlinuz-$kernel"
    initrd="--initrd=/boot/initrd.img-$kernel"
else
    vmlinuz="$(realpath /vmlinuz)"
    initrd="--initrd=$(realpath /initrd.img)"
fi

kargs="$vmlinuz $initrd"
cmdline=$(cat /proc/cmdline)
kexec_args=""

# Secure boot capable systems need an additional acpi_rsdp argument and kexec arg
if [ -e /sys/firmware/efi/systab ]; then
	acpi_rsdp="acpi_rsdp=$(grep -m1 ^ACPI /sys/firmware/efi/systab | cut -f2- -d=)"
	if ! grep -q "$acpi_rsdp" /proc/cmdline; then
		cmdline="$cmdline $acpi_rsdp"
	fi
	kexec_args="-s"
fi

# change BOOT_IMAGE argument in case it points to old kernel
cmdline=$(echo "${cmdline}" | sed -e "s|BOOT_IMAGE=/boot/vmlinuz-$(uname -r) |BOOT_IMAGE=$vmlinuz |g" )

kexec $kexec_args -t bzImage -l $kargs --append="$cmdline $*"
systemctl kexec
