import os.path import shutil import ogGlobals import SystemLib import FileSystemLib import DiskLib import FileLib import InventoryLib #!/bin/bash # Libreria provisional para uso de UEFI # Las funciones se incluirán las librerías ya existentes #/** # ogNvramActiveEntry #@brief Activa entrada de la NVRAM identificada por la etiqueta o el orden #@param Num_order_entry | Label_entry Número de orden o la etiqueta de la entrada a borrar. #@return (nada) #@exception OG_ERR_FORMAT formato incorrecto. #@exception OG_ERR_NOTUEFI UEFI no activa. #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. #*/ ## #/** # ogNvramAddEntry #@brief Crea nueva entrada en el gestor de arranque (NVRAM), opcionalmente la incluye al final del orden de arranque. #@param Str_Label_entry Número de disco o etiqueta de la entrada a crear. #@param Str_BootLoader Número de partición o cargador de arranque. #@param Bool_Incluir_Arranque Incluir en el orden de arranque (por defecto FALSE) (opcional) #@return (nada) #@exception OG_ERR_FORMAT formato incorrecto. #@exception OG_ERR_NOTUEFI UEFI no activa. #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. #*/ ## #/** # ogCopyEfiBootLoader int_ndisk str_repo path_image #@brief Copia el cargador de arranque desde la partición EFI a la de sistema. #@param int_ndisk nº de orden del disco #@param int_part nº de partición #@return (nada, por determinar) #@exception OG_ERR_FORMAT formato incorrecto. #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. #@note Si existe el cargador en la partición de sistema no es válido #*/ ## #/** # ogNvramDeleteEntry #@brief Borra entrada de la NVRAM identificada por la etiqueta o el orden #@param Num_order_entry | Label_entry Número de orden o la etiqueta de la entrada a borrar. #@return (nada) #@exception OG_ERR_FORMAT formato incorrecto. #@exception OG_ERR_NOTUEFI UEFI no activa. #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado (entrada en NVRAM). #*/ ## #/** # ogNvramGetCurrent #@brief Muestra la entrada del gestor de arranque (NVRAM) que ha iniciado el equipo. #@return Entrada con la que se ha iniciado el equipo #@exception OG_ERR_NOTUEFI UEFI no activa. #*/ ## # ogNvramGetNext #@brief Muestra la entrada del gestor de arranque (NVRAM) que se utilizará en el próximo arranque. #@return Entrada que se utilizará en el próximo arranque #@exception OG_ERR_NOTUEFI UEFI no activa. #*/ ## # ogNvramGetOrder #@brief Muestra el orden de las entradas del gestor de arranque (NVRAM) #@return Orden de las entradas #@exception OG_ERR_NOTUEFI UEFI no activa. #*/ ## #/** # ogNvramGetTimeout #@brief Muestra el tiempo de espera del gestor de arranque (NVRAM) #@return Timeout de la NVRAM #@exception OG_ERR_NOTUEFI UEFI no activa. #*/ ## #/** # ogGrubUefiConf int_ndisk int_part str_dir_grub #@brief Genera el fichero grub.cfg de la ESP #@param int_ndisk nº de orden del disco #@param int_part nº de partición #@param str_dir_grub prefijo del directorio de grub en la partición de sistema. ej: /boot/grubPARTITION #@return (nada, por determinar) #@exception OG_ERR_FORMAT formato incorrecto. #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. #@TODO Confirmar si el fichero "$EFIDIR/EFI/$BOOTLABEL/grub.cfg" es necesario. #*/ ## #/** # ogNvramInactiveEntry #@brief Inactiva entrada de la NVRAM identificada por la etiqueta o el orden #@param Num_order_entry | Label_entry Número de orden o la etiqueta de la entrada a borrar. #@return (nada) #@exception OG_ERR_FORMAT formato incorrecto. #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. #@exception OG_ERR_NOTUEFI UEFI no activa. #*/ ## #/** # ogNvramList #@brief Lista las entradas de la NVRAN (sólo equipos UEFI) #@return Entradas de la NVRAM con el formato: orden etiqueta [* (si está activa) ] #@exception OG_ERR_NOTUEFI UEFI no activa. #*/ ## #/** # ogNvramPxeFirstEntry #@brief Sitúa la entrada de la tarjeta de red en el primer lugar en la NVRAM. #@return (nada) #@exception OG_ERR_NOTUEFI UEFI no activa. #*/ ## #/** # ogRestoreEfiBootLoader int_ndisk str_repo #@brief Copia el cargador de arranque de la partición de sistema a la partición EFI. #@param int_ndisk nº de orden del disco #@param int_part nº de partición #@return (nada, por determinar) #@exception OG_ERR_FORMAT formato incorrecto. #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado (partición de sistema o EFI). #@exception OG_ERR_NOTOS sin sistema operativo. #*/ ## def ogRestoreEfiBootLoader (disk, par): mntdir = FileSystemLib.ogMount (disk, par) if not mntdir: SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_PARTITION, f'{disk} {par}') return esp = DiskLib.ogGetEsp() if not esp: SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTFOUND, 'EFI partition') return esp_disk, esp_par = esp.split() efidir = FileSystemLib.ogMount (esp_disk, esp_par) if not efidir: FileSystemLib.ogFormat (esp_disk, esp_par, 'FAT32') efidir = FileSystemLib.ogMount (esp_disk, esp_par) if not efidir: SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_PARTITION, 'ESP') return osversion = InventoryLib.ogGetOsVersion (disk, par) if 'Windows 1' in osversion: bootlabel = f'Part-{disk:02d}-{par:02d}' loader = FileLib.ogGetPath (f'{mntdir}/ogBoot/bootmgfw.efi') if not loader: SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTOS, f'{disk} {par} ({osversion}, EFI)') return efi_bl = f'{efidir}/EFI/{bootlabel}' if os.path.exists (efi_bl): shutil.rmtree (efi_bl) 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'): os.rename (f'{efidir}/EFI/Microsoft', f'{efidir}/EFI/Microsoft.backup.og') return #/** # ogRestoreUuidPartitions #@brief Restaura los uuid de las particiones y la tabla de particiones #@param int_ndisk nº de orden del disco #@param int_nfilesys nº de orden del sistema de archivos #@param REPO|CACHE repositorio #@param str_imgname nombre de la imagen #@return (nada) #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND No encontrado fichero de información de la imagen (con uuid) #*/ ## #/** # ogNvramSetNext #@brief Configura el próximo arranque con la entrada del gestor de arranque (NVRAM) identificada por la etiqueta o el orden. #@param Num_order_entry | Label_entry Número de orden o la etiqueta de la entrada a borrar. #@return (nada) #@exception OG_ERR_FORMAT formato incorrecto. #@exception OG_ERR_NOTUEFI UEFI no activa. #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. #*/ ## #/** # ogNvramSetOrder #@brief Configura el orden de las entradas de la NVRAM #@param Orden de las entradas separadas por espacios #@return (nada) #@exception OG_ERR_FORMAT formato incorrecto. #@exception OG_ERR_NOTUEFI UEFI no activa. #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado (entrada NVRAM). #*/ ## #/** # ogNvramSetTimeout #@brief Configura el tiempo de espera de la NVRAM #@param Orden de las entradas separadas por espacios #@return (nada) #@exception OG_ERR_FORMAT formato incorrecto. #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. #*/ ## #/** # ogUuidChange int_ndisk str_repo #@brief Reemplaza el UUID de un sistema de ficheros. #@param int_ndisk nº de orden del disco #@param int_part nº de partición #@return (nada, por determinar) #@exception OG_ERR_FORMAT formato incorrecto. #@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. #*/ ##