#!/bin/sh set -e COMMAND="$1" KVER="$2" ESP_MOUNTPOINT=/boot/efi EFI_DIR=$(efibootmgr -v 2>/dev/null | awk ' /^BootCurrent:/ { current=$2; } /^Boot....\* .*xen\.efi/ { if ("Boot" current "*" == $1) { sub(".*File\\(", ""); sub("\\\\xen.efi\\).*", ""); gsub("\\\\", "/"); print; } }') if [ -z "$EFI_DIR" ]; then EFI_DIR="$ESP_MOUNTPOINT/EFI/qubes" else EFI_DIR="$ESP_MOUNTPOINT$EFI_DIR" fi if [ ! -r "$EFI_DIR/xen.cfg" ]; then # non-EFI system exit 0; fi case "$COMMAND" in add) if ! fgrep -q "[${KVER}]" $EFI_DIR/xen.cfg; then # take the default section and use it as a template for the new entry awk -F = --assign "kver=${KVER}" ' /^\[/ { # section header - previous section (if any) ended # if default section already processed, that is all if (in_default) exit; in_global=0; in_default=0; } /\[global\]/ { in_global=1; } /^\[/ { if ("[" default_name "]" == $0) { in_default=1; print "[" kver "]"; next; } } /^default=/ { if (in_global) default_name=$2; } /^kernel=/ { if (in_default) { sub("=[^ ]*", "=vmlinuz-" kver); } } /^ramdisk=/ { if (in_default) { sub("=[^ ]*", "=initramfs-" kver ".img"); } } { if (in_default) { print; } }' $EFI_DIR/xen.cfg >> $EFI_DIR/xen.cfg # then change the default sed -e "s/default=.*/default=$KVER/" -i $EFI_DIR/xen.cfg fi cp "/boot/vmlinuz-$KVER" "$EFI_DIR/" if [ -e "/boot/initramfs-${KVER}.img" ]; then cp -f "/boot/initramfs-${KVER}.img" "$EFI_DIR/" else dracut -f "$EFI_DIR/initramfs-${KVER}.img" "$KVER" fi ;; remove) # don't care about changing default= line - yum should prevent removing # currently running kernel if [ -r $EFI_DIR/xen.cfg ]; then awk -F = --assign "kver=${KVER}" ' /^\[/ { # section header - previous section (if any) ended in_current=0; } /^\[/ { if ($0 == "[" kver "]") in_current=1; } { if (!in_current) { print; } }' $EFI_DIR/xen.cfg > $EFI_DIR/xen.cfg.new mv $EFI_DIR/xen.cfg.new $EFI_DIR/xen.cfg fi rm -f "$EFI_DIR/initramfs-${KVER}.img" rm -f "$EFI_DIR/vmlinuz-${KVER}" ;; esac