#!/usr/bin/env python3 import os import subprocess import sys import FileSystemLib import DiskLib os.environ["DEBUG"] = "no" # Obtener el número de serie y configuración inicial ser = subprocess.getoutput("ogGetSerialNumber") cfg = "" # Obtener el número de discos disks = len(subprocess.getoutput("ogDiskToDev").split()) for dsk in disk_list: # Número de particiones particiones = FileSystemLib.ogGetPartitionsNumber(dsk) or "0" particiones = int(particiones) # Tipo de tabla de particiones ptt = DiskLib.ogGetPartitionTableType(dsk) ptt_mapping = {"MSDOS": 1, "GPT": 2, "LVM": 3, "ZPOOL": 4} ptt = ptt_mapping.get(ptt, 0) # Información de disco (partición 0) disk_size = DiskLib.ogGetDiskSize(dsk) cfg += f"{dsk}:0:{ptt}:::{disk_size}:0;" # Recorrer particiones for par in range(1, particiones + 1): # Código del identificador de tipo de partición cod = DiskLib.ogGetPartitionId(dsk, par) # Tipo del sistema de ficheros fsi = FileSystemLib.getFsType(dsk, par) or "EMPTY" # Tamaño de la partición tam = DiskLib.ogGetPartitionSize(dsk, par) or "0" # Sistema operativo instalado soi = "" uso = 0 if fsi not in ["", "EMPTY", "LINUX-SWAP", "LINUX-LVM", "ZVOL"]: mount_point = DiskLib.ogMount(dsk, par) if mount_point: # Obtener la versión del sistema operativo instalado try: # Asumiendo que getOsVersion es una función disponible import OsLib # Debes tener OsLib.py disponible con la función getOsVersion soi_output = OsLib.getOsVersion(dsk, par) except ImportError: # Si no está disponible, usar subprocess como alternativa soi_output = subprocess.getoutput(f"getOsVersion {dsk} {par} 2>/dev/null") soi = soi_output.split(':')[1] if ':' in soi_output else '' # Hacer un segundo intento para algunos casos especiales if not soi: soi_output = subprocess.getoutput(f"getOsVersion {dsk} {par} 2>/dev/null") soi = soi_output.split(':')[1] if ':' in soi_output else '' # Sistema de archivos para datos (sistema operativo "DATA") if not soi and fsi not in ["EMPTY", "CACHE"]: soi = "DATA" # Obtener porcentaje de uso mount_point = DiskLib.ogGetMountPoint(dsk, par) df_output = subprocess.getoutput(f"df {mount_point}") lines = df_output.splitlines() if len(lines) >= 2: uso_str = lines[1].split()[4] # Esta debería ser la quinta columna if uso_str.endswith('%'): uso = int(uso_str.rstrip('%')) else: uso = int(uso_str) else: uso = 0 else: soi = "" uso = 0 else: soi = "" uso = 0 cfg += f"{dsk}:{par}:{cod}:{fsi}:{soi}:{tam}:{uso};" # Configuración por defecto para cliente sin disco if not cfg: cfg = "1:0:0:::0;" # Guardar salida en fichero temporal cfgfile = "/tmp/getconfig" with open(cfgfile, 'w') as f: f.write(f"{ser + ';' if ser else ''}{cfg}") # Crear el menú por defecto desde el archivo generado subprocess.run(["generateMenuDefault"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) # Componer salida formateada formatted_output = [] with open(cfgfile, 'r') as f: content = f.read().strip().split(";") for item in content: fields = item.split(":") if len(fields) == 1: formatted_output.append(f"ser={fields[0]}") else: formatted_output.append( f"disk={fields[0]}\tpar={fields[1]}\tcpt={fields[2]}\tfsi={fields[3]}\tsoi={fields[4]}\ttam={fields[5]}\tuso={fields[6]}" ) # Mostrar la salida formateada print("\n".join(formatted_output)) # Borrar marcas de arranque de Windows subprocess.run(["rm", "-f", "/mnt/*/ogboot.*", "/mnt/*/*/ogboot.*"]) # Volver a registrar los errores os.environ.pop("DEBUG", None)