summaryrefslogtreecommitdiffstats
path: root/src/utils/boot.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils/boot.py')
-rw-r--r--src/utils/boot.py32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/utils/boot.py b/src/utils/boot.py
index 4de20b9..15dac7d 100644
--- a/src/utils/boot.py
+++ b/src/utils/boot.py
@@ -18,6 +18,17 @@ from src.utils.uefi import *
from src.utils.fs import *
+def _boot_bios_legacy(disk, part, mountpoint):
+ raise NotImplementedError
+
+def _boot_bios_linux(disk, part, mountpoint):
+ logging.info(f'Booting Linux system')
+ _boot_bios_legacy(disk, part, mountpoint)
+
+def _boot_bios_windows(disk, part, mountpoint):
+ logging.info(f'Booting Windows system')
+ _boot_bios_legacy(disk, part, mountpoint)
+
def _boot_uefi_windows(disk, part, mountpoint):
logging.info(f'Booting windows system')
bootlabel = f'Part-{disk:02d}-{part:02d}'
@@ -69,21 +80,30 @@ def _boot_uefi_linux(disk, part, mountpoint):
umount(esp_mountpoint)
def boot_os_at(disk, part):
- if not is_uefi_supported(disk):
- raise NotImplementedError('BIOS booting is not implemented yet')
-
+ logging.info(f'Booting disk={disk} partition={part}')
device = get_partition_device(disk, part)
mountpoint = device.replace('dev', 'mnt')
if not mount_mkdir(device, mountpoint):
raise RuntimeError(f'Cannot probe OS family. Unable to mount {device} at {esp_mountpoint}.')
- logging.info(f'Booting system at {device}. Probing OS family...')
+ is_uefi = is_uefi_supported(disk)
+ if is_uefi:
+ logging.info('UEFI support detected')
+ else:
+ logging.info('UEFI support not detected')
+
os_family = get_os_family(mountpoint)
+ logging.info(f'{os_family} detected at {device}.')
+
try:
- if os_family == OSFamily.WINDOWS:
+ if is_uefi and os_family == OSFamily.WINDOWS:
_boot_uefi_windows(disk, part, mountpoint)
- elif os_family == OSFamily.LINUX:
+ elif is_uefi and os_family == OSFamily.LINUX:
_boot_uefi_linux(disk, part, mountpoint)
+ elif not is_uefi and os_family == OSFamily.WINDOWS:
+ _boot_bios_windows(disk, part, mountpoint)
+ elif not is_uefi and os_family == OSFamily.LINUX:
+ _boot_bios_linux(disk, part, mountpoint)
else:
raise RuntimeError('Unknown OS family')
finally: