1
0
Fork 0

refs #1631 add ogGrubDeleteEntry, fix a bug

bootlib
Natalia Serrano 2025-03-05 10:43:12 +01:00
parent c4f786d170
commit cd81c16afb
3 changed files with 107 additions and 1 deletions

View File

@ -0,0 +1,26 @@
#!/usr/bin/python3
import sys
import argparse
import ogGlobals
from SystemLib import ogHelp
from BootLib import ogBootLoaderDeleteEntry
parser = argparse.ArgumentParser (add_help=False)
parser.add_argument ('disk')
parser.add_argument ('par')
parser.add_argument ('diskdel')
parser.add_argument ('pardel')
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogBootLoaderDeleteEntry', ogGlobals.lang.MSG_SEE+' ogGrubDeleteEntry', [])
sys.exit (0)
args = parser.parse_args()
ret = ogBootLoaderDeleteEntry (args.disk, args.par, args.diskdel, args.pardel)
if ret is not None:
if ret == True: sys.exit (0)
elif ret == False: sys.exit (1)
else: print (ret)

View File

@ -0,0 +1,25 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from BootLib import ogGrubDeleteEntry
parser = argparse.ArgumentParser (add_help=False)
parser.add_argument ('disk')
parser.add_argument ('par')
parser.add_argument ('diskdel')
parser.add_argument ('pardel')
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogGrubDeleteEntry', 'ogGrubDeleteEntry int_ndisk int_npartition int_disk_delete int_npartition_delete', ['ogGrubDeleteEntry 1 6 2 1'])
sys.exit (0)
args = parser.parse_args()
ret = ogGrubDeleteEntry (args.disk, args.par, args.diskdel, args.pardel)
if ret is not None:
if ret == True: sys.exit (0)
elif ret == False: sys.exit (1)
else: print (ret)

View File

@ -886,6 +886,8 @@ def ogBootLoaderHidePartitions (disk, par, datadisk=None, datapar=None):
#@brief ver ogBootLoaderDeleteEntry #@brief ver ogBootLoaderDeleteEntry
#@see ogBootLoaderDeleteEntry #@see ogBootLoaderDeleteEntry
#*/ #*/
def ogGrubDeleteEntry (disk, par, diskdel, pardel):
return ogBootLoaderDeleteEntry (disk, par, diskdel, pardel)
#/** #/**
# ogBootLoaderDeleteEntry num_disk num_part num_part_delete # ogBootLoaderDeleteEntry num_disk num_part num_part_delete
@ -901,6 +903,59 @@ def ogBootLoaderHidePartitions (disk, par, datadisk=None, datapar=None):
#@exception OG_ERR_NOTFOUND No existe archivo de configuracion del grub. #@exception OG_ERR_NOTFOUND No existe archivo de configuracion del grub.
#*/ ## #*/ ##
def ogBootLoaderDeleteEntry (disk, par, diskdel, pardel):
# Nombre de la función que llama a esta.
func = inspect.stack()[1][3]
# Archivo de configuracion del grub
dirmount = FileSystemLib.ogMount (disk, par)
# La función debe ser llamanda desde ogGrubDeleteEntry, ogBurgDeleteEntry or ogRefindDeleteEntry.
if 'ogGrubDeleteEntry' == func:
cfgfile = f'{dirmount}/boot/grubMBR/boot/grub/grub.cfg'
else:
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, f'Use ogGrubDeleteEntry')
return None
# Dispositivo
label = DiskLib.ogDiskToDev (diskdel, pardel)
# Error si no existe archivo de configuración
if not os.path.exists (cfgfile):
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTFOUND, cfgfile)
return None
# Numero de linea de cada entrada.
menuentry = []
grep_out = subprocess.run (['grep', '-n', '-e', 'menuentry', cfgfile], capture_output=True, text=True).stdout
if grep_out:
for l in grep_out.splitlines():
lineno, _ = l.split (':', maxsplit=1)
menuentry.append (lineno)
menuentry.reverse()
# Entradas que hay que borrar.
deleteentry = []
grep_out = subprocess.run (['grep', '-n', f'menuentry.*{label}', cfgfile], capture_output=True, text=True).stdout
if grep_out:
for l in grep_out.splitlines():
lineno, _ = l.split (':', maxsplit=1)
deleteentry.append (lineno)
# Si no hay entradas para borrar me salgo con aviso
if not deleteentry:
SystemLib.ogRaiseError (['log', 'session'], ogGlobals.OG_ERR_NOTFOUND, f'Menuentry {label}')
return None
# Recorremos el fichero del final hacia el principio.
with open (cfgfile, 'r') as fd:
endentry = len (fd.read().splitlines())
for entry in menuentry:
# Comprobamos si hay que borrar la entrada.
if entry in deleteentry:
endentry -= 1
subprocess.run (['sed', '-i', '-e', f'{entry},{endentry}d', cfgfile])
# Guardamos el número de línea de la entrada, que sera el final de la siguiente.
endentry = entry
#/** #/**
# ogGrubDefaultEntry int_disk_GRUGCFG int_partition_GRUBCFG int_disk_default_entry int_npartition_default_entry # ogGrubDefaultEntry int_disk_GRUGCFG int_partition_GRUBCFG int_disk_default_entry int_npartition_default_entry
#@brief ver ogBootLoaderDefaultEntry #@brief ver ogBootLoaderDefaultEntry
@ -973,7 +1028,7 @@ def ogBootLoaderOgliveDefaultEntry (disk, par):
return None return None
numentry -= 1 numentry -= 1
subprocess.run (['sed', '--regexp-extended', '-i', f's/"set default=\"?[0-9]+\"?"/"set default=\"{numentry}\""/g', cfgfile]) subprocess.run (['sed', '--regexp-extended', '-i', f's/set default="?[0-9]+"?/set default="{numentry}"/g', cfgfile])
MSG = f'ogGlobals.lang.MSG_HELP_{func}' MSG = f'ogGlobals.lang.MSG_HELP_{func}'
try: MSG = eval (MSG) try: MSG = eval (MSG)