summaryrefslogtreecommitdiffstats
path: root/src/live/ogOperations.py
diff options
context:
space:
mode:
authorAlejandro Sirgo Rica <asirgo@soleta.eu>2024-03-07 10:09:56 +0100
committerlupoDharkael <izhe@hotmail.es>2024-03-08 13:03:00 +0100
commit4d4171e45958a50f4317a5add8fdba297e0f3a83 (patch)
treeed46ee6aa598dd4110c1f348963277bdffeb31b1 /src/live/ogOperations.py
parent7f18485effb300680241bbd84186fdd5c160ec26 (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/ogOperations.py')
-rw-r--r--src/live/ogOperations.py44
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()