diff options
author | Alejandro Sirgo Rica <asirgo@soleta.eu> | 2024-03-07 13:27:09 +0100 |
---|---|---|
committer | lupoDharkael <izhe@hotmail.es> | 2024-03-21 10:29:13 +0100 |
commit | a3ffdf2370899d060f6f708e2d6e31ae5b7b54bc (patch) | |
tree | 4cda4df10b708d6126f2f8dd1fc34fec257d9913 /src/utils/boot.py | |
parent | 37600660f3ec54d9221c76d3de72f64cb6de85fc (diff) |
utils: implement BIOS boot for Linux
Create a bios.py file to hold all the BIOS specific functions.
Implement the _boot_bios_linux in Python. The new boot process
tries to find the vmlinuz and initrd binaries at the desired
partition. Then it tries to load them with kexec with the proper
Grub boot params.
One step closer to the removal of the boot legacy script.
Diffstat (limited to 'src/utils/boot.py')
-rw-r--r-- | src/utils/boot.py | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/utils/boot.py b/src/utils/boot.py index 07a29ba..724fc06 100644 --- a/src/utils/boot.py +++ b/src/utils/boot.py @@ -14,6 +14,7 @@ import subprocess from src.utils.probe import OSFamily, get_os_family, get_linux_distro_id, os_probe from src.utils.disk import get_partition_device, get_efi_partition +from src.utils.bios import * from src.utils.uefi import * from src.utils.fs import * @@ -27,7 +28,22 @@ def _boot_bios_linux(disk, part, mountpoint): if not get_linux_distro_id(mountpoint) == 'ubuntu': raise NotImplementedError(f'{os_probe(mountpoint)} detected, only Ubuntu is supported for legacy BIOS boot') - _boot_bios_legacy(disk, part, mountpoint) + kernel_path = get_vmlinuz_path(mountpoint) + initrd_path = get_initrd_path(mountpoint) + + device = get_partition_device(disk, part) + grub_boot_params = get_grub_boot_params(mountpoint, device) + + kexec_cmd = f'kexec -l {kernel_path} --append="{grub_boot_params}" --initrd="{initrd_path}"' + kexec_reboot_cmd = 'kexec -e' + + logging.info(f'Booting with: {kexec_cmd}') + try: + subprocess.run(shlex.split(kexec_cmd), check=True, text=True) + subprocess.run(shlex.split(kexec_reboot_cmd), check=True, text=True) + except subprocess.CalledProcessError as e: + logging.error(f'Error processing kexec: {e}') + raise e def _boot_bios_windows(disk, part, mountpoint): logging.info(f'Booting Windows system') |