diff options
Diffstat (limited to 'client/shared')
-rw-r--r-- | client/shared/etc/engine.cfg | 7 | ||||
-rwxr-xr-x | client/shared/etc/init/default.sh | 17 | ||||
-rw-r--r-- | client/shared/etc/lang.ca_ES.conf | 4 | ||||
-rw-r--r-- | client/shared/etc/lang.en_GB.conf | 2 | ||||
-rw-r--r-- | client/shared/etc/lang.es_ES.conf | 5 | ||||
-rwxr-xr-x | client/shared/etc/preinit/loadenviron.sh | 2 | ||||
-rwxr-xr-x | client/shared/etc/preinit/mountrepo.sh | 23 | ||||
-rwxr-xr-x | client/shared/scripts/cloneRemoteFromMaster | 53 | ||||
-rwxr-xr-x | client/shared/scripts/configureOs | 14 | ||||
-rwxr-xr-x | client/shared/scripts/createBaseImage | 3 | ||||
-rwxr-xr-x | client/shared/scripts/createDiffImage | 12 | ||||
-rwxr-xr-x | client/shared/scripts/deployImage | 51 | ||||
-rwxr-xr-x | client/shared/scripts/generateMenuDefault | 13 | ||||
-rwxr-xr-x | client/shared/scripts/installOfflineMode | 60 | ||||
-rwxr-xr-x | client/shared/scripts/poweroff | 2 | ||||
-rwxr-xr-x | client/shared/scripts/reboot | 3 | ||||
-rwxr-xr-x | client/shared/scripts/restoreBaseImage | 3 | ||||
-rwxr-xr-x | client/shared/scripts/restoreDiffImage | 16 | ||||
-rwxr-xr-x | client/shared/scripts/restoreImage | 2 | ||||
-rwxr-xr-x | client/shared/scripts/updateCache | 13 |
20 files changed, 224 insertions, 81 deletions
diff --git a/client/shared/etc/engine.cfg b/client/shared/etc/engine.cfg index 82766a2f..895881be 100644 --- a/client/shared/etc/engine.cfg +++ b/client/shared/etc/engine.cfg @@ -10,8 +10,8 @@ OGWINCHKDISK=TRUE #Configuracion de interface restauracion #Que hacer cuando la cache no tenga espacio libre. [ NONE | FORMAT ] ] ACTIONCACHEFULL=NONE -# Protocolo a usar en el caso de que no exita cache o no haya espacio sufiencie. -RESTOREPROTOCOLNOCACHE=UNICAST +#Que protocolo de restauracion usar en el caso de que no exista cache o no exista espacio sufiente. [NONE | UNICAST | MULTICAST].NONE retorna error +RESTOREPROTOCOLNOTCACHE=UNICAST #script Creacion imagen IMGPROG="partclone" @@ -35,3 +35,6 @@ IMGFS=EXT4 # Tiempo de sleep antes de realizar el reboot OGSLEEP="20" + +# Indica si se instala automáticamente el cliente OpenGnSys en el despliegue de un SO (por defecto, no instalar). +INSTALLOSCLIENT=FALSE diff --git a/client/shared/etc/init/default.sh b/client/shared/etc/init/default.sh index 29a8cc04..e87b4b61 100755 --- a/client/shared/etc/init/default.sh +++ b/client/shared/etc/init/default.sh @@ -20,13 +20,20 @@ if [ -x $OPENGNSYS/job_executer/init.d/job_executer ]; then fi # Arranque de OpenGnSys Client daemon (socket). -if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then - echo "${MSG_LAUNCHCLIENT:-.}" - [ "$ogactiveadmin" == "true" ] && boot="admin" - # Indicar fichero de teclado de Qt para el idioma especificado (tipo "es.qmap"). - [ -f /usr/local/etc/${LANG%_*}.qmap ] && export QWS_KEYBOARD="TTY:keymap=/usr/local/etc/${LANG%_*}.qmap" +echo "${MSG_LAUNCHCLIENT:-.}" +[ "$ogactiveadmin" == "true" ] && boot="admin" +# Indicar fichero de teclado de Qt para el idioma especificado (tipo "es.qmap"). +[ -f /usr/local/etc/${LANG%_*}.qmap ] && export QWS_KEYBOARD="TTY:keymap=/usr/local/etc/${LANG%_*}.qmap" + +if [ -x "$OPENGNSYS/bin/ogAdmClient" -a "$ogstatus" != "offline" ]; then # Ejecutar servicio cliente. $OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d $LOGLEVEL +else + for FILE in index $OGGROUP $(ogGetIpAddress) + do + [ -f $OGCAC/menus/$FILE.html ] && OGMENU="$OGCAC/menus/$FILE.html" + done + $OPENGNSYS/bin/browser -qws $OGMENU fi # Si fallo en cliente y modo "admin", cargar shell; si no, salir. diff --git a/client/shared/etc/lang.ca_ES.conf b/client/shared/etc/lang.ca_ES.conf index d6257dc0..5220ff6e 100644 --- a/client/shared/etc/lang.ca_ES.conf +++ b/client/shared/etc/lang.ca_ES.conf @@ -31,6 +31,7 @@ MSG_ERR_MCASTRECEIVERFILE="Error en la recepcion MULTICAST de un fichero" MSG_ERR_MCASTSENDPARTITION="Error en envio MULTICAST de una particion" MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepcion MULTICAST de un fichero" MSG_ERR_PROTOCOLJOINMASTER="Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER" +MSG_ERR_DONTFORMAT="Error al formatear" MSG_ERR_DONTMOUNT_IMAGE="Error al montar/reducir la imagen" MSG_ERR_DONTUNMOUNT_IMAGE="Error al desmontar la imagen" MSG_ERR_DONTSYNC_IMAGE="Imagen no sincronizable" @@ -40,6 +41,7 @@ MSG_ERR_SYNCHRONIZING="Error al sincronizar, puede afectar la creacion|restaurac # Mensajes de avisos. MSG_DONTMOUNT="Sistema de archivos no montado" MSG_DONTUNMOUNT="El sistema de archivos no se puede desmontar o no está montado" +MSG_MOUNT="Sistema de archivos montado" # Mensajes complementarios para las ayudas. MSG_64BIT="64 bits" @@ -233,7 +235,7 @@ MSG_SCRIPTS_FILE_RENAME=" Renombrar fichero-imagen previo: " MSG_SCRIPTS_CREATE_SIZE=" Calcular espacio (KB) requerido para almacenarlo y el disponible: " # Script updateCache. -MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Comprobamos si Actualizacion - existe una imagen con igual nombre pero distinto sum-" +MSG_SCRIPTS_UPDATECACHE_DOUPDATE="comprovar si es necessari actualitzar el fitxer imatge" MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE="Comprobar que el tamaño de la cache es mayor que el fichero a descargar." # Script updateCache: para las imágenes sincronizadas tipo dir. MSG_SCRIPTS_UPDATECACHE_CHECKSIZEDIR="Calculamos el tamaño de la imagen." diff --git a/client/shared/etc/lang.en_GB.conf b/client/shared/etc/lang.en_GB.conf index 42a39b9c..737da340 100644 --- a/client/shared/etc/lang.en_GB.conf +++ b/client/shared/etc/lang.en_GB.conf @@ -31,6 +31,7 @@ MSG_ERR_MCASTRECEIVERFILE="Error en la recepcion MULTICAST de un fichero" MSG_ERR_MCASTSENDPARTITION="Error en envio MULTICAST de una particion" MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepcion MULTICAST de un fichero" MSG_ERR_PROTOCOLJOINMASTER="Error in connecting a Unicast|Multicast session to the master" +MSG_ERR_DONTFORMAT="Error al formatear" MSG_ERR_DONTMOUNT_IMAGE="Failed to mount/reduce image" MSG_ERR_DONTUNMOUNT_IMAGE="Failed to unmount image" MSG_ERR_DONTSYNC_IMAGE="Not synchronized image" @@ -40,6 +41,7 @@ MSG_ERR_SYNCHRONIZING="Error al sincronizar, puede afectar la creacion|restaurac # Warning messages. MSG_DONTMOUNT="Unmounted filesystem" MSG_DONTUNMOUNT="Cannot unmount the filesystem" +MSG_MOUNT="Sistema de archivos montado" # Help auxiliary menssages. MSG_64BIT="64 bit" diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf index 524e95cf..46b87890 100644 --- a/client/shared/etc/lang.es_ES.conf +++ b/client/shared/etc/lang.es_ES.conf @@ -31,6 +31,7 @@ MSG_ERR_MCASTRECEIVERFILE="Error en la recepción Multicast de un fichero" MSG_ERR_MCASTSENDPARTITION="Error en envío Multicast de una partición" MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepción Multicast de un fichero" MSG_ERR_PROTOCOLJOINMASTER="Error en la conexión de una sesión Unicast|Multicast con el Master" +MSG_ERR_DONTFORMAT="Error al formatear" MSG_ERR_DONTMOUNT_IMAGE="Error al montar/reducir la imagen" MSG_ERR_DONTUNMOUNT_IMAGE="Error al desmontar la imagen" MSG_ERR_DONTSYNC_IMAGE="Imagen no sincronizable" @@ -40,6 +41,7 @@ MSG_ERR_SYNCHRONIZING="Error al sincronizar, puede afectar la creacion|restaurac # Mensajes de avisos. MSG_DONTMOUNT="Sistema de archivos no montado" MSG_DONTUNMOUNT="El sistema de archivos no se puede desmontar o no está montado" +MSG_MOUNT="Sistema de archivos montado" # Mensajes complementarios para las ayudas. MSG_64BIT="64 bits" @@ -210,6 +212,7 @@ MSG_HELP_ogWaitMountImage="Se espera un tiempo estimado a que se monte la imagen MSG_HELP_configureOs="Post-configura de arranque del sistema" MSG_HELP_createBaseImage="Genera imagen básica de la partición" MSG_HELP_createDiffImage="Genera imagen diferencial de la partición respecto a la imagen básica" +MSG_HELP_installOfflineMode="Prepara el equipo cliente para el modo offline." MSG_HELP_partclone2sync="Convierte imagen de partclone en imagen sincronizable." MSG_HELP_restoreBaseImage="Restaura una imagen básica en una partición" MSG_HELP_restoreDiffImage="Restaura una imagen diferencial en una partición" @@ -233,7 +236,7 @@ MSG_SCRIPTS_FILE_RENAME=" Renombrar fichero-imagen previo: " MSG_SCRIPTS_CREATE_SIZE=" Calcular espacio (KB) requerido para almacenarlo y el disponible: " # Script updateCache. -MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Comprobar si actualización -existe una imagen con igual nombre pero distinto sum-" +MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Comprobar si es necesario actualizar el fichero imagen " MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE="Comprobar que el tamaño de la caché es mayor que el fichero a descargar." # Script updateCache: para las imágenes sincronizadas tipo dir. MSG_SCRIPTS_UPDATECACHE_CHECKSIZEDIR="Calcular el tamaño de la imagen." diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh index f5f45628..b165ecfd 100755 --- a/client/shared/etc/preinit/loadenviron.sh +++ b/client/shared/etc/preinit/loadenviron.sh @@ -119,6 +119,7 @@ export OG_ERR_NOGPT=22 # El disco indicado no contiene una particion GPT export OG_ERR_IMGSIZEPARTITION=30 # Error al restaurar partición más pequeña que la imagen export OG_ERR_UPDATECACHE=31 # Error al realizar el comando updateCache +export OG_ERR_DONTFORMAT=32 # Error al formatear export OG_ERR_GENERIC=40 # Error imprevisto no definido export OG_ERR_UCASTSYNTAXT=50 # Error en la generación de sintaxis de transferenica UNICAST export OG_ERR_UCASTSENDPARTITION=51 # Error en envío UNICAST de partición @@ -137,3 +138,4 @@ export OG_ERR_DONTSYNC_IMAGE=71 # Imagen no sincronizable (es monolitica) export OG_ERR_DONTUNMOUNT_IMAGE=72 # Error al desmontar la imagen export OG_ERR_NOTDIFFERENT=73 # No se detectan diferencias entre la imagen basica y la particion. export OG_ERR_SYNCHRONIZING=74 # Error al sincronizar, puede afectar la creacion/restauracion de la imagen + diff --git a/client/shared/etc/preinit/mountrepo.sh b/client/shared/etc/preinit/mountrepo.sh index e12990fd..62b1107e 100755 --- a/client/shared/etc/preinit/mountrepo.sh +++ b/client/shared/etc/preinit/mountrepo.sh @@ -25,6 +25,29 @@ if [ "$ogactiveadmin" == "true" ]; then PASS=${PASS:-"og"} mount.cifs //${ROOTREPO}/ogimages $OGIMG -o rw,serverino,acl,username=opengnsys,password=$PASS ;; + local) # TODO: hacer funcion dentro de este script que monte smb + # Comprobamos que estatus sea online. + if [ "$ogstatus" == "offline" -o "$SERVER" == "" ]; then + # Si estatus es offline buscamos un dispositivo con etiqueta repo + # y si no existe montamos la cache como repo (si existe). + TYPE=$(blkid | grep REPO | awk -F"TYPE=" '{print $2}' | tr -d \") + if [ "$TYPE" == "" ]; then + [ -d $OGCAC/$OGIMG ] && mount --bind $OGCAC/$OGIMG $OGIMG + else + mount -t $TYPE LABEL=REPO $OGIMG &>/dev/null + fi + else + # Comprobamos que existe un servicio de samba. + smbclient -L $SERVER -N &>/dev/null + if [ $? -eq 0 ]; then + PASS=$(grep "^[ ]*\(export \)\?OPTIONS=" /scripts/ogfunctions 2>&1 | \ + sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/') + PASS=${PASS:-"og"} + mount.cifs //${ROOTREPO}/ogimages $OGIMG -o rw,serverino,acl,username=opengnsys,password=$PASS + fi + # TODO: buscar condicion para NFS + fi + ;; esac fi diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster index c8575915..9aedefde 100755 --- a/client/shared/scripts/cloneRemoteFromMaster +++ b/client/shared/scripts/cloneRemoteFromMaster @@ -54,6 +54,9 @@ #@version 1.0.3 - Habilita el uso de la variable OGWINREDUCE=TRUE|TRUE para reducir el sistema de archivos a enviar #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2011/12/22 +#@version 1.0.6 - Uso de la funcion ogExecuteAndLog +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2012/02/12 #*/ ## #test 1. cliente sin particiones. Detectado TODO: crear estrucutras de particiones @@ -63,25 +66,35 @@ #test 5. master sin origen particion. #test 6. master sin origen fichero. -#Carga del configurador del engine -[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg - +TIME1=$SECONDS +PROG="$(basename $0)" trap "pkill faucet; exit 1" 0 1 2 3 6 9 14 15 -TIME1=$SECONDS -PROG="$(basename $0)" +#AYUDA if [ $# -lt 1 -o "$1" == "help" ]; then - echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp" - exit 1 + echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp" + exit 1 fi -if [ $# -lt 6 ]; then - ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ipMaster SOURCE_disco SOURCE_particion [MULTICAT|UNICAST] SESSION TARGER_disck TARGET_partition" +#ERROR +if [ $# -lt 6 ]; then + ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ipMaster SOURCE_disco SOURCE_particion [MULTICAST|UNICAST] SESSION TARGET_disk TARGET_partition" exit $? fi -# Obtener información de los parámetros de entrada. +#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 " " > $OGLOGCOMMAND + +ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*" + +# Procesar parámetros de entrada HOSTIP=`ogGetIpAddress` if [ -z "$HOSTIP" ] then @@ -115,7 +128,7 @@ pkill faucet # Preparando Instrucción según sea Master o Client case $MASTERIP in $HOSTIP) - echo "[1] Equipo Master preparando el origen de los datos a enviar" + ogEcho log session "[1] Equipo Master preparando el origen de los datos a enviar" ogGetPath $2 $3.img &>/dev/null; RC=$?; ogDiskToDev $2 $3 &>/dev/null; RETVAL=$?; @@ -168,15 +181,13 @@ case $MASTERIP in fi case "${PROTOCOL^^}" in MULTICAST) - ogEcho log session "[29] Transferencia Multicast" - ogEcho log "ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR" - ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$? + ogEcho log session "[29] Transferencia Multicast: ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR " + ogExecAndLog session "ogMcastSendPartition" "$DISKSOURCE" "$PARTSOURCE" "$SESSIONMCASTSERVER" "$TOOLCLONE" "$COMPRESOR" || RETVAL=$? ;; UNICAST) sleep 60 - ogEcho log session "[29] Transferencia Unicast" - ogEcho log "ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR" - ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$? + ogEcho log session "[29] Transferencia Unicast: ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR" + ogExecAndLog session "ogUcastSendPartition" "$DISKSOURCE" "$PARTSOURCE" "$SESSIONUCASTSERVER" "$TOOLCLONE" "$COMPRESOR" || RETVAL=$? ;; esac @@ -264,8 +275,8 @@ case $MASTERIP in SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $4}') ogEcho log "$INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE" ogMount $DISKTARGET $PARTTARGET || ogFormat $DISKTARGET $PARTTARGET - SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | grep Disk | awk -F" " '{print $3}' | tr -d kB); - + #SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | grep Disk | awk -F" " '{print $3}' | tr -d kB); + SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET ) ogEcho log session "[28] comprobando que el tamaño de la imagen $SIZEIMAGE es menor que el de la particion destino $SIZEPARTTARGET" # comprobamos que el tamaño de a imagen es menor que la del cliente. if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ] @@ -274,11 +285,11 @@ case $MASTERIP in case "${PROTOCOL^^}" in MULTICAST) ogEcho log session "ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR" - ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $(ogRaiseError $OG_ERR_MCASTRECEIVERPARTITION " l251 "; echo $?) + ogExecAndLog command "ogMcastReceiverPartition" "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $(ogRaiseError $OG_ERR_MCASTRECEIVERPARTITION " l251 "; echo $?) ;; UNICAST) ogEcho log session "ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR" - ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $(ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION " l230 "; echo $?) + ogExecAndLog command "ogUcastReceiverPartition" "$DISKTARGET" "$PARTTARGET" "$SESSIONUCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $(ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION " l230 "; echo $?) ;; esac if which configureOsCustom &>/dev/null; then diff --git a/client/shared/scripts/configureOs b/client/shared/scripts/configureOs index 45a2de86..2aa5288d 100755 --- a/client/shared/scripts/configureOs +++ b/client/shared/scripts/configureOs @@ -69,15 +69,19 @@ case "$OSTYPE" in # Registrar en Windows que la partición indicada es su nueva unidad C:\ ogWindowsRegisterPartition $1 $2 C $1 $2 #ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows - # Instalar cliente para Windows (no activar en sistema en produccion ver ticket 604). - ogInstallMiniSetup $1 $2 postconf.cmd - ogInstallWindowsClient $1 $2 postconf.cmd + # Instalar cliente para Windows si se indica en la variable INSTALLOSCLIENT. + if [ "${INSTALLOSCLIENT^^}" == "TRUE" ]; then + ogInstallMiniSetup $1 $2 postconf.cmd + ogInstallWindowsClient $1 $2 postconf.cmd + fi ;; Linux) # Postconfiguración de GNU/Linux. ## Install and Configure Grub based on OS installed and Grub 1st stage location. ogGrubInstallPartition $1 $2 - # Instalar cliente para Linux. - ogInstallLinuxClient $1 $2 + # Instalar cliente para GNU/Linux si se indica en la variable INSTALLOSCLIENT. + if [ "${INSTALLOSCLIENT^^}" == "TRUE" ]; then + ogInstallLinuxClient $1 $2 + fi ;; MacOS) # Postconfiguración de Mac OS X. # Fichero indicador de activación de postconfiguración. diff --git a/client/shared/scripts/createBaseImage b/client/shared/scripts/createBaseImage index 1e35aff4..ed9255b4 100755 --- a/client/shared/scripts/createBaseImage +++ b/client/shared/scripts/createBaseImage @@ -102,8 +102,9 @@ TIME2=$SECONDS ogEcho log session "[40] $MSG_HELP_ogCreateImage $1 $2 $3 $4 " # Si existe el fichero de la imagen se hace copia de seguridad y se redimensiona, si no existe se crea. +# Bloqueo la imagen. Si esta en modo lectura dara error y nos salimos ogEcho log session "[50] $MSG_HELP_ogCreateFileImage." -ogLockImage "$3" "/$4.$IMGEXT" +ogLockImage "$3" "/$4.$IMGEXT" || exit $? ogCreateFileImage $3 "$4" $IMGEXT $SIZEREQUIRED # Creamos la lista del contenido y lo situamos en la particion a copiar. diff --git a/client/shared/scripts/createDiffImage b/client/shared/scripts/createDiffImage index 69b90166..862c05c8 100755 --- a/client/shared/scripts/createDiffImage +++ b/client/shared/scripts/createDiffImage @@ -95,8 +95,9 @@ ORIG=$(ogMount $1 $2) || exit $(ogRaiseError session $OG_ERR_PARTITION "$1 $2" DIFFDIR="$(ogGetParentPath "$3" "/$5")" DIFFFILE="$DIFFDIR/$5.$DIFFEXT" -ogLockImage "$3" "/$4.$IMGEXT" -ogLockImage "$3" "/$5.$DIFFEXT" +# Bloqueo las imagenes -> Si no hay acceso de escritura dara error y nos saldremos. +ogLockImage "$3" "/$4.$IMGEXT" || exit $? +ogLockImage "$3" "/$5.$DIFFEXT" || exit $? # Comprobar consistencia del sistema de archivos. echo " " > $OGLOGCOMMAND @@ -138,13 +139,6 @@ ogLock $1 $2 TIMEAUX3=$[SECONDS-TIME2] ogEcho log session " $MSG_SCRIPTS_TASK_END $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX3/60]m $[TIMEAUX3%60]s" -# Del fichero de acl de la partición extraemos las acl de los ficheros de la diferencial -if [ "$FSTYPE" == "NTFS" ]; then - ogEcho log session "[55] $MSG_HELP_ogAclFilter " - ogAclFilter - TIMEAUX4=$[SECONDS-TIMEAUX3] - ogEcho log session " $MSG_SCRIPTS_TASK_END $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX4/60]m $[TIMEAUX4%60]s" -fi TIMEAUX5=$[SECONDS-TIMEAUX3] # Configuro la informacion del tamaño de los datos en /tmp/ogimg.info diff --git a/client/shared/scripts/deployImage b/client/shared/scripts/deployImage index 724d515e..89d776a6 100755 --- a/client/shared/scripts/deployImage +++ b/client/shared/scripts/deployImage @@ -14,6 +14,8 @@ #@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.0.1 - Separación en protocolos de transferencia y postconfiguracion #@author Antonio J. Doblas Viso. Universidad de Málaga #@date 2011-05-11 @@ -26,15 +28,16 @@ #@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 +#@version 1.0.6 - Se añade la gestión de errores de la CACHE cuando en el engine.cfg se define RESTOREPROTOCOLNOCACHE=NONE. +#@author Antonio J. Doblas Viso. +#@date 2015-02-23 #**/ #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 +# 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 o no tiene espacio suficiente consulta el engine.cfg RESTOREPROTOCOLNOCACHE @@ -111,17 +114,35 @@ case "$REPO" in NEXTOPERATION=CACHE ;; 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 " - if [ "$RESTOREPROTOCOLNOCACHE" == "MULTICAST" ]; then - case "$PROTO" in - MULTICAST) NEXTOPERATION=MULTICAST ;; - TORRENT) NEXTOPERATION=UNICAST ;; - UNICAST) NEXTOPERATION=UNICAST ;; - esac - else - NEXTOPERATION=UNICAST - fi + ogEcho log session "[50] $MSG_SCRIPTS_CHECK_ENGINE: RESTOREPROTOCOLNOTCACHE=$RESTOREPROTOCOLNOTCACHE " + case "$RESTOREPROTOCOLNOTCACHE" in + MULTICAST) + case "$PROTO" in + MULTICAST) NEXTOPERATION=MULTICAST ;; + TORRENT) NEXTOPERATION=UNICAST ;; + UNICAST) NEXTOPERATION=UNICAST ;; + esac + ;; + UNICAST) + NEXTOPERATION=UNICAST + ;; + NONE) + 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 + ;; + esac # del RESTOREPROTOCOLNOTCACHE ;; esac ;; diff --git a/client/shared/scripts/generateMenuDefault b/client/shared/scripts/generateMenuDefault index 7a9abd6e..09e4300f 100755 --- a/client/shared/scripts/generateMenuDefault +++ b/client/shared/scripts/generateMenuDefault @@ -9,7 +9,7 @@ source /tmp/net-$DEVICE.conf FILEINFOHTML=$OGLOG/`ogGetIpAddress`.info.html FILEINFOCACHE=$OGLOG/`ogGetIpAddress`.cache.txt ogMountCache 2>/dev/null -CACHECONTENIDO=`ls -m $OGCAC/$OGIMG 2>/dev/null` +CACHECONTENIDO="ls -m $OGCAC/$OGIMG 2>/dev/null" SPEED=$(LANG=C ethtool $DEVICE 2>/dev/null | awk '$1~/Speed/ {print $2}') case "${SPEED,,}" in @@ -23,8 +23,13 @@ case "${DUPLEX,,}" in full) ;; *) DUPLEX="<font color=\"red\">$DUPLEX</font>" esac + CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`) -expr $CACHESIZEFREE / 1024 > $FILEINFOCACHE 2>/dev/null && echo '.MB,' >> $FILEINFOCACHE +if [ $CACHESIZEFREE == 0 ]; then + echo '0.MB,' > $FILEINFOCACHE +else + expr $CACHESIZEFREE / 1024 > $FILEINFOCACHE 2>/dev/null && echo '.MB,' >> $FILEINFOCACHE +fi # Crear menú por defecto. cat > $FILEINFOHTML << EOT @@ -72,7 +77,5 @@ cat >> $FILEINFOHTML << EOT EOT # Crear contenido de la caché. -cat >> $FILEINFOCACHE << EOT -$CACHECONTENIDO -EOT +eval $CACHECONTENIDO >> $FILEINFOCACHE diff --git a/client/shared/scripts/installOfflineMode b/client/shared/scripts/installOfflineMode new file mode 100755 index 00000000..d9ff2459 --- /dev/null +++ b/client/shared/scripts/installOfflineMode @@ -0,0 +1,60 @@ +#!/bin/bash + +#/** +# installOfflineMode +#@brief Prepara el equipo cliente para el modo offline. +#@param no +#@return +#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado. +#@exception OG_ERR_NOTCACHE No existe cache. +#@author Irina Gomez. ETSII. Universidad de Sevilla +#@date 2013/12/5 +#*/ ## + +PROG="$(basename $0)" +if [ "$*" == "help" ]; then + ogHelp "$PROG $MSG_HELP_installOfflineMode" \ + "$PROG [ no param ]" + exit 0 +fi + +ogEcho log session "$MSG_HELP_installOfflineMode" +# Cargamos las variables de entorno. +[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg +DIRTFTP="/opt/oglive/tftpboot" +DIROGCLIENT="$DIRTFTP/ogclient" +# Comprobamos que el DIROGCLIENT esta montado desde repo +df |grep "$(ogGetRepoIp).*$DIRTFTP" &>/dev/null || ogRaiseError $OG_ERR_NOTFOUND "REPO OGclient" || exit $? + +# Copiamos el kernel y el initrd. +ogEcho log session " [10] updateBootCache" +updateBootCache || ogRaiseError $OG_ERR_NOTCACHE || exit $? + +# Creamos los dir necesarios. +ogEcho log session " [40] mkdir -p $OGCAC/{ogclient, menus, log}." +[ -d $OGCAC/menus/images/iconos ] || mkdir -p $OGCAC/menus/images/iconos +[ -d $OGCAC/ogclient ] || mkdir -p $OGCAC/ogclient +[ -d $OGCAC/log ] || mkdir -p $OGCAC/log +[ -d $OGCAC/opt/opengnsys/images ] || mkdir -p $OGCAC/opt/opengnsys/images + +# Comparamos el cliente en el server y en cache +ogEcho log session " [60] cp $DIROGCLIENT/ogclient.sqfs $OGCAC/ogclient/" +SERVEROGCLIENT=$(cat $DIROGCLIENT/ogclient.sqfs.sum 2>/dev/null) +CACHEOGCLIENT=$(cat $OGCAC/ogclient/ogclient.sqfs.sum 2>/dev/null) + +if [ "$CACHEOGCLIENT" != "$SERVEROGCLIENT" ]; then + cp $DIROGCLIENT/ogclient.sqfs $OGCAC/ogclient/ + cp $DIROGCLIENT/ogclient.sqfs.sum $OGCAC/ogclient/ +fi + +# Si se ha generado el menu de inicio lo copiamos a cache. +IPCLIENT=$(ogGetIpAddress) +MENU=$OGLOG/$IPCLIENT.info.html +ICONO="images/iconos/logoopengnsys.png" +[ -f $MENU ] || generateMenuDefault +ogEcho log session " [90] cp $MENU $OGCAC/menus/$IPCLIENT.html" +cp $MENU $OGCAC/menus/$IPCLIENT.html +sed -i s/"..\/images"/"images"/g $OGCAC/menus/$IPCLIENT.html +wget --no-check-certificate https://$(ogGetRepoIp)/opengnsys/$ICONO -O $OGCAC/menus/$ICONO + + diff --git a/client/shared/scripts/poweroff b/client/shared/scripts/poweroff index 9af4d669..c108e08e 100755 --- a/client/shared/scripts/poweroff +++ b/client/shared/scripts/poweroff @@ -21,7 +21,7 @@ BUSYBOX=${BUSYBOX:-"busybox"} # Retardo para dar lugar al registro en cola de acciones. sleep 5 # Parar Browser para evitar "cuelgues". -pkill browser +[ "$ogstatus" == "offline" ] || pkill browser # Apagar. $BUSYBOX poweroff diff --git a/client/shared/scripts/reboot b/client/shared/scripts/reboot index 87df09d0..87e30e21 100755 --- a/client/shared/scripts/reboot +++ b/client/shared/scripts/reboot @@ -34,7 +34,8 @@ BUSYBOX=${BUSYBOX:-"busybox"} # Retardo para dar lugar al registro en cola de acciones. sleep $TIME # Parar Browser para evitar "cuelgues". -pkill browser +[ "$ogstatus" == "offline" ] || pkill browser # Reiniciar. $BUSYBOX reboot + diff --git a/client/shared/scripts/restoreBaseImage b/client/shared/scripts/restoreBaseImage index e424baa8..c4e87ba4 100755 --- a/client/shared/scripts/restoreBaseImage +++ b/client/shared/scripts/restoreBaseImage @@ -137,6 +137,7 @@ ogExecAndLog command ogRestoreInfoImage $3 $4 # Llamar al script de post-configuración del sistema operativo. # Si a este script lo ha llamado el script restoreDiffImage no post-configuramos if [ "$(ogGetCaller)" != "restoreDiffImage" ];then + ogExecAndLog command ogRestoreAclImage $3 $4 if which configureOsCustom &>/dev/null; then ogEcho log session "[90] configureOsCustom" configureOsCustom "$3" "$4" "$1" "$2" @@ -145,6 +146,8 @@ if [ "$(ogGetCaller)" != "restoreDiffImage" ];then configureOs $3 $4 fi fi +TIMEAUX3=$[SECONDS-TIMEAUX2] +ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX3/60]m $[TIMEAUX3%60]s" TIME=$[SECONDS-TIME1] ogEcho log session "[100] $MSG_SCRIPTS_END $MSG_SCRIPTS_TIME_TOTAL: $[TIME/60]m $[TIME%60]s" diff --git a/client/shared/scripts/restoreDiffImage b/client/shared/scripts/restoreDiffImage index 20745b3e..e10a395a 100755 --- a/client/shared/scripts/restoreDiffImage +++ b/client/shared/scripts/restoreDiffImage @@ -1,15 +1,15 @@ #!/bin/bash #/** -# restoreiDiffSquash +# restoreDiffImage #@brief Script de ejemplo para restaurar una imagen diferencial. #@brief (puede usarse como base para el programa de restauración de imágenes usado por OpenGNSys Admin). #@param 1 REPO|CACHE #@param 2 imagen basica -#@param 2 imagen diferencial -#@param 3 disco -#@param 4 particion -#@param 5 protocolo -#@param 6 opciones protocolo +#@param 3 imagen diferencial +#@param 4 disco +#@param 5 particion +#@param 6 protocolo +#@param 7 opciones protocolo #@return #@exception OG_ERR_FORMAT # 1 formato incorrecto. #@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado @@ -122,6 +122,9 @@ ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[T # creando enlaces y restableciendo ACL (en windows) ogEcho log session "[70] $MSG_HELP_ogRestoreInfoImage" ogExecAndLog command ogRestoreInfoImage "$4" "$5" +ogExecAndLog command gRestoreAclImage "$4" "$5" +TIMEAUX3=$[SECONDS-TIMEAUX2] +ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX3/60]m $[TIMEAUX3%60]s" # Llamar al script de post-configuración del sistema operativo. if which configureOsCustom &>/dev/null; then @@ -136,4 +139,3 @@ ogEcho log session "[100] $MSG_SCRIPTS_END $MSG_SCRIPTS_TIME_TOTAL: $[TIME/60]m # Si ha habido problema al sincronizar nos salimos con error [ $RETVAL == 0 ] || exit $OG_ERR_SYNCHRONIZING - diff --git a/client/shared/scripts/restoreImage b/client/shared/scripts/restoreImage index 4575bf6c..6d5198aa 100755 --- a/client/shared/scripts/restoreImage +++ b/client/shared/scripts/restoreImage @@ -54,7 +54,7 @@ case "$PROTO" in ogEcho log session "[40] ogMcastReceiverPartition $DISK $PART $PORT $TOOL $COMPRESS" ogMcastRequest "$IMGNAME.img" "$PROTOOPT" ogExecAndLog command ogMcastReceiverPartition "$DISK" "$PART" "$PORT" "$TOOL" "$COMPRESS" - RETVAL=${PIPESTATUS[0]} + RETVAL=$? ;; *) # Protocolo desconocido. ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST opciones ]" diff --git a/client/shared/scripts/updateCache b/client/shared/scripts/updateCache index 889b9bf4..8760ddd2 100755 --- a/client/shared/scripts/updateCache +++ b/client/shared/scripts/updateCache @@ -75,7 +75,6 @@ else # Si la imagen es monolitica y ha elegido protocolo = RSYNC salimos con error. [ $PROTOCOLO == "RSYNC" ] && exit $(ogRaiseError session $OG_ERR_DONTSYNC_IMAGE "REPO $2"; echo $?) IMGSYNC=FALSE - #TODO: ogUpdateCacheIsNecesary debe borrar la imagen que tenga igual nombre pero distinto sum- ogUpdateCacheIsNecesary "$1" "$2" "$PROTOCOLO" RETVAL=$? fi @@ -115,7 +114,7 @@ else SIZEREQUIRED=$FILESIZE fi -#ERROR CACHESIZE 16 +#ERROR CACHESIZE 16 (tamanyo de la CACHE insuficiente) if [ "$SIZEREQUIRED" -ge "$CACHESIZE" ] then ogEcho log session "$MSG_WARNING: $MSG_ERR_CACHESIZE: $2 = $SIZEREQUIRED > CACHE = $CACHESIZE" @@ -123,14 +122,16 @@ then exit $? fi -ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO" -#ERROR CACHESIZE 16 + +#ERROR CACHESIZE 16 (Espacio libre en CACHE insuficiente) if [ "$SIZEREQUIRED" -ge "$CACHESIZEFREE" ] then - # ogEcho log session "[ ] No hay espacio sufiente en la CACHE, detectar que hacer con engine.cfg" + ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO: ACTIONCACHEFULL=$ACTIONCACHEFULL" case "$ACTIONCACHEFULL" in NONE) - NEXTOPERATION=UNICAST + ogEcho log session "$MSG_WARNING: $MSG_ERR_CACHESIZE: $2 = $SIZEREQUIRED > FREE SPACE CACHE = $CACHESIZEFREE" + ogRaiseError session $OG_ERR_CACHESIZE "CACHE FULL, NO SPACE FREE" + exit $? ;; FORMAT) ogEcho log session "[51] $MSG_HELP_ogFormatCache " |