From 867997c7d0d20e6a2266f1c8d366c210ab0f0b16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renaud=20M=C3=A9trich?= Date: Mon, 13 May 2024 17:16:47 +0200 Subject: [PATCH] grub2/efi: fix /boot/efi/EFI/redhat/grub.cfg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When upgrading a UEFI system with /boot on Software Raid, the /boot/efi/EFI/redhat/grub.cfg wrapper is created with unexpected content, causing the system to land into 'grub>' prompt upon upgrade completion. jira: https://issues.redhat.com/browse/RHEL-36186 Signed-off-by: Renaud Métrich --- .../actors/fixgrubefiwrapper/actor.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 repos/system_upgrade/el8toel9/actors/fixgrubefiwrapper/actor.py diff --git a/repos/system_upgrade/el8toel9/actors/fixgrubefiwrapper/actor.py b/repos/system_upgrade/el8toel9/actors/fixgrubefiwrapper/actor.py new file mode 100644 index 0000000000..aedb104e01 --- /dev/null +++ b/repos/system_upgrade/el8toel9/actors/fixgrubefiwrapper/actor.py @@ -0,0 +1,34 @@ +import os + +from leapp.actors import Actor +from leapp.exceptions import StopActorExecution +from leapp.models import FirmwareFacts, TransactionCompleted +from leapp.reporting import Report +from leapp.tags import IPUWorkflowTag, RPMUpgradePhaseTag +from leapp.libraries.stdlib import api, run + + +class FixGrubEFIWrapper(Actor): + """ + Update /boot/efi/EFI/redhat/grub.cfg on UEFI systems. + + See [RHEL-36186](https://issues.redhat.com/browse/RHEL-36186). + """ + + name = 'fix_grub_efi_wrapper' + consumes = (TransactionCompleted, FirmwareFacts) + produces = (Report,) + tags = (RPMUpgradePhaseTag, IPUWorkflowTag) + + def process(self): + ff = next(self.consume(FirmwareFacts), None) + if not ff: + raise StopActorExecution( + 'Could not identify system firmware', + details={'details': 'Actor did not receive FirmwareFacts message.'} + ) + + if ff.firmware == 'efi' and os.path.ismount('/boot/efi') and os.path.isfile('/boot/efi/EFI/redhat/grub.cfg'): + api.current_logger().info('Removing --root-dev-only if present.') + run(['/usr/bin/sed', '-i', r's/--root-dev-only\s*//', '/boot/efi/EFI/redhat/grub.cfg']) + api.current_logger().info('Removed --root-dev-only if present.')