summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Sirgo Rica <asirgo@soleta.eu>2024-04-23 01:02:39 +0200
committerAlejandro Sirgo Rica <asirgo@soleta.eu>2024-07-29 15:07:22 +0200
commit7ab965c0b57bf829c42ed54b84213d2c01f135b3 (patch)
tree076a6f30e3ff6c4f2cc0c272700a98146bb63a25
parent4f31bde5499d962332a31817a2e1fd31fd00fe5d (diff)
utils: add restore_windows_efi_bootloader
Add restore_windows_efi_bootloader to copy the EFI loader from the filesystem in the restored system into the EFI partition. This commit is preparatory work for the new native postinstall code.
-rw-r--r--src/utils/uefi.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/utils/uefi.py b/src/utils/uefi.py
index 48fb6c3..5ca8270 100644
--- a/src/utils/uefi.py
+++ b/src/utils/uefi.py
@@ -162,3 +162,34 @@ def copy_windows_efi_bootloader(disk, partition):
finally:
umount(mountpoint)
umount(esp_mountpoint)
+
+
+def restore_windows_efi_bootloader(disk, partition):
+ device = get_partition_device(disk, partition)
+ mountpoint = device.replace('dev', 'mnt')
+ if not mount_mkdir(device, mountpoint):
+ raise OgError(f'Cannot probe OS family. Unable to mount {device} into {mountpoint}')
+
+ bootlabel = f'Part-{disk:02d}-{partition:02d}'
+ esp, esp_disk, esp_part_number = get_efi_partition(disk, enforce_gpt=True)
+ esp_mountpoint = esp.replace('dev', 'mnt')
+ if not mount_mkdir(esp, esp_mountpoint):
+ umount(mountpoint)
+ raise OgError(f'Unable to mount detected EFI System Partition at {esp} into {esp_mountpoint}')
+
+ try:
+ loader_dir = f'{mountpoint}/ogBoot'
+ destination_dir = f'{esp_mountpoint}/EFI/{bootlabel}/Boot'
+ if os.path.exists(destination_dir):
+ try:
+ shutil.rmtree(destination_dir)
+ except OSError as e:
+ raise OgError(f'Failed to delete {destination_dir}: {e}') from e
+ logging.info(f'Copying {loader_dir} into {destination_dir}')
+ try:
+ shutil.copytree(loader_dir, destination_dir)
+ except OSError as e:
+ raise OgError(f'Failed to copy {loader_dir} into {destination_dir}: {e}') from e
+ finally:
+ umount(mountpoint)
+ umount(esp_mountpoint) \ No newline at end of file