summaryrefslogtreecommitdiffstats
path: root/client/engine/ogSaveImageInfo.lib
blob: f6e0dba3002b35abb1bbf2e662b97ad29e110644 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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
}