summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2011-06-15 11:32:53 +0000
committerramon <ramongomez@us.es>2011-06-15 11:32:53 +0000
commitecd8d9ac7a4419618f471815d748a51923d90aea (patch)
tree5e4e60b889df53993b557f907e00d468bc7fde71
parent61dabee7d4cd985599233fd3e9c07a76e5e85f84 (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
-rw-r--r--admin/Database/ogAdmBD-0.9.1-0.9.2pre.sql8
-rw-r--r--admin/Database/ogAdmBD-1.0-1.0.1.sql2
-rw-r--r--admin/Database/ogAdmBD-1.0pre-1.0.1.sql24
-rw-r--r--admin/Database/ogAdmBD-1.0pre-1.0.sql5
-rwxr-xr-xadmin/Interface/Apagar1
-rwxr-xr-xadmin/Interface/CambiarAcceso6
-rwxr-xr-xadmin/Interface/CrearImagen59
-rwxr-xr-xadmin/Interface/EjecutarScript13
-rwxr-xr-xadmin/Interface/Reiniciar1
-rwxr-xr-xadmin/Interface/RestaurarImagen91
-rw-r--r--admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.h49
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php24
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php2
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php13
-rw-r--r--admin/WebConsole/asistentes/jscripts/asistentes.js13
-rw-r--r--admin/WebConsole/comandos/CrearImagen.php54
-rw-r--r--admin/WebConsole/comandos/RestaurarImagen.php91
-rw-r--r--[-rwxr-xr-x]admin/WebConsole/gestores/gestor_pxe.php0
-rw-r--r--[-rwxr-xr-x]admin/WebConsole/gestores/gestor_pxe_grub4dos.php93
-rw-r--r--[-rwxr-xr-x]admin/WebConsole/gestores/gestor_ubicarordenadores.php4
-rw-r--r--admin/WebConsole/idiomas/javascripts/esp/propiedades_imagenes_esp.js6
-rw-r--r--admin/WebConsole/idiomas/php/cat/menucliente_cat.php12
-rw-r--r--admin/WebConsole/idiomas/php/eng/menucliente_eng.php12
-rw-r--r--admin/WebConsole/idiomas/php/esp/menucliente_esp.php12
-rw-r--r--admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php3
-rw-r--r--admin/WebConsole/includes/ConfiguracionesParticiones.php2
-rw-r--r--admin/WebConsole/jscripts/propiedades_imagenes.js34
-rw-r--r--admin/WebConsole/jscripts/validators.js3
-rw-r--r--admin/WebConsole/principal/aulas.php5
-rw-r--r--admin/WebConsole/principal/boot_grub4dos.php217
-rw-r--r--admin/WebConsole/principal/ubicarordenadores.php6
-rw-r--r--admin/WebConsole/propiedades/propiedades_imagenes.php1
-rw-r--r--admin/WebConsole/varios/menucliente.php12
-rw-r--r--admin/WebConsole/varios/msgbrowser.php4
-rwxr-xr-xclient/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks4
-rw-r--r--client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions250
-rw-r--r--client/boot-tools/clientstructure/etc/ssh/sshd_config2
-rw-r--r--client/boot-tools/kernelParameterOG.es.txt5
-rw-r--r--client/boot-tools/ogClientManager.lib111
-rwxr-xr-xclient/engine/Boot.lib440
-rwxr-xr-xclient/engine/Disk.lib25
-rwxr-xr-xclient/engine/File.lib9
-rwxr-xr-xclient/engine/FileSystem.lib31
-rwxr-xr-xclient/engine/Image.lib54
-rwxr-xr-xclient/engine/PostConfEAC.lib575
-rwxr-xr-xclient/engine/Protocol.lib44
-rw-r--r--client/engine/README.es.txt4
-rwxr-xr-xclient/engine/Registry.lib397
-rwxr-xr-x[-rw-r--r--]client/engine/String.lib0
-rwxr-xr-xclient/engine/System.lib32
-rwxr-xr-xclient/shared/etc/init/default.sh3
-rw-r--r--client/shared/etc/lang.es_ES.conf19
-rw-r--r--client/shared/lib/grub4dos/badgrub.exebin210827 -> 235441 bytes
-rw-r--r--[-rwxr-xr-x]client/shared/lib/grub4dos/bootlace.combin37092 -> 37092 bytes
-rw-r--r--client/shared/lib/grub4dos/grldrbin195435 -> 220049 bytes
-rw-r--r--client/shared/lib/grub4dos/grldr.mbrbin9216 -> 9216 bytes
-rw-r--r--client/shared/lib/grub4dos/grub.exebin212363 -> 236977 bytes
-rw-r--r--client/shared/lib/grub4dos/menu.lst83
-rwxr-xr-xclient/shared/scripts/cloneRemoteFromMaster142
-rwxr-xr-xclient/shared/scripts/configureOs46
-rwxr-xr-xclient/shared/scripts/createImage88
-rwxr-xr-xclient/shared/scripts/deployImage19
-rwxr-xr-xclient/shared/scripts/generateMenuDefault30
-rwxr-xr-xclient/shared/scripts/updateBootCache7
-rwxr-xr-xclient/shared/scripts/updateCache35
-rw-r--r--doc/CHANGELOG.es.txt48
-rw-r--r--doc/INSTALL.es.txt43
-rw-r--r--doc/VERSION.txt2
-rw-r--r--installer/README.es.txt12
-rwxr-xr-xinstaller/opengnsys_installer.sh94
-rwxr-xr-xinstaller/opengnsys_makecompress.sh27
-rwxr-xr-xinstaller/opengnsys_update.sh316
-rw-r--r--server/tftpboot/NetbootPXE.es.txt39
-rw-r--r--server/tftpboot/grldrbin0 -> 220049 bytes
-rw-r--r--server/tftpboot/menu.lst/default8
-rw-r--r--server/tftpboot/menu.lst/examples/default25
-rw-r--r--server/tftpboot/menu.lst/examples/defaultHOTREBOOT_WindowsXP36
-rw-r--r--server/tftpboot/menu.lst/templates/18
-rw-r--r--server/tftpboot/menu.lst/templates/118
-rw-r--r--server/tftpboot/menu.lst/templates/126
-rw-r--r--server/tftpboot/menu.lst/templates/pxe38
-rw-r--r--server/tftpboot/menu.lst/templates/pxeADMIN38
-rw-r--r--server/tftpboot/pxelinux.0bin14776 -> 0 bytes
-rw-r--r--server/tftpboot/pxelinux.cfg/examples/callGRUBfromPXELINUX61
-rw-r--r--server/tftpboot/pxelinux.cfg/examples/examplecallGrub29
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>&nbsp;<? echo $TbMsg[10] ?>&nbsp;</TD>
<TH align=center>&nbsp;<? echo $TbMsg[11] ?>&nbsp;</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>&nbsp;'.'<span style="FONT-SIZE:10px; COLOR: red;" >'.$TbMsg[12].'</span></TD>'.chr(13);
else
$tablaHtml.='<TD>&nbsp;'.$rs->campos["nombreso"].'&nbsp;</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>&nbsp;</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>&nbsp;'.formatomiles($tbKeys[$k]["tamano"]).'&nbsp;</TD>'.chr(13);
echo'<TD align=center>&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</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&Oacute;.- No està accedint des d'un ordinador permès"';
+ $TbMsg[1]='"Direcci&oacute; IP"';
+ $TbMsg[2]='"NO S'HA DETECTAT CAP MEN&Uacute; 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&Oacute;N.- Usted no est&aacute; accediendo desde un ordenador permitido"';
+ $TbMsg[1]='"Direcci&oacute;n IP"';
+ $TbMsg[2]='"NO SE HA DETECTADO NING&Uacute;N MEN&Uacute; 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&Uacute;N MEN&Uacute; 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
index 3cd26a61..92b924d2 100644
--- a/client/shared/lib/grub4dos/badgrub.exe
+++ b/client/shared/lib/grub4dos/badgrub.exe
Binary files differ
diff --git a/client/shared/lib/grub4dos/bootlace.com b/client/shared/lib/grub4dos/bootlace.com
index 199831f6..58ae01f9 100755..100644
--- a/client/shared/lib/grub4dos/bootlace.com
+++ b/client/shared/lib/grub4dos/bootlace.com
Binary files differ
diff --git a/client/shared/lib/grub4dos/grldr b/client/shared/lib/grub4dos/grldr
index a31e27bd..16ed4c77 100644
--- a/client/shared/lib/grub4dos/grldr
+++ b/client/shared/lib/grub4dos/grldr
Binary files differ
diff --git a/client/shared/lib/grub4dos/grldr.mbr b/client/shared/lib/grub4dos/grldr.mbr
index 6130129d..7af7ed3c 100644
--- a/client/shared/lib/grub4dos/grldr.mbr
+++ b/client/shared/lib/grub4dos/grldr.mbr
Binary files differ
diff --git a/client/shared/lib/grub4dos/grub.exe b/client/shared/lib/grub4dos/grub.exe
index 8df2433f..57b890d2 100644
--- a/client/shared/lib/grub4dos/grub.exe
+++ b/client/shared/lib/grub4dos/grub.exe
Binary files differ
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
new file mode 100644
index 00000000..16ed4c77
--- /dev/null
+++ b/server/tftpboot/grldr
Binary files differ
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
deleted file mode 100644
index 08270f1a..00000000
--- a/server/tftpboot/pxelinux.0
+++ /dev/null
Binary files differ
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