diff --git a/examples/ignition-kargs-helper b/examples/ignition-kargs-helper new file mode 100755 index 000000000..0e0bd802f --- /dev/null +++ b/examples/ignition-kargs-helper @@ -0,0 +1,46 @@ +#!/bin/bash + +# Requires sed & awk to be present + +set -euxo pipefail + +# Mount /boot. Note that we mount /boot but we don't unmount it because we +# are run in a systemd unit with MountFlags=slave so it is unmounted for us. +bootmnt=/mnt/boot_partition +mkdir -p ${bootmnt} +bootdev=/dev/disk/by-label/boot +mount -o rw ${bootdev} ${bootmnt} +grubcfg="${bootmnt}/grub/grub.cfg" + +kernelopts="$(grep kernelopts= <$grubcfg | sed \"s,kernelopts=,,g\")" + +while [[ $# -gt 0 ]] +do + key="$1" + + case $key in + --should-exist) + arg="$2" + # don't repeat the arg + if [[ ! " ${kernelopts[*]} " =~ " ${arg} " ]]; then + kernelopts="$kernelopts $arg " + fi + shift 2 + ;; + --should-not-exist) + kernelopts="$(echo "$kernelopts" | sed "s|$2||g")" + shift 2 + ;; + *) + echo "Unknown option" + exit 1 + ;; + esac +done + +# only apply the changes & reboot if changes have been made +if [[ "$kernelopts" != "$(grep kernelopts= <$grubcfg)" ]]; then + awk "{sub(/kernelopts=.*/,\"kernelopts=$kernelopts\"); print}" $grubcfg > /run/kargs_tmp && mv /run/kargs_tmp $grubcfg + + systemctl reboot +fi