summaryrefslogtreecommitdiffstats
path: root/client/engine/ogSaveImageInfo.lib
diff options
context:
space:
mode:
authorIrina Gómez <irinagomez@us.es>2021-07-04 09:17:44 +0200
committerIrina Gómez <irinagomez@us.es>2021-07-04 09:17:44 +0200
commitd113a88a8e6fe6d466a611458cfcc21ab2595520 (patch)
tree786b1497fe34219643061b7d097d2a00ba64ca5e /client/engine/ogSaveImageInfo.lib
parenta48186490502a1cbc3132e2aae4da168aabd7275 (diff)
#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.
Diffstat (limited to 'client/engine/ogSaveImageInfo.lib')
-rwxr-xr-xclient/engine/ogSaveImageInfo.lib78
1 files changed, 78 insertions, 0 deletions
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
+}