summaryrefslogtreecommitdiffstats
path: root/src/utils/postinstall.py
diff options
context:
space:
mode:
authorAlejandro Sirgo Rica <asirgo@soleta.eu>2024-10-11 12:15:09 +0200
committerAlejandro Sirgo Rica <asirgo@soleta.eu>2024-10-22 16:47:38 +0200
commit373c1b2a724a3855f93d9cc4b48d0c33310a482c (patch)
tree70d6fb6eeed3eabb62d10458a5826b282c0d8d8a /src/utils/postinstall.py
parent2fcdf896061fd3dfdde9ea42c58a76dd3f42f3fa (diff)
grub: replace legacy grub install scripts
Translate old legacy grub scripts into grub.py Implement ogGrubInstallMbr as install_main_grub() and ogGrubInstallPartition as install_linux_grub(). Add grub configuration file generator through the classes GrubConfig and MenuEntry. Ensure EFI tree structure compatibility with legacy code. The structure of the created folders in the ESP is non-standard, efi binaries are usually located in the folder below the EFI/ directory. Structure used by ogClient: EFI/ ├── grub/ │ └── Boot/ │ ├── BOOTX64.CSV │ ├── grub.cfg │ ├── mmx64.efi │ ├── shimx64.efi │ ├── BOOTX64.EFI │ ├── grubx64.efi │ └── ogloader.efi ... The function _mangle_efi_folder handles the folder structure after grub-install to comply with the location expected by ogLive. install_linux_grub() installs a grub local to each Linux install to enable chainloading, each grub is located in EFI/Part-xx-yy/ in UEFI. The local linux BIOS grub in legacy scripts is unreliable, grub-install reports a failure during the install process. install_main_grub() installs a global grub in EFI/grub/ to show a grub menu when the pxe boot fails. The global grub contains entries to every installed os. No global grub is installed for BIOS systems, a Boot partition would be required to store the grub configuration.
Diffstat (limited to 'src/utils/postinstall.py')
-rw-r--r--src/utils/postinstall.py36
1 files changed, 5 insertions, 31 deletions
diff --git a/src/utils/postinstall.py b/src/utils/postinstall.py
index 221da81..90b8cc6 100644
--- a/src/utils/postinstall.py
+++ b/src/utils/postinstall.py
@@ -12,6 +12,7 @@ import logging
import hivex
import shlex
from src.log import OgError
+from src.utils.grub import install_main_grub, install_linux_grub
from src.utils.bcd import update_bcd
from src.utils.probe import *
from src.utils.disk import *
@@ -152,19 +153,6 @@ def configure_mbr_boot_sector(disk, partition):
logging.warning(f'{cmd_configure} returned non-zero exit status {proc.returncode}')
-def configure_grub_in_mbr(disk, partition):
- cmd_configure = f"ogGrubInstallMbr {disk} {partition} TRUE"
-
- proc = subprocess.run(cmd_configure,
- stdout=subprocess.DEVNULL,
- stderr=subprocess.DEVNULL,
- encoding='utf-8',
- shell=True,
- check=True)
- if proc.returncode != 0:
- logging.warning(f'{cmd_configure} returned non-zero exit status {proc.returncode}')
-
-
def configure_fstab(disk, partition):
logging.info(f'Configuring /etc/fstab')
device = get_partition_device(disk, partition)
@@ -178,31 +166,17 @@ def configure_fstab(disk, partition):
finally:
umount(mountpoint)
-
-def install_grub(disk, partition):
- cmd_configure = f"ogGrubInstallPartition {disk} {partition}"
-
- proc = subprocess.run(cmd_configure,
- stdout=subprocess.DEVNULL,
- stderr=subprocess.DEVNULL,
- encoding='utf-8',
- shell=True,
- check=True)
- if proc.returncode != 0:
- logging.warning(f'{cmd_configure} returned non-zero exit status {proc.returncode}')
-
-
def configure_os_linux(disk, partition):
hostname = gethostname()
set_linux_hostname(disk, partition, hostname)
configure_fstab(disk, partition)
+ install_linux_grub(disk, partition)
+
if is_uefi_supported():
_, _, esp_part_number = get_efi_partition(disk, enforce_gpt=True)
- configure_grub_in_mbr(disk, esp_part_number)
-
- install_grub(disk, partition)
+ install_main_grub()
def configure_os_windows(disk, partition):
@@ -213,7 +187,7 @@ def configure_os_windows(disk, partition):
restore_windows_efi_bootloader(disk, partition)
_, _, esp_part_number = get_efi_partition(disk, enforce_gpt=True)
- configure_grub_in_mbr(disk, esp_part_number)
+ install_main_grub()
else:
configure_mbr_boot_sector(disk, partition)