refs #1337 add UEFI commands and a couple of fixes elsewhere
parent
a346ba386e
commit
d54925252f
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -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))
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
Loading…
Reference in New Issue