Transition existing installations to unified GRUB configuration

The previous commits, especially b14117, unified the grub config
locations across all platforms. In brief, this means that in the
case of EFI, the config file in the EFI System Partition (ESP)
is now meant to be a small stub config file that will in turn
load the main configuration in /boot/grub2, which is used on
all other platforms as well. For new installations all this is
done by the Anaconda installer. But existing installations also
need to be adapted.
Add a %posttrans script to the grub2-common package that will,
if a non-unified installation is detected, transition it into
a unified one. This is done by moving the main grub.cfg file
from the ESP to /boot/grub2, creating minimal stub on the ESP
instead. Additionally, the grubenv file is also moved from the
ESP to /boot/grub2.
The detection of the non-unified installation is done by
checking if the grub.cfg on the ESP contains the 'configfile'
directive. If so, it is assumed the system has a unified
grub configuration.

Signed-off-by: Christian Kellner <christian@kellner.me>
This commit is contained in:
Christian Kellner 2021-02-22 16:53:39 +01:00
parent b141171629
commit a32aa179fa

View File

@ -344,6 +344,35 @@ mv -f /boot/grub2.tmp/*.mod \
/boot/grub2/ &&
rm -r /boot/grub2.tmp/ || :
%posttrans common
set -eu
EFI_HOME=/boot/efi/EFI/fedora
GRUB_HOME=/boot/grub2
if grep -q "configfile" ${EFI_HOME}/grub.cfg; then
exit 0 # already unified, nothing to do
fi
# create a stub grub2 config in EFI
BOOT_DEVICE=$(df -P /boot | awk 'END{print $1}')
BOOT_UUID=$(blkid -s UUID -o value "${BOOT_DEVICE}")
GRUB_DIR=$(grub2-mkrelpath ${GRUB_HOME})
cat << EOF > ${EFI_HOME}/grub.cfg.stb
search --no-floppy --fs-uuid --set=dev ${BOOT_UUID}
set prefix=(\$dev)${GRUB_DIR}
export \$prefix
configfile \$prefix/grub.cfg
EOF
cp -av ${EFI_HOME}/grubenv ${EFI_HOME}/grubenv.rpmsave
mv --force ${EFI_HOME}/grubenv ${GRUB_HOME}/grubenv
cp -av ${EFI_HOME}/grub.cfg ${EFI_HOME}/grub.cfg.rpmsave
cp -av ${EFI_HOME}/grub.cfg ${GRUB_HOME}/
mv ${EFI_HOME}/grub.cfg.stb ${EFI_HOME}/grub.cfg
%files common -f grub.lang
%dir %{_libdir}/grub/
%dir %{_datarootdir}/grub/