mirror of https://git.48k.eu/ogclient
utils: consolidate code to find efi loader
Add find_windows_efi_loader and find_linux_efi_loader to reduce code duplication and to centralize efi loader path modifications.master
parent
e20cda122b
commit
41b5f830c6
|
@ -62,19 +62,12 @@ def _boot_uefi_windows(disk, part, mountpoint):
|
||||||
if not mount_mkdir(esp, esp_mountpoint):
|
if not mount_mkdir(esp, esp_mountpoint):
|
||||||
raise OgError(f'Unable to mount detected EFI System Partition at {esp} into {esp_mountpoint}')
|
raise OgError(f'Unable to mount detected EFI System Partition at {esp} into {esp_mountpoint}')
|
||||||
|
|
||||||
loader_paths = [f'{esp_mountpoint}/EFI/{bootlabel}/Boot/bootmgfw.efi',
|
|
||||||
f'{esp_mountpoint}/EFI/Microsoft/Boot/bootmgfw.efi']
|
|
||||||
try:
|
try:
|
||||||
for efi_app in loader_paths:
|
loader_path = find_windows_efi_loader(esp_mountpoint, bootlabel)
|
||||||
if os.path.exists(efi_app):
|
loader_path = loader_path[len(esp_mountpoint):]
|
||||||
loader = efi_app[len(esp_mountpoint):]
|
|
||||||
logging.info(f'Found bootloader at ESP partition: {loader}')
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
raise OgError(f'Unable to locate Windows EFI bootloader bootmgfw.efi')
|
|
||||||
|
|
||||||
efibootmgr_delete_bootentry(bootlabel)
|
efibootmgr_delete_bootentry(bootlabel)
|
||||||
efibootmgr_create_bootentry(esp_disk, esp_part_number, loader, bootlabel)
|
efibootmgr_create_bootentry(esp_disk, esp_part_number, loader_path, bootlabel)
|
||||||
efibootmgr_bootnext(bootlabel)
|
efibootmgr_bootnext(bootlabel)
|
||||||
finally:
|
finally:
|
||||||
umount(esp_mountpoint)
|
umount(esp_mountpoint)
|
||||||
|
@ -87,19 +80,12 @@ def _boot_uefi_linux(disk, part, mountpoint):
|
||||||
if not mount_mkdir(esp, esp_mountpoint):
|
if not mount_mkdir(esp, esp_mountpoint):
|
||||||
raise OgError(f'Unable to mount detected EFI System Partition at {esp} into {esp_mountpoint}')
|
raise OgError(f'Unable to mount detected EFI System Partition at {esp} into {esp_mountpoint}')
|
||||||
|
|
||||||
loader_paths = [f'{esp_mountpoint}/EFI/{bootlabel}/Boot/shimx64.efi',
|
|
||||||
f'{esp_mountpoint}/EFI/ubuntu/shimx64.efi']
|
|
||||||
try:
|
try:
|
||||||
for efi_app in loader_paths:
|
loader_path = find_linux_efi_loader(esp_mountpoint, bootlabel)
|
||||||
if os.path.exists(efi_app):
|
loader_path = loader_path[len(esp_mountpoint):]
|
||||||
loader = efi_app[len(esp_mountpoint):]
|
|
||||||
logging.info(f'Found bootloader at ESP partition: {loader}')
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
raise OgError(f'Unable to locate Linux EFI bootloader shimx64.efi')
|
|
||||||
|
|
||||||
efibootmgr_delete_bootentry(bootlabel)
|
efibootmgr_delete_bootentry(bootlabel)
|
||||||
efibootmgr_create_bootentry(esp_disk, esp_part_number, loader, bootlabel)
|
efibootmgr_create_bootentry(esp_disk, esp_part_number, loader_path, bootlabel)
|
||||||
efibootmgr_bootnext(bootlabel)
|
efibootmgr_bootnext(bootlabel)
|
||||||
finally:
|
finally:
|
||||||
umount(esp_mountpoint)
|
umount(esp_mountpoint)
|
||||||
|
|
|
@ -103,6 +103,28 @@ def efibootmgr_create_bootentry(disk, part, loader, label, add_to_bootorder=True
|
||||||
raise OgError(f'Unexpected error adding boot entry to nvram. UEFI firmware might be buggy') from e
|
raise OgError(f'Unexpected error adding boot entry to nvram. UEFI firmware might be buggy') from e
|
||||||
|
|
||||||
|
|
||||||
|
def _find_efi_loader(loader_paths):
|
||||||
|
for efi_app in loader_paths:
|
||||||
|
logging.info(f'Searching for {efi_app}')
|
||||||
|
if os.path.exists(efi_app):
|
||||||
|
logging.info(f'Found bootloader at ESP partition: {efi_app}')
|
||||||
|
return efi_app
|
||||||
|
else:
|
||||||
|
raise OgError(f'Unable to locate Windows EFI bootloader bootmgfw.efi')
|
||||||
|
|
||||||
|
|
||||||
|
def find_windows_efi_loader(esp_mountpoint, bootlabel):
|
||||||
|
loader_paths = [f'{esp_mountpoint}/EFI/{bootlabel}/Boot/bootmgfw.efi',
|
||||||
|
f'{esp_mountpoint}/EFI/Microsoft/Boot/bootmgfw.efi']
|
||||||
|
return _find_efi_loader(loader_paths)
|
||||||
|
|
||||||
|
|
||||||
|
def find_linux_efi_loader(esp_mountpoint, bootlabel):
|
||||||
|
loader_paths = [f'{esp_mountpoint}/EFI/{bootlabel}/Boot/shimx64.efi',
|
||||||
|
f'{esp_mountpoint}/EFI/ubuntu/shimx64.efi']
|
||||||
|
return _find_efi_loader(loader_paths)
|
||||||
|
|
||||||
|
|
||||||
def copy_windows_efi_bootloader(disk, partition):
|
def copy_windows_efi_bootloader(disk, partition):
|
||||||
device = get_partition_device(disk, partition)
|
device = get_partition_device(disk, partition)
|
||||||
mountpoint = device.replace('dev', 'mnt')
|
mountpoint = device.replace('dev', 'mnt')
|
||||||
|
@ -122,17 +144,8 @@ def copy_windows_efi_bootloader(disk, partition):
|
||||||
umount(mountpoint)
|
umount(mountpoint)
|
||||||
raise OgError(f'Unable to mount detected EFI System Partition at {esp} into {esp_mountpoint}')
|
raise OgError(f'Unable to mount detected EFI System Partition at {esp} into {esp_mountpoint}')
|
||||||
|
|
||||||
loader_paths = [f'{esp_mountpoint}/EFI/{bootlabel}/Boot/bootmgfw.efi',
|
|
||||||
f'{esp_mountpoint}/EFI/Microsoft/Boot/bootmgfw.efi']
|
|
||||||
try:
|
try:
|
||||||
for efi_app in loader_paths:
|
loader = find_windows_efi_loader(esp_mountpoint, bootlabel)
|
||||||
logging.info(f'Searching for {efi_app}')
|
|
||||||
if os.path.exists(efi_app):
|
|
||||||
loader = efi_app
|
|
||||||
logging.info(f'Found bootloader at ESP partition: {loader}')
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
raise OgError(f'Unable to locate Windows EFI bootloader bootmgfw.efi')
|
|
||||||
|
|
||||||
loader_dir = os.path.dirname(loader)
|
loader_dir = os.path.dirname(loader)
|
||||||
destination_dir = f'{mountpoint}/ogBoot'
|
destination_dir = f'{mountpoint}/ogBoot'
|
||||||
|
|
Loading…
Reference in New Issue