Skip to content

Commit

Permalink
Update logic for removing efi boot target
Browse files Browse the repository at this point in the history
  • Loading branch information
adamkankovsky committed Feb 28, 2025
1 parent 12046bc commit aee06bd
Showing 1 changed file with 20 additions and 5 deletions.
25 changes: 20 additions & 5 deletions pyanaconda/modules/storage/bootloader/efi.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ def efi_config_dir(self):

@property
def _efi_config_dir(self):
return "efi/EFI/{}".format(conf.bootloader.efi_dir)
version_id = self._get_os_version_id()
return "efi/EFI/{}_{}".format(conf.bootloader.efi_dir, version_id)

def get_fw_platform_size(self):
try:
Expand Down Expand Up @@ -87,14 +88,27 @@ def efi_dir_as_efifs_dir(self):
ret = self._efi_config_dir.replace('efi/', '')
return "\\" + ret.replace('/', '\\')

def _get_os_version_id(self):
version_id = "default"
try:
with open("/etc/os-release") as f:
for line in f:
if line.startswith("VERSION_ID"):
version_id = line.split("=")[1].strip().strip('"')
break
except FileNotFoundError:
log.warning("/etc/os-release not found; using default version_id")
return version_id

def _add_single_efi_boot_target(self, partition):
boot_disk = partition.disk
boot_part_num = str(partition.parted_partition.number)
version_id = self._get_os_version_id()

create_method = "-C" if self.keep_boot_order else "-c" # pylint: disable=no-member

rc = self.efibootmgr(
create_method, "-w", "-L", get_product_name().split("-")[0], # pylint: disable=no-member
create_method, "-w", "-L", get_product_name().split("-")[0] + version_id, # pylint: disable=no-member
"-d", boot_disk.path, "-p", boot_part_num,
"-l", self.efi_dir_as_efifs_dir + self._efi_binary, # pylint: disable=no-member
root=conf.target.system_root
Expand All @@ -114,6 +128,7 @@ def remove_efi_boot_target(self):
# FIXME: Stop using replace_utf_decode_errors=True once
# https://github.com/rhboot/efibootmgr/pull/221/ is merged
buf = self.efibootmgr(capture=True, replace_utf_decode_errors=True)
version_id = self._get_os_version_id()
for line in buf.splitlines():
try:
(slot, _product) = line.split(None, 1)
Expand All @@ -122,7 +137,7 @@ def remove_efi_boot_target(self):
except ValueError:
continue

if _product == get_product_name().split("-")[0]: # pylint: disable=no-member
if _product == get_product_name().split("-")[0] + version_id: # pylint: disable=no-member
slot_id = slot[4:8]
# slot_id is hex, we can't use .isint and use this regex:
if not re.match("^[0-9a-fA-F]+$", slot_id):
Expand Down Expand Up @@ -150,8 +165,8 @@ def check(self):
return True

def install(self, args=None):
if not self.keep_boot_order: # pylint: disable=no-member
self.remove_efi_boot_target()
# if not self.keep_boot_order: # pylint: disable=no-member
# self.remove_efi_boot_target()
self.add_efi_boot_target()


Expand Down

0 comments on commit aee06bd

Please sign in to comment.