#!/usr/bin/python3 # Script de ejemplo para arancar un sistema operativo instalado. # Nota: se usa como base para el programa de arranque de OpenGnsys Admin. import sys import re import subprocess import shutil import ogGlobals from SystemLib import ogRaiseError, ogEcho from DiskLib import ogDiskToDev from FileSystemLib import ogMount, ogUnmount, ogCheckFs, ogUnmountAll from CacheLib import ogUnmountCache from BootLib import ogBoot prog = sys.argv[0] if len (sys.argv) < 3 or len (sys.argv) > 4: ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, f'Formato: {prog} ndisco nfilesys [str_kernel str_initrd str_kernelparams]') sys.exit (1) disk, par, *other = sys.argv[1:] params = other[0] if len (other) > 0 else '' # Comprobar errores. part = ogDiskToDev (disk, par) if not part: sys.exit (1) mntdir = ogMount (disk, par) if not mntdir: sys.exit (1) print ('[0] Inicio del proceso de arranque.') # Si el equipo está hibernado chequeamos el f.s. y borramos el hiberfile (error cod.6) mount_out = subprocess.run (['mount'], capture_output=True, text=True).stdout if not mount_out or not re.search (rf'{mntdir}.*\(rw', mount_out): ogEcho (['log', 'session'], None, f'{ogGlobals.lang.MSG_WARNING}: {ogGlobals.lang.MSG_MOUNTREADONLY}') ogUnmount (disk, par) ogCheckFs (disk, par) part = ogDiskToDev (disk, par) os.makedirs (mntdir, exist_ok=True) subprocess.run (['ntfs-3g', '-o', 'remove_hiberfile', part, mntdir]) ogEcho (['log', 'session'], None, 'Particion desbloqueada') ogUnmount (disk, par) ogMount (disk, par) if shutil.which ('bootOsCustom.py'): print ('[10] Configuración personalizada del inicio.') subprocess.run ([f'{ogGlobals.OGSCRIPTS}/bootOsCustom.py']) print ('[70] Desmontar todos los sistemas de archivos.') subprocess.run (['sync']) for i in range (1, 1+len(ogDiskToDev())): ogUnmountAll (i) print ('[80] Desmontar cache local.') ogUnmountCache() print (f'[90] Arrancar sistema operativo.') ogBoot (disk, par, params=params)