From d113a88a8e6fe6d466a611458cfcc21ab2595520 Mon Sep 17 00:00:00 2001 From: Irina Gómez Date: Sun, 4 Jul 2021 09:17:44 +0200 Subject: #918 ogSaveImageInfo.lib (provisional) Function to create an image information file, this file is required to restore synchronized images. The function is provisional until it is decided how to save this information. --- client/engine/ogSaveImageInfo.lib | 78 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100755 client/engine/ogSaveImageInfo.lib (limited to 'client/engine/ogSaveImageInfo.lib') diff --git a/client/engine/ogSaveImageInfo.lib b/client/engine/ogSaveImageInfo.lib new file mode 100755 index 00000000..f6e0dba3 --- /dev/null +++ b/client/engine/ogSaveImageInfo.lib @@ -0,0 +1,78 @@ +#!/bin/bash +# Libreria provisional +# Las funciones se incluirán las librerías ya existentes + + +# ogSaveImageInfo +#@brief Crea un fichero con la información de la imagen. +#@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 +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTFOUND fichero o dispositivo no encontrado. +function ogSaveImageInfo () { +local DISK PART IMGDIR IMGNAME INFO INFOFILE DEVICE PARTDEVICE DATA GUID UUID SIZE +local EFIPARTDEVICE EFIDEVICE EFIDATA EFIGUID + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys REPO|CACHE str_imgname" \ + "$FUNCNAME 1 2 REPO Windows" + return +fi +# Error si no se reciben 4 parámetros. +[ $# -eq 4 ] || ogRaiseError $OG_ERR_FORMAT "$FUNCNAME int_ndisk int_nfilesys REPO|CACHE str_imgname" || return $? + +DISK=$1 +PART=$2 +IMGDIR="$(ogGetParentPath "$3" "/$4")" +# Si no existe el directorio de la imagen me salgo +[ "$IMGDIR" != "" ] || ogRaiseError $OG_ERR_NOTFOUND "$3 $(dirname $4)" || return $? +IMGNAME="$(basename "$4")" +INFOFILE="$IMGDIR/.$IMGNAME.img.json" + +# Id de la tabla de particiones +DEVICE=$(ogDiskToDev $DISK) || return $? +DATA=$(sfdisk -J $DEVICE) +GUID=$(echo $DATA|jq ".partitiontable|.id"|tr -d \") + +# UUID del sistema de ficheros +PARTDEVICE=$(ogDiskToDev $DISK $PART) +UUID=$(blkid -s UUID -o value $PARTDEVICE) + +SIZE=$(df -k| awk -v P=$PARTDEVICE '{if ($1==P) print $3}') +FSTYPE=$(ogGetFsType $DISK $PART) + +# Información de la imagen. Valor inicial de efi: false +INFO=$(cat << EOT | jq . +{"name":"$IMGNAME","size":"$SIZE","fstype":"$FSTYPE","efi":"false","guid":"$GUID","uuid":"$UUID"} +EOT + ) + +if ogIsEfiActive; then + # Cambio valor de efi a true + INFO=$(echo $INFO| jq --arg aux true '. + {efi: $aux}') + + # Id de la tabla de particiones del disco con ESP + # Obtener partición EFI. + read -e EFIDISK EFIPART <<<"$(ogGetEsp)" + EFIPARTDEVICE=$(ogDiskToDev $EFIDISK $EFIPART) || return $? + if [ $DISK -eq $EFIDISK ]; then + EFIDEVICE=$DEVICE + EFIDATA=$DATA + EFIGUID=$GUID + else + EFIDEVICE=$(ogDiskToDev $EFIDISK) + EFIDATA=$(sfdisk -J $EFIDEVICE) + EFIGUID=$(echo $EFIDATA|jq ".partitiontable|.id"|tr -d \") + fi + + # Incluyo valor de EFIGUID (por si partición EFI en distinto disco que la de sistema) + INFO=$(echo $INFO| jq --arg aux $EFIGUID '. + {espguid: $aux}') +fi + +cat << EOT | jq . > $INFOFILE +$INFO +EOT +} -- cgit v1.2.3-18-g5258