import sys import os import subprocess import SystemLib import FileSystemLib import DiskLib import Boot #!/usr/bin/env python3 # Script de ejemplo para arrancar un sistema operativo instalado. # Nota: se usa como base para el programa de arranque de OpenGnsys Admin. def main(): prog = os.path.basename(__file__) if len(sys.argv) < 3 or len(sys.argv) > 6: SystemLib.ogRaiseError(1, f"Formato: {prog} ndisco nfilesys [str_kernel str_initrd str_kernelparams]") disk = sys.argv[1] filesystem = sys.argv[2] try: part = DiskLib.ogDiskToDev(disk, filesystem) except Exception as e: sys.exit(1) try: mntdir = FileSystemLib.ogMount(disk, filesystem) except Exception as e: sys.exit(1) print("[0] Inicio del proceso de arranque.") mount_output = subprocess.getoutput(f"mount | grep -q '{mntdir}.*(rw'") if mount_output: SystemLib.ogEcho("log", "session", "MSG_WARNING: MSG_MOUNTREADONLY") FileSystemLib.ogUnmount(disk, filesystem) FileSystemLib.ogCheckFs(disk, filesystem) part = DiskLib.ogDiskToDev(disk, filesystem) os.makedirs(mntdir, exist_ok=True) subprocess.run(["ntfs-3g", "-o", "remove_hiberfile", part, mntdir]) SystemLib.ogEcho("log", "session", "Particion desbloqueada") FileSystemLib.ogUnmount(disk, filesystem) FileSystemLib.ogMount(disk, filesystem) if subprocess.call("which bootOsCustom", shell=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) == 0: print("[10] Configuración personalizada del inicio.") subprocess.run(["bootOsCustom"] + sys.argv[1:]) print("[70] Desmontar todos los sistemas de archivos.") subprocess.run(["sync"]) for i in range(1, len(DiskLib.ogDiskToDev(disk, filesystem).split())): FileSystemLib.ogUnmountAll(i) print("[80] Desmontar cache local.") FileSystemLib.ogUnmount_cache() print("[90] Arrancar sistema operativo.") BootLib.ogBoot(sys.argv[1:]) if __name__ == "__main__": main()