From 842b4a395b69e65b33958bf79fb91960fabf1a35 Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Wed, 5 Mar 2025 14:53:46 +0100 Subject: [PATCH] refs #1632 add ogGrubDefaultEntry --- ogclient/functions/ogBootLoaderDefaultEntry | 26 ++++++++++ ogclient/functions/ogGrubDefaultEntry | 25 ++++++++++ ogclient/lib/python3/BootLib.py | 53 ++++++++++++++++++++- 3 files changed, 103 insertions(+), 1 deletion(-) create mode 100755 ogclient/functions/ogBootLoaderDefaultEntry create mode 100755 ogclient/functions/ogGrubDefaultEntry diff --git a/ogclient/functions/ogBootLoaderDefaultEntry b/ogclient/functions/ogBootLoaderDefaultEntry new file mode 100755 index 0000000..fc99085 --- /dev/null +++ b/ogclient/functions/ogBootLoaderDefaultEntry @@ -0,0 +1,26 @@ +#!/usr/bin/python3 + +import sys +import argparse +import ogGlobals +from SystemLib import ogHelp +from BootLib import ogBootLoaderDefaultEntry + +parser = argparse.ArgumentParser (add_help=False) +parser.add_argument ('disk') +parser.add_argument ('par') +parser.add_argument ('diskdefault') +parser.add_argument ('pardefault') + +if 2 == len (sys.argv) and 'help' == sys.argv[1]: + #parser.print_help() sale en inglés aunque la locale indique otra cosa + ogHelp ('ogBootLoaderDefaultEntry', ogGlobals.lang.MSG_SEE+' ogGrubDefaultEntry', []) + sys.exit (0) + +args = parser.parse_args() +ret = ogBootLoaderDefaultEntry (args.disk, args.par, args.diskdefault, args.pardefault) + +if ret is not None: + if ret == True: sys.exit (0) + elif ret == False: sys.exit (1) + else: print (ret) diff --git a/ogclient/functions/ogGrubDefaultEntry b/ogclient/functions/ogGrubDefaultEntry new file mode 100755 index 0000000..e006e74 --- /dev/null +++ b/ogclient/functions/ogGrubDefaultEntry @@ -0,0 +1,25 @@ +#!/usr/bin/python3 + +import sys +import argparse +from SystemLib import ogHelp +from BootLib import ogGrubDefaultEntry + +parser = argparse.ArgumentParser (add_help=False) +parser.add_argument ('disk') +parser.add_argument ('par') +parser.add_argument ('diskdefault') +parser.add_argument ('pardefault') + +if 2 == len (sys.argv) and 'help' == sys.argv[1]: + #parser.print_help() sale en inglés aunque la locale indique otra cosa + ogHelp ('ogGrubDefaultEntry', 'ogGrubDefaultEntry int_ndisk int_npartition int_disk_default_entry int_npartition_default_entry', ['ogGrubDefaultEntry 1 6 1 1']) + sys.exit (0) + +args = parser.parse_args() +ret = ogGrubDefaultEntry (args.disk, args.par, args.diskdefault, args.pardefault) + +if ret is not None: + if ret == True: sys.exit (0) + elif ret == False: sys.exit (1) + else: print (ret) diff --git a/ogclient/lib/python3/BootLib.py b/ogclient/lib/python3/BootLib.py index 7dfe45d..2e26fa7 100644 --- a/ogclient/lib/python3/BootLib.py +++ b/ogclient/lib/python3/BootLib.py @@ -961,6 +961,8 @@ def ogBootLoaderDeleteEntry (disk, par, diskdel, pardel): #@brief ver ogBootLoaderDefaultEntry #@see ogBootLoaderDefaultEntry #*/ ## +def ogGrubDefaultEntry (disk, par, diskdefault, pardefault): + return ogBootLoaderDefaultEntry (disk, par, diskdefault, pardefault) #/** # ogBootLoaderDefaultEntry int_disk_CFG int_partition_CFG int_disk_default_entry int_npartition_default_entry @@ -975,6 +977,56 @@ def ogBootLoaderDeleteEntry (disk, par, diskdel, pardel): #@exception OG_ERR_OUTOFLIMIT Param $3 no es entero. #@exception OG_ERR_NOTFOUND Fichero de configuración no encontrado: burg.cfg. #*/ ## +def ogBootLoaderDefaultEntry (disk, par, diskdefault, pardefault): +# Nombre de la función que llama a esta. + func = inspect.stack()[1][3] + +# Error si no puede montar sistema de archivos. + dirmount = FileSystemLib.ogMount (disk, par) + if not dirmount: return None + +# Comprobamos que exista fichero de configuración +# La función debe ser llamanda desde ogGrubDefaultEntry, ogBurgDefaultEntry or ogRefindDefaultEntry. + if 'ogGrubDefaultEntry' == func: + cfgfile = f'{dirmount}/boot/grubMBR/boot/grub/grub.cfg' + else: + SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, f'Use ogGrubDefaultEntry') + return None + +# Error si no existe archivo de configuración + if not os.path.exists (cfgfile): + SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTFOUND, cfgfile) + return None + +# Dispositivo + label = DiskLib.ogDiskToDev (diskdefault, pardefault) + +# Número de línea de la entrada por defecto en CFGFILE (primera de la partición). + grep_out = subprocess.run (['grep', '--line-number', '--max-count', '1', f'menuentry.*{label}', cfgfile], capture_output=True, text=True).stdout + if not grep_out: + SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTFOUND, f'menuentry {label}') + return None + defaultentry, _ = grep_out.split (':', maxsplit=1) + +# Si no hay entradas para borrar me salgo con aviso + if not defaultentry: + SystemLib.ogRaiseError (['session', 'log'], ogGlobals.OG_ERR_NOTFOUND, f'No menuentry {label}') + return None + +# Número de la de linea por defecto en el menú de usuario + menuentry = subprocess.run (f'grep -n -e menuentry {cfgfile}| cut -d: -f1 | grep -n {defaultentry} |cut -d: -f1', shell=True, text=True, capture_output=True).stdout + if not menuentry: return None + menuentry = int (menuentry) + # En grub y burg las líneas empiezan a contar desde cero + menuentry -= 1 + subprocess.run (['sed', '--regexp-extended', '-i', f's/set default="?[0-9]*"?$/set default="{menuentry}"/g', cfgfile]) + + MSG = f'ogGlobals.lang.MSG_HELP_{func}' + try: MSG = eval (MSG) + except: MSG = '' + if '.' == MSG[-1]: MSG=MSG[0:-1] + print (f'{MSG}: {disk} {par} {diskdefault} {pardefault}') + return True #/** # ogGrubOgliveDefaultEntry num_disk num_part @@ -1037,7 +1089,6 @@ def ogBootLoaderOgliveDefaultEntry (disk, par): try: MSG = eval (MSG) except: MSG = '' if '.' == MSG[-1]: MSG=MSG[0:-1] - print (f'{MSG}: {disk} {par}') return True