diff options
author | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-03-07 10:09:56 +0100 |
---|---|---|
committer | lupoDharkael <izhe@hotmail.es> | 2024-03-08 13:03:00 +0100 |
commit | 4d4171e45958a50f4317a5add8fdba297e0f3a83 (patch) | |
tree | ed46ee6aa598dd4110c1f348963277bdffeb31b1 /src/live | |
parent | 7f18485effb300680241bbd84186fdd5c160ec26 (diff) |
utils: move all boot from OS functionality into boot.py
This change is a preparative for reimplementing the BIOS boot
in order to deprecate the legacy script. All the codepaths to
boot systems located at a partition are now called from the
boot_os_at function enabling an easier structure for the incoming
code.
Diffstat (limited to 'src/live')
-rw-r--r-- | src/live/ogOperations.py | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/src/live/ogOperations.py b/src/live/ogOperations.py index 5d9e898..815211f 100644 --- a/src/live/ogOperations.py +++ b/src/live/ogOperations.py @@ -19,7 +19,6 @@ from subprocess import Popen, PIPE import fdisk -from src.ogClient import ogClient from src.ogRest import ThreadState from src.live.partcodes import GUID_MAP from src.live.parttypes import get_parttype @@ -37,6 +36,8 @@ from src.utils.boot import * from src.utils.sw_inventory import get_package_set from src.utils.hw_inventory import get_hardware_inventory, legacy_list_hardware_inventory +from src.ogClient import ogClient +from src.utils.probe import OSFamily, get_os_family OG_SHELL = '/bin/bash' @@ -262,27 +263,32 @@ class OgLiveOperations: disk = request.getDisk() partition = request.getPartition() - if is_uefi_supported(disk): - logging.info('UEFI support detected') - logging.info(f'Booting disk={disk} partition={partition}') - boot_os_at(int(disk), int(partition)) - self.reboot() - return + device = get_partition_device(int(disk), int(partition)) + mountpoint = device.replace('dev', 'mnt') - cmd = f'{ogClient.OG_PATH}interfaceAdm/IniciarSesion {disk} {partition}' + if not mount_mkdir(device, mountpoint): + raise RuntimeError(f'Cannot probe OS family. Unable to mount {device} at {esp_mountpoint}.') + is_legacy = not is_uefi_supported(disk) and get_os_family(mountpoint) == OSFamily.WINDOWS + umount(mountpoint) - try: - ogRest.proc = subprocess.Popen([cmd], - stdout=subprocess.PIPE, - shell=True, - executable=OG_SHELL) - (output, error) = ogRest.proc.communicate() - except: - logging.exception('Exception when running session subprocess') - raise ValueError('Error: Incorrect command value') + if is_legacy: + cmd = f'{ogClient.OG_PATH}interfaceAdm/IniciarSesion {disk} {partition}' - logging.info('Starting OS at disk %s partition %s', disk, partition) - return output.decode('utf-8') + try: + ogRest.proc = subprocess.Popen([cmd], + stdout=subprocess.PIPE, + shell=True, + executable=OG_SHELL) + (output, error) = ogRest.proc.communicate() + except: + logging.exception('Exception when running session subprocess') + raise ValueError('Error: Incorrect command value') + + logging.info('Starting OS at disk %s partition %s', disk, partition) + return output.decode('utf-8') + + boot_os_at(int(disk), int(partition)) + self.reboot() def software(self, request, ogRest): disk = request.getDisk() |