refs #1337 add UEFI commands and a couple of fixes elsewhere

pull/1/head
Natalia Serrano 2025-01-24 15:41:23 +01:00
parent a346ba386e
commit d54925252f
18 changed files with 346 additions and 11 deletions

View File

@ -375,6 +375,7 @@ def ogGetOsVersion(disk, part):
'lsval DisplayVersion',
])
version = subprocess.run (['hivexsh'], input=i, capture_output=True, text=True).stdout
version = version.replace ('\n', ' ')
# Recoge el valor del número de compilación para ver si es Windows 10/11
i = '\n'.join ([
f'load {file}',
@ -398,13 +399,15 @@ def ogGetOsVersion(disk, part):
if not version:
type = 'WinLoader'
file = FileLib.ogGetPath (file=f'{mntdir}/boot/bcd')
if not file:
file = FileLib.ogGetPath (file=f'{mntdir}/EFI/Microsoft/boot/bcd')
if file:
for distrib in 'Windows Recovery', 'Windows Boot':
with open (file, 'rb') as fd:
contents = fd.read()
distrib_utf16_regex = re.sub (r'(.)', '\\1.', distrib)
distrib_utf16_regex = bytes (distrib_utf16_regex, 'ascii')
if re.search (distrib_utf16, contents):
if re.search (distrib_utf16_regex, contents):
version = f'{distrib} loader'
# Para macOS: detectar kernel y completar con fichero plist de información del sistema.
if not version:
@ -467,5 +470,5 @@ def ogGetOsVersion(disk, part):
# Mostrar resultado y salir sin errores.
if version: return f"{type}: {version} {is64bit}"
if version: return f"{type}:{version} {is64bit}"
return None

View File

@ -1,4 +1,6 @@
import os.path
import re
import subprocess
import shutil
import ogGlobals
@ -357,7 +359,7 @@ def ogNvramPxeFirstEntry():
return True
# Si la entrada ya existe la borramos.
order = [numentry] + list (filter (lambda x: x if x!=numentry else [], order))
order = [numentry] + list (filter (lambda x: x if x!=numentry else [], o))
ogNvramSetOrder (order)
return True
@ -395,7 +397,7 @@ def ogRestoreEfiBootLoader (disk, par):
osversion = InventoryLib.ogGetOsVersion (disk, par)
if 'Windows 1' in osversion:
bootlabel = f'Part-{int(disk):02d}-{int(par):02d}'
loader = FileLib.ogGetPath (f'{mntdir}/ogBoot/bootmgfw.efi')
loader = FileLib.ogGetPath (file=f'{mntdir}/ogBoot/bootmgfw.efi')
if not loader:
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTOS, f'{disk} {par} ({osversion}, EFI)')
return
@ -405,7 +407,7 @@ def ogRestoreEfiBootLoader (disk, par):
os.makedirs (efi_bl, exist_ok=True)
shutil.copytree (os.path.dirname (loader), f'{efi_bl}/Boot', symlinks=True)
shutil.copy (loader, f'{efi_bl}/Boot/ogloader.efi')
if '' != FileLib.ogGetPath (f'{efidir}/EFI/Microsoft'):
if '' != FileLib.ogGetPath (file=f'{efidir}/EFI/Microsoft'):
os.rename (f'{efidir}/EFI/Microsoft', f'{efidir}/EFI/Microsoft.backup.og')
return
@ -478,9 +480,8 @@ def ogNvramSetNext (entry):
#*/ ##
#ogNvramSetOrder (['1', '3'])
def ogNvramSetOrder (order):
mntdir = FileSystemLib.ogMount (disk, par)
if not mntdir:
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_PARTITION, f'{disk} {par}')
if not InventoryLib.ogIsEfiActive():
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTUEFI, '')
return
try:
@ -501,7 +502,7 @@ def ogNvramSetOrder (order):
new_order = []
for o in order:
h = f'{int(o):04x}'.upper()
h = f'{int(o,16):05x}'.upper()
if h not in numentries:
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTFOUND, f'NVRAM entry order "{h}"')
return

View File

@ -0,0 +1,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from DiskLib import ogGetEsp
parser = argparse.ArgumentParser (add_help=False)
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogGetEsp')
sys.exit (0)
args = parser.parse_args()
ret = ogGetEsp ()
if ret is not None:
if ret == True: sys.exit (0)
elif ret == False: sys.exit (1)
else: print (ret)

View File

@ -11,7 +11,9 @@ if 2 == len (sys.argv) and 'help' == sys.argv[1]:
sys.exit (0)
parser = argparse.ArgumentParser (add_help=False)
if 3 == len (sys.argv):
if 2 == len (sys.argv):
parser.add_argument ('file', nargs='?', default=None)
elif 3 == len (sys.argv):
parser.add_argument ('src', nargs='?', default=None)
parser.add_argument ('file', nargs='?', default=None)
elif 4 == len (sys.argv):
@ -21,7 +23,9 @@ elif 4 == len (sys.argv):
args = parser.parse_args()
if 3 == len (sys.argv):
if 2 == len (sys.argv):
ret = ogGetPath (file=args.file)
elif 3 == len (sys.argv):
ret = ogGetPath (src=args.src, file=args.file)
elif 4 == len (sys.argv):
ret = ogGetPath (src=f'{args.disk} {args.par}', file=args.file)

View File

@ -0,0 +1,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramActiveEntry
parser = argparse.ArgumentParser (add_help=False)
parser.add_argument ('entry')
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramActiveEntry', 'ogNvramActiveEntry [ Num_order_entry | Label_entry ]', ['ogNvramActiveEntry 2', 'ogNvramActiveEntry "Windows Boot Manager"'])
sys.exit (0)
args = parser.parse_args()
ret = ogNvramActiveEntry (args.entry)
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,24 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramAddEntry
parser = argparse.ArgumentParser (add_help=False)
parser.add_argument ('bootlbl')
parser.add_argument ('bootldr')
parser.add_argument ('nvram_set', nargs='?', default=False)
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramAddEntry', 'ogNvramAddEntry Str_label_entry Str_boot_loader [ Bool_add_bootorder ]', ['ogNvramAddEntry 1 2 TRUE', 'ogNvramAddEntry grub /EFI/grub/grubx64.efi TRUE', 'ogNvramAddEntry Windows /EFI/Microsoft/Boot/bootmgfw.efi'])
sys.exit (0)
args = parser.parse_args()
ret = ogNvramAddEntry (args.bootlbl, args.bootldr, args.nvram_set)
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,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramDeleteEntry
parser = argparse.ArgumentParser (add_help=False)
parser.add_argument ('entry')
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramDeleteEntry', 'ogNvramDeleteEntry [ Num_order_entry | Label_entry ]', ['ogNvramDeleteEntry 2', 'ogNvramAddEntry "Windows Boot Manager"'])
sys.exit (0)
args = parser.parse_args()
ret = ogNvramDeleteEntry (args.entry)
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,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramGetCurrent
parser = argparse.ArgumentParser (add_help=False)
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramGetCurrent')
sys.exit (0)
args = parser.parse_args()
ret = ogNvramGetCurrent ()
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,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramGetNext
parser = argparse.ArgumentParser (add_help=False)
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramGetNext')
sys.exit (0)
args = parser.parse_args()
ret = ogNvramGetNext ()
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,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramGetOrder
parser = argparse.ArgumentParser (add_help=False)
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramGetOrder')
sys.exit (0)
args = parser.parse_args()
ret = ogNvramGetOrder ()
if ret is not None:
if ret == True: sys.exit (0)
elif ret == False: sys.exit (1)
else: print (','.join (ret))

View File

@ -0,0 +1,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramGetTimeout
parser = argparse.ArgumentParser (add_help=False)
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramGetTimeout')
sys.exit (0)
args = parser.parse_args()
ret = ogNvramGetTimeout ()
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,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramInactiveEntry
parser = argparse.ArgumentParser (add_help=False)
parser.add_argument ('entry')
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramInactiveEntry', 'ogNvramInactiveEntry [ Num_order_entry | Label_entry ]', ['ogNvramInactiveEntry 2', 'ogNvramInactiveEntry "Windows Boot Manager"'])
sys.exit (0)
args = parser.parse_args()
ret = ogNvramInactiveEntry (args.entry)
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,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramList
parser = argparse.ArgumentParser (add_help=False)
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramList')
sys.exit (0)
args = parser.parse_args()
ret = ogNvramList ()
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,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramPxeFirstEntry
parser = argparse.ArgumentParser (add_help=False)
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramPxeFirstEntry')
sys.exit (0)
args = parser.parse_args()
ret = ogNvramPxeFirstEntry ()
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,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramSetNext
parser = argparse.ArgumentParser (add_help=False)
parser.add_argument ('entry')
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramSetNext', 'ogNvramSetNext [ Num_order_entry | Label_entry ]', ['ogNvramSetNext 2', 'ogNvramSetNext "Windows Boot Manager"'])
sys.exit (0)
args = parser.parse_args()
ret = ogNvramSetNext (args.entry)
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,16 @@
#!/usr/bin/python3
import sys
from SystemLib import ogHelp
from UEFILib import ogNvramSetOrder
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramSetOrder', 'ogNvramSetOrder Num_order1 [ Num_order2 ] ...', ['ogNvramSetOrder 1 3'])
sys.exit (0)
ret = ogNvramSetOrder (sys.argv[1:])
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,22 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogNvramSetTimeout
parser = argparse.ArgumentParser (add_help=False)
parser.add_argument ('t')
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogNvramSetTimeout', 'ogNvramSetTimeout int_Timeout (seg)', ['ogNvramSetTimeout 2'])
sys.exit (0)
args = parser.parse_args()
ret = ogNvramSetTimeout (args.t)
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,23 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from UEFILib import ogRestoreEfiBootLoader
parser = argparse.ArgumentParser (add_help=False)
parser.add_argument ('disk')
parser.add_argument ('par')
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogRestoreEfiBootLoader', 'ogRestoreEfiBootLoader int_ndisk int_part', ['ogRestoreEfiBootLoader 1 2'])
sys.exit (0)
args = parser.parse_args()
ret = ogRestoreEfiBootLoader (args.disk, args.par)
if ret is not None:
if ret == True: sys.exit (0)
elif ret == False: sys.exit (1)
else: print (ret)