diff options
-rwxr-xr-x | client/engine/ogSaveImageInfo.lib | 78 |
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 +} |