summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIrina Gómez <irinagomez@us.es>2021-07-04 09:25:19 +0200
committerIrina Gómez <irinagomez@us.es>2021-07-04 09:25:19 +0200
commit4e21f5b7865c6a254c573624f7a1435b5cae2f92 (patch)
treec614571cdbb00899a0b40be82b5098be9782a117
parentd113a88a8e6fe6d466a611458cfcc21ab2595520 (diff)
#918 Scripts to create and restore git-synced images.
They follow the same procedure as monolithic images. They use the same postconfiguration file.
-rwxr-xr-xclient/shared/scripts/createGitImage136
-rwxr-xr-xclient/shared/scripts/deployGitImage179
-rwxr-xr-xclient/shared/scripts/restoreGitImage111
-rwxr-xr-xclient/shared/scripts/updateGitCache89
4 files changed, 515 insertions, 0 deletions
diff --git a/client/shared/scripts/createGitImage b/client/shared/scripts/createGitImage
new file mode 100755
index 00000000..3bf08105
--- /dev/null
+++ b/client/shared/scripts/createGitImage
@@ -0,0 +1,136 @@
+#!/bin/bash
+
+#/**
+#@file createGitImage
+#@brief Script de ejemplo para crear una imagen de un sistema de archivos.
+#@note La imagen se crea siempre en cache, luego puede al servidor
+#@param 1 disco
+#@param 2 particion
+#@param 3 REPO|CACHE
+#@param 4 imagen
+#@param 5 message Comentario para el commit (por defecto fecha)
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_PARTITION # 3 Error en partición de disco o en su sistema de archivos
+#@exception OG_ERR_IMAGE # 5 Error en funcion ogCreateImage o ogRestoreImage.
+#@exception OG_ERR_NOTWRITE # 14 error de escritura
+#@exception OG_ERR_NOTCACHE # 15 si cache no existe 15
+#@exception OG_ERR_NOTFOUND # 2 no se encuentra comando git
+#@exception OG_ERR_CACHESIZE # 16 si espacio de la cache local o remota no tiene espacio 16
+#@exception OG_ERR_REDUCEFS # 17 error al reducir sistema de archivos.
+#@exception OG_ERR_EXTENDFS # 18 Errror al expandir el sistema de archivos.
+#@version 1.1 - Primera versión. Se parte de los script de UGR y de createImage de OpenGnsys
+#@date 2020/01/08
+#*/ ##
+
+PROG="$(basename $0)"
+if [ $# -lt 4 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE imagen mensaje_commit"
+ exit $?
+fi
+
+TIME1=$SECONDS
+
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Valores por defecto en etc/engine.cfg
+DISK=$1
+PART=$2
+REPO="${3^^}"
+IMGNAME="$4"
+MSGCOMMIT="${5:-$(date +%Y-%m-%d)}"
+GITDIR=${GITDIR:-"git"}
+
+# Unidad organizativa
+[ "$ogunit" != "" ] && OGUNIT="$ogunit"
+
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+# salvo si es llamado desde createImageCustom
+if [ "$(ogGetCaller)" != "createImageCustom" ]; then
+ echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
+fi
+
+ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+
+# Si es una ip y es igual a la del equipo restaura desde cache
+[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE"
+# Si es una ip y es distinta a la del recurso samba cambiamos de REPO.
+ogCheckIpAddress $REPO
+if [ $? == 0 -o $REPO == "REPO" ] ; then
+ # Si falla el cambio -> salimos con error repositorio no valido
+ ogChangeRepo $REPO $OGUNIT || exit $(ogRaiseError $OG_ERR_NOTFOUND '$REPO'; echo $?)
+ REPO="REPO"
+fi
+
+# Comprobamos que exista CACHE. Se necesita obligatoriamente
+ogFindCache >/dev/null || ogRaiseError $OG_ERR_NOTCACHE "CACHE " || echo $?
+
+# Comprobamos que el ogLive contiene git
+which git >/dev/null || ogRaiseError $OG_ERR_NOTFOUND "git command" || echo $?
+
+# Obtener información de los parámetros de entrada.
+DEVICE=$(ogDiskToDev "$DISK" "$PART" 2>/dev/null) || exit $(ogRaiseError $OG_ERR_PARTITION "$DISK $PART"; echo $?)
+
+#Comprobamos acceso de escritura.
+DIRTEMP=$(date +%Y%m%d-%H%M%S)
+ogMakeDir $REPO /$4$DIRTEMP 2>/dev/null || exit $(ogRaiseError $OG_ERR_NOTWRITE "$REPO"; echo $?) && ogDeleteTree $REPO /$4$DIRTEMP
+
+echo " " > $OGLOGCOMMAND
+# Borramos ficheros de paginacion y configuracion
+ogCleanOs $DISK $PART
+
+# Con Git no podemos comprobar espacio
+##Comprobar espacio que requerira la imagen para ser almacenada
+#read SIZEDATA SIZEREQUIRED SIZEFREE ISENOUGHSPACE <<< $(ogGetSizeParameters $DISK $PART "$REPO" "$4")
+#
+#ogEcho log session "[16] $PROG: $MSG_SCRIPTS_CREATE_SIZE $SIZEREQUIRED $SIZEFREE"
+#[ "$ISENOUGHSPACE" == "TRUE" ] || exit $(ogRaiseError session $OG_ERR_CACHESIZE "$REPO"; echo $?)
+
+# Comprobar consistencia del sistema de archivos.
+echo " " > $OGLOGCOMMAND
+SIZEFS=$(ogGetFsSize $DISK $PART)
+ogEcho log session "[20] $MSG_HELP_ogCheckFs $DEVICE $SIZEFS (KB)"
+ogUnmount $DISK $PART 2>/dev/null
+ogCheckFs $DISK $PART || exit $(ogRaiseError $OG_ERR_PARTITION "ogCheckFs $DISK $PART" && echo $?)
+
+# Si es UEFI copio el cargador de arranque a la partición
+OSTYPE="$(ogGetOsType $DISK $PART)"
+if ogIsEfiActive && [ "$OSTYPE" == "Windows" ]; then
+ ogEcho log session "[25] $MSG_HELP_ogCopyEfiBootLoader"
+ ogCopyEfiBootLoader $DISK $PART
+fi
+
+# FALTA: Renombrar el fichero de imagen si ya existe ¿cómo?
+# Git falta
+
+# Configuración del usuario de git.
+ogGitConfig
+
+ogEcho log session "[30] $MSG_HELP_ogCreateGitAcl"
+ogExecAndLog command ogCreateGitAcl $DISK $PART $IMGNAME
+
+
+# Crear la imagen en cache.
+echo " " > $OGLOGCOMMAND
+TIME2=$SECONDS
+ogEcho log session "[40] $MSG_HELP_ogCreateLocalGitImage ogCreateLocalGitImage $DISK $PART $IMGNAME \"$MSGCOMMIT\""
+ogExecAndLog command ogCreateLocalGitImage "$DISK" "$PART" "$IMGNAME" "$MSGCOMMIT" &>> $OGLOGCOMMAND || ogRaiseError $OG_ERR_IMAGE "$IMGNAME"|| exit $?
+TIMEAUX2=$[SECONDS-TIME2]
+ogEcho log session " $RESUMECREATEIMAGE "
+ogEcho log session " $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX2/60]m $[TIMEAUX2%60]s"
+
+# Enviar imagen a repositorio
+if [ "$REPO" == "REPO" ]; then
+ ogEcho log session "[60] $MSG_HELP_ogPushImage ogPushImage $DISK $PART $IMGNAME"
+ ogExecAndLog command ogPushImage $DISK $PART $IMGNAME
+fi
+
+# Guardamos información de la imagen
+ogExecAndLog command ogSaveImageInfo $DISK $PART $REPO $IMGNAME
+
+TIME=$[SECONDS-TIME1]
+ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s"
+ogEcho log session " FileSystem $DEVICE with $SIZEDATA KB data created onto branch $IMGNAME of GIT"
diff --git a/client/shared/scripts/deployGitImage b/client/shared/scripts/deployGitImage
new file mode 100755
index 00000000..31fcec61
--- /dev/null
+++ b/client/shared/scripts/deployGitImage
@@ -0,0 +1,179 @@
+#!/bin/bash
+#/**
+#@file deployGitImage
+#@brief Proceso completo de despliegue de imagen, incluyendo actualización de la caché, restauración y post-configuración (este script es llamado por la interfaz RestaurarBaseImagen).
+#@param $1 Repositorio (CACHE, REPO o dirección IP)
+#@param $2 Nombre canónico de la imagen (sin extensión)
+#@param $3 Número de disco
+#@param $4 Número de particion
+#@param $5 Protocolo (Git)
+#@param $6 Opciones del protocolo str_modo_git:str_modo_acl str_modo_git=clone|checkout str_modo_acl:total|user
+#@exception OG_ERR_FORMAT 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND 2 fichero de imagen o partición no detectados.
+#@exception OG_ERR_PARTITION 3 # Error en partición de disco.
+#@exception OG_ERR_LOCKED 4 partición bloqueada por otra operación.
+#@exception OG_ERR_IMAGE 5 error al restaurar la imagen del sistema.
+#@exception OG_ERR_IMGSIZEPARTITION 30 Tamaño de la particion es menor al tamaño de la imagen.
+#@exception OG_ERR_NOTCACHE No existe cache -15-
+#@exception OG_ERR_CACHESIZE Tamaño de la paticion menor al archivo a descargar -16-
+#@version 1.2 - primera versión basada en deployImagen y script de GIT de UGR
+#@date 2020/07/07
+#**/
+
+
+#Descripcion:
+# Si Repositorio es el global (REPO) realiza un deploy.
+# Si Repositorio es local (CACHE) realiza un restoreGitImage CACHE
+# El deploy, si detecta que el cliente no tiene una CACHE o no tiene espacio suficiente consulta el engine.cfg RESTOREPROTOCOLNOCACHE
+
+
+
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$PROG" "$PROG [REPO|CACHE] imagen ndisk npart GIT [clone|checkout]:[total|user]" \
+ "$PROG REPO Ubuntu20 1 2 GIT clone:total" \
+ "$PROG CACHE Windows20 1 1 GIT checkout:user"
+ exit 0
+fi
+
+
+if [ $# -lt 4 ]; then
+ ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco nparticion GIT [opciones protocolo] ]"
+ exit $?
+fi
+
+# El protocolo tiene que se GIT
+[ "${5^^}" == "GIT" ] || ogRaiseError $OG_ERR_OUTOFLIMIT "$PROG: único protocolo permitido GIT" || exit $?
+
+# Asignación de variables (repositorio y protocolo se convierten a mayúsculas).
+TIME1=$SECONDS
+REPO="${1^^}"
+REPO=${REPO:-"REPO"}
+IMGNAME="$2"
+DISK="$3"
+PART="$4"
+PROTO="${5^^}"
+PROTOOPT="${6:-checkout:total}"
+
+# Unidad organizativa.
+[ "$ogunit" != "" ] && OGUNIT="$ogunit"
+
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+echo " " > $OGLOGCOMMAND
+[ "$(ogGetCaller)" == "EjecutarScript" ] || echo -n "" > $OGLOGSESSION
+
+# Registro de inicio de ejecución
+ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+
+# Si el origen(pariticion) esta bloqueada salir.
+ogIsLocked $DISK $PART && exit $(ogRaiseError session $OG_ERR_LOCKED "$MSG_PARTITION, $DISK $PART"; echo $?)
+
+#ogEcho log session "$MSG_HELP_ogUnmount $DISK $PART"
+#ogUnmount $DISK $PART 2>/dev/null
+
+# Valor por defecto para el repositorio.
+if [ "$REPO" == "$(ogGetIpAddress)" -o "$REPO" == "CACHE" ]; then
+ REPO="CACHE"
+else
+ ogCheckIpAddress "$REPO"
+ if [ $? -eq 0 -o "$REPO" == "REPO" ]; then
+ # Si falla el cambio -> salimos con error repositorio no valido
+ ogChangeRepo $REPO ${OGUNIT} || exit $(ogRaiseError $OG_ERR_NOTFOUND "$REPO $OGUNIT"; echo $?)
+ REPO="REPO"
+ fi
+fi
+
+# Comprobamos que existe la imagen
+ogExistGitImage $REPO "$IMGNAME" || ogRaiseError log session $OG_ERR_NOTFOUND "$REPO $IMGNAME" || exit $?
+
+#Informacioin previa de la imagen
+INFOFILE=$(ogGetPath $REPO ".$IMGNAME.img.json")
+IMGSIZE=$(jq .size $INFOFILE|tr -d \")
+
+ogEcho log session "[1] REPO=$REPO IMG-BRANCH=$IMGNAME SIZE=$IMGSIZE (KB)"
+
+# Procesar repositorio.
+if [ $REPO == "REPO" ]; then
+ ogEcho log session "[2] updateGitCache "$REPO" \"/$IMGNAME\" $PROTO $PROTOOPT"
+ TIME2=$SECONDS
+ updateGitCache "$REPO" "$IMGNAME" "$PROTO" "$PROTOOPT"
+ RETVAL=$?
+ TIME2=$[SECONDS-TIME2]
+ ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL updateGitCache $[TIME2/60]m $[TIME2%60]s"
+ case $RETVAL in
+ 0)
+ ogEcho log session "[50] updateGitCache (OK)"
+ ;;
+ 15|16)
+ # no se permite usar la cache (no existe(15) o no espacio sufiente (16). Se consulta engine.cfg para RESTOREPROTOCOLNOCACHE [ multicast unicast none ]
+ ogEcho log session "[50] $MSG_ERR_NOTCACHE ; $MSG_ERR_CACHESIZE "
+ ogEcho log session "[50] $MSG_SCRIPTS_CHECK_ENGINE: RESTOREPROTOCOLNOTCACHE=$RESTOREPROTOCOLNOTCACHE "
+ case $RETVAL in
+ 15)
+ ogEcho log session "[100] $MSG_ERR_NOTCACHE"
+ ogRaiseError session $OG_ERR_NOTCACHE "NOT CACHE"
+ exit $?
+ ;;
+ 16)
+ ogEcho log session "[100] $MSG_ERR_CACHESIZE "
+ ogRaiseError session $OG_ERR_CACHESIZE "CACHE FULL"
+ exit $?
+ ;;
+ esac # del segundo RETAVAL
+ ;;
+ *)
+ # Error desconocido
+ exit $RETVAL
+ ;;
+ esac
+fi
+
+TIME3=$SECONDS
+
+# Si existe, ejecuta script personalizado "restoreImageCustom"; si no, llama al genérico "restoreImage".
+if which restoreGitImageCustom &>/dev/null; then
+ ogEcho log session "[55] $MSG_HELP_ogRestoreGitImage: restoreGitImageCustom CACHE \"$IMGNAME\" $DISK $PART $PROTO $PROTOOPT"
+ restoreGitImageCustom "$IMGNAME" $DISK $PART $PROTO $PROTOOPT
+else
+ ogEcho log session "[55] $MSG_HELP_ogRestoreGitImage: restoreGitImage CACHE \"$IMGNAME\" $DISK $PART $PROTO $PROTOOPT"
+ restoreGitImage CACHE "$IMGNAME" $DISK $PART $PROTO $PROTOOPT
+fi
+RETVAL=$?
+
+# Mostrar resultados.
+RESUMERESTOREIMAGE=$(grep -m 1 "Total Time:" $OGLOGCOMMAND)
+ogEcho log session " [ ] $RESUMERESTOREIMAGE "
+# Si la transferencia ha dado error me salgo.
+if [ $RETVAL -ne 0 ] ; then
+ ogRaiseError session $OG_ERR_IMAGE "$REPO $IMGNAME" 2>&1
+ # Muestro registro de fin de ejecución si no viene de Ejecutar Script
+ [ "$(ogGetCaller)" == "EjecutarScript" ] || ogEcho log session "$MSG_INTERFACE_END $OG_ERR_IMAGE"
+ exit $OG_ERR_IMAGE
+fi
+TIME3=$[SECONDS-TIME3]
+ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL : $[TIME3/60]m $[TIME3%60]s"
+
+# Si existe, ejecuta script personalizado de postconfiguración "configureOsCustom"; si no, llama al genérico "configureOs".
+if which configureOsCustom &>/dev/null; then
+ ogEcho log session "[90] configureOsCustom"
+ configureOsCustom "$DISK" "$PART" "$REPO" "$IMGNAME"
+else
+ ogEcho log session "[90] $MSG_SCRIPTS_OS_CONFIGURE "
+ configureOs "$DISK" "$PART"
+fi
+
+TIME=$[SECONDS-TIME1]
+ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s"
+
+# Registro de fin de ejecución
+# Si se ha llamado desde ejecutar script no lo muestro para no repetir.
+if [ "$(ogGetCaller)" != "EjecutarScript" ] ; then
+ ogEcho log session "$MSG_INTERFACE_END $RETVAL"
+ exit $RETVAL
+fi
diff --git a/client/shared/scripts/restoreGitImage b/client/shared/scripts/restoreGitImage
new file mode 100755
index 00000000..1817108e
--- /dev/null
+++ b/client/shared/scripts/restoreGitImage
@@ -0,0 +1,111 @@
+#!/bin/bash
+#/**
+#@file restoreGitImage
+#@brief Script de ejemplo para restaurar una imagen.
+#@param $1 Repositorio (CACHE, REPO o dirección IP)
+#@param $2 Nombre canónico de la imagen (sin extensión)
+#@param $3 Número de disco
+#@param $4 Número de particion
+#@param $5 Protocolo (GIT)
+#@param $6 Opciones del protocolo [str_modo_git:str_modo_acl] str_modo_git=clone|checkout str_modo_acl:total|sync
+#@exception OG_ERR_FORMAT 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND 2 cambio de repositorio: repositorio no encontrado
+#@exception OG_ERR_NOTFOUND 2 fichero de imagen o partición no detectados.
+#@exception $OG_ERR_MCASTRECEIVERFILE 57 Error en la recepción Multicast de un fichero
+#@exception $OG_ERR_PROTOCOLJOINMASTER 60 Error en la conexión de una sesión Unicast|Multicast con el Master
+#@version 1.2 - Primera versión. Se parte de los script de UGR y de restoreImage de OpenGnsys
+#@date 2020/01/08
+#**/
+
+TIME1=$SECONDS
+PROG="$(basename $0)"
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$PROG" "$PROG CACHE imagen ndisk npart GIT [ git_mode:acl_mode ]" \
+ "$PROG CACHE Ubuntu20 1 2 GIT clone:total" \
+ "$PROG CACHE Windows20 1 1 GIT checkout:user"
+ exit 0
+fi
+
+# Controlamos el número de parámetros.
+if [ $# -lt 4 ]; then
+ ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG CACHE imagen ndisco nparticion GIT [ git_mode:acl_mode ]"
+ exit $?
+fi
+
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+echo " " > $OGLOGCOMMAND
+ogCheckStringInGroup "$(ogGetCaller)" "deployGitImage restoreGitImageCustom" || echo -n "" > $OGLOGSESSION;
+
+ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+
+# Procesar parámetros de entrada
+REPO="${1^^}"
+IMGNAME="$2"
+DISK="$3"
+PART="$4"
+PROTOOPT="${6:-clone:total}"
+GITMODE=${PROTOOPT%:*}
+ACLMODE=${PROTOOPT#*:}
+
+# El protocolo tiene que se GIT
+[ "${5^^}" == "GIT" ] || ogRaiseError $OG_ERR_FORMAT "único protocolo permitido GIT" || exit $?
+
+# Comprobamos que el modo de Git es correcto
+ogCheckStringInGroup "$GITMODE" "clone checkout" || ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: str_git_mode:clone|checkout" || exit $?
+
+# Si es una ip y es igual a la del equipo restaura desde cache
+[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE"
+[ "$REPO" == "CACHE" ] || ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT Solo permitido desde cache" || exit $?
+
+# Comprobamos que la partición se pueda montar. Si no modo total (formateo)
+MNTDIR=$(ogMount $DISK $PART) || GITMODE="clone"
+
+TIME2=$SECONDS
+if [ "$GITMODE" == "checkout" ]; then
+ # comprobamos que la partición contenga la imagen. Si no modo clone
+ cd $MNTDIR
+ git branch| grep "[ *] ${IMGNAME}$" &>/dev/null
+
+ if [ $? -eq 0 ]; then
+ # Revertimos la partición a la situación inicial de git
+ ogEcho log session "ogSyncLocalGitImage $DISK $PART"
+ ogSyncLocalGitImage $DISK $PART
+ else
+ GITMODE="clone"
+ fi
+fi
+
+if [ "$GITMODE" == "clone" ]; then
+ # Comprobar que exista la imagen la cache
+ ogExistGitImage CACHE "$IMGNAME" || ogRaiseError session $OG_ERR_NOTFOUND "CACHE $IMGNAME" || exit
+
+ # Las ACL se deben restaurar completas
+ ACLMODE="total"
+
+ # Procesar protocolos de transferencia.
+ ogGitConfig
+
+ # Restauramos datos (formatea la partición)
+ ogEcho log session "ogRestoreLocalGitImage $IMGNAME $DISK $PART"
+ ogExecAndLog command ogRestoreLocalGitImage $IMGNAME $DISK $PART || exit $?
+fi
+TIME2=$[SECONDS-TIME2]
+ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL ogSyncLocalGitImage/ogRestoreLocalGitImage $[TIME2/60]m $[TIME2%60]s"
+
+TIME3=$SECONDS
+# Restauramos ACL
+# Nota: al restaurar las acl da falsos errores, no podemos controlar el error.
+ogEcho log session "ogRestoreGitAcl $IMGNAME $DISK $PART $ACLMODE"
+ogExecAndLog command ogRestoreGitAcl $IMGNAME $DISK $PART $ACLMODE
+TIME3=$[SECONDS-TIME3]
+ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL ogRestoreGitAcl $[TIME3/60]m $[TIME3%60]s"
+
+TIME=$[SECONDS-TIME1]
+ogEcho log session "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s"
diff --git a/client/shared/scripts/updateGitCache b/client/shared/scripts/updateGitCache
new file mode 100755
index 00000000..8ceab2a4
--- /dev/null
+++ b/client/shared/scripts/updateGitCache
@@ -0,0 +1,89 @@
+#!/bin/bash
+#/**
+# updateGitCache
+#@brief Actualiza la cache del cliente con imagen tipo git
+#@param 1 REPO Origen del fichero. -accesible por nfs-samba-
+#@param 2 str_fichero nombre del fichero a actualizar.
+#@param 3 str_protoco. GIT
+#@ejemplo: updateGitCache 172.17.36.11 imagen1 GIT
+#@return
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@exception OG_ERR_NOTCACHE No existe cache -15-
+#@todo si existe la imagen sólo actualizar
+#@date 2019/12/19
+#*/ ##
+
+TIME=$SECONDS
+PROG="$(basename $0)"
+if [ $# -lt 3 ]; then
+ ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG str_REPO _str_IMGNAME GIT"
+ exit $?
+fi
+
+#Carga del configurador del engine
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+echo " " > $OGLOGCOMMAND
+
+if ! [ "$(ogGetCaller)" == "deployGitImage" ]; then
+ echo -n "" > $OGLOGSESSION;
+
+ # Registro de inicio de ejecución
+ ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+fi
+
+REPOSITORIO="${1^^}"
+IMGNAME="$2"
+PROTOCOLO="${3^^}"
+[ "$PROTOCOLO" == "GIT" ] || ogRaiseError "$PROG: protocolo $PROTOCOLO" || exit $?
+GITDIR=${GITDIR:-"git"}
+
+# Unidad organizativa.
+[ "$ogunit" != "" ] && OGUNIT="$ogunit/"
+
+# Si es una ip y es distinta a la del recurso samba cambiamos de REPO.
+ogCheckIpAddress $REPOSITORIO
+if [ $? == 0 -o $REPOSITORIO == "REPO" ] ; then
+ # Si falla el cambio -> salimos con error repositorio no valido
+ ogChangeRepo $REPOSITORIO $OGUNIT || exit $(ogRaiseError $OG_ERR_NOTFOUND $REPOSITORIO; echo $?)
+ REPOSITORIO="REPO"
+fi
+REPOIP=$(ogGetRepoIp)
+ogEcho log session $REPOSITORIO $REPOIP $PROTOCOLO $OPTPROTOCOLO
+
+# Si el repositorio local CACHE no existe error 15.
+if ! $(ogFindCache >/dev/null); then
+ ogRaiseError session $OG_ERR_NOTCACHE "CACHE"
+ exit $?
+fi
+
+
+
+# Comprobar si existe la imagen en el repo remoto
+ogExistGitImage REPO "$IMGNAME" || ogRaiseError log session $OG_ERR_NOTFOUND "REPO $IMGNAME" || exit $?
+
+# Si no existe el directorio de git lo creamos
+ogMountCache
+[ -d $OGCAC$OGIMG/$GITDIR ] || mkdir $OGCAC$OGIMG/$GITDIR
+
+# Copiamos la información de la imagen
+ogCopyFile REPO "/.$IMGNAME.img.json" CACHE / || ogRaiseError log session $OG_ERR_NOTFOUND "REPO .$IMGNAME.img.json"
+
+# Comprobar si existe la imagen en el repo local para actualizar o empezar de cero
+#FALTA si existe en cache la actualizamos.
+ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_DOUPDATE"
+ogExistGitImage CACHE "$IMGNAME" && echo "La imagen ya está bajada" && exit 0
+ogEcho log session ogPullImage $IMGNAME $DISK $PART
+#ogExecAndLog command ogPullImage $IMGNAME $DISK $PART
+ogPullImage $IMGNAME
+RETVAL=$?
+[ $RETVAL -eq 0 ] || ogRaiseError log session || exit $?
+
+# FALTA: comprobar que ha ido bien
+
+TIME1=$[SECONDS-TIME]
+
+ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL $[TIME1/60]m $[TIME1%60]s"
+TIME2=$SECONDS