diff options
author | ramon <ramongomez@us.es> | 2013-12-11 11:29:34 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2013-12-11 11:29:34 +0000 |
commit | d2f28cfc7ed294ce937f86fb4d41948ac3eb593b (patch) | |
tree | 4a1d2c4fc1c1c74d5b3c0dc85745830642cd8dc8 /client/shared/scripts | |
parent | ef5e5c88680cd249c79df9f230d114e575e6e0df (diff) |
#537 #533: Integrar código del ticket:337 en rama de versión.
git-svn-id: https://opengnsys.es/svn/branches/version1.0@4103 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client/shared/scripts')
-rwxr-xr-x | client/shared/scripts/createImage | 102 | ||||
-rwxr-xr-x | client/shared/scripts/deployImage | 218 | ||||
-rwxr-xr-x | client/shared/scripts/restoreImage | 112 |
3 files changed, 257 insertions, 175 deletions
diff --git a/client/shared/scripts/createImage b/client/shared/scripts/createImage index cd4a6abc..3b7053b8 100755 --- a/client/shared/scripts/createImage +++ b/client/shared/scripts/createImage @@ -1,9 +1,9 @@ #!/bin/bash #/** -# createImage +#@file createImage #@brief Scirpt de ejemplo para crear una imagen de un sistema de archivos. -#@brief (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin). +#@brief (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin). #@param 1 disco #@param 2 particion #@param 3 REPO|CACHE @@ -37,13 +37,6 @@ # test 4. crear una imagen en la Cache sin espacio sufiente. # test 5. intentar crear una imagen, en la que no se puede reducir el FS. -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 - - PROG="$(basename $0)" if [ $# -ne 4 ]; then @@ -51,33 +44,36 @@ if [ $# -ne 4 ]; then 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 #IMGPROG="partclone" #IMGCOMP="lzop" #IMGEXT="img" #IMGREDUCE="TRUE" -echo "[1] $MSG_SCRIPTS_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE +# Clear temporary file used as log track by httpdlog +# Limpia los ficheros temporales usados como log de seguimiento para httpdlog +echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp +echo "[1] $MSG_SCRIPTS_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE # Si el repositorio es CACHE comprobamos que exista if [ "$3" == "CACHE" -o "$3" == "cache" ]; then ! ogFindCache >/dev/null && exit $(ogRaiseError $OG_ERR_NOTCACHE "CACHE "; echo $?) fi -echo " " > $OGLOGCOMMAND - # Obtener información de los parámetros de entrada. PART=$(ogDiskToDev "$1" "$2" 2>/dev/null) || exit $(ogRaiseError $OG_ERR_PARTITION "$1 $2"; echo $?) -echo " " > $OGLOGCOMMAND - #Comprobamos acceso de escritura. DIRTEMP=$(date +%Y%m%d-%H%M%S) ogMakeDir $3 /$4$DIRTEMP 2>/dev/null || exit $(ogRaiseError $OG_ERR_NOTWRITE "$3"; echo $?) && ogDeleteTree $3 /$4$DIRTEMP -echo " " > $OGLOGCOMMAND - IMGDIR=$(ogGetParentPath "$3" "/$4") # Si no existe, crear subdirectorio de la imagen. if [ $? != 0 ]; then @@ -86,69 +82,68 @@ if [ $? != 0 ]; then IMGDIR=$(ogGetParentPath "$3" "/$4") || exit $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?) fi IMGFILE=$IMGDIR/$(basename "/$4").$IMGEXT + # Renombrar el fichero de imagen si ya existe. if [ -f "$IMGFILE" ]; then - echo "[10] $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"." | tee -a $OGLOGSESSION $OGLOGFILE - mv "$IMGFILE" "$IMGFILE.ant" + echo "[10] $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"." | tee -a $OGLOGSESSION $OGLOGFILE + mv "$IMGFILE" "$IMGFILE.ant" mv "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null + mv "$IMGFILE.sum" "$IMGFILE.sum.ant" 2>/dev/null fi #Comprobar espacio que requerira la imagen para ser almacenada echo " " > $OGLOGCOMMAND if ogMount $1 $2 &>/dev/null then - SIZEDATA=$(df -k | grep $PART | awk '{print $3}') - #Aplicar factor de compresion - FACTORGZIP=55/100 - FACTORLZOP=65/100 - let SIZEREQUIRED=$SIZEDATA*$FACTORLZOP - #Comprobar espacio libre en el contenedor. - [ "$3" == "CACHE" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`) - [ "$3" == "REPO" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $4}') + SIZEDATA=$(df -k | grep $PART | awk '{print $3}') + #Aplicar factor de compresion + FACTORGZIP=55/100 + FACTORLZOP=65/100 + let SIZEREQUIRED=$SIZEDATA*$FACTORLZOP + #Comprobar espacio libre en el contenedor. + [ "$3" == "CACHE" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`) + [ "$3" == "REPO" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $4}') else - ogRaiseError $OG_ERR_PARTITION "$1 $2" + ogRaiseError $OG_ERR_PARTITION "$1 $2" exit $? -fi +fi + echo "[16] $PROG: $MSG_SCRIPTS_CREATE_SIZE $SIZEREQUIRED $SIZEFREE" | tee -a $OGLOGSESSION $OGLOGFILE [ "$SIZEREQUIRED" -gt "$SIZEFREE" ] && exit $(ogRaiseError $OG_ERR_CACHESIZE "$3" || echo $?) - -# TODO: que hacer si la cache no tiene espacio libre. - +# Ejecuta script personalizado de preconfiguración del sistema operativo modelo. +if which createImageCustomPre &>/dev/null; then + createImageCustomPre "$1" "$2" "$3" "$4" +fi # Comprobar consistencia del sistema de archivos. echo " " > $OGLOGCOMMAND SIZEFS=$(ogGetFsSize $1 $2) echo "[20] $MSG_HELP_ogCheckFs $PART $SIZEFS (KB) " | tee -a $OGLOGSESSION $OGLOGFILE -ogUnmount $1 $2 +ogUnmount $1 $2 2>/dev/null ogCheckFs $1 $2 || exit $(ogRaiseError $OG_ERR_PARTITION "ogCheckFs $1 $2" && echo $?) - - -if [ "$IMGREDUCE" == "TRUE" ] +# Evaluar variable de engine.cfg para reducir el sistema de archivos en la creacion +if [ "$IMGREDUCE" == "TRUE" ] then - echo "[30]: $MSG_HELP_ogReduceFs " | tee -a $OGLOGSESSION $OGLOGFILE - ogReduceFs $1 $2 || exit $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; echo $?) - NEWSIZEFS=$(ogGetFsSize $1 $2) - TIMEAUX=$[SECONDS-TIME1] - echo " $MSG_SCRIPTS_TIME_PARTIAL ( $NEWSIZEFS KB ) : $[TIMEAUX/60]m $[TIMEAUX%60]s" | tee -a $OGLOGSESSION $OGLOGFILE + echo "[30]: $MSG_HELP_ogReduceFs " | tee -a $OGLOGSESSION $OGLOGFILE + ogReduceFs $1 $2 &>> $OGLOGCOMMAND || exit $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; echo $?) + NEWSIZEFS=$(ogGetFsSize $1 $2) + TIMEAUX=$[SECONDS-TIME1] + echo " $MSG_SCRIPTS_TIME_PARTIAL ( $NEWSIZEFS KB ) : $[TIMEAUX/60]m $[TIMEAUX%60]s" | tee -a $OGLOGSESSION $OGLOGFILE fi - - # Crear la imagen. echo " " > $OGLOGCOMMAND TIME2=$SECONDS echo "[40] $MSG_HELP_ogCreateImage : ogCreateImage $1 $2 $3 $4 $IMGPROG $IMGCOMP" | tee -a $OGLOGSESSION $OGLOGFILE -ogCreateImage $1 "$2" $3 $4 "$IMGPROG" "$IMGCOMP" || exit $(ogRaiseError $OG_ERR_IMAGE "ogCreteImage"; echo $?) -RESUMECREATEIMAGE=$(cat $OGLOGCOMMAND | grep "Total Time:") +ogCreateImage "$1" "$2" "$3" "/$4" "$IMGPROG" "$IMGCOMP" &>> $OGLOGCOMMAND || exit $(ogRaiseError $OG_ERR_IMAGE "ogCreteImage"; echo $?) +RESUMECREATEIMAGE=$(grep "Total Time:" $OGLOGCOMMAND) TIMEAUX2=$[SECONDS-TIME2] echo " $RESUMECREATEIMAGE " | tee -a $OGLOGSESSION $OGLOGFILE echo " $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX2/60]m $[TIMEAUX2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE - - -#Extender sistema de archivos +# Extender sistema de archivos TIME3=$SECONDS echo "[90] Extender sistema de archivos." | tee -a $OGLOGSESSION $OGLOGFILE ogExtendFs $1 $2 || exit $(ogRaiseError $OG_ERR_EXTENDFS "$1 $2"; echo $?) @@ -156,16 +151,19 @@ SIZEFS2=$(ogGetFsSize $1 $2) TIMEAUX3=$[SECONDS-TIME3] echo " $MSG_HELP_ogExtendFs $NEWSIZEFS -> $SIZEFS = $SIZEFS2: $[TIMEAUX3/60]m $[TIMEAUX3%60]s" | tee -a $OGLOGSESSION $OGLOGFILE - #TODO que hacer si error al extender sistemade archivos - - #resumen de la operacion -IMGSIZE=$(ls -s `ogGetPath $3 $4.img`| cut -f1 -d" ") -IMGOS=$(ogGetImageInfo `ogGetPath $3 $4.img`) +IMGSIZE=$(ls -s `ogGetPath $3 /$4.img`| cut -f1 -d" ") +IMGOS=$(ogGetImageInfo `ogGetPath $3 /$4.img`) TIME=$[SECONDS-TIME1] echo "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE echo " FileSystem $PART with $NEWSIZEFS KB data created onto file-image as $4 and used $IMGSIZE KB acros DFS $ogprotocol " | tee -a $OGLOGSESSION $OGLOGFILE echo " Image-file $4 metada: $IMGOS " | tee -a $OGLOGSESSION $OGLOGFILE + +# Ejecuta scripts personalizado de postconfiguracion del sistema operativo modelo. +if which createImageCustomPost &>/dev/null; then + createImageCustomPost "$1" "$2" "$3" "$4" +fi + diff --git a/client/shared/scripts/deployImage b/client/shared/scripts/deployImage index 1969a9ab..db6b70b7 100755 --- a/client/shared/scripts/deployImage +++ b/client/shared/scripts/deployImage @@ -1,75 +1,185 @@ #!/bin/bash - #/** -# deployImage -#@brief Actualiza la cache del cliente con una imagen, y la restaura en la partición. -#@param 1 -#@param ejemplo: -#@return -#@exception OG_ERR_FORMAT formato incorrecto. -#@note -#@todo: -#@version 0.9.1 - integracion EAC -#@author Antonio J. Doblas Viso. Universidad de Malaga. -#@date 2008/03/17 -#@version 0.9.2 - integracion OpenGnsys -#@author Antonio J. Doblas Viso. Universidad de Malaga. -#@date 2010/07/27 -#@version 1.0.2 - Separacion de log -#@author Antonio J. Doblas Viso. Universidad de Malaga. -#@date 2010/08/04 -#*/ ## - -TIME1=$SECONDS +#@file deployImage +#@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 RestaurarImagen). +#@param $1 disco +#@param $2 Número de particion +#@param $3 Nombre canónico de la imagen (sin extensión) +#@param $4 Repositorio (CACHE, REPO o dirección IP) +#@param $5 Protocolo (UNICAST, por defecto, MULTICAST o TORRENT) +#@param $6 Opciones del protocolo +#@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. +#@version 1.0.1 - Separación en protocolos de transferencia y postconfiguracion +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2011-05-11 +#@version 1.0.1 - Separación de los ficheros-log para ser gestionado por el httpd-log +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2011-05-11 +#@version 1.0.2 - Logica basada en fichero de configuracion engine.cfg +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2012-01-11 +#@version 1.0.5 - Renominación del script como "deployImage". +#@author Antonio J. Doblas Viso y Ramón M. Gómez. +#@date 2013-12-04 +#**/ + + +#Descripcion: +# La interfaz detecta: +# Si Repositorio es el global (REPO) realiza un deploy. +# Si Repositorio es local (CACHE) realiza un restoreImage CACHE +# El deploy, si detecta que el cliente no tiene una cache con espacio suficiente +# -- reazlia un ogRestore REPO -#Carga del configurador del engine -[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg PROG="$(basename $0)" if [ $# -lt 4 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]" + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco nparticion [ UNICAST|UNICAST-CACHE|MULTICAST|MULTICAST-CACHE|TORRENT [opciones protocolo] ]" exit $? fi -#controlar param1 REPO -echo "[1] $MSG_SCRIPTS_TASK_START updateCache REPO $2.img $5 $6" | tee -a $OGLOGSESSION $OGLOGFILE -updateCache REPO $2.img $5 $6 | tee -a $OGLOGCOMMAND -RETVAL=$? - -TIME2=$[SECONDS-TIME1] -echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL updateCache $[TIME2/60]m $[TIME2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE +# Asignación de variables (repositorio y protocolo se convierten a mayúsculas). +TIME1=$SECONDS +REPO="${1^^}" +IMGNAME="$2" +DISK="$3" +PART="$4" +PROTO="${5^^}" +PROTO="${PROTO:-"UNICAST"}" +PROTOOPT="$6" + +#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 " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp +# Registro de inicio de ejecución +echo "[1] $MSG_SCRIPTS_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE -if [ "$RETVAL" != "0" ] -then - echo "[100] $MSG_SCRIPTS_TASK_ERR = $RETVAL ; updateCache REPO $2.img $5 $6 " | tee -a $OGLOGSESSION $OGLOGFILE - # RC=15 No hay cache - # RC=16 no hay espacio sufiente - exit $RETVAL +# Si el origen(pariticion) esta bloqueada salir. +if ogIsLocked $DISK $PART; then + ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION, $DISK $PART" + exit $? fi - - - -TIME2=$SECONDS -echo "[50] $MSG_SCRIPTS_TASK_START ogRestore CACHE /$2 $3 $4" | tee -a $OGLOGSESSION $OGLOGFILE -ogRestoreImage CACHE /$2 $3 $4 &>> $OGLOGCOMMAND -RETVAL=$? -if [ "$RETVAL" == "0" ] -then - RESUMERESTOREIMAGE=$(cat $OGLOGCOMMAND | grep "Total Time:") - echo " [ ] $RESUMERESTOREIMAGE " | tee -a $OGLOGSESSION $OGLOGFILE - echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL : $[TIME2/60]m $[TIME2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE - TIME2=$[SECONDS-TIME2] - echo "[90] $MSG_SCRIPTS_OS_CONFIGURE " | tee -a $OGLOGSESSION $OGLOGFILE - configureOs $3 $4 | tee -a $OGLOGCOMMAND +echo "Desmontando $DISK $PART" | tee -a $OGLOGSESSION $OGLOGFILE +ogUnmount $DISK $PART 2>/dev/null + +# Valor por defecto para el repositorio. +REPO=${1:-"REPO"} +[ "$REPO" == "$(ogGetRepoIp)" ] && REPO="REPO" +[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE" + +#Informacioin previa de la imagen +IMGOS=$(ogGetImageInfo `ogGetPath $REPO $IMGNAME.img`) || exit $(echo "ERROR: $OG_ERR_NOTFOUND $MSG_ERR_NOTFOUND, IMAGEN $REPO $3" | tee -a $OGLOGSESSION $OGLOGFILE; ogRaiseError $OG_ERR_NOTFOUND "$MSG_ERR_NOTFOUND, $REPO $3"; echo $?) +IMGSIZE=$(ls -s `ogGetPath $REPO $IMGNAME.img`| cut -f1 -d" ") + +echo "[1] IMG-FILE=$3 SIZE=$IMGSIZE (KB) METADATA=$IMGOS" | tee -a $OGLOGSESSION $OGLOGFILE +echo "[1] REPO=$REPO IMG-FILE=$IMGNAME.img SIZE=$IMGSIZE (KB) METADATA=$IMGOS" | tee -a $OGLOGSESSION $OGLOGFILE + +# Procesar repositorio. +case "$REPO" in + CACHE) # Repositorio en caché local. + NEXTOPERATION=CACHE + ;; + REPO) # Repositorio remoto por defecto. + case "$PROTO" in + MULTICAST-DIRECT) + NEXTOPERATION=MULTICAST + ;; + UNICAST-DIRECT) + NEXTOPERATION=UNICAST + ;; + + # Si protocolo es torrent|torrent-cache o multicast|multicast-cache + TORRENT|TORRENT-CACHE|MULTICAST|MULTICAST-CACHE|UNICAST|UNICAST-CACHE) + echo "[2] updateCache REPO \"/$IMGNAME.img\" $PROTO $PROTOOPT" | tee -a $OGLOGSESSION $OGLOGFILE + TIME2=$SECONDS + updateCache REPO "/$IMGNAME.img" "$PROTO" "$PROTOOPT" + RETVAL=$? + TIME2=$[SECONDS-TIME2] + echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL updateCache $[TIME2/60]m $[TIME2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE + case $RETVAL in + 0) + echo "[50] updateCache (OK)" | tee -a $OGLOGSESSION $OGLOGFILE + NEXTOPERATION=CACHE + ;; + 15|16) + echo "[50] $MSG_ERR_NOTCACHE ; $MSG_ERR_CACHESIZE " | tee -a $OGLOGSESSION $OGLOGFILE + echo "[50] $MSG_SCRIPTS_CHECK_ENGINE " | tee -a $OGLOGSESSION $OGLOGFILE + if [ "$RESTOREPROTOCOLNOCACHE" == "MULTICAST" ]; then + case "$PROTO" in + MULTICAST) NEXTOPERATION=MULTICAST ;; + TORRENT) NEXTOPERATION=UNICAST ;; + UNICAST) NEXTOPERATION=UNICAST ;; + esac + else + NEXTOPERATION=UNICAST + fi + ;; + esac + ;; + *) # Error: protocolo desconocido. + ogRaiseError $OG_ERR_FORMAT "$MSG_ERR_FORMAT, $PROTO" | tee -a $OGLOGSESSION $OGLOGFILE + exit $? + ;; + esac + ;; + *) # Error: repositorio desconocido. + ogRaiseError $OG_ERR_FORMAT "$MSG_ERR_FORMAT, $REPO" | tee -a $OGLOGSESSION $OGLOGFILE + exit $? + ;; +esac + +TIME3=$SECONDS + +case "$NEXTOPERATION" in + CACHE) + echo "[55] $MSG_HELP_ogRestoreImage : restoreImage CACHE $IMGNAME $DISK $PART UNICAST" | tee -a $OGLOGSESSION $OGLOGFILE + restoreImage CACHE "$IMGNAME" "$DISK" "$PART" | tee -a $OGLOGCOMMAND + RETVAL=$? + RESUMERESTOREIMAGE=$(grep "Total Time:" $OGLOGCOMMAND) + ;; + UNICAST) + echo "[55] $MSG_HELP_ogRestoreImage : restoreImage REPO $IMGNAME $DISK $PART UNICAST" | tee -a $OGLOGSESSION $OGLOGFILE + restoreImage REPO "$IMGNAME" "$DISK" "$PART" + RETVAL=$? + RESUMERESTOREIMAGE=$(grep "Total Time:" $OGLOGCOMMAND) + ;; + MULTICAST) + echo "[55] $MSG_HELP_ogRestoreImage : restoreImage REPO $IMGNAME $DISK $PART $PROTO $PROTOOPT" | tee -a $OGLOGSESSION $OGLOGFILE + restoreImage REPO "$IMGNAME" "$DISK" "$PART" $PROTO $PROTOOPT + RETVAL=$? + RESUMERESTOREIMAGE=$(grep "Total Time:" $OGLOGCOMMAND) + ;; +esac + +echo " [ ] $RESUMERESTOREIMAGE " | tee -a $OGLOGSESSION $OGLOGFILE +TIME3=$[SECONDS-TIME3] +echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL : $[TIME3/60]m $[TIME3%60]s" | tee -a $OGLOGSESSION $OGLOGFILE + +if which configureOsCustom &>/dev/null; then + echo "[90] configureOsCustom" | tee -a $OGLOGSESSION $OGLOGFILE + configureOsCustom "$DISK" "$PART" +else + echo "[90] $MSG_SCRIPTS_OS_CONFIGURE " | tee -a $OGLOGSESSION $OGLOGFILE + configureOs "$DISK" "$PART" fi - + TIME=$[SECONDS-TIME1] echo "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE +# Registro de fin de ejecución +echo "$MSG_INTERFACE_END $RETVAL" | tee -a $OGLOGSESSION $OGLOGFILE +exit $RETVAL -exit $RETVAL
\ No newline at end of file diff --git a/client/shared/scripts/restoreImage b/client/shared/scripts/restoreImage index f08c0415..6e85293a 100755 --- a/client/shared/scripts/restoreImage +++ b/client/shared/scripts/restoreImage @@ -5,80 +5,54 @@ TIME1=$SECONDS PROG="$(basename $0)" if [ $# -lt 4 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]" + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST opciones protocolo]" exit $? fi +#Load engine configurator from engine.cfg file. +#Carga el configurador del engine desde el fichero engine.cfg +# Valores por defecto: #IMGPROG="partclone" ; #IMGCOMP="lzop" ; #IMGEXT="img" #IMGREDUCE="TRUE" +[ -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 " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp + +echo "[1] $MSG_SCRIPTS_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE + # Procesar parámetros de entrada -IMGTYPE="img" -IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") -PROTO=${5:-"UNICAST"} -if [ "$1" == "CACHE" -o "$1" == "cache" ]; then - IMGDIR=$(ogGetParentPath "$1" "$2") - # Si no existe el directorio de la imagen, crearlo. - if [ -z "$IMGDIR" ]; then - echo "[5] Creando directorio de imagen \"$1, ${2%/*}\"." - ogMakeDir "$1" "${2%/*}" || ogRaiseError $OG_ERR_NOTFOUND "$1, ${2%/*}" || exit $? - fi - IMGDIR=$(ogGetParentPath "$1" "$2") || ogRaiseError $OG_ERR_NOTFOUND "$1, ${2%/*}" || exit $? - # Procesar protocolos de transferencia. - case "$PROTO" in - UNICAST|unicast) - # Copiar fichero del repositorio al caché local. - #IMGTYPE=$(ogGetImageType "repo" "$2") - IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") - if [ -z "$IMGFILE" ] || [ $(ogIsNewerFile "repo" "$2.$IMGTYPE" "$IMGFILE") ]; then - echo "[10] Copiando imagen \"$2\" del repositorio a caché local" - ogCopyFile "repo" "$2.$IMGTYPE" "$IMGDIR" - fi - # Comprobar si existe el fichero en caché y no en el repositorio. - if [ -z "$IMGFILE" ]; then - #IMGTYPE=$(ogGetImageType "cache" "$2") - IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") - if [ -z "$IMGFILE" ]; then - ogRaiseError $OG_ERR_NOTFOUND "cache, $2.$IMGTYPE" - exit $? - fi - fi - ;; - MULTICAST|multicast) - if [ -z "$IMGFILE" ]; then - echo "[10] Copiando imagen multicast \"$2\" del repositorio a caché local" - #IMGTYPE=$(ogGetImageType "repo" "$2") - PORTBASE=`echo $6 | cut -f1 -d:` - echo "ogMcastReceiverFile SOURCE:$PORTBASE TARGET:CACHE $2.$IMGTYPE" - ogMcastReceiverFile "$PORTBASE" "CACHE" "$2.$IMGTYPE" || exit $? - IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") - fi - ;; - TORRENT|torrent) - echo "[9] copiando el fichero torrent Unicast \"$2\" del repositorio a caché local" - #IMGTYPE=$(ogGetImageType "repo" "$2") - ogCopyFile "repo" "$2.$IMGTYPE.torrent" "$IMGDIR" || exit $? - echo "[10] descargando imagen torrent($6) \"$2\" del repositorio a caché local" - ogTorrentStart "CACHE" "$2.$IMGTYPE.torrent" "peer:60" || exit $? - IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE") - ;; - *) # Protocolo desconocido. - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT opciones ]" - exit $? - esac -fi -if [ -z "$IMGFILE" ]; then - ogRaiseError $OG_ERR_NOTFOUND "$1, $2" - exit $? -fi -PART=$(ogDiskToDev "$3" "$4") || exit $? +REPO="${1^^}" +IMGNAME="$2" +DISK="$3" +PART="$4" +PROTO="${5^^}" +PROTO=${PROTO:-"UNICAST"} +PROTOOPT="$6" +IMGTYPE="${IMGTYPE:-"img"}" +# Comprobar que existe la imagen del origen. +IMGFILE=$(ogGetPath "$REPO" "$IMGNAME.$IMGTYPE") || ogRaiseError $OG_ERR_NOTFOUND "$REPO, ${IMGNAME%/*}" || exit $? +IMGDIR=$(ogGetParentPath "$REPO" "$IMGNAME") || ogRaiseError $OG_ERR_NOTFOUND "$REPO, ${IMGNAME%/*}" || exit $? -# Restaurar la imagen. -echo "[40] Restaurar imagen en $PART" -ogRestoreImage "$@" || exit $? -# Restaurar tamaño. -echo "[80] Extender sistema de archivos." -ogExtendFs $3 $4 -# Llamar al script de post-configuración del sistema operativo. -echo "[90] Post-configuracion de aranque del sistema." -configureOs $3 $4 +# Procesar protocolos de transferencia. +case "$PROTO" in + UNICAST|UNICAST-DIRECT) + # Restaurar la imagen. + echo "[40] ogRestoreImage $REPO $IMGNAME $DISK $PART UNICAST" + ogRestoreImage "$REPO" "$IMGNAME" "$DISK" "$PART" UNICAST | tee -a $OGLOGCOMMAND || exit $? + ;; + MULTICAST|MULTICAST-DIRECT) + PORT=$(echo $PROTOOPT | cut -f1 -d":") + TOOL=$(ogGetImageProgram REPO $IMGNAME) + COMPRESS=$(ogGetImageCompressor REPO $IMGNAME) + #TODO comprobar parametros anteriores + ogMcastRequest "$IMGNAME.img" "$PROTOOPT" + ogMcastReceiverPartition "$DISK" "$PART" "$PORT" "$TOOL" "$COMPRESS" | tee -a $OGLOGCOMMAND + RETVAL=$? + ;; + *) # Protocolo desconocido. + ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST opciones ]" + exit $? +esac TIME=$[SECONDS-TIME1] echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" |