28040b73c9
Xen PV and PVH guest use direct kernel boot and may use 'pygrub' tool to parse guest's grub config. The tool is incompatible with BLS and thus 99-grub-mkconfig.install disables it. The problem is observed with HVM guests which are 'normal' VMs and don't require pygrub compatibility. E.g. legacy AWS instance types are of this kind. Disabling BLS for them is undesired and unjustified. Luckily, kernel driver for Xen provides '/sys/hypervisor/guest_type' interface telling us which type of guest are we running in. Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
62 lines
2.0 KiB
Bash
Executable File
62 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
# PV and PVH Xen DomU guests boot with pygrub that doesn't have BLS support,
|
|
# also Xen Dom0 use the menuentries from 20_linux_xen and not the ones from
|
|
# 10_linux. So BLS support needs to be disabled for both Xen Dom0 and DomU.
|
|
if [[ -e /sys/hypervisor/type ]] && grep -q "^xen$" /sys/hypervisor/type; then
|
|
if [ ! -e /sys/hypervisor/guest_type ] || ! grep -q "^HVM$" /sys/hypervisor/guest_type; then
|
|
RUN_MKCONFIG=true
|
|
DISABLE_BLS=true
|
|
fi
|
|
fi
|
|
|
|
ARCH=$(uname -m)
|
|
# Older ppc64le OPAL firmware (petitboot version < 1.8.0) don't have BLS support
|
|
# so grub2-mkconfig has to be run to generate a config with menuentry commands.
|
|
if [[ $ARCH = "ppc64le" ]] && [ -d /sys/firmware/opal ]; then
|
|
|
|
petitboot_path="/sys/firmware/devicetree/base/ibm,firmware-versions/petitboot"
|
|
|
|
if test -e ${petitboot_path}; then
|
|
read -r -d '' petitboot_version < ${petitboot_path}
|
|
petitboot_version="$(echo ${petitboot_version//v})"
|
|
major_version="$(echo ${petitboot_version} | cut -d . -f1)"
|
|
minor_version="$(echo ${petitboot_version} | cut -d . -f2)"
|
|
|
|
if test -z ${petitboot_version} || test ${major_version} -lt 1 || \
|
|
test ${major_version} -eq 1 -a ${minor_version} -lt 8; then
|
|
RUN_MKCONFIG=true
|
|
fi
|
|
else
|
|
RUN_MKCONFIG=true
|
|
fi
|
|
fi
|
|
|
|
if [[ $DISABLE_BLS = "true" ]]; then
|
|
if grep -q '^GRUB_ENABLE_BLSCFG="*true"*\s*$' /etc/default/grub; then
|
|
sed -i 's/^GRUB_ENABLE_BLSCFG=.*/GRUB_ENABLE_BLSCFG=false/' /etc/default/grub
|
|
fi
|
|
fi
|
|
|
|
# A traditional grub configuration file needs to be generated only in the case when
|
|
# the bootloaders are not capable of populating a menu entry from the BLS fragments.
|
|
if [[ $RUN_MKCONFIG != "true" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
[[ -f /etc/default/grub ]] && . /etc/default/grub
|
|
|
|
COMMAND="$1"
|
|
|
|
case "$COMMAND" in
|
|
add|remove)
|
|
grub2-mkconfig --no-grubenv-update -o /boot/grub2/grub.cfg >& /dev/null
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|