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
}
|