diff options
author | ramon <ramongomez@us.es> | 2011-06-15 11:32:53 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2011-06-15 11:32:53 +0000 |
commit | ecd8d9ac7a4419618f471815d748a51923d90aea (patch) | |
tree | 5e4e60b889df53993b557f907e00d468bc7fde71 | |
parent | 61dabee7d4cd985599233fd3e9c07a76e5e85f84 (diff) |
Integrar OpenGnSys 1.0.1 en rama principal (modifica #413).
git-svn-id: https://opengnsys.es/svn/trunk@2065 a21b9725-9963-47de-94b9-378ad31fedc9
85 files changed, 3307 insertions, 868 deletions
diff --git a/admin/Database/ogAdmBD-0.9.1-0.9.2pre.sql b/admin/Database/ogAdmBD-0.9.1-0.9.2pre.sql deleted file mode 100644 index 09d15a5f..00000000 --- a/admin/Database/ogAdmBD-0.9.1-0.9.2pre.sql +++ /dev/null @@ -1,8 +0,0 @@ --- Cambios para gestión de Multicast - -ALTER TABLE `ordenadores` - ADD COLUMN `modomul` TINYINT(4) NOT NULL, - ADD COLUMN `ipmul` VARCHAR(16) NOT NULL, - ADD COLUMN `pormul` INT(11) NOT NULL, - ADD COLUMN `velmul` SMALLINT(6) NOT NULL; - diff --git a/admin/Database/ogAdmBD-1.0-1.0.1.sql b/admin/Database/ogAdmBD-1.0-1.0.1.sql new file mode 100644 index 00000000..30798763 --- /dev/null +++ b/admin/Database/ogAdmBD-1.0-1.0.1.sql @@ -0,0 +1,2 @@ +UPDATE `ogAdmBD`.`parametros` SET `tipopa` = '4', +`visual` = '1' WHERE `parametros`.`idparametro` =30;
\ No newline at end of file diff --git a/admin/Database/ogAdmBD-1.0pre-1.0.1.sql b/admin/Database/ogAdmBD-1.0pre-1.0.1.sql new file mode 100644 index 00000000..523c1ecf --- /dev/null +++ b/admin/Database/ogAdmBD-1.0pre-1.0.1.sql @@ -0,0 +1,24 @@ +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + +-- +-- Base de datos: `ogAdmBD` +-- + + +ALTER TABLE `aulas` CHANGE `modp2p` `modp2p` ENUM( 'seeder', 'peer', 'leecher' ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'peer'; + +ALTER TABLE `aulas` CHANGE `velmul` `velmul` SMALLINT( 6 ) NOT NULL DEFAULT '70'; + + +ALTER TABLE `asistentes` DROP PRIMARY KEY , +ADD PRIMARY KEY ( `idcomando` , `descripcion` ) ; + +UPDATE `ogAdmBD`.`comandos` SET `activo` = '0' WHERE `comandos`.`idcomando` =10; + +UPDATE `ogAdmBD`.`asistentes` SET `idcomando` = '8' ; + + +UPDATE `ogAdmBD`.`itemboot` SET `append` = 'APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true' WHERE `itemboot`.`label` = 'ogClientAdmin'; + +UPDATE `ogAdmBD`.`parametros` SET `tipopa` = '4', `visual` = '1' WHERE `parametros`.`idparametro` = 30; + diff --git a/admin/Database/ogAdmBD-1.0pre-1.0.sql b/admin/Database/ogAdmBD-1.0pre-1.0.sql index 652721c3..65f0c4ff 100644 --- a/admin/Database/ogAdmBD-1.0pre-1.0.sql +++ b/admin/Database/ogAdmBD-1.0pre-1.0.sql @@ -1,13 +1,10 @@ SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- --- Base de datos: `ogBDAdmin` +-- Base de datos: `ogAdmBD` -- - - - ALTER TABLE `aulas` CHANGE `modp2p` `modp2p` ENUM( 'seeder', 'peer', 'leecher' ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'peer'; ALTER TABLE `aulas` CHANGE `velmul` `velmul` SMALLINT( 6 ) NOT NULL DEFAULT '70'; diff --git a/admin/Interface/Apagar b/admin/Interface/Apagar index fc850d9f..ae1e5ba4 100755 --- a/admin/Interface/Apagar +++ b/admin/Interface/Apagar @@ -1,2 +1,3 @@ #!/bin/bash poweroff +exit 0 diff --git a/admin/Interface/CambiarAcceso b/admin/Interface/CambiarAcceso index ddd67666..210b3d80 100755 --- a/admin/Interface/CambiarAcceso +++ b/admin/Interface/CambiarAcceso @@ -1,10 +1,10 @@ #!/bin/bash -#_______________________________________________________________________________________________________________________________ +#______________________________________ # # PARAMETROS RECIBIDOS DESDE EL CLIENTE # $1 modo (admin, user) -#_______________________________________________________________________________________________________________________________ +#______________________________________ # Error si llamada no se realliza desde OpenGnSys Client. PROG=$(basename $0) @@ -14,7 +14,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" diff --git a/admin/Interface/CrearImagen b/admin/Interface/CrearImagen index 7625ab80..abc6edea 100755 --- a/admin/Interface/CrearImagen +++ b/admin/Interface/CrearImagen @@ -9,6 +9,27 @@ # $4 Dirección del repositorio (REPO, por defecto) #___________________________________________________ + +#$OG_ERR_NOTEXEC Si no es llamada por OG client +#$OG_ERR_LOCKED=4 Si la particion está bloqueada. + + +#Codigos de error del scripts createImage +#@exception OG_ERR_FORMAT # 1 formato incorrecto. +#@exception OG_ERR_PARTITION # 3 Error en partición de disco o en su sistema de archivos +#@exception OG_ERR_IMAGE # 5 Error en funcion ogCreateImage o ogRestoreImage. +#@exception OG_ERR_NOTWRITE # 14 error de escritura +#@exception OG_ERR_NOTCACHE # 15 si cache no existe 15 +#@exception OG_ERR_CACHESIZE # 16 si espacio de la cache local o remota no tiene espacio 16 +#@exception OG_ERR_REDUCEFS # 17 error al reducir sistema de archivos. +#@exception OG_ERR_EXTENDFS # 18 Errror al expandir el sistema de archivos. + + +#Códigos de error de la funcion ogCreateImage + + + + # Registro de ejecución echo $* >> $OGLOGFILE @@ -21,20 +42,46 @@ if [ "$CALLER" != "ogAdmClient" ]; then exit $? fi +# Si el origen(pariticion) esta bloqueada salir. + +#if ogIsLocked $1 $2; then +# ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION, $1 $2" +# exit $? +#fi + + # Valor por defecto para el repositorio. REPO=${4:-"REPO"} [ "$REPO" == "$(ogGetRepoIp)" ] && REPO="REPO" [ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE" +[ "$REPO" == "CACHE" ] && REPO="CACHE" + +# Si el destino es REPO y el cliente no está en modo "admin"; activar repositorio para escritura, +if [ "$REPO" == "REPO" -a "$boot" != "admin" ] +then + CambiarAcceso admin &>> $OGLOGFILE + RETVAL=$? + [ $RETVAL -gt 0 ] && exit $RETVAL +fi + + -# Si cleinte no está en modo "admin"; activar repositorio para escritura, -# crear imagen y activar para lectura. -[ "$boot" != "admin" ] && CambiarAcceso admin if [ -f createImage$ogengine ]; then - createImage$ogengine "$1" "$2" "$REPO" "$3" &>> $OGLOGFILE + createImage$ogengine "$1" "$2" "$REPO" /"$3" &>> $OGLOGFILE else - createImage "$1" "$2" "$REPO" "$3" &>> $OGLOGFILE + createImage "$1" "$2" "$REPO" /"$3" &>> $OGLOGFILE fi RETVAL=$? -[ "$boot" != "admin" ] && CambiarAcceso user + +[ "$REPO" == "REPO" -a "$boot" != "admin" ] && CambiarAcceso user + +if [ $RETVAL == 0 ] +then + rm $OGLOGFILE + touch $OGLOGFILE +else + echo $RETVAL &>> $OGLOGFILE +fi + exit $RETVAL diff --git a/admin/Interface/EjecutarScript b/admin/Interface/EjecutarScript index 101bd15f..3de64815 100755 --- a/admin/Interface/EjecutarScript +++ b/admin/Interface/EjecutarScript @@ -7,4 +7,15 @@ echo -e >> $OGLOGFILE echo -e >> $OGLOGFILE echo "Salida: *****************************" >> $OGLOGFILE chmod +x $1 -$1 &>> $OGLOGFILE || exit $? +$1 &>> $OGLOGFILE +RETVAL=$? +echo $RETVAL &>> $OGLOGFILE + +if [ $RETVAL == 0 ] +then + rm $OGLOGFILE + touch $OGLOGFILE +else + echo $RETVAL &>> $OGLOGFILE +fi +exit $RETVAL
\ No newline at end of file diff --git a/admin/Interface/Reiniciar b/admin/Interface/Reiniciar index 01bd8683..df93c1bf 100755 --- a/admin/Interface/Reiniciar +++ b/admin/Interface/Reiniciar @@ -1,2 +1,3 @@ #!/bin/bash reboot +exit 0 diff --git a/admin/Interface/RestaurarImagen b/admin/Interface/RestaurarImagen index 6e2ed2f6..90299ba9 100755 --- a/admin/Interface/RestaurarImagen +++ b/admin/Interface/RestaurarImagen @@ -5,17 +5,92 @@ # $1 disco # $2 par=N�mero de particion # $3 Nombre can�nico de la imagen -# $4 Direcci�n del repositorio +# $4 Direcci�n IP del repositorio +# $5 Protocolo UNICAST MULTICAST TORRENT +# $6 Opciones del protocolo #_______________________________________________________________________________________________________________________________ -echo $* >> $OGLOGFILE -echo $* >> $OGLOGFILE -if [ -f createImage$ogengine ] +#Descripcion: +# La interfaz detecta: +# Si Repositorio es el global (REPO) realiza un deploy. +# Si Repositorio es local (CACHE) realiza un ogRestoreImage CACHE +# El deploy, si detecta que el cliente no tiene una cache con espacio suficiente reazlia un ogRestore REPO + +#Códigos de error de ogRestoreImage +#@exception OG_ERR_FORMAT 1 formato incorrecto. +#@exception OG_ERR_NOTFOUND 2 fichero de imagen o partición no detectados. +#@exception OG_ERR_PARTITION 3 # Error en partición de disco. +#@exception OG_ERR_LOCKED 4 partición bloqueada por otra operación. +#@exception OG_ERR_IMAGE 5 error al restaurar la imagen del sistema. +#@exception OG_ERR_IMGSIZEPARTITION 30 Tamaño de la particion es menor al tamaño de la imagen. +#@todo: el scripts restoreImage limitarlo a origen:fichero destino:particion +#@version 1.0.1 - Separación en protocolos de transferencia y postconfiguracion +#@author +#@date 2011-05-11 +# + + +# Registro de ejecución +echo $* >> $OGLOGFILE + +# Si el origen(pariticion) esta bloqueada salir. + +echo "TODO comprobando si esta bloqueado el $1 $2" &>> $OGLOGFILE +#if ogIsLocked $1 $2; then +# ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION, $1 $2" +# exit $? +#fi + +# Valor por defecto para el repositorio. +REPO=${4:-"REPO"} +[ "$REPO" == "$(ogGetRepoIp)" ] && REPO="REPO" +[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE" +[ "$REPO" == "CACHE" ] && REPO="CACHE" + + +if [ "$REPO" == "CACHE" ] then - restoreImage$ogengine REPO $3 $1 $2 UNICAST &>> $OGLOGFILE || exit $? -else - restoreImage REPO $3 $1 $2 UNICAST &>> $OGLOGFILE || exit $? -fi + echo "Iniciando un ogRestoreImage CACHE /$3 $1 $2" &>> $OGLOGFILE + ogRestoreImage CACHE /"$3" "$1" "$2" &>> $OGLOGFILE + RETVAL=$? +fi +if [ "$REPO" == "REPO" ] +then + echo "updateCache REPO /$3.img $5 $6" &>> $OGLOGFILE + updateCache REPO /$3.img $5 $6 &>> $OGLOGFILE + RETVAL=$? + case $RETVAL in + 0) + echo "updateCache (correcto); re realiza ogRestoreImage REPO /$3 $1 $2 UNICAST" &>> $OGLOGFILE + ogRestoreImage CACHE /"$3" "$1" "$2" &>> $OGLOGFILE + RETVAL=$? + ;; + 15) + echo "updateCache(no hay CACHE); se realiza ogRestoreImage REPO /$3 $1 $2 UNICAST" &>> $OGLOGFILE + ogRestoreImage REPO /"$3" "$1" "$2" &>> $OGLOGFILE + RETVAL=$? + ;; + 16) + echo "updateCache(no hay espacio sufiente en la CACHE), Se realiza ogRestoreImage REPO /$3 $1 $2 UNICAST" &>> $OGLOGFILE + ogRestoreImage REPO /"$3" "$1" "$2" &>> $OGLOGFILE + RETVAL=$? + ;; + esac +fi + +if [ $RETVAL == 0 ] +then + echo "Iniciando la Configuracion del Sistema Restaurado" &>> $OGLOGFILE + configureOs $1 $2 +fi +if [ $RETVAL == 0 ] +then + rm $OGLOGFILE + touch $OGLOGFILE +else + echo $RETVAL &>> $OGLOGFILE +fi +exit $RETVAL 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/AyudanteFormularios.php b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php index e1164221..360c8948 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php +++ b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php @@ -165,11 +165,26 @@ $cmd->texto='SELECT nombreordenador,idordenador,ip FROM ordenadores where idaul -function htmlOPTION_images($cmd) +function htmlOPTION_images($cmd,$ambito,$idambito) { +if ($ambito == 4) +{ +$subconsultarepo='SELECT DISTINCT idrepositorio from ordenadores where idaula=' . $idambito ; +} +if ($ambito == 8) +{ +$subconsultarepo='SELECT DISTINCT idrepositorio FROM ordenadores where grupoid=' . $idambito ; +} +if ($ambito == 16) +{ +$subconsultarepo='SELECT idrepositorio FROM ordenadores where idordenador=' . $idambito ; +} + + $SelectHtml=""; $cmd->texto="SELECT *,repositorios.ip as iprepositorio FROM imagenes - INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio"; + INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio AND repositorios.idrepositorio=(" . $subconsultarepo . ")"; + $rs=new Recordset; $rs->Comando=&$cmd; @@ -183,6 +198,11 @@ function htmlOPTION_images($cmd) } $rs->Cerrar(); } + else + { + $SelectHtml.='<option value=""> ERROR: Ambito con multiples Repositorios --</option>'; + + } return($SelectHtml); } diff --git a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php index c649ee66..2cd0b7c1 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php @@ -30,7 +30,7 @@ Elige herramienta de clonacion: <select name="tool" id="tool" style="WIDTH:220";"> <option value="partclone"> partclone </option> - <option value="partimage"> partimage </option> + <!-- <option value="partimage"> partimage </option> --> </select> <br /> Elige compresor para la herramienta de clonacion: diff --git a/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php b/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php index 2ee0920c..4b2e0aa0 100644 --- a/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php +++ b/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php @@ -1,22 +1,24 @@ - + Elige si solo quieres almacenar la imagen en la Cache - UpdateCache <br> + <input type="radio" name="modo" value="deployImage" checked > deployImage (update+restore) <br> + <input type="radio" name="modo" value="updateCache" > updateCache (solo descarga) <br> + <tr> <td> opciones basicas </td> <td> opciones multicast </td> <td> opciones torrent </td> <td> opciones unicast </td></tr> <tr> <td class="op_basic"> + Elige la particion del disco donde se restaurar la imagen: <select name="idparticion" id="idparticion" style="WIDTH:220"> <option value="1"> 1 </option> <option value="2"> 2 </option> <option value="3"> 3 </option> </select> - - <!--DIV donde se mostrara la respuesta AJAX sobre las particiones clonables del equipo--> - <div id="divListado"></div> + <br /> Elige la imagen a distribuir: <select name="idimagen" id="idimagen" style="WIDTH:220"> <option value="">--Selecciona imagen --</option> - <?php echo ''. htmlOPTION_images($cmd) .''; ?> + <?php echo ''. htmlOPTION_images($cmd,$ambito,$idambito) .''; ?> </select> <br /> @@ -26,6 +28,7 @@ <!-- <option value="UNICAST"> UNICAST </option> --> <option value="TORRENT"> TORRENT </option> <option value="MULTICAST"> MULTICAST </option> + <option value="UNICAST"> UNICAST </option> </select> <br /> </td> diff --git a/admin/WebConsole/asistentes/jscripts/asistentes.js b/admin/WebConsole/asistentes/jscripts/asistentes.js index a8ab24d8..0ecbe87a 100644 --- a/admin/WebConsole/asistentes/jscripts/asistentes.js +++ b/admin/WebConsole/asistentes/jscripts/asistentes.js @@ -32,9 +32,20 @@ switch (form.idmetodo.value) case "TORRENT": protocol=" TORRENT " + form.modp2p.value + ":" + form.timep2p.value; break; + case "UNICAST": + protocol=" UNICAST"; + break; } //form.codigo.value="deployImage REPO /"; -form.codigo.value="deployImage REPO /" + form.idimagen.value + " 1 " + form.idparticion.value + " " + protocol ; +if (form.modo[0].checked) +{ + form.codigo.value="deployImage REPO /" + form.idimagen.value + " 1 " + form.idparticion.value + " " + protocol ; +} +else +{ + form.codigo.value="updateCache REPO /" + form.idimagen.value + ".img" + " " + protocol ; +} + } function codeParticionado(form){ diff --git a/admin/WebConsole/comandos/CrearImagen.php b/admin/WebConsole/comandos/CrearImagen.php index 00e404b5..330885be 100644 --- a/admin/WebConsole/comandos/CrearImagen.php +++ b/admin/WebConsole/comandos/CrearImagen.php @@ -61,7 +61,7 @@ if (!$resul){ <TH align=center> <? echo $TbMsg[10] ?> </TD> <TH align=center> <? echo $TbMsg[11] ?> </TD> </TR> - <? + <? echo tablaConfiguraciones($cmd,$idambito,$idrepositorio); ?> </TABLE> @@ -110,12 +110,39 @@ function tomaPropiedades($cmd,$ido){ /*________________________________________________________________________________________________________ Crea la etiqueta html <SELECT> de los perfiles softwares ________________________________________________________________________________________________________*/ -function HTMLSELECT_imagenes($cmd,$idperfilsoft,$particion) +function HTMLSELECT_imagenes($cmd,$idrepositorio,$idperfilsoft,$particion,$masterip) { $SelectHtml=""; - $cmd->texto="SELECT imagenes.idimagen,imagenes.descripcion,imagenes.nombreca,imagenes.idperfilsoft FROM imagenes"; -// WHERE imagenes.idperfilsoft=".$idperfilsoft; - // echo $cmd->texto; + $cmd->texto="SELECT imagenes.idimagen,imagenes.descripcion,imagenes.nombreca,imagenes.idperfilsoft, repositorios.nombrerepositorio + FROM imagenes INNER JOIN repositorios on imagenes.idrepositorio = repositorios.idrepositorio + WHERE imagenes.idrepositorio=".$idrepositorio ." OR repositorios.ip='" .$masterip ."'"; + //echo $cmd->texto; + $rs=new Recordset; + $rs->Comando=&$cmd; + $SelectHtml.= '<SELECT class="formulariodatos" id="despleimagen_'.$particion.'" style="WIDTH: 300">'; + $SelectHtml.= ' <OPTION value="0"></OPTION>'; + if ($rs->Abrir()){ + $rs->Primero(); + while (!$rs->EOF){ + $SelectHtml.='<OPTION value="'.$rs->campos["idimagen"]."_".$rs->campos["nombreca"]."_".$rs->campos["nombreca"].'"'; + if($idperfilsoft==$rs->campos["idperfilsoft"]) $SelectHtml.=" selected "; + $SelectHtml.='>'; + $SelectHtml.= $rs->campos["descripcion"]. ' -- '. $rs->campos['nombrerepositorio'] . '</OPTION>'; + $rs->Siguiente(); + } + $rs->Cerrar(); + } + $SelectHtml.= '</SELECT>'; + return($SelectHtml); +} + +function HTMLSELECT_imagenesORIGINAL($cmd,$idrepositorio,$idperfilsoft,$particion,$masterip) +{ + $SelectHtml=""; + $cmd->texto="SELECT imagenes.idimagen,imagenes.descripcion,imagenes.nombreca,imagenes.idperfilsoft + FROM imagenes INNER JOIN repositorios on imagenes.idrepositorio = repositorios.idrepositorio + WHERE imagenes.idrepositorio=".$idrepositorio ." OR repositorios.ip='" .$masterip ."'"; + //echo $cmd->texto; $rs=new Recordset; $rs->Comando=&$cmd; $SelectHtml.= '<SELECT class="formulariodatos" id="despleimagen_'.$particion.'" style="WIDTH: 300">'; @@ -134,14 +161,15 @@ function HTMLSELECT_imagenes($cmd,$idperfilsoft,$particion) $SelectHtml.= '</SELECT>'; return($SelectHtml); } + + /*________________________________________________________________________________________________________ Crea la etiqueta html <SELECT> de los repositorios ________________________________________________________________________________________________________*/ -function HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$particion){ +function HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$particion,$masterip){ $SelectHtml=""; $rs=new Recordset; - - $cmd->texto="SELECT nombrerepositorio,ip FROM repositorios"; + $cmd->texto='SELECT nombrerepositorio,ip FROM repositorios where idrepositorio="'.$idrepositorio .'" or ip="'.$masterip.'"'; $rs->Comando=&$cmd; if (!$rs->Abrir()) return($SelectHtml); // Error al abrir recordset @@ -152,8 +180,8 @@ function HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$particion){ if($rs->campos["idrepositorio"]==$idrepositorio) $SelectHtml.=" selected "; $SelectHtml.='>'; $SelectHtml.= $rs->campos["nombrerepositorio"]; - $SelectHtml.='</OPTION>'; - $rs->Siguiente(); + $SelectHtml.='</OPTION>'; + $rs->Siguiente(); } $SelectHtml.= '</SELECT>'; $rs->Cerrar(); @@ -168,7 +196,7 @@ function tablaConfiguraciones($cmd,$idordenador,$idrepositorio) global $TbMsg; $tablaHtml=""; $rs=new Recordset; - $cmd->texto="SELECT ordenadores_particiones.numpar,ordenadores_particiones.codpar,ordenadores_particiones.tamano, + $cmd->texto="SELECT ordenadores.ip AS masterip,ordenadores_particiones.numpar,ordenadores_particiones.codpar,ordenadores_particiones.tamano, ordenadores_particiones.idnombreso,nombresos.nombreso,tipospar.tipopar,tipospar.clonable, imagenes.nombreca,imagenes.descripcion as imagen,perfilessoft.idperfilsoft, perfilessoft.descripcion as perfilsoft,sistemasficheros.descripcion as sistemafichero @@ -199,8 +227,8 @@ function tablaConfiguraciones($cmd,$idordenador,$idrepositorio) $tablaHtml.='<TD align=center> '.'<span style="FONT-SIZE:10px; COLOR: red;" >'.$TbMsg[12].'</span></TD>'.chr(13); else $tablaHtml.='<TD> '.$rs->campos["nombreso"].' </TD>'.chr(13); - $tablaHtml.='<TD>'.HTMLSELECT_imagenes($cmd,$rs->campos["idperfilsoft"],$rs->campos["numpar"]).'</TD>'; - $tablaHtml.='<TD>'.HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$rs->campos["numpar"]).'</TD>'; + $tablaHtml.='<TD>'.HTMLSELECT_imagenes($cmd,$idrepositorio,$rs->campos["idperfilsoft"],$rs->campos["numpar"],$rs->campos["masterip"]).'</TD>'; + $tablaHtml.='<TD>'.HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$rs->campos["numpar"],$rs->campos["masterip"]).'</TD>'; $tablaHtml.='<TD> </TD>'; } $tablaHtml.='</TR>'.chr(13); diff --git a/admin/WebConsole/comandos/RestaurarImagen.php b/admin/WebConsole/comandos/RestaurarImagen.php index 580302d7..318d91ca 100644 --- a/admin/WebConsole/comandos/RestaurarImagen.php +++ b/admin/WebConsole/comandos/RestaurarImagen.php @@ -147,7 +147,7 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"]; // Devuelve: // El código html de la tabla //________________________________________________________________________________________________________ -function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) +function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc,$ambito,$idambito) { global $tbKeys; // Tabla contenedora de claves de configuración global $conKeys; // Contador de claves de configuración @@ -188,12 +188,13 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) //echo'<TD align=rigth> '.formatomiles($tbKeys[$k]["tamano"]).' </TD>'.chr(13); echo'<TD align=center> '.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).' </TD>'.chr(13); - echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true).'</TD>'; - echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,false).'</TD>'; + echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true,$idordenadores,$ambito).'</TD>'; + echo '<TD>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,false,$idordenadores,$ambito).'</TD>'; //Clonación - $metodos="1=UNICAST".chr(13); - $metodos.="2=MULTICAST".chr(13); - $metodos.="3=TORRENT"; + + $metodos="UNICAST=UNICAST".chr(13); + $metodos.=mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST".chr(13); + $metodos.="TORRENT peer:60=TORRENT"; $TBmetodos["UNICAST"]=1; $TBmetodos["MULTICAST"]=2; @@ -210,7 +211,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc) /*________________________________________________________________________________________________________ Crea la etiqueta html <SELECT> de los perfiles softwares ________________________________________________________________________________________________________*/ -function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw) +function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw,$idordenadores,$ambito) { $SelectHtml=""; $cmd->texto="SELECT *,repositorios.ip as iprepositorio FROM imagenes @@ -220,7 +221,19 @@ function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw) else $cmd->texto.= " WHERE imagenes.codpar<>".$codpar; - $cmd->texto.=" AND imagenes.numpar>0 AND imagenes.codpar>0 AND imagenes.idrepositorio>0"; // La imagene debe existir y estar creada + $cmd->texto.=" AND imagenes.numpar>0 AND imagenes.codpar>0 AND imagenes.idrepositorio>0 "; // La imagene debe existir y estar creada + + $idordenador1 = explode(",",$idordenadores); + $idordenador=$idordenador1[0]; + if ($ambito == 16) + $cmd->texto.=" AND repositorios.idrepositorio=(select idrepositorio from ordenadores where ordenadores.idordenador=" .$idordenador .") OR repositorios.ip=(select ip from ordenadores where ordenadores.idordenador=". $idordenador .")"; + else + $cmd->texto.=" AND repositorios.idrepositorio=(select idrepositorio from ordenadores where ordenadores.idordenador=" .$idordenador .")"; + + + + //echo $cmd->texto; + $rs=new Recordset; $rs->Comando=&$cmd; if($sw) $des=1; else $des=0; @@ -266,4 +279,66 @@ function HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$particion){ $rs->Cerrar(); return($SelectHtml); } + + +function mcast_syntax($cmd,$ambito,$idambito) +{ +//if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; +if ($ambito == 4) +{ +$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas where aulas.idaula=' . $idambito ; +} + +if ($ambito == 8) +{ +$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula where gruposordenadores.idgrupo=' . $idambito ; +} + +if ($ambito == 16) +{ +$cmd->texto='SELECT aulas.pormul,aulas.ipmul,aulas.modomul,aulas.velmul,aulas.modp2p,aulas.timep2p FROM aulas JOIN ordenadores ON ordenadores.idaula=aulas.idaula where ordenadores.idordenador=' . $idambito ; +} + + $rs=new Recordset; + $rs->Comando=&$cmd; +if ($rs->Abrir()){ + $rs->Primero(); + $mcastsyntax.='MULTICAST ' . $rs->campos["pormul"] . ':'; + + $rs->Siguiente(); + switch ($rs->campos["modomul"]) + { + case 1: + $mcastsyntax.="half-duplex:"; + break; + default: + $mcastsyntax.="full-duplex:"; + break; + } + $rs->Siguiente(); + $mcastsyntax.=$rs->campos["ipmul"] . ':'; + + $rs->Siguiente(); + $mcastsyntax.=$rs->campos["velmul"] .'M:'; + + $rs->Cerrar(); + } + $mcastsyntax.="50:"; + $mcastsyntax.="60"; + return($mcastsyntax); +} + + + + + + + + + + + + + + ?> diff --git a/admin/WebConsole/gestores/gestor_pxe.php b/admin/WebConsole/gestores/gestor_pxe.php index f585a9d5..f585a9d5 100755..100644 --- a/admin/WebConsole/gestores/gestor_pxe.php +++ b/admin/WebConsole/gestores/gestor_pxe.php diff --git a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php index a82448f7..790cdf6e 100755..100644 --- a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php +++ b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php @@ -67,14 +67,14 @@ $rs->Primero(); $router=$rs->campos["router"]; $netmask=$rs->campos["netmask"]; $repo=$rs->campos["iprepo"]; - $infohost=" IP=" + $infohost="ip=" . $ip . ":" . $repo .":" . $router . ":" . $netmask .":" . $hostname .":" - . $netiface . ":none repo=" - . $repo; + . $netiface . ":none"; # repo=" + #. $repo; $rs->Cerrar(); ###################obtenemos las variables de red del aula. @@ -84,89 +84,12 @@ $rs->Cerrar(); $macfile="01-" . str_replace(":","-",strtoupper($mac)); $nombre_archivo="/var/lib/tftpboot/menu.lst/" . $macfile; +#controlar optboot -########## Escribimos el fichero mac -if (!$gestion=fopen($nombre_archivo, 'w+')) -{ - echo "No se puede abrir el archivo ($nombre_archivo)"; - return; -} -# cuales son los parametros del menu -fwrite($gestion, "color white/blue black/light-gray \n"); - - -$cmd->texto="SELECT itemboot.label, itemboot.kernel, - itemboot.append, menuboot.timeout, menuboot.prompt, - menuboot.description, menuboot_itemboot.default - From itemboot,menuboot_itemboot,menuboot - WHERE menuboot_itemboot.labelmenu=menuboot.label - AND menuboot_itemboot.labelitem=itemboot.label - AND menuboot.label='" . $optboot . "'"; - -$rs->Comando=&$cmd; -if (!$rs->Abrir()) echo "error"; -$rs->Primero(); -while (!$rs->EOF) -{ - fwrite($gestion, " \n"); - fwrite($gestion, "LABEL " . $rs->campos['label'] . " \n"); - fwrite($gestion, "MENU LABEL " . $rs->campos['label'] . " \n"); - #if ( $rs->campos["default"] == true) - #{ - # fwrite($gestion, "MENU DEFAULT \n"); - #} - - - # set netmask cird para ogclient - $isogclient=substr_count($rs->campos["label"] , "og"); - if ($isogclient > 0) - { - $netmask=$netmask; - $kernel=$rs->campos["kernel"]; - $append=$rs->campos["append"]; - fwrite($gestion,"keeppxe \n"); - fwrite($gestion, $rs->campos["kernel"] . " " . $infohost . " \n"); - fwrite($gestion, $rs->campos["append"] . " \n"); - fwrite($gestion,"savedefault \n"); - fwrite($gestion,"boot \n"); - - # fwrite($gestion,"APPEND keeppxe --config-file='pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /boot/ogvmlinuz; kernel /boot/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on " . $infohost . " ogprotocol=smb og2nd=sqfs ; initrd /boot/oginitrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz ro boot=oginit vga=788 irqpoll acpi=on " . $infohost . " ogprotocol=smb og2nd=sqfs; initrd (pd)/ogclient/oginitrd.img; boot' \n"); - # keeppxe - # kernel (pd)/ogclient/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true IP=172.17.9.204:172.17.9.249:172.17.9.254:255.255.255.0:cte204:eth0:none repo=172.17.9.249 - # initrd (pd)/ogclient/oginitrd.img - # savedault - # boot - - - } - else - { - $netmask=netmask2cidr($netmask); - fwrite($gestion, $rs->campos["kernel"] . $return ); - fwrite($gestion, $rs->campos["append"] . " \n"); - - } - - - - - - # $prompt=$rs->campos["prompt"]; - # $timeout=$rs->campos["timeout"]; - - $rs->Siguiente(); -} -$rs->Cerrar(); - - - - fwrite($gestion, " \n"); - fwrite($gestion, "PROMPT " . $prompt ." \n"); - fwrite($gestion, "TIMEOUT " . $timeout . " \n"); - fwrite($gestion, " \n"); - fclose($gestion); - exec("chown www-data:www-data /var/lib/tftpboot/pxelinux.cfg/". $macfile); - exec("chmod 777 /var/lib/tftpboot/pxelinux.cfg/". $macfile); + #exec("cp /var/lib/tftpboot/menu.lst/templates/". $optboot . " /var/lib/tftpboot/menu.lst/". $macfile); + exec("sed s/INFOHOST/".$infohost."/g /var/lib/tftpboot/menu.lst/templates/" . $optboot . " > /var/lib/tftpboot/menu.lst/" . $macfile); + exec("chown www-data:www-data /var/lib/tftpboot/menu.lst/". $macfile); + exec("chmod 777 /var/lib/tftpboot/menu.lst/". $macfile); diff --git a/admin/WebConsole/gestores/gestor_ubicarordenadores.php b/admin/WebConsole/gestores/gestor_ubicarordenadores.php index 6be815db..2a7c2e35 100755..100644 --- a/admin/WebConsole/gestores/gestor_ubicarordenadores.php +++ b/admin/WebConsole/gestores/gestor_ubicarordenadores.php @@ -57,7 +57,9 @@ else { $cmd->CreaParametro("@grupo",$grupo,0); $cmd->CreaParametro("@hostname",$hostname,0); - $cmd->texto="update ordenadores set grupoid=(Select idgrupo from gruposordenadores where nombregrupoordenador=@grupo) where nombreordenador=@hostname"; + #$cmd->texto="update ordenadores set grupoid=(Select idgrupo from gruposordenadores where nombregrupoordenador=@grupo) where nombreordenador=@hostname"; + $cmd->texto="update ordenadores set grupoid=@grupo where nombreordenador=@hostname"; + } $cmd->Ejecutar(); #Update ordenadores Set grupoid=(Select idgrupo From gruposordenadores Where nombregrupoordenador="subgrupo1") where nombreordenador="prueba1" diff --git a/admin/WebConsole/idiomas/javascripts/esp/propiedades_imagenes_esp.js b/admin/WebConsole/idiomas/javascripts/esp/propiedades_imagenes_esp.js index 5e30cfe2..7deec9a3 100644 --- a/admin/WebConsole/idiomas/javascripts/esp/propiedades_imagenes_esp.js +++ b/admin/WebConsole/idiomas/javascripts/esp/propiedades_imagenes_esp.js @@ -7,4 +7,8 @@ TbMsg=new Array; TbMsg[0]="Debe introducir un nombre para esta imagen"; TbMsg[1]="La imagen debe contener al menos un perflil software"; TbMsg[2]="ATENCIÓN: Hay ordenadores con esta imagen en alguna de sus particiones. ¿ Está seguro ?"; -TbMsg[3]="Debe introducir un nombre canónico para esta imagen"; +TbMsg[3]="nombre canónico fichero-imagen no puede contener valores no alfanumericos"; +TbMsg[4]="Falta numero de particion"; +TbMsg[5]="Falta el tipo de la particion"; +TbMsg[6]="Falta el repositorio"; +TbMsg[7]="Falta un comentario";
\ No newline at end of file diff --git a/admin/WebConsole/idiomas/php/cat/menucliente_cat.php b/admin/WebConsole/idiomas/php/cat/menucliente_cat.php new file mode 100644 index 00000000..569e45f8 --- /dev/null +++ b/admin/WebConsole/idiomas/php/cat/menucliente_cat.php @@ -0,0 +1,12 @@ +<? +//________________________________________________________________________________________________________ +// +// Fichero de idiomas php: menuscliente_esp.php +// Idioma: Español +//________________________________________________________________________________________________________ + $TbMsg=array(); + $TbMsg[0]='"***ATENCIÓ.- No està accedint des d'un ordinador permès"'; + $TbMsg[1]='"Direcció IP"'; + $TbMsg[2]='"NO S'HA DETECTAT CAP MENÚ PER AQUEST CLIENT"'; + $TbMsg[3]='"Apagar l'equip"'; +?> diff --git a/admin/WebConsole/idiomas/php/eng/menucliente_eng.php b/admin/WebConsole/idiomas/php/eng/menucliente_eng.php new file mode 100644 index 00000000..ae30c78d --- /dev/null +++ b/admin/WebConsole/idiomas/php/eng/menucliente_eng.php @@ -0,0 +1,12 @@ +<? +//________________________________________________________________________________________________________ +// +// Fichero de idiomas php: menuscliente_esp.php +// Idioma: Español +//________________________________________________________________________________________________________ + $TbMsg=array(); + $TbMsg[0]='"***WARNING.- You are accessing from a computer not allowed"'; + $TbMsg[1]='"IP Address"'; + $TbMsg[2]='"NOT DETECTED ANY MENU FOR THIS CLIENT"'; + $TbMsg[3]='"Shut down the computer"'; +?> diff --git a/admin/WebConsole/idiomas/php/esp/menucliente_esp.php b/admin/WebConsole/idiomas/php/esp/menucliente_esp.php new file mode 100644 index 00000000..6dd541c0 --- /dev/null +++ b/admin/WebConsole/idiomas/php/esp/menucliente_esp.php @@ -0,0 +1,12 @@ +<? +//________________________________________________________________________________________________________ +// +// Fichero de idiomas php: menuscliente_esp.php +// Idioma: Español +//________________________________________________________________________________________________________ + $TbMsg=array(); + $TbMsg[0]='"***ATENCIÓN.- Usted no está accediendo desde un ordenador permitido"'; + $TbMsg[1]='"Dirección IP"'; + $TbMsg[2]='"NO SE HA DETECTADO NINGÚN MENÚ PARA ESTE CLIENTE"'; + $TbMsg[3]='"Apagar el equipo"'; +?> diff --git a/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php b/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php index e8308253..e38ebbb0 100644 --- a/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php +++ b/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php @@ -30,6 +30,9 @@ $TbMsg=array(); $TbMsg[20]='ATENCIÓN, ha habido algún error en el proceso de Inventario Software'; $TbMsg[21]='El proceso de jecuación del script bash ha terminado correctamente'; $TbMsg[22]='ATENCIÓN, ha habido algún error en el proceso de ejecución del script bash'; + $TbMsg[23]='ATENCIÓN'; + $TbMsg[24]='NO UTILICE NI APAGUE ESTE ORDENADOR.'; + ?> diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php index 30ee490e..c4a5b844 100644 --- a/admin/WebConsole/includes/ConfiguracionesParticiones.php +++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php @@ -255,7 +255,7 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr) echo '</TD></TR>'; //Muestra particiones y configuración - echo pintaParticiones($cmd,$rs->campos["configuraciones"],$rs->campos["idordenadores"],$cc); + echo pintaParticiones($cmd,$rs->campos["configuraciones"],$rs->campos["idordenadores"],$cc,$ambito,$idambito); $rs->Siguiente(); } echo "</TABLE>"; diff --git a/admin/WebConsole/jscripts/propiedades_imagenes.js b/admin/WebConsole/jscripts/propiedades_imagenes.js index dc1ac94e..2cecc566 100644 --- a/admin/WebConsole/jscripts/propiedades_imagenes.js +++ b/admin/WebConsole/jscripts/propiedades_imagenes.js @@ -74,23 +74,23 @@ function confirmar(op){ // Comprobar_datos //________________________________________________________________________________________________________ function comprobar_datos(){ - if (document.fdatos.nombreca.value=="") { - alert(TbMsg[3]); - document.fdatos.nombreca.focus(); - return(false); + function validate (field, validator, msgi) { + if (!validator (field.value)) { + alert(TbMsg[msgi]); + validation_highlight (field); + return false; + } + return true; } - if (document.fdatos.descripcion.value=="") { - alert(TbMsg[0]); - document.fdatos.descripcion.focus(); - return(false); - } - /* - var p=document.fdatos.idperfilsoft.selectedIndex - if (p==0){ - alert(TbMsg[1]) - document.forms.fdatos.idperfilsoft.focus() - return(false) - } - */ + + + var form = document.fdatos; + return validate (form.nombreca, validate_nameimagefile, 3) && + validate (form.nombreca, validate_notnull, 3) && + validate (form.descripcion, validate_notnull, 0) && + validate (form.numpar, validate_notnull, 4) && + validate (form.codpar, validate_notnull, 5) && + validate (form.idrepositorio, validate_notnull, 6); + return(true); } diff --git a/admin/WebConsole/jscripts/validators.js b/admin/WebConsole/jscripts/validators.js index 4fc91c75..e0359505 100644 --- a/admin/WebConsole/jscripts/validators.js +++ b/admin/WebConsole/jscripts/validators.js @@ -51,6 +51,9 @@ function validate_ipadress_notnull(value) { return validate_ipadress(value) && validate_notnull(value); } +function validate_nameimagefile(value) { + return validate_expr(value, "^[0-9a-zA-Z]*$"); +} function validation_highlight(field) { diff --git a/admin/WebConsole/principal/aulas.php b/admin/WebConsole/principal/aulas.php index 8cf19824..071ddf44 100644 --- a/admin/WebConsole/principal/aulas.php +++ b/admin/WebConsole/principal/aulas.php @@ -375,11 +375,6 @@ function ContextualXMLGruposAulas(){ $layerXML.=' textoitem='.$TbMsg[6]; $layerXML.='></ITEM>'; - $layerXML.='<ITEM'; - $layerXML.=' subflotante="flo_netboot"'; - $layerXML.=' imgitem="../images/iconos/ordenadores.gif"'; - $layerXML.=' textoitem="NetBoot Gestion"'; - $layerXML.='></ITEM>'; $layerXML.='<SEPARADOR>'; $layerXML.='</SEPARADOR>'; diff --git a/admin/WebConsole/principal/boot_grub4dos.php b/admin/WebConsole/principal/boot_grub4dos.php new file mode 100644 index 00000000..14e9f1f9 --- /dev/null +++ b/admin/WebConsole/principal/boot_grub4dos.php @@ -0,0 +1,217 @@ +<html> +<TITLE>Administración web de aulas</TITLE> +<head> +<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> + <LINK rel="stylesheet" type="text/css" href="../estilos.css"> + <SCRIPT language="javascript" src="../jscripts/propiedades_aulas.js"></SCRIPT> + <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT> + <SCRIPT language="javascript" src="../idiomas/javascripts/esp/propiedades_aulas_esp.js"></SCRIPT></HEAD> + +<script language="javascript" type="text/javascript"> + +function move(fbox, tbox) { + var arrFbox = new Array(); + var arrTbox = new Array(); + var arrLookup = new Array(); + var i; + for (i = 0; i < tbox.options.length; i++) { + arrLookup[tbox.options[i].text] = tbox.options[i].value; + arrTbox[i] = tbox.options[i].text; + } + var fLength = 0; + var tLength = arrTbox.length; + for(i = 0; i < fbox.options.length; i++) { + arrLookup[fbox.options[i].text] = fbox.options[i].value; + if (fbox.options[i].selected && fbox.options[i].value != "") { + arrTbox[tLength] = fbox.options[i].text; + tLength++; + } + else { + arrFbox[fLength] = fbox.options[i].text; + fLength++; + } + } + arrFbox.sort(); + arrTbox.sort(); + fbox.length = 0; + tbox.length = 0; + var c; + +for(c = 0; c < arrFbox.length; c++) { +var no = new Option(); +no.value = arrLookup[arrFbox[c]]; +no.text = arrFbox[c]; +fbox[c] = no; +} + +for(c = 0; c < arrTbox.length; c++) { +var no = new Option(); +no.value = arrLookup[arrTbox[c]]; +no.text = arrTbox[c]; +tbox[c] = no; + } +} + +function allSelect() +{ +var saveString = ""; +// seleccionamos cada uno de los select +var input = document.getElementsByTagName('select'); +//alert(input.length); +for(var i=0; i<input.length; i++){ +//if(inputs[i].getAttribute('type')=='button'){ +// your statements +patron = "L"; +parm = input[i].name; +//alert(parm); +parm = parm.replace(patron,''); +//alert(parm); +for (j=0;j<input[i].length;j++) + { + //List.options[i].selected = true; + saveString = saveString + parm + '|' + input[i].options[j].value + ';'; + //alert(saveString); + } +} +document.forms['myForm'].listOfItems.value = saveString; +} + + +</script> +</head> +<body> + +<?php +include_once("../includes/ctrlacc.php"); +include_once("../clases/AdoPhp.php"); +include_once("../clases/XmlPhp.php"); +include_once("../clases/MenuContextual.php"); +include_once("../clases/SockHidra.php"); +include_once("../includes/constantes.php"); +include_once("../includes/comunes.php"); +include_once("../includes/CreaComando.php"); +include_once("../idiomas/php/".$idioma."/aulas_".$idioma.".php"); + +$cmd=CreaComando($cadenaconexion); +if (!$cmd) + Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D. +//________________________________________________________________________________________________________ + +$litambito=0; +$idambito=0; +$nombreambito=""; + + +if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; // Recoge parametros +if (isset($_GET["idambito"])) $idambito=$_GET["idambito"]; +if (isset($_GET["nombreambito"])) $nombreambito=$_GET["nombreambito"]; + + +switch($litambito){ + case "aulas": + $seleccion="and idaula=" . $idambito .""; + break; + case "gruposordenadores": + $seleccion= "and grupoid=" . $idambito . ""; + break; +} +?> + +<TABLE align=center border=1 cellPadding=1 cellSpacing=1 class=tabla_datos > +<form name="myForm" method="post" action="../gestores/gestor_pxe_grub4dos.php?idaula=<?php echo $idambito ?>&nombreambito=<?php echo $nombreambito?>&litambito=<?php echo $litambito?>" > + + + <P align=center class=cabeceras>Gestión Arranque Avanzado<BR> + <SPAN align=center class=subcabeceras> <?php echo $nombreambito; ?> </SPAN> + <input type="submit" value="GUARDAR" name="saveButton" onclick="allSelect()"> </P> + + + + + + +<input type="hidden" name="listOfItems" value=""> +<?php +echo "<input type='hidden' name='rungrupo' value='" . $_GET['id_aula'] . "'>"; +?> + + +<!-- primer file, nombre de las equipos por pxe hace falta <td> </td>--> +<tr> +<td> + <!-- <a href="./muestramenu.php?labelmenu=pxe"> OGclient </a><br> pxe <br> --> +OGclient <br> +<select multiple size="30" name="Lpxe" id="Lpxe" style="width:100"> + +<?php +#### listado de equipos con menu pxe +$menupxe=pxe; +$listadopxe=listaequipos($cmd,$menupxe,$seleccion); +echo $listadopxe; +?> +</select> +</td> + + +<?php + +$cmd->texto="SELECT * FROM menuboot where label <> 'pxe' "; +$rsmenu=new Recordset; +$rsmenu->Comando=&$cmd; +if (!$rsmenu->Abrir()) echo "error"; +$rsmenu->Primero(); +while (!$rsmenu->EOF) +{ + echo "<td></td>"; + echo "<td> "; + echo $rsmenu->campos['description']; + #echo "<a href='./muestramenu.php?labelmenu=" . $rsmenu->campos['label'] ."'> " . $rsmenu->campos['description'] . " </a> <br>". $rs->campos['label'] . "<br>"; + echo " <br>"; + echo "<input type='button' onClick='move(this.form.L" . $rsmenu->campos['label'] . ",this.form.Lpxe)' value='OUT' style='height: 25px; width: 50px' >"; + echo "<input type='button' onClick='move(this.form.Lpxe,this.form.L" . $rsmenu->campos['label'] .")' value='IN' style='height: 25px; width: 35px' >"; + echo " <br>"; + echo "<select multiple size='30' name='L" . $rsmenu->campos['label'] . "' style='width:100'>"; + $listadopxe=""; + $listadopxe=listaequipos($cmd,$rsmenu->campos['label'],$seleccion); + echo $listadopxe; + echo "</select>"; + echo "</td>"; + $rsmenu->Siguiente(); +} +$rsmenu->Cerrar(); + + + + + + + +// esta funcion genera los elementos de un select(formulario html) donde aparecen los nombres de los ordenadores, según su menu pxe +function listaequipos($cmd,$menupxe,$seleccion) +{ +$cmd->texto="SELECT * FROM ordenadores where arranque='" . $menupxe ."' " . $seleccion; +$rs=new Recordset; +$rs->Comando=&$cmd; +if (!$rs->Abrir()) echo "error"; +$rs->Primero(); +while (!$rs->EOF) +{ + echo "<option value='"; + echo $rs->campos["nombreordenador"]; + echo "'>"; + echo $rs->campos["nombreordenador"]; + echo "</option>"; + $rs->Siguiente(); +} +$rs->Cerrar(); +} + +?> + +</tr> + +</form> +</table> + +</body> +</html> diff --git a/admin/WebConsole/principal/ubicarordenadores.php b/admin/WebConsole/principal/ubicarordenadores.php index f5efb099..e3facc7d 100644 --- a/admin/WebConsole/principal/ubicarordenadores.php +++ b/admin/WebConsole/principal/ubicarordenadores.php @@ -191,10 +191,10 @@ while (!$rsmenu->EOF) echo "<td> "; echo $rsmenu->campos['nombregrupoordenador']; echo " <br>"; - echo "<input type='button' onClick='move(this.form.L" . $rsmenu->campos['nombregrupoordenador'] . ",this.form.Lpxe)' value='OUT' style='height: 25px; width: 50px' >"; - echo "<input type='button' onClick='move(this.form.Lpxe,this.form.L" . $rsmenu->campos['nombregrupoordenador'] .")' value='IN' style='height: 25px; width: 35px' >"; + echo "<input type='button' onClick='move(this.form.L" . $rsmenu->campos['idgrupo'] . ",this.form.Lpxe)' value='OUT' style='height: 25px; width: 50px' >"; + echo "<input type='button' onClick='move(this.form.Lpxe,this.form.L" . $rsmenu->campos['idgrupo'] .")' value='IN' style='height: 25px; width: 35px' >"; echo " <br>"; - echo "<select multiple size='30' name='L" . $rsmenu->campos['nombregrupoordenador'] . "' style='width:100'>"; + echo "<select multiple size='30' name='L" . $rsmenu->campos['idgrupo'] . "' style='width:100'>"; $listadogrupo=""; #$listadogrupo=listaequipos($cmd,$rsmenu->campos['idgrupo'],$seleccion); $listadogrupo=ListaEquiposGrupo($cmd,$rsmenu->campos['idaula'],$rsmenu->campos['idgrupo']); diff --git a/admin/WebConsole/propiedades/propiedades_imagenes.php b/admin/WebConsole/propiedades/propiedades_imagenes.php index c2c686e2..35f5412c 100644 --- a/admin/WebConsole/propiedades/propiedades_imagenes.php +++ b/admin/WebConsole/propiedades/propiedades_imagenes.php @@ -45,6 +45,7 @@ if ($opcion!=$op_alta){ <HEAD> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <LINK rel="stylesheet" type="text/css" href="../estilos.css"> + <SCRIPT language="javascript" src="../jscripts/validators.js"></SCRIPT> <SCRIPT language="javascript" src="../jscripts/propiedades_imagenes.js"></SCRIPT> <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT> <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_imagenes_'.$idioma.'.js"></SCRIPT>'?> diff --git a/admin/WebConsole/varios/menucliente.php b/admin/WebConsole/varios/menucliente.php index a6a9735d..07abcfeb 100644 --- a/admin/WebConsole/varios/menucliente.php +++ b/admin/WebConsole/varios/menucliente.php @@ -12,6 +12,7 @@ include_once("../includes/ctrlacc.php"); include_once("../clases/AdoPhp.php"); include_once("../includes/TomaDato.php"); include_once("../includes/CreaComando.php"); +include_once("../idiomas/php/".$idioma."/menucliente".$idioma.".php"); //________________________________________________________________________________________________________ $cmd=CreaComando($cadenaconexion); if (!$cmd) @@ -25,7 +26,7 @@ if (isset($_GET["tip"])) $tip=$_GET["tip"]; $iph=tomaIP(); if(empty($iph)) - die("***ATENCION.- Usted no esta accediendo desde un ordenador permitido: Dirección IP=".$iph); + die($TbMsg[0].": ".$TbMsg[1]."=".$iph); $UrlPagina=$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; // Url página $UrlPagina=dirname($UrlPagina); @@ -62,11 +63,9 @@ if(!empty($rsmenu)){ } else{ $codeHtml='<div align="center" style="font-family: Arial, Helvetica, sans-serif;">'; - $codeHtml.='<p style="color:#999999; font-size: 16px; margin: 2em;">'; - $codeHtml.=' NO SE HA DETECTADO NINGÚN MENÚ PARA ESTE CLIENTE'; - $codeHtml.='</p>'; + $codeHtml.='<p style="color:#999999; font-size: 16px; margin: 2em;">'.$TbMsg[2].'</p>'; $codeHtml.='<p style="font-size: 14px; margin: 2em;">'; - $codeHtml.=' <a href="command:poweroff">Apagar el equipo</a>'; + $codeHtml.=' <a href="command:poweroff">'.$TbMsg[3].'</a>'; $codeHtml.='</p>'; $codeHtml.='</div>'; } @@ -84,8 +83,9 @@ else{ } else{ echo'<BODY bgcolor=white background="../images/iconos/fondo800x600.png">'; - echo '<P align=left><IMG border=0 src="../images/iconos/logoopengnsys.png"><P>'; + #echo '<P align=left><IMG border=0 src="../images/iconos/logoopengnsys.png"><P>'; } + include_once("/opt/opengnsys/log/clients/".$iph.".info.html"); echo $codeHtml; ?> </BODY> diff --git a/admin/WebConsole/varios/msgbrowser.php b/admin/WebConsole/varios/msgbrowser.php index e2a28a90..658f2a86 100644 --- a/admin/WebConsole/varios/msgbrowser.php +++ b/admin/WebConsole/varios/msgbrowser.php @@ -67,6 +67,7 @@ else <BODY> <? if(empty($idx) && empty($msg)) { + // No hay operaciones realizandose echo '<BR><BR><BR><BR><BR>'; echo '<TABLE cellspacing=0 cellpadding=2 align=center border=0>'; echo '<TR><TD align=center><IMG border=0 src="../images/iconos/logoopengnsys.png"></TD></TR>'; @@ -75,6 +76,9 @@ if(empty($idx) && empty($msg)) { echo '</TABLE>'; } else{ + // Se está realizando una operacion + echo '<h1>' . $TbMsg[23] . ' </h1>'; + echo '<h1>' . $TbMsg[24] . ' </h1>'; echo '<BR><BR><BR>'; echo '<TABLE cellspacing=0 cellpadding=2 align=center border=0>'; echo '<TR><TD align=center class="tdbarra">Opengnsys Browser Message</TD><TR>'; diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks b/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks index 51f452ff..67f807ab 100755 --- a/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks +++ b/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks @@ -43,6 +43,8 @@ mkdir -p ${DESTDIR}/boot; copy_exec /bin/bash-static /bin/bash copy_exec /usr/bin/unionfs-fuse copy_exec /sbin/mount.cifs +copy_exec /sbin/mount.smbfs +copy_exec /bin/lsmod # Insert OpenGnsys Engine @@ -54,5 +56,7 @@ manual_add_modules cifs manual_add_modules smbfs manual_add_modules atl1e manual_add_modules squashfs +manual_add_modules md4 + diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions index ef6f00c8..16539dd6 100644 --- a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions +++ b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions @@ -20,25 +20,31 @@ return 0 ogExportVarEnvironment () { - #puntos de accesos al servidor ogprotocol=nfs - export NFSROOTBOOT="/var/lib/tftpboot" - export NFSCLIENTDIR="/opt/opengnsys/client" - export NFSLOGDIR="/opt/opengnsys/log/clients" - export NFSIMGDIR="/opt/opengnsys/images" - #puntos de accesos al servidor ogprotocol=smb - export SMBROOTBOOT="tftpboot" - export SMBCLIENTDIR="ogclient" - export SMBLOGDIR="oglog" - export SMBIMGDIR="ogimages" - - #puntos de montaje local ram o cache - export LOCALCLIENTDIR="/opt/opengnsys" - export LOCALLOGDIR="/opt/opengnsys/log" - export LOCALIMGDIR="/opt/opengnsys/images" - export LOCALROOTBOOT="/opt/og2fs/tftpboot" #punto de montaje del contendor tftpboot - export LOCALROOTIMG="/opt/og2fs/2ndfs" #punto de montaje donde se accede al 2nd FS mediante loop - export LOCALROOTRAM="/opt/og2fs/1stfs" #punto de montaje para unionfs - export LOCALROOTUNION="/opt/og2fs/unionfs" #punto de union entreo LOCALROOTIMG y LOCALROOTRAM + export CFGINITRD="/tmp/initrd.cfg" + echo "puntos de accesos al servidor ogprotocol=nfs" >> $CFGINITRD + export NFSROOTBOOT="/var/lib/tftpboot" && echo "NFSROOTBOOT=$NFSROOTBOOT" >> $CFGINITRD + export NFSCLIENTDIR="/opt/opengnsys/client" && echo "NFSCLIENDIR=$NFSCLIENTDIR" >> $CFGINITRD + export NFSLOGDIR="/opt/opengnsys/log/clients" && echo "NFSLOGDIR=$NFSLOGDIR" >> $CFGINITRD + export NFSIMGDIR="/opt/opengnsys/images" && echo "NFSIMGDIR=$NFSIMGDIR" >> $CFGINITRD + echo "puntos de accesos al servidor ogprotocol=smb" >> $CFGINITRD + export SMBROOTBOOT="tftpboot" && echo "SMBROOTBOOT=$SMBROOTBOOT" >> $CFGINITRD + export SMBCLIENTDIR="ogclient" && echo "SMBCLIENTDIR=$SMBCLIENTDIR" >> $CFGINITRD + export SMBLOGDIR="oglog" && echo "SMBLOGDIR=$SMBLOGDIR" >> $CFGINITRD + export SMBIMGDIR="ogimages" && echo "SMBIMGDIR=$SMBIMGDIR" >> $CFGINITRD + + echo "puntos de montaje local para los contenedores" >> $CFGINITRD + export LOCALROOTBOOT="/opt/og2fs/tftpboot" && echo "LOCALROOTBOOT=$LOCALROOTBOOT" >> $CFGINITRD + export LOCALCLIENTDIR="/opt/opengnsys" && echo "LOCALCLIENTDIR=$LOCALCLIENTDIR" >> $CFGINITRD + export LOCALLOGDIR="/opt/opengnsys/log" && echo "LOCALLOGDIR=$LOCALLOGDIR" >> $CFGINITRD + export LOCALIMGDIR="/opt/opengnsys/images" && echo "LOCALIMGDIR=$LOCALIMGDIR" >> $CFGINITRD + + echo "puntos de montajes para realizar la integración unionfs entre el initrd y el sistema root" >> $CFGINITRD + #punto de montaje donde se accede al 2nd FS mediante loop + export LOCALROOTIMG="/opt/og2fs/2ndfs" && echo "LOCALROOTIMG=$LOCALROOTIMG" >> $CFGINITRD + #punto de montaje para unionfs + export LOCALROOTRAM="/opt/og2fs/1stfs" && echo "LOCALROOTRAM=$LOCALROOTRAM" >> $CFGINITRD + #punto de union entreo LOCALROOTIMG y LOCALROOTRAM + export LOCALROOTUNION="/opt/og2fs/unionfs" && echo "LOCALROOTUNION=$LOCALROOTUNION" >> $CFGINITRD ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES. #ogGetROOTSERVER() ip del servidor pxe, valor obtenido automaticamente desde dhcpd. #IPV4DDR @@ -92,6 +98,14 @@ ogPostConfigureFS() echo "link-local 169.254.0.0" >> /etc/networks echo "localnet $NETIP" >> /etc/networks #route + + #enlace si iniciamos desde ogprotocolo=local { cdrom, usb, cache } . + # monta el raiz del dispositivo local en /opt/og2fs/tftpboot - acceso al fichero .sqfs + # y monta el sistema root sqfs en /opt/og2fs/2ndfs + [ "$LOCALMEDIA" == "CACHE" ] && ln -s /opt/og2fs/tftpboot /opt/opengnsys/cache + [ "$ogprotocol" == "local" ] && ln -s /opt/og2fs/2ndfs/opt/opengnsys/* /opt/opengnsys/ + + } @@ -120,6 +134,7 @@ ogGetROOTSERVER () fi fi export ROOTSERVER + echo "ROOTSERVER=$ROOTSERVER" >> $CFGINITRD return 0 } @@ -136,10 +151,15 @@ else fi case "$ogprotocol" in - cdrom) - echo "Montar imagen de CD-ROM" - blkid /dev/s* - mount -t iso9660 LABEL=ogClient $LOCALROOTBOOT + local) + echo "Montar imagen del sistema root desde dispositivo local" + for i in $(blkid /dev/s* | grep ogClient | awk -F: '{print $2}' | tr -d \"); do export $i; done + mount -t $TYPE LABEL=$LABEL $LOCALROOTBOOT + if [ $? != 0 ] + then + mount -t reiserfs LABEL=CACHE $LOCALROOTBOOT + export LOCALMEDIA=CACHE + fi ;; httfs) echo "protocolo httfs aun no soportado" @@ -240,77 +260,104 @@ ifconfig lo 127.0.0.1 ogconfigure_networking() { -IP=$IPOPTS -# http://paste.ubuntu.com/427631/ Paste from yofel at Tue, 4 May 2010 13:49:56 +0000 - if [ -n "${BOOTIF}" ]; then - # pxelinux sets BOOTIF to a value based on the mac address of the - # network card used to PXE boot, so use this value for DEVICE rather - # than a hard-coded device name from initramfs.conf. this facilitates - # network booting when machines may have multiple network cards. - # pxelinux sets BOOTIF to 01-$mac_address - - # strip off the leading "01-", which isn't part of the mac - # address - temp_mac=${BOOTIF#*-} - - # convert to typical mac address format by replacing "-" with ":" - bootif_mac="" - IFS='-' - for x in $temp_mac ; do - if [ -z "$bootif_mac" ]; then - bootif_mac="$x" - else - bootif_mac="$x:$bootif_mac" - fi - done - unset IFS - - # look for devices with matching mac address, and set DEVICE to - # appropriate value if match is found. - for device in /sys/class/net/* ; do - if [ -f "$device/address" ]; then - current_mac=$(cat "$device/address") - if [ "$bootif_mac" = "$current_mac" ]; then - DEVICE=${device##*/} - break - fi - fi - done +#echo "ogconfigure_networking: Buscando interfaz a configurar DEVICE" +if [ -n "${BOOTIF}" ] +then + #echo " variable BOOTIF exportada con pxelinux.0 con valor $BOOTIF" + IP=$IPOPTS + temp_mac=${BOOTIF#*-} + # convert to typical mac address format by replacing "-" with ":" + bootif_mac="" + IFS='-' + for x in $temp_mac ; do + if [ -z "$bootif_mac" ]; then + bootif_mac="$x" + else + bootif_mac="$x:$bootif_mac" fi + done + unset IFS + # look for devices with matching mac address, and set DEVICE to + # appropriate value if match is found. + for device in /sys/class/net/* ; do + if [ -f "$device/address" ]; then + current_mac=$(cat "$device/address") + if [ "$bootif_mac" = "$current_mac" ]; then + DEVICE=${device##*/} + break + fi + fi + done +else + #echo "variable BOOTIF no exportada, intentamos detectar que interfaz se ha iniciado" + IP=$ip + #TODO Detectar que interfaz se ha iniciado + case ${IP} in + none|off) + return 0 + ;; + ""|on|any) + # Bring up device + DEVICE=eth0 + ;; + dhcp|bootp|rarp|both) + DEVICE=eth0 + ;; + *) + DEVICE=`echo $IP | cut -f6 -d:` + ;; + esac +fi +if [ -z "${DEVICE}" ]; then + echo "variable DEVICE con valor $DEVICE no encontrada, llamamos de nuevo a ogconfigure_networking" + ogconfigure_networking +fi - # networking already configured thus bail out - [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 - - # support ip options see linux sources - # Documentation/filesystems/nfsroot.txt - # Documentation/frv/booting.txt - - for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do - - # The NIC is to be configured if this file does not exist. - # Ip-Config tries to create this file and when it succeds - # creating the file, ipconfig is not run again. - if [ -e /tmp/net-"${DEVICE}".conf ]; then - break; - fi +[ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0 +#if [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ]; then +# echo "variable DEVICE con valor $DEVICE y fichero /tmp/net-$DEVICE encontrados" +# return 0 +#else +# echo "variable DEVICE con valor $DEVICE encontrada, procedemos a configurala y a crear el fichero /tmp/net-$DEVICE" +#fi + +# Activamos la interfaz antes de configurar. +ip address flush $DEVICE +ip link set dev $DEVICE up +# Si no se detecta señal portadora volver a configurar. +sleep 1 +CARRIER=$(cat /sys/class/net/${DEVICE}/carrier) +if [ "$CARRIER" != "1" ] +then + ogconfigure_networking +fi - case ${IP} in - none|off) - # Do nothing - ;; - ""|on|any) +# support ip options see linux sources +# Documentation/filesystems/nfsroot.txt +# Documentation/frv/booting.txt +for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do + # The NIC is to be configured if this file does not exist. + # Ip-Config tries to create this file and when it succeds + # creating the file, ipconfig is not run again. + if [ -e /tmp/net-"${DEVICE}".conf ]; then + break; + fi + case ${IP} in + none|off) + return 0 + ;; + ""|on|any) # Bring up device - echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " + echo "Setting $DEVICE with option:on|any and Variable IP= $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} " ipconfig -t ${ROUNDTTT} ${DEVICE} - ;; - dhcp|bootp|rarp|both) - echo "Setting $DEVICE with (dhcp) kernel params $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " + ;; + dhcp|bootp|rarp|both) + echo "Setting $DEVICE with option:dhcp|bootp|rarp|both and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} " ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} - ;; - *) - echo "Setting $DEVICE with kernel params $IP: ipconfig -t ${ROUNDTTT} -d $IP " + ;; + *) + echo "Setting $DEVICE with option * and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -d $IP " ipconfig -t ${ROUNDTTT} -d $IP - # grab device entry from ip option NEW_DEVICE=${IP#*:*:*:*:*:*} if [ "${NEW_DEVICE}" != "${IP}" ]; then @@ -322,18 +369,23 @@ IP=$IPOPTS if [ -n "${NEW_DEVICE}" ]; then DEVICE="${NEW_DEVICE}" fi - ;; - esac - done - - # source ipconfig output - if [ -n "${DEVICE}" ]; then - # source specific bootdevice - . /tmp/net-${DEVICE}.conf - else - # source any interface as not exaclty specified - . /tmp/net-*.conf - fi + ;; + esac +done + +# source ipconfig output +if [ -n "${DEVICE}" ]; then + . /tmp/net-${DEVICE}.conf + DEVICECFG="/tmp/net-${DEVICE}" + export DEVICECFG + export DEVICE + echo "DEVICE=$DEVICE" >> $CFGINITRD + echo "DEVICECFG=$DEVICECFG" >> $CFGINITRD + echo "exportando variable DEVICE con valor = $DEVICE y el DEVICECFG con valor $DEVICECFG" +else + # source any interface as not exaclty specified + . /tmp/net-*.conf +fi } ##################################################################### diff --git a/client/boot-tools/clientstructure/etc/ssh/sshd_config b/client/boot-tools/clientstructure/etc/ssh/sshd_config index ea0303b3..80900684 100644 --- a/client/boot-tools/clientstructure/etc/ssh/sshd_config +++ b/client/boot-tools/clientstructure/etc/ssh/sshd_config @@ -11,7 +11,7 @@ Protocol 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key #Privilege Separation is turned on for security -UsePrivilegeSeparation yes +UsePrivilegeSeparation no # Lifetime and size of ephemeral version 1 server key KeyRegenerationInterval 3600 diff --git a/client/boot-tools/kernelParameterOG.es.txt b/client/boot-tools/kernelParameterOG.es.txt index 4ec96c8a..66d7fcfa 100644 --- a/client/boot-tools/kernelParameterOG.es.txt +++ b/client/boot-tools/kernelParameterOG.es.txt @@ -28,7 +28,10 @@ ip= og2nd=sqfs|img #protocolo de acceso al og2nd. - ogprotocol=smb|nfs + ogprotocol=smb|nfs|local + #local para cdrom, usb a partir de la iso. labelparticionusbUNETBOOTIN=ogClient + #loacl tambien para fichero.sqfs en cache. + # modo de funcionalidad del browser con shell root activa. ogactiveadmin=true|false diff --git a/client/boot-tools/ogClientManager.lib b/client/boot-tools/ogClientManager.lib index 438ee56a..9f56ec4a 100644 --- a/client/boot-tools/ogClientManager.lib +++ b/client/boot-tools/ogClientManager.lib @@ -385,6 +385,117 @@ rm /tmp/id_dsa.pub } + +function ogCrearISO { +apt-get install syslinux genisoimage +#TODO: deb http://free.nchc.org.tw/drbl-core drbl stable +#apt-get install gpxe +mkdir -p /tmp/iso/isolinux +#cd tmp/iso/ +cp -prv /usr/lib/syslinux/* /tmp/iso/isolinux/ +cp -prv /usr/share/gpxe/* /tmp/iso/isolinux/ +mkdir -p /tmp/iso/ogclient +#el ogclienteToISO debe tener una copia del ogvmlinuz como linuxISO +cp -prv /var/lib/tftpboot/ogclientToIso/* /tmp/iso/ogclient + + +cat << FIN > /tmp/iso/isolinux/isolinux.cfg +DEFAULT menu.c32 +PROMPT 0 +ALLOWOPTIONS 1 + +MENU TITLE OpenGnsys 1.0.1 v00 + +LABEL gpxe +MENU LABEL gpxe +KERNEL /clonezilla/live/vmlinuz1 +APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia + + +#default 0 +#prompt 1 +#timeout 100 + +#display mensaje.txt + + + + +LABEL 0 +MENU LABEL ogClient vga irqpool acpi ogdebug ip:none +KERNEL /ogclient/linuxISO +APPEND initrd=/ogclient/oginitrd.img ro vga=788 irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none + +LABEL 1 +MENU LABEL ogClient irqpoll acpi ip:none +KERNEL /ogclient/linuxISO +APPEND initrd=/ogclient/oginitrd.img ro irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=none + +LABEL 2 +MENU LABEL ogClient acpi debug ip=dhcp +KERNEL /ogclient/linuxISO +APPEND initrd=/ogclient/oginitrd.img ro acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=dhcp + +LABEL 3 +MENU LABEL ogClient ip=dhcp +KERNEL /ogclient/linuxISO +APPEND initrd=/ogclient/oginitrd.img ro acpi=off boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=dhcp + + +#LABEL ogclient +#KERNEL /ogclient/linuxISO +#APPEND initrd=/ogclient/initrdISO.img + +#KERNEL linuxISO +#APPEND initrd=initrdISO.img + +LABEL 4 +MENU LABEL local +localboot 0x80 +append - + + +label 5 +MENU LABEL Network boot via gPXE lkrn +KERNEL gpxe.lkrn + +label 5 +MENU LABEL Network boot via gPXE usb +KERNEL gpxe.usb + +label 5 +MENU LABEL Network boot via gPXE pxe +KERNEL gpxe.pxe + +label 5 +MENU LABEL Network boot via gPXE iso +KERNEL gpxe.iso +FIN +#### /tmp/iso# +mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso + +### vi /etc/grub.d/40_custom +## +#menuentry "og cache " { +#set root=(hd0,4) +#linux /ogvmlinuz ro vga=788 irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none +#initrd /oginitrd.img +#} + + +} + +function ogprobarISO { +#/tmp/iso +qemu -m 256 -boot d -cdrom ogClient.iso +} + + + + + + + ogClientConfpxe() { ################## DEJAMOS FICHERO DE EJEMPLOS PARA: diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib index 424bee3a..8731580f 100755 --- a/client/engine/Boot.lib +++ b/client/engine/Boot.lib @@ -68,9 +68,21 @@ case "$TYPE" in [ -z "$LOADER" ] && ogRaiseError $OG_ERR_NOTOS && return $? # Activar la partición y copiar Grub4DOS. ogSetPartitionActive $1 $2 - cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen) - #kexec -l $MNTDIR/grub.exe --append=--config-file="find --set-root /$LOADER; chainloader /$LOADER; tpm --init" - kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init" + #FIXME: activar seguimiento inicio sesion XP con grub4dos + #if `ogGetOsVersion $1 $2 | grep "XP" > /dev/null` + #then + # dd if=/dev/zero of=${MNTDIR}/ogboot.me bs=1024 count=3 + # dd if=/dev/zero of=${MNTDIR}/ogboot.firstboot bs=1024 count=3 + # dd if=/dev/zero of=${MNTDIR}/ogboot.secondboot bs=1024 count=3 + # ogLoadHiveWindows $1 $2 + # ogHiveNTRunMachine "cmd /c del c:\ogboot.* " ogcleanboot + # ogUpdateHiveWindows + # reboot + #else + cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen) + ##kexec -l $MNTDIR/grub.exe --append=--config-file="find --set-root /$LOADER; chainloader /$LOADER; tpm --init" + kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init" + #fi ;; *) ogRaiseError $OG_ERR_PARTITION "$1, $2" return $? @@ -83,54 +95,6 @@ kexec -e #/** -# ogGetRegistryValue path_mountpoint str_registrytype str_valuename -#@brief Devuelve el dato de un valor del registro de Windows. -#@param path_mountpoint directorio donde está montado el sistema Windows -#@param str_registrytype tipo de registro a leer -#@param str_valuename valor de registro -#@return str_valuedata - valor de la clave. -#@exception OG_ERR_FORMAT Formato incorrecto. -#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositivo. -#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. -#@note registrytype = { default, sam, security, software, system, components } -#@warning Requisitos: chntpw, awk -#@warning La partición de Windows debe estar montada previamente. -#@version 0.9 - Adaptación para OpenGNSys. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-09-11 -#*/ ## -function ogGetRegistryValue () -{ -# Variables locales. -local FILE FILENT FILEXP - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_registrytype str_key" - return -fi -# Error si no se reciben 3 parámetros. -[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? - -# Camino del fichero de registro en NT/2000 o XP/Vista/7. -FILENT=$(ogGetPath "/$1/winnt/system32/config/$2") -[ -f $FILENT ] && FILE="$FILENT" -FILEXP=$(ogGetPath "/$1/windows/system32/config/$2") -[ -f $FLEHXP ] && FILE="$FILEXP" -[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $? - -# Devolver el dato del valor de registro. -# /* (comentario Doxygen) -chntpw $FILE << FIN 2>/dev/null | awk '/> Value/ {getline;print $0;}' -cd ${3%\\*} -cat ${3##*\\} -q -FIN -# (comentario Doxygen) */ -} - - -#/** # ogGetWindowsName int_ndisk int_npartition #@brief Muestra el nombre del equipo en el registro de Windows. #@param int_ndisk nº de orden del disco @@ -167,51 +131,6 @@ ogGetRegistryValue $MNTDIR system '\ControlSet001\Control\ComputerName\ComputerN #/** -# ogListRegistryKeys path_mountpoint str_registrytype str_key -#@brief Lista los nombres de claves de una determinada clave del registro de Windows. -#@param path_mountpoint directorio donde está montado el sistema Windows -#@param str_registrytype tipo de registro a leer -#@param str_key clave de registro -#@return str_key ... - lista de claves de registro -#@exception OG_ERR_FORMAT Formato incorrecto. -#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. -#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. -#@note registrytype = { default, sam, security, software, system, components } -#@warning Requisitos: chntpw, awk -#@warning La partición de Windows debe estar montada previamente. -#@version 0.9 - Adaptación para OpenGNSys. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-09-23 -#*/ ## -function ogListRegistryKeys () -{ -# Variables locales. -local FILE FILENT FILEXP - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_registrytype str_key" - return -fi -# Error si no se reciben 3 parámetros. -[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? - -# Camino del fichero de registro en NT/2000 o XP/Vista/7. -FILENT=$(ogGetPath "/$1/winnt/system32/config/$2") -[ -f $FILENT ] && FILE="$FILENT" -FILEXP=$(ogGetPath "/$1/windows/system32/config/$2") -[ -f $FLEHXP ] && FILE="$FILEXP" -[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $? - -# Devolver la lista de claves de registro. -chntpw $FILE << FIN 2>/dev/null | awk 'BEGIN {FS="[<>]"} $1~/^ $/ {print $2}' -ls $3 -q -FIN -} - - -#/** # ogLinuxBootParameters int_ndisk int_npartition #@brief Muestra los parámetros de arranque de un sistema de archivos Linux. #@param int_ndisk nº de orden del disco @@ -273,55 +192,6 @@ awk 'BEGIN {cont=-1;} } - -#/** -# ogSetRegistryValue path_mountpoint str_registrytype str_valuename str_valuedata -#@brief Establece el dato asociado a un valor del registro de Windows. -#@param path_mountpoint directorio donde está montado el sistema Windows -#@param str_registrytype tipo de registro -#@param str_valuename nombre del valor de registro -#@param str_valuedata dato del valor de registro -#@return (nada) -#@exception OG_ERR_FORMAT Formato incorrecto. -#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositivo. -#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. -#@note registrytype = { default, sam, security, software, system, components } -#@warning Requisitos: chntpw, awk -#@warning La partición de Windows debe estar montada previamente. -#@version 0.9 - Adaptación para OpenGNSys. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2009-09-24 -#*/ ## -function ogSetRegistryValue () -{ -# Variables locales. -local FILE FILENT FILEXP - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_registrytype str_key" - return -fi -# Error si no se reciben 4 parámetros. -[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $? - -# Camino del fichero de registro en NT/2000 o XP/Vista/7. -FILENT=$(ogGetPath "/$1/winnt/system32/config/$2") -[ -f $FILENT ] && FILE="$FILENT" -FILEXP=$(ogGetPath "/$1/windows/system32/config/$2") -[ -f $FLEHXP ] && FILE="$FILEXP" -[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $? - -# Cambiar el dato del valor de registro. -chntpw $FILE << FIN &>/dev/null -ed $3 -$4 -q -y -FIN -} - - #/** # ogSetWindowsName int_ndisk int_npartition str_name #@brief Establece el nombre del equipo en el registro de Windows. @@ -403,7 +273,7 @@ ogSetRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows NT\CurrentVersion\Winlog #/** -# ogNewMbrXP int_ndisk +# ogBootMbrXP int_ndisk #@brief Genera un nuevo Master Boot Record en el disco duro indicado, compatible con los SO tipo Windows #@param int_ndisk nº de orden del disco #@return salida del programa my-sys @@ -414,7 +284,7 @@ ogSetRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows NT\CurrentVersion\Winlog #@date 2009-09-24 #*/ ## -function ogNewMbrXP () +function ogBootMbrXP () { # Variables locales. local PART @@ -433,3 +303,279 @@ ms-sys -z -f $PART ms-sys -m -f $PART } + +#/** +# ogBootMbrGeneric int_ndisk +#@brief Genera un nuevo Codigo de arranque en el MBR del disco indicado, compatible con los SO tipo Windows, Linux. +#@param int_ndisk nº de orden del disco +#@return salida del programa my-sys +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Tipo de partición desconocido o no se puede montar. +#@version 0.9 - Adaptación a OpenGNSys. +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2009-09-24 +#*/ ## + +function ogBootMbrGeneric () +{ +# Variables locales. +local PART + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk " \ + "$FUNCNAME 1 " + return +fi +# Error si no se reciben 1 parámetros. +[ $# == 1 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) + +PART="$(ogDiskToDev $1)" || return $(ogRaiseError $OG_ERR_NOTFOUND; echo $?) +ms-sys -z -f $PART +ms-sys -s -f $PART +} + + + + +#/** +# ogFixBootSector int_ndisk int_parition +#@brief Corrige el boot sector de una particion activa para MS windows/dos -fat-ntfs +#@param int_ndisk nº de orden del disco +#@param int_partition nº de particion +#@return +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. +#@version 0.9 - Adaptación a OpenGNSys. +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2009-09-24 +#*/ ## + +function ogFixBootSector () +{ +# Variables locales. +local PART DISK FILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition " \ + "$FUNCNAME 1 1 " + return +fi + +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) + +#TODO, solo si la particion existe +#TODO, solo si es ntfs o fat +PARTYPE=$(ogGetPartitionId $1 $2) +case $PARTYPE in + 1|4|6|7|b|c|e|f) + ;; + *) + return $(ogRaiseError $OG_ERR_PARTITION; echo $?) + ;; +esac + +ogUnmount $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?) + +#Preparando instruccion +let DISK=$1-1 +PART=$2 +FILE=/tmp/temporal +cat > $FILE <<EOF +disk=$DISK +main_part=$PART +fix_first_sector=yes +EOF + +spartlnx.run -cui -nm -a -f $FILE + +} + + + +#/** +# ogWindowsBootParameters int_ndisk int_parition +#@brief Configura el gestor de arranque de windows 7 / vista / XP / 2000 +#@param int_ndisk nº de orden del disco +#@param int_partition nº de particion +#@return +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. +#@version 0.9 - Integración desde EAC para OpenGNSys. +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2009-09-24 +#@version 1.0.1 - Adapatacion para OpenGnsys. +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2011-05-20 +#*/ ## + + +function ogWindowsBootParameters () +{ +# Variables locales. +local PART DISK FILE +#Preparando variables adaptadas a sintaxis windows. +let DISK=$1-1 +PART=$2 +FILE=/tmp/temporal + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition " \ + "$FUNCNAME 1 1 " + return +fi + +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) + +ogDiskToDev $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?) + +VERSION=$(ogGetOsVersion $1 $2) + +if echo "$VERSION" | grep "Windows 7" +then + WINVER="Windows 7" +elif echo "$VERSION" | grep "Windows Seven" +then + WINVER="Windows Vista" +elif echo "$VERSION" | grep "XP" +then + MOUNT=$(ogMount $1 $2) + [ -f ${MOUNT}/boot.ini ] || return $(ogRaiseError $OG_ERR_NOTOS; echo $?) + cat ${MOUNT}/boot.ini | sed s/partition\([0-9]\)/partition\($PART\)/g | sed s/rdisk\([0-9]\)/rdisk\($DISK\)/g > ${MOUNT}/tmp.boot.ini; mv ${MOUNT}/tmp.boot.ini ${MOUNT}/boot.ini + return 0 +else + return $(ogRaiseError $OG_ERR_NOTOS; echo $?) +fi + +ogUnmount $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?) + + +#Preparando instruccion Windows Resume Application +cat > $FILE <<EOF +boot_disk=$DISK +boot_main_part=$PART +disk=$DISK +main_part=$PART +boot_entry=Windows Resume Application +EOF +spartlnx.run -cui -nm -w -f $FILE + +#Preparando instruccion tipo windows +cat > $FILE <<EOF +boot_disk=$DISK +boot_main_part=$PART +disk=$DISK +main_part=$PART +boot_entry=$WINVER +EOF +spartlnx.run -cui -nm -w -f $FILE + +##Preparando instruccion Ramdisk Options +#cat > $FILE <<EOF +#boot_disk=$DISK +#boot_main_part=$PART +#disk=$DISK +#main_part=$PART +#boot_entry=Ramdisk Options +#EOF +#spartlnx.run -cui -nm -w -f $FILE + +#Preparando instruccion Windows Boot Manager +cat > $FILE <<EOF +boot_disk=$DISK +boot_main_part=$PART +disk=$DISK +main_part=$PART +boot_entry=Windows Boot Manager +EOF +spartlnx.run -cui -nm -w -f $FILE + +#Preparando instruccion Herramienta de diagnóstico de memoria de Windows +#cat > $FILE <<EOF +#boot_disk=$DISK +#boot_main_part=$PART +#disk=$DISK +#main_part=$PART +#boot_entry=Herramienta de diagnóstico de memoria de Windows +#EOF +#spartlnx.run -cui -nm -w -f $FILE + +} + + +# ogWindowsRegisterPartition int_ndisk int_partiton str_volume int_disk int_partition +#@brief Registra una partición en windows con un determinado volumen. +#@param int_ndisk nº de orden del disco a registrar +#@param int_partition nº de particion a registrar +#@param str_volumen volumen a resgistar +#@param int_ndisk_windows nº de orden del disco donde esta windows +#@param int_partition_windows nº de particion donde esta windows +#@return +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. +#@version 0.9 - Adaptación a OpenGNSys. +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2009-09-24 +#*/ ## + + +function ogWindowsRegisterPartition () +{ +# Variables locales. +local PART DISK FILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk_TO_registre int_partition_TO_registre str_NewVolume int_disk int_parition " \ + "$FUNCNAME 1 1 c: 1 1" + return +fi + +# Error si no se reciben 5 parámetros. +[ $# == 5 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) + +REGISTREDDISK=$1 +REGISTREDPART=$2 +REGISTREDVOL=$(echo $3 | cut -c1 | tr '[:lower:]' '[:upper:]') +DISK=$4 +PART=$5 +FILE=/tmp/temporal + +ogDiskToDev $REGISTREDDISK $REGISTREDPART || return $(ogRaiseError $OG_ERR_PARTITION "particion a registrar "; echo $?) +ogDiskToDev $DISK $PART || return $(ogRaiseError $OG_ERR_PARTITION "particion de windows"; echo $?) + +ogGetOsType $DISK $PART | grep "Windows" || return $(ogRaiseError $OG_ERR_NOTOS "no es windows"; echo $?) + +VERSION=$(ogGetOsVersion $DISK $PART) + +#Systemroot + +if ogGetPath $DISK $PART WINDOWS +then + SYSTEMROOT="Windows" +elif ogGetPath $DISK $PART WINNT +then + SYSTEMROOT="winnt" +else + return $(ogRaiseError $OG_ERR_NOTOS; echo $?) +fi + +ogUnmount $DISK $PART +let DISK=$DISK-1 +let REGISTREDDISK=$REGISTREDDISK-1 +#Preparando instruccion Windows Boot Manager +cat > $FILE <<EOF +windows_disk=$DISK +windows_main_part=$PART +windows_dir=$SYSTEMROOT +disk=$REGISTREDDISK +main_part=$REGISTREDPART +;ext_part +part_letter=$REGISTREDVOL +EOF +spartlnx.run -cui -nm -u -f $FILE +} diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib index 8f7fd0d7..7d4f0642 100755 --- a/client/engine/Disk.lib +++ b/client/engine/Disk.lib @@ -332,6 +332,31 @@ sfdisk -s $DISK #/** +# ogGetDiskType path_device +#@brief Muestra el tipo de disco (real, RAID, meta-disco, etc.). +#@warning Función en pruebas +#*/ ## +function ogGetDiskType () +{ +local DEV MAJOR TYPE + +# Obtener el driver del dispositivo de bloques. +[ -b "$1" ] || ogRaiseError $OG_ERR_FORMAT || return $? +DEV=${1#/dev/} +MAJOR=$(awk -v D="$DEV" '{if ($4==D) print $1;}' /proc/partitions) +TYPE=$(awk -v D=$MAJOR '/Block/ {bl=1} {if ($1==D&&bl) print toupper($2)}' /proc/devices) +# Devolver mnemónico del driver de dispositivo. +case "$TYPE" in + SD) TYPE="DISK" ;; + SR|IDE*) TYPE="CDROM" ;; # FIXME Comprobar discos IDE. + MD|CCISS*) TYPE="RAID" ;; + DEVICE-MAPPER) TYPE="MAPPER" ;; # FIXME Comprobar LVM y RAID. +esac +echo $TYPE +} + + +#/** # ogGetPartitionActive int_ndisk #@brief Muestra que particion de un disco esta marcada como de activa. #@param int_ndisk nº de orden del disco diff --git a/client/engine/File.lib b/client/engine/File.lib index bb91a6d1..52b48075 100755 --- a/client/engine/File.lib +++ b/client/engine/File.lib @@ -259,11 +259,14 @@ ogGetPath $PARENT # ogIsNewerFile [ str_repo | int_ndisk int_npart ] path_source [ str_repo | int_ndisk int_npart ] path_target #@brief Metafunción que indica se un fichero es más nuevo que otro. #@see ogGetPath -#@return int_code Código de salida +#@return Código de salida: 0 - nuevo, 1 - antiguo o error #@warning Deben existir tanto el fichero origen como el destino. #@version 0.9.2 - Primera versión para OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2010-07-24 +#@version 1.0.1 - Devolver falso en caso de error. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-18 #*/ ## function ogIsNewerFile () { @@ -289,9 +292,9 @@ case "$1" in shift 2 ;; esac # Comprobar que existen los ficheros origen y destino. -[ -n "$SOURCE" ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return $? +[ -n "$SOURCE" ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return 1 TARGET=$(ogGetPath "$@") -[ -n "$TARGET" ] || ogRaiseError $OG_ERR_NOTFOUND "$@" || return $? +[ -n "$TARGET" ] || ogRaiseError $OG_ERR_NOTFOUND "$@" || return 1 # Devolver si el primer fichero se ha modificado después que el segundo. test "$SOURCE" -nt "$TARGET" } diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib index b54854b3..ca4486b0 100755 --- a/client/engine/FileSystem.lib +++ b/client/engine/FileSystem.lib @@ -367,10 +367,13 @@ mount | awk -v P=$PART '{if ($1==P) {print $3}}' #@brief Comprueba si un sistema de archivos está formateado. #@param int_ndisk nº de orden del disco o volumen. #@param int_npartition nº de orden del sistema de archivos. -#@return int_code Código de salida +#@return Código de salida: 0 - formateado, 1 - sin formato o error. #@version 0.91 - Adaptación inicial para comprobar que existe caché. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2010-03-18 +#@version 1.0.1 - Devolver falso en caso de error. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-18 #*/ ## function ogIsFormated () { @@ -381,10 +384,10 @@ if [ "$*" == "help" ]; then "if $FUNCNAME 1 1; then ... ; fi" return fi -# Error si no se reciben 2 parámetros. -[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Falso, en caso de error. +[ $# == 2 ] || return 1 -DISK=$(ogDiskToDev "$1") +DISK=$(ogDiskToDev "$1") || return 1 test -n "$(parted -sm $DISK print 2>/dev/null | \ awk -F: -v fs=$2 '{if ($1==fs) print $5}')" } @@ -395,10 +398,13 @@ test -n "$(parted -sm $DISK print 2>/dev/null | \ #@brief Comprueba si un sistema de archivos está montado. #@param int_ndisk nº de orden del disco #@param int_npartition nº de orden de la partición -#@return Código de salida: 0 - sin montar, 1 - montado. +#@return Código de salida: 0 - montado, 1 - sin montar o error. #@version 0.9 - Primera versión para OpenGNSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-10-15 +#@version 1.0.1 - Devolver falso en caso de error. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-18 #*/ ## function ogIsMounted () { @@ -408,8 +414,8 @@ if [ "$*" == "help" ]; then "if $FUNCNAME 1 1; then ... ; fi" return fi -# Error si no se reciben 2 parámetros. -[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Falso, en caso de error. +[ $# == 2 ] || return 1 test -n "$(ogGetMountPoint $1 $2)" } @@ -420,11 +426,14 @@ test -n "$(ogGetMountPoint $1 $2)" #@brief Comprueba si una partición está bloqueada por una operación de uso exclusivo. #@param int_ndisk nº de orden del disco #@param int_npartition nº de orden de la partición -#@return Código de salida: 0 - sin bloquear, 1 - bloqueada. +#@return Código de salida: 0 - bloqueado, 1 - sin bloquear o error. #@note El fichero de bloqueo se localiza en \c /var/lock/part, siendo \c part el dispositivo de la partición, sustituyendo el carácter "/" por "-". #@version 0.9 - Primera versión para OpenGNSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009-09-03 +#@version 1.0.1 - Devolver falso en caso de error. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-18 #*/ ## function ogIsLocked () { @@ -437,11 +446,11 @@ if [ "$*" == "help" ]; then "if $FUNCNAME 1 1; then ... ; fi" return fi -# Error si no se reciben 2 parámetros. -[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Falso, en caso de error. +[ $# == 2 ] || return 1 # Obtener partición. -PART="$(ogDiskToDev $1 $2)" || return $? +PART="$(ogDiskToDev $1 $2)" || return 1 # Comprobar existencia del fichero de bloqueo. LOCKFILE="/var/lock/lock${PART//\//-}" diff --git a/client/engine/Image.lib b/client/engine/Image.lib index 399e3da1..a4b82b02 100755 --- a/client/engine/Image.lib +++ b/client/engine/Image.lib @@ -387,12 +387,15 @@ dd if="$DISK" of="$IMGFILE" bs=446 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IM #@brief Comprueba si una imagen está bloqueada para uso exclusivo. #@param str_repo repositorio de imágenes (opcional) #@param path_image camino de la imagen (sin extensión) -#@return Código de salida: 0 - sin bloquear, 1 - bloqueada. +#@return Código de salida: 0 - bloqueado, 1 - sin bloquear o error. #@note repo = { REPO, CACHE } #@exception OG_ERR_FORMAT formato incorrecto. #@version 1.0 - Adaptación a OpenGnSys 1.0 #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2011/03/10 +#@version 1.0.1 - Devolver falso en caso de error. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-18 #*/ ## function ogIsImageLocked () { @@ -404,7 +407,7 @@ if [ "$*" == "help" ]; then return fi # Error si no se reciben 1 o 2 parámetros. -[ $# -lt 1 -o $# -gt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $? +[ $# -lt 1 -o $# -gt 2 ] && return 1 # Comprobar si existe el fichero de bloqueo. test -n "$(ogGetPath $@.lock)" @@ -453,10 +456,12 @@ touch $IMGDIR/$(basename "${!#}").lock #@param int_ndisk nº de orden del disco #@param int_npartition nº de orden de la partición #@return (por determinar) -#@exception OG_ERR_FORMAT formato incorrecto. -#@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_FORMAT 1 formato incorrecto. +#@exception OG_ERR_NOTFOUND 2 fichero de imagen o partición no detectados. +#@exception OG_ERR_PARTITION 3 # Error en partición de disco. +#@exception OG_ERR_LOCKED 4 partición bloqueada por otra operación. +#@exception OG_ERR_IMAGE 5 error al restaurar la imagen del sistema. +#@exception OG_ERR_IMGSIZEPARTITION 30 Tamaño de la particion es menor al tamaño de la imagen. #@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 @@ -466,6 +471,12 @@ touch $IMGDIR/$(basename "${!#}").lock #@version 0.9 - Primera version muy en pruebas para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009/09/10 +#@version 1.0 - generacion sintaxis de restauracion +#@author Antonio J. Doblas Viso, Universidad de Malaga +#@date 2011/02/01 +#@version 1.0.1 - Control errores, tamaño particion, fichero-imagen +#@author Antonio J. Doblas Viso, Universidad de Malaga +#@date 2011/05/11 #*/ ## function ogRestoreImage () { @@ -479,21 +490,26 @@ if [ "$*" == "help" ]; then return fi # Error si no se reciben 4 parámetros. -[ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? +[ $# -lt 4 ] && return $(ogRaiseError $OG_ERR_FORMAT; echo $?) # Procesar parámetros. -PART="$(ogDiskToDev "$3" "$4")" || return $? +PART="$(ogDiskToDev $3 $4)" || return $(ogRaiseError $OG_ERR_NOTFOUND " $3 $4"; echo $?) #IMGTYPE=$(ogGetImageType "$1" "$2") IMGTYPE=img -IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") -[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $? +IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE") +[ -r "$IMGFILE" ] || return $(ogRaiseError $OG_ERR_NOTFOUND " $3 $4"; echo $?) +# comprobamos consistencia de la imagen +ogGetImageInfo $IMGFILE >/dev/null || return $(ogRaiseError $OG_ERR_IMAGE " $1 $2"; echo $?) + # Error si la imagen no cabe en la particion. -IMGSIZE=$(ogGetImageSize "$1" "$2") -PARTSIZE=$(ogGetPartitionSize $3 $4) +IMGSIZE=$(ogGetImageSize "$1" "$2") || return $(ogRaiseError $OG_ERR_IMAGE " $1 $2"; echo $?) +#TODO: +#Si la particion no esta formateado o tiene problemas formateamos +ogMount $3 $4 || ogFormat $3 $4 +PARTSIZE=$(parted `ogDiskToDev $3 $4` unit kB print | awk '{y=x; x=$4};END{print y}' | tr -d kB) if [ $IMGSIZE -gt $PARTSIZE ]; then - ogRaiseError $OG_ERR_PARTITION "$IMGSIZE > $PARTSIZE" + ogRaiseError $OG_ERR_IMGSIZEPARTITION " $PARTSIZE < $IMGSIZE" return $? fi - # Comprobar el bloqueo de la imagen y de la partición. if ogIsImageLocked "$IMGFILE"; then ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $1, $2.$IMGTYPE" @@ -504,8 +520,8 @@ if ogIsLocked $3 $4; then return $? fi # Desmontar y bloquear partición. -ogUnmount $3 $4 2>/dev/null || return $? -ogLock $3 $4 || return $? +ogUnmount $3 $4 2>/dev/null || return $(ogRaiseError $OG_ERR_PARTITION " $3 $4"; echo $?) +ogLock $3 $4 || return $(ogRaiseError $OG_ERR_PARTITION " $3 $4"; echo $?) trap "ogUnlock $3 $4" 1 2 3 6 9 # Restaurar según el tipo de imagen. @@ -677,7 +693,7 @@ then then TOOLS=PARTCLONE FS=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); print toupper($8);}') - echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1048576 || SIZEFACTOR=1024 + echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1000000 || SIZEFACTOR=1024 SIZE=$(echo $PARTCLONEINFO | awk -v FACTOR=$SIZEFACTOR '{gsub(/\: /,"\n"); printf "%d\n", $11*FACTOR;}') IMGDETECT="TRUE" fi @@ -751,8 +767,8 @@ local IMGFILE # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME testing path_dir str_image int_ndisk int_npart" \ - "$FUNCNAME 1 1 REPO /aula1/winxp ==> 5642158" + ogHelp "$FUNCNAME" "$FUNCNAME REPO|CACHE /str_image" \ + "$FUNCNAME REPO /aula1/winxp ==> 5642158" return fi # Error si no se reciben menos de 2 parámetros. diff --git a/client/engine/PostConfEAC.lib b/client/engine/PostConfEAC.lib new file mode 100755 index 00000000..642b9118 --- /dev/null +++ b/client/engine/PostConfEAC.lib @@ -0,0 +1,575 @@ +#!/bin/bash + +# ogLoadHiveWindows int_ndisk int_partiton +#@brief Localiza los hive del registro de windows (de sistema y usuarios) +#@param int_ndisk nº de orden del disco +#@param int_partition nº de particion +#@return +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. +#@version 0.9 - Adaptación a OpenGNSys. +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2009-09-24 +#*/ ## + + +function ogLoadHiveWindows () { +# Variables locales. +local PART DISK + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition" \ + "$FUNCNAME 1 1 " + return +fi + +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) + +DISK=$1; PART=$2; + +#Comprobaciones redundantes: borrar" +#ogDiskToDev $DISK $PART || return $(ogRaiseError $OG_ERR_PARTITION "particion de windows no detectada"; echo $?) +#ogGetOsType $DISK $PART | grep "Windows" || return $(ogRaiseError $OG_ERR_NOTOS "no es windows"; echo $?) +#VERSION=$(ogGetOsVersion $DISK $PART) +#Fin Comprobaciones redundantes: borrar" + +if ogGetPath $DISK $PART WINDOWS +then + SYSTEMROOT="Windows" +elif ogGetPath $DISK $PART WINNT +then + SYSTEMROOT="winnt" +else + return $(ogRaiseError $OG_ERR_NOTOS "version windows no detectada"; echo $?) +fi + +hiveSAM=$(ogGetPath $DISK $PART /${SYSTEMROOT}/system32/config/SAM) && export hiveSAM || return $(ogRaiseError $OG_ERR_NOTOS " hive SAM no detectada"; echo $?) +hiveSYSTEM=$(ogGetPath $DISK $PART /${SYSTEMROOT}/system32/config/system) && export hiveSYSTEM || return $(ogRaiseError $OG_ERR_NOTOS "hive SYSTEM no detectada"; echo $?) +hiveSOFTWARE=$(ogGetPath $DISK $PART /${SYSTEMROOT}/system32/config/software) && export hiveSOFTWARE || return $(ogRaiseError $OG_ERR_NOTOS "hive SOFTWARE no detectada"; echo $?) +export TEMPhive=/tmp/tmpregistry + +## borrar elementos de la primera integracion +#export particion=`ogMount $DISK $PART` +#mkfifo pipe 2>/dev/null +#declare -i count +#declare -A HivePathUser +#count=3 +# fin borrar elementos de la primera integracion + +declare -i COUNT +COUNT=3 +BASEHOMEDIR=$(ogGetPath 1 1 /"Documents and Settings") +TMPUSERFILE="/tmp/WuserRegAndDAT.tmp" +find "$BASEHOMEDIR/" -type f -name NTUSER.DAT > $TMPUSERFILE +LISTUSERS=$(drbl-chntpw -l $hiveSAM | grep RID | awk -F"<" '{print $2}' | awk -F">" '{print $1}') +#echo "$BASEHOMEDIR" $LISTUSERS +for user in $LISTUSERS +do + # borrar elementos de la primera integracion. + #if find ${particion}/ -type f -name NTUSER.DAT > pipe| cat pipe | grep $user > /tmp/path.txt.$count + #then + #echo pefil de $user encontrado, para utilizar este usuario con funciones utilizar id_hive= $count o \$usuario + #read camino < /tmp/path.txt.$count + #echo $camino | sed -e 's/ /\\ /g' > /tmp/path.txt.$count + #camino2=$(echo $camino | sed -e 's/ /\\ /g') + #echo $camino2 | sed -e 's/\\/\\\\/g' > /tmp/path.txt.$count + #export `echo $user=hiveUSER$count` + #export `echo hiveUSER$count`="$camino2" + #count=${count}+1 + #fiecho $user + # Fin borrar elementos de la primera integracion. + + # Comprobamos que el usuario registrado tiene .DAT + if HOMEDIR=$(cat $TMPUSERFILE | grep -w $user) + then + #echo "$user exportamos los usuarios de windows como variables, y como valor hiveUSERX; donde la X es 3 4 5 6 ... X" + export `echo $user=hiveUSER$COUNT` + #echo "$user exportamos la variable hiveUSERX con el valor del home de la variable-usuario_windows" + ##export `echo hiveUSER$COUNT`="$(echo $HOMEDIR | sed -e 's/ /\\ /'g | sed -e 's/\\/\\\\/g')" + export `echo hiveUSER$COUNT`="$(echo $HOMEDIR)" + #echo " estas variables \$USUARIO -> Identificador del HIVE ; \${!USUARIO} -> path del HIVE " + COUNT=${COUNT}+1 + fi + +done +COUNT=0 +} + + +# ogUpdateHiveWindows +#@brief Actualiza los hive de windows. +#@param int_ndisk +#@param int_partition +#@return +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar. +#@version 0.9 - Adaptación a OpenGNSys. +#@author Antonio J. Doblas Viso. Universidad de Málaga +#@date 2009-09-24 +#*/ ## + + +function ogUpdateHiveWindows (){ +# Variables locales. +local PART DISK FILE + +#TODO detectar llamada a ogLoadHiveWindows + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME " \ + "$FUNCNAME " + return +fi + +echo drbl-chntpw -f $TEMPhive $hiveSAM $hiveSYSTEM $hiveSOFTWARE \"${hiveUSER3}\" \"${hiveUSER4}\" \"${hiveUSER5}\" \"${hiveUSER6}\" \"${hiveUSER7}\" \"${hiveUSER8}\" \"${hiveUSER9}\" > /tmp/run.sh +cat /tmp/run.sh; sh /tmp/run.sh; rm -fr $TEMPhive; rm /tmp/run.sh + +unset hiveSAM hiveSYSTEM hiveSOFTWARE TEMPhive hiveUSER3 hiveUSER4 hiveUSER5 hiveUSER6 hiveUSER7 hiveUSER8 hiveUSER9 + + +} + + + +function ogHiveNTRunMachine () { +#echo sintaxis: PathScripts idScripts +#echo ejemplo: c:\\\\WINDOSWS\\\\crearusuarios.bat scripts1 +#echo IMPORTANTE: el path debe llevar dos barras \\, pero como se deben 'escapar' debes poner cuatro \\\\ +#echo "identifica 0=$hiveSAM 1=$hiveSystem 2=$hiveSoftware 3=$HiveUser3" + +local PART DISK FILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME PathScripts|command keyName " \ + "$FUNCNAME c:\\\\Windows\\\\crearusuarios.cmd scripts_crearUsuarios "\ + "$FUNCNAME "cmd /c del c:\ogboot.*" ogcleanboot "\ + "$FUNCNAME Requiere la previa ejecución de ogLoadHive int_disk int_part"\ + "$FUNCNAME Despues requiere el ogUpdateHive" + return +fi + + +# Error si no se reciben al menos 1 parámetros. +[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) + + +cat >> $TEMPhive << EOF +h 2 +cd \Microsoft\Windows\CurrentVersion\Run +nv 1 $2 +ed $2 +$1 +EOF +#ogGetRegistryValue /mnt/sda1 software '\Microsoft\Windows\CurrentVersion\Run\og3' +} + +function ogNTPolUserOn () { + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME id_hive_user " \ + "$FUNCNAME NombreUsuario"\ + "$FUNCNAME " + return +fi + +# TODO: error si no se ha llamado previamente a ogLoadHiveWindows +[ -n $hiveSAM ] || return $(ogRaiseError $OG_ERR_FORMAT "se debe utilizar primero la utilidad ogLoadHiveWindows"; echo $?) + +# TODO: error si el usuario no tiene cuenta en windows. +drbl-chntpw -l $hiveSAM | grep RID | grep -w $1 || return $(ogRaiseError $OG_ERR_FORMAT "el usuario $1 no tiene cuenta en este windows: Compruebe mayusculas o minusculas"; echo $?) + +# TODO: error si no el usario no no tiene HIVE asociado. +[ -n "${!1}" ] || return $(ogRaiseError $OG_ERR_FORMAT "el usuario no tiene hive creado"; echo $?) + + +HIVEID=$(echo ${!1} | tr -d "hiveUSER") + + +#echo "IMPORTANTE: la variable HiveUser3=/mnt/windows/Document/\ and/\ Seeting\alumnmos\NTUSER.dat" +echo $HIVEID +#cp /var/EAC/admin/utilswin/Fondo.BMP ${particion}/WINDOWS/ + +cat >> $TEMPhive << EOF +h $HIVEID +cd \Control Panel\Desktop +ed Wallpaper +C:\\WINDOWS\\fondo.bmp + +cd \Software\Microsoft\Windows\CurrentVersion\Policies +nk Explorer +cd Explorer + +nv 4 NoDesktop +ed NoDesktop +1 + +nv 4 NoSimpleStartMenu +ed NoSimpleStartMenu +1 +nv 4 NoWindowsUpdate +ed NoWindowsUpdate +1 + +nv 4 NoSMConfigurePrograms +ed NoSMConfigurePrograms +1 + +nv 4 NoChangeStartMenu +ed NoChangeStartMenu +1 + +nv 4 Intellimenus +ed Intellimenus +1 + +nv 4 NoRun +ed NoRun +1 + +nv 4 NoRecentDocsHistory +ed NoRecentDocsHistory +1 +EOF +} + + + + + +########################################################## +########################################################## +#####librerias de PostConfiguracion v0.1para Advanced Deploy enViorenment########### +# Liberado bajo licencia GPL <http://www.gnu.org/licenses/gpl.html>################ +############# 2008 Antonio Jes�s Doblas Viso adv@uma.es ########################## +########### Universidad de Malaga (Spain)############################ +########################################################## + + + + + +function NTChangeName () { +if [ $# = 0 ] +then +echo sintaxis: NTChangeNAME str_$var +echo ejemplos: NTCHangeName adi${IPcuatro}-xp +fi +cat >> $temporal << EOF +h 1 +ed ControlSet001\Control\ComputerName\ComputerName\ComputerName +$1 +ed ControlSet001\Services\Tcpip\Parameters\Hostname +$1 +ed ControlSet001\Services\Tcpip\Parameters\NV Hostname +$1 +h 2 +cd \Microsoft\Windows NT\CurrentVersion\Winlogon +ed DefaultDomainName +$1 +EOF +} + + + +function NTSetGroupName () { +if [ $# = 0 ] +then +echo sintaxis: NTSetGroupName str_$var +echo ejemplos: NTSetGroupName adi +fi +cat >> $temporal << EOF +h 2 +ed \Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultDomainName +$1 +EOF +} + + +function NTSetOwner (){ +if [ $# = 0 ] +then +echo sintaxis: NtSetOwner str_propietario str_organizacion +echo ejemplos: NTSetOwner eu\ politecnica universidad\ de\ malaga +fi +cat >> $temporal << EOF +h 2 +ed \Microsoft\Windows NT\CurrentVersion\RegisteredOwner +$1 +ed \Microsoft\Windows NT\CurrentVersion\RegisteredOrganization +$2 +EOF +} + + +function NTAutoLogon (){ +if [ $# = 0 ] +then +echo sintaxis: Int_Activar Int_nves str_usuario str_passwd str_equipo +echo ejemplos: 1 2 administrador 3451 $equipo +echo IMPORTANTE: cuando AutoLogonCount llegue a 0, activa el AutoAdminLogon a 0. Pero no borra los valores de DefaultPassword +return 2 +fi +echo la pass es $4 +export temporal=/tmp/tmpregistry +cat >> $temporal << EOF +hive 2 +cd \Microsoft\Windows NT\CurrentVersion\Winlogon +nv 1 AutoAdminLogon +ed AutoAdminLogon +$1 +nv 1 AutoLogonCount +ed AutoLogonCount +$2 +nv 1 DefaultUserName +ed DefaultUserName +$3 +nv 1 DefaultDomainName +ed DefaultDomainName +$5 +EOF +if [ "$4" == none ] +then +echo "debe aparecer done" $4 +cat >> $temporal << EOF +dv DefaultPassword + + +EOF +else +cat >> $temporal << EOF +nv 1 DefaultPassword +ed DefaultPassword +$4 +EOF +fi +} + +function NTStatusRatonTeclado (){ +if [ $# = 0 ] +then +echo sintaxis: Int-StatusRaton Int-StatusTeclado +echo ejemplos: int=1 activo int=4 desactivado +return 2 +fi +cat >> $temporal << EOF +hive 1 +cd \ControlSet001\Services\Mouclass +ed Start +$1 +cd \ControlSet001\Services\Kbdclass +ed Start +$2 +EOF +} + +function NTRunOnceMachine () { +if [ $# = 0 ] +then +echo sintaxis: PathScripts idScripts +echo "ejemplo: c:\\\\WINDOSWS\\\\crearusuarios.bat scripts1" +echo "IMPORTANTE: el path debe llevar dos barras \\, pero como se deben 'escapar' debes poner cuatro \\\\" +return 2 +fi +export temporal=/tmp/tmpregistry +cat >> $temporal << EOF +h 2 +cd \Microsoft\Windows\CurrentVersion\RunOnce +nv 1 $2 +ed $2 +$1 +EOF +} + +function NTRunMachine () { +if [ $# = 0 ] +then +echo sintaxis: PathScripts idScripts +echo ejemplo: c:\\\\WINDOSWS\\\\crearusuarios.bat scripts1 +echo IMPORTANTE: el path debe llevar dos barras \\, pero como se deben 'escapar' debes poner cuatro \\\\ +return 2 +fi +export temporal=/tmp/tmpregistry +cat >> $temporal << EOF +h 2 +cd \Microsoft\Windows\CurrentVersion\Run +nv 1 $2 +ed $2 +$1 +EOF +} + +function NTRunUser () { +if [ $# = 0 ] +then +echo sintaxis: str_PathWINScripts str_idScripts Int_hive||\$usuario +echo ejemplo: c:\\\\WINDOSWS\\\\crearusuarios.bat scripts1 3 +echo IMPORTANTE: el pathWIN debe llevar dos barras \\, pero como se deben 'escapar' debes poner cuatro \\\\ +echo IMPORTANTE: el pathLinux si lleva espacios debe escaparse con una barra \\ +echo IMPORTANTE Int_hive: 3 para el primer usuario, 4 para el segundo usuario +echo requiere export un HiveUser3=/mnt/windows/Document\ and\ Seeting\alumnmos\NTUSER.dat +return 2 +fi +cat >> $temporal << EOF +h $3 +cd \Software\Microsoft\Windows\CurrentVersion\Run +nv 1 $2 +ed $2 +$1 +EOF +} + + + +function NTPolUserOn () { +if [ $# = 0 ] +then +Msg "requiere LoadRegistryUser str_user1 str_user2..." orange +echo "sintaxis: Int_hive" +echo "ejemplo: NTPolUserOn 3" +echo "IMPORTANTE: la variable HiveUser3=/mnt/windows/Document/\ and/\ Seeting\alumnmos\NTUSER.dat" +return 2 +fi +cp /var/EAC/admin/utilswin/Fondo.BMP ${particion}/WINDOWS/ +cat >> $temporal << EOF +h $1 +cd \Control Panel\Desktop +ed Wallpaper +C:\\WINDOWS\\fondo.bmp + +cd \Software\Microsoft\Windows\CurrentVersion\Policies +nk Explorer +cd Explorer + +nv 4 NoDesktop +ed NoDesktop +1 + +nv 4 NoSimpleStartMenu +ed NoSimpleStartMenu +1 +nv 4 NoWindowsUpdate +ed NoWindowsUpdate +1 + +nv 4 NoSMConfigurePrograms +ed NoSMConfigurePrograms +1 + +nv 4 NoChangeStartMenu +ed NoChangeStartMenu +1 + +nv 4 Intellimenus +ed Intellimenus +1 + +nv 4 NoRun +ed NoRun +1 + +nv 4 NoRecentDocsHistory +ed NoRecentDocsHistory +1 +EOF +} + +function NTPolUserOFF () { +if [ $# = 0 ] +then +Msg "requiere LoadRegistryUser str_user1 str_user2..." orange +echo "sintaxis: Int_hive" +echo "ejemplo: NTPolUserOFF 3" +echo "IMPORTANTE: la variable HiveUser3=/mnt/windows/Document/\ and/\ Seeting\alumnmos\NTUSER.dat" +return 2 +fi +cat >> $temporal << EOF +h $1 +cd \Control Panel\Desktop +ed Wallpaper +C:\\WINDOWS\\web\\wallpaper\\Felicidad.bmp + +cd \Software\Microsoft\Windows\CurrentVersion\ +rdel Policies +nk Policies +1 +EOF +} + + +function NTStatusBootChk () { +if [ $# = 0 ] +then +echo sintaxis: Int-Status +echo ejemplos: int=0 desactivado int=1 activado +return 2 +fi +[ $1 = 0 ] && valor="none" +[ $1 = 1 ] && valor="autocheck autochk *" +cat >> $temporal << EOF +hive 1 +cd \ControlSet001\Control\Session Manager +ed BootExecute +$valor +--n +EOF +} + + +function ogSchrootLinux () { + +# Variables locales. +local PART DISK DIRCONF SCHROOTDEVICE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition" \ + "$FUNCNAME 1 1 " + return +fi + +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?) + +DISK=$1; PART=$2; DIRCONF="/etc/schroot" + + +VERSION=$(ogGetOsVersion $DISK $PART) +echo $VERSION | grep "Linux" || return $(ogRaiseError $OG_ERR_NOTOS "no es linux"; echo $?) + +ogUnmount $DISK $PART || return $(ogRaiseError $OG_ERR_NOTOS "no es linux"; echo $?) + +SCHROOTDEVICE=$(ogDiskToDev $DISK $PART) + + +rm ${DIRCONF}/mount-defaults +rm ${DIRCONF}/schroot.conf + +cat >> ${DIRCONF}/mount-defaults << EOF +# <file system> <mount point> <type> <options> <dump> <pass> +proc /proc proc defaults 0 0 +/dev /dev none rw,bind 0 0 +/dev/pts /dev/pts none rw,bind 0 0 +/dev/shm /dev/shm none rw,bind 0 0 +EOF + + +cat >> ${DIRCONF}/schroot.conf << EOF +[linux] +description=$VERSION +type=block-device +device=$SCHROOTDEVICE +EOF + + + + +schroot -c linux + +schroot -end-sessiona --all-sessions +} + diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib index 8fa1d85c..ecc0d43b 100755 --- a/client/engine/Protocol.lib +++ b/client/engine/Protocol.lib @@ -853,7 +853,7 @@ then case "$MODE" in peer|PEER) echo "Donwloading Torrent as peer" ### echo "ctorrent -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 $SOURCE -s $TARGET -b ${SOURCE}.bf" - ctorrent -f -X "sleep 15; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf >> $OGLOGFILE + ctorrent -f -X "sleep 15; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf ;; leecher|LEECHER) echo "Donwloading Torrent as leecher" # echo "ctorrent ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 -U 0" @@ -969,64 +969,66 @@ if [ "$*" == "help" ]; then return fi +#TODO: return 0->true, 1->false; si error, aunque sintaxis devuelve > 1 + # Error si no se reciben los argumentos ARG necesarios según la opcion. -[ $# == "2" ] || ogRaiseError $OG_ERR_FORMAT "Parametros no admitidos"|| return $? +#[ $# == "2" ] || ogRaiseError $OG_ERR_FORMAT "Parametros no admitidos"|| return $? +#ogCheckStringInGroup "$1" "REPO repo" || ogRaiseError $OG_ERR_FORMAT "El contendor $1 no es valido, solo se admite REPO" || return $? +[ $# == "2" ] || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?) +ogCheckStringInGroup "$1" "REPO repo" || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?) -ogCheckStringInGroup "$1" "REPO repo" || ogRaiseError $OG_ERR_FORMAT "El contendor $1 no es valido, solo se admite REPO" || return $? -FILESOURCE=`ogGetPath $1 $2` -FILETARGET=`ogGetPath CACHE $2` +FILESOURCE=`ogGetPath $1 $2` || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?) -echo "paso 1. si no existe la imagen, confirmamos que es necesaria la actualizacion de la cache." +#echo "paso 1. si no existe la imagen, confirmamos que es necesaria la actualizacion de la cache." +FILETARGET=`ogGetPath CACHE $2` if [ -z $FILETARGET ] then # borramos el fichero bf del torrent, en el caso de que se hubiese quedado de algun proceso fallido ogDeleteFile CACHE /$2.torrent.bf &> /dev/null ogDeleteFile CACHE /$2.sum &> /dev/null - echo "Salida con valor 0, paso 1, la cache no contiene esa imagen " + echo "TRUE=0, es necesario actualizar. Paso 1, la cache no contiene esa imagen " return 0 fi -echo "Paso 2. Comprobamos que la imagen no estuviese en un proceso previo torrent" + +#echo "Paso 2. Comprobamos que la imagen no estuviese en un proceso previo torrent" if ogGetPath $FILETARGET.torrent.bf > /dev/null then - echo "Salida con valor 0, paso 2 la imagen esta en un estado de descarga torrent interrumpido." #TODO: comprobar los md5 para asegurarnos que la imagen es la misma. + echo "TRUE=0, es necesario actualizar. Paso 2, la imagen esta en un estado de descarga torrent interrumpido" return 0 fi + ## En este punto la imagen en el repo y en la cache se llaman igual, -echo "paso 4. recuperamos o calculamos los md5 de los ficheros" +#echo "paso 4. recuperamos o calculamos los md5 de los ficheros" if [ -f $FILESOURCE.sum ] then - echo "leyendo el sum del fichero sum del repo" + # echo "leyendo el sum del fichero sum del repo" MD5SOURCE=$(cat $FILESOURCE.sum) -#elif [ -f $FILETARGET.torrent ] -#then -# echo "leyendo el sum del fichero torrent de la cache" -# MD5SOURCE=$(ctorrent -x $FILETARGET.torrent | grep Comment | awk -F": " '{print $2}') else - echo "calculando el sun del repo" + # echo "calculando el sun del repo" MD5SOURCE=$(md5sum $FILESOURCE | cut -f1 -d" ") fi if [ -f $FILETARGET.sum ] then - echo "leyendo el sum de la cache" + #echo "leyendo el sum de la cache" MD5TARGET=$(cat $FILETARGET.sum) else - echo "calculando el sum de la cache" + #echo "calculando el sum de la cache" md5sum $FILETARGET | cut -f1 -d" " > $FILETARGET.sum MD5TARGET=$(cat $FILETARGET.sum) fi -echo "Paso 5. comparamos los md5" +#echo "Paso 5. comparamos los md5" #TODO: que hacer cuando los md5 son distintos. Por defecto borrar. if [ "$MD5SOURCE" == "$MD5TARGET" ] then - echo "paso5.A la imagen esta en cache" + echo "FALSE=1, No es neceario actualizar. Paso5.A la imagen esta en cache" return 1 else - echo "paso 5.b la imagen en cache es distinta, borramos la imagen anterior y devolvemos 0 para confirmar la actualizacion" + echo "TRUE=0, Si es necesario actualizar. paso 5.b la imagen en cache es distinta, borramos la imagen anterior y devolvemos 0 para confirmar la actualizacion" rm $FILETARGET return 0 fi diff --git a/client/engine/README.es.txt b/client/engine/README.es.txt index 10b20779..9fc6862b 100644 --- a/client/engine/README.es.txt +++ b/client/engine/README.es.txt @@ -19,11 +19,15 @@ LibrerÃas: - Boot.lib funciones de arranque y posconfiguración de sistemas operativos. +- Cache.lib funciones de gestión de la caché local del cliente. - Disk.lib funciones de control de dispositivos de disco. - File.lib funciones de manipulación de ficheros. - FileSystem.lib funciones de gestión de sistemas de ficheros. - Image.lib funciones de administración de imágenes de sistemas operativos. - Inventory.lib funciones de control de inventario e informes. +- Net.lib funciones básicas de control de acceso a la red. +- Protocol.lib funciones de implementación de protocolos de comunicación. +- Registry.lib funciones básicas de gestión del registro de Windows. - System.lib funciones básicas del sistema. diff --git a/client/engine/Registry.lib b/client/engine/Registry.lib new file mode 100755 index 00000000..437f5102 --- /dev/null +++ b/client/engine/Registry.lib @@ -0,0 +1,397 @@ +#!/bin/bash +#/** +#@file Registry.lib +#@brief LibrerÃa o clase Registry +#@class Boot +#@brief Funciones para gestión del registro de Windows. +#@version 1.0.1 +#@warning License: GNU GPLv3+ +#*/ + + +#/** +# ogAddRegistryKey path_mountpoint str_hive str_keyname +#@brief Añade una nueva clave al registro de Windows. +#@param path_mountpoint directorio donde está montado el sistema Windows +#@param str_hive sección del registro +#@param str_keyname nombre de la clave +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado. +#@note hive = { default, sam, security, software, system, components } +#@warning Requisitos: chntpw +#@warning El sistema de archivos de Windows debe estar montada previamente. +#@version 1.0.1 - Nueva función +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-25 +#*/ ## +function ogAddRegistryKey () +{ +# Variables locales. +local FILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_key" \ + "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey'" + return +fi +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Camino del fichero de registro. +FILE=$(ogGetHivePath "$1" "$2") || return $? + +# Añadir nueva clave. +chntpw "$FILE" << EOT 2>/dev/null +cd ${3%\\*} +nk ${3##*\\} +q +y +EOT +} + +#/** +# ogAddRegistryValue path_mountpoint str_hive str_valuename [str_valuetype] +#@brief Añade un nuevo valor al registro de Windows, indicando su tipo de datos. +#@param path_mountpoint directorio donde está montado el sistema Windows +#@param str_hive sección del registro +#@param str_valuename nombre del valor +#@param str_valuetype tipo de datos del valor (opcional) +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado. +#@note hive = { default, sam, security, software, system, components } +#@note valuetype = { string, binary, dword }, por defecto: string +#@warning Requisitos: chntpw +#@warning El sistema de archivos de Windows debe estar montada previamente. +#@version 1.0.1 - Nueva función +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-25 +#*/ ## +function ogAddRegistryValue () +{ +# Variables locales. +local FILE TYPE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_valuename [str_valuetype]" \ + "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey\Value1'" \ + "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey\Value1' DWORD" + return +fi +# Error si no se reciben 3 o 4 parámetros. +[ $# == 3 -o $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Camino del fichero de registro. +FILE=$(ogGetHivePath "$1" "$2") || return $? +case "$4" in + string|STRING|"") TYPE=1 ;; + binary|BINARY) TYPE=3 ;; + dword|DWORD) TYPE=4 ;; + *) ogRaiseError $OG_ERR_OUTOFLIMIT "$4" + exit $? ;; +esac + +# Devolver el dato del valor de registro. +# /* (comentario Doxygen) +chntpw "$FILE" << EOT 2>/dev/null +cd ${3%\\*} +nv $TYPE ${3##*\\} +q +y +EOT +# (comentario Doxygen) */ +} + + +#/** +# ogDeleteRegistryKey path_mountpoint str_hive str_keyname +#@brief Elimina una clave del registro de Windows con todo su contenido. +#@param path_mountpoint directorio donde está montado el sistema Windows +#@param str_hive sección del registro +#@param str_keyname nombre de la clave +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado. +#@note hive = { default, sam, security, software, system, components } +#@warning Requisitos: chntpw +#@warning El sistema de archivos de Windows debe estar montada previamente. +#@warning La clave debe estar vacÃa para poder ser borrada. +#@version 1.0.1 - Nueva función +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-25 +#*/ ## +function ogDeleteRegistryKey () +{ +# Variables locales. +local FILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_key" \ + "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey'" + return +fi +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Camino del fichero de registro. +FILE=$(ogGetHivePath "$1" "$2") || return $? + +# Añadir nueva clave. +chntpw "$FILE" << EOT 2>/dev/null +cd ${3%\\*} +dk ${3##*\\} +q +y +EOT +} + +#/** +# ogDeleteRegistryValue path_mountpoint str_hive str_valuename +#@brief Elimina un valor del registro de Windows. +#@param path_mountpoint directorio donde está montado el sistema Windows +#@param str_hive sección del registro +#@param str_valuename nombre del valor +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado. +#@note hive = { default, sam, security, software, system, components } +#@warning Requisitos: chntpw +#@warning El sistema de archivos de Windows debe estar montada previamente. +#@version 1.0.1 - Nueva función +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-25 +#*/ ## +function ogDeleteRegistryValue () +{ +# Variables locales. +local FILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_valuename" \ + "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey\Value1'" + return +fi +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Camino del fichero de registro. +FILE=$(ogGetHivePath "$1" "$2") || return $? + +# Devolver el dato del valor de registro. +# /* (comentario Doxygen) +chntpw "$FILE" << EOT 2>/dev/null +cd ${3%\\*} +dv ${3##*\\} +q +y +EOT +# (comentario Doxygen) */ +} + + +#/** +# ogGetHivePath path_mountpoint str_hive +#@brief Función básica que devuelve el camino del fichero con una sección del registro. +#@param path_mountpoint directorio donde está montado el sistema Windows +#@param str_hive sección del registro +#@return str_path - camino del fichero de registro +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado. +#@note hive = { default, sam, security, software, system, components } +#@warning El sistema de archivos de Windows debe estar montada previamente. +#@version 1.0.1 - Nueva función +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-18 +#*/ ## +function ogGetHivePath () +{ +# Variables locales. +local FILE FILENT FILEXP + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive" + "$FUNCNAME /mnt/sda1 SOFTWARE" + return +fi +# Error si no se reciben 2 parámetros. +[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +# Camino del fichero de registro en NT/2000 o XP/Vista/7. +FILENT=$(ogGetPath "/$1/winnt/system32/config/$2") +[ -f $FILENT ] && FILE="$FILENT" +FILEXP=$(ogGetPath "/$1/windows/system32/config/$2") +[ -f $FLEHXP ] && FILE="$FILEXP" +[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $? + +echo "$FILE" +} + + +#/** +# ogGetRegistryValue path_mountpoint str_hive str_valuename +#@brief Devuelve el dato de un valor del registro de Windows. +#@param path_mountpoint directorio donde está montado el sistema Windows +#@param str_hive sección del registro +#@param str_valuename nombre del valor +#@return str_valuedata - datos del valor. +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado. +#@note hive = { default, sam, security, software, system, components } +#@warning Requisitos: chntpw, awk +#@warning El sistema de archivos de Windows debe estar montado previamente. +#@version 0.9 - Adaptación para OpenGNSys. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-09-11 +#*/ ## +function ogGetRegistryValue () +{ +# Variables locales. +local FILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_valuename" \ + "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey\Value1' ==> 1" + return +fi +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Camino del fichero de registro. +FILE=$(ogGetHivePath "$1" "$2") || return $? + +# Devolver el dato del valor de registro. +# /* (comentario Doxygen) +chntpw "$FILE" << EOT 2>/dev/null | awk '/> Value/ {getline;print $0;}' +cd ${3%\\*} +cat ${3##*\\} +q +EOT +# (comentario Doxygen) */ +} + + +#/** +# ogListRegistryKeys path_mountpoint str_hive str_key +#@brief Lista los nombres de subclaves de una determinada clave del registro de Windows. +#@param path_mountpoint directorio donde está montado el sistema Windows +#@param str_hive sección del registro +#@param str_key clave de registro +#@return str_subkey ... - lista de subclaves +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado. +#@note hive = { default, sam, security, software, system, components } +#@warning Requisitos: chntpw, awk +#@warning El sistema de archivos de Windows debe estar montado previamente. +#@version 0.9 - Adaptación para OpenGNSys. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-09-23 +#*/ ## +function ogListRegistryKeys () +{ +# Variables locales. +local FILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_key" \ + "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\Windows\CurrentVersion'" + return +fi +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +# Camino del fichero de registro. +FILE=$(ogGetHivePath "$1" "$2") || return $? + +# Devolver la lista de claves de registro. +chntpw "$FILE" << EOT 2>/dev/null | awk 'BEGIN {FS="[<>]"} $1~/^ $/ {print $2}' +ls $3 +q +EOT +} + + +#/** +# ogListRegistryValues path_mountpoint str_hive str_key +#@brief Lista los nombres de valores de una determinada clave del registro de Windows. +#@param path_mountpoint directorio donde está montado el sistema Windows +#@param str_hive sección del registro +#@param str_key clave de registro +#@return str_value ... - lista de valores +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado. +#@note hive = { default, sam, security, software, system, components } +#@warning Requisitos: chntpw, awk +#@warning El sistema de archivos de Windows debe estar montado previamente. +#@version 1.0.1 - Nueva función. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-26 +#*/ ## +function ogListRegistryValues () +{ +# Variables locales. +local FILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_key" \ + "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\Windows\CurrentVersion'" + return +fi +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Camino del fichero de registro. +FILE=$(ogGetHivePath "$1" "$2") || return $? + +# Devolver la lista de claves de registro. +chntpw "$FILE" << EOT 2>/dev/null | awk 'BEGIN {FS="[<>]"} $1~/REG_/ {print $2}' +ls $3 +q +EOT +} + + +#/** +# ogSetRegistryValue path_mountpoint str_hive str_valuename str_valuedata +#@brief Establece el dato asociado a un valor del registro de Windows. +#@param path_mountpoint directorio donde está montado el sistema Windows +#@param str_hive sección del registro +#@param str_valuename nombre del valor de registro +#@param str_valuedata dato del valor de registro +#@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado. +#@note hive = { default, sam, security, software, system, components } +#@warning Requisitos: chntpw +#@warning El sistema de archivos de Windows debe estar montado previamente. +#@version 0.9 - Adaptación para OpenGNSys. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2009-09-24 +#*/ ## +function ogSetRegistryValue () +{ +# Variables locales. +local FILE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive str_valuename str_data" + "$FUNCNAME /mnt/sda1 SOFTWARE '\Microsoft\NewKey\Value1' 1" + return +fi +# Error si no se reciben 4 parámetros. +[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $? +# Camino del fichero de registro. +FILE=$(ogGetHivePath "$1" "$2") || return $? + +# Cambiar el dato del valor de registro. +chntpw "$FILE" << EOT &>/dev/null +ed $3 +$4 +q +y +EOT +} + diff --git a/client/engine/String.lib b/client/engine/String.lib index a81e3b07..a81e3b07 100644..100755 --- a/client/engine/String.lib +++ b/client/engine/String.lib diff --git a/client/engine/System.lib b/client/engine/System.lib index 9973b596..020692d5 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. @@ -104,23 +121,26 @@ basename $(ps hlp $PPID | awk '{if ($13~/bash/ && $14!="") print $14; # ogIsRepoLocked #@brief Comprueba si el repositorio está siendo usado (tiene ficheros abiertos). #@param No. -#@return Código de salida: 0 - sin bloquear (libre), 1 - bloqueado. +#@return Código de salida: 0 - bloqueado, 1 - sin bloquear o error. #@version 0.10 - Primera versión para OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2011-01-17 +#@version 1.0.1 - Devolver falso en caso de error. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2011-05-18 #*/ -function ogIsRepoLocked () { - +function ogIsRepoLocked () +{ # Variables locales. local f FILES # No hacer nada, si no está definido el punto de montaje del repositorio. -[ -z "$OGIMG" ] && return +[ -z "$OGIMG" ] && return 1 # Comprobar si alguno de los ficheros abiertos por los procesos activos está en el # punto de montaje del repositorio de imágenes. FILES=$(for f in /proc/[0-9]*/fd/*; do readlink -f "$f"; done | grep "^$OGIMG") # */ (comentario Doxygen) -[ -n "$FILES" ] +test -n "$FILES" } diff --git a/client/shared/etc/init/default.sh b/client/shared/etc/init/default.sh index fe43dacc..51f31dc0 100755 --- a/client/shared/etc/init/default.sh +++ b/client/shared/etc/init/default.sh @@ -3,7 +3,8 @@ # TODO Separar esta sección en otro script # Lanzar servicios complementarios del cliente. echo -ne "og\nog\n" | passwd root -/etc/init.d/ssh restart +#Compatibilidad ssh con el boot-tools 1.0.2 +/etc/init.d/ssh restart || /usr/sbin/sshd #setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1 ethtool -s $DEVICE wol g 2>/dev/null diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf index 061ccef8..305ed9c9 100644 --- a/client/shared/etc/lang.es_ES.conf +++ b/client/shared/etc/lang.es_ES.conf @@ -14,7 +14,7 @@ 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_CACHESIZE="El espacio de la cache local o remota no es suficiente" 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" @@ -63,6 +63,8 @@ MSG_MAKELINKS="Crear enlaces simbólicos." MSG_MOUNTREPO="Montar repositorio por %s en modo %s." MSG_OFFLINEMODE="Modo de arranque sin conexión." +MSG_HELP_ogAddRegistryKey="Añade una nueva clave al registro de Windows." +MSG_HELP_ogAddRegistryValue="Añade un nuevo valor al registro de Windows." MSG_HELP_ogBoot="Arranca un sistema operativo instalado." MSG_HELP_ogCalculateChecksum="Calcula la suma de comprobación (checksum) de un fichero." MSG_HELP_ogCheckFs="Comprueba la consistencia de un sistema de archivos." @@ -73,6 +75,8 @@ MSG_HELP_ogCreateImage="Genera una imagen exacta de un sistema operativo instala MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)." MSG_HELP_ogCreatePartitions="Define la estructura de particiones de un disco." MSG_HELP_ogDeleteFile="Borra un fichero de un espacio de almacenamiento." +MSG_HELP_ogDeleteRegistryKey="Borra una clave vacÃa del registro de Windows." +MSG_HELP_ogDeleteRegistryValue="Borra un valor del registro de Windows." MSG_HELP_ogDeleteTree="Borra un árbol de directorios de un espacio de almacenamiento." MSG_HELP_ogDevToDisk="Devuelve el nº de orden de dicso o de partición correspondiente al camino del fichero de dispositivo." MSG_HELP_ogDiskToDev="Devuelve el camino del fichero de dispositivo correspondiente al nº de orden de dicso o de partición." @@ -82,10 +86,12 @@ MSG_HELP_ogFindCache="Indica la partición reservada para caché local." MSG_HELP_ogFormat="Formatea o reformatea un sistema de archivos." MSG_HELP_ogFormatCache="Formatea (inicia) el sistema de caché local." MSG_HELP_ogFormatFs=$MSG_HELP_ogFormat +MSG_HELP_ogGetArch="Devuelve el tipo de arquitectura del cliente." MSG_HELP_ogGetCacheSize="Devuelve el tamaño de la partición de caché local." MSG_HELP_ogGetCacheSpace="Devuelve el espacio máximo disponible que puede ser reservado para la partición de caché local." MSG_HELP_ogGetFsSize="Devuelve el tamaño de un sistema de archivos." MSG_HELP_ogGetFsType="Devuelve el mnemónico de tipo de sistema de archivos." +MSG_HELP_ogGetHivePath="Devuelve el camino completo del fichero de una sección del registro de Windows." MSG_HELP_ogGetHostname="Devuelve el nombre de la máquina local." MSG_HELP_ogGetIpAddress="Devuelve la dirección IP del cliente." MSG_HELP_ogGetImageSize="Devuelve el tamaño de una imagen de sistema." @@ -100,20 +106,25 @@ MSG_HELP_ogGetPartitionSize="Devuelve el tamaño de una partición." MSG_HELP_ogGetPartitionType="Devuelve el mnemónico de tipo de una partición." MSG_HELP_ogGetPath="Devuelve el camino completo de un fichero de sistema OpenGnSys." MSG_HELP_ogGetRegistryValue="Devuelve el dato de un valor del registro de Windows." +MSG_HELP_ogGetRepoIp="Devuelve la dirección IP del repositorio de datos." +MSG_HELP_ogGetServerIp="Devuelve la dirección IP del servidor principal." MSG_HELP_ogGetWindowsName="Devuelve el nombre del cliente guardado en el registro de Windows." MSG_HELP_ogHelp="Muestra mensajes de ayudas para las funciones." MSG_HELP_ogHidePartition="Oculta una partición de Windows." MSG_HELP_ogIdToType="Devuelve el mnemónico asociado al identificador de tipo de partición." +MSG_HELP_ogIsFormated="Comprueba si un sistema de archivos está formateado." MSG_HELP_ogIsLocked="Comprueba si una partición está bloqueada por una operación de uso exclusivo." MSG_HELP_ogIsImageLocked="Comprueba si una imagen está bloqueada por una operación de uso exclusivo." MSG_HELP_ogIsPartitionLocked=$MSG_HELP_ogIsLocked -MSG_HELP_ogIsMounted="Comprueba si un sistema operativo está montado." -MSG_HELP_ogIsNewerFile="Comprueba si un fichero es más nuevo (se modificado después) que otro." +MSG_HELP_ogIsMounted="Comprueba si un sistema de archivos está montado." +MSG_HELP_ogIsNewerFile="Comprueba si un fichero es más nuevo (se ha modificado después) que otro." MSG_HELP_ogIsValidType="Comprueba si el tipo de sistema de archivos es válido para un identificador de partición." MSG_HELP_ogLinuxBootParameters="Devuelve los parámetros de arranque de un sistema operativo Linux instalado." MSG_HELP_ogListHardwareInfo="Lista el inventario de dispositivos del cliente." MSG_HELP_ogListPartitions="Lista la estructura de particiones de un disco." -MSG_HELP_ogListRegistryKeys="Lista los nombres de las claves incluidas en una clave del registro de Windows." +MSG_HELP_ogListRegistryKeys="Lista los nombres de las subclaves incluidas en una clave del registro de Windows." +MSG_HELP_ogListRegistryValues="Lista los nombres de los valores incluidos en una clave del registro de Windows." +MSG_HELP_ogListSoftware="Lista el inventario de programas instalados en un sistema operativo." MSG_HELP_ogLock="Bloquea una partición para operación de uso exclusivo." MSG_HELP_ogLockImage="Bloquea una imagen para operación de uso exclusivo." MSG_HELP_ogLockPartition=$MSG_HELP_ogLock diff --git a/client/shared/lib/grub4dos/badgrub.exe b/client/shared/lib/grub4dos/badgrub.exe Binary files differindex 3cd26a61..92b924d2 100644 --- a/client/shared/lib/grub4dos/badgrub.exe +++ b/client/shared/lib/grub4dos/badgrub.exe diff --git a/client/shared/lib/grub4dos/bootlace.com b/client/shared/lib/grub4dos/bootlace.com Binary files differindex 199831f6..58ae01f9 100755..100644 --- a/client/shared/lib/grub4dos/bootlace.com +++ b/client/shared/lib/grub4dos/bootlace.com diff --git a/client/shared/lib/grub4dos/grldr b/client/shared/lib/grub4dos/grldr Binary files differindex a31e27bd..16ed4c77 100644 --- a/client/shared/lib/grub4dos/grldr +++ b/client/shared/lib/grub4dos/grldr diff --git a/client/shared/lib/grub4dos/grldr.mbr b/client/shared/lib/grub4dos/grldr.mbr Binary files differindex 6130129d..7af7ed3c 100644 --- a/client/shared/lib/grub4dos/grldr.mbr +++ b/client/shared/lib/grub4dos/grldr.mbr diff --git a/client/shared/lib/grub4dos/grub.exe b/client/shared/lib/grub4dos/grub.exe Binary files differindex 8df2433f..57b890d2 100644 --- a/client/shared/lib/grub4dos/grub.exe +++ b/client/shared/lib/grub4dos/grub.exe diff --git a/client/shared/lib/grub4dos/menu.lst b/client/shared/lib/grub4dos/menu.lst deleted file mode 100644 index e7641534..00000000 --- a/client/shared/lib/grub4dos/menu.lst +++ /dev/null @@ -1,83 +0,0 @@ -# This is a sample menu.lst file. You should make some changes to it.
-# The old install method of booting via the stage-files has been removed.
-# Please install GRLDR boot strap code to MBR with the bootlace.com
-# utility under DOS/Win9x or Linux.
-
-color black/cyan yellow/cyan
-timeout 30
-default /default
-
-title find and load NTLDR of Windows NT/2K/XP
-fallback 1
-find --set-root /ntldr
-chainloader /ntldr
-savedefault --wait=2
-
-title find and load CMLDR, the Recovery Console of Windows NT/2K/XP
-fallback 2
-find --set-root /cmldr
-chainloader /cmldr
-#####################################################################
-# write string "cmdcons" to memory 0000:7C03 in 2 steps:
-#####################################################################
-# step 1. Write 4 chars "cmdc" at 0000:7C03
-write 0x7C03 0x63646D63
-# step 2. Write 3 chars "ons" and an ending null at 0000:7C07
-write 0x7C07 0x00736E6F
-savedefault --wait=2
-
-title find and load IO.SYS of Windows 9x/Me
-fallback 3
-find --set-root /io.sys
-chainloader /io.sys
-savedefault --wait=2
-
-title find and boot Mandriva with menu.lst already installed
-fallback 4
-find --set-root /etc/mandriva-release
-savedefault --wait=2
-configfile /boot/grub/menu.lst
-
-title find and boot Linux with menu.lst already installed
-fallback 5
-find --set-root /sbin/init
-savedefault --wait=2
-configfile /boot/grub/menu.lst
-
-title commandline
-savedefault --wait=2
-commandline
-
-title floppy (fd0)
-chainloader (fd0)+1
-rootnoverify (fd0)
-savedefault --wait=2
-
-title back to dos
-savedefault --wait=2
-quit
-
-title reboot
-savedefault --wait=2
-reboot
-
-title halt
-savedefault --wait=2
-halt
-
-title memdrive duplicated from floppy image file (hd0,0)/sbm.bin
-map --mem (hd0,0)/sbm.bin (fd0)
-map --hook
-chainloader (fd0)+1
-rootnoverify (fd0)
-savedefault --wait=2
-
-title memdrive based on win98 partition (hd0,6)
-map --mem (hd0,6)+1 (hd0)
-# map --mem (hd0,0)/win98.gz (hd0)
-map --hook
-chainloader (hd0)+1
-rootnoverify (hd0)
-savedefault --wait=2
-
-
diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster index a7a5e11b..6516b587 100755 --- a/client/shared/scripts/cloneRemoteFromMaster +++ b/client/shared/scripts/cloneRemoteFromMaster @@ -44,12 +44,29 @@ #@version 1.0 - control de errores para el ogAdmServer #@author Antonio J. Doblas Viso. Universidad de Malaga. #@date 2011/04/24 +#@version 1.0 - Uso de parted para controlar tamaño particion destino. Requiere Formateo FS previo -parted usa FS para el tamanyo". +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2011/04/24 +#@version 1.0.1 - Se elimina la operación de reducir la particion. +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2011/05/16 + #*/ ## +#test 1. cliente sin particiones. Detectado TODO: crear estrucutras de particiones +#test 2. cliente con particion mas pequeña. Detectado. +#test 3. cleinte con particion destinio no formateado. Detectado. +#test 4. cliente con particion destino ocupado por el usuario pwd . FALLO. +#test 5. master sin origen particion. +#test 6. master sin origen fichero. + + + +trap "pkill faucet; exit 1" 0 1 2 3 6 9 14 15 TIME1=$SECONDS PROG="$(basename $0)" -if [ $# -lt 1 ]; then +if [ $# -lt 1 -o "$1" == "help" ]; then echo "cloneRemoteFromMaster ipmaster disk init [MULTICAST|UNICAST] session disk part tool comp" exit 1 fi @@ -76,7 +93,10 @@ case $PROTOCOL in UNICAST|unicast) SESSIONUCASTSERVER=$5 SESSIONUCASTCLIENT=`echo $5 | awk -F: '{print $1}'`:$MASTERIP - ;; + ;; + *) + exit $(ogRaiseError $OG_ERR_FORMAT "Protocolo $PROTOCOL no soportado en esta operacion"; echo $?) + ;; esac # contenedor destino (disco particion) DISKTARGET=$6 @@ -102,29 +122,36 @@ case $MASTERIP in ogRaiseError $OG_ERR_NOTFOUND "$2 $3"; exit $? fi echo $MODEMASTER - # Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE} - + # Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE} case "$MODEMASTER" in SENDPARTITION) echo "[5] Master en modo $MODEMASTER: informacion inicial a los clientes-slaves" - faucet 4000 --out echo "WORKING" & + if ps aux | grep -v grep | grep "faucet 4000" + then + ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 118"; exit $? + else + faucet 4000 --out echo "WORKING" & + fi echo "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE" - ogUnmount $2 $3 || exit $? - echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" + ogUnmount $2 $3 || exit $(ogRaiseError $OG_ERR_LOCKED "no se puede desmontar $2 $3 l124"; echo $?) #Obtener tamaño de la partición. - SIZE=$(ogGetPartitionSize $2 $3) - # Reducir el sistema de archvios. - ogReduceFs $2 $3 || exit $? - REDSIZE=$(ogGetFsSize $2 $3) + SIZE=$(ogGetPartitionSize $2 $3) || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar tamaño partcion $2 $3 l127"; echo $?) + echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" + ogReduceFs $2 $3 || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al reducir el FS $2 $3 l129"; echo $?) + REDSIZE=$(ogGetFsSize $2 $3) || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar el nuevo FS $2 $3 l130"; echo $?) 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 + #if [ $REDSIZE -lt $SIZE ]; then + # echo "[24] Redimensionar partición a $REDSIZE KB." + # ogSetPartitionSize $2 $3 $REDSIZE + #fi 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" & - + if ps aux | grep -v grep | grep "faucet 4000" + then + ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 140"; exit $? + else + faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" & + fi case $PROTOCOL in MULTICAST|multicast) echo "[29] ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR" @@ -137,22 +164,34 @@ case $MASTERIP in ;; esac - if [ $REDSIZE -lt $SIZE ]; then - echo "[85] Redimensionar partición a $SIZE KB." - ogSetPartitionSize $2 $3 $SIZE + #if [ $REDSIZE -lt $SIZE ]; then + # echo "[85] Redimensionar partición a $SIZE KB." + # ogSetPartitionSize $2 $3 $SIZE echo "[90] Extender sistema de archivos." ogExtendFs $2 $3 - fi + #fi pkill faucet + if [ $RETVAL == 0 ] + then + exit 0 + else + exit $(ogRaiseError $OG_ERR_MCASTSENDPARTITION "Error al enviar la particion $2 $3 con protocolo $PROTOCOL l167"; echo $?) + fi + ;; 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) + TOOLCLONE=$(ogGetImageProgram $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "TOOLCLONE no detectado l174"; echo $?) + COMPRESOR=$(ogGetImageCompressor $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "COMPRESOR NO DETECTADO l175"; echo $?) + REDSIZE=$(ogGetImageSize $2 $3) || exit $(ogRaiseError $OG_ERR_LOCKED "REDSIZE NO DETECTADO l176"; echo $?) 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" & + if ps aux | grep -v grep | grep "faucet 4000" + then + ogRaiseError $OG_ERR_NOTFOUND "MASTER: puerto en uso: 140"; exit $? + else + faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" & + fi case $PROTOCOL in MULTICAST|multicast) echo "[29] ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER " @@ -165,15 +204,27 @@ case $MASTERIP in ;; esac pkill faucet + if [ $RETVAL == 0 ] + then + exit 0 + else + exit $(ogRaiseError $OG_ERR_MCASTSENDFILE "Error al enviar la image $2 $3.img con protocolo $PROTOCOL l200"; echo $?) + fi ;; esac - #exit $RETVAL - exit 0 # FIN Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE} ;; *) - echo "[1] Equipo -Client- preparando para recibir datos" - ogUnmount $DISKTARGET $PARTTARGET || exit $? + echo "[1] Equipo -Client- preparando para recibir datos $PROTOCOL" + ogDiskToDev $DISKTARGET $PARTTARGET &>/dev/null || exit $(ogRaiseError $OG_ERR_LOCKED "El cliente no tiene esas particiones $DISKTARGET $PARTTARGET l211"; echo $?) + # TODO: si el cliente no está en la lista de clientes UNICAST salir. + case $PROTOCOL in + UNICAST|unicast) + echo "$SESSIONUCASTSERVER" | grep $HOSTIP || exit $(ogRaiseError $OG_ERR_PROTOCOLJOINMASTER "Este cliente no pertence a la sesion UNICAST l214"; echo $?) + ;; + esac + echo "[2] Desmontando particion destino" + ogUnmount $DISKTARGET $PARTTARGET || exit $(ogRaiseError $OG_ERR_LOCKED "no se puede desmontar la particion destino $2 $3 l218"; echo $?) echo -n "[25] Buscando informacion extra sobre la clonacion con el master $MASTERIP: " sleep 10 TIMEWAITMASTER=120 @@ -183,9 +234,9 @@ case $MASTERIP in do INFOEXTRA=`hose $MASTERIP 4000 --in cat 2>/dev/null` sleep 10; echo -n "." - #Si no consigue conectar con Master, comienza el timeout $TIMEWAITMASTER para abortar + echo comienza el timeout $TIMEWAITMASTER para abortar [ -z "$INFOEXTRA" ] && let TIMEWAITMASTER=$TIMEWAITMASTER-10 - [ "$TIMEWAITMASTER" -gt "0" ] || ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " " || exit $? + [ "$TIMEWAITMASTER" -gt "0" ] || exit $(ogRaiseError $OG_ERR_PROTOCOLJOINMASTER " l230 "; echo $?) #Si primer parametro desde el server es READY, salimos del bucle GETINFO=$(echo $INFOEXTRA | awk '{print $1}') [ "$GETINFO" == "READY" ] && GETINFO=OK @@ -194,36 +245,29 @@ case $MASTERIP in 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 " + echo -n "[26] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " + ogMount $DISKTARGET $PARTTARGET || ogFormat $DISKTARGET $PARTTARGET + SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | awk '{y=x; x=$4};END{print y}' | tr -d kB) + echo "[29] 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. - SIZEPARTTARGET=$(ogGetPartitionSize $DISKTARGET $PARTTARGET) if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ] then echo "[30] Iniciando Cliente $PROTOCOL " case $PROTOCOL in MULTICAST|multicast) echo ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR - ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $? - ;; + ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $(ogRaiseError $OG_ERR_MCASTRECEIVERPARTITION " l251 "; echo $?) + ;; UNICAST|unicast) echo ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR - ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $? + ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $(ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION " l230 "; echo $?) ;; - esac - - - echo "[90] Extender sistema de archivos" - ogExtendFs $DISKTARGET $PARTTARGET - # Cambiar nombre en sistemas Windows. - if [ "$(ogGetOsType $DISKTARGET $PARTTARGET)" = "Windows" ]; then - HOST=$(ogGetHostname) - HOST=${HOST:-"UNKNOWN"} - echo "[90] Cambiar nombre Windows a \"$HOST\"." - ogSetWindowsName $DISKTARGET $PARTTARGET "$HOST" - fi + esac + echo "[90] llamando a configureOS $DISKTARGET $PARTTARGET" + configureOs $DISKTARGET $PARTTARGET else # 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 $? + ogRaiseError $OG_ERR_IMGSIZEPARTITION "ERROR tamanio particion= $SIZEPARTTARGET menor que la imagen= $SIZEIMAGE"; exit $? fi ;; esac diff --git a/client/shared/scripts/configureOs b/client/shared/scripts/configureOs new file mode 100755 index 00000000..64249c9b --- /dev/null +++ b/client/shared/scripts/configureOs @@ -0,0 +1,46 @@ +#!/bin/bash + +#/** +# configureOS +#@brief Scirpt de ejemplo para realizar la configuracion del sistema operativo restaurado. +#@brief (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin). +#@param 1 disco +#@param 2 particion +#@return +#@TODO comprobar que el tipo de particion corresponde con el sistema de archivos. +#@exception OG_ERR_FORMAT # 1 formato incorrecto. +#@version 1.0.1 - Integracion cambio de nombre, extender fs, chequear particion activa +#@author +#@date 2011-05-11 +#@version 1.0.1 - Configura el sector de la particion y el gestor de windows para iniciarse desde cualquier particion. +#@author Antonio J. Doblas Viso. Universidad de Malaga. +#@date 2011-05-20 + + + +# Si el sistema de archivos no esta extendido. Realizar. +PARTSIZE=$(ogGetPartitionSize $1 $2) +FSSIZE=$(ogGetFsSize $1 $2) +if [ $FSSIZE -lt $PARTSIZE ]; then + echo "Extender sistema de archivos." + ogExtendFs $1 $2 +fi + +#Si no existe particion activa, activar este sistema. +FLAGACTIVE=$(ogGetPartitionActive $1) +[ -z $FLAGACTIVE ] && ogSetPartitionActive $1 $2 + +# Cambiar nombre en sistemas Windows y quitar usuario de acceso por defecto. +if [ "$(ogGetOsType $1 $2)" = "Windows" ]; then + HOST=$(ogGetHostname) + HOST=${HOST:-"pc"} + echo " Cambiar nombre Windows a \"$HOST\" " + ogSetWindowsName $1 $2 "$HOST" + #ogSetWinlogonUser $1 $2 " " # Descomentar para cambiar usuario de inicio. + # Configurar el boot sector de la particion windows. + ogFixBootSector $1 $2 + # Configura el gestor de arranque de windows xp vista seven + ogWindowsBootParameters $1 $2 + # Registra en windows que la particion indicada es su nueva unidad c:\ + ogWindowsRegisterPartition $1 $2 C $1 $2 +fi
\ No newline at end of file diff --git a/client/shared/scripts/createImage b/client/shared/scripts/createImage index 8e98113a..3643d1af 100755 --- a/client/shared/scripts/createImage +++ b/client/shared/scripts/createImage @@ -1,6 +1,39 @@ #!/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 # 1 formato incorrecto. +#@exception OG_ERR_PARTITION # 3 Error en partición de disco o en su sistema de archivos +#@exception OG_ERR_IMAGE # 5 Error en funcion ogCreateImage o ogRestoreImage. +#@exception OG_ERR_NOTWRITE # 14 error de escritura +#@exception OG_ERR_NOTCACHE # 15 si cache no existe 15 +#@exception OG_ERR_CACHESIZE # 16 si espacio de la cache local o remota no tiene espacio 16 +#@exception OG_ERR_REDUCEFS # 17 error al reducir sistema de archivos. +#@exception OG_ERR_EXTENDFS # 18 Errror al expandir el sistema de archivos. +#@note +#@todo: que hacer, si el tamaño de la cache es sufciente, pero no tiene espacio libre +#@todo: que hacer, si hay una imagen con igual nombre en la cache +#@version 1.0 - control de errores para el ogAdmServer +#@author +#@date 2011-04-10 +#@version 1.0.1 - Fin de control de errores para el ogAdmServer +#@author +#@date 2011-05-10 + +#*/ ## + +# Test 1. crear una imagen en un REPO sin espacio libre. +# test 2. crear una imagen en un REPO en modo solo lectura. +# test 3. intentar crear una imagen en la cache de un equipo que no la disponga. +# test 4. crear una imagen en la Cache sin espacio sufiente. +# test 5. intentar crear una imagen, en la que no se puede reducir el FS. TIME1=$SECONDS PROG="$(basename $0)" @@ -16,20 +49,22 @@ 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" - exit $? - fi + ! ogFindCache >/dev/null && exit $(ogRaiseError $OG_ERR_NOTCACHE "CACHE "; echo $?) fi # Obtener información de los parámetros de entrada. -PART=$(ogDiskToDev "$1" "$2") || exit $? +PART=$(ogDiskToDev "$1" "$2" 2>/dev/null) || exit $(ogRaiseError $OG_ERR_PARTITION "$1 $2"; echo $?) + +#Comprobamos acceso de escritura. +DIRTEMP=$(date +%Y%m%d-%H%M%S) +ogMakeDir $3 /$4$DIRTEMP 2>/dev/null || exit $(ogRaiseError $OG_ERR_NOTWRITE "$3"; echo $?) && ogDeleteTree $3 /$4$DIRTEMP + IMGDIR=$(ogGetParentPath "$3" "/$4") # Si no existe, crear subdirectorio de la imagen. if [ $? != 0 ]; then echo "[5] Crear subdirectorio de la imagen \"$3 $(dirname "$4")." - ogMakeDir "$3" $(dirname "/$4") - IMGDIR=$(ogGetParentPath "$3" "/$4") || exit $? + ogMakeDir "$3" $(dirname "/$4") || exit $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?) + IMGDIR=$(ogGetParentPath "$3" "/$4") || exit $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?) fi IMGFILE=$IMGDIR/$(basename "/$4").$IMGEXT # Renombrar el fichero de imagen si ya existe. @@ -38,24 +73,47 @@ if [ -f "$IMGFILE" ]; then mv "$IMGFILE" "$IMGFILE.ant" mv "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null fi + +#Comprobar espacio que requerira la imagen para ser almacenada +if ogMount $1 $2 &>/dev/null +then + SIZEDATA=$(df -k | grep $PART | awk '{print $3}') + #Aplicar factor de compresion + FACTORGZIP=55/100 + FACTORLZOP=65/100 + let SIZEREQUIRED=$SIZEDATA*$FACTORLZOP + #Comprobar espacio libre en el contenedor. + [ "$3" == "CACHE" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`) + [ "$3" == "REPO" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $3}') +else + ogRaiseError $OG_ERR_PARTITION "$1 $2" + exit $? +fi + # Mostrar información. echo "[15] $PROG: Origen=$PART, Destino=$IMGFILE" +echo "[16] $PROG: TamañoRequerido=$SIZEREQUIRED EspacioDisponible=$SIZEFREE" + +[ "$SIZEREQUIRED" -gt "$SIZEFREE" ] && exit $(ogRaiseError $OG_ERR_CACHESIZE "$3" || echo $?) + + +# TODO: que hacer si la cache no tiene espacio libre. # Comprobar consistencia del sistema de archivos. echo "[20] Comprobar sistema de archivos." ogUnmount $1 $2 -ogCheckFs $1 $2 +ogCheckFs $1 $2 || exit $(ogRaiseError $OG_ERR_PARTITION "ogCheckFs $1 $2" && echo $?) echo "[30]: Reducir sistema de archivos." -ogReduceFs $1 $2 || exit 1 +ogReduceFs $1 $2 || exit $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; echo $?) # Crear la imagen. -echo "[40] Crear imagen." -ogCreateImage $1 "$2" $3 $4 "$IMGPROG" "$IMGCOMP" || exit $? -#ogCreateImage $1 "$2" $3 $4 || exit $? +echo "[40] Crear imagen con: ogCreateImage $1 $2 $3 $4 $IMGPROG $IMGCOMP" +ogCreateImage $1 "$2" $3 $4 "$IMGPROG" "$IMGCOMP" || exit $(ogRaiseError $OG_ERR_IMAGE "ogCreteImage"; echo $?) echo "[90] Extender sistema de archivos." -ogExtendFs $1 $2 +ogExtendFs $1 $2 || exit $(ogRaiseError $OG_ERR_EXTENDFS "$1 $2"; echo $?) + TIME=$[SECONDS-TIME1] echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" diff --git a/client/shared/scripts/deployImage b/client/shared/scripts/deployImage index 15392ec7..16a403cc 100755 --- a/client/shared/scripts/deployImage +++ b/client/shared/scripts/deployImage @@ -8,13 +8,20 @@ if [ $# -lt 4 ]; then fi #controlar param1 REPO - +echo "Realizando un updateCache REPO $2.img $5 $6" updateCache REPO $2.img $5 $6 -if [ $? != "0" ] +RETVAL=$? +if [ "$RETVAL" != "0" ] then - echo "fin del updateCache REPO $2.img $5 $6 con errores" - exit 1 + echo "fin del updateCache REPO $2.img $5 $6 con error $RETVAL" + # RC=15 No hay cache + # RC=16 no hay espacio sufiente + exit $RETVAL + else - echo "comenzamos con restoreImage CACHE $2 $3 $4" - restoreImage CACHE $2 $3 $4 + echo "iniciando un ogRestore CACHE desde deployImage" + ogRestoreImage CACHE /$2 $3 $4 + RETVAL=$? + [ "$RETVAL" == "0" ] && configureOs $3 $4 + exit $RETVAL fi
\ No newline at end of file diff --git a/client/shared/scripts/generateMenuDefault b/client/shared/scripts/generateMenuDefault new file mode 100755 index 00000000..0437cd3d --- /dev/null +++ b/client/shared/scripts/generateMenuDefault @@ -0,0 +1,30 @@ +#ª/bin/bash + +source /tmp/net-eth0.conf +FILEINFOHTML=/opt/opengnsys/log/`ogGetIpAddress`.info.html + +SPEED=$(ethtool $DEVICE | grep Speed | awk -F": " '{print $2}') +DUPLEX=$(ethtool $DEVICE | grep Duplex | awk -F": " '{print $2}') + +# +# echo ''; +# + +cat > $FILEINFOHTML << EOF +<div align="center" style="font-family: Arial, Helvetica, sans-serif;">' +<p style="color:#999999; font-size: 16px; margin: 2em;"> + +<table border=1> +<tr> +<TD rowspan=2><P align=left><IMG border=0 src="../images/iconos/logoopengnsys.png"><P> </td> +<td> Hostname: </td> <td> IP </td> <td> MAC </td> <td> Speed </td> <td> duplex </td> </tr> +<tr> <td> $HOSTNAME </td> <td> $(ogGetIpAddress) </td> <td> $(ogGetMacAddress) </td> <td> $SPEED </td> <td> $DUPLEX </td> </tr> +</table> + + +</p> +<p style="font-size: 14px; margin: 2em;"> +</p> +</div> + +EOF
\ No newline at end of file diff --git a/client/shared/scripts/updateBootCache b/client/shared/scripts/updateBootCache new file mode 100755 index 00000000..af2267a2 --- /dev/null +++ b/client/shared/scripts/updateBootCache @@ -0,0 +1,7 @@ +#!/bin/bash +OGBTFTP="/opt/og2fs/tftpboot/ogclient/" +ogMountCache || exit 1 +echo $OGCAC +[ -d $OGCAC/boot ] || mkdir -p $OGCAC/boot +[ -f ${OGCAC}/boot/ogvmlinuz ] || cp ${OGBTFTP}ogvmlinuz ${OGCAC}/boot/ogvmlinuz +[ -f ${OGCAC}/boot/oginitrd.img ] || cp ${OGBTFTP}oginitrd.img ${OGCAC}/boot/oginitrd.img
\ No newline at end of file diff --git a/client/shared/scripts/updateCache b/client/shared/scripts/updateCache index f6f61e34..bebb1153 100755 --- a/client/shared/scripts/updateCache +++ b/client/shared/scripts/updateCache @@ -14,7 +14,7 @@ PROG="$(basename $0)" -if [ $# -lt 4 ]; then +if [ $# -lt 3 ]; then ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG str_REPO _str_Relative_Path_OGIMG_with_/ PROTOCOLO OPCIONES_PROTOCOLO OPCIONES_UPDATECACHE" exit $? fi @@ -26,13 +26,17 @@ REPOIP=$(ogGetRepoIp) echo $REPOSITORIO $REPOIP $PROTOCOLO $OPTPROTOCOLO # Si el repositorio local CACHE no existe salimos. if ! $(ogFindCache >/dev/null); then - ogRaiseError $OG_ERR_NOTFOUND "CACHE" + ogRaiseError $OG_ERR_NOTCACHE "CACHE" exit $? fi #Comprobamos si Actualizacion - existe una imagen con igual nombre pero distinto sum- #TODO: ogUpdateCacheIsNecesary debe borrar la imagen que tenga igual nombre pero distinto sum- -ogUpdateCacheIsNecesary $1 $2 || exit 0 +ogUpdateCacheIsNecesary $1 $2; RETVAL=$? +# si RETVAL=0 => actualizamos si RETVAL=1 no actaulizasmo-exit 0 || si RETVAL>2 exit 1 +[ "$RETVAL" == "1" ] && exit 0 +[ "$RETVAL" -gt "1" ] && exit 1 + CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`) FILESIZE=$(ls -sk $(ogGetPath $1 $2) | cut -f1 -d" ") @@ -40,10 +44,14 @@ FILESIZE=$(ls -sk $(ogGetPath $1 $2) | cut -f1 -d" ") if [ "$FILESIZE" -ge "$CACHESIZEFREE" ] then echo "el tamanio del fichero $2 = $FILESIZE es mayor que el espacio dispinible en la cache = $CACHESIZEFREE" - exit 1 + ogRaiseError $OG_ERR_CACHESIZE "CACHE" + exit $? fi -ogUpdateCacheIsNecesary $1 $2 || exit 0 +ogUpdateCacheIsNecesary $1 $2; RETVAL=$? +# si RETVAL=0 => actualizamos si RETVAL=1 no actaulizasmo-exit 0 || si RETVAL>2 exit 1 +[ "$RETVAL" == "1" ] && exit 0 +[ "$RETVAL" -gt "1" ] && exit 1 ogMountCache @@ -96,18 +104,13 @@ case "$PROTOCOLO" in ;; unicast | UNICAST ) echo "unicast" + ogCopyFile $1 $2 $OGCAC$OGIMG ;; esac -if ogUpdateCacheIsNecesary $1 $2 -then - echo "algo ha fallado" - exit 1 -else - echo "updateCache ok" - exit 0 -fi - - -#
\ No newline at end of file +ogUpdateCacheIsNecesary $1 $2; RETVAL=$? +# si RETVAL=0 => actualizamos si RETVAL=1 no actaulizasmo-exit 0 || si RETVAL>2 exit 1 +[ "$RETVAL" == "0" ] && exit 1 +[ "$RETVAL" == "1" ] && exit 0 +[ "$RETVAL" -gt "1" ] && exit 1
\ No newline at end of file diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt index 9a39fe56..a2d62241 100644 --- a/doc/CHANGELOG.es.txt +++ b/doc/CHANGELOG.es.txt @@ -2,6 +2,54 @@ LISTA DE CAMBIOS CHANGELOG.es.ext ======================================== +Lista de cambios incluidos en OpenGnSys 1.0.1 +--------------------------------------------- + +Tickets resueltos en módulo OpenGnSys Cloning Engine: +#147 No se puede iniciar Windows 7 (duplicado de #402) +#179 Cache.lib: funciones de arranque offline y distribuido +#373 Script cloneRemoteFromMaster se queda en bucle si no detecta máster +#380 Script updateCache debe eliminar imagen con igual nombre pero checksum distinto (duplicado de #394) +#389 Tamaño de partición menor que tamaño de sistema de archivos en proceso de restauración de imágenes +#391 Nuevo script configureOs +#392 Formatear sistema de archivos antes de restaurar +#396 Funciones tipo ogIs.... devuelven codigo 1, si no es cierto y si hay errores de sintaxis +#401 Ampliar las funciones de gestión del registro de Windows +#406 actualizar grub4dos +#407 Integrar las funciones de acceso al registro EAC + +Tickets resueltos en módulo OpenGnSys Client: +#16 Disminuir al máximo el tiempo de arranque normal de un cliente +#65 Realizar estudio arranque clientes desde caché (tarea) +#134 Arranque del cliente con GRUB +#135 Arreglar el arranque de Windows en SATA-2 con GRUB +#164 Depurar el instalador del ogclient (duplicado de #404) +#383 Initrd de boot-tools no gestiona bien los tiempos de configuración de la interfaz de red (duplicado de #404) +#395 ogclient PXE creado con boot-tools no reconoce NIC Atheros (duplicado de #404) + +Tickets resueltos en módulo OpenGnSys Server: +#357 Comando web restaurar imagen: intentar activar multicast y torrent + +Tickets resueltos en módulo OpenGnSys Web Admin Console: +#256 Restaurar con caché (duplicado de #357) +#357 Comando Restaurar admite protocolos P2P, multicast, unicast +#378 Asignar letrero auxiliar en el fondo del browser, indicando que no se apague el ordenador +#387 Opción reubicador de ordenadores, no soporta nombres de grupos de ordenadores que incluye espacios +#388 Netboot sobre grupo de aulas muestra ordenadores que no le corresponde +#390 Formulario de creación de objeto imagen no controla el nombre canonico +#409 Script updateCache integrado en asistente deployImagen + +Tickets resueltos en módulo OpenGnSys Installer: +#398 Script para crear fichero comprimido con el último código del proyecto +#399 Servicio ogAdmServer se bloqua, debe ser actualizado (duplicado de #400) +#400 Copiar desinstalador y actualizador +#408 No se actualiza correctamente el tftpboot +#412 Permisos Netboot para Grub4Dos + +Tickets genéricos resueltos: +#413 Integración de OpenGnSys 1.0.1 en rama principal + + Lista de cambios incluidos en OpenGnSys 1.0 ------------------------------------------- diff --git a/doc/INSTALL.es.txt b/doc/INSTALL.es.txt index 3a242b09..52ed63b8 100644 --- a/doc/INSTALL.es.txt +++ b/doc/INSTALL.es.txt @@ -1,5 +1,5 @@ -Instalación de OpenGnSys Server v 0.9 -===================================== +Instalación de OpenGnSys Server v 1.0.1 +======================================= Notas iniciales --------------- @@ -18,7 +18,13 @@ Requisitos mÃnimos de almacenamiento: Instalación ----------- -La instalación de OpenGnSys se realiza ejecutando el script de instalación opengnsys_installer.sh, el cual puede descargarse directamente de la dirección: http://www.opengnsys.es/browser/trunk/installer/opengnsys_installer.sh?format=txt +La instalación de OpenGnSys se realiza ejecutando el script de instalación opengnsys_installer.sh, el cual puede obtenerse descomprimiendo el fichero de la versión opengnsys-Version.tar.gz o descargándolo directamente de la dirección: http://www.opengnsys.es/browser/trunk/installer/opengnsys_installer.sh?format=txt + +Ejemplos de descompresión del programa: + + tar xvzf opengnsys-1.0.1.tar.gz + cd opengnsys/installer + Ejemplos de descarga con varias herramientas: @@ -28,9 +34,11 @@ Ejemplos de descarga con varias herramientas: * Descargar con curl. curl http://www.opengnsys.es/browser/trunk/installer/opengnsys_installer.sh?format=txt > opengnsys_installer.sh + El script debe ser ejecutado como usuario root: sudo bash opengnsys_installer.sh + Se realizan los siguientes procesos: * Obtenener los parámetros básicos de la red. * Comprobar los paquetes instalados. @@ -46,9 +54,38 @@ Se realizan los siguientes procesos: * Descargar la imagen inicial de OpenGnSys Client. * Configuración básica de los serviciios de OpenGnSys a partir de los parámetros de red. + Una vez finalizada la ejecución del instalador, puede empezarse a trabajar con el sistema: * Configurar DHCP. * Añadir datos en la consola de administración. * Personalizar scripts de administración. * Definir menús de inicio para los clientes. + + +Actualización +------------- + +Se dispone de un script de auto-actualización del sistema, con las siguientes caracterÃsticas: + * Es necesario conexión a Internet para obtener las últimas actualizaciones. + * No se actualizan los servicios asociados al sistema operativo. + * No se modifican los ficheros de configuración. + + +El script debe ser ejecutado como usuario root: + sudo /opt/opengnsys/lib/opengnsys_update.sh + + + +Desinstalación +-------------- + +También existe un script de desinstalación de los componentes de OpenGnSys, con las siguientes caracterÃsticas: + * Se iliminan los ficheros de OpenGnSys y su base de datos. + * No se eliminan ni paquetes del sistema operativo ni sus ficheros de configuración. + * No se elimina el directorio de las imágenes ni su contenido. + + +El script debe ser ejecutado como usuario root: + sudo /opt/opengnsys/lib/opengnsys_uninstall.sh + 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/README.es.txt b/installer/README.es.txt index 068c54dc..828a32cc 100644 --- a/installer/README.es.txt +++ b/installer/README.es.txt @@ -6,9 +6,11 @@ Este directorio contiene la documentación y los programas para instalar, actual eliminar el Proyecto OpenGnSys. -- INSTALL.es.txt información de instalación y desinistalación -- LICENSE.en.txt información de licencia de uso -- opengnsys_installer.sh programa de instalación del serviidor -- opengnsys_uninstall.sh programa de desinstalación del serviidor -- opengnsys_update.sh programa de actualización del serviidor +- INSTALL.es.txt información de instalación y desinistalación +- LICENSE.en.txt información de licencia de uso +- opengnsys_installer.sh programa de instalación del serviidor +- opengnsys_makecompress.sh programa para descargar la última revisión del proyecto + y generar un fichero comprimido +- opengnsys_uninstall.sh programa de desinstalación del serviidor +- opengnsys_update.sh programa de actualización del serviidor diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh index 13920b7c..d9b7bd99 100755 --- a/installer/opengnsys_installer.sh +++ b/installer/opengnsys_installer.sh @@ -551,15 +551,15 @@ function getNetworkSettings() function tftpConfigure() { - echoAndLog "${FUNCNAME}(): Configuring TFTP service." - basetftp=/var/lib/tftpboot + local basetftp=/var/lib/tftpboot + echoAndLog "${FUNCNAME}(): Configuring TFTP service." # reiniciamos demonio internet ????? porque ???? /etc/init.d/openbsd-inetd start # preparacion contenedor tftpboot - cp -pr /usr/lib/syslinux/ ${basetftp}/syslinux - cp /usr/lib/syslinux/pxelinux.0 ${basetftp} + cp -ar /usr/lib/syslinux/ ${basetftp}/syslinux + cp -a /usr/lib/syslinux/pxelinux.0 ${basetftp} # prepamos el directorio de la configuracion de pxe mkdir -p ${basetftp}/pxelinux.cfg cat > ${basetftp}/pxelinux.cfg/default <<EOF @@ -725,24 +725,30 @@ function smbConfigure() function dhcpConfigure() { - echoAndLog "${FUNCNAME}(): Sample DHCP Configuration." + echoAndLog "${FUNCNAME}(): Sample DHCP configuration." - backupFile /etc/dhcp3/dhcpd.conf + local DHCPSERVER=/etc/init.d/isc-dhcp-server + DHCPCONFIG=/etc/dhcp/dhcpd.conf + if [ ! -x $DHCPSERVER ]; then + DHCPSERVER=/etc/init.d/dhcp3-server + DHCPCONFIG=/etc/dhcp3/dhcpd.conf + fi + backupFile $DHCPCONFIG - sed -e "s/SERVERIP/$SERVERIP/g" \ + sed -e "s/SERVERIP/$SERVERIP/g" \ -e "s/NETIP/$NETIP/g" \ -e "s/NETMASK/$NETMASK/g" \ -e "s/NETBROAD/$NETBROAD/g" \ -e "s/ROUTERIP/$ROUTERIP/g" \ -e "s/DNSIP/$DNSIP/g" \ - $WORKDIR/opengnsys/server/etc/dhcpd.conf.tmpl > /etc/dhcp3/dhcpd.conf + $WORKDIR/opengnsys/server/etc/dhcpd.conf.tmpl > $DHCPCONFIG if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while configuring dhcp server" + errorAndLog "${FUNCNAME}(): error while configuring DHCP server" return 1 fi - /etc/init.d/dhcp3-server restart - echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"." + $DHCPSERVER restart + echoAndLog "${FUNCNAME}(): Sample DHCP configured in file \"$DHCPCONFIG\"." return 0 } @@ -856,6 +862,7 @@ function createDirs() mkdir -p $path_opengnsys_base/images ln -fs /var/lib/tftpboot $path_opengnsys_base mkdir -p $path_opengnsys_base/tftpboot/pxelinux.cfg + mkdir -p $path_opengnsys_base/tftpboot/menu.lst if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" return 1 @@ -875,8 +882,8 @@ function createDirs() # 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} + chmod -R 775 $path_opengnsys_base/{log/clients,images,tftpboot/pxelinux.cfg,tftpboot/menu.lst} + chown -R :$OPENGNSYS_CLIENT_USER $path_opengnsys_base/{log/clients,images,tftpboot/pxelinux.cfg,tftpboot/menu.lst} if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while setting permissions" return 1 @@ -894,20 +901,20 @@ function openGnsysCopyServerFiles () exit 1 fi - local path_opengnsys_base=$1 + local path_opengnsys_base="$1" - # No se copian los ficheros del cliente antiguo: - # - client/boot/initrd-generator ==> /opt/opengnsys/bin - # - client/boot/upgrade-clients-udeb.sh ==> /opt/opengnsys/bin - # - client/boot/udeblist*.conf ==> /opt/opengnsys/etc - local SOURCES=( server/tftpboot/pxelinux.cfg \ - server/bin \ - repoman/bin \ - doc ) - local TARGETS=( tftpboot/pxelinux.cfg \ - bin \ - bin \ - doc ) + local SOURCES=( server/tftpboot \ + server/bin \ + repoman/bin \ + installer/opengnsys_uninstall.sh \ + installer/opengnsys_update.sh \ + doc ) + local TARGETS=( tftpboot \ + bin \ + bin \ + lib \ + lib \ + doc ) if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then errorAndLog "${FUNCNAME}(): inconsistent number of array items" @@ -1086,26 +1093,27 @@ function openGnsysOldClientCreate() } -# Crear nuevo cliente OpenGnSys 1.0 -function openGnsysClientCreate() +# Crear cliente OpenGnSys 1.0.1 +function clientCreate() { - local DOWNLOADURL=http://www.opengnsys.es/downloads - local FILENAME=ogclient-1.0.1-lucid-32bit.tar.gz - local TMPFILE=/tmp/$FILENAME + local DOWNLOADURL="http://www.opengnsys.es/downloads" + local FILENAME=ogclient-1.0.2-natty-32bit-beta00-rev2046.iso + local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME + local TMPDIR=/tmp/${FILENAME%.iso} echoAndLog "${FUNCNAME}(): Loading Client" - # Descargar y descomprimir cliente ogclient - wget $DOWNLOADURL/$FILENAME -O $TMPFILE - if [ ! -s $TMPFILE ]; then + # Descargar, montar imagen, copiar cliente ogclient y desmontar. + wget $DOWNLOADURL/$FILENAME -O $TARGETFILE + if [ ! -s $TARGETFILE ]; then errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client" return 1 fi - echoAndLog "${FUNCNAME}(): Extranting Client files" - tar xzvf $TMPFILE -C $INSTALL_TARGET/tftpboot - rm -f $TMPFILE - # Usar la versión más reciente del Kernel y del Initrd para el cliente. - ln -f $(ls $INSTALL_TARGET/tftpboot/ogclient/vmlinuz-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz - ln -f $(ls $INSTALL_TARGET/tftpboot/ogclient/initrd.img-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img + echoAndLog "${FUNCNAME}(): Copying Client files" + mount -o loop,ro $TARGETFILE $TMPDIR + cp -vr $TMPDIR/* $INSTALL_TARGET/tftpboot + umount $TMPDIR + rmdir $TMPDIR + # Establecer los permisos. chmod -R 755 $INSTALL_TARGET/tftpboot/ogclient chown -R :$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/tftpboot/ogclient @@ -1149,7 +1157,7 @@ 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}') + local REVISION=$(LANG=C svn info $SVN_URL|awk '/Rev:/ {print "r"$4}') [ -f $VERSIONFILE ] || echo "OpenGnSys" >$VERSIONFILE perl -pi -e "s/($| r[0-9]*)/ $REVISION/" $VERSIONFILE @@ -1160,7 +1168,7 @@ function installationSummary() 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" + echoAndLog "DHCP configuration file: $DHCPCONFIG" echoAndLog "TFTP configuration directory: /var/lib/tftpboot" echoAndLog "Samba configuration directory: /etc/samba" echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL" @@ -1370,7 +1378,7 @@ fi #fi # Crear la estructura del cliente de OpenGnSys 1.0 -openGnsysClientCreate +clientCreate if [ $? -ne 0 ]; then errorAndLog "Error creating client" exit 1 diff --git a/installer/opengnsys_makecompress.sh b/installer/opengnsys_makecompress.sh new file mode 100755 index 00000000..2587343a --- /dev/null +++ b/installer/opengnsys_makecompress.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# +# Script: opengnsys_compress.sh +# Descripción: Programa para descargar y generar un fichero comprimido con los +# datos de la última revisión de código del Proyecto OpenGnSys. +# Salida: Datos del fichero comprimido generado. +# Versión: 1.0 - Incluido en OpenGnSys 1.0.1 +# Autor: Ramón Gómez, Universidad de Sevilla +# Fecha: 10/05/2011 + + +# Variables +SVNURL="http://www.opengnsys.es/svn/trunk/" +SVNREV=$(LANG=C svn info $SVNURL | awk '/Last Changed Rev:/ {print "r"$4}') + +# Descargar repositorio SVN +cd /tmp +rm -fr opengnsys +svn export $SVNURL opengnsys || exit 1 +# Parchear datos de revisión del código. +perl -pi -e "s/$/ $SVNREV/" opengnsys/doc/VERSION.txt +# Generar fichero comprimido. +VERSION=$(awk '{print $2"-"$3}' opengnsys/doc/VERSION.txt) +tar cvzf opengnsys-$VERSION.tar.gz opengnsys +rm -fr opengnsys +ls -lh $(readlink -e opengnsys-$VERSION.tar.gz) + diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh index ac20d1a0..42c74b13 100755 --- a/installer/opengnsys_update.sh +++ b/installer/opengnsys_update.sh @@ -9,6 +9,9 @@ #@version 1.0 - adaptación a OpenGnSys 1.0 #@author Ramón Gómez - ETSII Univ. Sevilla #@date 2011/03/02 +#@version 1.0.1 - control de auto actualización del script +#@author Ramón Gómez - ETSII Univ. Sevilla +#@date 2011/05/17 #*/ @@ -27,9 +30,16 @@ then echo "ERROR: this program must run under root privileges!!" exit 1 fi +# Error si OpenGnSys no está instalado (no existe el directorio del proyecto) +INSTALL_TARGET=/opt/opengnsys +if [ ! -d $INSTALL_TARGET ]; then + echo "ERROR: OpenGnSys is not installed, cannot update!!" + exit 1 +fi # Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1). PROGRAMDIR=$(readlink -e $(dirname "$0")) +PROGRAMNAME=$(basename "$0") DEPS="build-essential g++-multilib rsync ctorrent samba unzip netpipes debootstrap schroot squashfs-tools" OPENGNSYS_SERVER="www.opengnsys.es" if [ -d "$PROGRAMDIR/../installer" ]; then @@ -43,7 +53,6 @@ SVN_URL="http://$OPENGNSYS_SERVER/svn/trunk/" WORKDIR=/tmp/opengnsys_update mkdir -p $WORKDIR -INSTALL_TARGET=/opt/opengnsys LOG_FILE=/tmp/opengnsys_update.log @@ -52,6 +61,31 @@ LOG_FILE=/tmp/opengnsys_update.log ####### Algunas funciones útiles de propósito general: ##################################################################### +# Comprobar auto-actualización. +function checkAutoUpdate() +{ + local update=0 + + # Actaulizar el script si ha cambiado o no existe el original. + if [ $USESVN -eq 1 ]; then + svn export $SVN_URL/installer/$PROGRAMNAME + if ! diff --brief $PROGRAMNAME $INSTALL_TARGET/lib/$PROGRAMNAME &>/dev/null || ! test -f $INSTALL_TARGET/lib/$PROGRAMNAME; then + mv $PROGRAMNAME $INSTALL_TARGET/lib + update=1 + else + rm -f $PROGRAMNAME + fi + else + if ! diff --brief $PROGRAMDIR/$PROGRAMNAME $INSTALL_TARGET/lib/$PROGRAMNAME &>/dev/null || ! test -f $INSTALL_TARGET/lib/$PROGRAMNAME; then + cp -a $PROGRAMDIR/$PROGRAMNAME $INSTALL_TARGET/lib + update=1 + fi + fi + + return $update +} + + function getDateTime() { date "+%Y%m%d-%H%M%S" @@ -167,7 +201,7 @@ function importSqlFile() ##################################################################### # Instalar las deependencias necesarias para el actualizador. -function installDependencies () +function installDependencies() { if [ $# = 0 ]; then echoAndLog "${FUNCNAME}(): no deps needed." @@ -201,7 +235,7 @@ function svnExportCode() exit 1 fi - local url=$1 + local url="$1" echoAndLog "${FUNCNAME}(): downloading subversion code..." @@ -226,55 +260,31 @@ function checkNetworkConnection() wget --spider -q $OPENGNSYS_SERVER } -# Obtener los parámetros de red de la interfaz por defecto. -function getNetworkSettings() -{ - local MAINDEV - - echoAndLog "$FUNCNAME(): Detecting default network parameters." - MAINDEV=$(ip -o link show up | awk '!/loopback/ {d=d$2} END {sub(/:.*/,"",d); print d}') - if [ -z "$MAINDEV" ]; then - errorAndLog "${FUNCNAME}(): Network device not detected." - return 1 - fi - - # Variables de ejecución de Apache - # - APACHE_RUN_USER - # - APACHE_RUN_GROUP - if [ -f /etc/apache2/envvars ]; then - source /etc/apache2/envvars - fi - APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"} - APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"} -} - ##################################################################### ####### Funciones especÃficas de la instalación de Opengnsys ##################################################################### # Copiar ficheros de arranque de los servicios del sistema de OpenGnSys - -function updateServicesStart(){ - echoAndLog "${FUNCNAME}(): Updating /etc/init.d/opengnsys ..." +function updateServicesStart() +{ + echoAndLog "${FUNCNAME}(): Updating OpenGnSys init file ..." cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys if [ $? != 0 ]; then errorAndLog "${FUNCNAME}(): Error updating /etc/init.d/opengnsys" exit 1 fi - echoAndLog "${FUNCNAME}(): /etc/init.d/opengnsys updated successfully." + echoAndLog "${FUNCNAME}(): init file updated successfully." } # Actualizar cliente OpenGnSys function updateClientFiles() { - local hayErrores=0 - echoAndLog "${FUNCNAME}(): Updating OpenGnSys Client files." rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while updating client structure" - hayErrores=1 + exit 1 fi find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null @@ -282,17 +292,25 @@ function updateClientFiles() rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while updating engine files" - hayErrores=1 + exit 1 fi - if [ $hayErrores -eq 0 ]; then - echoAndLog "${FUNCNAME}(): client files update success." - else - errorAndLog "${FUNCNAME}(): client files update with errors" - fi + echoAndLog "${FUNCNAME}(): client files update success." +} - return $hayErrores +# Exportar nombre de usuario y grupo del servicio Apache. +function getApacheUser() +{ + # Variables de ejecución de Apache + # - APACHE_RUN_USER + # - APACHE_RUN_GROUP + if [ -f /etc/apache2/envvars ]; then + source /etc/apache2/envvars + fi + APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"} + APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"} } + # Copiar ficheros del OpenGnSys Web Console. function updateWebFiles() { @@ -312,21 +330,20 @@ function updateWebFiles() # Cambiar permisos para ficheros especiales. chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/includes $INSTALL_TARGET/www/images/iconos echoAndLog "${FUNCNAME}(): Web files updated successfully." - } # Copiar carpeta de Interface -function updateInterfaceAdm () +function updateInterfaceAdm() { - local hayErrores=0 + local errcode=0 # Crear carpeta y copiar Interface echoAndLog "${FUNCNAME}(): Copying Administration Interface Folder" mv $INSTALL_TARGET/client/interfaceAdm $INSTALL_TARGET/client/Interface rsync --exclude .svn -irplt $WORKDIR/opengnsys/admin/Interface $INSTALL_TARGET/client - ERRCODE=$? + errcoce=$? mv $INSTALL_TARGET/client/Interface $INSTALL_TARGET/client/interfaceAdm - if [ $? -ne 0 ]; then + if [ $errcode -ne 0 ]; then echoAndLog "${FUNCNAME}(): error while updating admin interface" exit 1 fi @@ -347,8 +364,8 @@ function makeDoxygenFiles() return 1 fi rm -fr "$INSTALL_TARGET/www/api" - mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api" - rm -fr $INSTALL_TARGET/www/{man,perlmod,rtf} + mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api" + rm -fr $INSTALL_TARGET/www/{man,perlmod,rtf} chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api echoAndLog "${FUNCNAME}(): Doxygen web files created successfully." } @@ -359,19 +376,12 @@ 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 - mkdir -p ${INSTALL_TARGET}/doc - mkdir -p ${INSTALL_TARGET}/etc - mkdir -p ${INSTALL_TARGET}/lib + mkdir -p ${INSTALL_TARGET}/{bin,doc,etc,lib,sbin,www} + mkdir -p ${INSTALL_TARGET}/{client,images} 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} - mkdir -p ${INSTALL_TARGET}/tftpboot/pxelinux.cfg + mkdir -p ${INSTALL_TARGET}/tftpboot/{pxelinux.cfg,menu.lst} if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?" return 1 @@ -391,8 +401,8 @@ function createDirs() # 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} + chmod -R 775 $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg,tftpboot/menu.lst} + chown -R :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg,tftpboot/menu.lst} if [ $? -ne 0 ]; then errorAndLog "${FUNCNAME}(): error while setting permissions" return 1 @@ -403,15 +413,19 @@ function createDirs() } # Copia ficheros de configuración y ejecutables genéricos del servidor. -function updateServerFiles () { - +function updateServerFiles() +{ # No copiar ficheros del antiguo cliente Initrd - local SOURCES=( repoman/bin \ + local SOURCES=( repoman/bin \ server/bin \ - doc ) - local TARGETS=( bin \ - bin \ - doc ) + server/tftpboot \ + installer/opengnsys_uninstall.sh \ + doc ) + local TARGETS=( bin \ + bin \ + tftpboot \ + lib/opengnsys_uninstall.sh \ + doc ) if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then errorAndLog "${FUNCNAME}(): inconsistent number of array items" @@ -422,7 +436,11 @@ function updateServerFiles () { pushd $WORKDIR/opengnsys >/dev/null local i for (( i = 0; i < ${#SOURCES[@]}; i++ )); do - rsync --exclude .svn -irplt "${SOURCES[$i]}" $(dirname "${INSTALL_TARGET}/${TARGETS[$i]}") + if [ -d "$INSTALL_TARGET/${TARGETS[i]}" ]; then + rsync --exclude .svn -irplt "${SOURCES[i]}" $(dirname $(readlink -e "$INSTALL_TARGET/${TARGETS[i]}")) + else + rsync --exclude .svn -irplt "${SOURCES[i]}" $(readlink -e "$INSTALL_TARGET/${TARGETS[i]}") + fi done popd >/dev/null echoAndLog "${FUNCNAME}(): updating cron files" @@ -434,11 +452,41 @@ function updateServerFiles () { ### Funciones de compilación de código fuente de servicios #################################################################### -# Recompilar y actualiza el binario del clinete -function recompileClient () +# Recompilar y actualiza los serivicios y clientes. +function compileServices() { + local hayErrores=0 + + # Compilar OpenGnSys Server + echoAndLog "${FUNCNAME}(): Recompiling OpenGnSys Admin Server" + pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer + make && mv ogAdmServer $INSTALL_TARGET/sbin + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server" + hayErrores=1 + fi + popd + # Compilar OpenGnSys Repository Manager + echoAndLog "${FUNCNAME}(): Recompiling OpenGnSys Repository Manager" + pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo + make && mv ogAdmRepo $INSTALL_TARGET/sbin + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager" + hayErrores=1 + fi + popd + # Compilar OpenGnSys Agent + echoAndLog "${FUNCNAME}(): Recompiling OpenGnSys Agent" + pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent + make && mv ogAdmAgent $INSTALL_TARGET/sbin + if [ $? -ne 0 ]; then + echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Agent" + hayErrores=1 + fi + popd + # Compilar OpenGnSys Client - echoAndLog "${FUNCNAME}(): recompiling OpenGnSys Client" + echoAndLog "${FUNCNAME}(): Recompiling OpenGnSys Client" pushd $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient make && mv ogAdmClient $INSTALL_TARGET/client/bin if [ $? -ne 0 ]; then @@ -452,86 +500,40 @@ function recompileClient () #################################################################### -### Funciones instalacion cliente opengnsys +### Funciones instalacion cliente OpenGnSys #################################################################### -# Actualizar antiguo cliente Initrd. -function updateOldClient() -{ - local OSDISTRIB OSCODENAME - - local hayErrores=0 - - echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files." - rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client - echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files." - mkdir -p $INSTALL_TARGET/client/lib/engine/bin - rsync -iplt $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while copying engine files" - hayErrores=1 - fi - - # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto). - OSDISTRIB=$(lsb_release -is) 2>/dev/null - OSCODENAME=$(lsb_release -cs) 2>/dev/null - if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then - echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME." - $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v $OSCODENAME 2>&1 | tee -a $LOG_FILE - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" - hayErrores=1 - fi - echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME." - $INSTALL_TARGET/bin/upgrade-clients-udeb.sh $OSCODENAME 2>&1 | tee -a $LOG_FILE - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" - hayErrores=1 - fi - else - echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files." - $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot 2>&1 | tee -a $LOG_FILE - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client" - hayErrores=1 - fi - echoAndLog "${FUNCNAME}(): Loading default udeb files." - $INSTALL_TARGET/bin/upgrade-clients-udeb.sh 2>&1 | tee -a $LOG_FILE - if [ $? -ne 0 ]; then - errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client" - hayErrores=1 - fi - fi - - if [ $hayErrores -eq 0 ]; then - echoAndLog "${FUNCNAME}(): Client generation success." - else - errorAndLog "${FUNCNAME}(): Client generation with errors" - fi - - return $hayErrores -} - # Actualizar nuevo cliente para OpenGnSys 1.0 function updateClient() { local DOWNLOADURL=http://www.opengnsys.es/downloads local FILENAME=ogclient-1.0.1-lucid-32bit.tar.gz - local TMPFILE=/tmp/$FILENAME - - echoAndLog "${FUNCNAME}(): Loading Client" - # Descargar y descomprimir cliente ogclient - wget $DOWNLOADURL/$FILENAME -O $TMPFILE - if [ ! -s $TMPFILE ]; then - errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client" - return 1 + local SOURCEFILE=$DOWNLOADURL/$FILENAME + local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME + local SOURCELENGTH + local TARGETLENGTH + local TMPDIR=/tmp/${FILENAME%.iso} + + # Comprobar si debe actualizarse el cliente. + SOURCELENGTH=$(wget --spider $SOURCEFILE | LANG=C awk '/Length:/ {print $2}') + TARGETLENGTH=$(ls -l $TARGETFILE | awk '{print $5}' 2>/dev/null) + if [ "$SOURCELENGTH" != "$TARGETLENGTH" ]; then + echoAndLog "${FUNCNAME}(): Loading Client" + wget $DOWNLOADURL/$FILENAME -O $TARGETFILE + if [ ! -s $TARGETFILE ]; then + errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client" + return 1 + fi + else + echoAndLog "${FUNCNAME}(): Client is already loaded" fi - echoAndLog "${FUNCNAME}(): Extracting Client files" - tar xzvf $TMPFILE -C $INSTALL_TARGET/tftpboot - rm -f $TMPFILE - # Usar la versión más reciente del Kernel y del Initrd para el cliente. - ln -f $(ls $INSTALL_TARGET/tftpboot/ogclient/vmlinuz-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz - ln -f $(ls $INSTALL_TARGET/tftpboot/ogclient/initrd.img-*|tail -1) $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img + # Montar la imagen ISO del ogclient, actualizar ficheros y desmontar. + echoAndLog "${FUNCNAME}(): Updatting ogclient files" + mount -o loop,ro $TARGETFILE $TMPDIR + rsync -irplt $TMPDIR/* $INSTALL_TARGET/tftpboot + umount $TMPDIR + rmdir $TMPDIR + # Establecer los permisos. chmod -R 755 $INSTALL_TARGET/tftpboot/ogclient chown -R :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/tftpboot/ogclient @@ -564,13 +566,6 @@ function updateSummary() echoAndLog "OpenGnSys update begins at $(date)" -# Instalar dependencia. -installDependencies $DEPS -if [ $? -ne 0 ]; then - errorAndLog "Error: you may install all needed dependencies." - exit 1 -fi - pushd $WORKDIR # Comprobar si hay conexión y detectar parámetros de red por defecto. @@ -582,9 +577,21 @@ if [ $? -ne 0 ]; then errorAndLog " - Server is temporally down, try agian later." exit 1 fi -getNetworkSettings + +# Comprobar auto-actualización del programa. +if [ "$PROGRAMDIR" != "$INSTALL_TARGET/bin" ]; then + checkAutoUpdate + if [ $? -ne 0 ]; then + echoAndLog "OpenGnSys updater has been overwritten." + echoAndLog "Please, re-execute this script." + exit + fi +fi + +# Instalar dependencias. +installDependencies $DEPS if [ $? -ne 0 ]; then - errorAndLog "Error reading default network settings." + errorAndLog "Error: you may install all needed dependencies." exit 1 fi @@ -629,6 +636,7 @@ updateClientFiles updateInterfaceAdm # Actualizar páqinas web +getApacheUser updateWebFiles if [ $? -ne 0 ]; then errorAndLog "Error updating OpenGnSys Web Admin files" @@ -637,10 +645,10 @@ fi # Generar páginas Doxygen para instalar en el web makeDoxygenFiles -# Creando la estructura del cliente -recompileClient -# NO se actualiza el antiguo cliente Initrd -#updateOldClient +# Recompilar y actualizar los servicios del sistema +compileServices + +# Actaulizar ficheros auxiliares del cliente updateClient if [ $? -ne 0 ]; then errorAndLog "Error updating clients" diff --git a/server/tftpboot/NetbootPXE.es.txt b/server/tftpboot/NetbootPXE.es.txt new file mode 100644 index 00000000..e467b763 --- /dev/null +++ b/server/tftpboot/NetbootPXE.es.txt @@ -0,0 +1,39 @@ +Como cambiar el arranque en red PXELinux por Grub4DOS +===================================================== + + +OpenGnSys usa como gestor PXE el binario pxelinux.0 + + +También ofrece la posibilidad de usar el bianrio grldr que se está evaluando para solucionar algunas incidencias. + + + +Activar el grldr del grub4dos +1) modificar el dhcp, donde aparezca filename "pxelinux.0" por "grldr" + filename "grldr"; +2) Reiniciamos el servicio dhcp + /etc/init.d/dhcpd restart +3) Renombrar cambiar el gestor de arranque de la web, para que use grldr. + cp /opt/opengnsys/www/principal/boot.php /opt/opengnsys/www/principal/boot.pxelinux.php + cp /opt/opengnsys/www/principal/boot.grub4dos.php /opt/opengnsys/www/principal/boot.php + +4) En la funcion ogBoot, de la libreria Boot.lib descomentar los comentarios del if de las lÃneas 71 a 85, para que quede + #FIXME: activar seguimiento inicio sesion XP con grub4dos + if `ogGetOsVersion $1 $2 | grep "XP" > /dev/null` + then + dd if=/dev/zero of=${MNTDIR}/ogboot.me bs=1024 count=3 + dd if=/dev/zero of=${MNTDIR}/ogboot.firstboot bs=1024 count=3 + dd if=/dev/zero of=${MNTDIR}/ogboot.secondboot bs=1024 count=3 + ogLoadHiveWindows $1 $2 + ogHiveNTRunMachine "cmd /c del c:\ogboot.* " ogcleanboot + ogUpdateHiveWindows + reboot + else + cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen) + ##kexec -l $MNTDIR/grub.exe --append=--config-file="find --set-root /$LOADER; chainloader /$LOADER; tpm --init" + kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init" + fi + + + diff --git a/server/tftpboot/grldr b/server/tftpboot/grldr Binary files differnew file mode 100644 index 00000000..16ed4c77 --- /dev/null +++ b/server/tftpboot/grldr diff --git a/server/tftpboot/menu.lst/default b/server/tftpboot/menu.lst/default new file mode 100644 index 00000000..9fa2316b --- /dev/null +++ b/server/tftpboot/menu.lst/default @@ -0,0 +1,8 @@ +timeout 1 +title MBR +keeppxe +chainloader (hd0)+1 +rootnoverify (hd0) +boot + + diff --git a/server/tftpboot/menu.lst/examples/default b/server/tftpboot/menu.lst/examples/default new file mode 100644 index 00000000..278da613 --- /dev/null +++ b/server/tftpboot/menu.lst/examples/default @@ -0,0 +1,25 @@ +color white/blue black/light-gray +timeout 330 +default /default + +title OGnet (network) +kernel (pd)/ogclient/linux +initrd (pd)/ogclient/initrd.gz +boot + +title OGcache +find --set-root /linuz +kernel /linuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.36.15 +initrd /initrd.img +boot + +title OGiso +map --mem (pd)/ogclient.iso (0xFF) +map --hook +root (0xFF) +chainloader (0xFF) +boot + +title PXELinux +pxe keep +chainloader --raw (pd)/pxelinux.0
\ No newline at end of file diff --git a/server/tftpboot/menu.lst/examples/defaultHOTREBOOT_WindowsXP b/server/tftpboot/menu.lst/examples/defaultHOTREBOOT_WindowsXP new file mode 100644 index 00000000..70c9061a --- /dev/null +++ b/server/tftpboot/menu.lst/examples/defaultHOTREBOOT_WindowsXP @@ -0,0 +1,36 @@ +default saved +timeout 1 +hiddenmenu +fallback 1 2 3 + +title firsboot +find --set-root --ignore-floppies /ogboot.me +cmp /ogboot.me /ogboot.firstboot || ls FALLBACK +write /ogboot.firstboot iniciado +chainloader /ntldr +savedefault fallback +boot + +title secondboot +find --set-root --ignore-floppies /ogboot.me +cmp /ogboot.me /ogboot.secondboot || ls FALLBACK +write /ogboot.secondboot iniciado +chainloader /ntldr +savedefault fallback +boot + +title OpenGnsys-CACHE +find --set-root /boot/ogvmlinuz +kernel /boot/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true IP=dhcp repo=172.17.9.249 +initrd /boot/oginitrd.img +savedefault fallback +boot + +title OpenGnsys-NET +keeppxe +kernel (pd)/ogclient/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true IP=dhcp repo=172.17.9.249 +initrd (pd)/ogclient/oginitrd.img +savedefault +boot + + diff --git a/server/tftpboot/menu.lst/templates/1 b/server/tftpboot/menu.lst/templates/1 new file mode 100644 index 00000000..9fa2316b --- /dev/null +++ b/server/tftpboot/menu.lst/templates/1 @@ -0,0 +1,8 @@ +timeout 1 +title MBR +keeppxe +chainloader (hd0)+1 +rootnoverify (hd0) +boot + + diff --git a/server/tftpboot/menu.lst/templates/11 b/server/tftpboot/menu.lst/templates/11 new file mode 100644 index 00000000..00560c00 --- /dev/null +++ b/server/tftpboot/menu.lst/templates/11 @@ -0,0 +1,8 @@ +timeout 1 +title FirstHardDisk-FirstPartition +keeppxe +root (hd0,0) +chainloader (hd0,0)+1 +boot + + diff --git a/server/tftpboot/menu.lst/templates/12 b/server/tftpboot/menu.lst/templates/12 new file mode 100644 index 00000000..2fb0dfcb --- /dev/null +++ b/server/tftpboot/menu.lst/templates/12 @@ -0,0 +1,6 @@ +timeout 1 +title FirstHardDisk-SecondPartition +keeppxe +root (hd0,1) +chainloader (hd0,1)+1 +boot diff --git a/server/tftpboot/menu.lst/templates/pxe b/server/tftpboot/menu.lst/templates/pxe new file mode 100644 index 00000000..c7ef01fb --- /dev/null +++ b/server/tftpboot/menu.lst/templates/pxe @@ -0,0 +1,38 @@ +default saved +timeout 1 +hiddenmenu +fallback 1 2 3 + +title firsboot +find --set-root --ignore-floppies --ignore-cd /ogboot.me +cmp /ogboot.me /ogboot.firstboot || ls FALLBACK +write /ogboot.firstboot iniciado +chainloader +1 +savedefault fallback +boot + +title secondboot +find --set-root --ignore-floppies --ignore-cd /ogboot.me +cmp /ogboot.me /ogboot.secondboot || ls FALLBACK +write /ogboot.secondboot iniciado +chainloader +1 +savedefault fallback +boot + +title OpenGnsys-CACHE +find --set-root --ignore-floppies --ignore-cd /boot/ogvmlinuz +kernel /boot/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false INFOHOST +initrd /boot/oginitrd.img +savedefault fallback +boot + +title OpenGnsys-NET +keeppxe +kernel (pd)/ogclient/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false INFOHOST +initrd (pd)/ogclient/oginitrd.img +boot + + + + + diff --git a/server/tftpboot/menu.lst/templates/pxeADMIN b/server/tftpboot/menu.lst/templates/pxeADMIN new file mode 100644 index 00000000..0dd603ce --- /dev/null +++ b/server/tftpboot/menu.lst/templates/pxeADMIN @@ -0,0 +1,38 @@ +default saved +timeout 1 +hiddenmenu +fallback 1 2 3 + +title firsboot +find --set-root --ignore-floppies --ignore-cd /ogboot.me +cmp /ogboot.me /ogboot.firstboot || ls FALLBACK +write /ogboot.firstboot iniciado +chainloader +1 +savedefault fallback +boot + +title secondboot +find --set-root --ignore-floppies --ignore-cd /ogboot.me +cmp /ogboot.me /ogboot.secondboot || ls FALLBACK +write /ogboot.secondboot iniciado +chainloader +1 +savedefault fallback +boot + +title OpenGnsys-CACHE +find --set-root --ignore-floppies --ignore-cd /boot/ogvmlinuz +kernel /boot/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true INFOHOST +initrd /boot/oginitrd.img +savedefault fallback +boot + +title OpenGnsys-NET +keeppxe +kernel (pd)/ogclient/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true INFOHOST +initrd (pd)/ogclient/oginitrd.img +boot + + + + + diff --git a/server/tftpboot/pxelinux.0 b/server/tftpboot/pxelinux.0 Binary files differdeleted file mode 100644 index 08270f1a..00000000 --- a/server/tftpboot/pxelinux.0 +++ /dev/null diff --git a/server/tftpboot/pxelinux.cfg/examples/callGRUBfromPXELINUX b/server/tftpboot/pxelinux.cfg/examples/callGRUBfromPXELINUX new file mode 100644 index 00000000..e40294f9 --- /dev/null +++ b/server/tftpboot/pxelinux.cfg/examples/callGRUBfromPXELINUX @@ -0,0 +1,61 @@ +DEFAULT syslinux/vesamenu.c32 +PROMPT 0 + +MENU TITLE Aplicacion OpenGnsys +MENU BACKGROUND opengnsys.png + + + + +LABEL title Boot MBR of First Hard Disk +MENU LABEL title Boot MBR of First Hard Disk +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title MBR; chainloader (hd0)+1; rootnoverify (hd0); boot;" + + +title Boot Partition Boot Sector - First Hard Disk, First Partition +LABEL title Boot Partition Boot Sector - First Hard Disk, First Partition +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title PBS11; root (hd0,0); chainloader (hd0,0)+1; boot;" + +title Boot Partition Boot Sector - First Hard Disk, Second Partition +LABEL title Boot Partition Boot Sector - First Hard Disk, Second Partition +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title PBS11; root (hd0,1); chainloader (hd0,1)+1; boot;" + + +LABEL WindowsXP +MENU LABEL WindowsXP +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title windowsXP; fallback 1; find --set-root --ignore-floppies /ntldr; chainloader /ntldr; boot; title net; kernel (pd)/ogclient/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false IP=172.17.9.204:172.17.9.249:172.17.9.254:255.255.255.0:cte204:eth0:none repo=172.17.9.249; initrd (pd)/ogclient/oginitrd.img; boot" + +LABEL ogClientUser +MENU LABEL ogClientUser +KERNEL ogclient/ogvmlinuz +APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true IP=172.17.9.204:172.17.9.249:172.17.9.254:255.255.255.0:cte204:eth0:none repo=172.17.9.249 + + + + +LABEL DetectaWindowsXP +MENU LABEL detectaWindowsXP +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title windowsXP; fallback 1; find --set-root --ignore-floppies /ogboot.me; chainloader /ntldr; boot; title net; kernel (pd)/ogclient/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true IP=172.17.9.204:172.17.9.249:172.17.9.254:255.255.255.0:cte204:eth0:none repo=172.17.9.249; initrd (pd)/ogclient/oginitrd.img; boot" + + +LABEL DetectaWindowsXP2 +MENU LABEL detectaWindowsXP2 +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default saved; timeout 10; fallback 1 2; title firsboot; find --set-root --ignore-floppies /ogboot.me; cmp /ogboot.me /ogfirstboot.me || ls FALLBACK; write /ogfirstboot.me iniciado ; chainloader /ntldr; savedefault fallback; boot; title secondboot; find --set-root --ignore-floppies /ogboot.me; cmp /ogboot.me /ogsecondboot.me || ls FALLBACK; write /ogsecondboot.me iniciado ; chainloader /ntldr; savedefault fallback; boot; title OpenGnsys-NET; kernel (pd)/ogclient/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true IP=172.17.9.204:172.17.9.249:172.17.9.254:255.255.255.0:cte204:eth0:none repo=172.17.9.249; initrd (pd)/ogclient/oginitrd.img; savedault; boot" + + + +LABEL IfNOTcacheGOnet +MENU LABEL IfNOTcacheGOnet +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /ogvmlinuz; kernel /ogvmlinuz ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on engine=testing ogrepo=172.17.36.11 ogprotocol=smb og2nd=sqfs; initrd /oginitrd; boot; title net; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on engine=testing ogrepo=172.17.36.11 ogprotocol=nfs og2nd=sqfs; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae; boot" + +LABEL grub command line +MENU LABEL command line +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect;" diff --git a/server/tftpboot/pxelinux.cfg/examples/examplecallGrub b/server/tftpboot/pxelinux.cfg/examples/examplecallGrub new file mode 100644 index 00000000..2e888f98 --- /dev/null +++ b/server/tftpboot/pxelinux.cfg/examples/examplecallGrub @@ -0,0 +1,29 @@ +DEFAULT IfNOTcacheGOnet +#DEFAULT pxe-2.6.32-21-generic-pae + +#ejemplos para el parametro ip +#ip=ipCLIENTE:ipROOTserver:ipROUTER:NetMASK:hostNAME:[device] +#ip=172.17.36.2:172.17.36.11:172.17.36.254:255.255.255.0:r60 +#ip=dhcp + +LABEL cache +KERNEL grub.exe +APPEND --config-file="find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img" + +LABEL net +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on engine=testing ogrepo=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae" + +LABEL IfNOTcacheGOnet +KERNEL grub.exe +APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /ogvmlinuz; kernel /ogvmlinuz ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on engine=testing ogrepo=172.17.36.11 ogprotocol=smb og2nd=sqfs; initrd /oginitrd; boot; title net; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on engine=testing ogrepo=172.17.36.11 ogprotocol=nfs og2nd=sqfs; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae; boot" + + + +LABEL pxe-2.6.32-21-generic-pae +KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae +APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=172.17.32.242 + +LABEL grub +KERNEL grub.exe +APPEND keeppxe
\ No newline at end of file |