From 9e02db9136911740d3b6e19400cacbc6c148b668 Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Thu, 30 Jan 2025 13:17:41 +0100 Subject: [PATCH] refs #1412 add ogCreatePartitionTable --- client/lib/engine/bin/DiskLib.py | 90 +++++++------------ .../shared/functions/ogCreatePartitionTable | 30 +++++++ 2 files changed, 63 insertions(+), 57 deletions(-) create mode 100755 client/shared/functions/ogCreatePartitionTable diff --git a/client/lib/engine/bin/DiskLib.py b/client/lib/engine/bin/DiskLib.py index 2332052..e1c3f6b 100755 --- a/client/lib/engine/bin/DiskLib.py +++ b/client/lib/engine/bin/DiskLib.py @@ -270,72 +270,48 @@ def ogCreateGptPartitions(*args): #@note tabletype: { MSDOS, GPT }, MSDOS por defecto #@note Requisitos: fdisk, gdisk, parted #*/ ## -def ogCreatePartitionTable(*args): - # Variables locales - DISK = PTTYPE = CREATE = CREATEPTT = None +def ogCreatePartitionTable (disk, createptt=None): + DISK = ogDiskToDev (disk) + if not DISK: return None - # Si se solicita, mostrar ayuda. - if len(args) == 1 and args[0] == "help": - SystemLib.ogHelp('ogCreatePartitionTable', 'ogCreatePartitionTable int_ndisk [str_partype]', - 'ogCreatePartitionTable 1 GPT', 'ogCreatePartitionTable 1') - return + pttype = ogGetPartitionTableType (disk) or 'MSDOS' # Por defecto para discos vacíos. + createptt = createptt or pttype + CREATE = None - # Error si no se reciben 1 o 2 parámetros. - if len(args) == 1: - CREATEPTT = "" - elif len(args) == 2: - CREATEPTT = args[1] - else: - SystemLib.ogRaiseError(OG_ERR_FORMAT) - return - - # Capturamos el tipo de tabla de particiones actual - DISK = ogDiskToDev(args[0]) - if DISK is None: - return - PTTYPE = ogGetPartitionTableType(args[0]) or "MSDOS" # Por defecto para discos vacíos. - CREATEPTT = CREATEPTT or PTTYPE - - # Si la tabla actual y la que se indica son iguales, se comprueba si hay que regenerarla. - if CREATEPTT == PTTYPE: - if PTTYPE == "GPT": +# Si la tabla actual y la que se indica son iguales, se comprueba si hay que regenerarla. + if createptt == pttype: + if 'GPT' == pttype: try: - result = subprocess.run( - ["sgdisk", "-p", DISK], - stderr=subprocess.PIPE, - stdout=subprocess.DEVNULL - ) - if result.returncode != 0: - CREATE = "GPT" + result = subprocess.run (['sgdisk', '-p', DISK]) + if result.returncode: + CREATE = 'GPT' except subprocess.CalledProcessError: - CREATE = "GPT" - elif PTTYPE == "MSDOS": + CREATE = 'GPT' + elif 'MSDOS' == pttype: try: - result = subprocess.run( - ["parted", "-s", DISK, "print"], - stderr=subprocess.PIPE, - stdout=subprocess.DEVNULL - ) - if result.returncode != 0: - CREATE = "MSDOS" + result = subprocess.run (['parted', '-s', DISK, 'print']) + if result.returncode: + CREATE = 'MSDOS' except subprocess.CalledProcessError: - CREATE = "MSDOS" + CREATE = 'MSDOS' else: - CREATE = CREATEPTT + CREATE = createptt.upper() - # Dependiendo del valor de CREATE, creamos la tabla de particiones en cada caso. - if CREATE == "GPT": - if PTTYPE == "MSDOS": - subprocess.run(["sgdisk", "-go", DISK]) +# Dependiendo del valor de CREATE, creamos la tabla de particiones en cada caso. + if 'GPT' == CREATE: + if 'MSDOS' == pttype: + subprocess.run (['sgdisk', '-go', DISK]) else: - subprocess.run(["gdisk", DISK], input="2\nw\nY\n", text=True) - subprocess.run(["partprobe", DISK], stderr=subprocess.DEVNULL) - elif CREATE == "MSDOS": - if PTTYPE == "GPT": - subprocess.run(["sgdisk", "-Z", DISK]) - subprocess.run(["fdisk", DISK], input="o\nn\np\n\n\n\nd\n\nw", text=True) - subprocess.run(["partprobe", DISK], stderr=subprocess.DEVNULL) - return + subprocess.run (['gdisk', DISK], input='2\nw\nY\n', text=True) + subprocess.run (['partprobe', DISK]) + elif 'MSDOS' == CREATE: + if 'GPT' == pttype: + subprocess.run (['sgdisk', '-Z', DISK]) + # Crear y borrar una partición para que la tabla se genere bien. + subprocess.run (['fdisk', DISK], input='o\nn\np\n\n\n\nd\n\nw', text=True) + subprocess.run (['partprobe', DISK]) + + return None #/** diff --git a/client/shared/functions/ogCreatePartitionTable b/client/shared/functions/ogCreatePartitionTable new file mode 100755 index 0000000..415c10c --- /dev/null +++ b/client/shared/functions/ogCreatePartitionTable @@ -0,0 +1,30 @@ +#!/usr/bin/python3 + +import sys +import argparse +from SystemLib import ogHelp +from DiskLib import ogCreatePartitionTable + +if 2 == len (sys.argv) and 'help' == sys.argv[1]: + #parser.print_help() sale en inglés aunque la locale indique otra cosa + ogHelp ('ogCreatePartitionTable', 'ogCreatePartitionTable int_ndisk [str_partype]', ['ogCreatePartitionTable 1 GPT', 'ogCreatePartitionTable 1']) + sys.exit (0) + +parser = argparse.ArgumentParser (add_help=False) +if 2 == len (sys.argv): + parser.add_argument ('disk') +elif 3 == len (sys.argv): + parser.add_argument ('disk') + parser.add_argument ('createptt') + +args = parser.parse_args() + +if 2 == len (sys.argv): + ret = ogCreatePartitionTable (args.disk) +elif 3 == len (sys.argv): + ret = ogCreatePartitionTable (args.disk, args.createptt) + +if ret is not None: + if ret == True: sys.exit (0) + elif ret == False: sys.exit (1) + else: print (ret)