c56c4a7a9d
Even if EFI directory is present it may not be populated. kernel-install part care specifically about xen.cfg file, so check it explicitly. If grub2-efi is in use, the file wont be there and the script isn't supposed to do anything.
111 lines
3.1 KiB
Bash
Executable File
111 lines
3.1 KiB
Bash
Executable File
#!/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
|