refs #1631 add ogGrubDeleteEntry, fix a bug
parent
c4f786d170
commit
cd81c16afb
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue