summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
+}