59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
#!/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)
|