diff options
author | ramon <ramongomez@us.es> | 2011-04-28 08:50:16 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2011-04-28 08:50:16 +0000 |
commit | eb9424faad0ac3598ca3d53733ac746b3c07aa0b (patch) | |
tree | 46ab2ba63d43d8d3c079e84287b1740337493083 | |
parent | 09ff7b6a1074b502ff0a65147ef7dc862d8aac27 (diff) |
branches/version1.0: aplicar cambios de la rama trunk para desarrollar version 1.0.1
git-svn-id: https://opengnsys.es/svn/branches/version1.0@1920 a21b9725-9963-47de-94b9-378ad31fedc9
-rwxr-xr-x | admin/Interface/CambiarAcceso | 33 | ||||
-rw-r--r-- | admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.c | 4 | ||||
-rw-r--r-- | admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.h | 49 | ||||
-rw-r--r-- | admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php | 26 | ||||
-rw-r--r-- | admin/WebConsole/asistentes/jscripts/asistentes.js | 2 | ||||
-rw-r--r-- | admin/WebConsole/asistentes/xajax.server.php | 74 | ||||
-rwxr-xr-x | client/engine/Image.lib | 3 | ||||
-rwxr-xr-x | client/engine/Protocol.lib | 315 | ||||
-rwxr-xr-x | client/engine/Protocol.lib.testing | 2 | ||||
-rwxr-xr-x | client/engine/System.lib | 19 | ||||
-rwxr-xr-x | client/shared/etc/init/default.sh | 4 | ||||
-rw-r--r-- | client/shared/etc/lang.es_ES.conf | 18 | ||||
-rwxr-xr-x | client/shared/etc/preinit/loadenviron.sh | 23 | ||||
-rwxr-xr-x | client/shared/scripts/cloneRemoteFromMaster | 239 | ||||
-rwxr-xr-x | client/shared/scripts/createImage | 31 | ||||
-rw-r--r-- | doc/CHANGELOG.es.txt | 39 | ||||
-rw-r--r-- | doc/VERSION.txt | 2 | ||||
-rwxr-xr-x | installer/opengnsys_installer.sh | 49 | ||||
-rwxr-xr-x | installer/opengnsys_update.sh | 50 | ||||
-rwxr-xr-x | repoman/bin/sendFileMcast | 3 |
20 files changed, 708 insertions, 277 deletions
diff --git a/admin/Interface/CambiarAcceso b/admin/Interface/CambiarAcceso index ddd67666..38cc5ab1 100755 --- a/admin/Interface/CambiarAcceso +++ b/admin/Interface/CambiarAcceso @@ -5,6 +5,12 @@ # PARAMETROS RECIBIDOS DESDE EL CLIENTE # $1 modo (admin, user) #_______________________________________________________________________________________________________________________________ +### codigos de error +#$OG_ERR_NOTEXEC = 7 La llamada no se ha realizado desde OGclient. +#$OG_ERR_NOTFOUND = 2 Repositorio no montado. +#$OG_ERR_LOCKED = 4 Repositorio bloqueado. +#$OG_ERR_NOTWRITE = 14 No Se ha realizado el montaje RW correctamente. + # Error si llamada no se realliza desde OpenGnSys Client. PROG=$(basename $0) @@ -14,7 +20,7 @@ if [ "$CALLER" != "CrearImagen" -a "$CALLER" != "ConsolaRemota" ]; then exit $? fi -# Salir si el repositorio está bloquedo (tiene ficheros abiertos). +# Salir si el repositorio est� bloquedo (tiene ficheros abiertos). REPOIP=$(ogGetRepoIp) if [ -z "$REPOIP" ]; then ogRaiseError $OG_ERR_NOTFOUND "repo no montado" @@ -47,3 +53,28 @@ case "$PROTO" in smb) mount -t cifs //$REPOIP/ogimages $OGIMG -o $MODE,serverino,acl,username=opengnsys,password=og ;; esac +#Comprobamos que el tipo de acceso (escritura/lectura) se ha realizado correctamente. +FILETEST="${OGIMG}/testWrite.txt" +touch $FILETEST +VALUE=$? + +case "$1" in + admin) + if [ "$VALUE" == 0 ] + then + rm $FILETEST + else + ogRaiseError $OG_ERR_NOTWRITE "sin acceso de escritura en modo admin" + exit $? + fi + ;; + user) + if [ "$VALUE" == 0 ] + then + rm $FILETEST + ogRaiseError $OG_ERR_NOTWRITE "Warning: con acceso de escritura en modo user" + exit $? + fi + ;; +esac + diff --git a/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.c b/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.c index d7c0ceb1..d766eb34 100644 --- a/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.c +++ b/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.c @@ -1132,7 +1132,7 @@ BOOLEAN CrearImagen(TRAMA* ptrTrama) nfn=copiaParametro("nfn",ptrTrama); ids=copiaParametro("ids",ptrTrama); - + muestraMensaje(7,NULL); if(InventariandoSoftware(ptrTrama,FALSE,"InventarioSoftware")){ // Crea inventario Software previamente muestraMensaje(2,NULL); sprintf(interface,"%s/%s",pathinterface,nfn); @@ -1197,7 +1197,7 @@ BOOLEAN RestaurarImagen(TRAMA* ptrTrama) ids=copiaParametro("ids",ptrTrama); muestraMensaje(3,NULL); sprintf(interface,"%s/%s",pathinterface,nfn); - sprintf(parametros,"%s %s %s %s %s",nfn,dsk,par,nci,ipr); + sprintf(parametros,"%s %s %s %s %s %s",nfn,dsk,par,nci,ipr,ptc); herror=interfaceAdmin(interface,parametros,NULL); if(herror){ sprintf(msglog,"%s:%s",tbErrores[86],nfn); diff --git a/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.h b/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.h index 976c393c..f39df68c 100644 --- a/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.h +++ b/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.h @@ -70,9 +70,56 @@ char* tbErroresScripts[]={"Se han generado errores. No se puede continuar la eje "011-La información retornada por la interface de administración excede de la longitud permitida",\ "012-Error en el envÃo de fichero por la red",\ "013-Error en la creación del proceso hijo",\ + "014-Error de escritura en destino",\ + "015-Sin Cache en el Cliente",\ + "016-No hay espacio en la cache para almacenar fichero-imagen",\ + "017-Error al Reducir el Sistema Archivos",\ + "018-Error al Expandir el Sistema Archivos",\ + "019-Error no definido",\ + "020-Error no definido",\ + "021-Error no definido",\ + "022-Error no definido",\ + "023-Error no definido",\ + "024-Error no definido",\ + "025-Error no definido",\ + "026-Error no definido",\ + "027-Error no definido",\ + "028-Error no definido",\ + "029-Error no definido",\ + "030-Error al restaurar imagen - Imagen mas grande que particion",\ + "031-Error no definido",\ + "032-Error no definido",\ + "033-Error no definido",\ + "034-Error no definido",\ + "035-Error no definido",\ + "036-Error no definido",\ + "037-Error no definido",\ + "038-Error no definido",\ + "039-Error no definido",\ + "040-Error no definido",\ + "041-Error no definido",\ + "042-Error no definido",\ + "043-Error no definido",\ + "044-Error no definido",\ + "045-Error no definido",\ + "046-Error no definido",\ + "047-Error no definido",\ + "048-Error no definido",\ + "049-Error no definido",\ + "050-Error en la generación de sintaxis de transferenica unicast",\ + "051-Error en envio UNICAST de una particion",\ + "052-Error en envio UNICAST de un fichero",\ + "053-Error en la recepcion UNICAST de una particion",\ + "054-Error en la recepcion UNICAST de un fichero",\ + "055-Error en la generacion de sintaxis de transferenica Multicast",\ + "056-Error en envio MULTICAST de un fichero",\ + "057-Error en la recepcion MULTICAST de un fichero",\ + "058-Error en envio MULTICAST de una particion",\ + "059-Error en la recepcion MULTICAST de una particion",\ + "060-Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER",\ "Error desconocido " }; - #define MAXERRORSCRIPT 14 // Error máximo cometido + #define MAXERRORSCRIPT 999 // Error máximo cometido // ________________________________________________________________________________________________________ // Prototipo de funciones // ________________________________________________________________________________________________________ diff --git a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php index 819edd1d..c649ee66 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php @@ -10,9 +10,23 @@ </select> <br /> <!--DIV donde se mostrara la respuesta AJAX sobre las particiones clonables del equipo--> - Elige particion del Master a enviar + Elige desde el Master la imagen o particion a enviar <div id="divListado"></div> <br /> + Elige la identificacion de la partición destino de los clientes: + <select name="targetpart" id="targetpart" style="WIDTH:220";"> + <option value="1 1"> 1er disco - 1ª particion </option> + <option value="1 2"> 1er disco - 2ª particion </option> + <option value="1 3"> 1er disco - 3ª particion </option> + <option value="1 4"> 1er disco - 4ª particion </option> + </select> + <br /> + Elige el metodo de transferencia + <select name="idmetodo" id="idmetodo" style="WIDTH:220";"> + <option value="MULTICAST"> MULTICAST </option> + <option value="UNICAST"> UNICAST </option> + </select> + <br /> Elige herramienta de clonacion: <select name="tool" id="tool" style="WIDTH:220";"> <option value="partclone"> partclone </option> @@ -24,15 +38,9 @@ <option value="lzop"> lzop </option> <option value="gzip"> gzip </option> </select> - <br /> - - <br /> - Elige el metodo de transferencia - <select name="idmetodo" id="idmetodo" style="WIDTH:220";"> - <option value="MULTICAST"> MULTICAST </option> - <option value="UNICAST"> UNICAST </option> - </select> + <br /> <br /> + </td> <td class="op_mcast"> diff --git a/admin/WebConsole/asistentes/jscripts/asistentes.js b/admin/WebConsole/asistentes/jscripts/asistentes.js index 3dd08014..a8ab24d8 100644 --- a/admin/WebConsole/asistentes/jscripts/asistentes.js +++ b/admin/WebConsole/asistentes/jscripts/asistentes.js @@ -19,7 +19,7 @@ switch (form.idmetodo.value) break; } //form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form.PartOrigen.value + " " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " 1 " + form.PartOrigen.value + " " + form.tool.value + " " + form.compresor.value; -form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form.PartOrigen.value + " " + protocol + " 1 " + form.PartOrigen.value + " " + form.tool.value + " " + form.compresor.value; +form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " " + form.source.value + " " + protocol + " " + form.targetpart.value + " " + form.tool.value + " " + form.compresor.value; } diff --git a/admin/WebConsole/asistentes/xajax.server.php b/admin/WebConsole/asistentes/xajax.server.php index 9e0fafa6..f7efb0c7 100644 --- a/admin/WebConsole/asistentes/xajax.server.php +++ b/admin/WebConsole/asistentes/xajax.server.php @@ -18,8 +18,12 @@ function ListarOrigenMaster($ip){ $objResponse = new xajaxResponse(); $SelectHtml=" "; + $SelectHtml='<select name="source"> '; + $cmd=CreaComando($cadenaconexion); - + $rs=new Recordset; + + //Primera consulta: Particiones del MASTER potencialmente clonables. $cmd->texto='SELECT ordenadores_particiones.numpar as PART,nombresos.nombreso as OS FROM ordenadores_particiones INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar INNER JOIN nombresos ON ordenadores_particiones.idnombreso=nombresos.idnombreso @@ -28,30 +32,78 @@ function ListarOrigenMaster($ip){ AND tipospar.clonable>0 AND ordenadores_particiones.idnombreso>0 ORDER BY ordenadores_particiones.numpar'; - - $rs=new Recordset; + $rs->Comando=&$cmd; - - - + if ($rs->Abrir()){ $cantRegistros=$rs->numeroderegistros; if($cantRegistros>0){ - $SelectHtml='<select name="PartOrigen"> <option value="">--Particion a Enviar--</option>'; - $rs->Primero(); + $rs->Primero(); while (!$rs->EOF){ - $SelectHtml.='<OPTION value="'.$rs->campos["PART"].'"'; + $SelectHtml.='<OPTION value=" 1 '.$rs->campos["PART"].'"'; $SelectHtml.='>'; - $SelectHtml.= $rs->campos["OS"].'</OPTION>'; + $SelectHtml.='PART: '. $rs->campos["OS"].'</OPTION>'; $rs->Siguiente(); } } else - { + { $objResponse->alert("Este equipo No tiene particiones clonables."); } $rs->Cerrar(); } + + //Segunda consulta: Imagenes del MASTER registradas como si fuese un repo. + $cmd->texto='SELECT *,repositorios.ip as iprepositorio FROM imagenes +INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio +where repositorios.ip="' .$ip .'"'; + + $rs->Comando=&$cmd; + + if ($rs->Abrir()){ + $cantRegistros=$rs->numeroderegistros; + if($cantRegistros>0){ + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.='<OPTION value=" CACHE /'.$rs->campos["nombreca"].'"'; + $SelectHtml.='>'; + $SelectHtml.='IMG-CACHE: ' . $rs->campos["nombreca"].'</OPTION>'; + $rs->Siguiente(); + } + } + else + { + $objResponse->alert("Este equipo No tiene imagenes registradas en la cache."); + } + $rs->Cerrar(); + } + +//Tercera consulta: Imagenes del REPO, que el MASTER se encargara de enivarlas + $cmd->texto='SELECT *,repositorios.ip as iprepositorio FROM imagenes +INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio +where repositorios.idrepositorio=(select idrepositorio from ordenadores where ordenadores.ip="' .$ip .'")'; + + + $rs->Comando=&$cmd; + + if ($rs->Abrir()){ + $cantRegistros=$rs->numeroderegistros; + if($cantRegistros>0){ + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.='<OPTION value=" REPO /'.$rs->campos["nombreca"].'"'; + $SelectHtml.='>'; + $SelectHtml.='IMG-REPO: ' . $rs->campos["nombreca"].'</OPTION>'; + $rs->Siguiente(); + } + } + else + { + $objResponse->alert("Este equipo No tiene acceso a ninguna imagen del REPO asignado."); + } + $rs->Cerrar(); + } + $SelectHtml.= '</SELECT>'; diff --git a/client/engine/Image.lib b/client/engine/Image.lib index 399e3da1..c85354a1 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -457,6 +457,7 @@ touch $IMGDIR/$(basename "${!#}").lock #@exception OG_ERR_NOTFOUND fichero de imagen o partición no detectados. #@exception OG_ERR_LOCKED partición bloqueada por otra operación. #@exception OG_ERR_IMAGE error al restaurar la imagen del sistema. +#@exception OG_ERR_IMGSIZEPARTITION Tamaño de la particion es menor al tamaño de la imagen. #@todo Comprobar incongruencias partición-imagen, control de errores, definir parámetros, caché/repositorio, etc. #@version 0.1 - Integracion para Opengnsys - HIDRA:RestaurarImagen{EXT3, NTFS}.sh; EAC: RestorePartitionFromImage() en Deploy.lib #@author Ramon Gomez, ETSII Universidad de Sevilla @@ -490,7 +491,7 @@ IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") IMGSIZE=$(ogGetImageSize "$1" "$2") PARTSIZE=$(ogGetPartitionSize $3 $4) if [ $IMGSIZE -gt $PARTSIZE ]; then - ogRaiseError $OG_ERR_PARTITION "$IMGSIZE > $PARTSIZE" + ogRaiseError $OG_ERR_IMGSIZEPARTITION "$IMGSIZE > $PARTSIZE" return $? fi diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib index 96073ad2..8fa1d85c 100755 --- a/client/engine/Protocol.lib +++ b/client/engine/Protocol.lib @@ -2,15 +2,18 @@ #/** #@file Protocol.lib #@brief LibrerÃa o clase Protocol -#@class FileTransfer +#@class Protocol #@brief Funciones para transmisión de datos -#@version 0.91 +#@version 1.0 #@warning License: GNU GPLv3+ #*/ + +##################### FUNCIONES UNICAST ################ + #/** # ogUcastSyntax -#@brief Función para generar la instrucción de ejucucion la transferencia de datos unicast +#@brief Función para generar la instrucción de transferencia de datos unicast #@param 1 Tipo de operación [ SENDPARTITION RECEIVERPARTITION SENDFILE RECEIVERFILE ] #@param 2 Sesion Unicast #@param 3 Dispositivo (opción PARTITION) o fichero(opción FILE) que será enviado. @@ -18,16 +21,16 @@ #@param 5 Tools de compresion (opcion PARTITION) #@return instrucción para ser ejecutada. #@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_UCASTSYNTAXT formato de la sesion unicast incorrecta. #@note Requisitos: mbuffer -#@todo +#@todo: controlar que mbuffer esta disponible para los clientes. #@version 1.0 - #@author Antonio Doblas Viso, Universidad de Málaga #@date 2011/03/09 #*/ ## -#/** -# + + -##################### FUNCIONES UNICAST ################ function ogUcastSyntax () { @@ -50,7 +53,7 @@ if [ "$*" == "help" -o "$2" == "help" ]; then fi PERROR=0 -#TODO: controlar que mbuffer esta disponible para los clientes. + # Error si no se reciben $PARM parámetros. @@ -99,14 +102,13 @@ DEVICE=$3 if [ "$PARM" == "5" ] then # 4 param check - ogCheckStringInGroup "$4" "partclone partimage ntfsclone" || ogRaiseError $OG_ERR_NOTFOUND " herramienta $4 no soportada" || PERROR=10 #return $? + ogCheckStringInGroup "$4" "partclone PARTCLONE partimage PARTIMAGE ntfsclone NTFSCLONE" || ogRaiseError $OG_ERR_NOTFOUND " herramienta $4 no soportada" || PERROR=10 #return $? TOOL=$4 - ogCheckStringInGroup "$5" "lzop gzip 0 1" || ogRaiseError $OG_ERR_NOTFOUND " compresor $5 no valido" || PERROR=11 #return $? + ogCheckStringInGroup "$5" "lzop gzip LZOP GZIP 0 1" || ogRaiseError $OG_ERR_NOTFOUND " compresor $5 no valido" || PERROR=11 #return $? LEVEL=$5 fi - -[ "$PERROR" -gt "0" ] && return 1 +[ "$PERROR" == "0" ] || ogRaiseError $OG_ERR_UCASTSYNTAXT " $PERROR" || return $? # Generamos la instrucción base de unicast -Envio,Recepcion- SYNTAXSERVER="mbuffer $ADDRESS" @@ -124,10 +126,10 @@ SENDPARTITION) echo "$SYNTAXCLIENT | $COMPRESSOR | $TOOLS " ;; SENDFILE) - echo "$SYNTAXSERVER --file $3" + echo "$SYNTAXSERVER -i $3" ;; RECEIVERFILE) - echo "$SYNTAXCLIENT --file $3" + echo "$SYNTAXCLIENT -i $3" ;; *) ;; @@ -138,23 +140,26 @@ esac #/** # ogUcastSendPartition #@brief Función para enviar el contenido de una partición a multiples particiones remotas usando UNICAST. -#@param -#@param -#@param +#@param 1 disk +#@param 2 partition +#@param 3 sesionUcast +#@param 4 tool image +#@param 5 tool compresor #@return -#@exception +#@exception $OG_ERR_FORMAT +#@exception $OG_ERR_UCASTSENDPARTITION #@note -#@todo: ogIsLocked siempre devuelve 1. crear ticket -#@version 0.1 - Integración para OpenGNSys. -#@author -#@date +#@todo: ogIsLocked siempre devuelve 1 +#@version 1.0 - +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2011/03/09 #*/ ## -ogUcastSendPartition () +function ogUcastSendPartition () { # Variables locales -local PART COMMAND +local PART COMMAND RETVAL # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -173,28 +178,37 @@ ogUnmount $1 $2 #generamos la instrucción a ejecutar. COMMAND=`ogUcastSyntax SENDPARTITION "$3" $PART $4 $5` -echo $COMMAND -eval $COMMAND +RETVAL=$? + +if [ "$RETVAL" -gt "0" ] +then + return $RETVAL +else + echo $COMMAND + eval $COMMAND || ogRaiseError $OG_ERR_UCASTSENDPARTITION " "; return $? +fi + } #/** # ogUcastReceiverPartition #@brief Función para recibir directamente en la partición el contenido de un fichero imagen remoto enviado por UNICAST. -#@param -#@param -#@param +#@param 1 disk +#@param 2 partition +#@param 3 session unicast #@return -#@exception +#@exception OG_ERR_FORMAT +#@exception OG_ERR_UCASTRECEIVERPARTITION #@note #@todo: -#@version 0.1 - Integración para OpenGNSys. -#@author -#@date +#@version 1.0 - Integración para OpenGNSys. +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2011/03/09 #*/ ## -ogUcastReceiverPartition () +function ogUcastReceiverPartition () { # Variables locales -local PART COMMAND +local PART COMMAND RETVAL # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -210,14 +224,100 @@ PART=$(ogDiskToDev "$1" "$2") || return $? #ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $? ogUnmount $1 $2 + #generamos la instrucción a ejecutar. COMMAND=`ogUcastSyntax RECEIVERPARTITION "$3" $PART $4 $5` -echo $COMMAND -eval $COMMAND +RETVAL=$? + +if [ "$RETVAL" -gt "0" ] +then + return $RETVAL +else + echo $COMMAND + eval $COMMAND || ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION " "; return $? +fi } +#/** +# ogUcastSendFile [ str_repo | int_ndisk int_npart ] /Relative_path_file sessionMulticast +#@brief EnvÃa un fichero por unicast ORIGEN(fichero) DESTINO(sessionmulticast) +#@param (2 parámetros) $1 path_aboluto_fichero $2 sesionMcast +#@param (3 parámetros) $1 Contenedor REPO|CACHE $2 path_absoluto_fichero $3 sesionMulticast +#@param (4 parámetros) $1 disk $2 particion $3 path_absoluto_fichero $4 sesionMulticast +#@return +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception $OG_ERR_NOTFOUND +#@exception OG_ERR_UCASTSENDFILE +#@note Requisitos: +#@version 1.0 - Definición de Protocol.lib +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2010/05/09 +#*/ ## +# + +function ogUcastSendFile () +{ +# Variables locales. +local ARGS SOURCE TARGET COMMAND DEVICE RETVAL LOGFILE + + +#ARGS usado para controlar ubicación de la sesion multicast +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME [str_REPOSITORY] [int_ndisk int_npart] /Relative_path_file sesionMcast(puerto:ip:ip:ip)" \ + "$FUNCNAME 1 1 /aula1/winxp.img 8000:172.17.36.11:172.17.36.12" \ + "$FUNCNAME REPO /aula1/ubuntu.iso sesionUcast" \ + "$FUNCNAME CACHE /aula1/winxp.img sesionUcast" \ + "$FUNCNAME /opt/opengnsys/images/aula1/hd500.vmx sesionUcast" + return +fi + +ARGS="$@" +case "$1" in + /*) # Camino completo. */ (Comentrio Doxygen) + SOURCE=$(ogGetPath "$1") + ARG=2 + DEVICE="$1" + ;; + [1-9]*) # ndisco npartición. + SOURCE=$(ogGetPath "$1" "$2" "$3") + ARG=4 + DEVICE="$1 $2 $3" + ;; + *) # Otros: repo, cache, cdrom (no se permiten caminos relativos). + SOURCE=$(ogGetPath "$1" "$2") + ARG=3 + DEVICE="$1 $2 " + ;; +esac + + +# Error si no se reciben los argumentos ARG necesarios según la opcion. +[ $# == "$ARG" ] || ogRaiseError $OG_ERR_FORMAT || return $? + +# Comprobar fichero origen +ogGetPath $SOURCE &> /dev/null || ogRaiseError $OG_ERR_NOTFOUND " device or file $DEVICE not found" || return $? + + + +SESSION=${!ARG} + +#generamos la instrucción a ejecutar. +COMMAND=`ogUcastSyntax "SENDFILE" "$SESSION" "$SOURCE"` +RETVAL=$? + +if [ "$RETVAL" -gt "0" ] +then + return $RETVAL +else + echo $COMMAND + eval $COMMAND || ogRaiseError $OG_ERR_UCASTSENDFILE " "; return $? +fi + +} + #/** @@ -230,13 +330,14 @@ eval $COMMAND #@param 5 Tools de compresion (opcion PARTITION) #@return instrucción para ser ejecutada. #@exception OG_ERR_FORMAT formato incorrecto. -#@note Requisitos: upd-cast 2009 +#@exception OG_ERR_NOTEXEC +#@exception OG_ERR_MCASTSYNTAXT +#@note Requisitos: upd-cast 2009 o superior #@todo localvar check versionudp -#@version 0.91 - Definición de FileTransfer +#@version 1.0 - #@author Antonio Doblas Viso, Universidad de Málaga #@date 2010/05/09 #*/ ## -#/** # @@ -263,7 +364,7 @@ PERROR=0 #si no tenemos updcast o su version superior 2009 udpcast error. ISUDPCAST=$(udp-receiver --help 2>&1) -echo $ISUDPCAST | grep start-timeout > /dev/null || ogRaiseError $OG_ERR_FORMAT "upd-cast no existe o version antigua -requerida 2009-"|| return $? +echo $ISUDPCAST | grep start-timeout > /dev/null || ogRaiseError $OG_ERR_NOTEXEC "upd-cast no existe o version antigua -requerida 2009-"|| return $? # Error si no se reciben $PARM parámetros. @@ -311,14 +412,17 @@ DEVICE=$3 if [ "$PARM" == "5" ] then # 4 param check - ogCheckStringInGroup "$4" "partclone partimage ntfsclone" || ogRaiseError $OG_ERR_NOTFOUND " herramienta $4 no soportada" || PERROR=10 #return $? + ogCheckStringInGroup "$4" "partclone PARTCLONE partimage PARTIMAGE ntfsclone NTFSCLONE" || ogRaiseError $OG_ERR_NOTFOUND " herramienta $4 no soportada" || PERROR=10 #return $? TOOL=$4 - ogCheckStringInGroup "$5" "lzop gzip 0 1" || ogRaiseError $OG_ERR_NOTFOUND " compresor $5 no valido" || PERROR=11 #return $? + ogCheckStringInGroup "$5" "lzop LZOP gzip GZIP 0 1" || ogRaiseError $OG_ERR_NOTFOUND " compresor $5 no valido" || PERROR=11 #return $? LEVEL=$5 fi -[ "$PERROR" -gt "0" ] && return 1 +if [ "$PERROR" != "0" ]; then + ogRaiseError $OG_ERR_MCASTSYNTAXT " $PERROR"; return $? +fi + # Valores estandar no configurables. CERROR="8x8/128" @@ -327,7 +431,7 @@ CERROR="8x8/128" which mbuffer > /dev/null && MBUFFER=" --pipe 'mbuffer -q -m 20M' " # Generamos la instrucción base de multicast -Envio,Recepcion- -SYNTAXSERVER="udp-sender $MBUFFER --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 16 --min-clients $NCLIENTS --max-wait $MAXTIME " +SYNTAXSERVER="udp-sender $MBUFFER --nokbd --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 16 --min-clients $NCLIENTS --max-wait $MAXTIME --autostart $MAXTIME --log /tmp/mcast.log" SYNTAXCLIENT="udp-receiver $MBUFFER --portbase $PORTBASE " @@ -362,20 +466,23 @@ esac #@param (4 parámetros) $1 disk $2 particion $3 path_absoluto_fichero $4 sesionMulticast #@return #@exception OG_ERR_FORMAT formato incorrecto. +#@exception $OG_ERR_NOTFOUND +#@exception OG_ERR_MCASTSENDFILE #@note Requisitos: -#@version 0.91 - Definición de Protocol.lib +#@version 1.0 - Definición de Protocol.lib #@author Antonio Doblas Viso, Universidad de Málaga #@date 2010/05/09 #*/ ## -#/** # function ogMcastSendFile () { # Variables locales. -local ARGS SOURCE TARGET COMMAND DEVICE -#ARGS usado para controlar ubicación de la sesion multicast +local ARGS SOURCE TARGET COMMAND DEVICE RETVAL LOGFILE +#LOGFILE="/tmp/mcast.log" + +#ARGS usado para controlar ubicación de la sesion multicast # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then ogHelp "$FUNCNAME [str_REPOSITORY] [int_ndisk int_npart] /Relative_path_file sesionMcast" \ @@ -412,11 +519,26 @@ esac # Comprobar fichero origen ogGetPath $SOURCE &> /dev/null || ogRaiseError $OG_ERR_NOTFOUND " device or file $DEVICE not found" || return $? +# eliminamos ficheros antiguos de log +#rm $LOGFILE + SESSION=${!ARG} -# llamando a la funcion con param1 session $SESSION y param2 $SOURCE + + + +#generamos la instrucción a ejecutar. COMMAND=`ogMcastSyntax "SENDFILE" "$SESSION" "$SOURCE"` -echo $COMMAND -eval $COMMAND +RETVAL=$? + +if [ "$RETVAL" -gt "0" ] +then + return $RETVAL +else + echo $COMMAND + eval $COMMAND || ogRaiseError $OG_ERR_MCASTSENDFILE " "; return $? + #[ -s "$LOGFILE" ] || return 21 +fi + } @@ -429,15 +551,15 @@ eval $COMMAND #@param (4 parámetros) $1 sesionMcastCLIENT $2 disk $3 particion $4 path_absoluto_fichero_destino #@return #@exception OG_ERR_FORMAT formato incorrecto. +#@exception $OG_ERR_MCASTRECEIVERFILE #@note Requisitos: -#@version 0.91 - Definición de Protocol.lib +#@version 1.0 - Definición de Protocol.lib #@author Antonio Doblas Viso, Universidad de Málaga #@date 2010/05/09 #*/ ## -#/** # -ogMcastReceiverFile () +function ogMcastReceiverFile () { # Variables locales. @@ -477,30 +599,41 @@ TARGETFILE=`basename ${!ARG}` #generamos la instrucción a ejecutar. COMMAND=`ogMcastSyntax RECEIVERFILE "$1" $TARGETDIR/$TARGETFILE ` -echo $COMMAND -eval $COMMAND +RETVAL=$? + +if [ "$RETVAL" -gt "0" ] +then + return $RETVAL +else + echo $COMMAND + eval $COMMAND || ogRaiseError $OG_ERR_MCASTRECEIVERFILE " "; return $? + #[ -s "$LOGFILE" ] || return 21 +fi } #/** # ogMcastSendPartition #@brief Función para enviar el contenido de una partición a multiples particiones remotas. -#@param -#@param -#@param +#@param 1 disk +#@param 2 partition +#@param 3 session multicast +#@param 4 tool clone +#@param 5 tool compressor #@return -#@exception +#@exception OG_ERR_FORMAT +#@exception OG_ERR_MCASTSENDPARTITION #@note #@todo: ogIsLocked siempre devuelve 1. crear ticket -#@version 0.1 - Integración para OpenGNSys. -#@author -#@date +#@version 1.0 - Definición de Protocol.lib +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2010/05/09 #*/ ## -ogMcastSendPartition () +function ogMcastSendPartition () { # Variables locales -local PART COMMAND +local PART COMMAND RETVAL # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -516,31 +649,41 @@ PART=$(ogDiskToDev "$1" "$2") || return $? #ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $? ogUnmount $1 $2 - #generamos la instrucción a ejecutar. COMMAND=`ogMcastSyntax SENDPARTITION "$3" $PART $4 $5` -echo $COMMAND -eval $COMMAND +RETVAL=$? + +if [ "$RETVAL" -gt "0" ] +then + return $RETVAL +else + echo $COMMAND + eval $COMMAND || ogRaiseError $OG_ERR_MCASTSENDPARTITION " "; return $? +fi + + } #/** # ogMcastReceiverPartition #@brief Función para recibir directamente en la partición el contenido de un fichero imagen remoto enviado por multicast. -#@param -#@param -#@param +#@param 1 disk +#@param 2 partition +#@param 3 session multicast +#@param 4 tool clone +#@param 5 tool compressor #@return -#@exception +#@exception $OG_ERR_FORMAT #@note #@todo: -#@version 0.1 - Integración para OpenGNSys. -#@author -#@date +#@version 1.0 - Definición de Protocol.lib +#@author Antonio Doblas Viso, Universidad de Málaga +#@date 2010/05/09 #*/ ## -ogMcastReceiverPartition () +function ogMcastReceiverPartition () { # Variables locales -local PART COMMAND +local PART COMMAND RETVAL # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then @@ -558,8 +701,16 @@ ogUnmount $1 $2 #generamos la instrucción a ejecutar. COMMAND=`ogMcastSyntax RECEIVERPARTITION "$3" $PART $4 $5` -echo $COMMAND -eval $COMMAND +RETVAL=$? + +if [ "$RETVAL" -gt "0" ] +then + return $RETVAL +else + echo $COMMAND + eval $COMMAND || ogRaiseError $OG_ERR_MCASTSENDPARTITION " "; return $? +fi + } @@ -598,7 +749,7 @@ eval $COMMAND #mode=leecher -> NO seedear mientras descarga #time tiempo que una vez descargada la imagen queremos dejar al cliente como seeder. -ogTorrentStart () +function ogTorrentStart () { # Variables locales. @@ -737,7 +888,7 @@ cd /tmp #@date #*/ ## -ogCreateTorrent () +function ogCreateTorrent () { # Variables locales. local ARGS ARG SOURCE EXT IPTORRENT diff --git a/client/engine/Protocol.lib.testing b/client/engine/Protocol.lib.testing index 73a5e63a..8186ed7b 100755 --- a/client/engine/Protocol.lib.testing +++ b/client/engine/Protocol.lib.testing @@ -119,7 +119,7 @@ CERROR="8x8/128" which mbuffer > /dev/null && MBUFFER=" --pipe 'mbuffer -q -m 20M' " # Generamos la instrucción base de multicast -Envio,Recepcion- -SYNTAXSERVER="udp-sender $MBUFFER --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 16 --min-clients $NCLIENTS --max-wait $MAXTIME " +SYNTAXSERVER="udp-sender $MBUFFER --nokbd --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 16 --min-clients $NCLIENTS --max-wait $MAXTIME " SYNTAXCLIENT="udp-receiver $MBUFFER --portbase $PORTBASE " diff --git a/client/engine/System.lib b/client/engine/System.lib index 9973b596..7dbe6422 100755 --- a/client/engine/System.lib +++ b/client/engine/System.lib @@ -74,7 +74,24 @@ case "$CODE" in $OG_ERR_IMAGE) MSG="$MSG_ERR_IMAGE \"$2\"" ;; $OG_ERR_NOTOS) MSG="$MSG_ERR_NOTOS \"$2\"" ;; $OG_ERR_NOTEXEC) MSG="$MSG_ERR_NOTEXEC \"$2\"" ;; - *) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;; + $OG_ERR_NOTWRITE) MSG="$MSG_ERR_NOTWRITE \"$2\"" ;; + $OG_ERR_NOTCACHE) MSG="$MSG_ERR_NOTCACHE \"$2\"" ;; + $OG_ERR_CACHESIZE) MSG="$MSG_ERR_CACHESIZE \"$2\"" ;; + $OG_ERR_REDUCEFS) MSG="$MSG_ERR_REDUCEFS \"$2\"" ;; + $OG_ERR_EXTENDFS) MSG="$MSG_ERR_EXTENDFS \"$2\"" ;; + $OG_ERR_IMGSIZEPARTITION) MSG="$MSG_ERR_IMGSIZEPARTITION \"$2\"" ;; + $OG_ERR_UCASTSYNTAXT) MSG="$MSG_ERR_UCASTSYNTAXT \"$2\"" ;; + $OG_ERR_UCASTSENDPARTITION) MSG="$MSG_ERR_UCASTSENDPARTITION \"$2\"" ;; + $OG_ERR_UCASTSENDFILE) MSG="$MSG_ERR_UCASTSENDFILE \"$2\"" ;; + $OG_ERR_UCASTRECEIVERPARTITION) MSG="$MSG_ERR_UCASTRECEIVERPARTITION \"$2\"" ;; + $OG_ERR_UCASTRECEIVERFILE) MSG="$MSG_ERR_UCASTRECEIVERFILE \"$2\"" ;; + $OG_ERR_MCASTSYNTAXT) MSG="$MSG_ERR_MCASTSYNTAXT \"$2\"" ;; + $OG_ERR_MCASTSENDFILE) MSG="$MSG_ERR_MCASTSENDFILE \"$2\"" ;; + $OG_ERR_MCASTRECEIVERFILE) MSG="$MSG_ERR_MCASTRECEIVERFILE \"$2\"" ;; + $OG_ERR_MCASTSENDPARTITION) MSG="$MSG_ERR_MCASTSENDPARTITION \"$2\"" ;; + $OG_ERR_MCASTRECEIVERPARTITION) MSG="$MSG_ERR_MCASTRECEIVERPARTITION \"$2\"" ;; + $OG_ERR_PROTOCOLJOINMASTER) MSG="$MSG_ERR_PROTOCOLJOINMASTER \"$2\"" ;; + *) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;; esac # Mostrar mensaje de error y salir con el código indicado. diff --git a/client/shared/etc/init/default.sh b/client/shared/etc/init/default.sh index e5e1a34f..fe43dacc 100755 --- a/client/shared/etc/init/default.sh +++ b/client/shared/etc/init/default.sh @@ -15,6 +15,10 @@ if ! touch $OGLOGFILE 2>/dev/null; then fi LOGLEVEL=5 +#facilitando el entorno Og desde ssh +cp $OPENGNSYS/etc/preinit/loadenviron.sh /etc/profile.d/ + + # Arranque de OpenGnSys Client. if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then echo "$MSG_LAUNCHCLIENT" diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf index a63da81a..061ccef8 100644 --- a/client/shared/etc/lang.es_ES.conf +++ b/client/shared/etc/lang.es_ES.conf @@ -12,6 +12,24 @@ MSG_ERR_FILESYS="Sistema de archivos desconocido o no se puede montar" MSG_ERR_NOTOS="Sistema operativo no instalado o no detectado" MSG_ERR_IMAGE="No se puede crear o restaurar una image de sistema" MSG_ERR_NOTEXEC="Programa o función no ejecutable" +MSG_ERR_NOTWRITE="No hay acceso de escritura" +MSG_ERR_NOTCACHE="No existe particion Cache en el cliente" +MSG_ERR_CACHESIZE="No existe particion Cache en el cliente" +MSG_ERR_REDUCEFS="Error al reducir el sistema de archivos" +MSG_ERR_EXTENDFS="Error al expandir el sistema de archivos" +MSG_ERR_IMGSIZEPARTITION="Error al restaurar: Particion mas pequeña que la imagen" +MSG_ERR_UCASTSYNTAXT="Error en la generación de sintaxis de transferenica unicast" +MSG_ERR_UCASTSENDPARTITION="Error en envio UNICAST de una particion" +MSG_ERR_UCASTSENDFILE="Error en envio UNICAST de un fichero" +MSG_ERR_UCASTRECEIVERPARTITION="Error en la recepcion UNICAST de una particion" +MSG_ERR_UCASTRECEIVERFILE="Error en la recepcion UNICAST de un fichero" +MSG_ERR_MCASTSYNTAXT="Error en la generación de sintaxis de transferenica multicast" +MSG_ERR_MCASTSENDFILE="Error en envio MULTICAST de un fichero" +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" + # Mensajes de avisos. MSG_DONTMOUNT="Sistema de archivos no montado" diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh index c3dae813..af891534 100755 --- a/client/shared/etc/preinit/loadenviron.sh +++ b/client/shared/etc/preinit/loadenviron.sh @@ -77,4 +77,27 @@ export OG_ERR_LOCKED=4 # Partición o fichero bloqueado. export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen. export OG_ERR_NOTOS=6 # Sin sistema operativo. export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable. +#codigo 8-13 reservados por ogAdmClient.h +export OG_ERR_NOTWRITE=14 # No hay acceso de escritura +export OG_ERR_NOTCACHE=15 # No hay particion cache en cliente +export OG_ERR_CACHESIZE=16 # No hay espacio en la cache para almacenar fichero-imagen +export OG_ERR_REDUCEFS=17 # Error al reducir sistema archivos +export OG_ERR_EXTENDFS=18 # Error al expandir el sistema de archivos + +export OG_ERR_IMGSIZEPARTITION=30 #Error al restaurar: Particion mas pequeña que la imagen. + +export OG_ERR_UCASTSYNTAXT=50 # Error en la generación de sintaxis de transferenica unicast +export OG_ERR_UCASTSENDPARTITION=51 # Error en envio UNICAST de una particion +export OG_ERR_UCASTSENDFILE=52 # Error en envio UNICAST de un fichero +export OG_ERR_UCASTRECEIVERPARTITION=53 #Error en la recepcion UNICAST de una particion +export OG_ERR_UCASTRECEIVERFILE=54 #Error en la recepcion UNICAST de un fichero +export OG_ERR_MCASTSYNTAXT=55 # Error en la generacion de sintaxis de transferenica Multicast. +export OG_ERR_MCASTSENDFILE=56 # Error en envio MULTICAST de un fichero +export OG_ERR_MCASTRECEIVERFILE=57 #Error en la recepcion MULTICAST de un fichero +export OG_ERR_MCASTSENDPARTITION=58 # Error en envio MULTICAST de una particion +export OG_ERR_MCASTRECEIVERPARTITION=59 # Error en la recepcion MULTICAST de una particion +export OG_ERR_PROTOCOLJOINMASTER=60 # Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER + + + diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster index 1a3fd070..a7a5e11b 100755 --- a/client/shared/scripts/cloneRemoteFromMaster +++ b/client/shared/scripts/cloneRemoteFromMaster @@ -1,43 +1,52 @@ #!/bin/bash -# Script para la clonacion de particiones remotas. -# (puede usarse como base para el programa de restauración de imágenes usado por OpenGnSys Admin). -# Versión: 0.9.1, 2009/03/17, - Antonio J. Doblas Viso. Universidad de Malaga. -# Versión: 0.9.2, 2010/07/27, - Antonio J. Doblas Viso. Universidad de Malaga. -# Version: 0.1.0 2011/01/26, - Antonio J. Doblas Viso. Universidad de Malaga. -TIME1=$SECONDS -PROG="$(basename $0)" -#if [ $# -ne 5 ]; then - # ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG tamaño" -# exit $? -#fi - - -#/** @function cloneremoteFromMaster: @brief Restaura una particion o imagen sobre las particiones de equipos cliente remotos -#@param $1 str_origen admite dirección IP del equipo Master. -#@param $2 str_origen admite int_disk str_REPO|str_CACHE -#@param $3 str_origen admite int partorigen stre_imagen -#@param $4 str_sesion multicast +#/** +# cloneremoteFromMaster +#@brief Restaura una particion o imagen sobre las particiones de equipos cliente remotos +#@param 1 str_origen admite dirección IP del equipo Master. +#@param 2 str_origen admite int_disk str_REPO|str_CACHE +#@param 3 str_origen admite int partorigen stre_imagen +#@param 4 str_sesion multicast|unicast #@param $5 int_disco_destino #@param $6 init_particion_destino +#@param $7 str_tool_clone +#@param $8 str_tool_compresor #@param ejemplo: cloneRemoteFromMaster 172.17.36.11 1 1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop #@param ejemplo: cloneRemoteFromMaster 172.17.36.11 REPO /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop #@param ejemplo: cloneRemoteFromMaster 172.17.36.11 CACHE /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop -#@return la propia de la herramienta de clonacion partimage o ntfsclone -# - +#@return +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception $OG_ERR_IMGSIZEPARTITION=30 #Imagen demasiado pequeña para ser clonada +#@exception OG_ERR_REDUCEFS=17 #error al reducir sistema de archivos. +#@exception OG_ERR_EXTENDFS=18 #errror al expandir el sistema de archivos. +#@exception OG_ERR_UCASTSYNTAXT=50 # Error en la generación de sintaxis de transferenica unicast +#@exception OG_ERR_UCASTSENDPARTITION=51 # Error en envio UNICAST de una particion +#@exception OG_ERR_UCASTSENDFILE=52 # Error en envio UNICAST de un fichero +#@exception OG_ERR_UCASTRECEIVERPARTITION=53 #Error en la recepcion UNICAST de una particion +#@exception OG_ERR_UCASTRECEIVERFILE=54 #Error en la recepcion UNICAST de un fichero +#@exception OG_ERR_MCASTSYNTAXT=55 # Error en la generacion de sintaxis de transferenica Multicast. +#@exception OG_ERR_MCASTSENDFILE=56 # Error en envio MULTICAST de un fichero +#@exception OG_ERR_MCASTRECEIVERFILE=57 #Error en la recepcion MULTICAST de un fichero +#@exception OG_ERR_MCASTSENDPARTITION=58 # Error en envio MULTICAST de una particion +#@exception OG_ERR_MCASTRECEIVERPARTITION=59 # Error en la recepcion MULTICAST de una particion +#@exception OG_ERR_PROTOCOLJOINMASTER=60 # Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER +#@note +#@todo: +#@version 0.9.1 - integración con OpenGnsys +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2009/03/17 +#@version 0.9.2 - adaptacion a OpenGnsys +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2010/07/27 +#@version 0.1.0 - gestion unicast +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2011/01/26 +#@version 1.0 - control de errores para el ogAdmServer +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2011/04/24 +#*/ ## -FOUNDSOURCE=false -HOSTIP=`ogGetIpAddress` - -SESSIONMCASTSERVER=$4 -SESSIONMCASTCLIENT=`echo $4 | awk -F: '{print $1}'` -DISKTARGET=$5 -PARTTARGET=$6 -TOOLCLONE=$7 -COMPRESOR=$8 - TIME1=$SECONDS PROG="$(basename $0)" if [ $# -lt 1 ]; then @@ -50,26 +59,15 @@ if [ $# -lt 6 ]; then exit $? fi -#Chequeamos variables-constantes - -# check HOSTIP +# Obtener información de los parámetros de entrada. +HOSTIP=`ogGetIpAddress` if [ -z "$HOSTIP" ] then - source /tmp/net-eth0.conf + source /tmp/net-eth* HOSTIP=`ogGetIpAddress` fi -MODEMASTER=false - - -#Chequeamos parametros. - -# is $1 a valid IP MASTERIP=$1 - -# contendor origen (disco particion o file) - PROTOCOL=$4 -# Controlamos si multicast o unicast. case $PROTOCOL in MULTICAST|multicast) SESSIONMCASTSERVER=$5 @@ -80,88 +78,62 @@ case $PROTOCOL in SESSIONUCASTCLIENT=`echo $5 | awk -F: '{print $1}'`:$MASTERIP ;; esac - - # contenedor destino (disco particion) DISKTARGET=$6 PARTTARGET=$7 - #herramienta de compresión. TOOLCLONE=$8 COMPRESOR=$9 +pkill faucet -###IMG=$(ogGetPath $2 $3.img) -###echo $IMG - -# Check command in Master (sendFile or sendPartition) - +# Preparando Instrucción según sea Master o Client case $MASTERIP in $HOSTIP) - ogGetPath $2 $3.img - RC=`echo $?` - echo "$RC comenzando control del valor del origen $2 $3" - if [ $RC == "0" ] - then - echo "mode senfile" - IMG=$(ogGetPath $2 $3.img) - MODEMASTER=SENDFILE + echo "[1] Equipo Master preparando el origen de los datos a enviar" + ogGetPath $2 $3.img &>/dev/null; RC=$?; + ogDiskToDev $2 $3 &>/dev/null; RETVAL=$?; + + if [ "$RC" == "0" ]; then + IMG=$(ogGetPath $2 $3.img); MODEMASTER=SENDFILE + elif [ "$RETVAL" == "0" ]; then + DISKSOURCE=$2; PARTSOURCE=$3; MODEMASTER=SENDPARTITION else - if [ $(ogDiskToDev $2 $3) ] - then - echo "mode sendpartitons" - DISKSOURCE=$2 - PARTSOURCE=$3 - MODEMASTER=SENDPARTITION - fi - fi - - echo "modo " $MODEMASTER - - if [ "$MODEMASTER" == "false" ] - then - echo "cloneRemote: origen no encontrado" - exit 1 - else - echo "cloneRemote: sistema preparando para un $MODEMASTER" - fi - + ogRaiseError $OG_ERR_NOTFOUND "$2 $3"; exit $? + fi + echo $MODEMASTER + # Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE} + case "$MODEMASTER" in SENDPARTITION) - echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER" + echo "[5] Master en modo $MODEMASTER: informacion inicial a los clientes-slaves" + faucet 4000 --out echo "WORKING" & echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE" - ogUnmount $2 $3 || exit + ogUnmount $2 $3 || exit $? + echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" #Obtener tamaño de la partición. SIZE=$(ogGetPartitionSize $2 $3) # Reducir el sistema de archvios. - echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" - ogReduceFs $2 $3 || exit 1 - - #echo "salida de ogReduceFS" $? - #if [ $? == 1 ] - #then - # echo "no se ha podido reducir FS" -# exit 1 -# + ogReduceFs $2 $3 || exit $? REDSIZE=$(ogGetFsSize $2 $3) echo "[20]: Reducido el sistema de archivos a $REDSIZE $DISKSOURCE $PARTSOURCE" if [ $REDSIZE -lt $SIZE ]; then echo "[24] Redimensionar partición a $REDSIZE KB." ogSetPartitionSize $2 $3 $REDSIZE fi - echo "[25] ofreciendo informacion a los clientes-slaves" - faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & - - echo "[30] Enviando $PROTOCOL " + echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE" + pkill faucet + faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" & + case $PROTOCOL in MULTICAST|multicast) - echo ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR - ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR + echo "[29] ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR" + ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$? ;; UNICAST|unicast) sleep 60 - echo "ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR" - ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR + echo "[29] ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR" + ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$? ;; esac @@ -173,39 +145,55 @@ case $MASTERIP in fi pkill faucet ;; - SENDFILE) - echo "[5]: cloneRemoteFromMaster: sistema preparando como MASTER modo $MODEMASTER" + SENDFILE) + echo "[5] Master en modo $MODEMASTER: informacion inicial a los clientes-slaves" echo "[10]: Preparando Imagen: $IMG" TOOLCLONE=$(ogGetImageProgram $2 $3) COMPRESOR=$(ogGetImageCompressor $2 $3) REDSIZE=$(ogGetImageSize $2 $3) - echo "[25] ofreciendo informacion a los clientes-slaves: $TOOLCLONE $COMPRESOR $REDSIZE" - faucet 4000 --out echo "$TOOLCLONE $COMPRESOR $REDSIZE" & - - echo "[30] Enviando $PROTOCOL:" - echo "ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER " - ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER - + echo "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE" + faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" & + case $PROTOCOL in + MULTICAST|multicast) + echo "[29] ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER " + ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER || RETVAL=$? + ;; + UNICAST|unicast) + sleep 60 + echo "[29] ogUcastSendFile $2 $3.img $SESSIONUCASTSERVER" + ogUcastSendFile $2 $3.img $SESSIONUCASTSERVER || RETVAL=$? + ;; + esac pkill faucet - ;; + ;; esac - pkill faucet + #exit $RETVAL + exit 0 + # FIN Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE} ;; *) - echo "[5]: cloneRemoteFromMaster: sistema preparando como CLIENTE modo $MODEMASTER" - ogUnmount $DISKTARGET $PARTTARGET - echo "[24] Cliente intentando conectar con el master $MASTERIP" - echo -n "[25] Buscando informacion extra sobre la clonacion: " - # While para esperar al servidor - while [ -z "$INFOEXTRA" ] + echo "[1] Equipo -Client- preparando para recibir datos" + ogUnmount $DISKTARGET $PARTTARGET || exit $? + echo -n "[25] Buscando informacion extra sobre la clonacion con el master $MASTERIP: " + sleep 10 + TIMEWAITMASTER=120 + TIMEWAITING=0 + GETINFO="NONE" + while [ "${GETINFO}" != "OK" ] do INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null` - sleep 10 - echo -n "." + sleep 10; echo -n "." + #Si no consigue conectar con Master, comienza el timeout $TIMEWAITMASTER para abortar + [ -z "$INFOEXTRA" ] && let TIMEWAITMASTER=$TIMEWAITMASTER-10 + [ "$TIMEWAITMASTER" -gt "0" ] || ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " " || exit $? + #Si primer parametro desde el server es READY, salimos del bucle + GETINFO=$(echo $INFOEXTRA | awk '{print $1}') + [ "$GETINFO" == "READY" ] && GETINFO=OK done - TOOLCLONE=$(echo $INFOEXTRA | awk '{print $1}') - COMPRESOR=$(echo $INFOEXTRA | awk '{print $2}') - SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $3}') + echo $INFOEXTRA + TOOLCLONE=$(echo $INFOEXTRA | awk '{print $2}') + COMPRESOR=$(echo $INFOEXTRA | awk '{print $3}') + SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $4}') echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " # comprobamos que el tamaño de a imagen es menor que la del cliente. SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET) @@ -215,11 +203,11 @@ case $MASTERIP in case $PROTOCOL in MULTICAST|multicast) echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR - ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" + ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $? ;; UNICAST|unicast) echo ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR - ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR + ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $? ;; esac @@ -234,9 +222,8 @@ case $MASTERIP in ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST" fi else - echo -n "[25] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " - echo -n "[26] ERROR tamanio particion= $SIZEPARTTARGET tamanio de la imagen= $SIZEIMAGE" - exit 1 + # Si el tamaño de los datos recibidos es más grande que la particion destino + ogRaiseError $OG_ERR_IMGSIZEPARTITION "ERROR tamanio particion= $SIZEPARTTARGET tamanio de la imagen= $SIZEIMAGE"; exit $? fi ;; esac diff --git a/client/shared/scripts/createImage b/client/shared/scripts/createImage index 8e98113a..c0b2a036 100755 --- a/client/shared/scripts/createImage +++ b/client/shared/scripts/createImage @@ -1,6 +1,26 @@ #!/bin/bash -# createImage - Scirpt de ejemplo para crear una imagen de un sistema de archivos. -# (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin). + +#/** +# 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). +#@param 1 disco +#@param 2 particion +#@param 3 REPO|CACHE +#@param 4 imagen +#@return +#@exception OG_ERR_FORMAT formato incorrecto. +#@exception OG_ERR_NOTCACHE #si cache no existe. +#@exception OG_ERR_REDUCEFS #error al reducir sistema de archivos. +#@exception OG_ERR_EXTENDFS #errror al expandir el sistema de archivos. +#@note +#@todo: +#@version 1.0 - control de errores para el ogAdmServer +#@author +#@date +#*/ ## + + TIME1=$SECONDS PROG="$(basename $0)" @@ -17,7 +37,7 @@ IMGEXT="img" # Si el repositorio es CACHE comprobamos que exista if [ "$3" == "CACHE" -o "$3" == "cache" ]; then if ! $(ogFindCache >/dev/null); then - ogRaiseError $OG_ERR_NOTFOUND "CACHE" + ogRaiseError $OG_ERR_NOTCACHE "$MSG_ERR_NOTCACHE" exit $? fi fi @@ -47,7 +67,7 @@ ogUnmount $1 $2 ogCheckFs $1 $2 echo "[30]: Reducir sistema de archivos." -ogReduceFs $1 $2 || exit 1 +ogReduceFs $1 $2 || $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; exit $?) # Crear la imagen. echo "[40] Crear imagen." @@ -55,7 +75,8 @@ ogCreateImage $1 "$2" $3 $4 "$IMGPROG" "$IMGCOMP" || exit $? #ogCreateImage $1 "$2" $3 $4 || exit $? echo "[90] Extender sistema de archivos." -ogExtendFs $1 $2 +ogExtendFs $1 $2 || $(ogRaiseError $OG_ERR_EXTENDFS "$1 $2"; exit $?) + TIME=$[SECONDS-TIME1] echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt index 4d0b7889..9a39fe56 100644 --- a/doc/CHANGELOG.es.txt +++ b/doc/CHANGELOG.es.txt @@ -11,7 +11,7 @@ Tickets resueltos en módulo OpenGnSys Cloning Engine: #286 Parámetro debug para el engine #291 Creación de imagenes desde el modo user #298 Tratamientos de bloqueos de imágenes para solucionar problemas de concurrencia (mejora) -#305 Integración engine version 1.0 +#305 Integración engine versión 1.0 #309 Integración create/restoreImage Trunk y Testing: extensión .img #337 Scripts cliente: reboot|poweroff sleep antes de llamar a Busybox (no se resolverá) #342 ogGetImageInfo() Partclone size MB GB @@ -23,13 +23,14 @@ Tickets resueltos en módulo OpenGnSys Cloning Engine: Tickets resueltos en módulo OpenGnSys Client: #93 Gestionar una estructura de directorios Linux debootstrap para enlazarlo al Initrd +#115 ogAdmClient no lee correctamente el fichero de configuración #131 Generar paquetes deb para el cliente (no se resolverá) #162 Optimizar el uso del fichero-disco con particiones para su uso en entorno virtualizado (mejora) #163 Incluir en el cliente la clave autorizada rsa ssh del servidor #189 Añadir las variables de entorno y Engine en las consolas tty2-tty7 y remotas #243 Browser incluye terminal con letra monospace y barra de estado en UTF-8 (mejora) #288 Integración modulo netboot -#294 Integración activacion wol del cliente +#294 Integración activación Wake On LAN del cliente #303 Integración proceso arranque cliente versión 1.0 #304 Integración interface adm versión 1.0 #314 SMB punto acceso 2nd FileSystem del cliente [tftpboot] [ogboot] @@ -45,6 +46,7 @@ Tickets resueltos en módulo OpenGnSys Server: Tickets resueltos en módulo OpenGnSys Repository Server: #188 Al restaurar por torrent el BitFile no se crea siempre #300 Integración binarios del repo +#384 Se ha portado una versión antigua del script sendFileMcast Tickets resueltos en módulo OpenGnSys Web Admin Console: #126 Integración de consola Web con bittorent (mejora) @@ -54,11 +56,13 @@ Tickets resueltos en módulo OpenGnSys Web Admin Console: #258 Error al eliminar un perfil de software #266 Información unidades en tamaño de la caché #268 Erratas en texto de formularios -#301 Integración modulos web versión 1.0 -#302 Integración base de datos version 1.0 -#306 Asistente Clonacion Particiones Remotas no genera código +#301 Integración módulos web versión 1.0 +#302 Integración base de datos versión 1.0 +#306 Asistente Clonación Particiones Remotas no genera código #307 Asistente Deploy de Imagenes no muestra nombres de imágenes +#308 Asistente Deploy de Imagenes - multicast: no lanza el repo #310 Instalar: no genera las propiedades del repositorio por defecto en la consola (duplicado de #248) +#315 OpenGnSys distribuido: CloneRemoteFromPartition en Unicast #338 Validación de formularios de la consola web #339 Añadir opción de apagado en cliente sin menú asociado (mejora) #349 Botón de confirmación en gestor de arranque @@ -68,12 +72,13 @@ Tickets resueltos en módulo OpenGnSys Web Admin Console: Tickets resueltos en módulo OpenGnSys Installer: #299 Instalador para la versión 1.0 -#312 instalador: torrent-tracker no se se instala +#312 Instalador: torrent-tracker no se se instala #313 Instalador: no genera la estrucutra para el cliente #316 Error en opengnsys_update.sh al copiar archivos de servicios #335 Error en opengnsys_update.sh al descomprimir cliente #361 Actualizador debe aplicar cambios en la estructura de base de datos #365 Comprobar conectividad http y svn en el instalador +#366 Fichero interfaceAdm/CambiarAcceso no se instala con los correspondientes permisos para el grupo Tickets genéricos resueltos: #362 Convertir versión 1.0 en rama principal de desarrollo @@ -91,7 +96,7 @@ Tickets resueltos en módulo OpenGnSys Cloning Engine: #276 Error de CRC al restaurar imágenes con Partclone #292 Error de CRC al restaurar o crear imagen (duplicado de #276) #290 ogReduceFs en Ext[234] -#293 createImageTesting incluye el redimensionado de la particion origen pero luego no la expande +#293 createImageTesting incluye el redimensionado de la partición origen pero luego no la expande #297 Error al detectar tipo de partición Linux marcada como activa Tickets resueltos en módulo OpenGnSys Client: @@ -118,7 +123,7 @@ Tickets resueltos en módulo OpenGnSys Web Admin Console: #254 Consola Web: particionar y formatear #259 Consola Web: información de un repositorio #282 Gestión web de log -#283 Gestor de activacion/desactivacion modulos web +#283 Gestor de activación/desactivación módulos web #284 Modulo web: propiedades aula/equipos combo box para elementos netboot #285 Modulo web: propiedades aula/equipos combo box para elementos netboot @@ -136,7 +141,7 @@ Lista de cambios incluidos en OpenGnSys 0.9.2 Tickets resueltos en módulo OpenGnSys Cloning Engine: #159 No reconoce Ubuntu 10.04 -#165 funcion torrent no migrada correctamente desde el branch +#165 Función torrent no migrada correctamente desde el branch #166 Errores Particionando y Formateando #172 Protocol.lib Error control nº parámetros sesión multicast de cliente #178 Adaptar funciones de generación y restauración de imágenes monolÃticas @@ -208,9 +213,9 @@ Tickets resueltos en módulo OpenGnSys Cloning Engine: #17 Arrancar Windows Vista #38 Documentar codigo shell scripts linux con doxygen #50 Ayuda en las funciones -#52 funcion generacion documentacion doxygen para bash +#52 Función generación documentación Doxygen para BASH #58 Utilizar formato de ayuda y función ogHelp -#61 ogListPartitions muestra el tipo de sistemas de archivos de la particion y no el tipo de particion en cuestión +#61 ogListPartitions muestra el tipo de sistemas de archivos de la particion y no el tipo de partición en cuestión #71 ogListPartitions falla con partición extendida #73 Mensajes de error en particiones vacÃas #75 Arrancar sistemas Linux en partición distinta a la original @@ -222,8 +227,8 @@ Tickets resueltos en módulo OpenGnSys Cloning Engine: #101 trunk Disk.lib error linea 445 #109 ogSetPartitionId no modifica bien el identificador de la partición #110 ogCreatePartitions no llama a ogTypeToId -#111 ogFormatFS no reconoce el tipo de partiticion CACHE -#121 ogCreatePartitions revision 813 +#111 ogFormatFS no reconoce el tipo de partitición CACHE +#121 ogCreatePartitions revisión 813 Tickets resueltos en módulo OpenGnSys Client: #11 Páginas de inicio estilo rembo @@ -232,7 +237,7 @@ Tickets resueltos en módulo OpenGnSys Client: #41 Usar kernel 2.6.30 o superior en los clientes (mejora) #55 Incluir tune2fs y resize2fs en cliente Initrd #56 Montar particiones ReiserFS en cliente Initrd -#59 añadir mkfs para los sitemas ext al cliente initrd +#59 Añadir mkfs para los sitemas Ext al cliente initrd #60 default de preinit no inicia el sistema #67 Cliente QT no importa NFS #68 Cliente no encuentra el subdirectorio de logs @@ -240,13 +245,13 @@ Tickets resueltos en módulo OpenGnSys Client: #84 oginit considera siempre al servidor dhcp como si fuese el servidor opengnsys #105 El browser del cliente no detecta algunos ratones #106 Añadir al busybox del initrd soporte de configuración de red (no se resolverá) -#118 Funcion ogGetIpAddress no obtiene la ip adecuadamente +#118 Función ogGetIpAddress no obtiene la ip adecuadamente Tickets resueltos en módulo OpenGnSys Web Admin Console: #10 Consola no detecta bien el inventario de hardware #19 Integrar las bases de datos (tarea) #20 Creación de scripts de instalación (no se ressolverá) -#25 Interfaz web: Problemas con la creacion de entidades +#25 Interfaz web: Problemas con la creación de entidades #34 Unificar codificación de caracteres en interfaz web #42 Error en menú opciones ordenador (tarea) #54 Gestión de usuarios @@ -277,7 +282,7 @@ Tickets resueltos en módulo OpenGnSys Installer: #95 Petición de clave rootMySQL en reintento de instalación tar.gz #102 Fallo en el instalador #103 ogAdmClient.cfg no compatible con el instalacion (lineas en blanco al final) -#104 el instalador no configura bien el dhcp, nfs-export +#104 El instalador no configura bien el dhcp, nfs-export #107 Actualizador da error si no se ha eliminado el directorio de /tmp #123 Creación de usuarios por defecto en el instalador diff --git a/doc/VERSION.txt b/doc/VERSION.txt index 79c512fa..0b7640f7 100644 --- a/doc/VERSION.txt +++ b/doc/VERSION.txt @@ -1 +1 @@ -OpenGnSys 1.0 +OpenGnSys 1.0.1 diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 1c668b5c..6dd373cd 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -44,8 +44,8 @@ if [ -d "$PROGRAMDIR/../installer" ]; then USESVN=0 else USESVN=1 - SVN_URL="http://$OPENGNSYS_SERVER/svn/branches/version1.0/" fi +SVN_URL="http://$OPENGNSYS_SERVER/svn/branches/version1.0/" WORKDIR=/tmp/opengnsys_installer mkdir -p $WORKDIR @@ -711,11 +711,8 @@ function smbConfigure() errorAndLog "${FUNCNAME}(): error while configure Samba" return 1 fi - # Crear usuario de acceso a los recursos y establecer permisos. - useradd $OPENGNSYS_CLIENT_USER 2>/dev/null + # Crear clave para usuario de acceso a los recursos. echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | smbpasswd -a -s $OPENGNSYS_CLIENT_USER - chmod -R 775 $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg} - chown -R :$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg} echoAndLog "${FUNCNAME}(): Added Samba configuration." return 0 @@ -835,17 +832,17 @@ function makeDoxygenFiles() # Crea la estructura base de la instalación de opengnsys -function openGnsysInstallCreateDirs() +function createDirs() { if [ $# -ne 1 ]; then errorAndLog "${FUNCNAME}(): invalid number of parameters" exit 1 fi - local path_opengnsys_base=$1 + local path_opengnsys_base="$1" + # Crear estructura de directorios. echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base" - mkdir -p $path_opengnsys_base mkdir -p $path_opengnsys_base/bin mkdir -p $path_opengnsys_base/client @@ -853,17 +850,38 @@ function openGnsysInstallCreateDirs() mkdir -p $path_opengnsys_base/etc mkdir -p $path_opengnsys_base/lib mkdir -p $path_opengnsys_base/log/clients + ln -fs $path_opengnsys_base/log /var/log/opengnsys mkdir -p $path_opengnsys_base/sbin mkdir -p $path_opengnsys_base/www mkdir -p $path_opengnsys_base/images ln -fs /var/lib/tftpboot $path_opengnsys_base - ln -fs $path_opengnsys_base/log /var/log/opengnsys - + mkdir -p $path_opengnsys_base/tftpboot/pxelinux.cfg if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" return 1 fi + # Crear usuario ficticio. + if id -u $OPENGNSYS_CLIENT_USER &>/dev/null; then + echoAndLog "${FUNCNAME}(): user \"$OPENGNSYS_CLIENT_USER\" is already created" + else + echoAndLog "${FUNCNAME}(): creating OpenGnSys user" + useradd $OPENGNSYS_CLIENT_USER 2>/dev/null + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error creating OpenGnSys user" + return 1 + fi + fi + + # Establecer los permisos básicos. + echoAndLog "${FUNCNAME}(): setting directory permissions" + chmod -R 775 $path_opengnsys_base/{log/clients,images,tftpboot/pxelinux.cfg} + chown -R :$OPENGNSYS_CLIENT_USER $path_opengnsys_base/{log/clients,images,tftpboot/pxelinux.cfg} + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while setting permissions" + return 1 + fi + echoAndLog "${FUNCNAME}(): directory paths created" return 0 } @@ -1129,10 +1147,17 @@ function openGnsysConfigure() function installationSummary() { + # Crear fichero de versión y revisión, si no existe. + local VERSIONFILE="$INSTALL_TARGET/doc/VERSION.txt" + local REVISION=$(LANG=C svn info $SVN_URL|awk '/Revision:/ {print "r"$2}') + [ -f $VERSIONFILE ] || echo "OpenGnSys" >$VERSIONFILE + perl -pi -e "s/($| r[0-9]*)/ $REVISION/" $VERSIONFILE + + # Mostrar información. echo echoAndLog "OpenGnSys Installation Summary" echo "==============================" - echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)" + echoAndLog "Project version: $(cat $VERSIONFILE 2>/dev/null)" echoAndLog "Installation directory: $INSTALL_TARGET" echoAndLog "Repository directory: $INSTALL_TARGET/images" echoAndLog "DHCP configuration file: /etc/dhcp3/dhcpd.conf" @@ -1195,7 +1220,7 @@ if [ $? -ne 0 ]; then fi # Arbol de directorios de OpenGnSys. -openGnsysInstallCreateDirs ${INSTALL_TARGET} +createDirs ${INSTALL_TARGET} if [ $? -ne 0 ]; then errorAndLog "Error while creating directory paths!" exit 1 diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index f3159d59..79ac7857 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -36,9 +36,9 @@ if [ -d "$PROGRAMDIR/../installer" ]; then USESVN=0 else USESVN=1 - SVN_URL=http://$OPENGNSYS_SERVER/svn/branches/version1.0 DEPS="$DEPS subversion" fi +SVN_URL="http://$OPENGNSYS_SERVER/svn/branches/version1.0/" WORKDIR=/tmp/opengnsys_update mkdir -p $WORKDIR @@ -357,8 +357,8 @@ function makeDoxygenFiles() # Crea la estructura base de la instalación de opengnsys function createDirs() { + # Crear estructura de directorios. echoAndLog "${FUNCNAME}(): creating directory paths in ${INSTALL_TARGET}" - mkdir -p ${INSTALL_TARGET} mkdir -p ${INSTALL_TARGET}/bin mkdir -p ${INSTALL_TARGET}/client @@ -366,17 +366,38 @@ function createDirs() mkdir -p ${INSTALL_TARGET}/etc mkdir -p ${INSTALL_TARGET}/lib mkdir -p ${INSTALL_TARGET}/log/clients + ln -fs ${INSTALL_TARGET}/log /var/log/opengnsys mkdir -p ${INSTALL_TARGET}/sbin mkdir -p ${INSTALL_TARGET}/www mkdir -p ${INSTALL_TARGET}/images ln -fs /var/lib/tftpboot ${INSTALL_TARGET} - ln -fs ${INSTALL_TARGET}/log /var/log/opengnsys - + mkdir -p ${INSTALL_TARGET}/tftpboot/pxelinux.cfg if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" return 1 fi + # Crear usuario ficticio. + if id -u $OPENGNSYS_CLIENTUSER &>/dev/null; then + echoAndLog "${FUNCNAME}(): user \"$OPENGNSYS_CLIENTUSER\" is already created" + else + echoAndLog "${FUNCNAME}(): creating OpenGnSys user" + useradd $OPENGNSYS_CLIENTUSER 2>/dev/null + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error creating OpenGnSys user" + return 1 + fi + fi + + # Establecer los permisos básicos. + echoAndLog "${FUNCNAME}(): setting directory permissions" + chmod -R 775 $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg} + chown -R :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg} + if [ $? -ne 0 ]; then + errorAndLog "${FUNCNAME}(): error while setting permissions" + return 1 + fi + echoAndLog "${FUNCNAME}(): directory paths created" return 0 } @@ -517,6 +538,24 @@ function updateClient() echoAndLog "${FUNCNAME}(): Client update successfully" } +# Resumen de actualización. +function updateSummary() +{ + # Actualizar fichero de versión y revisión. + local VERSIONFILE="$INSTALL_TARGET/doc/VERSION.txt" + local REVISION=$(LANG=C svn info $SVN_URL|awk '/Revision:/ {print "r"$2}') + + [ -f $VERSIONFILE ] || echo "OpenGnSys" >$VERSIONFILE + perl -pi -e "s/($| r[0-9]*)/ $REVISION/" $VERSIONFILE + + echo + echoAndLog "OpenGnSys Update Summary" + echo "========================" + echoAndLog "Project version: $(cat $VERSIONFILE)" + echo +} + + ##################################################################### ####### Proceso de actualización de OpenGnSys @@ -616,6 +655,9 @@ if [ -f /tmp/dstate ]; then rm -f /tmp/dstate fi +# Mostrar resumen de actualización. +updateSummary + #rm -rf $WORKDIR echoAndLog "OpenGnSys update finished at $(date)" diff --git a/repoman/bin/sendFileMcast b/repoman/bin/sendFileMcast index b1c124f1..39f6a947 100755 --- a/repoman/bin/sendFileMcast +++ b/repoman/bin/sendFileMcast @@ -61,7 +61,6 @@ CERROR="8x8/128" which mbuffer &> /dev/null && MBUFFER="--pipe 'mbuffer -m 20M'" ##### ADV v. 1.0 23/02/2011 #version 0.10 # udp-sender $MBUFFER --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" -#/opt/opengnsys/bin/udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" --log /opt/opengnsys/log/ogAdmRepoMcast.log -/opt/opengnsys/bin/udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" +$OGBIN/udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG" ##### ADV v. 1.0 23/02/2011 |