summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2014-06-18 10:42:24 +0000
committerramon <ramongomez@us.es>2014-06-18 10:42:24 +0000
commit1602040392ece97f3876f6b756158141a41cac3a (patch)
treedd933aa35b10a8dcb8bfc98c21f51de309f56cad
parent51c2318a7174de452b9ebd41dde9335a97b94e3f (diff)
Versión 1.0.5, #616: Integrar código de la versión 1.0.5 en rama principal.
git-svn-id: https://opengnsys.es/svn/trunk@4309 a21b9725-9963-47de-94b9-378ad31fedc9
-rw-r--r--admin/Database/ogAdmBD-1.0-1.0.4a.sql74
l---------admin/Database/ogAdmBD-1.0-1.0.5.sql1
-rw-r--r--admin/Database/ogAdmBD-1.0.1-1.0.4a.sql74
-rw-r--r--admin/Database/ogAdmBD-1.0.1-1.0.5.sql194
-rw-r--r--admin/Database/ogAdmBD-1.0.2-1.0.4a.sql76
-rw-r--r--admin/Database/ogAdmBD-1.0.2-1.0.5.sql194
-rw-r--r--admin/Database/ogAdmBD-1.0.2a-1.0.4a.sql72
-rw-r--r--admin/Database/ogAdmBD-1.0.2a-1.0.5.sql193
-rw-r--r--admin/Database/ogAdmBD-1.0.3-1.0.4a.sql69
-rw-r--r--admin/Database/ogAdmBD-1.0.3-1.0.5.sql194
-rw-r--r--admin/Database/ogAdmBD-1.0.4-1.0.4a.sql12
-rw-r--r--admin/Database/ogAdmBD-1.0.4-1.0.5.sql145
-rw-r--r--admin/Database/ogAdmBD-1.0.4a-1.0.5.sql136
-rw-r--r--admin/Database/ogAdmBD-1.0.5-postinst.sql41
-rw-r--r--admin/Database/ogAdmBD.sql185
-rwxr-xr-xadmin/Interface/CambiarAcceso4
-rwxr-xr-xadmin/Interface/Configurar224
-rwxr-xr-xadmin/Interface/CrearImagen6
-rwxr-xr-xadmin/Interface/CrearImagenBasica98
-rwxr-xr-xadmin/Interface/CrearSoftIncremental98
-rwxr-xr-xadmin/Interface/EjecutarScript22
-rwxr-xr-xadmin/Interface/IniciarSesion13
-rwxr-xr-xadmin/Interface/InventarioHardware5
-rwxr-xr-xadmin/Interface/InventarioSoftware16
-rwxr-xr-xadmin/Interface/RestaurarImagen189
-rwxr-xr-xadmin/Interface/RestaurarImagenBasica89
-rwxr-xr-xadmin/Interface/RestaurarSoftIncremental82
-rwxr-xr-xadmin/Interface/getConfiguration69
-rw-r--r--admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg3
-rw-r--r--admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.c4074
-rw-r--r--admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.h49
-rw-r--r--admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.c65
-rw-r--r--admin/Sources/Includes/ogAdmLib.c57
-rw-r--r--admin/Sources/Includes/ogAdmLib.h32
-rwxr-xr-xadmin/Sources/Services/ogAdmRepoAux243
-rw-r--r--admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp721
-rw-r--r--admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h13
-rwxr-xr-xadmin/Sources/Services/ogAdmServerAux41
-rw-r--r--admin/Sources/Services/opengnsys.default2
-rwxr-xr-xadmin/Sources/Services/opengnsys.init16
-rw-r--r--admin/WebConsole/asistentes/AsistenteParticionado.php40
-rw-r--r--admin/WebConsole/asistentes/gestores/gestor_Comandos.php7
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php13
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php12
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php19
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php4
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php11
-rw-r--r--admin/WebConsole/asistentes/jscripts/asistentes.js240
-rw-r--r--admin/WebConsole/asistentes/xajax.server.php49
-rw-r--r--admin/WebConsole/barramenu.php182
-rw-r--r--admin/WebConsole/clases/AdoPhp.php5
-rw-r--r--admin/WebConsole/comandos/Arrancar.php23
-rw-r--r--admin/WebConsole/comandos/Configurar.php102
-rw-r--r--admin/WebConsole/comandos/CrearImagen.php78
-rw-r--r--admin/WebConsole/comandos/CrearImagenBasica.php213
-rw-r--r--admin/WebConsole/comandos/CrearSoftIncremental.php210
-rw-r--r--admin/WebConsole/comandos/EliminarImagenCache.php448
-rw-r--r--admin/WebConsole/comandos/EliminarImagenRepositorio.php739
-rw-r--r--admin/WebConsole/comandos/IniciarSesion.php54
-rw-r--r--admin/WebConsole/comandos/InventarioSoftware.php20
-rw-r--r--admin/WebConsole/comandos/RestaurarImagen.php182
-rw-r--r--admin/WebConsole/comandos/RestaurarImagenBasica.php228
-rw-r--r--admin/WebConsole/comandos/RestaurarSoftIncremental.php225
-rw-r--r--admin/WebConsole/comandos/gestores/gestor_Comandos.php24
-rw-r--r--admin/WebConsole/comandos/includes/FiltradoAmbito.php1
-rw-r--r--admin/WebConsole/comandos/includes/opcionesacciones.php2
-rw-r--r--admin/WebConsole/comandos/jscripts/Arrancar.js10
-rw-r--r--admin/WebConsole/comandos/jscripts/Configurar.js138
-rw-r--r--admin/WebConsole/comandos/jscripts/CrearImagen.js27
-rw-r--r--admin/WebConsole/comandos/jscripts/CrearImagenBasica.js109
-rw-r--r--admin/WebConsole/comandos/jscripts/CrearSoftIncremental.js110
-rw-r--r--admin/WebConsole/comandos/jscripts/EjecutarScripts.js3
-rw-r--r--admin/WebConsole/comandos/jscripts/EliminarImagenCache.js44
-rw-r--r--admin/WebConsole/comandos/jscripts/IniciarSesion.js8
-rw-r--r--admin/WebConsole/comandos/jscripts/InventarioSoftware.js9
-rw-r--r--admin/WebConsole/comandos/jscripts/RestaurarImagen.js13
-rw-r--r--admin/WebConsole/comandos/jscripts/RestaurarImagenBasica.js125
-rw-r--r--admin/WebConsole/comandos/jscripts/RestaurarSoftIncremental.js127
-rw-r--r--admin/WebConsole/controlacceso.php3
-rw-r--r--admin/WebConsole/controlpostacceso.php23
-rw-r--r--admin/WebConsole/estilos.css733
-rw-r--r--admin/WebConsole/frames.php29
-rw-r--r--admin/WebConsole/gestores/gestor_aulas.php106
-rw-r--r--admin/WebConsole/gestores/gestor_ejecutaracciones.php19
-rw-r--r--admin/WebConsole/gestores/gestor_grupos.php19
-rw-r--r--admin/WebConsole/gestores/gestor_imagenes.php39
-rw-r--r--admin/WebConsole/gestores/gestor_menus.php10
-rw-r--r--admin/WebConsole/gestores/gestor_ordenadores.php64
-rw-r--r--admin/WebConsole/gestores/gestor_perfilhardwares.php9
-rw-r--r--admin/WebConsole/gestores/gestor_pxe_grub4dos.php104
-rw-r--r--admin/WebConsole/gestores/relaciones/ordenadores_eliminacion.php36
-rw-r--r--admin/WebConsole/idiomas/javascripts/cat/comandos/crearimagenbasica_cat.js10
-rw-r--r--admin/WebConsole/idiomas/javascripts/cat/comandos/eliminarimagencache_cat.js8
-rw-r--r--admin/WebConsole/idiomas/javascripts/cat/comandos/restaurarimagenbasica_cat.js14
-rw-r--r--admin/WebConsole/idiomas/javascripts/cat/comandos/restaurarsoftincremental_cat.es14
-rw-r--r--admin/WebConsole/idiomas/javascripts/cat/propiedades_aulas_cat.js9
-rw-r--r--admin/WebConsole/idiomas/javascripts/cat/propiedades_ordenadores_cat.js3
-rw-r--r--admin/WebConsole/idiomas/javascripts/eng/comandos/crearimagenbasica_eng.js10
-rw-r--r--admin/WebConsole/idiomas/javascripts/eng/comandos/eliminarimagencache_eng.js8
-rw-r--r--admin/WebConsole/idiomas/javascripts/eng/comandos/restaurarimagenbasica_eng.js14
-rw-r--r--admin/WebConsole/idiomas/javascripts/eng/comandos/restaurarsoftincremental_eng.js14
-rw-r--r--admin/WebConsole/idiomas/javascripts/eng/propiedades_aulas_eng.js10
-rw-r--r--admin/WebConsole/idiomas/javascripts/eng/propiedades_ordenadores_eng.js3
-rw-r--r--admin/WebConsole/idiomas/javascripts/esp/comandos/configurar_esp.js2
-rw-r--r--admin/WebConsole/idiomas/javascripts/esp/comandos/crearimagenbasica_esp.js10
-rw-r--r--admin/WebConsole/idiomas/javascripts/esp/comandos/crearsoftincremental_esp.js7
-rw-r--r--admin/WebConsole/idiomas/javascripts/esp/comandos/eliminarimagencache_esp.js8
-rw-r--r--admin/WebConsole/idiomas/javascripts/esp/comandos/restaurarimagenbasica_esp.js14
-rw-r--r--admin/WebConsole/idiomas/javascripts/esp/comandos/restaurarsoftincremental_esp.js14
-rw-r--r--admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js5
-rw-r--r--admin/WebConsole/idiomas/javascripts/esp/propiedades_imagenes_esp.js5
-rw-r--r--admin/WebConsole/idiomas/javascripts/esp/propiedades_ordenadores_esp.js3
-rw-r--r--admin/WebConsole/idiomas/php/cat/acceso_cat.php42
-rw-r--r--admin/WebConsole/idiomas/php/cat/acciones_cat.php2
-rw-r--r--admin/WebConsole/idiomas/php/cat/accionmenu_cat.php8
-rw-r--r--admin/WebConsole/idiomas/php/cat/acercade_cat.php19
-rw-r--r--admin/WebConsole/idiomas/php/cat/actualizar_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/administracion_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/administradores_centros_cat.php16
-rw-r--r--admin/WebConsole/idiomas/php/cat/administradores_usuarios_cat.php16
-rw-r--r--admin/WebConsole/idiomas/php/cat/aulas_cat.php30
-rw-r--r--admin/WebConsole/idiomas/php/cat/avisos_cat.php8
-rw-r--r--admin/WebConsole/idiomas/php/cat/barramenu_cat.php8
-rw-r--r--admin/WebConsole/idiomas/php/cat/boot_grub4dos_cat.php53
-rw-r--r--admin/WebConsole/idiomas/php/cat/buscar_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/clases/Almanaque_cat.php34
-rw-r--r--admin/WebConsole/idiomas/php/cat/clases/Calendario_cat.php34
-rw-r--r--admin/WebConsole/idiomas/php/cat/colasacciones_cat.php26
-rw-r--r--admin/WebConsole/idiomas/php/cat/colasreservas_cat.php12
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/apagar_cat.php18
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/arrancar_cat.php24
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/comando_cat.php18
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/configurar_cat.php62
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/conmutar_cat.php18
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/crearimagen_cat.php32
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/crearimagenbasica_cat.php25
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/crearperfilsoftware_cat.php23
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/crearsoftincremental_cat.php20
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php75
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/eliminarimagencache_cat.php29
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/eliminarimagenrepo_cat.php41
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/gestor_ejecutarscripts_cat.php14
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/iniciarsesion_cat.php30
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/inventariohardware_cat.php24
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/inventariosoftware_cat.php26
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/mensajes_cat.php28
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/opcionesacciones_cat.php30
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/particionaryformatear_cat.php32
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/reiniciar_cat.php18
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/rembooffline_cat.php18
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/restaurarimagen_cat.php60
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/restaurarimagenbasica_cat.php53
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/restaurarsoftincremental_cat.php51
-rw-r--r--admin/WebConsole/idiomas/php/cat/comandos/tomaconfiguracion_cat.php18
-rw-r--r--admin/WebConsole/idiomas/php/cat/configuraciones_cat.php88
-rw-r--r--admin/WebConsole/idiomas/php/cat/conmutar_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/consolaremota_cat.php34
-rw-r--r--admin/WebConsole/idiomas/php/cat/ecoremoto_cat.php22
-rw-r--r--admin/WebConsole/idiomas/php/cat/ejecutaracciones_cat.php7
-rw-r--r--admin/WebConsole/idiomas/php/cat/estados_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/hardwares_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/iconos_cat.php66
-rw-r--r--admin/WebConsole/idiomas/php/cat/imagenes_cat.php13
-rw-r--r--admin/WebConsole/idiomas/php/cat/imagenincremental_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/inclusionacciones_cat.php26
-rw-r--r--admin/WebConsole/idiomas/php/cat/incorporaordenadores_cat.php10
-rw-r--r--admin/WebConsole/idiomas/php/cat/incrementalcomponente_soft_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/informacion_acciones_cat.php18
-rw-r--r--admin/WebConsole/idiomas/php/cat/informacion_imagenes_cat.php8
-rw-r--r--admin/WebConsole/idiomas/php/cat/informacion_incrementales_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/informacion_menus_cat.php24
-rw-r--r--admin/WebConsole/idiomas/php/cat/informacion_perfileshard_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/informacion_perfilessoft_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/informacion_procedimientos_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/informacion_repositorio_cat.php18
-rw-r--r--admin/WebConsole/idiomas/php/cat/informacion_tareas_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/menucliente_cat.php10
-rw-r--r--admin/WebConsole/idiomas/php/cat/menus_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/msgbrowser_cat.php52
-rw-r--r--admin/WebConsole/idiomas/php/cat/nada_cat.php16
-rw-r--r--admin/WebConsole/idiomas/php/cat/perfilcomponente_hard_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/perfilcomponente_soft_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/pintaParticiones_cat.php51
-rw-r--r--admin/WebConsole/idiomas/php/cat/procedimientoscomandos_cat.php12
-rw-r--r--admin/WebConsole/idiomas/php/cat/programaciones_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/programacionesaulas_cat.php30
-rw-r--r--admin/WebConsole/idiomas/php/cat/programacionesreservas_cat.php22
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php50
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_centros_cat.php8
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_componentehardwares_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_componentesoftwares_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_entidades_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_entornos_cat.php16
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_grupos_cat.php10
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_imagenes_cat.php24
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_menus_cat.php10
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_ordenadores_cat.php26
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_ordenadorestandar_cat.php10
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php8
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_perfilsoftwares_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_procedimientos_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_repositorios_cat.php28
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_reservas_cat.php12
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_tareas_cat.php18
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_tipohardwares_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_universidades_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/propiedades_usuarios_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/purgar_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/repositorios_cat.php30
-rw-r--r--admin/WebConsole/idiomas/php/cat/reservas_cat.php4
-rw-r--r--admin/WebConsole/idiomas/php/cat/softwares_cat.php16
-rw-r--r--admin/WebConsole/idiomas/php/cat/sondeo_cat.php6
-rw-r--r--admin/WebConsole/idiomas/php/cat/tareascomandos_cat.php12
-rw-r--r--admin/WebConsole/idiomas/php/eng/acceso_eng.php2
-rw-r--r--admin/WebConsole/idiomas/php/eng/acercade_eng.php19
-rw-r--r--admin/WebConsole/idiomas/php/eng/aulas_eng.php3
-rw-r--r--admin/WebConsole/idiomas/php/eng/avisos_eng.php2
-rw-r--r--admin/WebConsole/idiomas/php/eng/barramenu_eng.php5
-rw-r--r--admin/WebConsole/idiomas/php/eng/boot_grub4dos_eng.php58
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/arrancar_eng.php6
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/configurar_eng.php10
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/crearimagenbasica_eng.php25
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/crearsoftincremental_eng.php6
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php3
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/eliminarimagencache_eng.php29
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/eliminarimagenrepo_eng.php41
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/iniciarsesion_eng.php8
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/inventariohardware_eng.php16
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/inventariosoftware_eng.php18
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/mensajes_eng.php10
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/reiniciar_eng.php4
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/restaurarimagenbasica_eng.php53
-rw-r--r--admin/WebConsole/idiomas/php/eng/comandos/restaurarsoftincremental_eng.php51
-rw-r--r--admin/WebConsole/idiomas/php/eng/configuraciones_eng.php6
-rw-r--r--admin/WebConsole/idiomas/php/eng/imagenes_eng.php3
-rw-r--r--admin/WebConsole/idiomas/php/eng/nada_eng.php16
-rw-r--r--admin/WebConsole/idiomas/php/eng/pintaParticiones_eng.php51
-rw-r--r--admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php9
-rw-r--r--admin/WebConsole/idiomas/php/eng/propiedades_imagenes_eng.php10
-rw-r--r--admin/WebConsole/idiomas/php/eng/propiedades_repositorios_eng.php6
-rw-r--r--admin/WebConsole/idiomas/php/eng/repositorios_eng.php2
-rw-r--r--admin/WebConsole/idiomas/php/esp/acceso_esp.php3
-rw-r--r--admin/WebConsole/idiomas/php/esp/acercade_esp.php19
-rw-r--r--admin/WebConsole/idiomas/php/esp/aulas_esp.php2
-rw-r--r--admin/WebConsole/idiomas/php/esp/avisos_esp.php2
-rw-r--r--admin/WebConsole/idiomas/php/esp/barramenu_esp.php3
-rw-r--r--admin/WebConsole/idiomas/php/esp/boot_grub4dos_esp.php53
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/arrancar_esp.php4
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/configurar_esp.php4
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/crearimagenbasica_esp.php25
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/crearsoftincremental_esp.php16
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php23
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/eliminarimagencache_esp.php29
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/eliminarimagenrepo_esp.php41
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/iniciarsesion_esp.php6
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/inventariohardware_esp.php6
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/inventariosoftware_esp.php6
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php17
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/restaurarimagenbasica_esp.php53
-rw-r--r--admin/WebConsole/idiomas/php/esp/comandos/restaurarsoftincremental_esp.php51
-rw-r--r--admin/WebConsole/idiomas/php/esp/configuraciones_esp.php4
-rw-r--r--admin/WebConsole/idiomas/php/esp/imagenes_esp.php3
-rw-r--r--admin/WebConsole/idiomas/php/esp/informacion_imagenes_esp.php24
-rw-r--r--admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php13
-rw-r--r--admin/WebConsole/idiomas/php/esp/nada_esp.php16
-rw-r--r--admin/WebConsole/idiomas/php/esp/pintaParticiones_esp.php50
-rw-r--r--admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php10
-rw-r--r--admin/WebConsole/idiomas/php/esp/propiedades_grupos_esp.php3
-rw-r--r--admin/WebConsole/idiomas/php/esp/propiedades_imagenes_esp.php14
-rw-r--r--admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php5
-rw-r--r--admin/WebConsole/idiomas/php/esp/propiedades_repositorios_esp.php6
-rw-r--r--admin/WebConsole/idiomas/php/esp/repositorios_esp.php2
-rw-r--r--admin/WebConsole/idiomas/php/esp/tiposhardwares_esp.php24
-rw-r--r--admin/WebConsole/images/acercade.pngbin0 -> 129699 bytes
-rw-r--r--admin/WebConsole/images/gplv3-88x31.pngbin0 -> 2986 bytes
-rw-r--r--admin/WebConsole/images/login_cat.jpgbin0 -> 85838 bytes
-rw-r--r--admin/WebConsole/includes/ConfiguracionesParticiones.php170
-rw-r--r--admin/WebConsole/includes/CreaTablaParametros.php3
-rw-r--r--admin/WebConsole/includes/HTMLCTESELECT.php12
-rw-r--r--admin/WebConsole/includes/HTMLSELECT.php5
-rw-r--r--admin/WebConsole/includes/comunes.php57
-rw-r--r--admin/WebConsole/includes/constantes.php89
-rw-r--r--admin/WebConsole/includes/ctrlacc.php2
-rw-r--r--admin/WebConsole/includes/opcionesprotocolos.php101
-rw-r--r--admin/WebConsole/includes/pintaParticiones.php602
-rw-r--r--admin/WebConsole/includes/pintaTablaConfiguraciones.php338
-rw-r--r--admin/WebConsole/includes/tftputils.php216
-rw-r--r--admin/WebConsole/jscripts/boot_grub4dos.js76
-rw-r--r--admin/WebConsole/jscripts/constantes.js6
-rw-r--r--admin/WebConsole/jscripts/imagenes.js36
-rw-r--r--admin/WebConsole/jscripts/propiedades_aulas.js24
-rw-r--r--admin/WebConsole/jscripts/propiedades_imagenes.js26
-rw-r--r--admin/WebConsole/jscripts/propiedades_ordenadores.js42
-rw-r--r--admin/WebConsole/jscripts/validators.js36
-rw-r--r--admin/WebConsole/menus/examplemenu.html5
-rw-r--r--admin/WebConsole/menus/menuejemplo.html29
-rw-r--r--admin/WebConsole/nada.php231
-rw-r--r--admin/WebConsole/principal/acercade.php43
-rw-r--r--admin/WebConsole/principal/aula.php125
-rw-r--r--admin/WebConsole/principal/aulas.php102
-rw-r--r--admin/WebConsole/principal/boot_grub4dos.php336
-rw-r--r--admin/WebConsole/principal/boot_grub4dos_crear.php771
-rw-r--r--admin/WebConsole/principal/boot_grub4dos_tabla.php56
-rw-r--r--admin/WebConsole/principal/colasacciones.php25
-rw-r--r--admin/WebConsole/principal/configuraciones.php150
-rw-r--r--admin/WebConsole/principal/imagenes.php285
-rw-r--r--admin/WebConsole/principal/repositorios.php72
-rw-r--r--admin/WebConsole/principal/verlog.php5
-rw-r--r--admin/WebConsole/principal/verlogseguimiento.php6
-rw-r--r--admin/WebConsole/propiedades/propiedades_aulas.php305
-rw-r--r--admin/WebConsole/propiedades/propiedades_grupos.php24
-rw-r--r--admin/WebConsole/propiedades/propiedades_imagenes.php249
-rw-r--r--admin/WebConsole/propiedades/propiedades_menus.php122
-rw-r--r--admin/WebConsole/propiedades/propiedades_ordenadores.php228
-rw-r--r--admin/WebConsole/propiedades/propiedades_perfilhardwares.php3
-rw-r--r--admin/WebConsole/propiedades/propiedades_repositorios.php431
-rw-r--r--admin/WebConsole/validacion/access_controller.php99
-rw-r--r--admin/WebConsole/validacion/functions.php175
-rw-r--r--admin/WebConsole/validacion/html/close.php5
-rw-r--r--admin/WebConsole/validacion/html/images/opengnsys.pngbin0 -> 7003 bytes
-rw-r--r--admin/WebConsole/validacion/html/login_prueba.php102
-rw-r--r--admin/WebConsole/validacion/html/validacion_ldap.php75
-rw-r--r--admin/WebConsole/validacion/html/validacion_prueba.php24
-rw-r--r--admin/WebConsole/validacion/html/validacion_template.php20
-rw-r--r--admin/WebConsole/varios/buscar.php8
-rw-r--r--admin/WebConsole/varios/incorporaordenadores.php37
-rw-r--r--admin/WebConsole/varios/informacion_acciones.php14
-rw-r--r--admin/WebConsole/varios/menucliente.php323
-rw-r--r--client/boot-tools/INSTALL.es.txt21
-rwxr-xr-xclient/boot-tools/boottoolsfunctions.lib113
-rwxr-xr-xclient/boot-tools/boottoolsgenerator.sh66
-rw-r--r--client/boot-tools/includes/etc/apt/sources.list.debian10
-rw-r--r--client/boot-tools/includes/etc/apt/sources.list.ubuntu4
-rwxr-xr-xclient/boot-tools/includes/etc/initramfs-tools/hooks/oghooks4
-rw-r--r--client/boot-tools/includes/etc/initramfs-tools/modules11
-rw-r--r--client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions117
-rwxr-xr-xclient/boot-tools/includes/etc/initramfs-tools/scripts/oginit14
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh113
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsInitrdGenerate.sh15
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh62
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareInstall.sh45
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Xwindow6
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Zinitrd4
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic3
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning7
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.local15
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.remote4
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.testing7
-rw-r--r--client/browser/src/mainwindow.cpp11
-rw-r--r--client/browser/src/mainwindow.h3
-rwxr-xr-xclient/engine/Boot.lib488
-rwxr-xr-xclient/engine/Cache.lib103
-rwxr-xr-xclient/engine/Disk.lib470
-rwxr-xr-xclient/engine/File.lib89
-rwxr-xr-xclient/engine/FileSystem.lib445
-rwxr-xr-xclient/engine/Image.lib255
-rwxr-xr-xclient/engine/Inventory.lib173
-rwxr-xr-xclient/engine/Net.lib84
-rwxr-xr-xclient/engine/PostConf.lib328
-rwxr-xr-xclient/engine/PostConfEAC.lib2
-rwxr-xr-xclient/engine/Protocol.lib89
-rwxr-xr-xclient/engine/Registry.lib20
-rwxr-xr-xclient/engine/Rsync.lib859
-rwxr-xr-xclient/engine/System.lib68
-rw-r--r--client/shared/README.es.txt22
-rwxr-xr-xclient/shared/bin/browserbin23763136 -> 442268 bytes
-rwxr-xr-xclient/shared/bin/grub-probe1.99bin0 -> 358216 bytes
-rwxr-xr-xclient/shared/bin/ld-macbin0 -> 87872 bytes
-rwxr-xr-xclient/shared/bin/poweroffconf38
-rw-r--r--client/shared/etc/engine.cfg13
-rw-r--r--client/shared/etc/es.qmapbin0 -> 102808 bytes
-rwxr-xr-xclient/shared/etc/init/default.sh3
-rw-r--r--client/shared/etc/lang.ca_ES.conf120
-rw-r--r--client/shared/etc/lang.en_GB.conf121
-rw-r--r--client/shared/etc/lang.es_ES.conf120
-rwxr-xr-xclient/shared/etc/preinit/fileslinks.sh25
-rwxr-xr-xclient/shared/etc/preinit/loadenviron.sh25
-rwxr-xr-xclient/shared/etc/preinit/otherservices.sh4
-rw-r--r--client/shared/lib/engine/tests/NoModify/File1.shtest5
-rwxr-xr-xclient/shared/lib/engine/tests/crearTestDisk17
-rw-r--r--client/shared/lib/grub4dos/example.menu.lst108
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/COPYING340
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/ChangeLog_GRUB4DOS.txt704
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/ChangeLog_chenall.txt645
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/README_GRUB4DOS.txt4138
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/README_GRUB4DOS_CN.txt4314
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/badgrub.exebin0 -> 289455 bytes
-rwxr-xr-xclient/shared/lib/grub4dos/grub4dos-0.4.5b/bootlace.combin0 -> 37092 bytes
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/config.sys6
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/default46
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/grldrbin0 -> 273039 bytes
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/grldr.mbrbin0 -> 9216 bytes
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/grub.exebin0 -> 292015 bytes
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/grub.pifbin0 -> 967 bytes
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/hmload.combin0 -> 1856 bytes
-rw-r--r--client/shared/lib/grub4dos/grub4dos-0.4.5b/menu.lst132
-rwxr-xr-xclient/shared/lib/httpd/LogCommand.sh18
-rwxr-xr-xclient/shared/lib/httpd/LogSession.sh13
-rwxr-xr-xclient/shared/lib/httpd/httpd-log.sh12
-rwxr-xr-xclient/shared/lib/ogclient/ogAdmLnxClientbin540196 -> 713996 bytes
-rwxr-xr-xclient/shared/lib/qtlib/libQtCore.so.4bin0 -> 3222280 bytes
-rwxr-xr-xclient/shared/lib/qtlib/libQtGui.so.4bin0 -> 11154352 bytes
-rwxr-xr-xclient/shared/lib/qtlib/libQtNetwork.so.4bin0 -> 1116108 bytes
-rwxr-xr-xclient/shared/lib/qtlib/libQtWebKit.so.4bin0 -> 21958488 bytes
-rwxr-xr-xclient/shared/lib/qtplugins/imageformats/libqjpeg.sobin0 -> 239404 bytes
-rwxr-xr-xclient/shared/scripts/ImagenesSincronizadas.lib368
-rwxr-xr-xclient/shared/scripts/bootOs17
-rwxr-xr-xclient/shared/scripts/buildToOrder69
-rwxr-xr-xclient/shared/scripts/cloneRemoteFromMaster114
-rwxr-xr-xclient/shared/scripts/configureOs7
-rw-r--r--client/shared/scripts/configureOsCustom.template12
-rwxr-xr-xclient/shared/scripts/createBaseImage174
-rwxr-xr-xclient/shared/scripts/createDiffImage215
-rwxr-xr-xclient/shared/scripts/createImage124
-rw-r--r--client/shared/scripts/createImageCustomPost.template12
-rw-r--r--client/shared/scripts/createImageCustomPre.template11
-rwxr-xr-xclient/shared/scripts/deployImage231
-rwxr-xr-xclient/shared/scripts/generateMenuDefault72
-rwxr-xr-xclient/shared/scripts/grubSyntax381
-rwxr-xr-xclient/shared/scripts/initCache52
-rwxr-xr-xclient/shared/scripts/ogCrearImagenBasica167
-rwxr-xr-xclient/shared/scripts/ogCrearSoftIncremental185
-rwxr-xr-xclient/shared/scripts/ogRestaurarImagenBasica199
-rwxr-xr-xclient/shared/scripts/ogRestaurarSoftIncremental209
-rwxr-xr-xclient/shared/scripts/poweroff17
-rwxr-xr-xclient/shared/scripts/reboot33
-rwxr-xr-xclient/shared/scripts/restoreBaseImage148
-rwxr-xr-xclient/shared/scripts/restoreDiffImage135
-rwxr-xr-xclient/shared/scripts/restoreImage124
-rwxr-xr-xclient/shared/scripts/setBootMode35
-rwxr-xr-xclient/shared/scripts/updateBootCache2
-rwxr-xr-xclient/shared/scripts/updateCache232
-rw-r--r--doc/CHANGELOG.es.txt112
-rw-r--r--doc/INSTALL.es.txt37
-rw-r--r--doc/VERSION.txt2
-rw-r--r--installer/INSTALL.en.txt10
-rw-r--r--installer/INSTALL.es.txt17
-rwxr-xr-xinstaller/install_ticket_wolunicast.sh55
-rwxr-xr-xinstaller/opengnsys_installer.sh433
-rwxr-xr-xinstaller/opengnsys_makecompress.sh9
-rwxr-xr-xinstaller/opengnsys_uninstall.sh57
-rwxr-xr-xinstaller/opengnsys_update.sh215
-rw-r--r--repoman/README.es.txt1
-rwxr-xr-xrepoman/bin/deleteimage78
-rwxr-xr-xrepoman/bin/deletepreimage62
-rwxr-xr-xrepoman/bin/opengnsys.cron31
-rwxr-xr-xrepoman/bin/sendFileMcast2
-rwxr-xr-xrepoman/bin/torrent-creator6
-rw-r--r--repoman/etc/rsyncd.conf.tmpl14
-rw-r--r--repoman/etc/rsyncd.secrets.tmpl1
-rw-r--r--server/INSTALL0
-rw-r--r--server/README.es.txt11
-rwxr-xr-xserver/bin/checkperms55
-rwxr-xr-xserver/bin/clean-mountdirimage38
-rwxr-xr-xserver/bin/compareDhcpOpengnsys17
-rwxr-xr-xserver/bin/createfileimage61
-rwxr-xr-xserver/bin/listclientmode44
-rwxr-xr-xserver/bin/mountimage66
-rwxr-xr-xserver/bin/partclone2sync174
-rwxr-xr-xserver/bin/reduceimage54
-rwxr-xr-xserver/bin/registeredsoftware63
-rwxr-xr-xserver/bin/setclientmode99
-rwxr-xr-xserver/bin/setserveraddr113
-rwxr-xr-xserver/bin/setsmbpass15
-rwxr-xr-xserver/bin/unmountimage47
-rw-r--r--server/etc/apache-prev2.4.conf.tmpl12
-rw-r--r--server/etc/apache.conf.tmpl5
-rw-r--r--server/tftpboot/menu.lst/templates/00unknown7
-rw-r--r--server/tftpboot/menu.lst/templates/01 (renamed from server/tftpboot/menu.lst/templates/1)1
-rw-r--r--server/tftpboot/menu.lst/templates/111
-rw-r--r--server/tftpboot/menu.lst/templates/121
-rw-r--r--server/tftpboot/menu.lst/templates/19pxeADMIN (renamed from server/tftpboot/menu.lst/templates/pxeADMIN)1
-rw-r--r--server/tftpboot/menu.lst/templates/ogadmin34
-rw-r--r--server/tftpboot/menu.lst/templates/pxe1
474 files changed, 34732 insertions, 8277 deletions
diff --git a/admin/Database/ogAdmBD-1.0-1.0.4a.sql b/admin/Database/ogAdmBD-1.0-1.0.4a.sql
deleted file mode 100644
index c0f1bcd7..00000000
--- a/admin/Database/ogAdmBD-1.0-1.0.4a.sql
+++ /dev/null
@@ -1,74 +0,0 @@
-UPDATE ogAdmBD.parametros SET tipopa = '1', visual = '1' WHERE idparametro = 30;
-
-UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
-UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
-
-ALTER TABLE ogAdmBD.menus MODIFY resolucion smallint(4);
-
-ALTER TABLE ogAdmBD.perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
-
-ALTER TABLE ogAdmBD.ordenadores_particiones
- MODIFY codpar int(8) NOT NULL,
- ADD numdisk tinyint(4) NOT NULL DEFAULT 1 AFTER idordenador,
- ADD cache varchar(500),
- DROP INDEX idordenadornumpar,
- ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
-
-ALTER TABLE ogAdmBD.imagenes MODIFY codpar int(8) NOT NULL;
-ALTER TABLE ogAdmBD.sistemasficheros MODIFY codpar int(8) NOT NULL;
-ALTER TABLE ogAdmBD.tipospar MODIFY codpar int(8) NOT NULL;
-INSERT INTO ogAdmBD.tipospar (codpar,tipopar,clonable) VALUES
- (6, 'FAT16', 1),
- (CONV('A5',16,10), 'FREEBSD', 1),
- (CONV('A6',16,10), 'OPENBSD', 1),
- (CONV('AF',16,10), 'HFS', 1),
- (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
- (CONV('DA',16,10), 'DATA', 1),
- (CONV('EE',16,10), 'GPT', 0),
- (CONV('EF',16,10), 'EFI', 0),
- (CONV('FB',16,10), 'VMFS', 1),
- (CONV('0700',16,10), 'WINDOWS', 1),
- (CONV('0C01',16,10), 'WIN-RESERV', 1),
- (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
- (CONV('7F01',16,10), 'CHROMEOS', 1),
- (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
- (CONV('8200',16,10), 'LINUX-SWAP', 0),
- (CONV('8300',16,10), 'LINUX', 1),
- (CONV('8301',16,10), 'LINUX-RESERV', 1),
- (CONV('8E00',16,10), 'LINUX-LVM', 1),
- (CONV('A500',16,10), 'FREEBSD-DISK', 0),
- (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
- (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
- (CONV('A503',16,10), 'FREEBSD', 1),
- (CONV('AF00',16,10), 'HFS', 1),
- (CONV('AF01',16,10), 'HFS-RAID', 1),
- (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
- (CONV('BF00',16,10), 'SOLARIS', 1),
- (CONV('BF01',16,10), 'SOLARIS', 1),
- (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
- (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
- (CONV('BF04',16,10), 'SOLARIS', 1),
- (CONV('BF05',16,10), 'SOLARIS', 1),
- (CONV('CA00',16,10), 'CACHE', 0),
- (CONV('EF00',16,10), 'EFI', 0),
- (CONV('EF01',16,10), 'MBR', 0),
- (CONV('EF02',16,10), 'BIOS-BOOT', 0),
- (CONV('FD00',16,10), 'LINUX-RAID', 1),
- (CONV('FFFF',16,10), 'UNKNOWN', 1);
-
-ALTER TABLE ogAdmBD.ordenadores ADD fotoord VARCHAR (250) NOT NULL;
-
-UPDATE ogAdmBD.aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
-
-# Internacionalización correcta de los asistentes.
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente Deploy de Imagenes' WHERE descripcion = 'Asistente "Deploy" de Imagenes';
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente UpdateCache con Imagenes' WHERE descripcion = 'Asistente "UpdateCache" con Imagenes';
-# Mejorar el rendimiento en acceso a la cola de acciones.
-ALTER TABLE ogAdmBD.acciones
- ADD KEY (idordenador),
- ADD KEY (idprocedimiento),
- ADD KEY (idtarea),
- ADD KEY (idprogramacion);
-
diff --git a/admin/Database/ogAdmBD-1.0-1.0.5.sql b/admin/Database/ogAdmBD-1.0-1.0.5.sql
new file mode 120000
index 00000000..162c8be8
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0-1.0.5.sql
@@ -0,0 +1 @@
+ogAdmBD-1.0.1-1.0.5.sql \ No newline at end of file
diff --git a/admin/Database/ogAdmBD-1.0.1-1.0.4a.sql b/admin/Database/ogAdmBD-1.0.1-1.0.4a.sql
deleted file mode 100644
index c0f1bcd7..00000000
--- a/admin/Database/ogAdmBD-1.0.1-1.0.4a.sql
+++ /dev/null
@@ -1,74 +0,0 @@
-UPDATE ogAdmBD.parametros SET tipopa = '1', visual = '1' WHERE idparametro = 30;
-
-UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
-UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
-
-ALTER TABLE ogAdmBD.menus MODIFY resolucion smallint(4);
-
-ALTER TABLE ogAdmBD.perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
-
-ALTER TABLE ogAdmBD.ordenadores_particiones
- MODIFY codpar int(8) NOT NULL,
- ADD numdisk tinyint(4) NOT NULL DEFAULT 1 AFTER idordenador,
- ADD cache varchar(500),
- DROP INDEX idordenadornumpar,
- ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
-
-ALTER TABLE ogAdmBD.imagenes MODIFY codpar int(8) NOT NULL;
-ALTER TABLE ogAdmBD.sistemasficheros MODIFY codpar int(8) NOT NULL;
-ALTER TABLE ogAdmBD.tipospar MODIFY codpar int(8) NOT NULL;
-INSERT INTO ogAdmBD.tipospar (codpar,tipopar,clonable) VALUES
- (6, 'FAT16', 1),
- (CONV('A5',16,10), 'FREEBSD', 1),
- (CONV('A6',16,10), 'OPENBSD', 1),
- (CONV('AF',16,10), 'HFS', 1),
- (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
- (CONV('DA',16,10), 'DATA', 1),
- (CONV('EE',16,10), 'GPT', 0),
- (CONV('EF',16,10), 'EFI', 0),
- (CONV('FB',16,10), 'VMFS', 1),
- (CONV('0700',16,10), 'WINDOWS', 1),
- (CONV('0C01',16,10), 'WIN-RESERV', 1),
- (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
- (CONV('7F01',16,10), 'CHROMEOS', 1),
- (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
- (CONV('8200',16,10), 'LINUX-SWAP', 0),
- (CONV('8300',16,10), 'LINUX', 1),
- (CONV('8301',16,10), 'LINUX-RESERV', 1),
- (CONV('8E00',16,10), 'LINUX-LVM', 1),
- (CONV('A500',16,10), 'FREEBSD-DISK', 0),
- (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
- (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
- (CONV('A503',16,10), 'FREEBSD', 1),
- (CONV('AF00',16,10), 'HFS', 1),
- (CONV('AF01',16,10), 'HFS-RAID', 1),
- (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
- (CONV('BF00',16,10), 'SOLARIS', 1),
- (CONV('BF01',16,10), 'SOLARIS', 1),
- (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
- (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
- (CONV('BF04',16,10), 'SOLARIS', 1),
- (CONV('BF05',16,10), 'SOLARIS', 1),
- (CONV('CA00',16,10), 'CACHE', 0),
- (CONV('EF00',16,10), 'EFI', 0),
- (CONV('EF01',16,10), 'MBR', 0),
- (CONV('EF02',16,10), 'BIOS-BOOT', 0),
- (CONV('FD00',16,10), 'LINUX-RAID', 1),
- (CONV('FFFF',16,10), 'UNKNOWN', 1);
-
-ALTER TABLE ogAdmBD.ordenadores ADD fotoord VARCHAR (250) NOT NULL;
-
-UPDATE ogAdmBD.aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
-
-# Internacionalización correcta de los asistentes.
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente Deploy de Imagenes' WHERE descripcion = 'Asistente "Deploy" de Imagenes';
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente UpdateCache con Imagenes' WHERE descripcion = 'Asistente "UpdateCache" con Imagenes';
-# Mejorar el rendimiento en acceso a la cola de acciones.
-ALTER TABLE ogAdmBD.acciones
- ADD KEY (idordenador),
- ADD KEY (idprocedimiento),
- ADD KEY (idtarea),
- ADD KEY (idprogramacion);
-
diff --git a/admin/Database/ogAdmBD-1.0.1-1.0.5.sql b/admin/Database/ogAdmBD-1.0.1-1.0.5.sql
new file mode 100644
index 00000000..618ab02b
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0.1-1.0.5.sql
@@ -0,0 +1,194 @@
+### Fichero de actualización de la base de datos.
+# OpenGnSys 1.0.1 - 1.0.5
+#use ogAdmBD
+
+UPDATE parametros SET tipopa = '1', visual = '1' WHERE idparametro = 30;
+
+UPDATE idiomas SET descripcion = 'English' WHERE ididioma = 2;
+UPDATE idiomas SET descripcion = 'Català' WHERE ididioma = 3;
+
+# Añadir tipo de arranque Windows al perfil hardware.
+ALTER TABLE perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
+
+# Soportar particiones GPT y añadir información de caché.
+ALTER TABLE ordenadores_particiones
+ MODIFY codpar int(8) NOT NULL,
+ ADD numdisk smallint NOT NULL DEFAULT 1 AFTER idordenador,
+ ADD cache varchar(500),
+ DROP INDEX idordenadornumpar,
+ ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
+ALTER TABLE imagenes
+ ADD numdisk smallint NOT NULL DEFAULT 1 AFTER idrepositorio;
+
+# Nuevos tipos de particiones y particiones GPT.
+ALTER TABLE imagenes MODIFY codpar int(8) NOT NULL;
+ALTER TABLE sistemasficheros MODIFY codpar int(8) NOT NULL;
+ALTER TABLE tipospar MODIFY codpar int(8) NOT NULL;
+INSERT INTO tipospar (codpar,tipopar,clonable) VALUES
+ (6, 'FAT16', 1),
+ (CONV('A5',16,10), 'FREEBSD', 1),
+ (CONV('A6',16,10), 'OPENBSD', 1),
+ (CONV('AF',16,10), 'HFS', 1),
+ (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('DA',16,10), 'DATA', 1),
+ (CONV('EE',16,10), 'GPT', 0),
+ (CONV('EF',16,10), 'EFI', 1),
+ (CONV('FB',16,10), 'VMFS', 1),
+ (CONV('0700',16,10), 'WINDOWS', 1),
+ (CONV('0C01',16,10), 'WIN-RESERV', 1),
+ (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
+ (CONV('7F01',16,10), 'CHROMEOS', 1),
+ (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
+ (CONV('8200',16,10), 'LINUX-SWAP', 0),
+ (CONV('8300',16,10), 'LINUX', 1),
+ (CONV('8301',16,10), 'LINUX-RESERV', 1),
+ (CONV('8E00',16,10), 'LINUX-LVM', 1),
+ (CONV('A500',16,10), 'FREEBSD-DISK', 0),
+ (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
+ (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
+ (CONV('A503',16,10), 'FREEBSD', 1),
+ (CONV('AB00',16,10), 'HFS-BOOT', 1),
+ (CONV('AF00',16,10), 'HFS', 1),
+ (CONV('AF01',16,10), 'HFS-RAID', 1),
+ (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('BF00',16,10), 'SOLARIS', 1),
+ (CONV('BF01',16,10), 'SOLARIS', 1),
+ (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
+ (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
+ (CONV('BF04',16,10), 'SOLARIS', 1),
+ (CONV('BF05',16,10), 'SOLARIS', 1),
+ (CONV('CA00',16,10), 'CACHE', 0),
+ (CONV('EF00',16,10), 'EFI', 1),
+ (CONV('EF01',16,10), 'MBR', 0),
+ (CONV('EF02',16,10), 'BIOS-BOOT', 0),
+ (CONV('FD00',16,10), 'LINUX-RAID', 1),
+ (CONV('FFFF',16,10), 'UNKNOWN', 1)
+ ON DUPLICATE KEY UPDATE
+ codpar=VALUES(codpar), tipopar=VALUES(tipopar), clonable=VALUES(clonable);
+
+# Imágenes incrementales.
+ALTER TABLE ordenadores ADD fotoord VARCHAR (250) NOT NULL;
+
+# Cambio de tipo de grupo.
+UPDATE aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
+
+# Añadir validación del cliente.
+ALTER TABLE aulas
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+ALTER TABLE ordenadores
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+# Nuevos comandos.
+ALTER TABLE comandos
+ ADD submenu VARCHAR(50) NOT NULL DEFAULT '';
+INSERT INTO comandos (idcomando, descripcion, pagina, gestor, funcion, urlimg, aplicambito, visuparametros, parametros, comentarios, activo, submenu) VALUES
+ (11, 'Eliminar Imagen Cache', '../comandos/EliminarImagenCache.php', '../comandos/gestores/gestor_Comandos.php', 'EliminarImagenCache', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1, ''),
+ (12, 'Crear Imagen Basica', '../comandos/CrearImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'CrearImagenBasica', '', 16, 'dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', 'nfn;dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', '', 1, 'Sincronizacion'),
+ (13, 'Restaurar Imagen Basica', '../comandos/RestaurarImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarImagenBasica', '', 28, 'dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', 'nfn;dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', '', 1, 'Sincronizacion'),
+ (14, 'Crear Software Incremental', '../comandos/CrearSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'CrearSoftIncremental', '', 16, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', '', 1, 'Sincronizacion'),
+ (15, 'Restaurar Software Incremental', '../comandos/RestaurarSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarSoftIncremental', '', 28, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', '', 1, 'Sincronizacion')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), pagina=VALUES(pagina),
+ gestor=VALUES(gestor), funcion=VALUES(funcion), urlimg=VALUES(urlimg),
+ aplicambito=VALUES(aplicambito), visuparametros=VALUES(visuparametros),
+ parametros=VALUES(parametros), comentarios=VALUES(comentarios),
+ activo=VALUES(activo), submenu=VALUES(submenu);
+
+# Parámetros para los comandos nuevos.
+ALTER TABLE parametros
+ ADD KEY (nemonico);
+INSERT INTO parametros (idparametro, nemonico, descripcion, nomidentificador, nomtabla, nomliteral, tipopa, visual) VALUES
+ (31, 'idf', 'Imagen Incremental', 'idimagen', 'imagenes', 'descripcion', 1, 1),
+ (32, 'ncf', 'Nombre canónico de la Imagen Incremental', '', '', '', 0, 1),
+ (33, 'bpi', 'Borrar imagen o partición previamente', '', '', '', 5, 1),
+ (34, 'cpc', 'Copiar también en cache', '', '', '', 5, 1),
+ (35, 'bpc', 'Borrado previo de la imagen en cache', '', '', '', 5, 1),
+ (36, 'rti', 'Ruta de origen', '', '', '', 0, 1),
+ (37, 'met', 'Método clonación', ';', '', 'Desde caché; Desde repositorio', 3, 1),
+ (38, 'nba', 'No borrar archivos en destino', '', '', '', 0, 1);
+
+# Imágenes incrementales.
+ALTER TABLE imagenes
+ ADD tipo TINYINT NULL,
+ ADD imagenid INT NOT NULL DEFAULT '0',
+ ADD ruta VARCHAR(250) NULL;
+UPDATE imagenes SET tipo=1;
+
+# Cambio de tipo de grupo.
+UPDATE grupos SET tipo=70 WHERE tipo=50;
+
+# Actualizar menús para nuevo parámetro "video" del Kernel, que sustituye a "vga" (ticket #573).
+ALTER TABLE menus
+ MODIFY resolucion VARCHAR(50) DEFAULT NULL;
+#UPDATE menus SET resolucion = CASE resolucion
+# WHEN '355' THEN 'uvesafb:1152x864-16'
+# WHEN '788' THEN 'uvesafb:800x600-16'
+# WHEN '789' THEN 'uvesafb:800x600-24'
+# WHEN '791' THEN 'uvesafb:1024x768-16'
+# WHEN '792' THEN 'uvesafb:1024x768-24'
+# WHEN '794' THEN 'uvesafb:1280x1024-16'
+# WHEN '795' THEN 'uvesafb:1280x1024-24'
+# WHEN '798' THEN 'uvesafb:1600x1200-16'
+# WHEN '799' THEN 'uvesafb:1600x1200-24'
+# WHEN NULL THEN 'uvesafb:800x600-16'
+# ELSE resolucion
+# END;
+
+# Cambios para NetBoot con ficheros dinámicos (tickets #534 #582).
+DROP TABLE IF EXISTS menuboot;
+DROP TABLE IF EXISTS itemboot;
+DROP TABLE IF EXISTS menuboot_itemboot;
+ALTER TABLE ordenadores
+ MODIFY arranque VARCHAR(30) NOT NULL DEFAULT '00unknown';
+UPDATE ordenadores SET arranque = '01' WHERE arranque = '1';
+UPDATE ordenadores SET arranque = '19pxeadmin' WHERE arranque = 'pxeADMIN';
+
+# Habilita el comando Particionar y formatear.
+UPDATE comandos SET activo = '1' WHERE idcomando = 10;
+ALTER TABLE sistemasficheros
+ ADD UNIQUE INDEX descripcion (descripcion);
+INSERT INTO sistemasficheros (descripcion, nemonico) VALUES
+ ('EMPTY', 'EMPTY'),
+ ('CACHE', 'CACHE'),
+ ('BTRFS', 'BTRFS'),
+ ('EXFAT', 'EXFAT'),
+ ('EXT2', 'EXT2'),
+ ('EXT3', 'EXT3'),
+ ('EXT4', 'EXT4'),
+ ('FAT12', 'FAT12'),
+ ('FAT16', 'FAT16'),
+ ('FAT32', 'FAT32'),
+ ('HFS', 'HFS'),
+ ('HFSPLUS', 'HFSPLUS'),
+ ('JFS', 'JFS'),
+ ('NTFS', 'NTFS'),
+ ('REISERFS', 'REISERFS'),
+ ('REISER4', 'REISER4'),
+ ('UFS', 'UFS'),
+ ('XFS', 'XFS')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), nemonico=VALUES(nemonico);
+# Nuevas particiones marcadas como clonables.
+INSERT INTO tipospar (codpar, tipopar, clonable) VALUES
+ (CONV('EF',16,10), 'EFI', 1),
+ (CONV('AB00',16,10), 'HFS-BOOT', 1),
+ (CONV('EF00',16,10), 'EFI', 1)
+ ON DUPLICATE KEY UPDATE
+ codpar=VALUES(codpar), tipopar=VALUES(tipopar), clonable=VALUES(clonable);
+
+# Añadir proxy para aulas.
+ALTER TABLE aulas
+ ADD proxy VARCHAR(30) AFTER dns;
+
+# Valores por defecto para incorporar ordenadores (ticket #609).
+ALTER TABLE ordenadores
+ ALTER fotoord SET DEFAULT 'fotoordenador.gif',
+ ALTER idproautoexec SET DEFAULT 0;
+UPDATE ordenadores
+ SET fotoord = SUBSTRING_INDEX(fotoord, '/', -1);
+
diff --git a/admin/Database/ogAdmBD-1.0.2-1.0.4a.sql b/admin/Database/ogAdmBD-1.0.2-1.0.4a.sql
deleted file mode 100644
index 05b2307b..00000000
--- a/admin/Database/ogAdmBD-1.0.2-1.0.4a.sql
+++ /dev/null
@@ -1,76 +0,0 @@
-UPDATE ogAdmBD.entornos SET ipserveradm = 'SERVERIP' WHERE ipserveradm = '' LIMIT 1;
-
-UPDATE ogAdmBD.parametros SET tipopa = '1' WHERE idparametro = 30;
-
-UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
-UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
-
-ALTER TABLE ogAdmBD.menus MODIFY resolucion smallint(4);
-
-ALTER TABLE ogAdmBD.perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
-
-ALTER TABLE ogAdmBD.ordenadores_particiones
- MODIFY codpar int(8) NOT NULL,
- ADD numdisk tinyint(4) NOT NULL DEFAULT 1 AFTER idordenador,
- ADD cache varchar(500),
- DROP INDEX idordenadornumpar,
- ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
-
-ALTER TABLE ogAdmBD.imagenes MODIFY codpar int(8) NOT NULL;
-ALTER TABLE ogAdmBD.sistemasficheros MODIFY codpar int(8) NOT NULL;
-ALTER TABLE ogAdmBD.tipospar MODIFY codpar int(8) NOT NULL;
-INSERT INTO ogAdmBD.tipospar (codpar,tipopar,clonable) VALUES
- (6, 'FAT16', 1),
- (CONV('A5',16,10), 'FREEBSD', 1),
- (CONV('A6',16,10), 'OPENBSD', 1),
- (CONV('AF',16,10), 'HFS', 1),
- (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
- (CONV('DA',16,10), 'DATA', 1),
- (CONV('EE',16,10), 'GPT', 0),
- (CONV('EF',16,10), 'EFI', 0),
- (CONV('FB',16,10), 'VMFS', 1),
- (CONV('0700',16,10), 'WINDOWS', 1),
- (CONV('0C01',16,10), 'WIN-RESERV', 1),
- (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
- (CONV('7F01',16,10), 'CHROMEOS', 1),
- (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
- (CONV('8200',16,10), 'LINUX-SWAP', 0),
- (CONV('8300',16,10), 'LINUX', 1),
- (CONV('8301',16,10), 'LINUX-RESERV', 1),
- (CONV('8E00',16,10), 'LINUX-LVM', 1),
- (CONV('A500',16,10), 'FREEBSD-DISK', 0),
- (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
- (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
- (CONV('A503',16,10), 'FREEBSD', 1),
- (CONV('AF00',16,10), 'HFS', 1),
- (CONV('AF01',16,10), 'HFS-RAID', 1),
- (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
- (CONV('BF00',16,10), 'SOLARIS', 1),
- (CONV('BF01',16,10), 'SOLARIS', 1),
- (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
- (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
- (CONV('BF04',16,10), 'SOLARIS', 1),
- (CONV('BF05',16,10), 'SOLARIS', 1),
- (CONV('CA00',16,10), 'CACHE', 0),
- (CONV('EF00',16,10), 'EFI', 0),
- (CONV('EF01',16,10), 'MBR', 0),
- (CONV('EF02',16,10), 'BIOS-BOOT', 0),
- (CONV('FD00',16,10), 'LINUX-RAID', 1),
- (CONV('FFFF',16,10), 'UNKNOWN', 1);
-
-ALTER TABLE ogAdmBD.ordenadores ADD fotoord VARCHAR (250) NOT NULL;
-
-UPDATE ogAdmBD.aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
-
-# Internacionalización correcta de los asistentes.
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente Deploy de Imagenes' WHERE descripcion = 'Asistente "Deploy" de Imagenes';
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente UpdateCache con Imagenes' WHERE descripcion = 'Asistente "UpdateCache" con Imagenes';
-# Mejorar el rendimiento en acceso a la cola de acciones.
-ALTER TABLE ogAdmBD.acciones
- ADD KEY (idordenador),
- ADD KEY (idprocedimiento),
- ADD KEY (idtarea),
- ADD KEY (idprogramacion);
-
diff --git a/admin/Database/ogAdmBD-1.0.2-1.0.5.sql b/admin/Database/ogAdmBD-1.0.2-1.0.5.sql
new file mode 100644
index 00000000..65746893
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0.2-1.0.5.sql
@@ -0,0 +1,194 @@
+### Fichero de actualización de la base de datos.
+# OpenGnSys 1.0.2 - 1.0.5
+#use ogAdmBD
+
+UPDATE entornos SET ipserveradm = 'SERVERIP' WHERE ipserveradm = '' LIMIT 1;
+
+UPDATE parametros SET tipopa = '1' WHERE idparametro = 30;
+
+UPDATE idiomas SET descripcion = 'English' WHERE ididioma = 2;
+UPDATE idiomas SET descripcion = 'Català' WHERE ididioma = 3;
+
+# Añadir tipo de arranque Windows al perfil hardware.
+ALTER TABLE perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
+
+# Soportar particiones GPT y añadir información de caché.
+ALTER TABLE ordenadores_particiones
+ MODIFY codpar int(8) NOT NULL,
+ ADD numdisk smallint NOT NULL DEFAULT 1 AFTER idordenador,
+ ADD cache varchar(500),
+ DROP INDEX idordenadornumpar,
+ ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
+ALTER TABLE imagenes
+ ADD numdisk smallint NOT NULL DEFAULT 1 AFTER idrepositorio;
+
+# Nuevos tipos de particiones y particiones GPT.
+ALTER TABLE imagenes MODIFY codpar int(8) NOT NULL;
+ALTER TABLE sistemasficheros MODIFY codpar int(8) NOT NULL;
+ALTER TABLE tipospar MODIFY codpar int(8) NOT NULL;
+INSERT INTO tipospar (codpar,tipopar,clonable) VALUES
+ (6, 'FAT16', 1),
+ (CONV('A5',16,10), 'FREEBSD', 1),
+ (CONV('A6',16,10), 'OPENBSD', 1),
+ (CONV('AF',16,10), 'HFS', 1),
+ (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('DA',16,10), 'DATA', 1),
+ (CONV('EE',16,10), 'GPT', 0),
+ (CONV('EF',16,10), 'EFI', 1),
+ (CONV('FB',16,10), 'VMFS', 1),
+ (CONV('0700',16,10), 'WINDOWS', 1),
+ (CONV('0C01',16,10), 'WIN-RESERV', 1),
+ (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
+ (CONV('7F01',16,10), 'CHROMEOS', 1),
+ (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
+ (CONV('8200',16,10), 'LINUX-SWAP', 0),
+ (CONV('8300',16,10), 'LINUX', 1),
+ (CONV('8301',16,10), 'LINUX-RESERV', 1),
+ (CONV('8E00',16,10), 'LINUX-LVM', 1),
+ (CONV('A500',16,10), 'FREEBSD-DISK', 0),
+ (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
+ (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
+ (CONV('A503',16,10), 'FREEBSD', 1),
+ (CONV('AB00',16,10), 'HFS-BOOT', 1),
+ (CONV('AF00',16,10), 'HFS', 1),
+ (CONV('AF01',16,10), 'HFS-RAID', 1),
+ (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('BF00',16,10), 'SOLARIS', 1),
+ (CONV('BF01',16,10), 'SOLARIS', 1),
+ (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
+ (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
+ (CONV('BF04',16,10), 'SOLARIS', 1),
+ (CONV('BF05',16,10), 'SOLARIS', 1),
+ (CONV('CA00',16,10), 'CACHE', 0),
+ (CONV('EF00',16,10), 'EFI', 1),
+ (CONV('EF01',16,10), 'MBR', 0),
+ (CONV('EF02',16,10), 'BIOS-BOOT', 0),
+ (CONV('FD00',16,10), 'LINUX-RAID', 1),
+ (CONV('FFFF',16,10), 'UNKNOWN', 1)
+ ON DUPLICATE KEY UPDATE
+ codpar=VALUES(codpar), tipopar=VALUES(tipopar), clonable=VALUES(clonable);
+
+ALTER TABLE ordenadores ADD fotoord VARCHAR (250) NOT NULL;
+
+UPDATE aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
+
+# Añadir validación del cliente.
+ALTER TABLE aulas
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+ALTER TABLE ordenadores
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+# Nuevos comandos.
+ALTER TABLE comandos
+ ADD submenu VARCHAR(50) NOT NULL DEFAULT '';
+INSERT INTO comandos (idcomando, descripcion, pagina, gestor, funcion, urlimg, aplicambito, visuparametros, parametros, comentarios, activo, submenu) VALUES
+ (11, 'Eliminar Imagen Cache', '../comandos/EliminarImagenCache.php', '../comandos/gestores/gestor_Comandos.php', 'EliminarImagenCache', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1, ''),
+ (12, 'Crear Imagen Basica', '../comandos/CrearImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'CrearImagenBasica', '', 16, 'dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', 'nfn;dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', '', 1, 'Sincronizacion'),
+ (13, 'Restaurar Imagen Basica', '../comandos/RestaurarImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarImagenBasica', '', 28, 'dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', 'nfn;dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', '', 1, 'Sincronizacion'),
+ (14, 'Crear Software Incremental', '../comandos/CrearSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'CrearSoftIncremental', '', 16, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', '', 1, 'Sincronizacion'),
+ (15, 'Restaurar Software Incremental', '../comandos/RestaurarSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarSoftIncremental', '', 28, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', '', 1, 'Sincronizacion')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), pagina=VALUES(pagina),
+ gestor=VALUES(gestor), funcion=VALUES(funcion), urlimg=VALUES(urlimg),
+ aplicambito=VALUES(aplicambito), visuparametros=VALUES(visuparametros),
+ parametros=VALUES(parametros), comentarios=VALUES(comentarios),
+ activo=VALUES(activo), submenu=VALUES(submenu);
+
+# Parámetros para los comandos nuevos.
+ALTER TABLE parametros
+ ADD KEY (nemonico);
+INSERT INTO parametros (idparametro, nemonico, descripcion, nomidentificador, nomtabla, nomliteral, tipopa, visual) VALUES
+ (31, 'idf', 'Imagen Incremental', 'idimagen', 'imagenes', 'descripcion', 1, 1),
+ (32, 'ncf', 'Nombre canónico de la Imagen Incremental', '', '', '', 0, 1),
+ (33, 'bpi', 'Borrar imagen o partición previamente', '', '', '', 5, 1),
+ (34, 'cpc', 'Copiar también en cache', '', '', '', 5, 1),
+ (35, 'bpc', 'Borrado previo de la imagen en cache', '', '', '', 5, 1),
+ (36, 'rti', 'Ruta de origen', '', '', '', 0, 1),
+ (37, 'met', 'Método clonación', ';', '', 'Desde caché; Desde repositorio', 3, 1),
+ (38, 'nba', 'No borrar archivos en destino', '', '', '', 0, 1);
+
+# Imágenes incrementales.
+ALTER TABLE imagenes
+ ADD tipo TINYINT NULL,
+ ADD imagenid INT NOT NULL DEFAULT '0',
+ ADD ruta VARCHAR(250) NULL;
+UPDATE imagenes SET tipo=1;
+
+# Cambio de tipo de grupo.
+UPDATE grupos SET tipo=70 WHERE tipo=50;
+
+# Actualizar menús para nuevo parámetro "video" del Kernel, que sustituye a "vga" (ticket #573).
+ALTER TABLE menus
+ MODIFY resolucion VARCHAR(50) DEFAULT NULL;
+#UPDATE menus SET resolucion = CASE resolucion
+# WHEN '355' THEN 'uvesafb:1152x864-16'
+# WHEN '788' THEN 'uvesafb:800x600-16'
+# WHEN '789' THEN 'uvesafb:800x600-24'
+# WHEN '791' THEN 'uvesafb:1024x768-16'
+# WHEN '792' THEN 'uvesafb:1024x768-24'
+# WHEN '794' THEN 'uvesafb:1280x1024-16'
+# WHEN '795' THEN 'uvesafb:1280x1024-24'
+# WHEN '798' THEN 'uvesafb:1600x1200-16'
+# WHEN '799' THEN 'uvesafb:1600x1200-24'
+# WHEN NULL THEN 'uvesafb:800x600-16'
+# ELSE resolucion
+# END;
+
+# Cambios para NetBoot con ficheros dinámicos (tickets #534 #582).
+DROP TABLE IF EXISTS menuboot;
+DROP TABLE IF EXISTS itemboot;
+DROP TABLE IF EXISTS menuboot_itemboot;
+ALTER TABLE ordenadores
+ MODIFY arranque VARCHAR(30) NOT NULL DEFAULT '00unknown';
+UPDATE ordenadores SET arranque = '01' WHERE arranque = '1';
+UPDATE ordenadores SET arranque = '19pxeadmin' WHERE arranque = 'pxeADMIN';
+
+# Habilita el comando Particionar y formatear.
+UPDATE comandos SET activo = '1' WHERE idcomando = 10;
+ALTER TABLE sistemasficheros
+ ADD UNIQUE INDEX descripcion (descripcion);
+INSERT INTO sistemasficheros (descripcion, nemonico) VALUES
+ ('EMPTY', 'EMPTY'),
+ ('CACHE', 'CACHE'),
+ ('BTRFS', 'BTRFS'),
+ ('EXFAT', 'EXFAT'),
+ ('EXT2', 'EXT2'),
+ ('EXT3', 'EXT3'),
+ ('EXT4', 'EXT4'),
+ ('FAT12', 'FAT12'),
+ ('FAT16', 'FAT16'),
+ ('FAT32', 'FAT32'),
+ ('HFS', 'HFS'),
+ ('HFSPLUS', 'HFSPLUS'),
+ ('JFS', 'JFS'),
+ ('NTFS', 'NTFS'),
+ ('REISERFS', 'REISERFS'),
+ ('REISER4', 'REISER4'),
+ ('UFS', 'UFS'),
+ ('XFS', 'XFS')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), nemonico=VALUES(nemonico);
+# Nuevas particiones marcadas como clonables.
+INSERT INTO tipospar (codpar, tipopar, clonable) VALUES
+ (CONV('EF',16,10), 'EFI', 1),
+ (CONV('AB00',16,10), 'HFS-BOOT', 1),
+ (CONV('EF00',16,10), 'EFI', 1)
+ ON DUPLICATE KEY UPDATE
+ codpar=VALUES(codpar), tipopar=VALUES(tipopar), clonable=VALUES(clonable);
+
+# Añadir proxy para aulas.
+ALTER TABLE aulas
+ ADD proxy VARCHAR(30) AFTER dns;
+
+# Valores por defecto para incorporar ordenadores (ticket #609).
+ALTER TABLE ordenadores
+ ALTER fotoord SET DEFAULT 'fotoordenador.gif',
+ ALTER idproautoexec SET DEFAULT 0;
+UPDATE ordenadores
+ SET fotoord = SUBSTRING_INDEX(fotoord, '/', -1);
+
diff --git a/admin/Database/ogAdmBD-1.0.2a-1.0.4a.sql b/admin/Database/ogAdmBD-1.0.2a-1.0.4a.sql
deleted file mode 100644
index df245f5e..00000000
--- a/admin/Database/ogAdmBD-1.0.2a-1.0.4a.sql
+++ /dev/null
@@ -1,72 +0,0 @@
-UPDATE ogAdmBD.idiomas SET descripcion = 'English' WHERE ididioma = 2;
-UPDATE ogAdmBD.idiomas SET descripcion = 'Català' WHERE ididioma = 3;
-
-ALTER TABLE ogAdmBD.menus MODIFY resolucion smallint(4);
-
-ALTER TABLE ogAdmBD.perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
-
-ALTER TABLE ogAdmBD.ordenadores_particiones
- MODIFY codpar int(8) NOT NULL,
- ADD numdisk tinyint(4) NOT NULL DEFAULT 1 AFTER idordenador,
- ADD cache varchar(500),
- DROP INDEX idordenadornumpar,
- ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
-
-ALTER TABLE ogAdmBD.imagenes MODIFY codpar int(8) NOT NULL;
-ALTER TABLE ogAdmBD.sistemasficheros MODIFY codpar int(8) NOT NULL;
-ALTER TABLE ogAdmBD.tipospar MODIFY codpar int(8) NOT NULL;
-INSERT INTO ogAdmBD.tipospar (codpar,tipopar,clonable) VALUES
- (6, 'FAT16', 1),
- (CONV('A5',16,10), 'FREEBSD', 1),
- (CONV('A6',16,10), 'OPENBSD', 1),
- (CONV('AF',16,10), 'HFS', 1),
- (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
- (CONV('DA',16,10), 'DATA', 1),
- (CONV('EE',16,10), 'GPT', 0),
- (CONV('EF',16,10), 'EFI', 0),
- (CONV('FB',16,10), 'VMFS', 1),
- (CONV('0700',16,10), 'WINDOWS', 1),
- (CONV('0C01',16,10), 'WIN-RESERV', 1),
- (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
- (CONV('7F01',16,10), 'CHROMEOS', 1),
- (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
- (CONV('8200',16,10), 'LINUX-SWAP', 0),
- (CONV('8300',16,10), 'LINUX', 1),
- (CONV('8301',16,10), 'LINUX-RESERV', 1),
- (CONV('8E00',16,10), 'LINUX-LVM', 1),
- (CONV('A500',16,10), 'FREEBSD-DISK', 0),
- (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
- (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
- (CONV('A503',16,10), 'FREEBSD', 1),
- (CONV('AF00',16,10), 'HFS', 1),
- (CONV('AF01',16,10), 'HFS-RAID', 1),
- (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
- (CONV('BF00',16,10), 'SOLARIS', 1),
- (CONV('BF01',16,10), 'SOLARIS', 1),
- (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
- (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
- (CONV('BF04',16,10), 'SOLARIS', 1),
- (CONV('BF05',16,10), 'SOLARIS', 1),
- (CONV('CA00',16,10), 'CACHE', 0),
- (CONV('EF00',16,10), 'EFI', 0),
- (CONV('EF01',16,10), 'MBR', 0),
- (CONV('EF02',16,10), 'BIOS-BOOT', 0),
- (CONV('FD00',16,10), 'LINUX-RAID', 1),
- (CONV('FFFF',16,10), 'UNKNOWN', 1);
-
-ALTER TABLE ogAdmBD.ordenadores ADD fotoord VARCHAR (250) NOT NULL;
-
-UPDATE ogAdmBD.aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
-
-# Internacionalización correcta de los asistentes.
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente Deploy de Imagenes' WHERE descripcion = 'Asistente "Deploy" de Imagenes' WHERE;
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente UpdateCache con Imagenes' WHERE descripcion = 'Asistente "UpdateCache" con Imagenes';
-# Mejorar el rendimiento en acceso a la cola de acciones.
-ALTER TABLE ogAdmBD.acciones
- ADD KEY (idordenador),
- ADD KEY (idprocedimiento),
- ADD KEY (idtarea),
- ADD KEY (idprogramacion);
-
diff --git a/admin/Database/ogAdmBD-1.0.2a-1.0.5.sql b/admin/Database/ogAdmBD-1.0.2a-1.0.5.sql
new file mode 100644
index 00000000..df905d5d
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0.2a-1.0.5.sql
@@ -0,0 +1,193 @@
+### Fichero de actualización de la base de datos.
+# OpenGnSys 1.0.2a - 1.0.5
+#use ogAdmBD
+
+UPDATE idiomas SET descripcion = 'English' WHERE ididioma = 2;
+UPDATE idiomas SET descripcion = 'Català' WHERE ididioma = 3;
+
+# Habilita el comando Particionar y formatear
+UPDATE comandos SET activo = '1' WHERE comandos.idcomando = 10;
+
+# Añadir tipo de arranque Windows al perfil hardware.
+ALTER TABLE perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
+
+# Soportar particiones GPT y añadir información de caché.
+ALTER TABLE ordenadores_particiones
+ MODIFY codpar int(8) NOT NULL,
+ ADD numdisk smallint NOT NULL DEFAULT 1 AFTER idordenador,
+ ADD cache varchar(500),
+ DROP INDEX idordenadornumpar,
+ ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
+ALTER TABLE imagenes
+ ADD numdisk smallint NOT NULL DEFAULT 1 AFTER idrepositorio;
+
+# Nuevos tipos de particiones y particiones GPT.
+ALTER TABLE imagenes MODIFY codpar int(8) NOT NULL;
+ALTER TABLE sistemasficheros MODIFY codpar int(8) NOT NULL;
+ALTER TABLE tipospar MODIFY codpar int(8) NOT NULL;
+INSERT INTO tipospar (codpar,tipopar,clonable) VALUES
+ (6, 'FAT16', 1),
+ (CONV('A5',16,10), 'FREEBSD', 1),
+ (CONV('A6',16,10), 'OPENBSD', 1),
+ (CONV('AF',16,10), 'HFS', 1),
+ (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('DA',16,10), 'DATA', 1),
+ (CONV('EE',16,10), 'GPT', 0),
+ (CONV('EF',16,10), 'EFI', 1),
+ (CONV('FB',16,10), 'VMFS', 1),
+ (CONV('0700',16,10), 'WINDOWS', 1),
+ (CONV('0C01',16,10), 'WIN-RESERV', 1),
+ (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
+ (CONV('7F01',16,10), 'CHROMEOS', 1),
+ (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
+ (CONV('8200',16,10), 'LINUX-SWAP', 0),
+ (CONV('8300',16,10), 'LINUX', 1),
+ (CONV('8301',16,10), 'LINUX-RESERV', 1),
+ (CONV('8E00',16,10), 'LINUX-LVM', 1),
+ (CONV('A500',16,10), 'FREEBSD-DISK', 0),
+ (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
+ (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
+ (CONV('A503',16,10), 'FREEBSD', 1),
+ (CONV('AB00',16,10), 'HFS-BOOT', 1),
+ (CONV('AF00',16,10), 'HFS', 1),
+ (CONV('AF01',16,10), 'HFS-RAID', 1),
+ (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('BF00',16,10), 'SOLARIS', 1),
+ (CONV('BF01',16,10), 'SOLARIS', 1),
+ (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
+ (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
+ (CONV('BF04',16,10), 'SOLARIS', 1),
+ (CONV('BF05',16,10), 'SOLARIS', 1),
+ (CONV('CA00',16,10), 'CACHE', 0),
+ (CONV('EF00',16,10), 'EFI', 1),
+ (CONV('EF01',16,10), 'MBR', 0),
+ (CONV('EF02',16,10), 'BIOS-BOOT', 0),
+ (CONV('FD00',16,10), 'LINUX-RAID', 1),
+ (CONV('FFFF',16,10), 'UNKNOWN', 1)
+ ON DUPLICATE KEY UPDATE
+ codpar=VALUES(codpar), tipopar=VALUES(tipopar), clonable=VALUES(clonable);
+
+ALTER TABLE ordenadores ADD fotoord VARCHAR (250) NOT NULL;
+
+UPDATE aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
+
+# Añadir validación del cliente.
+ALTER TABLE aulas
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+ALTER TABLE ordenadores
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+# Nuevos comandos.
+ALTER TABLE comandos
+ ADD submenu VARCHAR(50) NOT NULL DEFAULT '';
+INSERT INTO comandos (idcomando, descripcion, pagina, gestor, funcion, urlimg, aplicambito, visuparametros, parametros, comentarios, activo, submenu) VALUES
+ (11, 'Eliminar Imagen Cache', '../comandos/EliminarImagenCache.php', '../comandos/gestores/gestor_Comandos.php', 'EliminarImagenCache', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1, ''),
+ (12, 'Crear Imagen Basica', '../comandos/CrearImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'CrearImagenBasica', '', 16, 'dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', 'nfn;dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', '', 1, 'Sincronizacion'),
+ (13, 'Restaurar Imagen Basica', '../comandos/RestaurarImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarImagenBasica', '', 28, 'dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', 'nfn;dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', '', 1, 'Sincronizacion'),
+ (14, 'Crear Software Incremental', '../comandos/CrearSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'CrearSoftIncremental', '', 16, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', '', 1, 'Sincronizacion'),
+ (15, 'Restaurar Software Incremental', '../comandos/RestaurarSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarSoftIncremental', '', 28, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', '', 1, 'Sincronizacion')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), pagina=VALUES(pagina),
+ gestor=VALUES(gestor), funcion=VALUES(funcion), urlimg=VALUES(urlimg),
+ aplicambito=VALUES(aplicambito), visuparametros=VALUES(visuparametros),
+ parametros=VALUES(parametros), comentarios=VALUES(comentarios),
+ activo=VALUES(activo), submenu=VALUES(submenu);
+
+# Parámetros para los comandos nuevos.
+ALTER TABLE parametros
+ ADD KEY (nemonico);
+INSERT INTO parametros (idparametro, nemonico, descripcion, nomidentificador, nomtabla, nomliteral, tipopa, visual) VALUES
+ (31, 'idf', 'Imagen Incremental', 'idimagen', 'imagenes', 'descripcion', 1, 1),
+ (32, 'ncf', 'Nombre canónico de la Imagen Incremental', '', '', '', 0, 1),
+ (33, 'bpi', 'Borrar imagen o partición previamente', '', '', '', 5, 1),
+ (34, 'cpc', 'Copiar también en cache', '', '', '', 5, 1),
+ (35, 'bpc', 'Borrado previo de la imagen en cache', '', '', '', 5, 1),
+ (36, 'rti', 'Ruta de origen', '', '', '', 0, 1),
+ (37, 'met', 'Método clonación', ';', '', 'Desde caché; Desde repositorio', 3, 1),
+ (38, 'nba', 'No borrar archivos en destino', '', '', '', 0, 1);
+
+# Imágenes incrementales.
+ALTER TABLE imagenes
+ ADD tipo TINYINT NULL,
+ ADD imagenid INT NOT NULL DEFAULT '0',
+ ADD ruta VARCHAR(250) NULL;
+UPDATE imagenes SET tipo=1;
+
+# Cambio de tipo de grupo.
+UPDATE grupos SET tipo=70 WHERE tipo=50;
+
+# Actualizar menús para nuevo parámetro "video" del Kernel, que sustituye a "vga" (ticket #573).
+ALTER TABLE menus
+ MODIFY resolucion VARCHAR(50) DEFAULT NULL;
+#UPDATE menus SET resolucion = CASE resolucion
+# WHEN '355' THEN 'uvesafb:1152x864-16'
+# WHEN '788' THEN 'uvesafb:800x600-16'
+# WHEN '789' THEN 'uvesafb:800x600-24'
+# WHEN '791' THEN 'uvesafb:1024x768-16'
+# WHEN '792' THEN 'uvesafb:1024x768-24'
+# WHEN '794' THEN 'uvesafb:1280x1024-16'
+# WHEN '795' THEN 'uvesafb:1280x1024-24'
+# WHEN '798' THEN 'uvesafb:1600x1200-16'
+# WHEN '799' THEN 'uvesafb:1600x1200-24'
+# WHEN NULL THEN 'uvesafb:800x600-16'
+# ELSE resolucion
+# END;
+
+# Cambios para NetBoot con ficheros dinámicos (tickets #534 #582).
+DROP TABLE IF EXISTS menuboot;
+DROP TABLE IF EXISTS itemboot;
+DROP TABLE IF EXISTS menuboot_itemboot;
+ALTER TABLE ordenadores
+ MODIFY arranque VARCHAR(30) NOT NULL DEFAULT '00unknown';
+UPDATE ordenadores SET arranque = '01' WHERE arranque = '1';
+UPDATE ordenadores SET arranque = '19pxeadmin' WHERE arranque = 'pxeADMIN';
+
+# Habilita el comando Particionar y formatear.
+UPDATE comandos SET activo = '1' WHERE idcomando = 10;
+ALTER TABLE sistemasficheros
+ ADD UNIQUE INDEX descripcion (descripcion);
+INSERT INTO sistemasficheros (descripcion, nemonico) VALUES
+ ('EMPTY', 'EMPTY'),
+ ('CACHE', 'CACHE'),
+ ('BTRFS', 'BTRFS'),
+ ('EXFAT', 'EXFAT'),
+ ('EXT2', 'EXT2'),
+ ('EXT3', 'EXT3'),
+ ('EXT4', 'EXT4'),
+ ('FAT12', 'FAT12'),
+ ('FAT16', 'FAT16'),
+ ('FAT32', 'FAT32'),
+ ('HFS', 'HFS'),
+ ('HFSPLUS', 'HFSPLUS'),
+ ('JFS', 'JFS'),
+ ('NTFS', 'NTFS'),
+ ('REISERFS', 'REISERFS'),
+ ('REISER4', 'REISER4'),
+ ('UFS', 'UFS'),
+ ('XFS', 'XFS')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), nemonico=VALUES(nemonico);
+# Nuevas particiones marcadas como clonables.
+INSERT INTO tipospar (codpar, tipopar, clonable) VALUES
+ (CONV('EF',16,10), 'EFI', 1),
+ (CONV('AB00',16,10), 'HFS-BOOT', 1),
+ (CONV('EF00',16,10), 'EFI', 1)
+ ON DUPLICATE KEY UPDATE
+ codpar=VALUES(codpar), tipopar=VALUES(tipopar), clonable=VALUES(clonable);
+
+# Añadir proxy para aulas.
+ALTER TABLE aulas
+ ADD proxy VARCHAR(30) AFTER dns;
+
+# Valores por defecto para incorporar ordenadores (ticket #609).
+ALTER TABLE ordenadores
+ ALTER fotoord SET DEFAULT 'fotoordenador.gif',
+ ALTER idproautoexec SET DEFAULT 0;
+UPDATE ordenadores
+ SET fotoord = SUBSTRING_INDEX(fotoord, '/', -1);
+
diff --git a/admin/Database/ogAdmBD-1.0.3-1.0.4a.sql b/admin/Database/ogAdmBD-1.0.3-1.0.4a.sql
deleted file mode 100644
index ae7b481a..00000000
--- a/admin/Database/ogAdmBD-1.0.3-1.0.4a.sql
+++ /dev/null
@@ -1,69 +0,0 @@
-# Añadir resolución a menú de cliente.
-ALTER TABLE ogAdmBD.menus MODIFY resolucion smallint(4);
-# Añadir tipo de arranque Windows al perfil hardware.
-ALTER TABLE ogAdmBD.perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
-# Soportar particiones GPT y añadir información de caché.
-ALTER TABLE ogAdmBD.ordenadores_particiones
- MODIFY codpar int(8) NOT NULL,
- ADD numdisk tinyint(4) NOT NULL DEFAULT 1 AFTER idordenador,
- ADD cache varchar(500),
- DROP INDEX idordenadornumpar,
- ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
-# Nuevos tipos de particiones y particiones GPT.
-ALTER TABLE ogAdmBD.imagenes MODIFY codpar int(8) NOT NULL;
-ALTER TABLE ogAdmBD.sistemasficheros MODIFY codpar int(8) NOT NULL;
-ALTER TABLE ogAdmBD.tipospar MODIFY codpar int(8) NOT NULL;
-INSERT INTO ogAdmBD.tipospar (codpar,tipopar,clonable) VALUES
- (6, 'FAT16', 1),
- (CONV('A5',16,10), 'FREEBSD', 1),
- (CONV('A6',16,10), 'OPENBSD', 1),
- (CONV('AF',16,10), 'HFS', 1),
- (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
- (CONV('DA',16,10), 'DATA', 1),
- (CONV('EE',16,10), 'GPT', 0),
- (CONV('EF',16,10), 'EFI', 0),
- (CONV('FB',16,10), 'VMFS', 1),
- (CONV('0700',16,10), 'WINDOWS', 1),
- (CONV('0C01',16,10), 'WIN-RESERV', 1),
- (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
- (CONV('7F01',16,10), 'CHROMEOS', 1),
- (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
- (CONV('8200',16,10), 'LINUX-SWAP', 0),
- (CONV('8300',16,10), 'LINUX', 1),
- (CONV('8301',16,10), 'LINUX-RESERV', 1),
- (CONV('8E00',16,10), 'LINUX-LVM', 1),
- (CONV('A500',16,10), 'FREEBSD-DISK', 0),
- (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
- (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
- (CONV('A503',16,10), 'FREEBSD', 1),
- (CONV('AF00',16,10), 'HFS', 1),
- (CONV('AF01',16,10), 'HFS-RAID', 1),
- (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
- (CONV('BF00',16,10), 'SOLARIS', 1),
- (CONV('BF01',16,10), 'SOLARIS', 1),
- (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
- (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
- (CONV('BF04',16,10), 'SOLARIS', 1),
- (CONV('BF05',16,10), 'SOLARIS', 1),
- (CONV('CA00',16,10), 'CACHE', 0),
- (CONV('EF00',16,10), 'EFI', 0),
- (CONV('EF01',16,10), 'MBR', 0),
- (CONV('EF02',16,10), 'BIOS-BOOT', 0),
- (CONV('FD00',16,10), 'LINUX-RAID', 1),
- (CONV('FFFF',16,10), 'UNKNOWN', 1);
-# Añadir foto de ordenador.
-ALTER TABLE ogAdmBD.ordenadores ADD fotoord VARCHAR (250) NOT NULL;
-# Actualizar localización de foto de aula (eliminar el camino).
-UPDATE ogAdmBD.aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
-# Internacionalización correcta de los asistentes.
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente Deploy de Imagenes' WHERE descripcion = 'Asistente "Deploy" de Imagenes';
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente UpdateCache con Imagenes' WHERE descripcion = 'Asistente "UpdateCache" con Imagenes';
-# Mejorar el rendimiento en acceso a la cola de acciones.
-ALTER TABLE ogAdmBD.acciones
- ADD KEY (idordenador),
- ADD KEY (idprocedimiento),
- ADD KEY (idtarea),
- ADD KEY (idprogramacion);
-
diff --git a/admin/Database/ogAdmBD-1.0.3-1.0.5.sql b/admin/Database/ogAdmBD-1.0.3-1.0.5.sql
new file mode 100644
index 00000000..663c6107
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0.3-1.0.5.sql
@@ -0,0 +1,194 @@
+### Fichero de actualización de la base de datos.
+# OpenGnSys 1.0.3 - 1.0.5
+#use ogAdmBD
+
+# Añadir tipo de arranque Windows al perfil hardware.
+ALTER TABLE perfileshard ADD winboot enum( 'reboot', 'kexec' ) NOT NULL DEFAULT 'reboot';
+
+# Soportar particiones GPT y añadir información de caché.
+ALTER TABLE ordenadores_particiones
+ MODIFY codpar int(8) NOT NULL,
+ ADD numdisk smallint NOT NULL DEFAULT 1 AFTER idordenador,
+ ADD cache varchar(500),
+ DROP INDEX idordenadornumpar,
+ ADD UNIQUE idordenadornumdisknumpar(idordenador,numdisk,numpar);
+ALTER TABLE imagenes
+ ADD numdisk smallint NOT NULL DEFAULT 1 AFTER idrepositorio;
+
+# Nuevos tipos de particiones y particiones GPT.
+ALTER TABLE tipospar MODIFY codpar int(8) NOT NULL;
+ALTER TABLE imagenes MODIFY codpar int(8) NOT NULL;
+ALTER TABLE sistemasficheros MODIFY codpar int(8) NOT NULL;
+INSERT INTO tipospar (codpar,tipopar,clonable) VALUES
+ (6, 'FAT16', 1),
+ (CONV('A5',16,10), 'FREEBSD', 1),
+ (CONV('A6',16,10), 'OPENBSD', 1),
+ (CONV('AF',16,10), 'HFS', 1),
+ (CONV('BE',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('DA',16,10), 'DATA', 1),
+ (CONV('EE',16,10), 'GPT', 0),
+ (CONV('EF',16,10), 'EFI', 1),
+ (CONV('FB',16,10), 'VMFS', 1),
+ (CONV('0700',16,10), 'WINDOWS', 1),
+ (CONV('0C01',16,10), 'WIN-RESERV', 1),
+ (CONV('7F00',16,10), 'CHROMEOS-KRN', 1),
+ (CONV('7F01',16,10), 'CHROMEOS', 1),
+ (CONV('7F02',16,10), 'CHROMEOS-RESERV', 1),
+ (CONV('8200',16,10), 'LINUX-SWAP', 0),
+ (CONV('8300',16,10), 'LINUX', 1),
+ (CONV('8301',16,10), 'LINUX-RESERV', 1),
+ (CONV('8E00',16,10), 'LINUX-LVM', 1),
+ (CONV('A500',16,10), 'FREEBSD-DISK', 0),
+ (CONV('A501',16,10), 'FREEBSD-BOOT', 1),
+ (CONV('A502',16,10), 'FREEBSD-SWAP', 0),
+ (CONV('A503',16,10), 'FREEBSD', 1),
+ (CONV('AB00',16,10), 'HFS-BOOT', 1),
+ (CONV('AF00',16,10), 'HFS', 1),
+ (CONV('AF01',16,10), 'HFS-RAID', 1),
+ (CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
+ (CONV('BF00',16,10), 'SOLARIS', 1),
+ (CONV('BF01',16,10), 'SOLARIS', 1),
+ (CONV('BF02',16,10), 'SOLARIS-SWAP', 0),
+ (CONV('BF03',16,10), 'SOLARIS-DISK', 1),
+ (CONV('BF04',16,10), 'SOLARIS', 1),
+ (CONV('BF05',16,10), 'SOLARIS', 1),
+ (CONV('CA00',16,10), 'CACHE', 0),
+ (CONV('EF00',16,10), 'EFI', 1),
+ (CONV('EF01',16,10), 'MBR', 0),
+ (CONV('EF02',16,10), 'BIOS-BOOT', 0),
+ (CONV('FD00',16,10), 'LINUX-RAID', 1),
+ (CONV('FFFF',16,10), 'UNKNOWN', 1)
+ ON DUPLICATE KEY UPDATE
+ codpar=VALUES(codpar), tipopar=VALUES(tipopar), clonable=VALUES(clonable);
+
+# Añadir foto de ordenador.
+ALTER TABLE ordenadores ADD fotoord VARCHAR (250) NOT NULL;
+
+# Actualizar localización de foto de aula (eliminar el camino).
+UPDATE aulas SET urlfoto = SUBSTRING_INDEX (urlfoto, '/', -1) WHERE urlfoto LIKE '%/%';
+
+# Añadir validación del cliente.
+ALTER TABLE aulas
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+ALTER TABLE ordenadores
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+# Nuevos comandos.
+ALTER TABLE comandos
+ ADD submenu VARCHAR(50) NOT NULL DEFAULT '';
+INSERT INTO comandos (idcomando, descripcion, pagina, gestor, funcion, urlimg, aplicambito, visuparametros, parametros, comentarios, activo, submenu) VALUES
+ (11, 'Eliminar Imagen Cache', '../comandos/EliminarImagenCache.php', '../comandos/gestores/gestor_Comandos.php', 'EliminarImagenCache', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1, ''),
+ (12, 'Crear Imagen Basica', '../comandos/CrearImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'CrearImagenBasica', '', 16, 'dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', 'nfn;dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', '', 1, 'Sincronizacion'),
+ (13, 'Restaurar Imagen Basica', '../comandos/RestaurarImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarImagenBasica', '', 28, 'dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', 'nfn;dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', '', 1, 'Sincronizacion'),
+ (14, 'Crear Software Incremental', '../comandos/CrearSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'CrearSoftIncremental', '', 16, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', '', 1, 'Sincronizacion'),
+ (15, 'Restaurar Software Incremental', '../comandos/RestaurarSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarSoftIncremental', '', 28, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', '', 1, 'Sincronizacion')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), pagina=VALUES(pagina),
+ gestor=VALUES(gestor), funcion=VALUES(funcion), urlimg=VALUES(urlimg),
+ aplicambito=VALUES(aplicambito), visuparametros=VALUES(visuparametros),
+ parametros=VALUES(parametros), comentarios=VALUES(comentarios),
+ activo=VALUES(activo), submenu=VALUES(submenu);
+
+# Parámetros para los comandos nuevos.
+ALTER TABLE parametros
+ ADD KEY (nemonico);
+INSERT INTO parametros (idparametro, nemonico, descripcion, nomidentificador, nomtabla, nomliteral, tipopa, visual) VALUES
+ (31, 'idf', 'Imagen Incremental', 'idimagen', 'imagenes', 'descripcion', 1, 1),
+ (32, 'ncf', 'Nombre canónico de la Imagen Incremental', '', '', '', 0, 1),
+ (33, 'bpi', 'Borrar imagen o partición previamente', '', '', '', 5, 1),
+ (34, 'cpc', 'Copiar también en cache', '', '', '', 5, 1),
+ (35, 'bpc', 'Borrado previo de la imagen en cache', '', '', '', 5, 1),
+ (36, 'rti', 'Ruta de origen', '', '', '', 0, 1),
+ (37, 'met', 'Método clonación', ';', '', 'Desde caché; Desde repositorio', 3, 1),
+ (38, 'nba', 'No borrar archivos en destino', '', '', '', 0, 1);
+
+# Imágenes incrementales.
+ALTER TABLE imagenes
+ ADD tipo TINYINT NULL,
+ ADD imagenid INT NOT NULL DEFAULT '0',
+ ADD ruta VARCHAR(250) NULL;
+UPDATE imagenes SET tipo=1;
+
+# Cambio de tipo de grupo.
+UPDATE grupos SET tipo=70 WHERE tipo=50;
+
+# Actualizar menús para nuevo parámetro "video" del Kernel, que sustituye a "vga" (ticket #573).
+ALTER TABLE menus
+ MODIFY resolucion VARCHAR(50) DEFAULT NULL;
+#UPDATE menus SET resolucion = CASE resolucion
+# WHEN '355' THEN 'uvesafb:1152x864-16'
+# WHEN '788' THEN 'uvesafb:800x600-16'
+# WHEN '789' THEN 'uvesafb:800x600-24'
+# WHEN '791' THEN 'uvesafb:1024x768-16'
+# WHEN '792' THEN 'uvesafb:1024x768-24'
+# WHEN '794' THEN 'uvesafb:1280x1024-16'
+# WHEN '795' THEN 'uvesafb:1280x1024-24'
+# WHEN '798' THEN 'uvesafb:1600x1200-16'
+# WHEN '799' THEN 'uvesafb:1600x1200-24'
+# WHEN NULL THEN 'uvesafb:800x600-16'
+# ELSE resolucion
+# END;
+
+# Cambios para NetBoot con ficheros dinámicos (tickets #534 #582).
+DROP TABLE IF EXISTS menuboot;
+DROP TABLE IF EXISTS itemboot;
+DROP TABLE IF EXISTS menuboot_itemboot;
+ALTER TABLE ordenadores
+ MODIFY arranque VARCHAR(30) NOT NULL DEFAULT '00unknown';
+UPDATE ordenadores SET arranque = '01' WHERE arranque = '1';
+UPDATE ordenadores SET arranque = '19pxeadmin' WHERE arranque = 'pxeADMIN';
+
+# Habilita el comando Particionar y formatear.
+UPDATE comandos SET activo = '1' WHERE idcomando = 10;
+ALTER TABLE sistemasficheros
+ ADD UNIQUE INDEX descripcion (descripcion);
+INSERT INTO sistemasficheros (descripcion, nemonico) VALUES
+ ('EMPTY', 'EMPTY'),
+ ('CACHE', 'CACHE'),
+ ('BTRFS', 'BTRFS'),
+ ('EXFAT', 'EXFAT'),
+ ('EXT2', 'EXT2'),
+ ('EXT3', 'EXT3'),
+ ('EXT4', 'EXT4'),
+ ('FAT12', 'FAT12'),
+ ('FAT16', 'FAT16'),
+ ('FAT32', 'FAT32'),
+ ('HFS', 'HFS'),
+ ('HFSPLUS', 'HFSPLUS'),
+ ('JFS', 'JFS'),
+ ('NTFS', 'NTFS'),
+ ('REISERFS', 'REISERFS'),
+ ('REISER4', 'REISER4'),
+ ('UFS', 'UFS'),
+ ('XFS', 'XFS')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), nemonico=VALUES(nemonico);
+# Nuevas particiones marcadas como clonables.
+INSERT INTO tipospar (codpar, tipopar, clonable) VALUES
+ (CONV('EF',16,10), 'EFI', 1),
+ (CONV('AB00',16,10), 'HFS-BOOT', 1),
+ (CONV('EF00',16,10), 'EFI', 1)
+ ON DUPLICATE KEY UPDATE
+ codpar=VALUES(codpar), tipopar=VALUES(tipopar), clonable=VALUES(clonable);
+
+# Añadir proxy para aulas.
+ALTER TABLE aulas
+ ADD proxy VARCHAR(30) AFTER dns;
+
+# Valores por defecto para incorporar ordenadores (ticket #609).
+ALTER TABLE ordenadores
+ ALTER fotoord SET DEFAULT 'fotoordenador.gif',
+ ALTER idproautoexec SET DEFAULT 0;
+UPDATE ordenadores
+ SET fotoord = SUBSTRING_INDEX(fotoord, '/', -1);
+
+# Corregir errata en particiones vacías con número de partición asignado al código de partición.
+UPDATE ordenadores_particiones
+ SET codpar = 0
+ WHERE codpar = numpar AND tamano = 0;
+
diff --git a/admin/Database/ogAdmBD-1.0.4-1.0.4a.sql b/admin/Database/ogAdmBD-1.0.4-1.0.4a.sql
deleted file mode 100644
index d96b7b9f..00000000
--- a/admin/Database/ogAdmBD-1.0.4-1.0.4a.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-# Internacionalización correcta de los asistentes.
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente Deploy de Imagenes' WHERE descripcion = 'Asistente "Deploy" de Imagenes';
-UPDATE ogAdmBD.asistentes
- SET descripcion = 'Asistente UpdateCache con Imagenes' WHERE descripcion = 'Asistente "UpdateCache" con Imagenes';
-# Mejorar el rendimiento en acceso a la cola de acciones.
-ALTER TABLE ogAdmBD.acciones
- ADD KEY (idordenador),
- ADD KEY (idprocedimiento),
- ADD KEY (idtarea),
- ADD KEY (idprogramacion);
-
diff --git a/admin/Database/ogAdmBD-1.0.4-1.0.5.sql b/admin/Database/ogAdmBD-1.0.4-1.0.5.sql
new file mode 100644
index 00000000..63cc14a4
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0.4-1.0.5.sql
@@ -0,0 +1,145 @@
+### Fichero de actualización de la base de datos.
+# OpenGnSys 1.0.4 - 1.0.5
+#use ogAdmBD
+
+# Mejorar el rendimiento en acceso a la cola de acciones.
+ALTER TABLE acciones
+ ADD KEY (idordenador),
+ ADD KEY (idprocedimiento),
+ ADD KEY (idtarea),
+ ADD KEY (idprogramacion);
+
+# Internacionalización correcta de los asistentes.
+UPDATE asistentes
+ SET descripcion = 'Asistente Deploy de Imagenes' WHERE descripcion = 'Asistente "Deploy" de Imagenes';
+UPDATE asistentes
+ SET descripcion = 'Asistente UpdateCache con Imagenes' WHERE descripcion = 'Asistente "UpdateCache" con Imagenes';
+
+# Añadir validación del cliente.
+ALTER TABLE aulas
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+ALTER TABLE ordenadores
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+# Nuevos comandos.
+ALTER TABLE comandos
+ ADD submenu VARCHAR(50) NOT NULL DEFAULT '';
+INSERT INTO comandos (idcomando, descripcion, pagina, gestor, funcion, urlimg, aplicambito, visuparametros, parametros, comentarios, activo, submenu) VALUES
+ (11, 'Eliminar Imagen Cache', '../comandos/EliminarImagenCache.php', '../comandos/gestores/gestor_Comandos.php', 'EliminarImagenCache', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1, ''),
+ (12, 'Crear Imagen Basica', '../comandos/CrearImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'CrearImagenBasica', '', 16, 'dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', 'nfn;dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', '', 1, 'Sincronizacion'),
+ (13, 'Restaurar Imagen Basica', '../comandos/RestaurarImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarImagenBasica', '', 28, 'dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', 'nfn;dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', '', 1, 'Sincronizacion'),
+ (14, 'Crear Software Incremental', '../comandos/CrearSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'CrearSoftIncremental', '', 16, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', '', 1, 'Sincronizacion'),
+ (15, 'Restaurar Software Incremental', '../comandos/RestaurarSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarSoftIncremental', '', 28, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', '', 1, 'Sincronizacion')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), pagina=VALUES(pagina),
+ gestor=VALUES(gestor), funcion=VALUES(funcion), urlimg=VALUES(urlimg),
+ aplicambito=VALUES(aplicambito), visuparametros=VALUES(visuparametros),
+ parametros=VALUES(parametros), comentarios=VALUES(comentarios),
+ activo=VALUES(activo), submenu=VALUES(submenu);
+
+
+# Parámetros para los comandos nuevos.
+ALTER TABLE parametros
+ ADD KEY (nemonico);
+INSERT INTO parametros (idparametro, nemonico, descripcion, nomidentificador, nomtabla, nomliteral, tipopa, visual) VALUES
+ (31, 'idf', 'Imagen Incremental', 'idimagen', 'imagenes', 'descripcion', 1, 1),
+ (32, 'ncf', 'Nombre canónico de la Imagen Incremental', '', '', '', 0, 1),
+ (33, 'bpi', 'Borrar imagen o partición previamente', '', '', '', 5, 1),
+ (34, 'cpc', 'Copiar también en cache', '', '', '', 5, 1),
+ (35, 'bpc', 'Borrado previo de la imagen en cache', '', '', '', 5, 1),
+ (36, 'rti', 'Ruta de origen', '', '', '', 0, 1),
+ (37, 'met', 'Método clonación', ';', '', 'Desde caché; Desde repositorio', 3, 1),
+ (38, 'nba', 'No borrar archivos en destino', '', '', '', 0, 1);
+
+# Imágenes incrementales y completar soporte para varios discos.
+ALTER TABLE imagenes
+ ADD numdisk smallint NOT NULL DEFAULT 1 AFTER idrepositorio,
+ ADD tipo TINYINT NULL,
+ ADD imagenid INT NOT NULL DEFAULT '0',
+ ADD ruta VARCHAR(250) NULL;
+UPDATE imagenes SET tipo=1;
+
+# Cambio de tipo de grupo.
+UPDATE grupos SET tipo=70 WHERE tipo=50;
+
+# Actualizar menús para nuevo parámetro "video" del Kernel, que sustituye a "vga" (ticket #573).
+ALTER TABLE menus
+ MODIFY resolucion VARCHAR(50) DEFAULT NULL;
+#UPDATE menus SET resolucion = CASE resolucion
+# WHEN '355' THEN 'uvesafb:1152x864-16'
+# WHEN '788' THEN 'uvesafb:800x600-16'
+# WHEN '789' THEN 'uvesafb:800x600-24'
+# WHEN '791' THEN 'uvesafb:1024x768-16'
+# WHEN '792' THEN 'uvesafb:1024x768-24'
+# WHEN '794' THEN 'uvesafb:1280x1024-16'
+# WHEN '795' THEN 'uvesafb:1280x1024-24'
+# WHEN '798' THEN 'uvesafb:1600x1200-16'
+# WHEN '799' THEN 'uvesafb:1600x1200-24'
+# WHEN NULL THEN 'uvesafb:800x600-16'
+# ELSE resolucion
+# END;
+
+# Cambios para NetBoot con ficheros dinámicos (tickets #534 #582).
+DROP TABLE IF EXISTS menuboot;
+DROP TABLE IF EXISTS itemboot;
+DROP TABLE IF EXISTS menuboot_itemboot;
+ALTER TABLE ordenadores
+ MODIFY arranque VARCHAR(30) NOT NULL DEFAULT '00unknown';
+UPDATE ordenadores SET arranque = '01' WHERE arranque = '1';
+UPDATE ordenadores SET arranque = '19pxeadmin' WHERE arranque = 'pxeADMIN';
+
+# Habilita el comando Particionar y formatear.
+UPDATE comandos SET activo = '1' WHERE idcomando = 10;
+ALTER TABLE sistemasficheros
+ ADD UNIQUE INDEX descripcion (descripcion);
+INSERT INTO sistemasficheros (descripcion, nemonico) VALUES
+ ('EMPTY', 'EMPTY'),
+ ('CACHE', 'CACHE'),
+ ('BTRFS', 'BTRFS'),
+ ('EXT2', 'EXT2'),
+ ('EXT3', 'EXT3'),
+ ('EXT4', 'EXT4'),
+ ('FAT12', 'FAT12'),
+ ('FAT16', 'FAT16'),
+ ('FAT32', 'FAT32'),
+ ('HFS', 'HFS'),
+ ('HFSPLUS', 'HFSPLUS'),
+ ('JFS', 'JFS'),
+ ('NTFS', 'NTFS'),
+ ('REISERFS', 'REISERFS'),
+ ('REISER4', 'REISER4'),
+ ('UFS', 'UFS'),
+ ('XFS', 'XFS'),
+ ('EXFAT', 'EXFAT')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), nemonico=VALUES(nemonico);
+# Nuevas particiones marcadas como clonables.
+INSERT INTO tipospar (codpar, tipopar, clonable) VALUES
+ (CONV('EF',16,10), 'EFI', 1),
+ (CONV('AB00',16,10), 'HFS-BOOT', 1),
+ (CONV('EF00',16,10), 'EFI', 1)
+ ON DUPLICATE KEY UPDATE
+ codpar=VALUES(codpar), tipopar=VALUES(tipopar), clonable=VALUES(clonable);
+
+# Añadir proxy para aulas.
+ALTER TABLE aulas
+ ADD proxy VARCHAR(30) AFTER dns;
+
+# Valores por defecto para incorporar ordenadores (ticket #609).
+ALTER TABLE ordenadores
+ ALTER fotoord SET DEFAULT 'fotoordenador.gif',
+ ALTER idproautoexec SET DEFAULT 0;
+UPDATE ordenadores
+ SET fotoord = SUBSTRING_INDEX(fotoord, '/', -1);
+
+# Corregir errata en particiones vacías con número de partición asignado al código de partición.
+UPDATE ordenadores_particiones
+ SET codpar = 0
+ WHERE codpar = numpar AND tamano = 0;
+
+
diff --git a/admin/Database/ogAdmBD-1.0.4a-1.0.5.sql b/admin/Database/ogAdmBD-1.0.4a-1.0.5.sql
new file mode 100644
index 00000000..4f228eb0
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0.4a-1.0.5.sql
@@ -0,0 +1,136 @@
+### Fichero de actualización de la base de datos.
+# OpenGnSys 1.0.4a - 1.0.5
+#use ogAdmBD
+
+# Añadir validación del cliente.
+ALTER TABLE aulas
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+ALTER TABLE ordenadores
+ ADD validacion TINYINT(1) DEFAULT 0,
+ ADD paginalogin VARCHAR(100),
+ ADD paginavalidacion VARCHAR(100);
+
+# Nuevos comandos.
+ALTER TABLE comandos
+ ADD submenu VARCHAR(50) NOT NULL DEFAULT '';
+INSERT INTO comandos (idcomando, descripcion, pagina, gestor, funcion, urlimg, aplicambito, visuparametros, parametros, comentarios, activo, submenu) VALUES
+ (11, 'Eliminar Imagen Cache', '../comandos/EliminarImagenCache.php', '../comandos/gestores/gestor_Comandos.php', 'EliminarImagenCache', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1, ''),
+ (12, 'Crear Imagen Basica', '../comandos/CrearImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'CrearImagenBasica', '', 16, 'dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', 'nfn;dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', '', 1, 'Sincronizacion'),
+ (13, 'Restaurar Imagen Basica', '../comandos/RestaurarImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarImagenBasica', '', 28, 'dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', 'nfn;dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', '', 1, 'Sincronizacion'),
+ (14, 'Crear Software Incremental', '../comandos/CrearSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'CrearSoftIncremental', '', 16, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', '', 1, 'Sincronizacion'),
+ (15, 'Restaurar Software Incremental', '../comandos/RestaurarSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarSoftIncremental', '', 28, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', '', 1, 'Sincronizacion')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), pagina=VALUES(pagina),
+ gestor=VALUES(gestor), funcion=VALUES(funcion), urlimg=VALUES(urlimg),
+ aplicambito=VALUES(aplicambito), visuparametros=VALUES(visuparametros),
+ parametros=VALUES(parametros), comentarios=VALUES(comentarios),
+ activo=VALUES(activo), submenu=VALUES(submenu);
+
+# Parámetros para los comandos nuevos.
+ALTER TABLE parametros
+ ADD KEY (nemonico);
+INSERT INTO parametros (idparametro, nemonico, descripcion, nomidentificador, nomtabla, nomliteral, tipopa, visual) VALUES
+ (31, 'idf', 'Imagen Incremental', 'idimagen', 'imagenes', 'descripcion', 1, 1),
+ (32, 'ncf', 'Nombre canónico de la Imagen Incremental', '', '', '', 0, 1),
+ (33, 'bpi', 'Borrar imagen o partición previamente', '', '', '', 5, 1),
+ (34, 'cpc', 'Copiar también en cache', '', '', '', 5, 1),
+ (35, 'bpc', 'Borrado previo de la imagen en cache', '', '', '', 5, 1),
+ (36, 'rti', 'Ruta de origen', '', '', '', 0, 1),
+ (37, 'met', 'Método clonación', ';', '', 'Desde caché; Desde repositorio', 3, 1),
+ (38, 'nba', 'No borrar archivos en destino', '', '', '', 0, 1);
+
+# Imágenes incrementales y completar soporte para varios discos.
+ALTER TABLE imagenes
+ ADD numdisk smallint NOT NULL DEFAULT 1 AFTER idrepositorio,
+ ADD tipo TINYINT NULL,
+ ADD imagenid INT NOT NULL DEFAULT '0',
+ ADD ruta VARCHAR(250) NULL;
+UPDATE imagenes SET tipo=1;
+
+# Cambio de tipo de grupo.
+UPDATE grupos SET tipo=70 WHERE tipo=50;
+
+# Actualizar menús para nuevo parámetro "video" del Kernel, que sustituye a "vga" (ticket #573).
+ALTER TABLE menus
+ MODIFY resolucion VARCHAR(50) DEFAULT NULL;
+#UPDATE menus SET resolucion = CASE resolucion
+# WHEN '355' THEN 'uvesafb:1152x864-16'
+# WHEN '788' THEN 'uvesafb:800x600-16'
+# WHEN '789' THEN 'uvesafb:800x600-24'
+# WHEN '791' THEN 'uvesafb:1024x768-16'
+# WHEN '792' THEN 'uvesafb:1024x768-24'
+# WHEN '794' THEN 'uvesafb:1280x1024-16'
+# WHEN '795' THEN 'uvesafb:1280x1024-24'
+# WHEN '798' THEN 'uvesafb:1600x1200-16'
+# WHEN '799' THEN 'uvesafb:1600x1200-24'
+# WHEN NULL THEN 'uvesafb:800x600-16'
+# ELSE resolucion
+# END;
+
+# Cambios para NetBoot con ficheros dinámicos (tickets #534 #582).
+DROP TABLE IF EXISTS menuboot;
+DROP TABLE IF EXISTS itemboot;
+DROP TABLE IF EXISTS menuboot_itemboot;
+ALTER TABLE ordenadores
+ MODIFY arranque VARCHAR(30) NOT NULL DEFAULT '00unknown';
+UPDATE ordenadores SET arranque = '01' WHERE arranque = '1';
+UPDATE ordenadores SET arranque = '19pxeadmin' WHERE arranque = 'pxeADMIN';
+
+# Habilita el comando Particionar y formatear.
+UPDATE comandos SET activo = '1' WHERE idcomando = 10;
+ALTER TABLE sistemasficheros
+ ADD UNIQUE INDEX descripcion (descripcion);
+INSERT INTO sistemasficheros (descripcion, nemonico) VALUES
+ ('EMPTY', 'EMPTY'),
+ ('CACHE', 'CACHE'),
+ ('BTRFS', 'BTRFS'),
+ ('EXT2', 'EXT2'),
+ ('EXT3', 'EXT3'),
+ ('EXT4', 'EXT4'),
+ ('FAT12', 'FAT12'),
+ ('FAT16', 'FAT16'),
+ ('FAT32', 'FAT32'),
+ ('HFS', 'HFS'),
+ ('HFSPLUS', 'HFSPLUS'),
+ ('JFS', 'JFS'),
+ ('NTFS', 'NTFS'),
+ ('REISERFS', 'REISERFS'),
+ ('REISER4', 'REISER4'),
+ ('UFS', 'UFS'),
+ ('XFS', 'XFS'),
+ ('EXFAT', 'EXFAT')
+ ON DUPLICATE KEY UPDATE
+ descripcion=VALUES(descripcion), nemonico=VALUES(nemonico);
+# Nuevas particiones marcadas como clonables.
+INSERT INTO tipospar (codpar, tipopar, clonable) VALUES
+ (CONV('EF',16,10), 'EFI', 1),
+ (CONV('AB00',16,10), 'HFS-BOOT', 1),
+ (CONV('EF00',16,10), 'EFI', 1)
+ ON DUPLICATE KEY UPDATE
+ codpar=VALUES(codpar), tipopar=VALUES(tipopar), clonable=VALUES(clonable);
+
+# Añadir proxy para aulas.
+ALTER TABLE aulas
+ ADD proxy VARCHAR(30) AFTER dns;
+
+# Valores por defecto para incorporar ordenadores (ticket #609).
+ALTER TABLE ordenadores
+ ALTER fotoord SET DEFAULT 'fotoordenador.gif',
+ ALTER idproautoexec SET DEFAULT 0;
+# Dejar solo nombre del fichero.
+UPDATE ordenadores
+ SET fotoord = SUBSTRING_INDEX(fotoord, '/', -1);
+
+# Cambio en script genérico de despliegue de imágenes.
+UPDATE procedimientos_acciones
+ SET parametros = REPLACE (parametros, 'restoreImage%20', 'deployImage%20')
+ WHERE idcomando = 8;
+
+# Corregir errata en particiones vacías con número de partición asignado al código de partición.
+UPDATE ordenadores_particiones
+ SET codpar = 0
+ WHERE codpar = numpar AND tamano = 0;
+
diff --git a/admin/Database/ogAdmBD-1.0.5-postinst.sql b/admin/Database/ogAdmBD-1.0.5-postinst.sql
new file mode 100644
index 00000000..8b2e7be6
--- /dev/null
+++ b/admin/Database/ogAdmBD-1.0.5-postinst.sql
@@ -0,0 +1,41 @@
+### Procedimiento para actualización de la base de datos.
+# Postinstalación de OpenGnSys 1.0.5
+#use ogAdmBD
+
+# Nota: retocar el fichero para sustituir KERNELVERSION por la versión del
+# Kernel del cliente ogLive con el formato V.RR (V=versión, RR=revisión).
+
+# Cambiar parámetro de resolución de pantalla para Kernel anteriores a 3.7.
+UPDATE menus
+ SET resolucion = CASE resolucion
+ WHEN 'uvesafb:1152x864-16' THEN '355'
+ WHEN 'uvesafb:800x600-16' THEN '788'
+ WHEN 'uvesafb:800x600-24' THEN '789'
+ WHEN 'uvesafb:1024x768-16' THEN '791'
+ WHEN 'uvesafb:1024x768-24' THEN '792'
+ WHEN 'uvesafb:1280x1024-16' THEN '794'
+ WHEN 'uvesafb:1280x1024-24' THEN '795'
+ WHEN 'uvesafb:1600x1200-16' THEN '798'
+ WHEN 'uvesafb:1600x1200-24' THEN '799'
+ WHEN NULL or '0' THEN '788'
+ ELSE resolucion
+ END
+ WHERE KERNELVERSION < 3.07;
+
+# Cambiar parámetro de resolución de pantalla para Kernel 3.7 o superior.
+UPDATE menus
+ SET resolucion = CASE resolucion
+ WHEN '355' THEN 'uvesafb:1152x864-16'
+ WHEN '788' THEN 'uvesafb:800x600-16'
+ WHEN '789' THEN 'uvesafb:800x600-24'
+ WHEN '791' THEN 'uvesafb:1024x768-16'
+ WHEN '792' THEN 'uvesafb:1024x768-24'
+ WHEN '794' THEN 'uvesafb:1280x1024-16'
+ WHEN '795' THEN 'uvesafb:1280x1024-24'
+ WHEN '798' THEN 'uvesafb:1600x1200-16'
+ WHEN '799' THEN 'uvesafb:1600x1200-24'
+ WHEN NULL or '0' THEN 'uvesafb:800x600-16'
+ ELSE resolucion
+ END
+ WHERE KERNELVERSION >= 3.07;
+
diff --git a/admin/Database/ogAdmBD.sql b/admin/Database/ogAdmBD.sql
index df7ba89e..ff7507e7 100644
--- a/admin/Database/ogAdmBD.sql
+++ b/admin/Database/ogAdmBD.sql
@@ -107,16 +107,19 @@ CREATE TABLE IF NOT EXISTS `aulas` (
`ipmul` varchar(16) NOT NULL,
`pormul` int(11) NOT NULL,
`velmul` smallint(6) NOT NULL DEFAULT '70',
- `router` VARCHAR( 30 ),
- `netmask` VARCHAR( 30 ),
- `dns` VARCHAR (30),
+ `router` varchar( 30 ),
+ `netmask` varchar( 30 ),
+ `dns` varchar (30),
+ `proxy` varchar (30),
`modp2p` enum('seeder','peer','leecher') DEFAULT 'peer',
- `timep2p` INT(11) NOT NULL DEFAULT '60',
+ `timep2p` int(11) NOT NULL DEFAULT '60',
+ `validacion` tinyint(1) DEFAULT '0',
+ `paginalogin` varchar(100),
+ `paginavalidacion` varchar(100),
PRIMARY KEY (`idaula`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
-
--
-- Estructura de tabla para la tabla `asistentes`
--
@@ -182,13 +185,13 @@ CREATE TABLE IF NOT EXISTS `centros` (
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
- --
- -- Volcar la base de datos para la tabla `centros`
- --
- INSERT INTO `centros` (`idcentro`,`nombrecentro`,`identidad`,`comentarios`) VALUES
- (1,'Unidad Organizativa (Default)',1,'Esta Unidad Organizativa se crea automáticamente en el proceso de instalación de OpenGnSys');
-
-
+--
+-- Volcar la base de datos para la tabla `centros`
+--
+INSERT INTO `centros` (`idcentro`,`nombrecentro`,`identidad`,`comentarios`) VALUES
+ (1,'Unidad Organizativa (Default)',1,'Esta Unidad Organizativa se crea automáticamente en el proceso de instalación de OpenGnSys');
+
+
-- --------------------------------------------------------
--
@@ -207,24 +210,30 @@ CREATE TABLE IF NOT EXISTS `comandos` (
`parametros` varchar(250) DEFAULT NULL,
`comentarios` text,
`activo` tinyint(1) NOT NULL,
+ `submenu` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`idcomando`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;
--
-- Volcar la base de datos para la tabla `comandos`
--
-INSERT INTO `comandos` (`idcomando`, `descripcion`, `pagina`, `gestor`, `funcion`, `urlimg`, `aplicambito`, `visuparametros`, `parametros`, `comentarios`, `activo`) VALUES
-(1, 'Arrancar', '../comandos/Arrancar.php', '../comandos/gestores/gestor_Comandos.php', 'Arrancar', '', 31, '', 'nfn;iph;mac', '', 1),
-(2, 'Apagar', '../comandos/Apagar.php', '../comandos/gestores/gestor_Comandos.php', 'Apagar', '', 31, '', 'nfn;iph;mac', '', 1),
-(3, 'Restaurar Imagen', '../comandos/RestaurarImagen.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarImagen', '', 28, 'dsk;par;idi;nci;ipr;ptc', 'nfn;iph;mac;dsk;par;idi;nci;ipr;ifs;ptc', '', 1),
-(4, 'Crear Imagen', '../comandos/CrearImagen.php', '../comandos/gestores/gestor_Comandos.php', 'CrearImagen', '', 16, 'dsk;par;idi;nci;ipr;cpt', 'nfn;iph;mac;dsk;par;idi;nci;ipr;cpt;', '', 1),
-(5, 'Reiniciar', '../comandos/Reiniciar.php', '../comandos/gestores/gestor_Comandos.php', 'Reiniciar', '', 31, '', 'nfn;iph;mac;', '', 1),
-(6, 'Inventario Hardware', '../comandos/InventarioHardware.php', '../comandos/gestores/gestor_Comandos.php', 'InventarioHardware', '', 16, '', 'nfn;iph;mac;', '', 1),
-(7, 'Inventario Software', '../comandos/InventarioSoftware.php', '../comandos/gestores/gestor_Comandos.php', 'InventarioSoftware', '', 16, 'par', 'nfn;iph;mac;par', '', 1),
-(8, 'Ejecutar Script', '../comandos/EjecutarScripts.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1),
-(9, 'Iniciar Sesion', '../comandos/IniciarSesion.php', '../comandos/gestores/gestor_Comandos.php', 'IniciarSesion', '', 31, 'par', 'nfn;iph;par', '', 1),
-(10, 'Particionar y Formatear', '../comandos/Configurar.php', '../comandos/gestores/gestor_Comandos.php', 'Configurar', '', 28, 'dsk;cfg;', 'nfn;iph;mac;dsk;cfg;par;cpt;sfi;tam;ope', '', 0);
+INSERT INTO `comandos` (`idcomando`, `descripcion`, `pagina`, `gestor`, `funcion`, `urlimg`, `aplicambito`, `visuparametros`, `parametros`, `comentarios`, `activo`, `submenu`) VALUES
+(1, 'Arrancar', '../comandos/Arrancar.php', '../comandos/gestores/gestor_Comandos.php', 'Arrancar', '', 31, '', 'nfn;iph;mac', '', 1, ''),
+(2, 'Apagar', '../comandos/Apagar.php', '../comandos/gestores/gestor_Comandos.php', 'Apagar', '', 31, '', 'nfn;iph;mac', '', 1, ''),
+(3, 'Restaurar Imagen', '../comandos/RestaurarImagen.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarImagen', '', 28, 'dsk;par;idi;nci;ipr;ptc', 'nfn;iph;mac;dsk;par;idi;nci;ipr;ifs;ptc', '', 1, ''),
+(4, 'Crear Imagen', '../comandos/CrearImagen.php', '../comandos/gestores/gestor_Comandos.php', 'CrearImagen', '', 16, 'dsk;par;idi;nci;ipr;cpt', 'nfn;iph;mac;dsk;par;idi;nci;ipr;cpt;', '', 1, ''),
+(5, 'Reiniciar', '../comandos/Reiniciar.php', '../comandos/gestores/gestor_Comandos.php', 'Reiniciar', '', 31, '', 'nfn;iph;mac;', '', 1, ''),
+(6, 'Inventario Hardware', '../comandos/InventarioHardware.php', '../comandos/gestores/gestor_Comandos.php', 'InventarioHardware', '', 16, '', 'nfn;iph;mac;', '', 1, ''),
+(7, 'Inventario Software', '../comandos/InventarioSoftware.php', '../comandos/gestores/gestor_Comandos.php', 'InventarioSoftware', '', 16, 'par', 'nfn;iph;mac;par', '', 1, ''),
+(8, 'Ejecutar Script', '../comandos/EjecutarScripts.php', '../comandos/gestores/gestor_Comandos.php', 'EjecutarScript', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1, ''),
+(9, 'Iniciar Sesion', '../comandos/IniciarSesion.php', '../comandos/gestores/gestor_Comandos.php', 'IniciarSesion', '', 31, 'par', 'nfn;iph;par', '', 1, ''),
+(10, 'Particionar y Formatear', '../comandos/Configurar.php', '../comandos/gestores/gestor_Comandos.php', 'Configurar', '', 28, 'dsk;cfg;', 'nfn;iph;mac;dsk;cfg;par;cpt;sfi;tam;ope', '', 1, ''),
+(11, 'Eliminar Imagen Cache', '../comandos/EliminarImagenCache.php', '../comandos/gestores/gestor_Comandos.php', 'EliminarImagenCache', '', 31, 'iph;tis;dcr;scp', 'nfn;iph;tis;dcr;scp', '', 1, ''),
+(12, 'Crear Imagen Basica', '../comandos/CrearImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'CrearImagenBasica', '', 16, 'dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', 'nfn;dsk;par;cpt;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba', '', 1, 'Sincronizacion'),
+(13, 'Restaurar Imagen Basica', '../comandos/RestaurarImagenBasica.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarImagenBasica', '', 28, 'dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', 'nfn;dsk;par;idi;nci;ipr;iph;bpi;cpc;bpc;rti;nba;met', '', 1, 'Sincronizacion'),
+(14, 'Crear Software Incremental', '../comandos/CrearSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'CrearSoftIncremental', '', 16, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;nba', '', 1, 'Sincronizacion'),
+(15, 'Restaurar Software Incremental', '../comandos/RestaurarSoftIncremental.php', '../comandos/gestores/gestor_Comandos.php', 'RestaurarSoftIncremental', '', 28, 'dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', 'nfn;dsk;par;idi;nci;ipr;idf;ncf;bpi;cpc;bpc;iph;rti;met;nba', '', 1, 'Sincronizacion');
@@ -413,8 +422,12 @@ CREATE TABLE IF NOT EXISTS `imagenes` (
`comentarios` text,
`grupoid` int(11) DEFAULT NULL,
`idrepositorio` int(11) NOT NULL,
- `numpar` smallint(6) NOT NULL,
+ `numdisk` smallint NOT NULL DEFAULT 1,
+ `numpar` smallint NOT NULL,
`codpar` int(8) NOT NULL,
+ `tipo` tinyint NULL,
+ `imagenid` int NOT NULL DEFAULT '0',
+ `ruta` varchar(250) NULL,
PRIMARY KEY (`idimagen`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
@@ -440,7 +453,7 @@ CREATE TABLE IF NOT EXISTS `menus` (
`grupoid` int(11) NOT NULL DEFAULT '0',
`htmlmenupub` varchar(250) DEFAULT NULL,
`htmlmenupri` varchar(250) DEFAULT NULL,
- `resolucion` SMALLINT(4) DEFAULT NULL,
+ `resolucion` varchar(50) DEFAULT NULL,
PRIMARY KEY (`idmenu`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
@@ -476,11 +489,14 @@ CREATE TABLE IF NOT EXISTS `ordenadores` (
`cache` int(11) DEFAULT NULL,
`router` varchar(16) NOT NULL,
`mascara` varchar(16) NOT NULL,
- `idproautoexec` int(11) NOT NULL,
- `arranque` VARCHAR( 30 ) NOT NULL DEFAULT '1',
+ `idproautoexec` int(11) NOT NULL DEFAULT 0,
+ `arranque` VARCHAR( 30 ) NOT NULL DEFAULT '00unknown',
`netiface` enum('eth0','eth1','eth2') DEFAULT 'eth0',
- `netdriver` VARCHAR( 30 ) NOT NULL DEFAULT 'generic',
- `fotoord` VARCHAR( 250 ) NOT NULL,
+ `netdriver` varchar( 30 ) NOT NULL DEFAULT 'generic',
+ `fotoord` varchar( 250 ) NOT NULL DEFAULT 'fotoordenador.gif',
+ `validacion` tinyint(1) DEFAULT '0',
+ `paginalogin` varchar(100),
+ `paginavalidacion` varchar(100),
PRIMARY KEY (`idordenador`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
@@ -494,8 +510,8 @@ CREATE TABLE IF NOT EXISTS `ordenadores` (
CREATE TABLE IF NOT EXISTS `ordenadores_particiones` (
`idordenador` int(11) NOT NULL,
- `numdisk` tinyint(4) NOT NULL,
- `numpar` tinyint(4) NOT NULL,
+ `numdisk` smallint NOT NULL,
+ `numpar` smallint NOT NULL,
`codpar` int(8) NOT NULL,
`tamano` int(11) NOT NULL,
`idsistemafichero` smallint(11) NOT NULL,
@@ -521,8 +537,9 @@ CREATE TABLE IF NOT EXISTS `parametros` (
`nomliteral` varchar(64) NOT NULL,
`tipopa` tinyint(1) DEFAULT '0',
`visual` tinyint(4) NOT NULL DEFAULT '0',
- PRIMARY KEY (`idparametro`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=31 ;
+ PRIMARY KEY (`idparametro`),
+ KEY (`nemonico`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=33 ;
--
-- Volcar la base de datos para la tabla `parametros`
@@ -541,7 +558,7 @@ INSERT INTO `parametros` (`idparametro`, `nemonico`, `descripcion`, `nomidentifi
(9, 'ifh', 'Perfil Hardware', 'idperfilhard', 'perfileshard', 'descripcion', 1, 1),
(10, 'ifs', 'Perfil Software', 'idperfilsoft', 'perfilessoft', 'descripcion', 1, 1),
(11, 'idi', 'Imagen', 'idimagen', 'imagenes', 'descripcion', 1, 1),
-(12, 'nci', 'Nombre canonico', '', '', '', 0, 1),
+(12, 'nci', 'Nombre canónico', '', '', '', 0, 1),
(13, 'scp', 'Código a ejecutar en formato script', '', '', '', 0, 0),
(14, 'npc', 'Nombre del cliente', '', '', '', NULL, 0),
(15, 'che', 'Tamaño de la cache del cliente', '', '', '', NULL, 0),
@@ -549,20 +566,29 @@ INSERT INTO `parametros` (`idparametro`, `nemonico`, `descripcion`, `nomidentifi
(17, 'res', 'Respuesta del comando: Puede tomar los valores 1 o 2 en el caso de que la respuesta sea correcta o que haya un error al ejecutarse.', '', '', '', 0, 0),
(19, 'ipr', 'Repositorio', 'ip', 'repositorios', 'nombrerepositorio', 1, 1),
(20, 'cpt', 'Tipo partición', 'codpar', 'tipospar', 'tipopar', 1, 1),
-(21, 'sfi', 'Sistema de fichero', 'idsistemafichero', 'sistemasficheros', 'nemonico', 1, 0),
-(22, 'tam', 'Tamaño', '', '', '', 0, 0),
+(21, 'sfi', 'Sistema de fichero', 'nemonico', 'sistemasficheros', 'nemonico', 1, 0),
+(22, 'tam', 'Tamaño', '', '', '', 0, 1),
(23, 'ope', 'Operación', ';', '', 'Sin operación;Formatear;Ocultar;Mostrar', 3, 1),
(24, 'nfl', 'Nombre del fichero que se envía o se recibe', '', '', '', 0, 0),
(25, 'hrd', 'Nombre del archivo de inventario hardware enviado por la red', '', '', '', 0, 0),
(26, 'sft', 'Nombre del archivo de inventario software enviado por la red', '', '', '', 0, 0),
(27, 'tpc', 'Tipo de cliente', '', '', '', 0, 0),
(28, 'scp', 'Código script', '', '', '', 4, 1),
-(30, 'ptc', 'Protocolo de clonación', ';', '', ';Unicast;Multicast;Torrent', 1, 1);
+(30, 'ptc', 'Protocolo de clonación', ';', '', ';Unicast;Multicast;Torrent', 1, 1),
+(31, 'idf', 'Imagen Incremental', 'idimagen', 'imagenes', 'descripcion', 1, 1),
+(32, 'ncf', 'Nombre canónico de la Imagen Incremental', '', '', '', 0, 1),
+(33, 'bpi', 'Borrar imagen o partición previamente', '', '', '', 5, 1),
+(34, 'cpc', 'Copiar también en cache', '', '', '', 5, 1),
+(35, 'bpc', 'Borrado previo de la imagen en cache', '', '', '', 5, 1),
+(36, 'rti', 'Ruta de origen', '', '', '', 0, 1),
+(37, 'met', 'Método clonación', ';', '', 'Desde caché; Desde repositorio', 3, 1),
+(38, 'nba', 'No borrar archivos en destino', '', '', '', 0, 1);
-- --------------------------------------------------------
--
-- Estructura de tabla para la tabla `perfileshard`
+
--
CREATE TABLE IF NOT EXISTS `perfileshard` (
@@ -736,8 +762,29 @@ CREATE TABLE IF NOT EXISTS `sistemasficheros` (
`descripcion` varchar(50) NOT NULL DEFAULT '',
`nemonico` varchar(16) DEFAULT NULL,
`codpar` int(8) NOT NULL,
- PRIMARY KEY (`idsistemafichero`)
+ PRIMARY KEY (`idsistemafichero`),
+ UNIQUE KEY (`descripcion`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
+INSERT INTO `sistemasficheros` (`idsistemafichero`, `descripcion`, `nemonico`, `codpar`) VALUES
+ (1, 'EMPTY', 'EMPTY', 0),
+ (2, 'CACHE', 'CACHE', 0),
+ (3, 'BTRFS', 'BTRFS', 0),
+ (4, 'EXT2', 'EXT2', 0),
+ (5, 'EXT3', 'EXT3', 0),
+ (6, 'EXT4', 'EXT4', 0),
+ (7, 'FAT12', 'FAT12', 0),
+ (8, 'FAT16', 'FAT16', 0),
+ (9, 'FAT32', 'FAT32', 0),
+ (10, 'HFS', 'HFS', 0),
+ (11, 'HFSPLUS', 'HFSPLUS', 0),
+ (12, 'JFS', 'JFS', 0),
+ (13, 'NTFS', 'NTFS', 0),
+ (14, 'REISERFS', 'REISERFS', 0),
+ (15, 'REISER4', 'REISER4', 0),
+ (16, 'UFS', 'UFS', 0),
+ (17, 'XFS', 'XFS', 0),
+ (18, 'EXFAT', 'EXFAT', 0);
+
-- --------------------------------------------------------
@@ -915,7 +962,7 @@ INSERT INTO `tipospar` (`codpar`, `tipopar`, `clonable`) VALUES
(CONV('CA',16,10), 'CACHE', 0),
(CONV('DA',16,10), 'DATA', 1),
(CONV('EE',16,10), 'GPT', 0),
-(CONV('EF',16,10), 'EFI', 0),
+(CONV('EF',16,10), 'EFI', 1),
(CONV('FB',16,10), 'VMFS', 1),
(CONV('FD',16,10), 'LINUX-RAID', 1),
(CONV('0700',16,10), 'WINDOWS', 1),
@@ -931,6 +978,7 @@ INSERT INTO `tipospar` (`codpar`, `tipopar`, `clonable`) VALUES
(CONV('A501',16,10), 'FREEBSD-BOOT', 1),
(CONV('A502',16,10), 'FREEBSD-SWAP', 0),
(CONV('A503',16,10), 'FREEBSD', 1),
+(CONV('AB00',16,10), 'HFS-BOOT', 1),
(CONV('AF00',16,10), 'HFS', 1),
(CONV('AF01',16,10), 'HFS-RAID', 1),
(CONV('BE00',16,10), 'SOLARIS-BOOT', 1),
@@ -941,7 +989,7 @@ INSERT INTO `tipospar` (`codpar`, `tipopar`, `clonable`) VALUES
(CONV('BF04',16,10), 'SOLARIS', 1),
(CONV('BF05',16,10), 'SOLARIS', 1),
(CONV('CA00',16,10), 'CACHE', 0),
-(CONV('EF00',16,10), 'EFI', 0),
+(CONV('EF00',16,10), 'EFI', 1),
(CONV('EF01',16,10), 'MBR', 0),
(CONV('EF02',16,10), 'BIOS-BOOT', 0),
(CONV('FD00',16,10), 'LINUX-RAID', 1),
@@ -1009,58 +1057,3 @@ INSERT INTO `usuarios` (`idusuario`, `usuario`, `pasguor`, `nombre`, `email`, `i
(1, 'DBUSER', 'DBPASSWORD', 'Usuario de la base de datos MySql', '', 1, 1);
-CREATE TABLE IF NOT EXISTS `itemboot` (
- `label` varchar(50) collate utf8_spanish_ci NOT NULL,
- `kernel` varchar(100) collate utf8_spanish_ci NOT NULL,
- `append` varchar(500) collate utf8_spanish_ci NOT NULL,
- PRIMARY KEY (`label`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
-
-
-
-INSERT INTO `itemboot` (`label`, `kernel`, `append`) VALUES
-('1', 'KERNEL syslinux/chain.c32', 'APPEND hd0'),
-('1_localboot', 'LOCALBOOT 0', ' '),
-('11', 'KERNEL syslinux/chain.c32', 'APPEND hd0 1'),
-('12', 'KERNEL syslinux/chain.c32', 'APPEND hd0 2'),
-('ogClientUser', 'KERNEL ogclient/ogvmlinuz', 'APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false'),
-('ogClientAdmin', 'KERNEL ogclient/ogvmlinuz', 'APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true'),
-('ogInitrdUser', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=user '),
-('ogInitrdAdmin', 'KERNEL linux', 'APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on boot=admin ');
-
-
-
-
-CREATE TABLE IF NOT EXISTS `menuboot` (
- `label` varchar(50) collate utf8_spanish_ci NOT NULL,
- `prompt` int(11) NOT NULL,
- `timeout` int(30) default NULL,
- `description` varchar(50) collate utf8_spanish_ci NOT NULL,
- PRIMARY KEY (`label`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
-
-
-
-INSERT INTO `menuboot` (`label`, `prompt`, `timeout`, `description`) VALUES
-('1', 0, 10, 'mbr 1hd'),
-('11', 0, 10, '1hd 1particion'),
-('12', 0, 10, '1hd 2particion'),
-('pxe', 0, 10, 'og client - user'),
-('pxeADMIN', 0, 10, 'OgClient - admin');
-
-
-CREATE TABLE IF NOT EXISTS `menuboot_itemboot` (
- `labelmenu` varchar(100) NOT NULL,
- `labelitem` varchar(100) NOT NULL,
- `default` tinyint(10) NOT NULL
-) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-
-
-INSERT INTO `menuboot_itemboot` (`labelmenu`, `labelitem`, `default`) VALUES
-('0', '0', 0),
-('11', '11', 0),
-('12', '12', 0),
-('1', '1', 0),
-('pxe', 'ogClientUser', 0),
-('pxeADMIN', 'ogClientAdmin', 0);
-
diff --git a/admin/Interface/CambiarAcceso b/admin/Interface/CambiarAcceso
index 64516e4f..50df9b49 100755
--- a/admin/Interface/CambiarAcceso
+++ b/admin/Interface/CambiarAcceso
@@ -9,7 +9,7 @@
# Error si llamada no se realliza desde OpenGnSys Client.
PROG=$(basename $0)
CALLER=$(ogGetCaller)
-if [ "$CALLER" != "CrearImagen" -a "$CALLER" != "ConsolaRemota" ]; then
+if ! $(ogCheckStringInGroup "$CALLER" "CrearImagen ConsolaRemota CrearImagenBasica CrearSoftIncremental"); then
ogRaiseError $OG_ERR_NOTEXEC "$CALLER -> $PROG"
exit $?
fi
@@ -47,6 +47,6 @@ case "$PROTO" in
smb) PASS=$(grep "^[ ]*\(export \)\?OPTIONS=" /scripts/ogfunctions 2>&1 | \
sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
PASS=${PASS:-"og"}
- mount.cifs //$REPOIP/ogimages $OGIMG -o rw,serverino,acl,username=opengnsys,password=$PASS
+ mount.cifs //$REPOIP/ogimages $OGIMG -o $MODE,serverino,acl,username=opengnsys,password=$PASS
esac
diff --git a/admin/Interface/Configurar b/admin/Interface/Configurar
index d98776f4..a10143f3 100755
--- a/admin/Interface/Configurar
+++ b/admin/Interface/Configurar
@@ -1,81 +1,155 @@
#!/bin/bash
-#_______________________________________________________________________________________________________________________________
-#
-# Formato de entrada:
-# $1 disco
-# $2 par=Número de particion#cod=Código de partición#sfi=Sistema de ficheros#tam=Tamaño de la partición#ope=Operación$
-#_______________________________________________________________________________________________________________________________
-
-particiones=$(echo $2 | awk '{n=split($0,sep,"$");print n}')
-
-declare -a TBP
-declare -a TBF
-for ((par=1;par<$particiones;par++));
- do
- TBP[$par]=$(echo $2 | awk -v p=$par '{
- n=split($0,sep,"$");
- split(sep[p],dua,"#");
- split(dua[1],prm,"=");
- par=prm[2];
- split(dua[2],prm,"=");
- cpt=prm[2];
- split(dua[3],prm,"=");
- sfi=prm[2];
- split(dua[4],prm,"=");
- tam=prm[2];
- split(dua[5],prm,"=");
- ope=prm[2];
- printf("%s %x %s %s %s",par,cpt,sfi,tam,ope);
- }')
- done
+
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
-# Prepara cadena de particiones _______________________________________
-cP=""
-for ((par=1;par<$particiones;par++));
- do
- cfg=${TBP[$par]}
-
- cP=$cP$(echo $cfg | awk '{
- n=split($0,prm," ");
- par=prm[1];
- cpt=prm[2];
- sfi=prm[3];
- tam=prm[4];
- ope=prm[5];
- if(ope==1)
- printf("%s:%s ",sfi,tam);
- else{
- if(ope==2)
- printf("H%s:%s ",sfi,tam);
- else
- printf("%s:%s ",sfi,tam);
- }
- }')
-
- TBF[$par]=$(echo $cfg | awk '{
- n=split($0,prm," ");
- sfi=prm[3];
- ope=prm[5];
- if(ope==1)
- printf("%s",sfi);
- else
- printf("EMPTY");
- }')
-
- done
- ogCreatePartitions $1 $cP
-
-# Formatear _______________________________________
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimieincludento para httpdlog
+echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
-for ((par=1;par<$particiones;par++));
- do
- sfi=${TBF[$par]}
- if [ $sfi == "EMPTY" ]; then
- TBF[$par]=" "
- else
- ogFormatFs $1 $par $sfi
+# Registro de inicio de ejecución
+ogEcho log session "$MSG_INTERFACE_START $0 $*"
+
+# Solo ejecutable por OpenGnSys Client.
+PATH=$PATH:$(dirname $0)
+PROG=$(basename $0)
+
+#____________________________________________________________________
+#
+# El parámetro $2 es el que aporta toda la información y el $1 se queda obsoleto
+# Formato de entrada:
+# dis=Número de disco
+# *=caracter de separación
+# che=Vale 0 o 1
+# *=caracter de separación
+# $tch=tamaño cache
+# != caracter de separación
+#
+# Y un numero indeterminado de cadenas del tipo siguuenteseparadas por el caracter '$':
+# par=Número de particion*cod=Código de partición*sfi=Sistema de ficheros*tam=Tamaño de la partición*ope=Operación
+# @= caracter de separación
+#____________________________________________________________________
+
+# Captura de parámetros (se ignora el 1er parámetro y se eliminan espacios y tabuladores).
+#param='dis=1*che=0*tch=70000000!par=1*cpt=NTFS*sfi=NTFS*tam=11000000*ope=0%'
+shift
+param="$(echo $* | sed 's/[ ]//g')"
+
+# Activa navegador para ver progreso
+coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
+
+# Leer los dos bloques de parámetros, separados por '!'.
+declare -a TBPRM
+
+IFS='!' read -a TBPRM <<<"$param"
+pparam="${TBPRM[0]}" # Parámetros generales del disco.
+sparam="${TBPRM[1]}" # Parámetros de particionado y formateo.
+
+
+# Toma valores de disco y caché, separados por "*".
+# Los valores están en las variables $dis: disco, $che: existe cache (1, 0), $tch: Tamaño de la cache.
+unset TBPRM
+IFS='*' read -a TBPRM <<<"$pparam"
+[[ ${TBPRM} =~ = ]] && eval ${TBPRM[@]} # Comprobar asignación antes de exportar valores.
+
+# Error si no se define el parámetro de disco (dis).
+[ -z "$dis" ] && exit $OG_ERR_FORMAT
+
+# Toma valores de distribución de particiones, separados por "%".
+declare -a CFG # Valores de configuración.
+declare -a TBP # Tabla de particionado.
+declare -a TBF # Tabla de formateo.
+
+unset TBPRM
+IFS='%' read -a TBPRM <<<"$sparam"
+
+maxp=0
+for ((i=0; i<${#TBPRM[@]}; i++)); do
+ # Leer datos de la partición, separados por "*".
+ unset par
+ IFS='*' read -a CFG <<<"${TBPRM[i]}" 2>/dev/null
+ [[ ${CFG} =~ = ]] && eval ${CFG[@]} # Comprobar asignación antes de exportar valores.
+ # Saltar si no existe definición de partición.
+ if [ -n "$par" -a $par != 0 ]; then
+ # Componer datos de particionado.
+ TBP[par]="$cpt:$tam"
+ # Si se activa operación de formatear, componer datos de formateo.
+ if [ "$ope" == 1 ]; then
+ TBF[par]="$sfi"
+ else
+ TBF[par]="EMPTY"
+ fi
+ # Obtener la partición mayor por si hay que rellenar con valores EMPTY.
+ [ $par -gt $maxp ] && maxp=$par
fi
-
- done
+done
+
+# Control de datos.
+for ((par=1; par<=maxp; par++)); do
+ # Ignorar partición 4 si existe caché.
+ if [ $che != 1 -o $par -ne 4 ]; then
+ # Rellenar con "EMPTY:0" la configuración de particiones no definidas.
+ [ -z "${TBP[par]}" ] && TBP[par]="EMPTY:0"
+ fi
+ # Ignorar formateo en particiones que no soportan sistemas de archivos.
+ case "${TBP[par]%:*}" in
+ ""|EMPTY|EXTENDED|LINUX-SWAP|LINUX-LVM)
+ TBF[par]="EMPTY" ;;
+ esac
+done
+
+#____________________________________________________
+#
+# Proceso
+#____________________________________________________
+
+
+# Desmonta todas las particiones y la caché
+ogUnmountCache
+ogUnmountAll $dis &>/dev/null
+
+# Elimina la tabla de particiones
+ogDeletePartitionTable $dis
+ogUpdatePartitionTable $dis | tee -a $OGLOGSESSION $OGLOGFILE
+
+# Crea tabla de particiones MSDOS (NOTA: adaptar para tablas GPT).
+ogCreatePartitionTable $dis MSDOS
+
+# Cuestión caché
+if [ "$che" == "1" ]; then
+ initCache $tch >/dev/null | tee -a $OGLOGSESSION $OGLOGFILE
+fi
+
+# Definir particionado.
+ogCreatePartitions $dis ${TBP[@]} | tee -a $OGLOGSESSION $OGLOGFILE
+ogUpdatePartitionTable $dis | tee -a $OGLOGSESSION $OGLOGFILE
+
+RETVAL=$?
+if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $RETVAL
+fi
+
+# Formatear particiones, excepto las marcadas como "EMPTY".
+for ((par=1; par<=$maxp; par++)); do
+ sfi="${TBF[par]}"
+ if [ "$sfi" != "EMPTY" ]; then
+ ogFormatFs $dis $par $sfi | tee -a $OGLOGSESSION $OGLOGFILE
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_PARTITION
+ fi
+ fi
+done
+
+#___________________________________________________________________
+#
+# Retorno
+#___________________________________________________________________
+
+kill $COPROC_PID
+exit 0
diff --git a/admin/Interface/CrearImagen b/admin/Interface/CrearImagen
index 89391ed3..ca642845 100755
--- a/admin/Interface/CrearImagen
+++ b/admin/Interface/CrearImagen
@@ -40,8 +40,7 @@ TIME1=$SECONDS
echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
# Registro de inicio de ejecución
-#echo "[START Interface ] Run this command: $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
-echo "$MSG_INTERFACE_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
+ogEcho log session "$MSG_INTERFACE_START $0 $*"
# Solo ejecutable por OpenGnSys Client.
PATH=$PATH:$(dirname $0)
@@ -94,8 +93,7 @@ RETVAL=$?
#fi
# Registro de fin de ejecución
-#echo "[END Interface] Command finished with this code: $RETVAL" | tee -a $OGLOGSESSION $OGLOGFILE
-echo "$MSG_INTERFACE_END $RETVAL" | tee -a $OGLOGSESSION $OGLOGFILE
+ogEcho log session "$MSG_INTERFACE_END $RETVAL"
exit $RETVAL
diff --git a/admin/Interface/CrearImagenBasica b/admin/Interface/CrearImagenBasica
new file mode 100755
index 00000000..8aaf5aa8
--- /dev/null
+++ b/admin/Interface/CrearImagenBasica
@@ -0,0 +1,98 @@
+#!/bin/bash
+#___________________________________________________________________
+#
+# CREAR IMAGEN BÁSICA
+#___________________________________________________________________
+#
+# Parámetros recibidos desde el cliente:
+#
+# $1 Número de disco
+# $2 Número de particion
+# $3 Nombre canónico de la imagen básica (sin extensión)
+# $4 Dirección del repositorio
+# $5 Es una cadena "nnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnn" donde "n" vale 0 ó 1.
+# 1XX: Gestionar fichero completo en lugar de diferencas
+# X1X: Eliminar archivos de la imagen que no estén en la partición
+# XX1: Comprimir archivos para enviarlos por la red
+# El valor X indica que no importa el valor que tenga el dato
+# $6 Es una cadena "nnnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
+# 1XXX: Borrar la imagen del repositorio antes de crearla
+# X1XX: Copiar Imagen básica también a la cache
+# XX1X: Borrar previamente la imagen de la cache antes de copiarla
+# XXX1: No borrar archivos en destino
+# El valor X indica que no importa el valor que tenga el dato
+# $7 Método de syncronización 1=Sincronización1 2=Sincronizacion2
+# $8 Ruta de origen de la Imagen (Carpeta)
+
+#___________________________________________________________________
+#
+# Control parámetros
+#___________________________________________________________________
+
+
+ PROG="$(basename $0)"
+ if [ $# -lt 7 ]; then
+ usage=" ndisco nparticion nombre_imagen_basica ip_repositorio"
+ usage="$usage copiar_a_caché Borrar_cache_previamente Ruta_origen"
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
+ exit $?
+ fi
+
+ #Load engine configurator from engine.cfg file.
+ #Carga el configurador del engine desde el fichero engine.cfg
+ [ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+ # Clear temporary file used as log track by httpdlog
+ # Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+ echo -n "" > $OGLOGSESSION; echo -n "" > $OGLOGCOMMAND
+
+ # Registro de inicio de ejecución
+ ogEcho log session "$MSG_INTERFACE_START $0 $*"
+
+ # Si el destino es REPO y el cliente no está en modo "admin"; activar repositorio para escritura,
+ PATH=$PATH:$(dirname $0)
+ CLIENTIP=$(ogGetIpAddress)
+ [ "$4" == "$CLIENTIP" ] && DEST=CACHE || DEST=REPO
+ if [ "$DEST" == "REPO" -a "$boot" != "admin" ]; then
+ CambiarAcceso admin &>> $OGLOGFILE
+ RETVAL=$?
+ [ $RETVAL -gt 0 ] && exit $RETVAL
+ fi
+
+ if [ $7 -eq 1 ]; then
+ #sincronizacion1
+ ogCrearImagenBasica "$@"
+ RETVAL=$?
+ fi
+
+ if [ $7 -eq 2 ]; then
+ # Sincronizacion2
+ flag=$5
+ WHOLE=${flag:0:1}
+ DELFILE=${flag:1:1}
+ COMPRESS=${flag:2:1}
+
+ # Nota los valores se pasan como variables de entorno,
+ # la idea es que mas adelante vayan en el fichero PXE.
+ [ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
+ [ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
+ [ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
+
+ # [ "$4" == "0.0.0.0" ] && DEST="CACHE" || DEST="REPO"
+
+ createBaseImage $1 $2 $DEST "$3"
+ RETVAL=$?
+
+ fi
+
+ # Si estamos en modo user montamos el repositorio en modo lectura.
+ [ "$DEST" == "REPO" -a "$boot" != "admin" ] && CambiarAcceso user
+ # Registro de fin de ejecución
+ ogEcho log session "$MSG_INTERFACE_END $RETVAL"
+
+
+
+ exit $RETVAL
+
diff --git a/admin/Interface/CrearSoftIncremental b/admin/Interface/CrearSoftIncremental
new file mode 100755
index 00000000..fc29451e
--- /dev/null
+++ b/admin/Interface/CrearSoftIncremental
@@ -0,0 +1,98 @@
+#!/bin/bash
+#___________________________________________________________________
+#
+# CREAR IMAGEN INCREMENTAL
+#___________________________________________________________________
+#
+# Parámetros recibidos desde el cliente:
+#
+# $1 Número de disco
+# $2 Número de particion
+# $3 Nombre canónico de la imagen básica (sin extensión)
+# $4 Dirección del repositorio
+# $5 Nombre canónico de la imagen incremental (sin extensión)
+# $6 Es una cadena "nnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnn" donde "n" vale 0 ó 1.
+# 1XX: Gestionar fichero completo en lugar de diferencas
+# X1X: Eliminar archivos de la imagen que no estén en la partición
+# XX1: Comprimir archivos para enviarlos por la red
+# El valor X indica que no importa el valor que tenga el dato
+# $7 Es una cadena "nnnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
+# 1XXX: Borrar la imagen incremental del repositorio antes de crearla
+# X1XX: Copiar imagen incremental también a la cache
+# XX1X: Borrar previamente la imagen incremental de la cache antes de copiarla
+# XXX1: No borrar archivos en destino
+# El valor X indica que no importa el valor que tenga el dato
+# $8 Método de syncronización 1=Sincronización1 2=Sincronizacion2
+# $9 Ruta de origen de la Imagen (Carpeta)
+
+#___________________________________________________________________
+#
+# Control parámetros
+#___________________________________________________________________
+ PROG="$(basename $0)"
+ if [ $# -lt 8 ]; then
+ usage=" ndisco nparticion nombre_imagen_basica ip_repositorio nombre_imagen_incremental"
+ usage="$usage copiar_a_caché Borrar_cache_previamente Ruta_origen"
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
+ exit $?
+ fi
+
+ #Load engine configurator from engine.cfg file.
+ #Carga el configurador del engine desde el fichero engine.cfg
+ [ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+ # Clear temporary file used as log track by httpdlog
+ # Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+ echo -n "" > $OGLOGSESSION; echo -n "" > $OGLOGCOMMAND
+
+ # Registro de inicio de ejecución
+ ogEcho log session "$MSG_INTERFACE_START $0 $*"
+
+
+ # Si el destino es REPO y el cliente no está en modo "admin"; activar repositorio para escritura,
+ PATH=$PATH:$(dirname $0)
+ CLIENTIP=$(ogGetIpAddress)
+ [ "$4" == "$CLIENTIP" ] && DEST=CACHE || DEST=REPO
+ if [ "$DEST" == "REPO" -a "$boot" != "admin" ]; then
+ CambiarAcceso admin &>> $OGLOGFILE
+ RETVAL=$?
+ [ $RETVAL -gt 0 ] && exit $RETVAL
+ fi
+
+ if [ $8 -eq 1 ]; then
+ #sincronizacion1
+ ogCrearSoftIncremental "$@"
+ RETVAL=$?
+ fi
+
+
+ if [ $8 -eq 2 ]; then
+ #sincronizacion 2
+ flag=$6
+ WHOLE=${flag:0:1}
+ DELFILE=${flag:1:1}
+ COMPRESS=${flag:2:1}
+
+ # Nota los valores se pasan como variables de entorno,
+ # la idea es que mas adelante vayan en el fichero PXE.
+ [ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
+ [ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
+ [ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
+
+ # REPOSITORIO: Si la ip es la del propio equipo CACHE, si no REPO
+ #CLIENTIP=$(ogGetIpAddress)
+ #[ "$4" == "$CLIENTIP" ] && DEST=CACHE || DEST=REPO
+ createDiffImage $1 $2 $DEST "$3" "$5"
+ RETVAL=$?
+
+ fi
+
+ # Si estamos en modo user montamos el repositorio en modo lectura.
+ [ "$DEST" == "REPO" -a "$boot" != "admin" ] && CambiarAcceso user
+
+ # Registro de fin de ejecución
+ ogEcho log session "$MSG_INTERFACE_END $RETVAL"
+
+ exit $RETVAL
diff --git a/admin/Interface/EjecutarScript b/admin/Interface/EjecutarScript
index 1295885c..50b54a56 100755
--- a/admin/Interface/EjecutarScript
+++ b/admin/Interface/EjecutarScript
@@ -8,19 +8,20 @@ TIME1=$SECONDS
# Clear temporary file used as log track by httpdlog
# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
-echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
+echo -n "" > $OGLOGSESSION; echo -n "" > $OGLOGCOMMAND
# Registro de inicio de ejecución
-#echo "[START Interface ] Run this command: $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
-echo "$MSG_INTERFACE_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
+ogEcho log session "$MSG_INTERFACE_START $0 $*"
-echo "Instrucciones a ejecutar: *****************************" >> $OGLOGFILE
+echo -e "\n Instrucciones a ejecutar: *****************************" >> $OGLOGFILE
cat $1 >> $OGLOGFILE
-echo "Salida de las instrucciones: *****************************" >> $OGLOGFILE
+echo -e "\n Salida de las instrucciones: *****************************" >> $OGLOGFILE
chmod +x $1
-$1 &>> $OGLOGCOMMAND
+# Si mandamos la salida a OGLOGCOMMAND reescribimos lo que manda el comando.
+#$1 &>> $OGLOGCOMMAND
+$1
RETVAL=$?
@@ -28,16 +29,15 @@ RETVAL=$?
TIME=$[SECONDS-TIME1]
if [ $RETVAL == 0 ]
then
- echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s"
else
- echo "ERROR no operacion no realizada" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "ERROR: operacion no realizada"
fi
# Registro de fin de ejecución
-#echo "[END Interface] Command finished with this code: $RETVAL" | tee -a $OGLOGSESSION $OGLOGFILE
-echo "$MSG_INTERFACE_END $RETVAL" | tee -a $OGLOGSESSION $OGLOGFILE
+ogEcho log session "$MSG_INTERFACE_END $RETVAL"
+exit $RETVAL
-exit $RETVAL \ No newline at end of file
diff --git a/admin/Interface/IniciarSesion b/admin/Interface/IniciarSesion
index a72c80b9..750d96d5 100755
--- a/admin/Interface/IniciarSesion
+++ b/admin/Interface/IniciarSesion
@@ -1,2 +1,13 @@
#!/bin/bash
-bootOs 1 $1
+
+# UHU - Comprobamos el disco, si solo hay un parametro, disco es 1, por compatibilidad con clientes antiguos
+if [ $# == 1 ]
+then
+ disk=1
+ part=$1
+else
+ disk=$1
+ part=$2
+fi
+
+bootOs $disk $part
diff --git a/admin/Interface/InventarioHardware b/admin/Interface/InventarioHardware
index 38d63213..17614a5d 100755
--- a/admin/Interface/InventarioHardware
+++ b/admin/Interface/InventarioHardware
@@ -1,3 +1,6 @@
#!/bin/bash
+# Script de interfaz para guardar en un fichero el inventario de hardware de un cliente.
+
file=$(listHardwareInfo)
-cp $file $1
+tail -n+2 $file >$1
+
diff --git a/admin/Interface/InventarioSoftware b/admin/Interface/InventarioSoftware
index fc0ed8d3..fa96565d 100755
--- a/admin/Interface/InventarioSoftware
+++ b/admin/Interface/InventarioSoftware
@@ -1,3 +1,19 @@
#!/bin/bash
+
+TIME1=$SECONDS
+
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+echo -n " " | tee $OGLOGSESSION $OGLOGCOMMAND ${OGLOGCOMMAND}.tmp
+
+# Registro de inicio de ejecución
+ogEcho log session "$MSG_INTERFACE_START $0 $*"
+
file=$(listSoftwareInfo $1 $2)
cp $file $3
+
+TIME=$[SECONDS-TIME1]
+ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL : $[TIME/60]m $[TIME%60]s"
+
diff --git a/admin/Interface/RestaurarImagen b/admin/Interface/RestaurarImagen
index 6fcf8d66..7e714ba3 100755
--- a/admin/Interface/RestaurarImagen
+++ b/admin/Interface/RestaurarImagen
@@ -10,189 +10,10 @@
# $6 Opciones del protocolo
#_______________________________________________________________________________________________________________________________
-#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 Antonio J. Doblas Viso. Universidad de Málaga
-#@date 2011-05-11
-#@version 1.0.1 - Separación de los ficheros-log para ser gestionado por el httpd-log
-#@author Antonio J. Doblas Viso. Universidad de Málaga
-#@date 2011-05-11
-#@version 1.0.2 - Logica basada en fichero de configuracion engine.cfg
-#@author Antonio J. Doblas Viso. Universidad de Málaga
-#@date 2012-01-11
-
-PROTO=$5
-PROTOOPT=$6
-
-TIME1=$SECONDS
-
-#Load engine configurator from engine.cfg file.
-#Carga el configurador del engine desde el fichero engine.cfg
-[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
-
-# Clear temporary file used as log track by httpdlog
-# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
-echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
-
-# Registro de inicio de ejecución
-#echo "[START Interface ] Run this command: $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
-echo "$MSG_INTERFACE_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
-
-
-
-# Si el origen(pariticion) esta bloqueada salir.
-echo "[1] TODO: $MSG_HEL_ogIsLocked: ogIsLocked $1 $2" | tee -a $OGLOGSESSION $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"
-
-#Informacion previa de la imagen
-IMGOS=$(ogGetImageInfo `ogGetPath $REPO $3.img`) || exit $(echo "ERROR: $OG_ERR_NOTFOUND $MSG_ERR_NOTFOUND, IMAGEN $REPO $3" | tee -a $OGLOGSESSION $OGLOGFILE; ogRaiseError $OG_ERR_NOTFOUND "$MSG_ERR_NOTFOUND, $REPO $3"; echo $?)
-#IMGOS=$(ogGetImageInfo `ogGetPath $REPO $3.img`) || exit $(ogRaiseError $OG_ERR_NOTFOUND "$MSG_ERR_NOTFOUND, $REPO $3"; echo $?)
-IMGSIZE=$(ls -s `ogGetPath $REPO $3.img`| cut -f1 -d" ")
-
-echo "[1] IMG-FILE=$3 SIZE=$IMGSIZE (KB) METADATA=$IMGOS" | tee -a $OGLOGSESSION $OGLOGFILE
-
-if [ "$REPO" == "CACHE" ]
-then
- echo "[2] $MSG_HELP_ogRestoreImage : ogRestoreImage CACHE $3 $1 $2" | tee -a $OGLOGSESSION $OGLOGFILE
- ogRestoreImage CACHE "$3" "$1" "$2" &>> $OGLOGCOMMAND
- RETVAL=$?
- RESUMERESTOREIMAGE=$(cat $OGLOGCOMMAND | grep "Total Time:")
-fi
-
-
-
-if [ "$REPO" == "REPO" ]
-then
- case "$5" in
- MULTICAST-DIRECT)
- NEXTOPERATION=MULTICAST
- ;;
- UNICAST-DIRECT)
- NEXTOPERATION=UNICAST
- ;;
- *)
- echo "[2] updateCache REPO \"/$3.img\" $5 $6" | tee -a $OGLOGSESSION $OGLOGFILE
- TIME2=$SECONDS
- updateCache REPO "/$3.img" "$5" "$6" &>> $OGLOGCOMMAND
- RETVAL=$?
- TIME2=$[SECONDS-TIME2]
- echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL updateCache $[TIME2/60]m $[TIME2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
- case $RETVAL in
- 0)
- echo "[50] updateCache (OK)" | tee -a $OGLOGSESSION $OGLOGFILE
- NEXTOPERATION=CACHE
- ;;
- 15|16)
- echo "[50] $MSG_ERR_NOTCACHE ; $MSG_ERR_CACHESIZE " | tee -a $OGLOGSESSION $OGLOGFILE
- echo "[50] $MSG_SCRIPTS_CHECK_ENGINE " | tee -a $OGLOGSESSION $OGLOGFILE
- case "$RESTOREPROTOCOLNOCACHE" in
- MULTICAST|multicast)
- [ "$5" == "MULTICAST" ] && NEXTOPERATION=MULTICAST
- [ "$5" == "TORRENT" ] && NEXTOPERATION=UNICAST
- [ "$5" == "UNICAST" ] && NEXTOPERATION=UNICAST
- ;;
- UNICAST|unicast)
- NEXTOPERATION=UNICAST
- ;;
- esac
- ;;
- esac
- ;;
- esac
+# Si existe, ejecuta script personalizado "deployImageCustom"; si no, llama al genérico "deployImage".
+if which deployImageCustom &>/dev/null; then
+ deployImageCustom "$4" "$3" "$1" "$2" "$5" "$6" "$7" "$8" || exit $?
+else
+ deployImage "$4" "$3" "$1" "$2" "$5" "$6" "$7" "$8" || exit $?
fi
-
-TIME3=$SECONDS
-
-
-case $NEXTOPERATION in
- CACHE)
- echo "[55] CACHE $MSG_HELP_ogRestoreImage : ogRestoreImage CACHE $3 $1 $2 UNICAST" | tee -a $OGLOGSESSION $OGLOGFILE
- ogRestoreImage CACHE "$3" "$1" "$2" &> $OGLOGCOMMAND
- RETVAL=$?
- RESUMERESTOREIMAGE=$(cat $OGLOGCOMMAND | grep "Total Time:")
- ;;
- UNICAST)
- echo "[55] $5 $MSG_HELP_ogRestoreImage : ogRestoreImage REPO $3 $1 $2 UNICAST" | tee -a $OGLOGSESSION $OGLOGFILE
- ogRestoreImage REPO "$3" "$1" "$2" &> $OGLOGCOMMAND
- RETVAL=$?
- RESUMERESTOREIMAGE=$(cat $OGLOGCOMMAND | grep "Total Time:")
- ;;
- MULTICAST)
- echo "[55] $PROTO $PROTOOPT $MSG_HELP_ogRestoreImage " | tee -a $OGLOGSESSION $OGLOGFILE
- OPTPROTOCOLO=$6
- REPOIP=$(ogGetRepoIp)
- echo " $MSG_SCRIPTS_MULTICAST_PRECHECK_PORT " | tee -a $OGLOGSESSION
- PORT=$(echo $OPTPROTOCOLO | cut -f1 -d":")
- let PORTAUX=$PORT+1
- #TODO: ticket 379
- NUMBER=$[ ( $RANDOM % 30 ) + 1 ]
- sleep $NUMBER
- #FIN TODO
- tools=$(ogGetImageProgram REPO $3)
- compressor=$(ogGetImageCompressor REPO $3)
- echo " $MSG_SCRIPTS_MULTICAST_CHECK_PORT $REPOIP:$PORTAUX $REPOIP:$PORT" | tee -a $OGLOGSESSION
- if (nmap -n -sU -p $PORTAUX $REPOIP | grep open)
- then
- ogMcastReceiverPartition $1 $2 $PORT $tools $compressor &> $OGLOGCOMMAND
- else
- # TODO ticket 379 Realizar la petición basada en identificador de operacion
- echo " $MSG_SCRIPTS_MULTICAST_REQUEST_PORT : hose $REPOIP 2009 --out sh -c echo -ne START_MULTICAST /$3.img $OPTPROTOCOLO" | tee -a $OGLOGSESSION $OGLOGFILE
- hose $REPOIP 2009 --out sh -c "echo -ne START_MULTICAST /$3.img $OPTPROTOCOLO"
- #echo "espero y llamo a: ogMcastReceiverFile $PORT CACHE $2"
- sleep 20
- if (nmap -n -sU -p $PORTAUX $REPOIP | grep open)
- then
- ogMcastReceiverPartition $1 $2 $PORT $tools $compressor &> $OGLOGCOMMAND
- RETVAL=$?
- fi
- fi
- RESUMERESTOREIMAGE=$(cat $OGLOGCOMMAND | grep "Total Time:")
- ;;
- REPEAT)
- $0 $*
- ;;
-esac
-
-echo " [ ] $RESUMERESTOREIMAGE " | tee -a $OGLOGSESSION $OGLOGFILE
-TIME3=$[SECONDS-TIME3]
-echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL : $[TIME3/60]m $[TIME3%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
-
-
-#if [ $RETVAL == 0 ]
-#then
- echo "[90] $MSG_SCRIPTS_OS_CONFIGURE " | tee -a $OGLOGSESSION $OGLOGFILE
- configureOs "$1" "$2"
-#fi
-
-TIME=$[SECONDS-TIME1]
-echo "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
-
-# Registro de fin de ejecución
-#echo "[END Interface] Command finished with this code: $RETVAL" | tee -a $OGLOGSESSION $OGLOGFILE
-echo "$MSG_INTERFACE_END $RETVAL" | tee -a $OGLOGSESSION $OGLOGFILE
-
-exit $RETVAL
-
diff --git a/admin/Interface/RestaurarImagenBasica b/admin/Interface/RestaurarImagenBasica
new file mode 100755
index 00000000..c87b3183
--- /dev/null
+++ b/admin/Interface/RestaurarImagenBasica
@@ -0,0 +1,89 @@
+#!/bin/bash
+#___________________________________________________________________
+#
+# RESTAURAR IMAGEN BÁSICA
+#___________________________________________________________________
+#
+# Parámetros recibidos desde el cliente:
+#
+# $1 Número de disco
+# $2 Número de particion
+# $3 Nombre canónico de la imagen básica (sin extensión)
+# $4 Dirección del repositorio
+# $5 Tipo de transmisión 0=Unicast 1=Multicast
+# $6 Es una cadena "nnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnn" donde "n" vale 0 ó 1.
+# 1XX: Gestionar fichero completo en lugar de diferencas
+# X1X: Eliminar archivos de la partición que no estén en la imagen
+# XX1: Comprimir archivos para enviarlos por la red
+# El valor X indica que no importa el valor que tenga el dato
+# $7 Es una cadena "nnnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
+# 1XXX: Borrar la particion de destino antes de restaurar la imagen basica
+# X1XX: Copiar Imagen básica también a la cache
+# XX1X: Borrar previamente la imagen basica de la cache antes de copiarla
+# XXX1: No borrar archivos en destino
+# El valor X indica que no importa el valor que tenga el dato
+# $8 Método de clonación 0=Desde caché 1=Desde repositorio
+# $9 Metodo de sincronizacion 1=Sincronización1 2=Sincronizacion2
+# $10 Ruta de origen de la Imagen (Carpeta)
+
+#___________________________________________________________________
+#
+# Control parámetros
+#___________________________________________________________________
+
+ PROG="$(basename $0)"
+ if [ $# -lt 9 ]; then
+ usage=" ndisco nparticion nombre_imagen_basica ip_repositorio copiar_a_caché "
+ usage="$usage Borrar_cache_previamente metodo_clonación Ruta_origen"
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
+ exit $?
+ fi
+
+ #Load engine configurator from engine.cfg file.
+ #Carga el configurador del engine desde el fichero engine.cfg
+ [ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+ # Clear temporary file used as log track by httpdlog
+ # Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+ echo -n "" > $OGLOGSESSION; echo " " > $OGLOGCOMMAND
+
+ # Registro de inicio de ejecución
+ ogEcho log session "$MSG_INTERFACE_START $0 $*"
+
+ if [ $9 -eq 1 ]; then
+ #sincronizacion1
+ ogRestaurarImagenBasica "$@"
+ RETVAL=$?
+ fi
+
+ if [ $9 -eq 2 ]; then
+ #sincronizacion2
+ # Opciones de clonacion
+ flag=$6
+ WHOLE=${flag:0:1}
+ DELFILE=${flag:1:1}
+ COMPRESS=${flag:2:1}
+
+ # Nota los valores se pasan como variables de entorno,
+ # la idea es que mas adelante vayan en el fichero PXE.
+ [ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
+ [ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
+ [ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
+
+ # Origen de la imagen.
+ [ $8 -eq 0 ] && DEST="CACHE" || DEST="REPO"
+
+ # Protocolo de clonacion y opciones
+ PROTO=${5%_*}
+ OPT=${5#*_}
+
+ restoreBaseImage $DEST "$3" $1 $2 $PROTO $OPT
+ RETVAL=$?
+ fi
+
+ # Registro de fin de ejecución
+ ogEcho log session "$MSG_INTERFACE_END $RETVAL"
+
+ exit $RETVAL
diff --git a/admin/Interface/RestaurarSoftIncremental b/admin/Interface/RestaurarSoftIncremental
new file mode 100755
index 00000000..ee895d9a
--- /dev/null
+++ b/admin/Interface/RestaurarSoftIncremental
@@ -0,0 +1,82 @@
+#!/bin/bash
+#___________________________________________________________________
+#
+# RESTAURAR IMAGEN INCREMENTAL
+#___________________________________________________________________
+#
+# Parámetros recibidos desde el cliente:
+#
+# $1 Número de disco
+# $2 Número de particion
+# $3 Nombre canónico de la imagen básica (sin extensión)
+# $4 Dirección del repositorio
+# $5 Nombre canónico del software incremental (sin extensión)
+# $6 Tipo de transmisión 0=Unicast 1=Multicast
+# $7 Es una cadena "nnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnn" donde "n" vale 0 ó 1.
+# 1XX: Gestionar fichero completo en lugar de diferencas
+# X1X: Eliminar archivos de la partición que no estén en la imagen
+# XX1: Comprimir archivos para enviarlos por la red
+# El valor X indica que no importa el valor que tenga el dato
+# $8 Es una cadena "nnnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
+# 1XXX: Borrar la particion de destino antes de restaurar la imagen basica
+# X1XX: Copiar Imagen básica también a la cache
+# XX1X: Borrar previamente la imagen basica de la cache antes de copiarla
+# XXX1: No borrar archivos en destino
+# El valor X indica que no importa el valor que tenga el dato
+# $9 Método de clonación 0=Desde caché 1=Desde repositorio
+# $10 Metodo de sincronizacion 1=Sincronización1 2=Sincronizacion2
+# $11 Ruta de origen de la Imagen (Carpeta)
+
+#___________________________________________________________________
+#
+# Control parámetros
+#___________________________________________________________________
+ #Load engine configurator from engine.cfg file.
+ #Carga el configurador del engine desde el fichero engine.cfg
+ [ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+ # Clear temporary file used as log track by httpdlog
+ # Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+ echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND
+
+ # Registro de inicio de ejecución
+ ogEcho log session "$MSG_INTERFACE_START $0 $*"
+
+
+ if [ ${10} -eq 1 ]; then
+ #sincronizacion1
+ ogRestaurarSoftIncremental "$@"
+ RETVAL=$?
+ fi
+
+ if [ ${10} -eq 2 ]; then
+ #sincronizacion2
+ # Opciones de clonacion
+ flag=$7
+ WHOLE=${flag:0:1}
+ DELFILE=${flag:1:1}
+ COMPRESS=${flag:2:1}
+
+ # Nota los valores se pasan como variables de entorno,
+ # la idea es que mas adelante vayan en el fichero PXE.
+ [ $WHOLE -eq 1 ] && export ogrsyncw=true || export ogrsyncw=false
+ [ $DELFILE -eq 1 ] && export ogrsyncdel=true || export ogrsyncdel=false
+ [ $COMPRESS -eq 1 ] && export ogrsyncz=true || export ogrsyncz=false
+
+ # Origen de la imagen.
+ [ $9 -eq 0 ] && DEST="CACHE" || DEST="REPO"
+
+ # Protocolo de clonacion y opciones
+ PROTO=${6%_*}
+ OPT=${6#*_}
+
+ restoreDiffImage $DEST "$3" "$5" $1 $2 $PROTO $OPT
+ RETVAL=$?
+ fi
+
+ # Registro de fin de ejecución
+ ogEcho log session "$MSG_INTERFACE_END $RETVAL"
+
+ exit $RETVAL
diff --git a/admin/Interface/getConfiguration b/admin/Interface/getConfiguration
index 53ec9fa6..2bfdaeeb 100755
--- a/admin/Interface/getConfiguration
+++ b/admin/Interface/getConfiguration
@@ -3,37 +3,62 @@
#_______________________________________________________________________________________________________________________________
#
# Formato de salida:
-# par=Número de particion\tcod=Código de partición\tsfi=Sistema de ficheros\tsoi=Sistema instalado\ttam=Tamaño de la partición\n
+# disk=Número de disco\tpar=Número de particion\tcod=Código de partición\tsfi=Sistema de ficheros\tsoi=Sistema instalado\ttam=Tamaño de la partición\n
#_______________________________________________________________________________________________________________________________
-particiones=$(ogGetPartitionsNumber 1) # Incluir todas las particiones
-cfg="0::::$(ogGetDiskSize 1);" # e información de disco (partición 0)
-for ((par=1;par<=$particiones;par++)); do
+cfg=""
+disks=$(ogDiskToDev | wc -w)
+for ((dsk=1; dsk<=$disks; dsk++)); do
+ particiones=$(ogGetPartitionsNumber $dsk)
+ particiones=${particiones:-0}
+ # Tipo de tabla de particiones: 1=MSDOS, 2=GPT
+ ptt=$(ogGetPartitionTableType $dsk)
+ case "$ptt" in
+ MSDOS) ptt=1 ;;
+ GPT) ptt=2 ;;
+ *) ptt=0 ;;
+ esac
+ # Información de disco (partición 0)
+ cfg="$cfg$dsk:0:$ptt:::$(ogGetDiskSize $dsk);"
+ for ((par=1;par<=$particiones;par++)); do
# Código del identificador de tipo de partición
- cod=$(ogGetPartitionId 1 $par 2>/dev/null)
- # Tipo de partición o sistema de fichero
- fsi=$(getFsType 1 $par 2>/dev/null)
+ cod=$(ogGetPartitionId $dsk $par 2>/dev/null)
+ # Tipo del sistema de ficheros
+ fsi=$(getFsType $dsk $par 2>/dev/null)
fsi=${fsi:-"EMPTY"}
# Tamaño de la particón
- tam=$(ogGetPartitionSize 1 $par 2>/dev/null)
+ tam=$(ogGetPartitionSize $dsk $par 2>/dev/null)
tam=${tam:-"0"}
- # Sistema de fichero instalado
+ # Sistema operativo instalado
case "$cod" in
- ""|82|8200|A502|BF02|EE|EF0[012])
- soi=" " ;;
- *) soi=$(getOsVersion 1 $par 2>/dev/null | cut -f2 -d:) ;;
+ ""|82|8200|A502|BF02|EE)
+ soi="" ;;
+ *) soi=$(getOsVersion $dsk $par 2>/dev/null | cut -f2 -d:)
+ # Sistema de archivos para datos (sistema operativo "DATA")
+ [ -z "$soi" -a "$fsi" != "EMPTY" -a "$fsi" != "CACHE" ] && soi="DATA"
+ ;;
esac
-
- cfg="$cfg$par:$cod:$fsi:$soi:$tam;"
+ cfg="$cfg$dsk:$par:$cod:$fsi:$soi:$tam;"
+ done
done
-echo $cfg | awk '{
- n=split($0,sep,";");
- for (i=1; i<n; i++){
- split (sep[i],dua,":");
- printf ("disk=1\tpar=%s\tcpt=%s\tfsi=%s\tsoi=%s\ttam=%s\n",
- dua[1],dua[2],dua[3],dua[4],dua[5]);
- }
- }'
+# Crear configuración por defecto para cliente sin disco.
+[ -z "$cfg" ] && cfg="1:0:0:::0;"
+
+# Guardar salida en fichero temporal.
+cfgfile=/tmp/getconfig
+echo $cfg > $cfgfile
+
+# Crear el menú por defecto a partir del fichero generado (no dar ninguna salida).
+generateMenuDefault &>/dev/null
+
+# Componer salida formateada.
+awk '{ n=split($0,sep,";");
+ for (i=1; i<n; i++){
+ split (sep[i],dua,":");
+ printf ("disk=%s\tpar=%s\tcpt=%s\tfsi=%s\tsoi=%s\ttam=%s\n",
+ dua[1],dua[2],dua[3],dua[4],dua[5],dua[6]);
+ }
+ }' $cfgfile
diff --git a/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg b/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg
index b41b33f1..b15e7407 100644
--- a/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg
+++ b/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg
@@ -2,5 +2,4 @@ ServidorAdm=SERVERIP
PUERTO=2008
PATHINTERFACE=/opt/opengnsys/interfaceAdm
UrlMenu=OPENGNSYSURL/varios/menubrowser.php
-UrlMsg=http://localhost/cgi-bin/httpd-log.sh
-
+UrlMsg=http://localhost/cgi-bin/httpd-log.sh \ No newline at end of file
diff --git a/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.c b/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.c
index d766eb34..8e4ed5d8 100644
--- a/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.c
+++ b/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.c
@@ -1,1770 +1,2304 @@
-// ********************************************************************************************************
-// Cliernte: ogAdmClient
-// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
-// Fecha Creación: Marzo-2010
-// Fecha Última modificación: Abril-2010
-// Nombre del fichero: ogAdmClient.c
-// Descripción :Este fichero implementa el cliente general del sistema
-// ********************************************************************************************************
-#include "ogAdmClient.h"
-#include "ogAdmLib.c"
-//________________________________________________________________________________________________________
-// Función: tomaConfiguracion
-//
-// Descripción:
-// Lee el fichero de configuración del servicio
-// Parámetros:
-// filecfg : Ruta completa al fichero de configuración
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//________________________________________________________________________________________________________
-BOOLEAN tomaConfiguracion(char* filecfg)
-{
- char modulo[] = "tomaConfiguracion()";
-
- if (filecfg == NULL || strlen(filecfg) == 0) {
- errorLog(modulo, 1, FALSE); // Fichero de configuración del cliente vacío
- return (FALSE);
- }
- FILE *fcfg;
- int lSize;
- char * buffer, *lineas[MAXPRM], *dualparametro[2];
- int i, numlin, resul;
-
- fcfg = fopen(filecfg, "rt");
- if (fcfg == NULL) {
- errorLog(modulo, 2, FALSE); // No existe fichero de configuración del cliente
- return (FALSE);
- }
-
- fseek(fcfg, 0, SEEK_END);
- lSize = ftell(fcfg); // Obtiene tamaño del fichero.
- rewind(fcfg);
- buffer = (char*) reservaMemoria(lSize+1); // Toma memoria para el buffer de lectura.
- if (buffer == NULL) { // No hay memoria suficiente para el buffer
- errorLog(modulo, 3, FALSE);
- return (FALSE);
- }
- lSize=fread(buffer, 1, lSize, fcfg); // Lee contenido del fichero
- buffer[lSize]=CHARNULL;
- fclose(fcfg);
-
- /* Inicializar variables globales */
- servidoradm[0]=CHARNULL;
- puerto[0] = CHARNULL;
- pathinterface[0]=CHARNULL;
- urlmenu[0]=CHARNULL;
- urlmsg[0]=CHARNULL;
-
- numlin = splitCadena(lineas, buffer, '\n');
- for (i = 0; i < numlin; i++) {
- splitCadena(dualparametro, lineas[i], '=');
-
- resul = strcmp(StrToUpper(dualparametro[0]), "SERVIDORADM");
- if (resul == 0)
- strcpy(servidoradm, dualparametro[1]);
-
- resul = strcmp(StrToUpper(dualparametro[0]), "PUERTO");
- if (resul == 0)
- strcpy(puerto, dualparametro[1]);
-
- resul = strcmp(StrToUpper(dualparametro[0]), "PATHINTERFACE");
- if (resul == 0)
- strcpy(pathinterface, dualparametro[1]);
-
- resul = strcmp(StrToUpper(dualparametro[0]), "URLMENU");
- if (resul == 0)
- strcpy(urlmenu, dualparametro[1]);
-
- resul = strcmp(StrToUpper(dualparametro[0]), "URLMSG");
- if (resul == 0)
- strcpy(urlmsg, dualparametro[1]);
- }
-
- if (servidoradm[0] == CHARNULL) {
- errorLog(modulo,4, FALSE); // Falta parámetro SERVIDORADM
- return (FALSE);
- }
-
- if (puerto[0] == CHARNULL) {
- errorLog(modulo,5, FALSE); // Falta parámetro PUERTO
- return (FALSE);
- }
- if (pathinterface[0] == CHARNULL) {
- errorLog(modulo,56, FALSE); // Falta parámetro PATHINTERFACE
- return (FALSE);
- }
-
- if (urlmenu[0] == CHARNULL) {
- errorLog(modulo,89, FALSE); // Falta parámetro URLMENU
- return (FALSE);
- }
- if (urlmsg[0] == CHARNULL) {
- errorLog(modulo,90, FALSE); // Falta parámetro URLMSG
- return (FALSE);
- }
-
- return (TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: FinterfaceAdmin
-//
-// Descripción:
-// Esta función es la puerta de comunicación entre el módulo de administración y el motor de clonación.
-// La Aplicación de administración utiliza una interface para ejecutar funciones del motor de clonación;
-// esta interface llamará a la API del motor con lo que cambiando el comportamiento de esta interface
-// podremos hacer llamadas a otras API de clonación y de esta manera probar distintos motores.
-//
-// Parámetros:
-// - script: Nombre del módulo,función o script de la interface
-// - parametros: Parámetros que se le pasarán a la interface
-// - salida: Recoge la salida que genera la llamada a la interface
-
-// Devuelve:
-// Código de error de la ejecución al módulo , función o script de la interface
-//
-// Especificaciones:
-// El parámetro salida recoge la salida desde un fichero que se genera en la ejecución del script siempre que
-// sea distinto de NULL, esto es, si al llamar a la función este parámetro es NULL no se recogerá dicha salida.
-// Este fichero tiene una ubicación fija: /tmp/_retinterface
-//______________________________________________________________________________________________________
-
-int FinterfaceAdmin( char *script,char* parametros,char* salida)
-{
- FILE *f;
- int lSize,nargs,i,resul;
- char msglog[LONSTD],*argumentos[MAXARGS];
- char modulo[] = "FinterfaceAdmin()";
-
-
- if (ndebug>= DEBUG_MEDIO) {
- sprintf(msglog, "%s:%s", tbMensajes[8], script);
- infoDebug(msglog);
- }
-
- /* Crea matriz de los argumentos */
- nargs=splitCadena(argumentos,parametros,32);
- for(i=nargs;i<MAXARGS;i++){
- argumentos[i]=NULL;
- }
-
- /* Muestra matriz de los argumentos */
- for(i=0;i<nargs;i++){
- if (ndebug>= DEBUG_ALTO) {
- sprintf(msglog, "%s: #%d-%s", tbMensajes[9],i+1,argumentos[i]);
- infoDebug(msglog);
- }
- }
- /* Elimina fichero de retorno */
- if(salida!=(char*)NULL){
- f = fopen("/tmp/_retinterface_","w" );
- if (f==NULL){ // Error de eliminación
- scriptLog(modulo,10);
- resul=8;
- scriptLog(modulo,resul);
- return(resul);
- }
- fclose(f);
- }
- /* Compone linea de comando */
- if(parametros){
- strcat(script," ");
- strcat(script,parametros);
- }
- /* LLamada función interface */
- resul=system(script);
- if(resul){
- scriptLog(modulo,10);
- scriptLog(modulo,resul);
- return(resul);
- }
- /* Lee fichero de retorno */
- if(salida!=(char*)NULL){
- f = fopen("/tmp/_retinterface_","rb" );
- if (f==NULL){ // Error de apertura
- scriptLog(modulo,10);
- resul=9;
- scriptLog(modulo,resul);
- return(resul);
- }
- else{
- fseek (f ,0,SEEK_END); // Obtiene tamaño del fichero.
- lSize = ftell (f);
- rewind (f);
- if(lSize>LONGITUD_SCRIPTSALIDA){
- scriptLog(modulo,10);
- resul=11;
- scriptLog(modulo,resul);
- return(resul);
- }
- fread (salida,1,lSize,f); // Lee contenido del fichero
- rTrim(salida);
- fclose(f);
- }
- }
- /* Muestra información de retorno */
- if(salida!=(char*)NULL){
- if(ndebug>2){
- sprintf(msglog,"Información devuelta %s",salida);
- infoDebug(msglog);
- }
- }
- return(resul);
-}
-//______________________________________________________________________________________________________
-// Función: interfaceAdmin
-//
-// Descripción:
-// Esta función es la puerta de comunicación entre el módulo de administración y el motor de clonación.
-// La Aplicación de administración utiliza una interface para ejecutar funciones del motor de clonación;
-// esta interface llamará a la API del motor con lo que cambiando el comportamiento de esta interface
-// podremos hacer llamadas a otras API de clonación y de esta manera probar distintos motores.
-//
-// Parámetros:
-// - script: Nombre del módulo,función o script de la interface
-// - parametros: Parámetros que se le pasarán a la interface
-// - salida: Recoge la salida que genera la llamada a la interface
-
-// Devuelve:
-// Código de error de la ejecución al módulo , función o script de la interface
-//
-// Especificaciones:
-// El parámetro salida recoge la salida desde el procedimiento hijo que se genera en la ejecución de éste
-// siempre que sea distinto de NULL, esto es, si al llamar a la función este parámetro es NULL no se
-// recogerá dicha salida.
-//______________________________________________________________________________________________________
-
-int interfaceAdmin( char *script,char* parametros,char* salida)
-{
- int descr[2]; /* Descriptores de E y S de la turbería */
- int bytesleidos; /* Bytes leidos en el mensaje */
- int estado;
- pid_t pid;
- char buffer[LONGITUD_SCRIPTSALIDA];
- pipe (descr);
- int i,nargs,resul;
- char msglog[LONSTD],*argumentos[MAXARGS];
- char modulo[] = "interfaceAdmin()";
- if (ndebug>= DEBUG_MEDIO) {
- sprintf(msglog, "%s:%s", tbMensajes[8], script);
- infoDebug(msglog);
- }
-
- /* Crea matriz de los argumentos */
- nargs=splitCadena(argumentos,parametros,32);
- for(i=nargs;i<MAXARGS;i++){
- argumentos[i]=NULL;
- }
- /* Muestra matriz de los argumentos */
- for(i=1;i<nargs;i++){
- if (ndebug>= DEBUG_ALTO) {
- sprintf(msglog, "%s: #%d-%s", tbMensajes[9],i+1,argumentos[i]);
- infoDebug(msglog);
- }
- }
-
- if((pid=fork())==0)
- {
- //_______________________________________________________________
-
- /* Proceso hijo que ejecuta la función de interface */
-
- close (descr[LEER]);
- dup2 (descr[ESCRIBIR], 1);
- close (descr[ESCRIBIR]);
- resul=execv(script,argumentos);
- //resul=execlp (script, script, argumentos[0],argumentos[1],NULL);
- exit(resul);
-
- /* Fin de proceso hijo */
- //_______________________________________________________________
- }
- else
- {
- //_______________________________________________________________
-
- /* Proceso padre que espera la ejecución del hijo */
-
- if (pid ==-1){ // Error en la creación del proceso hijo
- scriptLog(modulo,10);
- resul=13;
- scriptLog(modulo,resul);
- return(resul);
- }
- close (descr[ESCRIBIR]);
- bytesleidos = read (descr[LEER], buffer, LONGITUD_SCRIPTSALIDA-1);
- while(bytesleidos>0){
- if(salida!=(char*)NULL){ // Si se solicita retorno de información...
- buffer[bytesleidos]='\0';
- if(strlen(buffer)+strlen(salida)>LONGITUD_SCRIPTSALIDA){
- scriptLog(modulo,10);
- resul=11;
- scriptLog(modulo,resul);
- return(resul);
- }
- rTrim(buffer);
- strcat(salida,buffer);
-
- }
- bytesleidos = read (descr[LEER], buffer, LONGITUD_SCRIPTSALIDA-1);
- }
- close (descr[LEER]);
- //kill(pid,SIGQUIT);
- waitpid(pid,&estado,0);
- resul=WEXITSTATUS(estado);
- if(resul){
- scriptLog(modulo,10);
- scriptLog(modulo,resul);
- return(resul);
- }
- /* Fin de proceso padre */
- //_______________________________________________________________
- }
-
- /* Muestra información de retorno */
- if(salida!=(char*)NULL){
- if(ndebug>2){
- sprintf(msglog,"Información devuelta %s",salida);
- infoDebug(msglog);
- }
- }
- return(resul);
-}
-//______________________________________________________________________________________________________
-// Función: scriptLog
-//
-// Descripción:
-// Registra los sucesos de errores de scripts en el fichero de log
-// Parametros:
-// - modulo: Módulo donde se produjo el error
-// - coderr : Código del mensaje de error del script
-//______________________________________________________________________________________________________
-void scriptLog(const char *modulo,int coderr)
-{
- char msglog[LONSUC];
-
- if(coderr<MAXERRORSCRIPT)
- errorInfo(modulo,tbErroresScripts[coderr]); // Se ha producido algún error registrado
- else{
- sprintf(msglog,"%s: %d",tbErroresScripts[MAXERRORSCRIPT],coderr);
- errorInfo(modulo,msglog);
- }
-}
-//______________________________________________________________________________________________________
-// Función: TomaIPlocal
-//
-// Descripción:
-// Recupera la IP local
-// Parámetros:
-// Ninguno
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// Especificaciones:
-// En caso de no encontrar la IP o generarse algún error la IP local sería 0.0.0.0
-//______________________________________________________________________________________________________
-BOOLEAN tomaIPlocal()
-{
- char modulo[] = "tomaIPlocal()";
-
- sprintf(interface,"%s/getIpAddress",pathinterface);
- herror=interfaceAdmin(interface,NULL,IPlocal);
- if(herror){
- errorLog(modulo,85,FALSE);
- return(FALSE);
- }
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: cuestionCache
-//
-// Descripción:
-// Procesa la cache en caso de existir.
-// Parámetros:
-// tam : Tamaño de la cache
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN cuestionCache(char* tam)
-{
- char msglog[LONSTD];
- char modulo[] = "cuestionCache()";
-
- sprintf(interface,"%s/%s",pathinterface,"procesaCache");
- sprintf(parametros,"%s %s","procesaCache",tam);
-
- herror=interfaceAdmin(interface,parametros,NULL);
- if(herror){
- sprintf(msglog,"%s",tbErrores[88]);
- errorInfo(modulo,msglog);
- return(FALSE);
- }
-
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: cargaPaginaWeb
-//
-// Descripción:
-// Muestra una pégina web usando el browser
-// Parámetros:
-// urp: Dirección url de la página
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-int cargaPaginaWeb(char *url)
-{
- int resul=0;
- char* argumentos[4];
- char modulo[] = "cargaPaginaWeb()";
-
- if(pidbash>0)
- kill(pidbash,SIGQUIT); // Destruye el proceso hijo del proceso bash si existiera una conmutación
-
- if(pidbrowser>0)
- kill(pidbrowser,SIGQUIT); // Destruye el proceso hijo anterior y se queda sólo el actual
-
- sprintf(interface,"/opt/opengnsys/bin/browser");
- sprintf(parametros,"browser -qws %s",url);
-
- splitCadena(argumentos,parametros,' '); // Crea matriz de los argumentos del scripts
- argumentos[3]=NULL;
- if((pidbrowser=fork())==0){
- /* Proceso hijo que ejecuta el script */
- resul=execv(interface,argumentos);
- exit(resul);
- }
- else {
- if (pidbrowser ==-1){
- scriptLog(modulo,10);
- resul=13;
- scriptLog(modulo,resul);
- return(resul);
- }
- }
- return(resul);
-}
-//________________________________________________________________________________________________________
-// Función: muestraMenu
-//
-// Descripción:
-// Muestra el menu inicial del cliente
-// Parámetros:
-// Ninguno
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//________________________________________________________________________________________________________
-void muestraMenu()
-{
- cargaPaginaWeb(urlmenu);
-}
-//______________________________________________________________________________________________________
-// Función: muestraMensaje
-//
-// Descripción:
-// Muestra un mensaje en pantalla
-// Parámetros:
-// - idx: Indice del mensaje
-// - msg: Descripción Mensaje
-// ________________________________________________________________________________________________________
-void muestraMensaje(int idx,char*msg)
-{
- char url[250];
- if(msg)
- sprintf(url,"%s?msg=%s",urlmsg,URLEncode(msg)); // Url de la página de mensajes
- else
- sprintf(url,"%s?idx=%d",urlmsg,idx); // Url de la página de mensajes
- cargaPaginaWeb(url);
-}
-//______________________________________________________________________________________________________
-// Función: InclusionCliente
-// Descripción:
-// Abre una sesión en el servidor de administración y registra al cliente en el sistema
-// Parámetros:
-// Ninguno
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN inclusionCliente(TRAMA* ptrTrama)
-{
- int lon;
- char msglog[LONSTD],*cfg;
- SOCKET socket_c;
- char modulo[] = "inclusionCliente()";
-
- char *dsk=(char*)reservaMemoria(2);
- sprintf(dsk,"1"); // Siempre el disco 1
-
- cfg=LeeConfiguracion(dsk);
- if(!cfg){ // No se puede recuperar la configuración del cliente
- errorLog(modulo,36,FALSE);
- errorLog(modulo,37,FALSE);
- return(FALSE);
- }
- if (ndebug>= DEBUG_ALTO) {
- sprintf(msglog, "%s:%s", tbMensajes[14],cfg);
- infoDebug(msglog);
- }
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=InclusionCliente\r"); // Nombre de la función a ejecutar en el servidor
- lon+=sprintf(ptrTrama->parametros+lon,"cfg=%s\r",cfg); // Configuración de los Sistemas Operativos del cliente
-
- if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_PETICION)){
- errorLog(modulo,37,FALSE);
- return(FALSE);
- }
- ptrTrama=recibeMensaje(&socket_c);
- if(!ptrTrama){
- errorLog(modulo,45,FALSE);
- return(FALSE);
- }
- close(socket_c);
-
- if(!gestionaTrama(ptrTrama)){ // Análisis de la trama
- errorLog(modulo,39,FALSE);
- return(FALSE);
- }
-
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: RESPUESTA_InclusionCliente
-//
-// Descripción:
-// Respuesta del servidor de administración a la petición de inicio
-// enviando los datos identificativos del cliente y otras configuraciones
-// Parámetros:
-// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN RESPUESTA_InclusionCliente(TRAMA* ptrTrama)
-{
- char* res;
- char modulo[] = "RESPUESTA_InclusionCliente()";
-
- res=copiaParametro("res",ptrTrama); // Resultado del proceso de inclusión
- if(atoi(res)==0){ // Error en el proceso de inclusión
- errorLog(modulo,41,FALSE);
- return (FALSE);
- }
- strcpy(idordenador,copiaParametro("ido",ptrTrama)); // Identificador del ordenador
- strcpy(nombreordenador,copiaParametro("npc",ptrTrama)); // Nombre del ordenador
- strcpy(cache,copiaParametro("che",ptrTrama)); // Tamaño de la caché reservada al cliente
- strcpy(idproautoexec,copiaParametro("exe",ptrTrama)); // Procedimento de inicio (Autoexec)
- strcpy(idcentro,copiaParametro("idc",ptrTrama)); // Identificador de la Unidad Organizativa
- strcpy(idaula,copiaParametro("ida",ptrTrama)); // Identificador de la Unidad Organizativa
-
- if(idordenador==NULL || nombreordenador==NULL){
- errorLog(modulo,40,FALSE);
- return (FALSE);
- }
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-//
-// Función: LeeConfiguracion
-// Descripción:
-// Abre una sesión en el servidor de administración y registra al cliente en el sistema
-// Parámetros:
-// Ninguno
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-
-char* LeeConfiguracion(char* dsk)
-{
- char* parametroscfg;
- char modulo[] = "LeeConfiguracion()";
-
- parametroscfg=(char*)reservaMemoria(LONGITUD_PARAMETROS);
- if(!parametroscfg){
- errorLog(modulo,3,FALSE);
- return(NULL);
- }
- sprintf(interface,"%s/%s",pathinterface,"getConfiguration");
- herror=interfaceAdmin(interface,NULL,parametroscfg);
-
- if(herror){ // No se puede recuperar la configuración del cliente
- errorLog(modulo,36,FALSE);
- return(NULL);
- }
- return(parametroscfg);
-}
-//________________________________________________________________________________________________________
-// Función: autoexecCliente
-//
-// Descripción:
-// Solicita procedimiento de autoexec para el cliebnte
-// Parámetros:
-// Ninguno
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//________________________________________________________________________________________________________
-BOOLEAN autoexecCliente(TRAMA* ptrTrama)
-{
- int lon;
- SOCKET socket_c;
- char modulo[] = "autoexecCliente()";
-
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=AutoexecCliente\rexe=%s\r",idproautoexec);
-
- if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_PETICION)){
- errorLog(modulo,42,FALSE);
- return(FALSE);
- }
- ptrTrama=recibeMensaje(&socket_c);
- if(!ptrTrama){
- errorLog(modulo,45,FALSE);
- return(FALSE);
- }
-
- close(socket_c);
-
- if(!gestionaTrama(ptrTrama)){ // Análisis de la trama
- errorLog(modulo,39,FALSE);
- return(FALSE);
- }
-
- return(TRUE);
-}
-//________________________________________________________________________________________________________
-// Función: autoexecCliente
-//
-// Descripción:
-// Ejecuta un script de autoexec personalizado en todos los inicios para el cliente
-// Parámetros:
-// Ninguno
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//________________________________________________________________________________________________________
-BOOLEAN RESPUESTA_AutoexecCliente(TRAMA* ptrTrama)
-{
- SOCKET socket_c;
- char *res,*nfl;
- char modulo[] = "RESPUESTA_AutoexecCliente()";
-
- res=copiaParametro("res",ptrTrama);
- if(atoi(res)==0){ // Error en el proceso de autoexec
- return (FALSE);
- }
- nfl=copiaParametro("nfl",ptrTrama);
- initParametros(ptrTrama,0);
- sprintf(ptrTrama->parametros,"nfn=enviaArchivo\rnfl=%s\r",nfl);
- /* Envía petición */
- if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_PETICION)){
- errorLog(modulo,42,FALSE);
- return(FALSE);
- }
- /* Nombre del archivo destino (local)*/
- char fileautoexec[LONPRM];
- sprintf(fileautoexec,"/tmp/_autoexec_%s",IPlocal);
-
- /* Recibe archivo */
- if(!recArchivo(&socket_c,fileautoexec)){
- errorLog(modulo,58, FALSE);
- close(socket_c);
- return(FALSE);
- }
-
- close(socket_c);
-
- /* Ejecuta archivo */
- ejecutaArchivo(fileautoexec,ptrTrama);
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: comandosPendientes
-//
-// Descripción:
-// Búsqueda de acciones pendientes en el servidor de administración
-// Parámetros:
-// Ninguno
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN comandosPendientes(TRAMA* ptrTrama)
-{
- SOCKET socket_c;
- char modulo[] = "comandosPendientes()";
-
- CMDPTES=TRUE;
- initParametros(ptrTrama,0);
-
- while(CMDPTES){
- sprintf(ptrTrama->parametros,"nfn=ComandosPendientes\r");
- if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_PETICION)){
- errorLog(modulo,42,FALSE);
- return(FALSE);
- }
- ptrTrama=recibeMensaje(&socket_c);
- if(!ptrTrama){
- errorLog(modulo,45,FALSE);
- return(FALSE);
- }
- close(socket_c);
-
- if(!gestionaTrama(ptrTrama)){ // Análisis de la trama
- errorLog(modulo,39,FALSE);
- return(FALSE);
- }
- }
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: NoComandosPtes
-//
-// Descripción:
-// Conmuta el switch de los comandos pendientes y lo pone a false
-// Parámetros:
-// - ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE siempre
-// Especificaciones:
-// Cuando se ejecuta esta función se sale del bucle que recupera los comandos pendientes en el
-// servidor y el cliente pasa a a estar disponible para recibir comandos desde el éste.
-//______________________________________________________________________________________________________
-BOOLEAN NoComandosPtes(TRAMA* ptrTrama)
-{
- CMDPTES=FALSE; // Corta el bucle de comandos pendientes
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: ProcesaComandos
-//
-// Descripción:
-// Espera comando desde el Servidor de Administración para ejecutarlos
-// Parámetros:
-// Ninguno
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-void procesaComandos(TRAMA* ptrTrama)
-{
- int lon;
- SOCKET socket_c;
- char modulo[] = "procesaComandos()";
-
- initParametros(ptrTrama,0);
- while(TRUE){
- lon=sprintf(ptrTrama->parametros,"nfn=DisponibilidadComandos\r");
- lon+=sprintf(ptrTrama->parametros+lon,"tpc=%s\r",CLIENTE_OPENGNSYS); // Activar disponibilidad
- if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_INFORMACION)){
- errorLog(modulo,43,FALSE);
- return;
- }
- infoLog(19); // Disponibilidad de cliente activada
- ptrTrama=recibeMensaje(&socket_c);
- if(!ptrTrama){
- errorLog(modulo,46,FALSE);
- return;
- }
-
- close(socket_c);
-
- if(!gestionaTrama(ptrTrama)){ // Análisis de la trama
- errorLog(modulo,39,FALSE);
- return;
- }
- if(!comandosPendientes(ptrTrama)){
- errorLog(modulo,42,FALSE);
- }
- }
-}
-//______________________________________________________________________________________________________
-// Función: Actualizar
-//
-// Descripción:
-// Actualiza los datos de un ordenador como si volviera a solicitar la entrada
-// en el sistema al servidor de administración
-// Parámetros:
-// ptrTrama: contenido del mensajede
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN Actualizar(TRAMA* ptrTrama)
-{
- char msglog[LONSTD];
- char modulo[] = "Actualizar()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
- muestraMensaje(1,NULL);
- if(!comandosPendientes(ptrTrama)){
- errorLog(modulo,84,FALSE);
- return(FALSE);
- }
- muestraMenu();
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: Purgar
-//
-// Descripción:
-// Detiene la ejecución del browser
-// Parámetros:
-// ptrTrama: contenido del mensajede
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-int Purgar(TRAMA* ptrTrama)
-{
- int resul=0;
- char modulo[] = "Purgar()";
-
- if(pidbrowser>0)
- kill(pidbrowser,SIGQUIT); // Destruye el proceso hijo anterior y se queda sólo el actual
-
- if(pidbash>0)
- kill(pidbash,SIGQUIT); // Destruye el proceso hijo del proceso bash si existiera una conmutación
-
- sprintf(interface,"/opt/opengnsys/bin/bash");
- if((pidbash=fork())==0){
- /* Proceso hijo que ejecuta el script */
- resul=execv(interface,NULL);
- exit(resul);
- }
- else {
- if (pidbash ==-1){
- scriptLog(modulo,10);
- resul=13;
- scriptLog(modulo,resul);
- return(resul);
- }
- }
- exit(EXIT_SUCCESS);
-}
-//______________________________________________________________________________________________________
-// Función: Sondeo
-//
-// Descripción:
-// Envía al servidor una confirmación de que está dentro del sistema
-// Parámetros:
-// ptrTrama: contenido del mensajede
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN Sondeo(TRAMA* ptrTrama)
-{
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: ConsolaRemota
-//
-// Descripción:
-// Ejecuta un comando de la Shell y envia el eco al servidor (Consola remota)
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN ConsolaRemota(TRAMA* ptrTrama)
-{
- SOCKET socket_c;
- char *nfn,*ids,*scp,ecosrc[LONPRM],ecodst[LONPRM],msglog[LONSTD];;
- char modulo[] = "ConsolaRemota()";
-
- scp=URLDecode(copiaParametro("scp",ptrTrama));
-
- nfn=copiaParametro("nfn",ptrTrama);
- ids=copiaParametro("ids",ptrTrama);
-
- /* Nombre del archivo de script */
- char filescript[LONPRM];
- sprintf(filescript,"/tmp/_script_%s",IPlocal);
- escribeArchivo(filescript,scp);
-
- sprintf(interface,"%s/%s",pathinterface,nfn);
- sprintf(ecosrc,"/tmp/_econsola_%s",IPlocal);
- sprintf(parametros,"%s %s %s",nfn,filescript,ecosrc);
- herror=interfaceAdmin(interface,parametros,NULL);
- if(herror){
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- }
- else{
- /* Envía fichero de inventario al servidor */
- sprintf(ecodst,"/tmp/_Seconsola_%s",IPlocal); // Nombre que tendra el archivo en el Servidor
- initParametros(ptrTrama,0);
- sprintf(ptrTrama->parametros,"nfn=recibeArchivo\rnfl=%s\r",ecodst);
- if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_COMANDO)){
- errorLog(modulo,42,FALSE);
- return(FALSE);
- }
- /* Espera señal para comenzar el envío */
- recibeFlag(&socket_c,ptrTrama);
- /* Envía archivo */
- if(!sendArchivo(&socket_c,ecosrc)){
- errorLog(modulo,57, FALSE);
- herror=12; // Error de envío de fichero por la red
- }
- close(socket_c);
- }
- return(TRUE);
-}
-//_____________________________________________________________________________________________________
-// Función: Comando
-//
-// Descripción:
-// COmando personalizado enviado desde el servidor
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//_____________________________________________________________________________________________________
-BOOLEAN Comando(TRAMA* ptrTrama)
-{
- int lon;
- char *ids,*nfn,msglog[LONSTD];
- char modulo[] = "Comando()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
- nfn=copiaParametro("nfn",ptrTrama);
- ids=copiaParametro("ids",ptrTrama);
-
- sprintf(interface,"%s/%s",pathinterface,nfn);
- herror=interfaceAdmin(interface,NULL,NULL);
- if(herror){
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- }
- /* Envia respuesta de ejecucución del comando */
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=RESPUESTA_%s\r",nfn);
- respuestaEjecucionComando(ptrTrama,herror,ids);
- return(TRUE);
-}
-//_____________________________________________________________________________________________________
-// Función: Arrancar
-//
-// Descripción:
-// Responde a un comando de encendido por la red
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//_____________________________________________________________________________________________________
-BOOLEAN Arrancar(TRAMA* ptrTrama)
-{
- int lon;
- char *ids,msglog[LONSTD];
- char modulo[] = "Arrancar()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
-
- ids=copiaParametro("ids",ptrTrama);
-
- /* Envia respuesta de ejecucución del script */
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Arrancar");
- lon+=sprintf(ptrTrama->parametros+lon,"tpc=%s\r",CLIENTE_OPENGNSYS);
- respuestaEjecucionComando(ptrTrama,0,ids);
- return(TRUE);
-}
-//_____________________________________________________________________________________________________
-// Función: Apagar
-//
-// Descripción:
-// Apaga el cliente
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//_____________________________________________________________________________________________________
-BOOLEAN Apagar(TRAMA* ptrTrama)
-{
- int lon;
- char *ids,*nfn,msglog[LONSTD];
- char modulo[] = "Apagar()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
- nfn=copiaParametro("nfn",ptrTrama);
- ids=copiaParametro("ids",ptrTrama);
-
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Apagar");
- respuestaEjecucionComando(ptrTrama,0,ids);
-
- sprintf(interface,"%s/%s",pathinterface,nfn);
- herror=interfaceAdmin(interface,NULL,NULL);
- if(herror){
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- return(FALSE);
- }
- return(TRUE);
-}
-//_____________________________________________________________________________________________________
-// Función: Reiniciar
-//
-// Descripción:
-// Apaga el cliente
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//_____________________________________________________________________________________________________
-BOOLEAN Reiniciar(TRAMA* ptrTrama)
-{
- int lon;
- char *nfn,*ids,msglog[LONSTD];
- char modulo[] = "Reiniciar()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
- nfn=copiaParametro("nfn",ptrTrama);
- ids=copiaParametro("ids",ptrTrama);
-
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Reiniciar");
- respuestaEjecucionComando(ptrTrama,0,ids);
-
- sprintf(interface,"%s/%s",pathinterface,nfn);
- herror=interfaceAdmin(interface,NULL,NULL);
- if(herror){
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- return(FALSE);
- }
- return(TRUE);
-}
-//_____________________________________________________________________________________________________
-// Función: IniciarSesion
-//
-// Descripción:
-// Inicia sesión en el Sistema Operativo de una de las particiones
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//_____________________________________________________________________________________________________
-BOOLEAN IniciarSesion(TRAMA* ptrTrama)
-{
- int lon;
- char *nfn,*ids,*par,msglog[LONSTD];
- char modulo[] = "IniciarSesion()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
- nfn=copiaParametro("nfn",ptrTrama);
- ids=copiaParametro("ids",ptrTrama);
- par=copiaParametro("par",ptrTrama);
-
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_IniciarSesion");
- respuestaEjecucionComando(ptrTrama,0,ids);
-
- sprintf(interface,"%s/%s",pathinterface,nfn);
- sprintf(parametros,"%s %s",nfn,par);
- herror=interfaceAdmin(interface,parametros,NULL);
-
- if(herror){
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- return(FALSE);
- }
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: CrearImagen
-//
-// Descripción:
-// Crea una imagen de una partición
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN CrearImagen(TRAMA* ptrTrama)
-{
- int lon;
- char *nfn,*dsk,*par,*cpt,*idi,*ipr,*nci,*ids,msglog[LONSTD];
- char modulo[] = "CrearImagen()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
-
- dsk=copiaParametro("dsk",ptrTrama); // Disco
- par=copiaParametro("par",ptrTrama); // Número de partición
- cpt=copiaParametro("cpt",ptrTrama); // Código de la partición
- idi=copiaParametro("idi",ptrTrama); // Identificador de la imagen
- nci=copiaParametro("nci",ptrTrama); // Nombre canónico de la imagen
- ipr=copiaParametro("ipr",ptrTrama); // Ip del repositorio
-
- nfn=copiaParametro("nfn",ptrTrama);
- ids=copiaParametro("ids",ptrTrama);
- muestraMensaje(7,NULL);
- if(InventariandoSoftware(ptrTrama,FALSE,"InventarioSoftware")){ // Crea inventario Software previamente
- muestraMensaje(2,NULL);
- sprintf(interface,"%s/%s",pathinterface,nfn);
- sprintf(parametros,"%s %s %s %s %s",nfn,dsk,par,nci,ipr);
- herror=interfaceAdmin(interface,parametros,NULL);
- if(herror){
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- muestraMensaje(10,NULL);
- }
- else
- muestraMensaje(9,NULL);
- }
- else{
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- }
-
- muestraMenu();
-
- /* Envia respuesta de ejecución de la función de interface */
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_CrearImagen");
- lon+=sprintf(ptrTrama->parametros+lon,"idi=%s\r",idi); // Identificador de la imagen
- lon+=sprintf(ptrTrama->parametros+lon,"par=%s\r",par); // Número de partición de donde se creó
- lon+=sprintf(ptrTrama->parametros+lon,"cpt=%s\r",cpt); // Tipo o código de partición
- lon+=sprintf(ptrTrama->parametros+lon,"ipr=%s\r",ipr); // Ip del repositorio donde se alojó
- respuestaEjecucionComando(ptrTrama,herror,ids);
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: RestaurarImagen
-//
-// Descripción:
-// Restaura una imagen en una partición
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN RestaurarImagen(TRAMA* ptrTrama)
-{
- int lon;
- char *nfn,*dsk,*par,*idi,*ipr,*ifs,*nci,*ids,*ptc,msglog[LONSTD];
- char modulo[] = "RestaurarImagen()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
-
- dsk=copiaParametro("dsk",ptrTrama);
- par=copiaParametro("par",ptrTrama);
- idi=copiaParametro("idi",ptrTrama);
- ipr=copiaParametro("ipr",ptrTrama);
- nci=copiaParametro("nci",ptrTrama);
- ifs=copiaParametro("ifs",ptrTrama);
- ptc=copiaParametro("ptc",ptrTrama);
-
- nfn=copiaParametro("nfn",ptrTrama);
- ids=copiaParametro("ids",ptrTrama);
- muestraMensaje(3,NULL);
- sprintf(interface,"%s/%s",pathinterface,nfn);
- sprintf(parametros,"%s %s %s %s %s %s",nfn,dsk,par,nci,ipr,ptc);
- herror=interfaceAdmin(interface,parametros,NULL);
- if(herror){
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- muestraMensaje(12,NULL);
- }
- else
- muestraMensaje(11,NULL);
-
- muestraMenu();
-
- /* Envia respuesta de ejecución de la función de interface */
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_RestaurarImagen");
- lon+=sprintf(ptrTrama->parametros+lon,"idi=%s\r",idi); // Identificador de la imagen
- lon+=sprintf(ptrTrama->parametros+lon,"par=%s\r",par); // Número de partición
- lon+=sprintf(ptrTrama->parametros+lon,"ifs=%s\r",ifs); // Identificador del perfil software
- respuestaEjecucionComando(ptrTrama,herror,ids);
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: Configurar
-//
-// Descripción:
-// Configura la tabla de particiones y formatea
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN Configurar(TRAMA* ptrTrama)
-{
- int lon;
- char *nfn,*dsk,*cfg,*ids,msglog[LONSTD];
- char modulo[] = "Configurar()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
-
- dsk=copiaParametro("dsk",ptrTrama);
- cfg=copiaParametro("cfg",ptrTrama);
- /* Sustituir caracteres */
- sustituir(cfg,'\n','$');
- sustituir(cfg,'\t','#');
-
- nfn=copiaParametro("nfn",ptrTrama);
- ids=copiaParametro("ids",ptrTrama);
- muestraMensaje(4,NULL);
- sprintf(interface,"%s/%s",pathinterface,nfn);
- sprintf(parametros,"%s %s %s'",nfn,dsk,cfg);
-
- herror=interfaceAdmin(interface,parametros,NULL);
- if(herror){
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- muestraMensaje(13,NULL);
- }
- else
- muestraMensaje(14,NULL);
-
- muestraMenu();
-
- cfg=LeeConfiguracion(dsk);
- if(!cfg){ // No se puede recuperar la configuración del cliente
- errorLog(modulo,36,FALSE);
- return(FALSE);
- }
-
- /* Envia respuesta de ejecución del comando*/
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Configurar");
- lon+=sprintf(ptrTrama->parametros+lon,"cfg=%s\r",cfg); // Identificador de la imagen
- respuestaEjecucionComando(ptrTrama,herror,ids);
- return(TRUE);
-}
-// ________________________________________________________________________________________________________
-// Función: InventarioHardware
-//
-// Descripción:
-// Envia al servidor el nombre del archivo de inventario de su hardware para posteriormente
-// esperar que éste lo solicite y enviarlo por la red.
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN InventarioHardware(TRAMA* ptrTrama)
-{
- int lon;
- SOCKET socket_c;
- char *nfn,*ids,msglog[LONSTD],hrdsrc[LONPRM],hrddst[LONPRM];
- char modulo[] = "InventarioHardware()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
-
- nfn=copiaParametro("nfn",ptrTrama);
- ids=copiaParametro("ids",ptrTrama);
- muestraMensaje(6,NULL);
-
- sprintf(interface,"%s/%s",pathinterface,nfn);
- sprintf(hrdsrc,"/tmp/Chrd-%s",IPlocal); // Nombre que tendra el archivo de inventario
- sprintf(parametros,"%s %s",nfn,hrdsrc);
- herror=interfaceAdmin(interface,parametros,NULL);
- if(herror){
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- muestraMensaje(18,NULL);
- }
- else{
- /* Envía fichero de inventario al servidor */
- sprintf(hrddst,"/tmp/Shrd-%s",IPlocal); // Nombre que tendra el archivo en el Servidor
- initParametros(ptrTrama,0);
- sprintf(ptrTrama->parametros,"nfn=recibeArchivo\rnfl=%s\r",hrddst);
- if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_COMANDO)){
- errorLog(modulo,42,FALSE);
- return(FALSE);
- }
- /* Espera señal para comenzar el envío */
- recibeFlag(&socket_c,ptrTrama);
- /* Envía archivo */
- if(!sendArchivo(&socket_c,hrdsrc)){
- errorLog(modulo,57, FALSE);
- herror=12; // Error de envío de fichero por la red
- }
- close(socket_c);
- muestraMensaje(17,NULL);
- }
- muestraMenu();
-
- /* Envia respuesta de ejecución de la función de interface */
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_InventarioHardware");
- lon+=sprintf(ptrTrama->parametros+lon,"hrd=%s\r",hrddst);
- respuestaEjecucionComando(ptrTrama,herror,ids);
- return(TRUE);
-}
-// ________________________________________________________________________________________________________
-// Función: InventarioSoftware
-//
-// Descripción:
-// Crea el inventario software de un sistema operativo instalado en una partición.
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN InventarioSoftware(TRAMA* ptrTrama)
-{
- char *nfn,*ids,msglog[LONSTD];
- char modulo[] = "InventarioSoftware()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
- nfn=copiaParametro("nfn",ptrTrama);
- ids=copiaParametro("ids",ptrTrama);
- muestraMensaje(7,NULL);
- InventariandoSoftware(ptrTrama,TRUE,nfn);
- respuestaEjecucionComando(ptrTrama,herror,ids);
- muestraMenu();
- return(TRUE);
-}
-// ________________________________________________________________________________________________________
-//
-// Función: InventariandoSoftware
-//
-// Descripción:
-// Envia al servidor el nombre del archivo de inventario de su software para posteriormente
-// esperar que éste lo solicite y enviarlo por la red.
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// sw: switch que indica si la función es llamada por el comando InventarioSoftware(true) o CrearImagen(false)
-// nfn: Nombre de la función del Interface que implementa el comando
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN InventariandoSoftware(TRAMA* ptrTrama,BOOLEAN sw,char *nfn)
-{
- int lon;
- SOCKET socket_c;
- char *dsk,*par,msglog[LONSTD],sftsrc[LONPRM],sftdst[LONPRM];
- char modulo[] = "InventariandoSoftware()";
-
- dsk=copiaParametro("dsk",ptrTrama); // Disco
- par=copiaParametro("par",ptrTrama);
-
- sprintf(interface,"%s/%s",pathinterface,nfn);
- sprintf(sftsrc,"/tmp/CSft-%s-%s",IPlocal,par); // Nombre que tendra el archivo de inventario
- sprintf(parametros,"%s %s %s %s",nfn,dsk,par,sftsrc);
-
- herror=interfaceAdmin(interface,parametros,NULL);
- herror=0;
- if(herror){
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- muestraMensaje(20,NULL);
- }
- else{
- /* Envía fichero de inventario al servidor */
- sprintf(sftdst,"/tmp/Ssft-%s-%s",IPlocal,par); // Nombre que tendra el archivo en el Servidor
- initParametros(ptrTrama,0);
-
- sprintf(ptrTrama->parametros,"nfn=recibeArchivo\rnfl=%s\r",sftdst);
- if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_COMANDO)){
- errorLog(modulo,42,FALSE);
- return(FALSE);
- }
- /* Espera señal para comenzar el envío */
- if(!recibeFlag(&socket_c,ptrTrama)){
- errorLog(modulo,17,FALSE);
- }
- /* Envía archivo */
- if(!sendArchivo(&socket_c,sftsrc)){
- errorLog(modulo,57, FALSE);
- herror=12; // Error de envío de fichero por la red
- }
- close(socket_c);
- muestraMensaje(19,NULL);
- }
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_InventarioSoftware");
- lon+=sprintf(ptrTrama->parametros+lon,"par=%s\r",par);
- lon+=sprintf(ptrTrama->parametros+lon,"sft=%s\r",sftdst);
- if(!sw)
- respuestaEjecucionComando(ptrTrama,herror,"0");
-
- return(TRUE);
-}
-// ________________________________________________________________________________________________________
-// Función: EjecutarScript
-//
-// Descripción:
-// Ejecuta código de script
-// Parámetros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//______________________________________________________________________________________________________
-BOOLEAN EjecutarScript(TRAMA* ptrTrama)
-{
- int lon;
- char *nfn,*ids,*scp,msglog[LONSTD];
- char modulo[] = "EjecutarScript()";
-
- if (ndebug>=DEBUG_MAXIMO) {
- sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
- infoDebug(msglog);
- }
- scp=URLDecode(copiaParametro("scp",ptrTrama));
- ids=copiaParametro("ids",ptrTrama);
-
- nfn=copiaParametro("nfn",ptrTrama);
- ids=copiaParametro("ids",ptrTrama);
- muestraMensaje(8,NULL);
- /* Nombre del archivo de script */
- char filescript[LONPRM];
- sprintf(filescript,"/tmp/_script_%s",IPlocal);
- escribeArchivo(filescript,scp);
- sprintf(interface,"%s/%s",pathinterface,nfn);
- sprintf(parametros,"%s %s",nfn,filescript);
- herror=interfaceAdmin(interface,parametros,NULL);
- if(herror){
- sprintf(msglog,"%s:%s",tbErrores[86],nfn);
- errorInfo(modulo,msglog);
- muestraMensaje(21,NULL);
- }
- else
- muestraMensaje(22,NULL);
- muestraMenu();
- //herror=ejecutarCodigoBash(scp);
- initParametros(ptrTrama,0);
- lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_EjecutarScript");
- respuestaEjecucionComando(ptrTrama,herror,ids);
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: respuestaEjecucionComando
-//
-// Descripción:
-// Envia una respuesta a una ejecucion de comando al servidor de Administración
-// Parámetros:
-// - ptrTrama: contenido del mensaje
-// - res: Resultado de la ejecución (Código de error devuelto por el script ejecutado)
-// - ids: Identificador de la sesion (En caso de no haber seguimiento es NULO)
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-BOOLEAN respuestaEjecucionComando(TRAMA* ptrTrama,int res,char *ids)
-{
- int lon;
- SOCKET socket_c;
- char modulo[] = "respuestaEjecucionComando()";
-
- lon=strlen(ptrTrama->parametros);
- if(ids){ // Existe seguimiento
- lon+=sprintf(ptrTrama->parametros+lon,"ids=%s\r",ids); // Añade identificador de la sesión
- }
- if (res==0){ // Resultado satisfactorio
- lon+=sprintf(ptrTrama->parametros+lon,"res=%s\r","1");
- lon+=sprintf(ptrTrama->parametros+lon,"der=%s\r","");
- }
- else{ // Algún error
- lon+=sprintf(ptrTrama->parametros+lon,"res=%s\r","2");
- if(res>MAXERRORSCRIPT)
- lon+=sprintf(ptrTrama->parametros+lon,"der=%s (Error de script:%d)\r",tbErroresScripts[MAXERRORSCRIPT],res);// Descripción del error
- else
- lon+=sprintf(ptrTrama->parametros+lon,"der=%s\r",tbErroresScripts[res]);// Descripción del error
- }
- if(!(enviaMensajeServidor(&socket_c,ptrTrama,MSG_NOTIFICACION))){
- errorLog(modulo,44,FALSE);
- return(FALSE);
- }
- close(socket_c);
- return(TRUE);
-}
-// ________________________________________________________________________________________________________
-// Función: gestionaTrama
-//
-// Descripción:
-// Procesa las tramas recibidas.
-// Parametros:
-// ptrTrama: contenido del mensaje
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-BOOLEAN gestionaTrama(TRAMA *ptrTrama)
-{
- int i, res;
- char *nfn;
- char modulo[] = "gestionaTrama()";
-
- INTROaFINCAD(ptrTrama);
- nfn = copiaParametro("nfn", ptrTrama); // Toma nombre de función
- for (i = 0; i < MAXIMAS_FUNCIONES; i++) { // Recorre funciones que procesan las tramas
- res = strcmp(tbfuncionesClient[i].nf, nfn);
- if (res == 0) { // Encontrada la función que procesa el mensaje
- return(tbfuncionesClient[i].fptr(ptrTrama)); // Invoca la función
- }
- }
- /* Sólo puede ser un comando personalizado */
- if (ptrTrama->tipo==MSG_COMANDO)
- return(Comando(ptrTrama));
-
- errorLog(modulo, 18, FALSE);
- return (FALSE);
-}
-//________________________________________________________________________________________________________
-// Función: ejecutaArchivo
-//
-// Descripción:
-// Ejecuta los comando contenido en un archivo (cada comando y sus parametros separados por un
-// salto de linea.
-// Parámetros:
-// filecmd: Nombre del archivo de comandos
-// ptrTrama: Puntero a una estructura TRAMA usada en las comunicaciones por red (No debe ser NULL)
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-//________________________________________________________________________________________________________
-BOOLEAN ejecutaArchivo(char* filecmd,TRAMA *ptrTrama)
-{
- char* buffer,*lineas[MAXIMAS_LINEAS];
- int i,numlin;
- char modulo[] = "ejecutaArchivo()";
-
- buffer=leeArchivo(filecmd);
- if(buffer){
- numlin = splitCadena(lineas, buffer, '@');
- initParametros(ptrTrama,0);
- for (i = 0; i < numlin; i++) {
- if(strlen(lineas[i])>0){
- strcpy(ptrTrama->parametros,lineas[i]);
- strcat(ptrTrama->parametros,"\rMCDJ@"); // Fin de trama
- if(!gestionaTrama(ptrTrama)){ // Análisis de la trama
- errorLog(modulo,39,FALSE);
- //return(FALSE);
- }
- }
- }
- }
- return(TRUE);
-}
-//______________________________________________________________________________________________________
-// Función: enviaMensajeServidor
-//
-// Descripción:
-// Envia un mensaje al servidor de Administración
-// Parámetros:
-// - socket_c: (Salida) Socket utilizado para el envío
-// - ptrTrama: contenido del mensaje
-// - tipo: Tipo de mensaje
-// C=Comando, N=Respuesta a un comando, P=Peticion,R=Respuesta a una petición, I=Informacion
-// Devuelve:
-// TRUE: Si el proceso es correcto
-// FALSE: En caso de ocurrir algún error
-// ________________________________________________________________________________________________________
-BOOLEAN enviaMensajeServidor(SOCKET *socket_c,TRAMA *ptrTrama,char tipo)
-{
- int lon;
- char modulo[] = "enviaMensajeServidor()";
-
- *socket_c=abreConexion();
- if(*socket_c==INVALID_SOCKET){
- errorLog(modulo,38,FALSE); // Error de conexión con el servidor
- return(FALSE);
- }
- ptrTrama->arroba='@'; // Cabecera de la trama
- strncpy(ptrTrama->identificador,"JMMLCAMDJ_MCDJ",14); // identificador de la trama
- ptrTrama->tipo=tipo; // Tipo de mensaje
- lon=strlen(ptrTrama->parametros); // Compone la trama
- lon+=sprintf(ptrTrama->parametros+lon,"iph=%s\r",IPlocal); // Ip del ordenador
- lon+=sprintf(ptrTrama->parametros+lon,"ido=%s\r",idordenador); // Identificador del ordenador
- lon+=sprintf(ptrTrama->parametros+lon,"npc=%s\r",nombreordenador); // Nombre del ordenador
- lon+=sprintf(ptrTrama->parametros+lon,"idc=%s\r",idcentro); // Identificador del centro
- lon+=sprintf(ptrTrama->parametros+lon,"ida=%s\r",idaula); // Identificador del aula
-
- if (!mandaTrama(socket_c,ptrTrama)) {
- errorLog(modulo,26,FALSE);
- return (FALSE);
- }
- return(TRUE);
-}
-// ********************************************************************************************************
-// PROGRAMA PRINCIPAL (CLIENTE)
-// ********************************************************************************************************
-int main(int argc, char *argv[])
-{
- TRAMA *ptrTrama;
- char modulo[] = "main()";
-
- ptrTrama=(TRAMA *)reservaMemoria(sizeof(TRAMA));
- if (ptrTrama == NULL) { // No hay memoria suficiente para el bufer de las tramas
- errorLog(modulo, 3, FALSE);
- exit(EXIT_FAILURE);
- }
- /*--------------------------------------------------------------------------------------------------------
- Validación de parámetros de ejecución y fichero de configuración
- ---------------------------------------------------------------------------------------------------------*/
- if (!validacionParametros(argc, argv,3)) // Valida parámetros de ejecución
- exit(EXIT_FAILURE);
-
- if (!tomaConfiguracion(szPathFileCfg)) // Toma parametros de configuración
- exit(EXIT_FAILURE);
- /*--------------------------------------------------------------------------------------------------------
- Carga catálogo de funciones que procesan las tramas
- ---------------------------------------------------------------------------------------------------------*/
- int cf = 0;
-
- strcpy(tbfuncionesClient[cf].nf, "RESPUESTA_AutoexecCliente");
- tbfuncionesClient[cf++].fptr = &RESPUESTA_AutoexecCliente;
-
- strcpy(tbfuncionesClient[cf].nf, "RESPUESTA_InclusionCliente");
- tbfuncionesClient[cf++].fptr = &RESPUESTA_InclusionCliente;
-
- strcpy(tbfuncionesClient[cf].nf, "NoComandosPtes");
- tbfuncionesClient[cf++].fptr = &NoComandosPtes;
-
- strcpy(tbfuncionesClient[cf].nf, "Actualizar");
- tbfuncionesClient[cf++].fptr = &Actualizar;
-
- strcpy(tbfuncionesClient[cf].nf, "Purgar");
- tbfuncionesClient[cf++].fptr = &Purgar;
-
- strcpy(tbfuncionesClient[cf].nf, "ConsolaRemota");
- tbfuncionesClient[cf++].fptr = &ConsolaRemota;
-
- strcpy(tbfuncionesClient[cf].nf, "Sondeo");
- tbfuncionesClient[cf++].fptr = &Sondeo;
-
- strcpy(tbfuncionesClient[cf].nf, "Arrancar");
- tbfuncionesClient[cf++].fptr = &Arrancar;
-
- strcpy(tbfuncionesClient[cf].nf, "Apagar");
- tbfuncionesClient[cf++].fptr = &Apagar;
-
- strcpy(tbfuncionesClient[cf].nf, "Reiniciar");
- tbfuncionesClient[cf++].fptr = &Reiniciar;
-
- strcpy(tbfuncionesClient[cf].nf, "IniciarSesion");
- tbfuncionesClient[cf++].fptr = &IniciarSesion;
-
- strcpy(tbfuncionesClient[cf].nf, "CrearImagen");
- tbfuncionesClient[cf++].fptr = &CrearImagen;
-
- strcpy(tbfuncionesClient[cf].nf, "RestaurarImagen");
- tbfuncionesClient[cf++].fptr = &RestaurarImagen;
-
- strcpy(tbfuncionesClient[cf].nf, "Configurar");
- tbfuncionesClient[cf++].fptr = &Configurar;
-
- strcpy(tbfuncionesClient[cf].nf, "EjecutarScript");
- tbfuncionesClient[cf++].fptr = &EjecutarScript;
-
- strcpy(tbfuncionesClient[cf].nf, "InventarioHardware");
- tbfuncionesClient[cf++].fptr = &InventarioHardware;
-
- strcpy(tbfuncionesClient[cf].nf, "InventarioSoftware");
- tbfuncionesClient[cf++].fptr = &InventarioSoftware;
-
- /*--------------------------------------------------------------------------------------------------------
- Toma dirección IP del cliente
- ---------------------------------------------------------------------------------------------------------*/
- if(!tomaIPlocal()){ // Error al recuperar la IP local
- errorLog(modulo,0,FALSE);
- exit(EXIT_FAILURE);
- }
- /*--------------------------------------------------------------------------------------------------------
- Inicio de sesión
- ---------------------------------------------------------------------------------------------------------*/
- infoLog(1); // Inicio de sesión
- infoLog(3); // Abriendo sesión en el servidor de Administración;
- /*--------------------------------------------------------------------------------------------------------
- Inclusión del cliente en el sistema
- ---------------------------------------------------------------------------------------------------------*/
- if(!inclusionCliente(ptrTrama)){ // Ha habido algún problema al abrir sesión
- errorLog(modulo,0,FALSE);
- exit(EXIT_FAILURE);
- }
- infoLog(4); // Cliente iniciado
-
- /*--------------------------------------------------------------------------------------------------------
- Procesamiento de la cache
- ---------------------------------------------------------------------------------------------------------*/
- infoLog(23); // Abriendo sesión en el servidor de Administración;
- if(!cuestionCache(cache)){
- errorLog(modulo,0,FALSE);
- exit(EXIT_FAILURE);
- }
- /*--------------------------------------------------------------------------------------------------------
- Ejecución del autoexec
- ---------------------------------------------------------------------------------------------------------*/
- if(atoi(idproautoexec)>0){ // Ejecución de procedimiento Autoexec
- infoLog(5);
- if(!autoexecCliente(ptrTrama)){ // Ejecución fichero autoexec
- errorLog(modulo,0,FALSE);
- exit(EXIT_FAILURE);
- }
- }
- /*--------------------------------------------------------------------------------------------------------
- Comandos pendientes
- ---------------------------------------------------------------------------------------------------------*/
- infoLog(6); // Procesa comandos pendientes
- if(!comandosPendientes(ptrTrama)){ // Ejecución de acciones pendientes
- errorLog(modulo,0,FALSE);
- exit(EXIT_FAILURE);
- }
- infoLog(7); // Acciones pendientes procesadas
- /*--------------------------------------------------------------------------------------------------------
- Bucle de recepción de comandos
- ---------------------------------------------------------------------------------------------------------*/
- muestraMenu();
- procesaComandos(ptrTrama); // Bucle para procesar comandos interactivos
- /*--------------------------------------------------------------------------------------------------------
- Fin de la sesión
- ---------------------------------------------------------------------------------------------------------*/
- exit(EXIT_SUCCESS);
-}
+// ********************************************************************************************************
+// Cliernte: ogAdmClient
+// Autor: Jos Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creacin: Marzo-2010
+// Fecha ltima modificacin: Abril-2010
+// Nombre del fichero: ogAdmClient.c
+// Descripcin :Este fichero implementa el cliente general del sistema
+// ********************************************************************************************************
+
+#include "ogAdmClient.h"
+#include "ogAdmLib.c"
+//________________________________________________________________________________________________________
+// Funcin: tomaConfiguracion
+//
+// Descripcin:
+// Lee el fichero de configuracin del servicio
+// Parmetros:
+// filecfg : Ruta completa al fichero de configuracin
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//________________________________________________________________________________________________________
+BOOLEAN tomaConfiguracion(char* filecfg)
+{
+ char modulo[] = "tomaConfiguracion()";
+
+ if (filecfg == NULL || strlen(filecfg) == 0) {
+ errorLog(modulo, 1, FALSE); // Fichero de configuracin del cliente vaco
+ return (FALSE);
+ }
+ FILE *fcfg;
+ int lSize;
+ char * buffer, *lineas[MAXPRM], *dualparametro[2];
+ int i, numlin, resul;
+
+ fcfg = fopen(filecfg, "rt");
+ if (fcfg == NULL) {
+ errorLog(modulo, 2, FALSE); // No existe fichero de configuracin del cliente
+ return (FALSE);
+ }
+
+ fseek(fcfg, 0, SEEK_END);
+ lSize = ftell(fcfg); // Obtiene tamao del fichero.
+ rewind(fcfg);
+ buffer = (char*) reservaMemoria(lSize+1); // Toma memoria para el buffer de lectura.
+ if (buffer == NULL) { // No hay memoria suficiente para el buffer
+ errorLog(modulo, 3, FALSE);
+ return (FALSE);
+ }
+ lSize=fread(buffer, 1, lSize, fcfg); // Lee contenido del fichero
+ buffer[lSize]=CHARNULL;
+ fclose(fcfg);
+
+ /* Inicializar variables globales */
+ servidoradm[0]=CHARNULL;
+ puerto[0] = CHARNULL;
+ pathinterface[0]=CHARNULL;
+ urlmenu[0]=CHARNULL;
+ urlmsg[0]=CHARNULL;
+
+ numlin = splitCadena(lineas, buffer, '\n');
+ for (i = 0; i < numlin; i++) {
+ splitCadena(dualparametro, lineas[i], '=');
+
+ resul = strcmp(StrToUpper(dualparametro[0]), "SERVIDORADM");
+ if (resul == 0)
+ strcpy(servidoradm, dualparametro[1]);
+
+ resul = strcmp(StrToUpper(dualparametro[0]), "PUERTO");
+ if (resul == 0)
+ strcpy(puerto, dualparametro[1]);
+
+ resul = strcmp(StrToUpper(dualparametro[0]), "PATHINTERFACE");
+ if (resul == 0)
+ strcpy(pathinterface, dualparametro[1]);
+
+ resul = strcmp(StrToUpper(dualparametro[0]), "URLMENU");
+ if (resul == 0)
+ strcpy(urlmenu, dualparametro[1]);
+
+ resul = strcmp(StrToUpper(dualparametro[0]), "URLMSG");
+ if (resul == 0)
+ strcpy(urlmsg, dualparametro[1]);
+ }
+
+ if (servidoradm[0] == CHARNULL) {
+ liberaMemoria(buffer);
+ errorLog(modulo,4, FALSE); // Falta parmetro SERVIDORADM
+ return (FALSE);
+ }
+
+ if (puerto[0] == CHARNULL) {
+ liberaMemoria(buffer);
+ errorLog(modulo,5, FALSE); // Falta parmetro PUERTO
+ return (FALSE);
+ }
+ if (pathinterface[0] == CHARNULL) {
+ liberaMemoria(buffer);
+ errorLog(modulo,56, FALSE); // Falta parmetro PATHINTERFACE
+ return (FALSE);
+ }
+
+ if (urlmenu[0] == CHARNULL) {
+ liberaMemoria(buffer);
+ errorLog(modulo,89, FALSE); // Falta parmetro URLMENU
+ return (FALSE);
+ }
+ if (urlmsg[0] == CHARNULL) {
+ liberaMemoria(buffer);
+ errorLog(modulo,90, FALSE); // Falta parmetro URLMSG
+ return (FALSE);
+ }
+ liberaMemoria(buffer);
+ return (TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: FinterfaceAdmin
+//
+// Descripcin:
+// Esta funcin es la puerta de comunicacin entre el mdulo de administracin y el motor de clonacin.
+// La Aplicacin de administracin utiliza una interface para ejecutar funciones del motor de clonacin;
+// esta interface llamar a la API del motor con lo que cambiando el comportamiento de esta interface
+// podremos hacer llamadas a otras API de clonacin y de esta manera probar distintos motores.
+//
+// Parmetros:
+// - script: Nombre del mdulo,funcin o script de la interface
+// - parametros: Parmetros que se le pasarn a la interface
+// - salida: Recoge la salida que genera la llamada a la interface
+
+// Devuelve:
+// Cdigo de error de la ejecucin al mdulo , funcin o script de la interface
+//
+// Especificaciones:
+// El parmetro salida recoge la salida desde un fichero que se genera en la ejecucin del script siempre que
+// sea distinto de NULL, esto es, si al llamar a la funcin este parmetro es NULL no se recoger dicha salida.
+// Este fichero tiene una ubicacin fija: /tmp/_retinterface
+//______________________________________________________________________________________________________
+
+int FinterfaceAdmin( char *script,char* parametros,char* salida)
+{
+ FILE *f;
+ int lSize,nargs,i,resul;
+ char msglog[LONSTD],*argumentos[MAXARGS];
+ char modulo[] = "FinterfaceAdmin()";
+
+
+ if (ndebug>= DEBUG_MEDIO) {
+ sprintf(msglog, "%s:%s", tbMensajes[8], script);
+ infoDebug(msglog);
+ }
+
+ /* Crea matriz de los argumentos */
+ nargs=splitCadena(argumentos,parametros,32);
+ for(i=nargs;i<MAXARGS;i++){
+ argumentos[i]=NULL;
+ }
+
+ /* Muestra matriz de los argumentos */
+ for(i=0;i<nargs;i++){
+ if (ndebug>= DEBUG_ALTO) {
+ sprintf(msglog, "%s: #%d-%s", tbMensajes[9],i+1,argumentos[i]);
+ infoDebug(msglog);
+ }
+ }
+ /* Elimina fichero de retorno */
+ if(salida!=(char*)NULL){
+ f = fopen("/tmp/_retinterface_","w" );
+ if (f==NULL){ // Error de eliminacin
+ scriptLog(modulo,10);
+ resul=8;
+ scriptLog(modulo,resul);
+ return(resul);
+ }
+ fclose(f);
+ }
+ /* Compone linea de comando */
+ if(parametros){
+ strcat(script," ");
+ strcat(script,parametros);
+ }
+ /* LLamada funcin interface */
+ resul=system(script);
+ if(resul){
+ scriptLog(modulo,10);
+ scriptLog(modulo,resul);
+ return(resul);
+ }
+ /* Lee fichero de retorno */
+ if(salida!=(char*)NULL){
+ f = fopen("/tmp/_retinterface_","rb" );
+ if (f==NULL){ // Error de apertura
+ scriptLog(modulo,10);
+ resul=9;
+ scriptLog(modulo,resul);
+ return(resul);
+ }
+ else{
+ fseek (f ,0,SEEK_END); // Obtiene tamao del fichero.
+ lSize = ftell (f);
+ rewind (f);
+ if(lSize>LONGITUD_SCRIPTSALIDA){
+ scriptLog(modulo,10);
+ resul=11;
+ scriptLog(modulo,resul);
+ return(resul);
+ }
+ fread (salida,1,lSize,f); // Lee contenido del fichero
+ rTrim(salida);
+ fclose(f);
+ }
+ }
+ /* Muestra informacin de retorno */
+ if(salida!=(char*)NULL){
+ if(ndebug>2){
+ sprintf(msglog,"Informacin devuelta %s",salida);
+ infoDebug(msglog);
+ }
+ }
+ return(resul);
+}
+//______________________________________________________________________________________________________
+// Funcin: interfaceAdmin
+//
+// Descripcin:
+// Esta funcin es la puerta de comunicacin entre el mdulo de administracin y el motor de clonacin.
+// La Aplicacin de administracin utiliza una interface para ejecutar funciones del motor de clonacin;
+// esta interface llamar a la API del motor con lo que cambiando el comportamiento de esta interface
+// podremos hacer llamadas a otras API de clonacin y de esta manera probar distintos motores.
+//
+// Parmetros:
+// - script: Nombre del mdulo,funcin o script de la interface
+// - parametros: Parmetros que se le pasarn a la interface
+// - salida: Recoge la salida que genera la llamada a la interface
+
+// Devuelve:
+// Cdigo de error de la ejecucin al mdulo , funcin o script de la interface
+//
+// Especificaciones:
+// El parmetro salida recoge la salida desde el procedimiento hijo que se genera en la ejecucin de ste
+// siempre que sea distinto de NULL, esto es, si al llamar a la funcin este parmetro es NULL no se
+// recoger dicha salida.
+//______________________________________________________________________________________________________
+
+int interfaceAdmin( char *script,char* parametros,char* salida)
+{
+ int descr[2]; /* Descriptores de E y S de la turbera */
+ int bytesleidos; /* Bytes leidos en el mensaje */
+ int estado;
+ pid_t pid;
+ char buffer[LONBLK]; // Buffer de lectura de fichero
+ pipe (descr);
+ int i,nargs,resul;
+ int lon; // Longitud de cadena
+ char msglog[LONSUC]; // Mensaje de registro de sucesos
+ char *argumentos[MAXARGS];
+ char modulo[] = "interfaceAdmin()";
+ if (ndebug>= DEBUG_MEDIO) {
+ sprintf(msglog, "%s:%s", tbMensajes[8], script);
+ infoDebug(msglog);
+ }
+
+ /* Crea matriz de los argumentos */
+ nargs=splitCadena(argumentos,parametros,32);
+ for(i=nargs;i<MAXARGS;i++){
+ argumentos[i]=NULL;
+ }
+ /* Muestra matriz de los argumentos */
+ for(i=1;i<nargs;i++){
+ if (ndebug>= DEBUG_ALTO) {
+ // Truncar la cadena si es mayor que el tamao de la lnea de log.
+ sprintf(msglog, "%s: #%d-", tbMensajes[9], i+1);
+ lon = strlen (msglog);
+ if (lon + strlen (argumentos[i]) < LONSUC) {
+ strcat (msglog, argumentos[i]);
+ }
+ else
+ {
+ strncat (msglog, argumentos[i], LONSUC - lon - 4);
+ strcat (msglog, "...");
+ }
+ infoDebug(msglog);
+ }
+ }
+
+ if((pid=fork())==0)
+ {
+ //_______________________________________________________________
+
+ /* Proceso hijo que ejecuta la funcin de interface */
+
+ close (descr[LEER]);
+ dup2 (descr[ESCRIBIR], 1);
+ close (descr[ESCRIBIR]);
+ resul=execv(script,argumentos);
+ //resul=execlp (script, script, argumentos[0],argumentos[1],NULL);
+ exit(resul);
+
+ /* Fin de proceso hijo */
+ //_______________________________________________________________
+ }
+ else
+ {
+ //_______________________________________________________________
+
+ /* Proceso padre que espera la ejecucin del hijo */
+
+ if (pid ==-1){ // Error en la creacin del proceso hijo
+ scriptLog(modulo,10);
+ resul=13;
+ scriptLog(modulo,resul);
+ return(resul);
+ }
+ close (descr[ESCRIBIR]);
+ bytesleidos = read (descr[LEER], buffer, LONBLK-1);
+ while(bytesleidos>0){
+ if(salida!=(char*)NULL){ // Si se solicita retorno de informacin...
+ buffer[bytesleidos]='\0';
+ // Error si se supera el tamao mximo de cadena de salida.
+ if(strlen(buffer)+strlen(salida)>LONGITUD_SCRIPTSALIDA){
+ scriptLog(modulo,10);
+ resul=11;
+ scriptLog(modulo,resul);
+ return(resul);
+ }
+ rTrim(buffer);
+ strcat(salida,buffer);
+ }
+ bytesleidos = read (descr[LEER], buffer, LONBLK-1);
+ }
+ close (descr[LEER]);
+ //kill(pid,SIGQUIT);
+ waitpid(pid,&estado,0);
+ resul=WEXITSTATUS(estado);
+ if(resul){
+ scriptLog(modulo,10);
+ scriptLog(modulo,resul);
+ return(resul);
+ }
+ /* Fin de proceso padre */
+ //_______________________________________________________________
+ }
+
+ /* Muestra informacin de retorno */
+ if(salida!=(char*)NULL){
+ if(ndebug>2){
+ // Truncar la cadena si es mayor que el tamao de la lnea de log.
+ strcpy(msglog,"Informacion devuelta ");
+ lon = strlen (msglog);
+ if (lon + strlen (salida) < LONSUC) {
+ strcat (msglog, salida);
+ }
+ else
+ {
+ strncat (msglog, salida, LONSUC-lon-4);
+ strcat (msglog, "...");
+ }
+ infoDebug(msglog);
+ }
+ }
+ return(resul);
+}
+//______________________________________________________________________________________________________
+// Funcin: scriptLog
+//
+// Descripcin:
+// Registra los sucesos de errores de scripts en el fichero de log
+// Parametros:
+// - modulo: Mdulo donde se produjo el error
+// - coderr : Cdigo del mensaje de error del script
+//______________________________________________________________________________________________________
+void scriptLog(const char *modulo,int coderr)
+{
+ char msglog[LONSUC];
+
+ if(coderr<MAXERRORSCRIPT)
+ errorInfo(modulo,tbErroresScripts[coderr]); // Se ha producido algn error registrado
+ else{
+ sprintf(msglog,"%s: %d",tbErroresScripts[MAXERRORSCRIPT],coderr);
+ errorInfo(modulo,msglog);
+ }
+}
+//______________________________________________________________________________________________________
+// Funcin: TomaIPlocal
+//
+// Descripcin:
+// Recupera la IP local
+// Parmetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// Especificaciones:
+// En caso de no encontrar la IP o generarse algn error la IP local sera 0.0.0.0
+//______________________________________________________________________________________________________
+BOOLEAN tomaIPlocal()
+{
+ char modulo[] = "tomaIPlocal()";
+
+ // Para debug
+ //strcpy(IPlocal,"10.1.15.203");
+ //return(TRUE);
+
+ sprintf(interface,"%s/getIpAddress",pathinterface);
+ herror=interfaceAdmin(interface,NULL,IPlocal);
+ if(herror){
+ errorLog(modulo,85,FALSE);
+ return(FALSE);
+ }
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+//
+// Funcin: cuestionCache
+//
+// Descripcin:
+// Procesa la cache en caso de existir.
+// Parmetros:
+// tam : Tamao de la cache
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN cuestionCache(char* tam)
+{
+ return(TRUE);
+ //>>>>>>>>>>>>>>>>>>>>>>>>>>
+ char msglog[LONSTD];
+ char modulo[] = "cuestionCache()";
+
+ sprintf(interface,"%s/%s",pathinterface,"procesaCache");
+ sprintf(parametros,"%s %s","procesaCache",tam);
+
+ herror=interfaceAdmin(interface,parametros,NULL);
+ if(herror){
+ sprintf(msglog,"%s",tbErrores[88]);
+ errorInfo(modulo,msglog);
+ return(FALSE);
+ }
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: cargaPaginaWeb
+//
+// Descripcin:
+// Muestra una pgina web usando el browser
+// Parmetros:
+// urp: Direccin url de la pgina
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// ________________________________________________________________________________________________________
+int cargaPaginaWeb(char *url)
+{
+ int resul=0;
+ char* argumentos[4];
+ char modulo[] = "cargaPaginaWeb()";
+
+ if(pidbash>0)
+ kill(pidbash,SIGQUIT); // Destruye el proceso hijo del proceso bash si existiera una conmutacin
+
+ if(pidbrowser>0)
+ kill(pidbrowser,SIGQUIT); // Destruye el proceso hijo anterior y se queda slo el actual
+
+ sprintf(interface,"/opt/opengnsys/bin/browser");
+ sprintf(parametros,"browser -qws %s",url);
+
+ splitCadena(argumentos,parametros,' '); // Crea matriz de los argumentos del scripts
+ argumentos[3]=NULL;
+ if((pidbrowser=fork())==0){
+ /* Proceso hijo que ejecuta el script */
+ resul=execv(interface,argumentos);
+ exit(resul);
+ }
+ else {
+ if (pidbrowser ==-1){
+ scriptLog(modulo,10);
+ resul=13;
+ scriptLog(modulo,resul);
+ return(resul);
+ }
+ }
+ return(resul);
+}
+//________________________________________________________________________________________________________
+// Funcin: muestraMenu
+//
+// Descripcin:
+// Muestra el menu inicial del cliente
+// Parmetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//________________________________________________________________________________________________________
+void muestraMenu()
+{
+ cargaPaginaWeb(urlmenu);
+}
+//______________________________________________________________________________________________________
+// Funcin: muestraMensaje
+//
+// Descripcin:
+// Muestra un mensaje en pantalla
+// Parmetros:
+// - idx: Indice del mensaje
+// - msg: Descripcin Mensaje
+// ________________________________________________________________________________________________________
+void muestraMensaje(int idx,char*msg)
+{
+ char *msgpan,url[250];
+
+ if(msg){
+ msgpan=URLEncode(msg);
+ sprintf(url,"%s?msg=%s",urlmsg,msgpan); // Url de la pgina de mensajes
+ liberaMemoria(msgpan);
+ }
+ else
+ sprintf(url,"%s?idx=%d",urlmsg,idx); // Url de la pgina de mensajes
+ cargaPaginaWeb(url);
+}
+//______________________________________________________________________________________________________
+// Funcin: InclusionCliente
+// Descripcin:
+// Abre una sesin en el servidor de administracin y registra al cliente en el sistema
+// Parmetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN inclusionCliente(TRAMA* ptrTrama)
+{
+ int lon; // Longitud de cadena
+ char msglog[LONSUC]; // Mensaje de registro de sucesos
+ char *cfg; // Datos de configuracin
+ SOCKET socket_c;
+ char modulo[] = "inclusionCliente()";
+
+ cfg=LeeConfiguracion();
+
+ if(!cfg){ // No se puede recuperar la configuracin del cliente
+ errorLog(modulo,36,FALSE);
+ errorLog(modulo,37,FALSE);
+ return(FALSE);
+ }
+ if (ndebug>= DEBUG_ALTO) {
+ // Truncar la cadena si es mayor que el tamao de la lnea de log.
+ sprintf(msglog, "%s", tbMensajes[14]);
+ lon = strlen (msglog);
+ if (lon + strlen (cfg) < LONSUC) {
+ strcat (msglog, cfg);
+ }
+ else
+ {
+ strncat (msglog, cfg, LONSUC - lon - 4);
+ strcat (msglog, "...");
+ }
+ infoDebug(msglog);
+ }
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=InclusionCliente\r"); // Nombre de la funcin a ejecutar en el servidor
+ lon+=sprintf(ptrTrama->parametros+lon,"cfg=%s\r",cfg); // Configuracin de los Sistemas Operativos del cliente
+ liberaMemoria(cfg);
+
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_PETICION)){
+ errorLog(modulo,37,FALSE);
+ return(FALSE);
+ }
+ ptrTrama=recibeMensaje(&socket_c);
+ if(!ptrTrama){
+ errorLog(modulo,45,FALSE);
+ return(FALSE);
+ }
+
+ close(socket_c);
+
+ if(!gestionaTrama(ptrTrama)){ // Anlisis de la trama
+ errorLog(modulo,39,FALSE);
+ return(FALSE);
+ }
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: RESPUESTA_InclusionCliente
+//
+// Descripcin:
+// Respuesta del servidor de administracin a la peticin de inicio
+// enviando los datos identificativos del cliente y otras configuraciones
+// Parmetros:
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parmetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN RESPUESTA_InclusionCliente(TRAMA* ptrTrama)
+{
+ char* res;
+ char modulo[] = "RESPUESTA_InclusionCliente()";
+
+ res=copiaParametro("res",ptrTrama); // Resultado del proceso de inclusin
+ if(atoi(res)==0){ // Error en el proceso de inclusin
+ liberaMemoria(res);
+ errorLog(modulo,41,FALSE);
+ return (FALSE);
+ }
+ liberaMemoria(res);
+
+ idordenador=copiaParametro("ido",ptrTrama); // Identificador del ordenador
+ nombreordenador=copiaParametro("npc",ptrTrama); // Nombre del ordenador
+ cache=copiaParametro("che",ptrTrama); // Tamao de la cach reservada al cliente
+ idproautoexec=copiaParametro("exe",ptrTrama); // Procedimento de inicio (Autoexec)
+ idcentro=copiaParametro("idc",ptrTrama); // Identificador de la Unidad Organizativa
+ idaula=copiaParametro("ida",ptrTrama); // Identificador del aula
+
+ if(idordenador==NULL || nombreordenador==NULL){
+ errorLog(modulo,40,FALSE);
+ return (FALSE);
+ }
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+//
+// Funcin: LeeConfiguracion
+// Descripcin:
+// Abre una sesin en el servidor de administracin y registra al cliente en el sistema
+// Parmetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+
+char* LeeConfiguracion()
+{
+ char* parametroscfg;
+ char modulo[] = "LeeConfiguracion()";
+
+ // Reservar memoria para los datos de cofiguracin.
+ parametroscfg=(char*)reservaMemoria(LONGITUD_SCRIPTSALIDA);
+ if(!parametroscfg){
+ errorLog(modulo,3,FALSE);
+ return(NULL);
+ }
+ // Ejecutar script y obtener datos.
+ sprintf(interface,"%s/%s",pathinterface,"getConfiguration");
+ herror=interfaceAdmin(interface,NULL,parametroscfg);
+
+ if(herror){ // No se puede recuperar la configuracin del cliente
+ liberaMemoria(parametroscfg);
+ errorLog(modulo,36,FALSE);
+ return(NULL);
+ }
+ return(parametroscfg);
+}
+//________________________________________________________________________________________________________
+// Funcin: autoexecCliente
+//
+// Descripcin:
+// Solicita procedimiento de autoexec para el cliebnte
+// Parmetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//________________________________________________________________________________________________________
+BOOLEAN autoexecCliente(TRAMA* ptrTrama)
+{
+ SOCKET socket_c;
+ char modulo[] = "autoexecCliente()";
+
+ initParametros(ptrTrama,0);
+ sprintf(ptrTrama->parametros,"nfn=AutoexecCliente\rexe=%s\r",idproautoexec);
+
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_PETICION)){
+ errorLog(modulo,42,FALSE);
+ return(FALSE);
+ }
+ ptrTrama=recibeMensaje(&socket_c);
+ if(!ptrTrama){
+ errorLog(modulo,45,FALSE);
+ return(FALSE);
+ }
+
+ close(socket_c);
+
+ if(!gestionaTrama(ptrTrama)){ // Anlisis de la trama
+ errorLog(modulo,39,FALSE);
+ return(FALSE);
+ }
+
+ return(TRUE);
+}
+//________________________________________________________________________________________________________
+// Funcin: autoexecCliente
+//
+// Descripcin:
+// Ejecuta un script de autoexec personalizado en todos los inicios para el cliente
+// Parmetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//________________________________________________________________________________________________________
+BOOLEAN RESPUESTA_AutoexecCliente(TRAMA* ptrTrama)
+{
+ SOCKET socket_c;
+ char *res,*nfl;
+ char modulo[] = "RESPUESTA_AutoexecCliente()";
+
+ res=copiaParametro("res",ptrTrama);
+ if(atoi(res)==0){ // Error en el proceso de autoexec
+ liberaMemoria(res);
+ return (FALSE);
+ }
+ liberaMemoria(res);
+
+ nfl=copiaParametro("nfl",ptrTrama);
+ initParametros(ptrTrama,0);
+ sprintf(ptrTrama->parametros,"nfn=enviaArchivo\rnfl=%s\r",nfl);
+ liberaMemoria(nfl);
+
+ /* Enva peticin */
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_PETICION)){
+ errorLog(modulo,42,FALSE);
+ return(FALSE);
+ }
+ /* Nombre del archivo destino (local)*/
+ char fileautoexec[LONPRM];
+ sprintf(fileautoexec,"/tmp/_autoexec_%s",IPlocal);
+
+ /* Recibe archivo */
+ if(!recArchivo(&socket_c,fileautoexec)){
+ errorLog(modulo,58, FALSE);
+ close(socket_c);
+ return(FALSE);
+ }
+
+ close(socket_c);
+
+ /* Ejecuta archivo */
+ ejecutaArchivo(fileautoexec,ptrTrama);
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: comandosPendientes
+//
+// Descripcin:
+// Bsqueda de acciones pendientes en el servidor de administracin
+// Parmetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN comandosPendientes(TRAMA* ptrTrama)
+{
+ SOCKET socket_c;
+ char modulo[] = "comandosPendientes()";
+
+ CMDPTES=TRUE;
+ initParametros(ptrTrama,0);
+
+ while(CMDPTES){
+ sprintf(ptrTrama->parametros,"nfn=ComandosPendientes\r");
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_PETICION)){
+ errorLog(modulo,42,FALSE);
+ return(FALSE);
+ }
+ ptrTrama=recibeMensaje(&socket_c);
+ if(!ptrTrama){
+ errorLog(modulo,45,FALSE);
+ return(FALSE);
+ }
+
+ close(socket_c);
+
+ if(!gestionaTrama(ptrTrama)){ // Anlisis de la trama
+ errorLog(modulo,39,FALSE);
+ return(FALSE);
+ }
+ }
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: NoComandosPtes
+//
+// Descripcin:
+// Conmuta el switch de los comandos pendientes y lo pone a false
+// Parmetros:
+// - ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE siempre
+// Especificaciones:
+// Cuando se ejecuta esta funcin se sale del bucle que recupera los comandos pendientes en el
+// servidor y el cliente pasa a a estar disponible para recibir comandos desde el ste.
+//______________________________________________________________________________________________________
+BOOLEAN NoComandosPtes(TRAMA* ptrTrama)
+{
+ CMDPTES=FALSE; // Corta el bucle de comandos pendientes
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: ProcesaComandos
+//
+// Descripcin:
+// Espera comando desde el Servidor de Administracin para ejecutarlos
+// Parmetros:
+// Ninguno
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// ________________________________________________________________________________________________________
+void procesaComandos(TRAMA* ptrTrama)
+{
+ int lon;
+ SOCKET socket_c;
+ char modulo[] = "procesaComandos()";
+
+ initParametros(ptrTrama,0);
+ while(TRUE){
+ lon=sprintf(ptrTrama->parametros,"nfn=DisponibilidadComandos\r");
+ lon+=sprintf(ptrTrama->parametros+lon,"tpc=%s\r",CLIENTE_OPENGNSYS); // Activar disponibilidad
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_INFORMACION)){
+ errorLog(modulo,43,FALSE);
+ return;
+ }
+ infoLog(19); // Disponibilidad de cliente activada
+ ptrTrama=recibeMensaje(&socket_c);
+ if(!ptrTrama){
+ errorLog(modulo,46,FALSE);
+ return;
+ }
+
+ close(socket_c);
+
+ if(!gestionaTrama(ptrTrama)){ // Anlisis de la trama
+ errorLog(modulo,39,FALSE);
+ return;
+ }
+ if(!comandosPendientes(ptrTrama)){
+ errorLog(modulo,42,FALSE);
+ }
+ }
+}
+//______________________________________________________________________________________________________
+// Funcin: Actualizar
+//
+// Descripcin:
+// Actualiza los datos de un ordenador como si volviera a solicitar la entrada
+// en el sistema al servidor de administracin
+// Parmetros:
+// ptrTrama: contenido del mensajede
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN Actualizar(TRAMA* ptrTrama)
+{
+ char msglog[LONSTD]; // Mensaje de log
+ char *cfg; // Cadena de datos de configuracin
+ int lon; // Longitud de cadena
+ char modulo[] = "Actualizar()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ muestraMensaje(1,NULL);
+ if(!comandosPendientes(ptrTrama)){
+ errorLog(modulo,84,FALSE);
+ return(FALSE);
+ }
+
+ cfg=LeeConfiguracion();
+ herror=0;
+ if(!cfg){ // No se puede recuperar la configuracin del cliente
+ errorLog(modulo,36,FALSE);
+ herror=3;
+ }
+ // Envia Configuracion al servidor
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Configurar");
+ lon+=sprintf(ptrTrama->parametros+lon,"cfg=%s\r",cfg); // Configuracin de los Sistemas Operativos del cliente
+ respuestaEjecucionComando(ptrTrama,herror,0);
+
+ muestraMenu();
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: Purgar
+//
+// Descripcin:
+// Detiene la ejecucin del browser
+// Parmetros:
+// ptrTrama: contenido del mensajede
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+int Purgar(TRAMA* ptrTrama)
+{
+
+ exit(EXIT_SUCCESS);
+}
+//______________________________________________________________________________________________________
+// Funcin: Sondeo
+//
+// Descripcin:
+// Enva al servidor una confirmacin de que est dentro del sistema
+// Parmetros:
+// ptrTrama: contenido del mensajede
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN Sondeo(TRAMA* ptrTrama)
+{
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: ConsolaRemota
+//
+// Descripcin:
+// Ejecuta un comando de la Shell y envia el eco al servidor (Consola remota)
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN ConsolaRemota(TRAMA* ptrTrama)
+{
+ SOCKET socket_c;
+ char *nfn,*scp,*aux,ecosrc[LONPRM],ecodst[LONPRM],msglog[LONSTD];;
+ char modulo[] = "ConsolaRemota()";
+
+ /* Nombre del archivo de script */
+ char filescript[LONPRM];
+ sprintf(filescript,"/tmp/_script_%s",IPlocal);
+
+ aux=copiaParametro("scp",ptrTrama);
+ scp=URLDecode(aux);
+ escribeArchivo(filescript,scp);
+ liberaMemoria(aux);
+ liberaMemoria(scp);
+
+ nfn=copiaParametro("nfn",ptrTrama);
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(ecosrc,"/tmp/_econsola_%s",IPlocal);
+ sprintf(parametros,"%s %s %s",nfn,filescript,ecosrc);
+ herror=interfaceAdmin(interface,parametros,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ }
+ else{
+ /* Enva fichero de inventario al servidor */
+ sprintf(ecodst,"/tmp/_Seconsola_%s",IPlocal); // Nombre que tendra el archivo en el Servidor
+ initParametros(ptrTrama,0);
+ sprintf(ptrTrama->parametros,"nfn=recibeArchivo\rnfl=%s\r",ecodst);
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_COMANDO)){
+ errorLog(modulo,42,FALSE);
+ return(FALSE);
+ }
+ /* Espera seal para comenzar el envo */
+ liberaMemoria(ptrTrama);
+ recibeFlag(&socket_c,ptrTrama);
+ /* Enva archivo */
+ if(!sendArchivo(&socket_c,ecosrc)){
+ errorLog(modulo,57, FALSE);
+ herror=12; // Error de envo de fichero por la red
+ }
+ close(socket_c);
+ }
+ liberaMemoria(nfn);
+ return(TRUE);
+}
+//_____________________________________________________________________________________________________
+// Funcin: Comando
+//
+// Descripcin:
+// COmando personalizado enviado desde el servidor
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//_____________________________________________________________________________________________________
+BOOLEAN Comando(TRAMA* ptrTrama)
+{
+ char *ids,*nfn,msglog[LONSTD];
+ char modulo[] = "Comando()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ herror=interfaceAdmin(interface,NULL,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ }
+ /* Envia respuesta de ejecucucin del comando */
+ initParametros(ptrTrama,0);
+ sprintf(ptrTrama->parametros,"nfn=RESPUESTA_%s\r",nfn);
+ respuestaEjecucionComando(ptrTrama,herror,ids);
+ liberaMemoria(nfn);
+ liberaMemoria(ids);
+ return(TRUE);
+}
+//_____________________________________________________________________________________________________
+// Funcin: Arrancar
+//
+// Descripcin:
+// Responde a un comando de encendido por la red
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//_____________________________________________________________________________________________________
+BOOLEAN Arrancar(TRAMA* ptrTrama)
+{
+ int lon;
+ char *ids,msglog[LONSTD];
+ char modulo[] = "Arrancar()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+
+ ids=copiaParametro("ids",ptrTrama);
+
+ /* Envia respuesta de ejecucucin del script */
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Arrancar");
+ lon+=sprintf(ptrTrama->parametros+lon,"tpc=%s\r",CLIENTE_OPENGNSYS);
+ respuestaEjecucionComando(ptrTrama,0,ids);
+ liberaMemoria(ids);
+ return(TRUE);
+}
+//_____________________________________________________________________________________________________
+// Funcin: Apagar
+//
+// Descripcin:
+// Apaga el cliente
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//_____________________________________________________________________________________________________
+BOOLEAN Apagar(TRAMA* ptrTrama)
+{
+ char *ids,*nfn,msglog[LONSTD];
+ char modulo[] = "Apagar()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+
+ initParametros(ptrTrama,0);
+ sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Apagar");
+ respuestaEjecucionComando(ptrTrama,0,ids);
+
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ herror=interfaceAdmin(interface,NULL,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ liberaMemoria(nfn);
+ liberaMemoria(ids);
+ errorInfo(modulo,msglog);
+ return(FALSE);
+ }
+ liberaMemoria(nfn);
+ liberaMemoria(ids);
+ return(TRUE);
+}
+//_____________________________________________________________________________________________________
+// Funcin: Reiniciar
+//
+// Descripcin:
+// Apaga el cliente
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//_____________________________________________________________________________________________________
+BOOLEAN Reiniciar(TRAMA* ptrTrama)
+{
+ char *nfn,*ids,msglog[LONSTD];
+ char modulo[] = "Reiniciar()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+
+ initParametros(ptrTrama,0);
+ sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Reiniciar");
+ respuestaEjecucionComando(ptrTrama,0,ids);
+
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ herror=interfaceAdmin(interface,NULL,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ liberaMemoria(nfn);
+ liberaMemoria(ids);
+ errorInfo(modulo,msglog);
+ return(FALSE);
+ }
+ liberaMemoria(nfn);
+ liberaMemoria(ids);
+ return(TRUE);
+}
+//_____________________________________________________________________________________________________
+// Funcin: IniciarSesion
+//
+// Descripcin:
+// Inicia sesin en el Sistema Operativo de una de las particiones
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//_____________________________________________________________________________________________________
+BOOLEAN IniciarSesion(TRAMA* ptrTrama)
+{
+ char *nfn,*ids,*disk,*par,msglog[LONSTD];
+ char modulo[] = "IniciarSesion()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+ disk=copiaParametro("dsk",ptrTrama);
+ par=copiaParametro("par",ptrTrama);
+
+ initParametros(ptrTrama,0);
+ sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_IniciarSesion");
+ respuestaEjecucionComando(ptrTrama,0,ids);
+ liberaMemoria(ids);
+
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(parametros,"%s %s %s",nfn,disk,par);
+ liberaMemoria(par);
+
+ herror=interfaceAdmin(interface,parametros,NULL);
+
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ liberaMemoria(nfn);
+ errorInfo(modulo,msglog);
+ return(FALSE);
+ }
+ liberaMemoria(nfn);
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: CrearImagen
+//
+// Descripcin:
+// Crea una imagen de una particin
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN CrearImagen(TRAMA* ptrTrama)
+{
+ int lon;
+ char *nfn,*dsk,*par,*cpt,*idi,*ipr,*nci,*ids,msglog[LONSTD];
+ char modulo[] = "CrearImagen()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+
+ dsk=copiaParametro("dsk",ptrTrama); // Disco
+ par=copiaParametro("par",ptrTrama); // Nmero de particin
+ cpt=copiaParametro("cpt",ptrTrama); // Cdigo de la particin
+ idi=copiaParametro("idi",ptrTrama); // Identificador de la imagen
+ nci=copiaParametro("nci",ptrTrama); // Nombre cannico de la imagen
+ ipr=copiaParametro("ipr",ptrTrama); // Ip del repositorio
+
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+ muestraMensaje(7,NULL);
+
+ if(InventariandoSoftware(ptrTrama,FALSE,"InventarioSoftware")){ // Crea inventario Software previamente
+ muestraMensaje(2,NULL);
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(parametros,"%s %s %s %s %s",nfn,dsk,par,nci,ipr);
+ herror=interfaceAdmin(interface,parametros,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ muestraMensaje(10,NULL);
+ }
+ else
+ muestraMensaje(9,NULL);
+ }
+ else{
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ }
+
+ /* Envia respuesta de ejecucin de la funcin de interface */
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_CrearImagen");
+ lon+=sprintf(ptrTrama->parametros+lon,"idi=%s\r",idi); // Identificador de la imagen
+ lon+=sprintf(ptrTrama->parametros+lon,"par=%s\r",par); // Nmero de particin de donde se cre
+ lon+=sprintf(ptrTrama->parametros+lon,"cpt=%s\r",cpt); // Tipo o cdigo de particin
+ lon+=sprintf(ptrTrama->parametros+lon,"ipr=%s\r",ipr); // Ip del repositorio donde se aloj
+ respuestaEjecucionComando(ptrTrama,herror,ids);
+
+ liberaMemoria(dsk);
+ liberaMemoria(par);
+ liberaMemoria(cpt);
+ liberaMemoria(idi);
+ liberaMemoria(nci);
+ liberaMemoria(ipr);
+ liberaMemoria(nfn);
+ liberaMemoria(ids);
+
+ muestraMenu();
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: CrearImagenBasica
+//
+// Descripcin:
+// Crea una imagen bsica a travers dela sincronizacin
+// Parmetros:
+// ptrTrama: contenido del mensaje
+//
+// FDevuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN CrearImagenBasica(TRAMA* ptrTrama)
+{
+ int lon;
+ char *nfn,*dsk,*par,*cpt,*idi,*nci,*rti,*ipr,*msy,*whl,*eli,*cmp,*bpi,*cpc,*bpc,*nba,*ids,msglog[LONSTD];
+ char modulo[] = "CrearImagenBasica()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ nfn=copiaParametro("nfn",ptrTrama);
+ dsk=copiaParametro("dsk",ptrTrama); // Disco
+ par=copiaParametro("par",ptrTrama); // Nmero de particin
+ cpt=copiaParametro("cpt",ptrTrama); // Tipo de particin
+ idi=copiaParametro("idi",ptrTrama); // Identificador de la imagen
+ nci=copiaParametro("nci",ptrTrama); // Nombre cannico de la imagen
+ rti=copiaParametro("rti",ptrTrama); // Ruta de origen de la imagen
+ ipr=copiaParametro("ipr",ptrTrama); // Ip del repositorio
+
+ msy=copiaParametro("msy",ptrTrama); // Mtodo de sincronizacin
+
+ whl=copiaParametro("whl",ptrTrama); // Envo del fichero completo si hay diferencias
+ eli=copiaParametro("eli",ptrTrama); // Elimiar archivos en destino que no estn en origen
+ cmp=copiaParametro("cmp",ptrTrama); // Comprimir antes de enviar
+
+ bpi=copiaParametro("bpi",ptrTrama); // Borrar la imagen antes de crearla
+ cpc=copiaParametro("cpc",ptrTrama); // Copiar tambin imagen a la cache
+ bpc=copiaParametro("bpc",ptrTrama); // Borrarla de la cache antes de copiarla en ella
+ nba=copiaParametro("nba",ptrTrama); // No borrar archivos en destino
+
+ //muestraMensaje(7,NULL); // Creando Inventario Software
+ //if(InventariandoSoftware(ptrTrama,FALSE,"InventarioSoftware")){ // Crea inventario Software previamente
+ muestraMensaje(30,NULL);// Creando Imagen Bsica, por favor espere...
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(parametros,"%s %s %s %s %s %s%s%s %s%s%s%s %s %s",nfn,dsk,par,nci,ipr,whl,eli,cmp,bpi,cpc,bpc,nba,msy,rti);
+ herror=interfaceAdmin(interface,parametros,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ muestraMensaje(29,NULL);// Ha habido algn error en el proceso de creacin de imagen bsica
+ }
+ else
+ muestraMensaje(28,NULL);// El proceso de creacin de imagen bsica ha terminado correctamente
+ //}
+ //else{
+ // sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ // errorInfo(modulo,msglog);
+ //}
+
+ ids=copiaParametro("ids",ptrTrama); // Identificador de la sesin
+
+ /* Envia respuesta de ejecucin de la funcin de interface */
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_CrearImagenBasica");
+ lon+=sprintf(ptrTrama->parametros+lon,"idi=%s\r",idi); // Identificador de la imagen
+ lon+=sprintf(ptrTrama->parametros+lon,"par=%s\r",par); // Nmero de particin de donde se cre
+ lon+=sprintf(ptrTrama->parametros+lon,"cpt=%s\r",cpt); // Tipo o cdigo de particin
+ lon+=sprintf(ptrTrama->parametros+lon,"ipr=%s\r",ipr); // Ip del repositorio donde se aloj
+ respuestaEjecucionComando(ptrTrama,herror,ids);
+
+ liberaMemoria(nfn);
+ liberaMemoria(dsk);
+ liberaMemoria(par);
+ liberaMemoria(cpt);
+ liberaMemoria(idi);
+ liberaMemoria(nci);
+ liberaMemoria(rti);
+ liberaMemoria(ipr);
+
+ liberaMemoria(msy);
+
+ liberaMemoria(whl);
+ liberaMemoria(eli);
+ liberaMemoria(cmp);
+
+ liberaMemoria(bpi);
+ liberaMemoria(cpc);
+ liberaMemoria(bpc);
+ liberaMemoria(nba);
+ liberaMemoria(ids);
+
+ muestraMenu();
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: CrearSoftIncremental
+//
+// Descripcin:
+// Crea una software incremental comparando una particin con una imagen bsica
+// Parmetros:
+// ptrTrama: contenido del mensaje
+//
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN CrearSoftIncremental(TRAMA* ptrTrama)
+{
+ int lon;
+ char *nfn,*dsk,*par,*idi,*idf,*ipr,*nci,*rti,*ncf,*msy,*whl,*eli,*cmp,*bpi,*cpc,*bpc,*nba,*ids,msglog[LONSTD];
+ char modulo[] = "CrearSoftIncremental()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ nfn=copiaParametro("nfn",ptrTrama);
+
+ dsk=copiaParametro("dsk",ptrTrama); // Disco
+ par=copiaParametro("par",ptrTrama); // Nmero de particin
+ idi=copiaParametro("idi",ptrTrama); // Identificador de la imagen
+ nci=copiaParametro("nci",ptrTrama); // Nombre cannico de la imagen
+ rti=copiaParametro("rti",ptrTrama); // Ruta de origen de la imagen
+ ipr=copiaParametro("ipr",ptrTrama); // Ip del repositorio
+ idf=copiaParametro("idf",ptrTrama); // Identificador de la imagen diferencial
+ ncf=copiaParametro("ncf",ptrTrama); // Nombre cannico de la imagen diferencial
+
+ msy=copiaParametro("msy",ptrTrama); // Mtodo de sincronizacin
+
+ whl=copiaParametro("whl",ptrTrama); // Envo del fichero completo si hay diferencias
+ eli=copiaParametro("eli",ptrTrama); // Elimiar archivos en destino que no estn en origen
+ cmp=copiaParametro("cmp",ptrTrama); // Comprimir antes de enviar
+
+ bpi=copiaParametro("bpi",ptrTrama); // Borrar la imagen antes de crearla
+ cpc=copiaParametro("cpc",ptrTrama); // Copiar tambin imagen a la cache
+ bpc=copiaParametro("bpc",ptrTrama); // Borrarla de la cache antes de copiarla en ella
+ nba=copiaParametro("nba",ptrTrama); // No borrar archivos en destino
+
+// muestraMensaje(7,NULL); // Creando Inventario Software
+// if(InventariandoSoftware(ptrTrama,FALSE,"InventarioSoftware")){ // Crea inventario Software previamente
+ muestraMensaje(25,NULL);// Creando Imagen Incremental, por favor espere...
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(parametros,"%s %s %s %s %s %s %s%s%s %s%s%s%s %s %s",nfn,dsk,par,nci,ipr,ncf,whl,eli,cmp,bpi,cpc,bpc,nba,msy,rti);
+
+ herror=interfaceAdmin(interface,parametros,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ muestraMensaje(27,NULL);// Ha habido algn error en el proceso de creacin de imagen bsica
+ }
+ else
+ muestraMensaje(26,NULL);// El proceso de creacin de imagen incremental ha terminado correctamente
+// }
+// else{
+// sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+// errorInfo(modulo,msglog);
+// }
+
+ ids=copiaParametro("ids",ptrTrama); // Identificador de la sesin
+
+ /* Envia respuesta de ejecucin de la funcin de interface */
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_CrearSoftIncremental");
+ lon+=sprintf(ptrTrama->parametros+lon,"idf=%s\r",idf); // Identificador de la imagen incremental
+ lon+=sprintf(ptrTrama->parametros+lon,"par=%s\r",par); // Nmero de particin
+ respuestaEjecucionComando(ptrTrama,herror,ids);
+
+ liberaMemoria(nfn);
+ liberaMemoria(dsk);
+ liberaMemoria(par);
+ liberaMemoria(idi);
+ liberaMemoria(nci);
+ liberaMemoria(rti);
+ liberaMemoria(ipr);
+ liberaMemoria(idf);
+ liberaMemoria(ncf);
+ liberaMemoria(msy);
+ liberaMemoria(whl);
+ liberaMemoria(eli);
+ liberaMemoria(cmp);
+ liberaMemoria(bpi);
+ liberaMemoria(cpc);
+ liberaMemoria(bpc);
+ liberaMemoria(nba);
+ liberaMemoria(ids);
+
+ muestraMenu();
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: RestaurarImagen
+//
+// Descripcin:
+// Restaura una imagen en una particin
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En bpccaso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN RestaurarImagen(TRAMA* ptrTrama)
+{
+ int lon;
+ char *nfn,*dsk,*par,*idi,*ipr,*ifs,*nci,*ids,*ptc,msglog[LONSTD];
+ char modulo[] = "RestaurarImagen()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+
+ dsk=copiaParametro("dsk",ptrTrama);
+ par=copiaParametro("par",ptrTrama);
+ idi=copiaParametro("idi",ptrTrama);
+ ipr=copiaParametro("ipr",ptrTrama);
+ nci=copiaParametro("nci",ptrTrama);
+ ifs=copiaParametro("ifs",ptrTrama);
+ ptc=copiaParametro("ptc",ptrTrama);
+
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+ muestraMensaje(3,NULL);
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(parametros,"%s %s %s %s %s %s",nfn,dsk,par,nci,ipr,ptc);
+ herror=interfaceAdmin(interface,parametros,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ muestraMensaje(12,NULL);
+ }
+ else
+ muestraMensaje(11,NULL);
+
+
+ /* Envia respuesta de ejecucin de la funcin de interface */
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_RestaurarImagen");
+ lon+=sprintf(ptrTrama->parametros+lon,"idi=%s\r",idi); // Identificador de la imagen
+ lon+=sprintf(ptrTrama->parametros+lon,"par=%s\r",par); // Nmero de particin
+ lon+=sprintf(ptrTrama->parametros+lon,"ifs=%s\r",ifs); // Identificador del perfil software
+ respuestaEjecucionComando(ptrTrama,herror,ids);
+
+ liberaMemoria(nfn);
+ liberaMemoria(dsk);
+ liberaMemoria(par);
+ liberaMemoria(idi);
+ liberaMemoria(nci);
+ liberaMemoria(ipr);
+ liberaMemoria(ifs);
+ liberaMemoria(ptc);
+ liberaMemoria(ids);
+
+ muestraMenu();
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: RestaurarImagenBasica
+//
+// Descripcin:
+// Restaura una imagen bsica en una particin
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN RestaurarImagenBasica(TRAMA* ptrTrama)
+{
+ int lon;
+ char *nfn,*dsk,*par,*idi,*ipr,*met,*nci,*rti,*ifs,*msy,*whl,*eli,*cmp,*tpt,*bpi,*cpc,*bpc,*nba,*ids,msglog[LONSTD];
+ char modulo[] = "RestaurarImagenBasica()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ dsk=copiaParametro("dsk",ptrTrama);
+ par=copiaParametro("par",ptrTrama);
+ idi=copiaParametro("idi",ptrTrama);
+ ipr=copiaParametro("ipr",ptrTrama);
+ met=copiaParametro("met",ptrTrama); // Mtodo de clonacin 0= desde cach 1= desde repositorio
+ nci=copiaParametro("nci",ptrTrama);
+ rti=copiaParametro("rti",ptrTrama); // Ruta de origen de la imagen
+ ifs=copiaParametro("ifs",ptrTrama);
+
+ tpt=copiaParametro("tpt",ptrTrama); // Tipo de trasnmisin unicast o multicast
+ msy=copiaParametro("msy",ptrTrama); // Metodo de sincronizacion
+
+ whl=copiaParametro("whl",ptrTrama); // Envo del fichero completo si hay diferencias
+ eli=copiaParametro("eli",ptrTrama); // Elimiar archivos en destino que no estn en origen
+ cmp=copiaParametro("cmp",ptrTrama); // Comprimir antes de enviar
+
+
+
+ bpi=copiaParametro("bpi",ptrTrama); // Borrar la imagen antes de crearla
+ cpc=copiaParametro("cpc",ptrTrama); // Copiar tambin imagen a la cache
+ bpc=copiaParametro("bpc",ptrTrama); // Borrarla de la cache antes de copiarla en ella
+ nba=copiaParametro("nba",ptrTrama); // No borrar archivos en destino
+
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+ muestraMensaje(31,NULL);
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(parametros,"%s %s %s %s %s %s %s%s%s %s%s%s%s %s %s %s",nfn,dsk,par,nci,ipr,tpt,whl,eli,cmp,bpi,cpc,bpc,nba,met,msy,rti);
+ herror=interfaceAdmin(interface,parametros,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ muestraMensaje(33,NULL);
+ }
+ else
+ muestraMensaje(32,NULL);
+
+ /* Envia respuesta de ejecucin de la funcin de interface */
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_RestaurarImagenBasica");
+ lon+=sprintf(ptrTrama->parametros+lon,"idi=%s\r",idi); // Identificador de la imagen
+ lon+=sprintf(ptrTrama->parametros+lon,"par=%s\r",par); // Nmero de particin
+ lon+=sprintf(ptrTrama->parametros+lon,"ifs=%s\r",ifs); // Identificador del perfil software
+ respuestaEjecucionComando(ptrTrama,herror,ids);
+
+ liberaMemoria(nfn);
+ liberaMemoria(dsk);
+ liberaMemoria(par);
+ liberaMemoria(idi);
+ liberaMemoria(nci);
+ liberaMemoria(rti);
+ liberaMemoria(ifs);
+ liberaMemoria(ipr);
+ liberaMemoria(met);
+
+ liberaMemoria(tpt);
+ liberaMemoria(msy);
+
+ liberaMemoria(whl);
+ liberaMemoria(eli);
+ liberaMemoria(cmp);
+
+ liberaMemoria(bpi);
+ liberaMemoria(cpc);
+ liberaMemoria(bpc);
+ liberaMemoria(nba);
+ liberaMemoria(ids);
+
+ muestraMenu();
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: RestaurarSoftIncremental
+//
+// Descripcin:
+// Restaura software incremental en una particin
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN RestaurarSoftIncremental(TRAMA* ptrTrama)
+{
+ int lon;
+ char *nfn,*dsk,*par,*idi,*ipr,*met,*ifs,*nci,*rti,*idf,*ncf,*msy,*whl,*eli,*cmp,*tpt,*bpi,*cpc,*bpc,*nba,*ids,msglog[LONSTD];
+ char modulo[] = "RestaurarSoftIncremental()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ dsk=copiaParametro("dsk",ptrTrama);
+ par=copiaParametro("par",ptrTrama);
+ idi=copiaParametro("idi",ptrTrama);
+ idf=copiaParametro("idf",ptrTrama);
+ ipr=copiaParametro("ipr",ptrTrama);
+ met=copiaParametro("met",ptrTrama); // Mtodo de clonacin 0= desde cach 1= desde repositorio
+ ifs=copiaParametro("ifs",ptrTrama);
+ nci=copiaParametro("nci",ptrTrama);
+ rti=copiaParametro("rti",ptrTrama); // Ruta de origen de la imagen
+ ncf=copiaParametro("ncf",ptrTrama);
+
+ tpt=copiaParametro("tpt",ptrTrama); // Tipo de trasnmisin unicast o multicast
+ msy=copiaParametro("msy",ptrTrama); // Metodo de sincronizacion
+
+ whl=copiaParametro("whl",ptrTrama); // Envo del fichero completo si hay diferencias
+ eli=copiaParametro("eli",ptrTrama); // Elimiar archivos en destino que no estn en origen
+ cmp=copiaParametro("cmp",ptrTrama); // Comprimir antes de enviar
+
+ bpi=copiaParametro("bpi",ptrTrama); // Borrar la imagen antes de crearla
+ cpc=copiaParametro("cpc",ptrTrama); // Copiar tambin imagen a la cache
+ bpc=copiaParametro("bpc",ptrTrama); // Borrarla de la cache antes de copiarla en ella
+ nba=copiaParametro("nba",ptrTrama); // No borrar archivos en destino
+
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+ muestraMensaje(31,NULL);
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(parametros,"%s %s %s %s %s %s %s %s%s%s %s%s%s%s %s %s %s",nfn,dsk,par,nci,ipr,ncf,tpt,whl,eli,cmp,bpi,cpc,bpc,nba,met,msy,rti);
+ herror=interfaceAdmin(interface,parametros,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ muestraMensaje(35,NULL);
+ }
+ else
+ muestraMensaje(34,NULL);
+
+ /* Envia respuesta de ejecucin de la funcin de interface */
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_RestaurarSoftIncremental");
+ lon+=sprintf(ptrTrama->parametros+lon,"idi=%s\r",idf); // Identificador de la imagen incremental (Forzada a idi)
+ lon+=sprintf(ptrTrama->parametros+lon,"par=%s\r",par); // Nmero de particin
+ lon+=sprintf(ptrTrama->parametros+lon,"ifs=%s\r",ifs); // Identificador del perfil software
+
+ respuestaEjecucionComando(ptrTrama,herror,ids);
+
+ liberaMemoria(nfn);
+ liberaMemoria(dsk);
+ liberaMemoria(par);
+ liberaMemoria(idi);
+ liberaMemoria(idf);
+ liberaMemoria(nci);
+ liberaMemoria(rti);
+ liberaMemoria(ncf);
+ liberaMemoria(ifs);
+ liberaMemoria(ipr);
+ liberaMemoria(met);
+
+ liberaMemoria(tpt);
+ liberaMemoria(msy);
+
+ liberaMemoria(whl);
+ liberaMemoria(eli);
+ liberaMemoria(cmp);
+
+ liberaMemoria(bpi);
+ liberaMemoria(cpc);
+ liberaMemoria(bpc);
+ liberaMemoria(nba);
+ liberaMemoria(ids);
+
+ muestraMenu();
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: Configurar
+//
+// Descripcin:
+// Configura la tabla de particiones y formatea
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN Configurar(TRAMA* ptrTrama)
+{
+ int lon;
+ char *nfn,*dsk,*cfg,*ids,msglog[LONSTD];
+ char modulo[] = "Configurar()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+
+ dsk=copiaParametro("dsk",ptrTrama);
+ cfg=copiaParametro("cfg",ptrTrama);
+ /* Sustituir caracteres */
+ sustituir(cfg,'\n','$');
+ sustituir(cfg,'\t','#');
+
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+ muestraMensaje(4,NULL);
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(parametros,"%s %s %s",nfn,dsk,cfg);
+
+ herror=interfaceAdmin(interface,parametros,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ muestraMensaje(13,NULL);
+ }
+ else
+ muestraMensaje(14,NULL);
+
+ cfg=LeeConfiguracion();
+ if(!cfg){ // No se puede recuperar la configuracin del cliente
+ errorLog(modulo,36,FALSE);
+ return(FALSE);
+ }
+
+ /* Envia respuesta de ejecucin del comando*/
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_Configurar");
+ lon+=sprintf(ptrTrama->parametros+lon,"cfg=%s\r",cfg); // Configuracin de los Sistemas Operativos del cliente
+ respuestaEjecucionComando(ptrTrama,herror,ids);
+
+ liberaMemoria(dsk);
+ liberaMemoria(cfg);
+ liberaMemoria(nfn);
+ liberaMemoria(ids);
+
+ muestraMenu();
+
+ return(TRUE);
+}
+// ________________________________________________________________________________________________________
+// Funcin: InventarioHardware
+//
+// Descripcin:
+// Envia al servidor el nombre del archivo de inventario de su hardware para posteriormente
+// esperar que ste lo solicite y enviarlo por la red.
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN InventarioHardware(TRAMA* ptrTrama)
+{
+ int lon;
+ SOCKET socket_c;
+ char *nfn,*ids,msglog[LONSTD],hrdsrc[LONPRM],hrddst[LONPRM];
+ char modulo[] = "InventarioHardware()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+ muestraMensaje(6,NULL);
+
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(hrdsrc,"/tmp/Chrd-%s",IPlocal); // Nombre que tendra el archivo de inventario
+ sprintf(parametros,"%s %s",nfn,hrdsrc);
+ herror=interfaceAdmin(interface,parametros,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ muestraMensaje(18,NULL);
+ }
+ else{
+ /* Enva fichero de inventario al servidor */
+ sprintf(hrddst,"/tmp/Shrd-%s",IPlocal); // Nombre que tendra el archivo en el Servidor
+ initParametros(ptrTrama,0);
+ sprintf(ptrTrama->parametros,"nfn=recibeArchivo\rnfl=%s\r",hrddst);
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_COMANDO)){
+ liberaMemoria(nfn);
+ liberaMemoria(ids);
+ errorLog(modulo,42,FALSE);
+ return(FALSE);
+ }
+ /* Espera seal para comenzar el envo */
+ liberaMemoria(ptrTrama);
+ recibeFlag(&socket_c,ptrTrama);
+ /* Enva archivo */
+ if(!sendArchivo(&socket_c,hrdsrc)){
+ errorLog(modulo,57, FALSE);
+ herror=12; // Error de envo de fichero por la red
+ }
+ close(socket_c);
+ muestraMensaje(17,NULL);
+ }
+
+ /* Envia respuesta de ejecucin de la funcin de interface */
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_InventarioHardware");
+ lon+=sprintf(ptrTrama->parametros+lon,"hrd=%s\r",hrddst);
+ respuestaEjecucionComando(ptrTrama,herror,ids);
+ liberaMemoria(nfn);
+ liberaMemoria(ids);
+
+ muestraMenu();
+
+ return(TRUE);
+}
+// ________________________________________________________________________________________________________
+// Funcin: InventarioSoftware
+//
+// Descripcin:
+// Crea el inventario software de un sistema operativo instalado en una particin.
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN InventarioSoftware(TRAMA* ptrTrama)
+{
+ char *nfn,*ids,msglog[LONSTD];
+ char modulo[] = "InventarioSoftware()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+ muestraMensaje(7,NULL);
+ InventariandoSoftware(ptrTrama,TRUE,nfn);
+ respuestaEjecucionComando(ptrTrama,herror,ids);
+ liberaMemoria(nfn);
+ liberaMemoria(ids);
+ muestraMenu();
+ return(TRUE);
+}
+// ________________________________________________________________________________________________________
+//
+// Funcin: InventariandoSoftware
+//
+// Descripcin:
+// Envia al servidor el nombre del archivo de inventario de su software para posteriormente
+// esperar que ste lo solicite y enviarlo por la red.
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// sw: switch que indica si la funcin es llamada por el comando InventarioSoftware(true) o CrearImagen(false)
+// nfn: Nombre de la funcin del Interface que implementa el comando
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN InventariandoSoftware(TRAMA* ptrTrama,BOOLEAN sw,char *nfn)
+{
+ int lon;
+ SOCKET socket_c;
+ char *dsk,*par,msglog[LONSTD],sftsrc[LONPRM],sftdst[LONPRM];
+ char modulo[] = "InventariandoSoftware()";
+
+ dsk=copiaParametro("dsk",ptrTrama); // Disco
+ par=copiaParametro("par",ptrTrama);
+
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(sftsrc,"/tmp/CSft-%s-%s",IPlocal,par); // Nombre que tendra el archivo de inventario
+ sprintf(parametros,"%s %s %s %s",nfn,dsk,par,sftsrc);
+
+ herror=interfaceAdmin(interface,parametros,NULL);
+ herror=0;
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ muestraMensaje(20,NULL);
+ }
+ else{
+ /* Enva fichero de inventario al servidor */
+ sprintf(sftdst,"/tmp/Ssft-%s-%s",IPlocal,par); // Nombre que tendra el archivo en el Servidor
+ initParametros(ptrTrama,0);
+
+ sprintf(ptrTrama->parametros,"nfn=recibeArchivo\rnfl=%s\r",sftdst);
+ if(!enviaMensajeServidor(&socket_c,ptrTrama,MSG_COMANDO)){
+ errorLog(modulo,42,FALSE);
+ liberaMemoria(dsk);
+ liberaMemoria(par);
+ return(FALSE);
+ }
+ /* Espera seal para comenzar el envo */
+ liberaMemoria(ptrTrama);
+ if(!recibeFlag(&socket_c,ptrTrama)){
+ errorLog(modulo,17,FALSE);
+ }
+ /* Enva archivo */
+ if(!sendArchivo(&socket_c,sftsrc)){
+ errorLog(modulo,57, FALSE);
+ herror=12; // Error de envo de fichero por la red
+ }
+ close(socket_c);
+ muestraMensaje(19,NULL);
+ }
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_InventarioSoftware");
+ lon+=sprintf(ptrTrama->parametros+lon,"par=%s\r",par);
+ lon+=sprintf(ptrTrama->parametros+lon,"sft=%s\r",sftdst);
+ if(!sw)
+ respuestaEjecucionComando(ptrTrama,herror,"0");
+
+ liberaMemoria(dsk);
+ liberaMemoria(par);
+ return(TRUE);
+}
+// ________________________________________________________________________________________________________
+// Funcin: EjecutarScript
+//
+// Descripcin:
+// Ejecuta cdigo de script
+// Parmetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//______________________________________________________________________________________________________
+BOOLEAN EjecutarScript(TRAMA* ptrTrama)
+{
+ int lon;
+ char *nfn,*aux,*ids,*scp,*cfg,msglog[LONSTD];
+ char modulo[] = "EjecutarScript()";
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+ aux=copiaParametro("scp",ptrTrama);
+ scp=URLDecode(aux);
+
+
+ muestraMensaje(8,NULL);
+ /* Nombre del archivo de script */
+ char filescript[LONPRM];
+ sprintf(filescript,"/tmp/_script_%s",IPlocal);
+ escribeArchivo(filescript,scp);
+ nfn=copiaParametro("nfn",ptrTrama);
+ sprintf(interface,"%s/%s",pathinterface,nfn);
+ sprintf(parametros,"%s %s",nfn,filescript);
+ herror=interfaceAdmin(interface,parametros,NULL);
+ if(herror){
+ sprintf(msglog,"%s:%s",tbErrores[86],nfn);
+ errorInfo(modulo,msglog);
+ muestraMensaje(21,NULL);
+ }
+ else
+ muestraMensaje(22,NULL);
+
+ // Toma configuracin de particiones
+ cfg=LeeConfiguracion();
+ if(!cfg){ // No se puede recuperar la configuracin del cliente
+ errorLog(modulo,36,FALSE);
+ herror=36;
+ }
+
+ ids=copiaParametro("ids",ptrTrama);
+
+ //herror=ejecutarCodigoBash(scp);
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_EjecutarScript");
+ lon+=sprintf(ptrTrama->parametros+lon,"cfg=%s\r",cfg); // Configuracin de los Sistemas Operativos del cliente
+ respuestaEjecucionComando(ptrTrama,herror,ids);
+
+ liberaMemoria(nfn);
+ liberaMemoria(ids);
+ liberaMemoria(aux);
+ liberaMemoria(scp);
+ liberaMemoria(cfg);
+
+ muestraMenu();
+
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: respuestaEjecucionComando
+//
+// Descripcin:
+// Envia una respuesta a una ejecucion de comando al servidor de Administracin
+// Parmetros:
+// - ptrTrama: contenido del mensaje
+// - res: Resultado de la ejecucin (Cdigo de error devuelto por el script ejecutado)
+// - ids: Identificador de la sesion (En caso de no haber seguimiento es NULO)
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// ________________________________________________________________________________________________________
+BOOLEAN respuestaEjecucionComando(TRAMA* ptrTrama,int res,char *ids)
+{
+ int lon;
+ SOCKET socket_c;
+ char modulo[] = "respuestaEjecucionComando()";
+
+ lon=strlen(ptrTrama->parametros);
+ if(ids){ // Existe seguimiento
+ lon+=sprintf(ptrTrama->parametros+lon,"ids=%s\r",ids); // Aade identificador de la sesin
+ }
+ if (res==0){ // Resultado satisfactorio
+ lon+=sprintf(ptrTrama->parametros+lon,"res=%s\r","1");
+ lon+=sprintf(ptrTrama->parametros+lon,"der=%s\r","");
+ }
+ else{ // Algn error
+ lon+=sprintf(ptrTrama->parametros+lon,"res=%s\r","2");
+ if(res>MAXERRORSCRIPT)
+ lon+=sprintf(ptrTrama->parametros+lon,"der=%s (Error de script:%d)\r",tbErroresScripts[0],res);// Descripcin del error
+ else
+ lon+=sprintf(ptrTrama->parametros+lon,"der=%s\r",tbErroresScripts[res]);// Descripcin del error
+ }
+ if(!(enviaMensajeServidor(&socket_c,ptrTrama,MSG_NOTIFICACION))){
+ errorLog(modulo,44,FALSE);
+ return(FALSE);
+ }
+
+ close(socket_c);
+ return(TRUE);
+}
+// ________________________________________________________________________________________________________
+// Funcin: gestionaTrama
+//
+// Descripcin:
+// Procesa las tramas recibidas.
+// Parametros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// ________________________________________________________________________________________________________
+BOOLEAN gestionaTrama(TRAMA *ptrTrama)
+{
+ int i, res;
+ char *nfn;
+ char modulo[] = "gestionaTrama()";
+
+ INTROaFINCAD(ptrTrama);
+ nfn = copiaParametro("nfn", ptrTrama); // Toma nombre de funcin
+ for (i = 0; i < MAXIMAS_FUNCIONES; i++) { // Recorre funciones que procesan las tramas
+ res = strcmp(tbfuncionesClient[i].nf, nfn);
+ if (res == 0) { // Encontrada la funcin que procesa el mensaje
+ liberaMemoria(nfn);
+ return(tbfuncionesClient[i].fptr(ptrTrama)); // Invoca la funcin
+ }
+ }
+
+ liberaMemoria(nfn);
+
+ /* Slo puede ser un comando personalizado
+ if (ptrTrama->tipo==MSG_COMANDO)
+ return(Comando(ptrTrama));
+ */
+ errorLog(modulo, 18, FALSE);
+ return (FALSE);
+}
+//________________________________________________________________________________________________________
+// Funcin: ejecutaArchivo
+//
+// Descripcin:
+// Ejecuta los comando contenido en un archivo (cada comando y sus parametros separados por un
+// salto de linea.
+// Parmetros:
+// filecmd: Nombre del archivo de comandos
+// ptrTrama: Puntero a una estructura TRAMA usada en las comunicaciones por red (No debe ser NULL)
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+//________________________________________________________________________________________________________
+BOOLEAN ejecutaArchivo(char* filecmd,TRAMA *ptrTrama)
+{
+ char* buffer,*lineas[MAXIMAS_LINEAS];
+ int i,numlin;
+ char modulo[] = "ejecutaArchivo()";
+
+ buffer=leeArchivo(filecmd);
+ if(buffer){
+ numlin = splitCadena(lineas, buffer, '@');
+ initParametros(ptrTrama,0);
+ for (i = 0; i < numlin; i++) {
+ if(strlen(lineas[i])>0){
+ strcpy(ptrTrama->parametros,lineas[i]);
+ //strcat(ptrTrama->parametros,"\rMCDJ@"); // Fin de trama
+ if(!gestionaTrama(ptrTrama)){ // Anlisis de la trama
+ errorLog(modulo,39,FALSE);
+ //return(FALSE);
+ }
+ }
+ }
+ }
+ liberaMemoria(buffer);
+ return(TRUE);
+}
+//______________________________________________________________________________________________________
+// Funcin: enviaMensajeServidor
+//
+// Descripcin:
+// Envia un mensaje al servidor de Administracin
+// Parmetros:
+// - socket_c: (Salida) Socket utilizado para el envo
+// - ptrTrama: contenido del mensaje
+// - tipo: Tipo de mensaje
+// C=Comando, N=Respuesta a un comando, P=Peticion,R=Respuesta a una peticin, I=Informacion
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algn error
+// ________________________________________________________________________________________________________
+BOOLEAN enviaMensajeServidor(SOCKET *socket_c,TRAMA *ptrTrama,char tipo)
+{
+ int lon;
+ char modulo[] = "enviaMensajeServidor()";
+
+ *socket_c=abreConexion();
+ if(*socket_c==INVALID_SOCKET){
+ errorLog(modulo,38,FALSE); // Error de conexin con el servidor
+ return(FALSE);
+ }
+ ptrTrama->arroba='@'; // Cabecera de la trama
+ strncpy(ptrTrama->identificador,"JMMLCAMDJ_MCDJ",14); // identificador de la trama
+ ptrTrama->tipo=tipo; // Tipo de mensaje
+ lon=strlen(ptrTrama->parametros); // Compone la trama
+ lon+=sprintf(ptrTrama->parametros+lon,"iph=%s\r",IPlocal); // Ip del ordenador
+ lon+=sprintf(ptrTrama->parametros+lon,"ido=%s\r",idordenador); // Identificador del ordenador
+ lon+=sprintf(ptrTrama->parametros+lon,"npc=%s\r",nombreordenador); // Nombre del ordenador
+ lon+=sprintf(ptrTrama->parametros+lon,"idc=%s\r",idcentro); // Identificador del centro
+ lon+=sprintf(ptrTrama->parametros+lon,"ida=%s\r",idaula); // Identificador del aula
+
+ if (!mandaTrama(socket_c,ptrTrama)) {
+ errorLog(modulo,26,FALSE);
+ return (FALSE);
+ }
+ return(TRUE);
+}
+// ********************************************************************************************************
+// PROGRAMA PRINCIPAL (CLIENTE)
+// ********************************************************************************************************
+int main(int argc, char *argv[])
+{
+ TRAMA *ptrTrama;
+ char modulo[] = "main()";
+
+ ptrTrama=(TRAMA *)reservaMemoria(sizeof(TRAMA));
+ if (ptrTrama == NULL) { // No hay memoria suficiente para el bufer de las tramas
+ errorLog(modulo, 3, FALSE);
+ exit(EXIT_FAILURE);
+ }
+ /*--------------------------------------------------------------------------------------------------------
+ Validacin de parmetros de ejecucin y fichero de configuracin
+ ---------------------------------------------------------------------------------------------------------*/
+ if (!validacionParametros(argc, argv,3)) // Valida parmetros de ejecucin
+ exit(EXIT_FAILURE);
+
+ if (!tomaConfiguracion(szPathFileCfg)) // Toma parametros de configuracin
+ exit(EXIT_FAILURE);
+ /*--------------------------------------------------------------------------------------------------------
+ Carga catlogo de funciones que procesan las tramas
+ ---------------------------------------------------------------------------------------------------------*/
+ int cf = 0;
+
+ strcpy(tbfuncionesClient[cf].nf, "RESPUESTA_AutoexecCliente");
+ tbfuncionesClient[cf++].fptr = &RESPUESTA_AutoexecCliente;
+
+ strcpy(tbfuncionesClient[cf].nf, "RESPUESTA_InclusionCliente");
+ tbfuncionesClient[cf++].fptr = &RESPUESTA_InclusionCliente;
+
+ strcpy(tbfuncionesClient[cf].nf, "NoComandosPtes");
+ tbfuncionesClient[cf++].fptr = &NoComandosPtes;
+
+ strcpy(tbfuncionesClient[cf].nf, "Actualizar");
+ tbfuncionesClient[cf++].fptr = &Actualizar;
+
+ strcpy(tbfuncionesClient[cf].nf, "Purgar");
+ tbfuncionesClient[cf++].fptr = &Purgar;
+
+ strcpy(tbfuncionesClient[cf].nf, "ConsolaRemota");
+ tbfuncionesClient[cf++].fptr = &ConsolaRemota;
+
+ strcpy(tbfuncionesClient[cf].nf, "Sondeo");
+ tbfuncionesClient[cf++].fptr = &Sondeo;
+
+ strcpy(tbfuncionesClient[cf].nf, "Arrancar");
+ tbfuncionesClient[cf++].fptr = &Arrancar;
+
+ strcpy(tbfuncionesClient[cf].nf, "Apagar");
+ tbfuncionesClient[cf++].fptr = &Apagar;
+
+ strcpy(tbfuncionesClient[cf].nf, "Reiniciar");
+ tbfuncionesClient[cf++].fptr = &Reiniciar;
+
+ strcpy(tbfuncionesClient[cf].nf, "IniciarSesion");
+ tbfuncionesClient[cf++].fptr = &IniciarSesion;
+
+ strcpy(tbfuncionesClient[cf].nf, "CrearImagen");
+ tbfuncionesClient[cf++].fptr = &CrearImagen;
+
+ strcpy(tbfuncionesClient[cf].nf, "CrearImagenBasica");
+ tbfuncionesClient[cf++].fptr = &CrearImagenBasica;
+
+ strcpy(tbfuncionesClient[cf].nf, "CrearSoftIncremental");
+ tbfuncionesClient[cf++].fptr = &CrearSoftIncremental;
+
+ strcpy(tbfuncionesClient[cf].nf, "RestaurarImagen");
+ tbfuncionesClient[cf++].fptr = &RestaurarImagen;
+
+ strcpy(tbfuncionesClient[cf].nf, "RestaurarImagenBasica");
+ tbfuncionesClient[cf++].fptr = &RestaurarImagenBasica;
+
+ strcpy(tbfuncionesClient[cf].nf, "RestaurarSoftIncremental");
+ tbfuncionesClient[cf++].fptr = &RestaurarSoftIncremental;
+
+
+ strcpy(tbfuncionesClient[cf].nf, "Configurar");
+ tbfuncionesClient[cf++].fptr = &Configurar;
+
+ strcpy(tbfuncionesClient[cf].nf, "EjecutarScript");
+ tbfuncionesClient[cf++].fptr = &EjecutarScript;
+
+ strcpy(tbfuncionesClient[cf].nf, "InventarioHardware");
+ tbfuncionesClient[cf++].fptr = &InventarioHardware;
+
+ strcpy(tbfuncionesClient[cf].nf, "InventarioSoftware");
+ tbfuncionesClient[cf++].fptr = &InventarioSoftware;
+
+ /*--------------------------------------------------------------------------------------------------------
+ Toma direccin IP del cliente
+ ---------------------------------------------------------------------------------------------------------*/
+ if(!tomaIPlocal()){ // Error al recuperar la IP local
+ errorLog(modulo,0,FALSE);
+ exit(EXIT_FAILURE);
+ }
+ /*--------------------------------------------------------------------------------------------------------
+ Inicio de sesin
+ ---------------------------------------------------------------------------------------------------------*/
+ infoLog(1); // Inicio de sesin
+ infoLog(3); // Abriendo sesin en el servidor de Administracin;
+ /*--------------------------------------------------------------------------------------------------------
+ Inclusin del cliente en el sistema
+ ---------------------------------------------------------------------------------------------------------*/
+ if(!inclusionCliente(ptrTrama)){ // Ha habido algn problema al abrir sesin
+ errorLog(modulo,0,FALSE);
+ exit(EXIT_FAILURE);
+ }
+ infoLog(4); // Cliente iniciado
+
+ /*--------------------------------------------------------------------------------------------------------
+ Procesamiento de la cache
+ ---------------------------------------------------------------------------------------------------------*/
+ infoLog(23); // Abriendo sesin en el servidor de Administracin;
+ if(!cuestionCache(cache)){
+ errorLog(modulo,0,FALSE);
+ exit(EXIT_FAILURE);
+ }
+ /*--------------------------------------------------------------------------------------------------------
+ Ejecucin del autoexec
+ ---------------------------------------------------------------------------------------------------------*/
+ if(atoi(idproautoexec)>0){ // Ejecucin de procedimiento Autoexec
+ infoLog(5);
+ if(!autoexecCliente(ptrTrama)){ // Ejecucin fichero autoexec
+ errorLog(modulo,0,FALSE);
+ exit(EXIT_FAILURE);
+ }
+ }
+ /*--------------------------------------------------------------------------------------------------------
+ Comandos pendientes
+ ---------------------------------------------------------------------------------------------------------*/
+ infoLog(6); // Procesa comandos pendientes
+ if(!comandosPendientes(ptrTrama)){ // Ejecucin de acciones pendientes
+ errorLog(modulo,0,FALSE);
+ exit(EXIT_FAILURE);
+ }
+ infoLog(7); // Acciones pendientes procesadas
+ /*--------------------------------------------------------------------------------------------------------
+ Bucle de recepcin de comandos
+ ---------------------------------------------------------------------------------------------------------*/
+ muestraMenu();
+ procesaComandos(ptrTrama); // Bucle para procesar comandos interactivos
+ /*--------------------------------------------------------------------------------------------------------
+ Fin de la sesin
+ ---------------------------------------------------------------------------------------------------------*/
+ exit(EXIT_SUCCESS);
+}
diff --git a/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.h b/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.h
index f39df68c..357059fa 100644
--- a/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.h
+++ b/admin/Sources/Clients/ogAdmClient/sources/ogAdmClient.h
@@ -23,12 +23,12 @@
// ________________________________________________________________________________________________________
// Variables globales
// ________________________________________________________________________________________________________
-char idordenador[LONPRM]; // Identificador del ordenador
-char nombreordenador[LONPRM]; // Nombre del ordenador
-char cache[LONPRM]; // Tamaño de la caché
-char idproautoexec[LONPRM]; // Identificador del procedimiento de autoexec
-char idcentro[LONPRM]; // Identificador de la Unidad Organizativa
-char idaula[LONPRM]; // Identificador del aula
+char *idordenador; // Identificador del ordenador
+char *nombreordenador; // Nombre del ordenador
+char *cache; // Tamaño de la caché
+char *idproautoexec; // Identificador del procedimiento de autoexec
+char *idcentro; // Identificador de la Unidad Organizativa
+char *idaula; // Identificador del aula
char IPlocal[LONIP]; // Ip local
char servidoradm[LONPRM]; // Dirección IP del servidor de administración
@@ -56,14 +56,14 @@ MSGFUN tbfuncionesClient[MAXIMAS_FUNCIONES];
// ________________________________________________________________________________________________________
// Tabla de errores de la ejecución de los scripts
// ________________________________________________________________________________________________________
-char* tbErroresScripts[]={"Se han generado errores. No se puede continuar la ejecución de este módulo",\
+char* tbErroresScripts[]={"Se han generado errores desconocidos. No se puede continuar la ejecución de este módulo",\
"001-Formato de ejecución incorrecto.",\
"002-Fichero o dispositivo no encontrado",\
"003-Error en partición de disco",\
"004-Partición o fichero bloqueado",\
"005-Error al crear o restaurar una imagen",\
"006-Sin sistema operativo",\
- "007-Programa o función BOOLEANno ejecutable",\
+ "007-Programa o función BOOLEAN no ejecutable",\
"008-Error en la creación del archivo de eco para consola remota",\
"009-Error en la lectura del archivo temporal de intercambio",\
"010-Error al ejecutar la llamada a la interface de administración",\
@@ -75,10 +75,10 @@ char* tbErroresScripts[]={"Se han generado errores. No se puede continuar la eje
"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",\
+ "019-Valor fuera de rango o no válido.",\
+ "020-Sistema de archivos desconocido o no se puede montar",\
+ "021-Error en partición de caché local",\
+ "022-El disco indicado no contiene una particion GPT",\
"023-Error no definido",\
"024-Error no definido",\
"025-Error no definido",\
@@ -87,7 +87,7 @@ char* tbErroresScripts[]={"Se han generado errores. No se puede continuar la eje
"028-Error no definido",\
"029-Error no definido",\
"030-Error al restaurar imagen - Imagen mas grande que particion",\
- "031-Error no definido",\
+ "031-Error al realizar el comando updateCache",\
"032-Error no definido",\
"033-Error no definido",\
"034-Error no definido",\
@@ -96,7 +96,7 @@ char* tbErroresScripts[]={"Se han generado errores. No se puede continuar la eje
"037-Error no definido",\
"038-Error no definido",\
"039-Error no definido",\
- "040-Error no definido",\
+ "040-Error imprevisto no definido",\
"041-Error no definido",\
"042-Error no definido",\
"043-Error no definido",\
@@ -117,9 +117,23 @@ char* tbErroresScripts[]={"Se han generado errores. No se puede continuar la eje
"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",\
+ "061-Error no definido",\
+ "062-Error no definido",\
+ "063-Error no definido",\
+ "064-Error no definido",\
+ "065-Error no definido",\
+ "066-Error no definido",\
+ "067-Error no definido",\
+ "068-Error no definido",\
+ "069-Error no definido",\
+ "070-Error al montar una imagen sincronizada.",\
+ "071-Imagen no sincronizable (es monolitica).",\
+ "072-Error al desmontar la imagen.",\
+ "073-No se detectan diferencias entre la imagen basica y la particion.",\
+ "074-Error al sincronizar, puede afectar la creacion/restauracion de la imagen.",\
"Error desconocido "
};
- #define MAXERRORSCRIPT 999 // Error máximo cometido
+ #define MAXERRORSCRIPT 74 // Error máximo cometido
// ________________________________________________________________________________________________________
// Prototipo de funciones
// ________________________________________________________________________________________________________
@@ -133,7 +147,7 @@ void scriptLog(const char *,int );
BOOLEAN gestionaTrama(TRAMA *);
BOOLEAN inclusionCliente();
-char* LeeConfiguracion(char*);
+char* LeeConfiguracion();
BOOLEAN RESPUESTA_InclusionCliente(TRAMA *);
BOOLEAN comandosPendientes(TRAMA*);
@@ -151,6 +165,9 @@ BOOLEAN Apagar(TRAMA *);
BOOLEAN Reiniciar(TRAMA *);
BOOLEAN IniciarSesion(TRAMA *);
BOOLEAN CrearImagen(TRAMA *);
+BOOLEAN CrearImagenBasica(TRAMA *);
+BOOLEAN CrearSoftIncremental(TRAMA*);
+
BOOLEAN InventarioHardware(TRAMA *);
BOOLEAN InventariandoSoftware(TRAMA *,BOOLEAN,char*);
BOOLEAN EjecutarScript(TRAMA *);
diff --git a/admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.c b/admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.c
index 8c79ce8e..0c4c431e 100644
--- a/admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.c
+++ b/admin/Sources/Clients/ogAdmLnxClient/sources/ogAdmLnxClient.c
@@ -8,6 +8,63 @@
// ********************************************************************************************************
#include "ogAdmLnxClient.h"
#include "ogAdmLib.c"
+
+// ________________________________________________________________________________________________________
+// Función: EjecutarScript
+//
+// Descripción:
+// Ejecuta código de script
+// Parámetros:
+// ptrTrama: contenido del mensaje
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+//______________________________________________________________________________________________________
+BOOLEAN EjecutarScript(TRAMA* ptrTrama)
+{
+ int lon,resul,res;
+ char *nfn,*ids,*cod,*scp,msglog[LONSTD];
+ char modulo[] = "EjecutarScript()";
+
+
+ if (ndebug>=DEBUG_MAXIMO) {
+ sprintf(msglog, "%s:%s",tbMensajes[21],modulo);
+ infoDebug(msglog);
+ }
+
+ nfn=copiaParametro("nfn",ptrTrama);
+ ids=copiaParametro("ids",ptrTrama);
+
+ scp=copiaParametro("scp",ptrTrama);
+ cod=URLDecode(scp);
+
+ res=0;
+ /* Nombre del archivo de script */
+ char filescript[LONPRM];
+ sprintf(filescript,"/tmp/_script_%s",IPlocal);
+ if(!escribeArchivo(filescript,cod)){
+ errorLog(modulo, 52, FALSE);
+ res=52; // Error al crear fichero de comandos
+ }
+
+ if(res==0){
+ sprintf(filescript,"chmod 0777 /tmp/_script_%s",IPlocal);
+
+ resul=system(filescript);
+ if (resul==0) {
+ sprintf(filescript,"/tmp/_script_%s",IPlocal);
+ resul=system(filescript);
+ if (resul>0) {
+ errorLog(modulo, 86, FALSE);
+ }
+ }
+ }
+
+ initParametros(ptrTrama,0);
+ lon=sprintf(ptrTrama->parametros,"nfn=%s\r","RESPUESTA_EjecutarScript");
+ respuestaEjecucionComando(ptrTrama,resul,ids);
+ return(TRUE);
+}
//________________________________________________________________________________________________________
// Función: tomaConfiguracion
//
@@ -303,7 +360,7 @@ BOOLEAN respuestaEjecucionComando(TRAMA* ptrTrama,int res,char *ids)
}
else{ // Algún error
lon+=sprintf(ptrTrama->parametros+lon,"res=%s\r","2");
- lon+=sprintf(ptrTrama->parametros+lon,"der=%s\r",tbErrores[res]);// Descripción del error
+ lon+=sprintf(ptrTrama->parametros+lon,"der=(Errno:%d)-%s\r",res,tbErrores[res]);// Descripción del error
}
if(!(enviaMensajeServidor(&socket_c,ptrTrama,MSG_NOTIFICACION))){
errorLog(modulo,44,FALSE);
@@ -331,6 +388,7 @@ BOOLEAN gestionaTrama(TRAMA *ptrTrama)
INTROaFINCAD(ptrTrama);
nfn = copiaParametro("nfn", ptrTrama); // Toma nombre de función
+
for (i = 0; i < MAXIMAS_FUNCIONES; i++) { // Recorre funciones que procesan las tramas
res = strcmp(tbfuncionesClient[i].nf, nfn);
if (res == 0) { // Encontrada la función que procesa el mensaje
@@ -397,7 +455,7 @@ int main(int argc, char *argv[])
/*--------------------------------------------------------------------------------------------------------
Validación de parámetros de ejecución y fichero de configuración
---------------------------------------------------------------------------------------------------------*/
- if (!validacionParametros(argc, argv,6)) // Valida parámetros de ejecución
+ if (!validacionParametros(argc, argv,7)) // Valida parámetros de ejecución
exit(EXIT_FAILURE);
if (!tomaConfiguracion(szPathFileCfg)) // Toma parametros de configuración
@@ -420,6 +478,9 @@ int main(int argc, char *argv[])
strcpy(tbfuncionesClient[cf].nf, "Sondeo");
tbfuncionesClient[cf++].fptr = &Sondeo;
+ strcpy(tbfuncionesClient[cf].nf, "EjecutarScript");
+ tbfuncionesClient[cf++].fptr = &EjecutarScript;
+
/*--------------------------------------------------------------------------------------------------------
Inicio de sesión
---------------------------------------------------------------------------------------------------------*/
diff --git a/admin/Sources/Includes/ogAdmLib.c b/admin/Sources/Includes/ogAdmLib.c
index dbb41762..a526d173 100644
--- a/admin/Sources/Includes/ogAdmLib.c
+++ b/admin/Sources/Includes/ogAdmLib.c
@@ -143,7 +143,7 @@ void infoLog(int codinf) {
// - msgdeb : Descripción del mensaje de información
// ________________________________________________________________________________________________________
void infoDebug(char* msgdeb) {
- char msglog[LONSUC];
+ char msglog[LONSUC+15]; // Cadena de registro (reserva caracteres para el prefijo).
sprintf(msglog, "*** Debug: %d-%s", ndebug, msgdeb);
registraLog(szPathFileLog, msglog, FALSE);
@@ -197,6 +197,10 @@ BOOLEAN validacionParametros(int argc, char*argv[],int eje) {
case 6: // Agente
strcpy(szPathFileCfg, "ogAdmWinClient.cfg"); // Valores por defecto de archivos
strcpy(szPathFileLog, "ogAdmWinClient.log"); // de configuración y de logs
+ break;
+ case 7: // Agente
+ strcpy(szPathFileCfg, "ogAdmnxClient.cfg"); // Valores por defecto de archivos
+ strcpy(szPathFileLog, "ogAdmLnxClient.log"); // de configuración y de logs
break;
}
@@ -289,8 +293,9 @@ char* ampliaMemoria(char* ptr,int lon)
//______________________________________________________________________________________________________
void liberaMemoria(void* ptr)
{
- if(ptr)
+ if(ptr){
free (ptr);
+ }
}
// ________________________________________________________________________________________________________
// Función: splitCadena
@@ -598,6 +603,7 @@ BOOLEAN mandaTrama(SOCKET *sock, TRAMA* ptrTrama)
{
int lonprm;
char *buffer,hlonprm[LONHEXPRM+1];
+ BOOLEAN res;
lonprm=strlen(ptrTrama->parametros);
ptrTrama->parametros=encriptar(ptrTrama->parametros,&lonprm); // Encripta los parámetros
@@ -608,10 +614,10 @@ BOOLEAN mandaTrama(SOCKET *sock, TRAMA* ptrTrama)
return(FALSE);
memcpy(buffer,ptrTrama,LONGITUD_CABECERATRAMA); // Copia cabecera de trama
memcpy(&buffer[LONGITUD_CABECERATRAMA],hlonprm,LONHEXPRM); // Copia longitud de la trama
- memcpy(&buffer[LONGITUD_CABECERATRAMA+LONHEXPRM],ptrTrama->parametros,lonprm); // Copia parametros encriptados
- if(!sendData(sock,buffer,LONGITUD_CABECERATRAMA+LONHEXPRM+lonprm))
- return (FALSE);
- return(TRUE);
+ memcpy(&buffer[LONGITUD_CABECERATRAMA+LONHEXPRM],ptrTrama->parametros,lonprm);
+ res=sendData(sock,buffer,LONGITUD_CABECERATRAMA+LONHEXPRM+lonprm);
+ liberaMemoria(buffer);
+ return (res);
}
// ________________________________________________________________________________________________________
// Función: sendData
@@ -659,7 +665,7 @@ BOOLEAN sendData(SOCKET *sock, char* datos,int lon)
TRAMA* recibeTrama(SOCKET *sock)
{
int ret,lon,lSize;
- char *buffer,bloque[LONBLK],*hlonprm;
+ char *buffer,*bufferd,bloque[LONBLK],*hlonprm;
TRAMA * ptrTrama;
lon=lSize=0;
@@ -667,14 +673,17 @@ TRAMA* recibeTrama(SOCKET *sock)
if(!recData(sock,bloque,LONBLK,&ret)) // Lee bloque
return(NULL);
+ if (lon==0 && lSize==0 && ret==0) // Comprueba trama válida
+ return(NULL);
+
if(lSize==0){ // Comprueba tipo de trama y longitud total de los parámetros
if (strncmp(bloque, "@JMMLCAMDJ_MCDJ",15)!=0)
return(NULL); // No se reconoce la trama
hlonprm=reservaMemoria(LONHEXPRM+1);
- if(!hlonprm)
- return(NULL);
+ if(!hlonprm) return(NULL);
memcpy(hlonprm,&bloque[LONGITUD_CABECERATRAMA],LONHEXPRM);
lSize=strtol(hlonprm,NULL,16); // Longitud total de la trama con los parametros encriptados
+ liberaMemoria(hlonprm);
buffer=(char*)reservaMemoria(lSize); // Toma memoria para la trama completa
if(!buffer)
return(NULL);
@@ -687,13 +696,13 @@ TRAMA* recibeTrama(SOCKET *sock)
}while(lon<lSize);
ptrTrama=(TRAMA *)reservaMemoria(sizeof(TRAMA));
- if (!ptrTrama)
- return(NULL);
+ if (!ptrTrama) return(NULL);
memcpy(ptrTrama,buffer,LONGITUD_CABECERATRAMA); // Copia cabecera de trama
lon=lSize-(LONGITUD_CABECERATRAMA+LONHEXPRM); // Longitud de los parametros aún encriptados
- buffer=desencriptar(&buffer[LONGITUD_CABECERATRAMA+LONHEXPRM],&lon);
+ bufferd=desencriptar(&buffer[LONGITUD_CABECERATRAMA+LONHEXPRM],&lon);
initParametros(ptrTrama,lon); // Desencripta la trama
- memcpy(ptrTrama->parametros,buffer,lon);
+ memcpy(ptrTrama->parametros,bufferd,lon);
+ liberaMemoria((char*)buffer);
ptrTrama->lonprm=lon; // Almacena longitud de los parámetros ya desencriptados
return(ptrTrama);
}
@@ -1109,3 +1118,25 @@ TRAMA* recibeMensaje(SOCKET *socket_c)
}
return(ptrTrama);
}
+
+// ________________________________________________________________________________________________________
+
+int tomaPuerto(SOCKET s)
+{
+ struct sockaddr_in sin;
+ socklen_t addrlen = sizeof(sin);
+ int local_port;
+
+ if(getpeername(s, (struct sockaddr *)&sin, &addrlen) == 0
+ && sin.sin_family == AF_INET &&
+ addrlen == sizeof(sin))
+ {
+ local_port = ntohs(sin.sin_port);
+ }
+ else
+ local_port=-1;
+
+ return(local_port);
+
+}
+
diff --git a/admin/Sources/Includes/ogAdmLib.h b/admin/Sources/Includes/ogAdmLib.h
index 748fe59b..2e63bbc5 100644
--- a/admin/Sources/Includes/ogAdmLib.h
+++ b/admin/Sources/Includes/ogAdmLib.h
@@ -11,22 +11,22 @@
// ________________________________________________________________________________________________________
#define LONSTD 1024 // Longitud de memoria estandar
#define LONINT 16 // Longitud de memoria estandar para un número entero
-#define LONFIL 256 // Longitud de memoria estandar para nombres de archivo completos (incluido path)
+#define LONFIL 1024 // Longitud de memoria estandar para nombres de archivo completos (incluido path)
#define LONIP 16 // Longitud de memoria estandar para cadenas que contiene una dirección IP
#define LONMAC 16 // Longitud de memoria estandar para cadenas que contiene una dirección MAC
-#define LONSQL 4096 // Longitud de memoria estandar para una sentencia SQL
-#define LONPRM 512 // Longitud estandar de los parámetros del fichero de configuración del servicio
-#define LONSCP 2024 // Longitud estandar de los parámetros de las tramas
-#define LONFUN 64 // Longitud estandar de los nombres de las funciones que procesan las tramas
-#define LONSUC 512 // Longitud de los mensajes de sucesos
-#define LONBLK 512 // Longitud de los paquetes de tramas leidos cada vez
-#define MAXPRM 10 // Máximo número de parámeros del fichero de configuración del servicio
+#define LONSQL 8192 // Longitud de memoria estandar para una sentencia SQL
+#define LONPRM 4098 // Longitud estandar de los parámetros del fichero de configuración del servicio
+#define LONSCP 4098 // Longitud estandar de los parámetros de las tramas
+#define LONFUN 512 // Longitud estandar de los nombres de las funciones que procesan las tramas
+#define LONSUC 4098 // Longitud de los mensajes de sucesos
+#define LONBLK 8192 // Longitud de los paquetes de tramas leidos cada vez
+#define MAXPRM 20 // Máximo número de parámeros del fichero de configuración del servicio
#define MAXPAR 128 // Maximo numero de particiones manejadas por el sistema, ahora con GPT es 128
-#define MAXLONURL 512 // Longitud máxima de una dirección url con parámetros
+#define MAXLONURL 1024 // Longitud máxima de una dirección url con parámetros
#define LONHEXPRM 5 // Longitud del campo que contiene el tamaño de la cadena de parámetros
#define LONGITUD_CABECERATRAMA 16 // Longitud de la cabecera de las tramas
-#define LONGITUD_PARAMETROS 1024 // Longitud estandar de la información de la trama (parámetros)
+#define LONGITUD_PARAMETROS 8192 // Longitud estandar de la información de la trama (parámetros)
#define MAXCMD_PARAMETROS 200 // Máximo número de parámetros de una trama
#define MAXIMOS_CLIENTES 4000 // Máximo número de conexiones con ordenadores clientes
@@ -90,14 +90,14 @@
#define ANNOREF 2009 // Año de referencia base
-#define LONGITUD_SCRIPTSALIDA 512 // Longitud máxima de la información devuelta por una función de interface
+#define LONGITUD_SCRIPTSALIDA 131072 // Longitud máxima de la información devuelta por una función de interface
#define MAXARGS 16 // Número máximo de argumentos enviados a un scripts
#define MAXCNX 5 // Máximos intentos de conexión al servidor de Administración
#define PUERTO_WAKEUP 9 // Puerto wake up
#define MAXHARDWARE 128 // Máximos elementos hardware a detectar
-#define MAXSOFTWARE 2048 // Máximos elementos software a detectar
+#define MAXSOFTWARE 8096 // Máximos elementos software a detectar
// ________________________________________________________________________________________________________
// Tipos definidos
// ________________________________________________________________________________________________________
@@ -129,7 +129,7 @@ typedef struct{ // Estructura de las tramas
char arroba; // Caracter arroba siempre
char identificador[14]; // Identificador de la trama, siempre JMMLCAMDJ_MCDJ
char tipo; // Tipo de mensaje
- int lonprm; // Longitud en hexadecimal de los parámetros
+ long lonprm; // Longitud en hexadecimal de los parámetros
char *parametros; // Parámetros de la trama
}TRAMA;
// ________________________________________________________________________________________________________
@@ -228,7 +228,10 @@ const char* tbErrores[]={"Se han generado errores. No se puede continuar la ejec
"090-Error en el fichero de configuración del programa. No se ha definido el parámetro URLMSG",\
"091-Ha habido algún problema al enviar un mensaje de tipo petición al Servidor",\
"092-Error en el fichero de configuración del programa. No se ha definido el parámetro IPLOCAL",\
- "093-No se puede caragar la libraria Windows para trabajar con sockets",\
+ "093-No se puede cargar la librería Windows para trabajar con sockets",\
+ "094-Ha habido algún problerma al procesar la actualización después de crear una imagen",\
+ "095-Ha habido algún problerma al procesar la actualización después de restaurar una imagen",\
+ "096-Ha habido algún problerma al procesar la actualización después de crear un software incremental",\
};
// ________________________________________________________________________________________________________
@@ -307,4 +310,5 @@ BOOLEAN escribeArchivo(char *,char*);
BOOLEAN sendArchivo(SOCKET *,char *);
BOOLEAN recArchivo(SOCKET *,char *);
SOCKET TCPConnect(char *,char*);
+int tomaPuerto(SOCKET);
diff --git a/admin/Sources/Services/ogAdmRepoAux b/admin/Sources/Services/ogAdmRepoAux
index 21c0e4f1..4d245daf 100755
--- a/admin/Sources/Services/ogAdmRepoAux
+++ b/admin/Sources/Services/ogAdmRepoAux
@@ -1,5 +1,7 @@
#!/bin/bash
PARM=`cat`
+#PARM=$@
+
#TODO: ticket 379
#buscar parametro de identificador de operacion.
@@ -9,6 +11,7 @@ PARM=`cat`
#Si esta seteada (en progreso) salir.
+TIME=$SECONDS
BASEDIR=/opt/opengnsys
PATH=$PATH:$BASEDIR/bin
@@ -16,19 +19,53 @@ REPONAME=ogAdmRepo
REPOLOG=$BASEDIR/log/$REPONAME.log
MCASTLOGBASE=$BASEDIR/log/mcastlog
MCASTLOG=$MCASTLOGBASE/ogAdmRepoMcast.`date +%Y%m%d-%H%M%S`
+REPODIR="$BASEDIR/images/"
+
+# Para las sincronizadas
+# BACKUP: Define si se realiza copia de seguridad al crear una imagen (true|false).
+eval $(grep BACKUP $BASEDIR/client/etc/engine.cfg)
+# FS segun kernel. ext4 para < 3.7, para >= BTRFS
+KERNEL=$(file -bkr /opt/opengnsys/tftpboot/ogclient/ogvmlinuz |awk '/Linux/ {for(i=1;i<=NF;i++) if($i~/version/) {v=$(i+1);printf("%d",v);sub(/[0-9]*\./,"",v);printf(".%02d",v)}}')
+[ $KERNEL \< 3.07 ] && IMGFS="EXT4" || IMGFS="BTRFS"
+
# Añade registro de incidencias.
function echolog () {
- date +"%Y%m%d-%H%M%S $*" >> $REPOLOG
+ if [ "$1" == "-o" ]; then
+ shift
+ date +"%Y%m%d-%H%M%S $*"|tee -a $REPOLOG
+ else
+ date +"%Y%m%d-%H%M%S $*" >> $REPOLOG
+ fi
+}
+
+function mountImage () {
+ #@param 1 image_file
+ #@param 2 mount_dir
+ #@param 3 openciones mount
+ [ "$3" != "" ] && OPTMOUNT=" -o $3 "
+ # Si está montado nada que hacer
+ df |grep "$2$" 2>&1 >/dev/null && return 0
+ if [ $IMGFS == "EXT4" ]; then
+ echolog "mount $OPTMOUNT -t ext4 $1 $2"
+ mount $OPTMOUNT -t ext4 $1 $2
+ else
+ echolog "mount $OPTMOUNT -o compress=lzo $1 $2"
+ mount $OPTMOUNT -o compress=lzo "$1" "$2"
+ fi
+ return $?
}
mkdir -p $MCASTLOGBASE
+
PARM1=$(echo $PARM | cut -f1 -d" ")
PARM2=$(echo $PARM | cut -f2 -d" ")
PARM3=$(echo $PARM | cut -f3 -d" ")
PARM4=$(echo $PARM | cut -f4 -d" ")
+# Determinamos el tipo de sistema de fichero de las imagenes segun el kernel que tenga
+
case "$PARM1" in
START_MULTICAST)
@@ -41,15 +78,211 @@ case "$PARM1" in
sendFileMcast $FILE $MCASTOPT &>> $MCASTLOG
case $? in
1) echolog "Parametros insuficientes"
- return 1 ;;
+ exit 1 ;;
2) echolog "Fichero no accesible"
- return 2 ;;
+ exit 2 ;;
3) echolog "Sesion multicast no valida"
- return 3 ;;
+ exit 3 ;;
esac
;;
+ CREATE_IMAGE)
+ # Creamos/Redimensionamos el fichero de imagen y lo montamos para que se pueda escribir sobre el
+ #1 CREATE_IMAGE
+ #2 nombre imagen
+ #3 tipo de imagen [ img | diff ]
+ #4 tamaño imagen
+ LOOPDEVICE=$(losetup -f)
+ DIRMOUNT="$REPODIR/mount/$PARM2"
+ if [ "$PARM3" == "img" ] ; then
+ IMGEXT="img"
+ else
+ IMGEXT="img.diff"
+ DIRMOUNT="$DIRMOUNT.diff"
+ fi
+ IMGFILE="$REPODIR/$PARM2.$IMGEXT"
+ IMGDIR="$(dirname $IMGFILE)"
+ [ -d $IMGDIR ] || mkdir -p $IMGDIR
+ mkdir -p "$DIRMOUNT"
+
+ LOCKFILE="$IMGFILE.lock"
+
+ SIZEREQUIRED="$PARM4"
+
+ # Si existe la imagen hacemos copia de seguridad y la redimesionamos
+ if [ -f "$IMGFILE" ]; then
+ echolog "La imagen $IMGFILE ya existe."
+ # TODO modificar ogGetImageSize
+ IMGSIZE=$(ls -l --block-size=1024 $IMGFILE| cut -f5 -d" ")
+
+ if [ "$BACKUP" == "true" -o "$BACKUP" == "TRUE" -o $IMGSIZE -lt $SIZEREQUIRED ]; then
+ # Si la imagen esta montada la desmonto
+ if [ -r "$DIRMOUNT/ogimg.info" ]; then
+ echolog "umount $DIRMOUNT"
+ umount "$DIRMOUNT"
+ [ $? -ne 0 ] && echolog "Error: No podemos desmontar la imagen para hacer copia de seguridad o redimensionar" && exit 1
+ fi
+ fi
+
+ # Copia de seguridad de la imagen
+ if [ "$BACKUP" == "true" -o "$BACKUP" == "TRUE" ]; then
+ echolog "Copia de seguridad de la imagen anterior"
+ echolog "cp $IMGFILE $IMGFILE.ant"
+ cp "$IMGFILE" "$IMGFILE.ant"
+ echolog mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
+ mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
+ fi
+
+ # Redimensionamos la imagen al tamaño necesario
+ if [ $IMGSIZE -lt $SIZEREQUIRED ];then
+ echolog "Redimensionamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED"
+ echolog "truncate --size=\">$SIZEREQUIRED\"k $IMGFILE"
+ truncate --size=">$SIZEREQUIRED"k $IMGFILE 2>&1 > $REPOLOG
+ # Montamos la imagen, si da error nos salimos
+ if [ $IMGFS == "EXT4" ]; then
+ losetup $LOOPDEVICE "$IMGFILE"
+ echolog "resize2fs -f $LOOPDEVICE"
+ resize2fs -f $LOOPDEVICE &> $REPOLOG
+ else
+ mount -o compress=lzo "$IMGFILE" "$DIRMOUNT"
+ echolog "btrfs filesystem resize max $DIRMOUNT"
+ btrfs filesystem resize max "$DIRMOUNT" 2>&1 > $REPOLOG
+ fi
+ fi
+
+
+ # Si no existe la imagen creamos el fichero.
+ else
+ echolog "Creamos la imagen $IMGFILE al tamaño necesario: $SIZEREQUIRED"
+ echolog dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED
+ dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED
+ #Formateamos imagen
+ echo losetup $LOOPDEVICE "$IMGFILE"
+ losetup $LOOPDEVICE "$IMGFILE"
+ if [ $IMGFS == "EXT4" ] ; then
+ echolog " mkfs.ext4 -i 4096 -b 4096 -L ${PARM2##*\/} $LOOPDEVICE"
+ mkfs.ext4 -i 4096 -b 4096 -L ${PARM2##*\/} $LOOPDEVICE
+ else
+ echolog mkfs.btrfs -L ${PARM2##*\/} $LOOPDEVICE
+ mkfs.btrfs -L ${PARM2##*\/} $LOOPDEVICE #&> $OGLOGCOMMAND
+ fi
+ fi
+ # Montamos la imagen.
+ mountImage "$IMGFILE" "$DIRMOUNT"
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ rmdir "$DIRMOUNT"
+ echolog -o "Error al crear/redimensionar la imagen"
+ exit $RETVAL
+ fi
+
+ #touch "$DIRMOUNT/ogimg.info"
+ echo "mounted"> "$LOCKFILE"
+ TIME2=$[SECONDS-TIME]
+ echolog "Fin creación/redimension de la imagen: $[TIME2/60]m $[TIME2%60]s"
+ # Si existe dispositivo loop lo borramos.
+ [ $LOOPDEVICE ] && losetup -a| grep $LOOPDEVICE &> /dev/null && losetup -d $LOOPDEVICE
+ # TODO: comprobar que no se quede el losetup bloqueado.
+
+ ;;
+ MOUNT_IMAGE)
+ # Montamos el fichero imagen para que se pueda
+ #1 MOUNT_IMAGE
+ #2 nombre imagen
+ #3 tipo de imagen [ img | diff ]
+ DIRMOUNT="$REPODIR""mount/$PARM2"
+ if [ "$PARM3" == "img" ] ; then
+ IMGEXT="img"
+ else
+ IMGEXT="img.diff"
+ DIRMOUNT="$DIRMOUNT.diff"
+ fi
+ IMGFILE="$REPODIR/$PARM2.$IMGEXT"
+ LOCKFILE="$IMGFILE.lock"
+ echolog "Montamos la imagen $IMGFILE "
+ mkdir -p "$DIRMOUNT"
+ mountImage "$IMGFILE" "$DIRMOUNT" ro || (echolog "Error al montar la imagen"; exit 1)
+ ;;
+ UMOUNT_IMAGE)
+ # Desmontamos el fichero imagen.
+ # Si el directorio esta ocupado no se desmontará
+ #1 UMOUNT_IMAGE
+ #2 nombre imagen
+ #3 tipo de imagen [ img | diff ]
+ IMGTYPE="$PARM3"
+ DIRMOUNT="$REPODIR/mount/$PARM2"
+ if [ "$IMGTYPE" == "img" ]; then
+ IMGEXT="img"
+ else
+ DIRMOUNT="$DIRMOUNT.$IMGTYPE"
+ IMGEXT="img.diff"
+ fi
+ LOCKFILE="$REPODIR/$PARM2.$IMGEXT.lock"
+ echolog "Desmontamos la imagen $PARM2 $PARM3 "
+ umount $DIRMOUNT
+ rmdir $DIRMOUNT
+ [ -f $LOCKFILE ] && sed -i s/mounted//g $LOCKFILE
+
+ ;;
+ REDUCE_IMAGE)
+ # Reduce el archivo de la imagen a tamaño datos + 500M
+ #1 REDUCE_IMAGE
+ #2 Nombre Imagen
+ #3 Tipo de imagen [ img |diff ]
+ DIRMOUNT="${REPODIR}mount/${PARM2}"
+ if [ "$PARM3" == "img" ] ; then
+ IMGEXT="img"
+ else
+ IMGEXT="img.diff"
+ DIRMOUNT="$DIRMOUNT.diff"
+ fi
+ IMGFILE="$REPODIR$PARM2.$IMGEXT"
+ LOCKFILE="$IMGFILE.lock"
+ [ ! -f $IMGFILE ] && echolog "Imagen $IMGFILE no existe" && exit 1
+
+ # Solo funciona si la imagen es ext4, si no nos salimos sin error
+ file $IMGFILE |grep -i -e " ext4 filesystem " 2>&1 > /dev/null || exit 0
+
+ [ -d $DIRMOUNT ] || mkdir $DIRMOUNT
+ mountImage "$IMGFILE" "$DIRMOUNT" || (echolog "Error al montar la imagen $IMGFILE"; exit 1)
+
+ # Si el espacio libre menor que 500Mb desmontamos la imagen y nos salimos
+ AVAILABLE=$(df -k|grep $DIRMOUNT|awk '{print $4}')
+ if [ $AVAILABLE -lt 200000 ]; then
+ echolog "reducir imagen REPO $PARM2 $IMGEXT. tamaño minimo, nada que hacer"
+ umount $DIRMOUNT
+ rmdir $DIRMOUNT
+ exit 0
+ fi
+
+ # Calculamos la diferencia entre el tamaño interno y externo
+ EXTSIZE=$(ls -l --block-size=1024 $IMGFILE | cut -f5 -d" ")
+ INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
+ let EDGESIZE=$EXTSIZE-$INTSIZE
+
+ echolog "reducir imagen REPO $PARM2 $IMGEXT, tamaño final: $ENDSIZE"
+ umount $DIRMOUNT
+ LOOPDEVICE=$(losetup -f)
+ losetup $LOOPDEVICE "$IMGFILE"
+
+ # Redimensiono sistema de ficheros
+ echolog "resize2fs -fpM $LOOPDEVICE "
+ resize2fs -fpM $LOOPDEVICE # 2>&1 > $REPOLOG
+ mountImage "$IMGFILE" "$DIRMOUNT"
+ # Calculamos el tamaño final del archivo
+ INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
+ let EXTSIZE=$INTSIZE+$EDGESIZE
+ umount $DIRMOUNT || (echolog "Error al desmontar la imagen $IMGFILE"; exit 1)
+ # Si existe dispositivo loop lo borramos.
+ [ $LOOPDEVICE ] && losetup -a| grep $LOOPDEVICE &> /dev/null && losetup -d $LOOPDEVICE
+ # Corto el archivo al tamaño del sistema de ficheros
+ echo "truncate --size=\"$EXTSIZE\"k $IMGFILE"
+ echolog "truncate --size=\"$EXTSIZE\"k $IMGFILE"
+ truncate --size="$EXTSIZE"k $IMGFILE
+ rmdir $DIRMOUNT
+ echo "reduced" >$LOCKFILE
+
+ ;;
default)
echolog "Solicitud con parametros \"$PARM\" no realizada, no registrada o con errores"
;;
esac
-
diff --git a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp
index 382f839a..929a5264 100644
--- a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp
+++ b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.cpp
@@ -50,7 +50,6 @@ BOOLEAN tomaConfiguracion(char* filecfg) {
fclose(fcfg);
servidoradm[0] = (char) NULL; //inicializar variables globales
- puerto[0] = (char) NULL;
usuario[0] = (char) NULL;
pasguor[0] = (char) NULL;
datasource[0] = (char) NULL;
@@ -83,32 +82,40 @@ BOOLEAN tomaConfiguracion(char* filecfg) {
strcpy(catalog, dualparametro[1]);
}
if (servidoradm[0] == (char) NULL) {
+ liberaMemoria(buffer);
errorLog(modulo, 4, FALSE); // Falta parámetro SERVIDORADM
return (FALSE);
}
if (puerto[0] == (char) NULL) {
+ liberaMemoria(buffer);
errorLog(modulo, 5, FALSE); // Falta parámetro PUERTO
return (FALSE);
}
if (usuario[0] == (char) NULL) {
+ liberaMemoria(buffer);
errorLog(modulo, 6, FALSE); // Falta parámetro USUARIO
return (FALSE);
}
if (pasguor[0] == (char) NULL) {
+ liberaMemoria(buffer);
errorLog(modulo, 7, FALSE); // Falta parámetro PASSWORD
return (FALSE);
}
if (datasource[0] == (char) NULL) {
+ liberaMemoria(buffer);
errorLog(modulo, 8, FALSE); // Falta parámetro DATASOURCE
return (FALSE);
}
if (catalog[0] == (char) NULL) {
+ liberaMemoria(buffer);
errorLog(modulo, 9, FALSE); // Falta parámetro CATALOG
return (FALSE);
}
if (aulaup[0] == (char) NULL) {
strcpy(aulaup, "0"); // Por defecto el conmutador de registro automático esta en off
+
}
+ liberaMemoria(buffer);
return (TRUE);
}
// ________________________________________________________________________________________________________
@@ -133,14 +140,20 @@ BOOLEAN gestionaTrama(SOCKET *socket_c)
if (ptrTrama){
INTROaFINCAD(ptrTrama);
- nfn = copiaParametro("nfn",ptrTrama); // Toma dirección/es IP
+ nfn = copiaParametro("nfn",ptrTrama); // Toma nombre de la función
+
for (i = 0; i < MAXIMAS_FUNCIONES; i++) { // Recorre funciones que procesan las tramas
res = strcmp(tbfuncionesServer[i].nf, nfn);
if (res == 0) { // Encontrada la función que procesa el mensaje
- return (tbfuncionesServer[i].fptr(socket_c, ptrTrama)); // Invoca la función
+ liberaMemoria(nfn);
+ res=tbfuncionesServer[i].fptr(socket_c, ptrTrama); // Invoca la función
+ liberaMemoria((char*)ptrTrama);
+ return(res);
}
}
- /* Sólo puede ser un comando personalizado o su notificación */
+
+ /*
+ Sólo puede ser un comando personalizado o su notificación
if (ptrTrama->tipo == MSG_COMANDO)
return (Comando(socket_c, ptrTrama));
else {
@@ -149,6 +162,7 @@ BOOLEAN gestionaTrama(SOCKET *socket_c)
else
errorLog(modulo, 18, FALSE); // No se reconoce el mensaje
}
+ */
}
else
errorLog(modulo, 17, FALSE); // Error en la recepción
@@ -205,6 +219,7 @@ BOOLEAN respuestaSondeo(SOCKET *socket_c, TRAMA* ptrTrama) {
return (FALSE);
}
strcpy(Ipes, iph); // Copia cadena de IPES
+ liberaMemoria(iph);
initParametros(ptrTrama,0);
strcpy(ptrTrama->parametros, "tso="); // Compone retorno tso (sistemas operativos de los clientes )
for (i = 0; i < MAXIMOS_CLIENTES; i++) {
@@ -307,6 +322,7 @@ BOOLEAN ConsolaRemota(SOCKET *socket_c, TRAMA* ptrTrama)
f = fopen(fileco, "wt");
fclose(f);
}
+ liberaMemoria(iph);
respuestaConsola(socket_c, ptrTrama, TRUE);
return (TRUE);
}
@@ -337,6 +353,7 @@ BOOLEAN EcoConsola(SOCKET *socket_c, TRAMA* ptrTrama)
initParametros(ptrTrama,lSize+LONGITUD_PARAMETROS);
buffer=leeArchivo(fileco);
sprintf(ptrTrama->parametros,"res=%s\r",buffer);
+ liberaMemoria(buffer);
}
else{
initParametros(ptrTrama,0);
@@ -527,9 +544,11 @@ BOOLEAN procesoInclusionClienteWinLnx(SOCKET *socket_c, TRAMA *ptrTrama,int *ido
db.Close();
if (!registraCliente(iph)) { // Incluyendo al cliente en la tabla de sokets
+ liberaMemoria(iph);
errorLog(modulo, 25, FALSE);
return (25);
}
+ liberaMemoria(iph);
return(0);
}
// ________________________________________________________________________________________________________
@@ -651,14 +670,17 @@ BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) {
}
resul = actualizaConfiguracion(db, tbl, cfg, idordenador); // Actualiza la configuración del ordenador
+ liberaMemoria(cfg);
db.Close();
if (!resul) {
+ liberaMemoria(iph);
errorLog(modulo, 29, FALSE);
return (FALSE);
}
if (!registraCliente(iph)) { // Incluyendo al cliente en la tabla de sokets
+ liberaMemoria(iph);
errorLog(modulo, 25, FALSE);
return (FALSE);
}
@@ -681,6 +703,7 @@ BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) {
errorLog(modulo, 26, FALSE);
return (FALSE);
}
+ liberaMemoria(iph);
return (TRUE);
}
// ________________________________________________________________________________________________________
@@ -707,12 +730,12 @@ BOOLEAN procesoInclusionCliente(SOCKET *socket_c, TRAMA *ptrTrama) {
BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
{
char msglog[LONSTD], sqlstr[LONSQL];
- int lon, p, c, i, dato, swu, idsoi, idsfi,k;
+ int lon, p, c,i, dato, swu, idsoi, idsfi,k;
char *ptrPar[MAXPAR], *ptrCfg[6], *ptrDual[2], tbPar[LONSTD];
char *disk, *par, *cpt, *sfi, *soi, *tam; // Parametros que definen una partición
char modulo[] = "actualizaConfiguracion()";
- lon = sprintf(tbPar, "(");
+ lon = 0;
p = splitCadena(ptrPar, cfg, '\n');
for (i = 0; i < p; i++) {
c = splitCadena(ptrCfg, ptrPar[i], '\t');
@@ -723,13 +746,17 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
splitCadena(ptrDual, ptrCfg[1], '=');
par = ptrDual[1]; // Número de partición
- splitCadena(ptrDual, ptrCfg[2], '=');
- cpt = ptrDual[1]; // Código de partición
+ k=splitCadena(ptrDual, ptrCfg[2], '=');
+ if(k==2){
+ cpt = ptrDual[1]; // Código de partición
+ }else{
+ cpt = "0";
+ }
k=splitCadena(ptrDual, ptrCfg[3], '=');
if(k==2){
sfi = ptrDual[1]; // Sistema de ficheros
- /* Comprueba existencia del sistema de ficheros instalado */
+ /* Comprueba existencia del s0xistema de ficheros instalado */
idsfi = checkDato(db, tbl, sfi, "sistemasficheros", "descripcion","idsistemafichero");
}
else
@@ -747,11 +774,13 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
splitCadena(ptrDual, ptrCfg[5], '=');
tam = ptrDual[1]; // Tamaño de la partición
- lon += sprintf(tbPar + lon, "%s,", par);
+ lon += sprintf(tbPar + lon, "(%s, %s),", disk, par);
sprintf(sqlstr, "SELECT numdisk,numpar,codpar,tamano,idsistemafichero,idnombreso"
" FROM ordenadores_particiones WHERE idordenador=%d AND numdisk=%s AND numpar=%s",
ido, disk, par);
+
+
if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
errorLog(modulo, 21, FALSE);
db.GetErrorErrStr(msglog);
@@ -762,6 +791,8 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
sprintf(sqlstr, "INSERT INTO ordenadores_particiones(idordenador,numdisk,numpar,codpar,tamano,idsistemafichero,idnombreso,idimagen)"
" VALUES(%d,%s,%s,0x%s,%s,%d,%d,0)",
ido, disk, par, cpt, tam, idsfi, idsoi);
+
+
if (!db.Execute(sqlstr, tbl)) { // Error al insertar
db.GetErrorErrStr(msglog);
errorInfo(modulo, msglog);
@@ -774,7 +805,7 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
errorInfo(modulo, msglog);
return (FALSE);
}
- if (atoi(cpt) == dato) {// Parámetro tipo de partición igual al almacenado
+ if (strtol(cpt, NULL, 16) == dato) {// Parámetro tipo de partición (hexadecimal) igual al almacenado (decimal)
if (!tbl.Get("tamano", dato)) { // Toma dato
tbl.GetErrorErrStr(msglog); // Error al acceder al registro
errorInfo(modulo, msglog);
@@ -817,10 +848,10 @@ BOOLEAN actualizaConfiguracion(Database db, Table tbl, char* cfg, int ido)
}
}
}
- lon += sprintf(tbPar + lon, "%d)", 0);
+ lon += sprintf(tbPar + lon, "(0,0)");
// Eliminar particiones almacenadas que ya no existen
- sprintf(sqlstr, "DELETE FROM ordenadores_particiones WHERE idordenador=%d AND numdisk=%s AND numpar NOT IN %s",
- ido, disk, tbPar);
+ sprintf(sqlstr, "DELETE FROM ordenadores_particiones WHERE idordenador=%d AND (numdisk, numpar) NOT IN (%s)",
+ ido, tbPar);
if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
errorLog(modulo, 21, FALSE);
db.GetErrorErrStr(msglog);
@@ -945,6 +976,7 @@ BOOLEAN AutoexecCliente(SOCKET *socket_c, TRAMA *ptrTrama) {
exe = copiaParametro("exe",ptrTrama); // Toma identificador del procedimiento inicial
sprintf(fileautoexec, "/tmp/Sautoexec-%s", iph);
+ liberaMemoria(iph);
fileexe = fopen(fileautoexec, "wb"); // Abre fichero de script
if (fileexe == NULL) {
errorLog(modulo, 52, FALSE);
@@ -967,13 +999,15 @@ BOOLEAN AutoexecCliente(SOCKET *socket_c, TRAMA *ptrTrama) {
lon += sprintf(ptrTrama->parametros + lon, "res=0\r");
}
+ db.Close();
fclose(fileexe);
if (!mandaTrama(socket_c, ptrTrama)) {
+ liberaMemoria(exe);
errorLog(modulo, 26, FALSE);
return (FALSE);
}
-
+ liberaMemoria(exe);
return (TRUE);
}
// ________________________________________________________________________________________________________
@@ -1042,15 +1076,18 @@ BOOLEAN recorreProcedimientos(Database db, char* parametros, FILE* fileexe,
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-BOOLEAN ComandosPendientes(SOCKET *socket_c, TRAMA *ptrTrama) {
- char *ido, pids[LONPRM], iph[LONIP];
+BOOLEAN ComandosPendientes(SOCKET *socket_c, TRAMA *ptrTrama)
+{
+ char *ido,*iph,pids[LONPRM];
int ids, idx;
char modulo[] = "ComandosPendientes()";
- strcpy(iph, copiaParametro("iph",ptrTrama)); // Toma direción IP
+ iph = copiaParametro("iph",ptrTrama); // Toma dirección IP
ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
if (!clienteExistente(iph, &idx)) { // Busca índice del cliente
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 47, FALSE);
return (FALSE);
}
@@ -1064,9 +1101,13 @@ BOOLEAN ComandosPendientes(SOCKET *socket_c, TRAMA *ptrTrama) {
strcpy(ptrTrama->parametros, "nfn=NoComandosPtes\r");
}
if (!mandaTrama(socket_c, ptrTrama)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 26, FALSE);
return (FALSE);
}
+ liberaMemoria(iph);
+ liberaMemoria(ido);
return (TRUE);
}
// ________________________________________________________________________________________________________
@@ -1077,7 +1118,7 @@ BOOLEAN ComandosPendientes(SOCKET *socket_c, TRAMA *ptrTrama) {
// Parámetros:
// - ido: Identificador del ordenador
// - cmd: Parámetros del comando (Salida)
-// - ids: Identificador de la acción (Salida)
+// - ids: Identificador de la sesion(Salida)
// Devuelve:
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
@@ -1097,7 +1138,7 @@ BOOLEAN buscaComandos(char *ido, TRAMA *ptrTrama, int *ids)
errorInfo(modulo, msglog);
return (FALSE);
}
- sprintf(sqlstr,"SELECT idaccion,parametros,length( parametros) as lonprm"\
+ sprintf(sqlstr,"SELECT sesion,parametros,length( parametros) as lonprm"\
" FROM acciones WHERE idordenador=%s AND estado='%d' ORDER BY idaccion", ido, ACCION_INICIADA);
if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
errorLog(modulo, 21, FALSE);
@@ -1109,7 +1150,7 @@ BOOLEAN buscaComandos(char *ido, TRAMA *ptrTrama, int *ids)
db.Close();
return (FALSE); // No hay comandos pendientes
} else { // Busca entre todas las acciones de diversos ambitos
- if (!tbl.Get("idaccion", *ids)) { // Toma identificador de la acción
+ if (!tbl.Get("sesion", *ids)) { // Toma identificador de la sesion
tbl.GetErrorErrStr(msglog); // Error al acceder al registro
errorInfo(modulo, msglog);
return (FALSE);
@@ -1145,22 +1186,37 @@ BOOLEAN buscaComandos(char *ido, TRAMA *ptrTrama, int *ids)
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-BOOLEAN DisponibilidadComandos(SOCKET *socket_c, TRAMA *ptrTrama) {
- char *iph, *tpc,msglog[LONSTD];
- int idx;
+//
+BOOLEAN DisponibilidadComandos(SOCKET *socket_c, TRAMA *ptrTrama)
+{
+ char *iph, *tpc;
+ int idx,port_old=0,port_new;
char modulo[] = "DisponibilidadComandos()";
+
- tpc = copiaParametro("tpc",ptrTrama); // Tipo de cliente (Plataforma y S.O.)
- iph = copiaParametro("iph",ptrTrama); // Toma ip
-
+ iph = copiaParametro("iph",ptrTrama); // Toma ip
if (!clienteExistente(iph, &idx)) { // Busca índice del cliente
+ liberaMemoria(iph);
errorLog(modulo, 47, FALSE);
return (FALSE);
}
+ tpc = copiaParametro("tpc",ptrTrama); // Tipo de cliente (Plataforma y S.O.)
strcpy(tbsockets[idx].estado, tpc);
+
+ port_new=tomaPuerto(*socket_c);
+
+ if(tbsockets[idx].sock!=INVALID_SOCKET){
+ port_old=tomaPuerto(tbsockets[idx].sock);
+ if(port_old!=port_new){
+ close(tbsockets[idx].sock); // Cierra el socket si ya existia uno
+ }
+ }
+
tbsockets[idx].sock = *socket_c;
swcSocket = TRUE; // El socket permanece abierto para recibir comandos desde el servidor
+ liberaMemoria(iph);
+ liberaMemoria(tpc);
return (TRUE);
}
// ________________________________________________________________________________________________________
@@ -1172,7 +1228,7 @@ BOOLEAN DisponibilidadComandos(SOCKET *socket_c, TRAMA *ptrTrama) {
// - res: resultado de la ejecución del comando
// - der: Descripción del error si hubiese habido
// - iph: Dirección IP
-// - ids: identificador de la acción notificada
+// - ids: identificador de la sesión
// - ido: Identificador del ordenador que notifica
// - db: Objeto base de datos (operativo)
// - tbl: Objeto tabla
@@ -1186,18 +1242,25 @@ BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db,
char *res, *ids, *der;
char fechafin[LONPRM];
struct tm* st;
+ int idaccion;
char modulo[] = "respuestaEstandar()";
- res = copiaParametro("res",ptrTrama); // Toma resultado
ids = copiaParametro("ids",ptrTrama); // Toma identificador de la sesión
- der = copiaParametro("der",ptrTrama); // Toma descripción del error (si hubiera habido)
if (ids == NULL) // No existe seguimiento de la acción
return (TRUE);
+
+ if (atoi(ids) == 0){ // No existe seguimiento de la acción
+ liberaMemoria(ids);
+ return (TRUE);
+ }
sprintf(sqlstr,
- "SELECT * FROM acciones WHERE idordenador=%s AND idaccion=%s", ido,
- ids);
+ "SELECT * FROM acciones WHERE idordenador=%s"
+ " AND sesion=%s ORDER BY idaccion", ido,ids);
+
+ liberaMemoria(ids);
+
if (!db.Execute(sqlstr, tbl)) { // Error al consultar
errorLog(modulo, 21, FALSE);
db.GetErrorErrStr(msglog);
@@ -1208,25 +1271,40 @@ BOOLEAN respuestaEstandar(TRAMA *ptrTrama, char *iph, char *ido, Database db,
errorLog(modulo, 31, FALSE);
return (TRUE);
}
-
+ if (!tbl.Get("idaccion", idaccion)) { // Toma identificador de la accion
+ tbl.GetErrorErrStr(msglog); // Error al acceder al registro
+ errorInfo(modulo, msglog);
+ return (FALSE);
+ }
st = tomaHora();
sprintf(fechafin, "%d/%d/%d %d:%d:%d", st->tm_year + 1900, st->tm_mon + 1,
st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec);
- sprintf(
- sqlstr,
- "UPDATE acciones SET resultado='%s',estado='%d',fechahorafin='%s',descrinotificacion='%s'"\
- " WHERE idordenador=%s AND idaccion=%s",
- res, ACCION_FINALIZADA, fechafin, der, ido, ids);
+ res = copiaParametro("res",ptrTrama); // Toma resultado
+ der = copiaParametro("der",ptrTrama); // Toma descripción del error (si hubiera habido)
+
+ sprintf(sqlstr,
+ "UPDATE acciones"\
+ " SET resultado='%s',estado='%d',fechahorafin='%s',descrinotificacion='%s'"\
+ " WHERE idordenador=%s AND idaccion=%d",
+ res, ACCION_FINALIZADA, fechafin, der, ido, idaccion);
+
if (!db.Execute(sqlstr, tbl)) { // Error al actualizar
+ liberaMemoria(res);
+ liberaMemoria(der);
db.GetErrorErrStr(msglog);
errorInfo(modulo, msglog);
return (FALSE);
}
-
- if (atoi(res) == ACCION_FALLIDA)
+
+ liberaMemoria(der);
+
+ if (atoi(res) == ACCION_FALLIDA) {
+ liberaMemoria(res);
return (FALSE); // Error en la ejecución del comando
+ }
+ liberaMemoria(res);
return (TRUE);
}
// ________________________________________________________________________________________________________
@@ -1254,7 +1332,10 @@ BOOLEAN enviaComando(TRAMA* ptrTrama, const char *estado)
errorLog(modulo, 3, FALSE);
return (FALSE);
}
+
strcpy(Ipes, iph); // Copia cadena de IPES
+ liberaMemoria(iph);
+
lon = splitCadena(ptrIpes, Ipes, ';');
FINCADaINTRO(ptrTrama);
for (i = 0; i < lon; i++) {
@@ -1264,7 +1345,7 @@ BOOLEAN enviaComando(TRAMA* ptrTrama, const char *estado)
errorLog(modulo, 26, FALSE);
return (FALSE);
}
- close(tbsockets[idx].sock); // Cierra el socket del cliente hasta nueva disponibilidad
+ //close(tbsockets[idx].sock); // Cierra el socket del cliente hasta nueva disponibilidad
}
}
liberaMemoria(Ipes);
@@ -1296,7 +1377,7 @@ BOOLEAN respuestaConsola(SOCKET *socket_c, TRAMA *ptrTrama, int res) {
// Función: Arrancar
//
// Descripción:
-// Procesa el comando Apagar
+// Procesa el comando Arrancar
// Parámetros:
// - socket_c: Socket de la consola al envió el mensaje
// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
@@ -1305,16 +1386,27 @@ BOOLEAN respuestaConsola(SOCKET *socket_c, TRAMA *ptrTrama, int res) {
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
BOOLEAN Arrancar(SOCKET *socket_c, TRAMA* ptrTrama) {
- char *mac, msglog[LONSTD];
+ char *iph,*mac,*mar, msglog[LONSTD];
+ BOOLEAN res;
char modulo[] = "Arrancar()";
+ iph = copiaParametro("iph",ptrTrama); // Toma dirección/es IP
mac = copiaParametro("mac",ptrTrama); // Toma dirección/es MAC
- if (!Levanta(mac)) {
+ mar = copiaParametro("mar",ptrTrama); // Método de arranque (Broadcast o Unicast)
+
+ res=Levanta(iph,mac,mar);
+
+ liberaMemoria(iph);
+ liberaMemoria(mac);
+ liberaMemoria(mar);
+
+ if(!res){
sprintf(msglog, "%s:%s", tbErrores[32], modulo);
errorInfo(modulo, msglog);
respuestaConsola(socket_c, ptrTrama, FALSE);
return (FALSE);
}
+
if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) {
sprintf(msglog, "%s:%s", tbErrores[32], modulo);
errorInfo(modulo, msglog);
@@ -1330,13 +1422,16 @@ BOOLEAN Arrancar(SOCKET *socket_c, TRAMA* ptrTrama) {
// Descripción:
// Enciende ordenadores a través de la red cuyas macs se pasan como parámetro
// Parámetros:
+// - iph: Cadena de direcciones ip separadas por ";"
// - mac: Cadena de direcciones mac separadas por ";"
+// - mar: Método de arranque (1=Broadcast, 2=Unicast)
// Devuelve:
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-BOOLEAN Levanta(char *mac) {
- char *ptrMacs[MAXIMOS_CLIENTES];
+BOOLEAN Levanta(char* iph,char *mac, char* mar)
+{
+ char *ptrIP[MAXIMOS_CLIENTES],*ptrMacs[MAXIMOS_CLIENTES];
int i, lon, res;
SOCKET s;
BOOLEAN bOpt;
@@ -1363,9 +1458,10 @@ BOOLEAN Levanta(char *mac) {
exit(EXIT_FAILURE);
}
/* fin creación de socket */
+ lon = splitCadena(ptrIP, iph, ';');
lon = splitCadena(ptrMacs, mac, ';');
for (i = 0; i < lon; i++) {
- if (!WakeUp(&s, ptrMacs[i])) {
+ if (!WakeUp(&s,ptrIP[i],ptrMacs[i],mar)) {
errorLog(modulo, 49, TRUE);
close(s);
return (FALSE);
@@ -1381,12 +1477,16 @@ BOOLEAN Levanta(char *mac) {
// Enciende el ordenador cuya MAC se pasa como parámetro
// Parámetros:
// - s : Socket para enviar trama magic packet
+// - iph : Cadena con la dirección ip
// - mac : Cadena con la dirección mac en formato XXXXXXXXXXXX
+// - mar: Método de arranque (1=Broadcast, 2=Unicast)
// Devuelve:
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
//_____________________________________________________________________________________________________________
-BOOLEAN WakeUp(SOCKET *s, char *mac) {
+//
+BOOLEAN WakeUp(SOCKET *s, char* iph,char *mac,char* mar)
+{
int i, res;
char HDaddress_bin[6];
struct {
@@ -1407,7 +1507,10 @@ BOOLEAN WakeUp(SOCKET *s, char *mac) {
/* Creación de socket del cliente que recibe la trama magic packet */
WakeUpCliente.sin_family = AF_INET;
WakeUpCliente.sin_port = htons((short) PUERTO_WAKEUP);
- WakeUpCliente.sin_addr.s_addr = htonl(INADDR_BROADCAST); // Para hacerlo con broadcast
+ if(atoi(mar)==2)
+ WakeUpCliente.sin_addr.s_addr = inet_addr(iph); // Para hacerlo con IP
+ else
+ WakeUpCliente.sin_addr.s_addr = htonl(INADDR_BROADCAST); // Para hacerlo con broadcast
res = sendto(*s, (char *) &Trama_WakeUp, sizeof(Trama_WakeUp), 0,
(sockaddr *) &WakeUpCliente, sizeof(WakeUpCliente));
@@ -1455,7 +1558,7 @@ void PasaHexBin(char *cadena, char *numero) {
// Función: RESPUESTA_Arrancar
//
// Descripción:
-// Respuesta del cliente al comando Apagar
+// Respuesta del cliente al comando Arrancar
// Parámetros:
// - socket_c: Socket del cliente que envió el mensaje
// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
@@ -1483,6 +1586,8 @@ BOOLEAN RESPUESTA_Arrancar(SOCKET *socket_c, TRAMA* ptrTrama) {
ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 30, FALSE);
return (FALSE); // Error al registrar notificacion
}
@@ -1490,7 +1595,11 @@ BOOLEAN RESPUESTA_Arrancar(SOCKET *socket_c, TRAMA* ptrTrama) {
tpc = copiaParametro("tpc",ptrTrama); // Tipo de cliente (Plataforma y S.O.)
if (clienteExistente(iph, &i)) // Actualiza estado
strcpy(tbsockets[i].estado, tpc);
-
+
+ liberaMemoria(iph);
+ liberaMemoria(ido);
+ liberaMemoria(tpc);
+
db.Close(); // Cierra conexión
return (TRUE);
}
@@ -1531,7 +1640,8 @@ BOOLEAN Comando(SOCKET *socket_c, TRAMA* ptrTrama) {
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-BOOLEAN RESPUESTA_Comando(SOCKET *socket_c, TRAMA* ptrTrama) {
+BOOLEAN RESPUESTA_Comando(SOCKET *socket_c, TRAMA* ptrTrama)
+ {
char msglog[LONSTD];
Database db;
Table tbl;
@@ -1549,9 +1659,13 @@ BOOLEAN RESPUESTA_Comando(SOCKET *socket_c, TRAMA* ptrTrama) {
ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 30, FALSE);
return (FALSE); // Error al registrar notificacion
}
+ liberaMemoria(iph);
+ liberaMemoria(ido);
db.Close(); // Cierra conexión
return (TRUE);
}
@@ -1611,13 +1725,18 @@ BOOLEAN RESPUESTA_Apagar(SOCKET *socket_c, TRAMA* ptrTrama) {
ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 30, FALSE);
return (FALSE); // Error al registrar notificacion
}
if (clienteExistente(iph, &i)) // Actualiza estado
strcpy(tbsockets[i].estado, CLIENTE_APAGADO);
-
+
+ liberaMemoria(iph);
+ liberaMemoria(ido);
+
db.Close(); // Cierra conexión
return (TRUE);
}
@@ -1677,12 +1796,17 @@ BOOLEAN RESPUESTA_Reiniciar(SOCKET *socket_c, TRAMA* ptrTrama) {
ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 30, FALSE);
return (FALSE); // Error al registrar notificacion
}
if (clienteExistente(iph, &i)) // Actualiza estado
strcpy(tbsockets[i].estado, CLIENTE_APAGADO);
+
+ liberaMemoria(iph);
+ liberaMemoria(ido);
db.Close(); // Cierra conexión
return (TRUE);
@@ -1743,13 +1867,18 @@ BOOLEAN RESPUESTA_IniciarSesion(SOCKET *socket_c, TRAMA* ptrTrama) {
ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 30, FALSE);
return (FALSE); // Error al registrar notificacion
}
if (clienteExistente(iph, &i)) // Actualiza estado
strcpy(tbsockets[i].estado, CLIENTE_APAGADO);
-
+
+ liberaMemoria(iph);
+ liberaMemoria(ido);
+
db.Close(); // Cierra conexión
return (TRUE);
}
@@ -1790,12 +1919,14 @@ BOOLEAN CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-BOOLEAN RESPUESTA_CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
+BOOLEAN RESPUESTA_CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama)
+{
char msglog[LONSTD];
Database db;
Table tbl;
char *iph, *par, *cpt, *ipr, *ido;
char *idi;
+ BOOLEAN res;
char modulo[] = "RESPUESTA_CrearImagen()";
if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion
@@ -1809,6 +1940,8 @@ BOOLEAN RESPUESTA_CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 30, FALSE);
return (FALSE); // Error al registrar notificacion
}
@@ -1819,8 +1952,15 @@ BOOLEAN RESPUESTA_CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
cpt = copiaParametro("cpt",ptrTrama);
ipr = copiaParametro("ipr",ptrTrama);
- if (!actualizaCreacionImagen(db, tbl, idi, par, cpt, ipr, ido)) {
- errorLog(modulo, 53, FALSE);
+ res=actualizaCreacionImagen(db, tbl, idi, par, cpt, ipr, ido);
+
+ liberaMemoria(idi);
+ liberaMemoria(par);
+ liberaMemoria(cpt);
+ liberaMemoria(ipr);
+
+ if(!res){
+ errorLog(modulo, 94, FALSE);
db.Close(); // Cierra conexión
return (FALSE);
}
@@ -1846,13 +1986,16 @@ BOOLEAN RESPUESTA_CrearImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
BOOLEAN actualizaCreacionImagen(Database db, Table tbl, char* idi, char* par,
- char* cpt, char* ipr, char *ido) {
+ char* cpt, char* ipr, char *ido) {
char msglog[LONSTD], sqlstr[LONSQL];
char modulo[] = "actualizaCreacionImagen()";
int idr,ifs;
- /* Toma identificador del repositorio */
- sprintf(sqlstr, "SELECT idrepositorio FROM repositorios WHERE ip='%s'", ipr);
+ /* Toma identificador del repositorio correspondiente al ordenador modelo */
+ sprintf(sqlstr, "SELECT repositorios.idrepositorio"
+ " FROM repositorios"
+ " LEFT JOIN ordenadores USING (idrepositorio)"
+ " WHERE repositorios.ip='%s' AND ordenadores.idordenador=%s", ipr, ido);
if (!db.Execute(sqlstr, tbl)) { // Error al leer
errorLog(modulo, 21, FALSE);
@@ -1867,7 +2010,7 @@ BOOLEAN actualizaCreacionImagen(Database db, Table tbl, char* idi, char* par,
}
/* Toma identificador del perfilsoftware */
- sprintf(sqlstr, "SELECT idperfilsoft FROM ordenadores_particiones WHERE idordenador=%s AND numpar=%s", ido,par);
+ sprintf(sqlstr,"SELECT idperfilsoft FROM ordenadores_particiones WHERE idordenador=%s AND numpar=%s", ido,par);
if (!db.Execute(sqlstr, tbl)) { // Error al leer
errorLog(modulo, 21, FALSE);
@@ -1895,6 +2038,188 @@ BOOLEAN actualizaCreacionImagen(Database db, Table tbl, char* idi, char* par,
return (TRUE);
}
// ________________________________________________________________________________________________________
+// Función: CrearImagenBasica
+//
+// Descripción:
+// Crea una imagen basica usando sincronización
+// Parámetros:
+// - socket_c: Socket de la consola al envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN CrearImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) {
+ char msglog[LONSTD];
+ char modulo[] = "CrearImagenBasica()";
+
+ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) {
+ sprintf(msglog, "%s:%s", tbErrores[32], modulo);
+ errorInfo(modulo, msglog);
+ respuestaConsola(socket_c, ptrTrama, FALSE);
+ return (FALSE);
+ }
+ respuestaConsola(socket_c, ptrTrama, TRUE);
+ return (TRUE);
+}
+// ________________________________________________________________________________________________________
+// Función: RESPUESTA_CrearImagenBasica
+//
+// Descripción:
+// Respuesta del cliente al comando CrearImagenBasica
+// Parámetros:
+// - socket_c: Socket del cliente que envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN RESPUESTA_CrearImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) {
+ return(RESPUESTA_CrearImagen(socket_c,ptrTrama)); // La misma respuesta que la creación de imagen monolítica
+}
+// ________________________________________________________________________________________________________
+// Función: CrearSoftIncremental
+//
+// Descripción:
+// Crea una imagen incremental entre una partición de un disco y una imagen ya creada guardandola en el
+// mismo repositorio y en la misma carpeta donde está la imagen básica
+// Parámetros:
+// - socket_c: Socket de la consola al envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN CrearSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) {
+ char msglog[LONSTD];
+ char modulo[] = "CrearSoftIncremental()";
+
+ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) {
+ sprintf(msglog, "%s:%s", tbErrores[32], modulo);
+ errorInfo(modulo, msglog);
+ respuestaConsola(socket_c, ptrTrama, FALSE);
+ return (FALSE);
+ }
+ respuestaConsola(socket_c, ptrTrama, TRUE);
+ return (TRUE);
+}
+// ________________________________________________________________________________________________________
+// Función: RESPUESTA_CrearSoftIncremental
+//
+// Descripción:
+// Respuesta del cliente al comando crearImagenDiferencial
+// Parámetros:
+// - socket_c: Socket del cliente que envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN RESPUESTA_CrearSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama)
+{
+ Database db;
+ Table tbl;
+ char *iph,*par,*ido,*idf;
+ int ifs;
+ char msglog[LONSTD],sqlstr[LONSQL];
+ char modulo[] = "RESPUESTA_CrearSoftIncremental()";
+
+ if (!db.Open(usuario, pasguor, datasource, catalog)) { // Error de conexion
+ errorLog(modulo, 20, FALSE);
+ db.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (FALSE);
+ }
+
+ iph = copiaParametro("iph",ptrTrama); // Toma dirección ip
+ ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
+
+ if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
+ errorLog(modulo, 30, FALSE);
+ return (FALSE); // Error al registrar notificacion
+ }
+
+ par = copiaParametro("par",ptrTrama);
+
+ /* Toma identificador del perfilsoftware creado por el inventario de software */
+ sprintf(sqlstr,"SELECT idperfilsoft FROM ordenadores_particiones WHERE idordenador=%s AND numpar=%s",ido,par);
+
+ liberaMemoria(iph);
+ liberaMemoria(ido);
+ liberaMemoria(par);
+
+ if (!db.Execute(sqlstr, tbl)) { // Error al leer
+ errorLog(modulo, 21, FALSE);
+ db.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (FALSE);
+ }
+ if (!tbl.Get("idperfilsoft", ifs)) { // Toma dato
+ tbl.GetErrorErrStr(msglog); // Error al acceder al registro
+ errorInfo(modulo, msglog);
+ return (FALSE);
+ }
+
+ /* Actualizar los datos de la imagen */
+ idf = copiaParametro("idf",ptrTrama);
+ sprintf(sqlstr,"UPDATE imagenes SET idperfilsoft=%d WHERE idimagen=%s",ifs,idf);
+ liberaMemoria(idf);
+
+ if (!db.Execute(sqlstr, tbl)) { // Error al recuperar los datos
+ errorLog(modulo, 21, FALSE);
+ db.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (FALSE);
+ }
+ db.Close(); // Cierra conexión
+ return (TRUE);
+}
+// ________________________________________________________________________________________________________
+// Función: actualizaCreacionSoftIncremental
+//
+// Descripción:
+// Esta función actualiza la base de datos con el resultado de la creación de software incremental
+// Parámetros:
+// - db: Objeto base de datos (ya operativo)
+// - tbl: Objeto tabla
+// - idi: Identificador de la imagen
+// - idf: Identificador del software incremental
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN actualizaCreacionSoftIncremental(Database db, Table tbl, char* idi,char* idf)
+{
+ char msglog[LONSTD], sqlstr[LONSQL];
+ char modulo[] = "actualizaCreacionSoftIncremental()";
+
+
+ /* Comprueba si existe ya relación entre la imagen y el software incremental */
+ sprintf(sqlstr, "SELECT * FROM imagenes_softincremental"
+ " WHERE idimagen=%s AND idsoftincremental=%s", idi,idf);
+
+ if (!db.Execute(sqlstr, tbl)) { // Error al leer
+ errorLog(modulo, 21, FALSE);
+ db.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (FALSE);
+ }
+ if (!tbl.ISEOF())
+ return (TRUE); // Ya existe relación
+
+ // Crea relación entre la imagen y el software incremental
+ sprintf(sqlstr,"INSERT INTO imagenes_softincremental (idimagen,idsoftincremental) VALUES (%s,%s)",idi,idf);
+ if (!db.Execute(sqlstr, tbl)) { // Error al ejecutar la sentencia
+ errorLog(modulo, 21, FALSE);
+ db.GetErrorErrStr(msglog);
+ errorInfo(modulo, msglog);
+ return (FALSE);
+ }
+ return (TRUE);
+}
+// ________________________________________________________________________________________________________
// Función: RestaurarImagen
//
// Descripción:
@@ -1920,6 +2245,56 @@ BOOLEAN RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
return (TRUE);
}
// ________________________________________________________________________________________________________
+// Función: RestaurarImagenBasica
+//
+// Descripción:
+// Restaura una imagen básica en una partición
+// Parámetros:
+// - socket_c: Socket de la consola al envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN RestaurarImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) {
+ char msglog[LONSTD];
+ char modulo[] = "RestaurarImagenBasica()";
+
+ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) {
+ sprintf(msglog, "%s:%s", tbErrores[32], modulo);
+ errorInfo(modulo, msglog);
+ respuestaConsola(socket_c, ptrTrama, FALSE);
+ return (FALSE);
+ }
+ respuestaConsola(socket_c, ptrTrama, TRUE);
+ return (TRUE);
+}
+// ________________________________________________________________________________________________________
+// Función: RestaurarSoftIncremental
+//
+// Descripción:
+// Restaura una imagen básica junto con software incremental en una partición
+// Parámetros:
+// - socket_c: Socket de la consola al envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN RestaurarSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) {
+ char msglog[LONSTD];
+ char modulo[] = "RestaurarSoftIncremental()";
+
+ if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) {
+ sprintf(msglog, "%s:%s", tbErrores[32], modulo);
+ errorInfo(modulo, msglog);
+ respuestaConsola(socket_c, ptrTrama, FALSE);
+ return (FALSE);
+ }
+ respuestaConsola(socket_c, ptrTrama, TRUE);
+ return (TRUE);
+}
+// ________________________________________________________________________________________________________
// Función: RESPUESTA_RestaurarImagen
//
// Descripción:
@@ -1931,10 +2306,13 @@ BOOLEAN RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
+//
+BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama)
+{
char msglog[LONSTD];
Database db;
Table tbl;
+ BOOLEAN res;
char *iph, *ido, *idi, *par, *ifs;
char modulo[] = "RESPUESTA_RestaurarImagen()";
@@ -1949,6 +2327,8 @@ BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 30, FALSE);
return (FALSE); // Error al registrar notificacion
}
@@ -1957,8 +2337,17 @@ BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
idi = copiaParametro("idi",ptrTrama); // Toma identificador de la imagen
par = copiaParametro("par",ptrTrama); // Número de partición
ifs = copiaParametro("ifs",ptrTrama); // Identificador del perfil software contenido
- if (!actualizaRestauracionImagen(db, tbl, idi, par, ido, ifs)) {
- errorLog(modulo, 53, FALSE);
+
+ res=actualizaRestauracionImagen(db, tbl, idi, par, ido, ifs);
+
+ liberaMemoria(iph);
+ liberaMemoria(ido);
+ liberaMemoria(idi);
+ liberaMemoria(par);
+ liberaMemoria(ifs);
+
+ if(!res){
+ errorLog(modulo, 95, FALSE);
db.Close(); // Cierra conexión
return (FALSE);
}
@@ -1967,10 +2356,42 @@ BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
return (TRUE);
}
// ________________________________________________________________________________________________________
+//
+// Función: RESPUESTA_RestaurarImagenBasica
+//
+// Descripción:
+// Respuesta del cliente al comando RestaurarImagen
+// Parámetros:
+// - socket_c: Socket del cliente que envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+//
+BOOLEAN RESPUESTA_RestaurarImagenBasica(SOCKET *socket_c, TRAMA* ptrTrama) {
+ return(RESPUESTA_RestaurarImagen(socket_c,ptrTrama));
+}
+// ________________________________________________________________________________________________________
+// Función: RESPUESTA_RestaurarSoftIncremental
+//
+// Descripción:
+// Respuesta del cliente al comando RestaurarSoftIncremental
+// Parámetros:
+// - socket_c: Socket del cliente que envió el mensaje
+// - ptrTrama: Trama recibida por el servidor con el contenido y los parámetros
+// Devuelve:
+// TRUE: Si el proceso es correcto
+// FALSE: En caso de ocurrir algún error
+// ________________________________________________________________________________________________________
+BOOLEAN RESPUESTA_RestaurarSoftIncremental(SOCKET *socket_c, TRAMA* ptrTrama) {
+ return(RESPUESTA_RestaurarImagen(socket_c,ptrTrama));
+}
+// ________________________________________________________________________________________________________
// Función: actualizaRestauracionImagen
//
// Descripción:
-// Esta función actualiza la base de datos con el resultado de la creación de una imagen
+// Esta función actualiza la base de datos con el resultado de la restauración de una imagen
// Parámetros:
// - db: Objeto base de datos (ya operativo)
// - tbl: Objeto tabla
@@ -1983,7 +2404,7 @@ BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *socket_c, TRAMA* ptrTrama) {
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
BOOLEAN actualizaRestauracionImagen(Database db, Table tbl, char* idi,
- char* par, char* ido, char* ifs) {
+ char* par, char* ido, char* ifs) {
char msglog[LONSTD], sqlstr[LONSQL];
char modulo[] = "actualizaRestauracionImagen()";
@@ -2037,10 +2458,13 @@ BOOLEAN Configurar(SOCKET *socket_c, TRAMA* ptrTrama) {
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-BOOLEAN RESPUESTA_Configurar(SOCKET *socket_c, TRAMA* ptrTrama) {
+//
+BOOLEAN RESPUESTA_Configurar(SOCKET *socket_c, TRAMA* ptrTrama)
+{
char msglog[LONSTD];
Database db;
Table tbl;
+ BOOLEAN res;
char *iph, *ido,*cfg;
char modulo[] = "RESPUESTA_Configurar()";
@@ -2055,15 +2479,24 @@ BOOLEAN RESPUESTA_Configurar(SOCKET *socket_c, TRAMA* ptrTrama) {
ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 30, FALSE);
return (FALSE); // Error al registrar notificacion
}
cfg = copiaParametro("cfg",ptrTrama); // Toma configuración de particiones
- if(!actualizaConfiguracion(db, tbl, cfg, atoi(ido))){ // Actualiza la configuración del ordenador
+ res=actualizaConfiguracion(db, tbl, cfg, atoi(ido)); // Actualiza la configuración del ordenador
+
+ liberaMemoria(iph);
+ liberaMemoria(ido);
+ liberaMemoria(cfg);
+
+ if(!res){
errorLog(modulo, 24, FALSE);
return (FALSE); // Error al registrar notificacion
}
+
db.Close(); // Cierra conexión
return (TRUE);
}
@@ -2104,11 +2537,13 @@ BOOLEAN EjecutarScript(SOCKET *socket_c, TRAMA* ptrTrama) {
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-BOOLEAN RESPUESTA_EjecutarScript(SOCKET *socket_c, TRAMA* ptrTrama) {
+BOOLEAN RESPUESTA_EjecutarScript(SOCKET *socket_c, TRAMA* ptrTrama)
+{
char msglog[LONSTD];
Database db;
Table tbl;
- char *iph, *ido;
+ char *iph, *ido,*cfg;
+ int res;
char modulo[] = "RESPUESTA_EjecutarScript()";
@@ -2123,11 +2558,23 @@ BOOLEAN RESPUESTA_EjecutarScript(SOCKET *socket_c, TRAMA* ptrTrama) {
ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 30, FALSE);
return (FALSE); // Error al registrar notificacion
}
+
+ cfg = copiaParametro("cfg",ptrTrama); // Toma configuración de particiones
+
+ if(cfg){
+ res=actualizaConfiguracion(db, tbl, cfg, atoi(ido)); // Actualiza la configuración del ordenador
+ liberaMemoria(cfg);
+ }
- // Acciones posteriores
+ liberaMemoria(iph);
+ liberaMemoria(ido);
+
+
db.Close(); // Cierra conexión
return (TRUE);
}
@@ -2172,6 +2619,7 @@ BOOLEAN RESPUESTA_InventarioHardware(SOCKET *socket_c, TRAMA* ptrTrama) {
char msglog[LONSTD];
Database db;
Table tbl;
+ BOOLEAN res;
char *iph, *ido, *idc, *npc, *hrd, *buffer;
char modulo[] = "RESPUESTA_InventarioHardware()";
@@ -2181,25 +2629,37 @@ BOOLEAN RESPUESTA_InventarioHardware(SOCKET *socket_c, TRAMA* ptrTrama) {
errorInfo(modulo, msglog);
return (FALSE);
}
+
iph = copiaParametro("iph",ptrTrama); // Toma dirección ip del cliente
ido = copiaParametro("ido",ptrTrama); // Toma identificador del cliente
- npc = copiaParametro("npc",ptrTrama); // Toma Nombre del cliente
- idc = copiaParametro("idc",ptrTrama); // Toma identificador del Centro
if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 30, FALSE);
return (FALSE); // Error al registrar notificacion
}
// Lee archivo de inventario enviado anteriormente
hrd = copiaParametro("hrd",ptrTrama);
buffer = rTrim(leeArchivo(hrd));
-
- if (buffer) {
- if (!actualizaHardware(db, tbl, buffer, ido, npc, idc)) {
- errorLog(modulo, 53, FALSE);
- return (FALSE);
- }
+
+ npc = copiaParametro("npc",ptrTrama);
+ idc = copiaParametro("idc",ptrTrama); // Toma identificador del Centro
+
+ if (buffer)
+ res=actualizaHardware(db, tbl, buffer, ido, npc, idc);
+
+ liberaMemoria(iph);
+ liberaMemoria(ido);
+ liberaMemoria(npc);
+ liberaMemoria(idc);
+ liberaMemoria(buffer);
+
+ if(!res){
+ errorLog(modulo, 53, FALSE);
+ return (FALSE);
}
+
db.Close(); // Cierra conexión
return (TRUE);
}
@@ -2216,15 +2676,16 @@ BOOLEAN RESPUESTA_InventarioHardware(SOCKET *socket_c, TRAMA* ptrTrama) {
// - npc: Nombre del ordenador
// - idc: Identificador del centro o Unidad organizativa
// ________________________________________________________________________________________________________
-BOOLEAN actualizaHardware(Database db, Table tbl, char* hrd, char*ido,
- char* npc, char *idc) {
+//
+BOOLEAN actualizaHardware(Database db, Table tbl, char* hrd, char*ido,char* npc, char *idc)
+{
char msglog[LONSTD], sqlstr[LONSQL];
int idtipohardware, idperfilhard;
int lon, i, j, aux;
bool retval;
- char *tbHardware[MAXHARDWARE];
+ char *whard;
int tbidhardware[MAXHARDWARE];
- char *dualHardware[2], descripcion[250], strInt[LONINT], *idhardwares;
+ char *tbHardware[MAXHARDWARE],*dualHardware[2], descripcion[250], strInt[LONINT], *idhardwares;
char modulo[] = "actualizaHardware()";
/* Toma Centro (Unidad Organizativa) */
@@ -2241,11 +2702,11 @@ BOOLEAN actualizaHardware(Database db, Table tbl, char* hrd, char*ido,
errorInfo(modulo, msglog);
return (FALSE);
}
- hrd=escaparCadena(hrd); // Codificar comillas simples
- if(!hrd)
+ whard=escaparCadena(hrd); // Codificar comillas simples
+ if(!whard)
return (FALSE);
/* Recorre componentes hardware*/
- lon = splitCadena(tbHardware, hrd, '\n');
+ lon = splitCadena(tbHardware, whard, '\n');
if (lon > MAXHARDWARE)
lon = MAXHARDWARE; // Limita el número de componentes hardware
/*
@@ -2361,6 +2822,7 @@ BOOLEAN actualizaHardware(Database db, Table tbl, char* hrd, char*ido,
else {
retval=TRUE;
}
+ liberaMemoria(whard);
liberaMemoria(idhardwares);
return (retval);
}
@@ -2536,6 +2998,7 @@ BOOLEAN RESPUESTA_InventarioSoftware(SOCKET *socket_c, TRAMA* ptrTrama) {
char msglog[LONSTD];
Database db;
Table tbl;
+ BOOLEAN res;
char *iph, *ido, *npc, *idc, *par, *sft, *buffer;
char modulo[] = "RESPUESTA_InventarioSoftware()";
@@ -2548,24 +3011,35 @@ BOOLEAN RESPUESTA_InventarioSoftware(SOCKET *socket_c, TRAMA* ptrTrama) {
iph = copiaParametro("iph",ptrTrama); // Toma dirección ip
ido = copiaParametro("ido",ptrTrama); // Toma identificador del ordenador
- npc = copiaParametro("npc",ptrTrama); // Toma Nombre del cliente
- idc = copiaParametro("idc",ptrTrama); // Toma identificador del Centro
if (!respuestaEstandar(ptrTrama, iph, ido, db, tbl)) {
+ liberaMemoria(iph);
+ liberaMemoria(ido);
errorLog(modulo, 30, FALSE);
return (FALSE); // Error al registrar notificacion
}
+
+ npc = copiaParametro("npc",ptrTrama);
+ idc = copiaParametro("idc",ptrTrama); // Toma identificador del Centro
par = copiaParametro("par",ptrTrama);
- // Lee archivo de inventario enviado anteriormente
sft = copiaParametro("sft",ptrTrama);
buffer = rTrim(leeArchivo(sft));
- if (buffer) {
- if (!actualizaSoftware(db, tbl, buffer, par, ido, npc, idc)) {
- errorLog(modulo, 82, FALSE);
- return (FALSE);
- }
- }
+ if (buffer)
+ res=actualizaSoftware(db, tbl, buffer, par, ido, npc, idc);
+
+ liberaMemoria(iph);
+ liberaMemoria(ido);
+ liberaMemoria(npc);
+ liberaMemoria(idc);
+ liberaMemoria(par);
+ liberaMemoria(sft);
+
+ if(!res){
+ errorLog(modulo, 82, FALSE);
+ return (FALSE);
+ }
+
db.Close(); // Cierra conexión
return (TRUE);
}
@@ -2586,13 +3060,13 @@ BOOLEAN RESPUESTA_InventarioSoftware(SOCKET *socket_c, TRAMA* ptrTrama) {
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
-BOOLEAN actualizaSoftware(Database db, Table tbl, char* sft, char* par,
- char* ido, char* npc, char* idc) {
+BOOLEAN actualizaSoftware(Database db, Table tbl, char* sft, char* par,char* ido, char* npc, char* idc)
+{
int i, j, lon, aux, idperfilsoft;
bool retval;
- char *tbSoftware[MAXSOFTWARE];
+ char *wsft;
int tbidsoftware[MAXSOFTWARE];
- char msglog[LONSTD], sqlstr[LONSQL], strInt[LONINT], *idsoftwares;
+ char *tbSoftware[MAXSOFTWARE],msglog[LONSTD], sqlstr[LONSQL], strInt[LONINT], *idsoftwares;
char modulo[] = "actualizaSoftware()";
/* Toma Centro (Unidad Organizativa) y perfil software */
@@ -2623,12 +3097,13 @@ BOOLEAN actualizaSoftware(Database db, Table tbl, char* sft, char* par,
}
tbl.MoveNext();
}
- sft=escaparCadena(sft); // Codificar comillas simples
- if(!sft)
+ wsft=escaparCadena(sft); // Codificar comillas simples
+ if(!wsft)
return (FALSE);
/* Recorre componentes software*/
- lon = splitCadena(tbSoftware, sft, '\n');
+ lon = splitCadena(tbSoftware, wsft, '\n');
+
if (lon == 0)
return (true); // No hay lineas que procesar
if (lon > MAXSOFTWARE)
@@ -2712,6 +3187,7 @@ BOOLEAN actualizaSoftware(Database db, Table tbl, char* sft, char* par,
else {
retval=TRUE;
}
+ liberaMemoria(wsft);
liberaMemoria(idsoftwares);
return (retval);
}
@@ -2871,9 +3347,11 @@ BOOLEAN enviaArchivo(SOCKET *socket_c, TRAMA *ptrTrama) {
// Toma parámetros
nfl = copiaParametro("nfl",ptrTrama); // Toma nombre completo del archivo
if (!sendArchivo(socket_c, nfl)) {
+ liberaMemoria(nfl);
errorLog(modulo, 57, FALSE);
return (FALSE);
}
+ liberaMemoria(nfl);
return (TRUE);
}
// ________________________________________________________________________________________________________
@@ -2897,9 +3375,11 @@ BOOLEAN recibeArchivo(SOCKET *socket_c, TRAMA *ptrTrama) {
ptrTrama->tipo = MSG_NOTIFICACION;
enviaFlag(socket_c, ptrTrama);
if (!recArchivo(socket_c, nfl)) {
+ liberaMemoria(nfl);
errorLog(modulo, 58, FALSE);
return (FALSE);
}
+ liberaMemoria(nfl);
return (TRUE);
}
// ________________________________________________________________________________________________________
@@ -2918,7 +3398,7 @@ BOOLEAN recibeArchivo(SOCKET *socket_c, TRAMA *ptrTrama) {
BOOLEAN envioProgramacion(SOCKET *socket_c, TRAMA *ptrTrama)
{
char sqlstr[LONSQL], msglog[LONSTD];
- char *idp,iph[LONIP],mac[LONMAC];
+ char *idp,*mar,iph[LONIP],mac[LONMAC];
Database db;
Table tbl;
int idx,idcomando;
@@ -2931,17 +3411,21 @@ BOOLEAN envioProgramacion(SOCKET *socket_c, TRAMA *ptrTrama)
return (FALSE);
}
- idp = copiaParametro("idp",ptrTrama); // Toma identificador de laprogramación de la tabla acciones
+ idp = copiaParametro("idp",ptrTrama); // Toma identificador de la programación de la tabla acciones
sprintf(sqlstr, "SELECT ordenadores.ip,ordenadores.mac,acciones.idcomando FROM acciones "\
" INNER JOIN ordenadores ON ordenadores.ip=acciones.ip"\
" WHERE acciones.idprogramacion=%s",idp);
+
+ liberaMemoria(idp);
+
if (!db.Execute(sqlstr, tbl)) { // Error al leer
errorLog(modulo, 21, FALSE);
db.GetErrorErrStr(msglog);
errorInfo(modulo, msglog);
return (FALSE);
}
+ db.Close();
if(tbl.ISEOF())
return (TRUE); // No existen registros
@@ -2968,11 +3452,14 @@ BOOLEAN envioProgramacion(SOCKET *socket_c, TRAMA *ptrTrama)
errorInfo(modulo, msglog);
return (FALSE);
}
- if (!Levanta(mac)) {
+ mar = copiaParametro("mar",ptrTrama); // Toma modo de arranque si el comando es Arrancar
+ if (!Levanta(iph,mac,mar)) {
sprintf(msglog, "%s:%s", tbErrores[32], modulo);
errorInfo(modulo, msglog);
+ liberaMemoria(mar);
return (FALSE);
}
+ liberaMemoria(mar);
}
if (clienteDisponible(iph, &idx)) { // Si el cliente puede recibir comandos
strcpy(tbsockets[idx].estado, CLIENTE_OCUPADO); // Actualiza el estado del cliente
@@ -2980,7 +3467,7 @@ BOOLEAN envioProgramacion(SOCKET *socket_c, TRAMA *ptrTrama)
errorLog(modulo, 26, FALSE);
return (FALSE);
}
- close(tbsockets[idx].sock); // Cierra el socket del cliente hasta nueva disponibilidad
+ //close(tbsockets[idx].sock); // Cierra el socket del cliente hasta nueva disponibilidad
}
tbl.MoveNext();
}
@@ -3068,11 +3555,31 @@ int main(int argc, char *argv[]) {
strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_CrearImagen");
tbfuncionesServer[cf++].fptr = &RESPUESTA_CrearImagen;
+ strcpy(tbfuncionesServer[cf].nf, "CrearImagenBasica");
+ tbfuncionesServer[cf++].fptr = &CrearImagenBasica;
+ strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_CrearImagenBasica");
+ tbfuncionesServer[cf++].fptr = &RESPUESTA_CrearImagenBasica;
+
+ strcpy(tbfuncionesServer[cf].nf, "CrearSoftIncremental");
+ tbfuncionesServer[cf++].fptr = &CrearSoftIncremental;
+ strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_CrearSoftIncremental");
+ tbfuncionesServer[cf++].fptr = &RESPUESTA_CrearSoftIncremental;
+
strcpy(tbfuncionesServer[cf].nf, "RestaurarImagen");
tbfuncionesServer[cf++].fptr = &RestaurarImagen;
strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_RestaurarImagen");
tbfuncionesServer[cf++].fptr = &RESPUESTA_RestaurarImagen;
+ strcpy(tbfuncionesServer[cf].nf, "RestaurarImagenBasica");
+ tbfuncionesServer[cf++].fptr = &RestaurarImagenBasica;
+ strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_RestaurarImagenBasica");
+ tbfuncionesServer[cf++].fptr = &RESPUESTA_RestaurarImagenBasica;
+
+ strcpy(tbfuncionesServer[cf].nf, "RestaurarSoftIncremental");
+ tbfuncionesServer[cf++].fptr = &RestaurarSoftIncremental;
+ strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_RestaurarSoftIncremental");
+ tbfuncionesServer[cf++].fptr = &RESPUESTA_RestaurarSoftIncremental;
+
strcpy(tbfuncionesServer[cf].nf, "Configurar");
tbfuncionesServer[cf++].fptr = &Configurar;
strcpy(tbfuncionesServer[cf].nf, "RESPUESTA_Configurar");
@@ -3143,7 +3650,7 @@ int main(int argc, char *argv[]) {
swcSocket = FALSE; // Por defecto se cerrara el socket de cliente después del anális de la trama
if (!gestionaTrama(&socket_c)) {
errorLog(modulo, 39, TRUE);
- //close(socket_c);
+ //close(socket_c);/tmp/
//break;
}
if (!swcSocket) // Sólo se cierra cuando el cliente NO espera comandos ineractivos
diff --git a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h
index fb2f117a..bc887d08 100644
--- a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h
+++ b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.h
@@ -84,8 +84,8 @@ BOOLEAN Comando(SOCKET *,TRAMA *);
BOOLEAN RESPUESTA_Comando(SOCKET *,TRAMA *);
BOOLEAN Arrancar(SOCKET *,TRAMA *);
-BOOLEAN Levanta(char*);
-BOOLEAN WakeUp(SOCKET *,char *);
+BOOLEAN Levanta(char*,char*,char*);
+BOOLEAN WakeUp(SOCKET *,char*,char*,char*);
void PasaHexBin(char *,char *);
BOOLEAN RESPUESTA_Arrancar(SOCKET *,TRAMA*);
BOOLEAN Apagar(SOCKET *,TRAMA *);
@@ -95,10 +95,19 @@ BOOLEAN RESPUESTA_Reiniciar(SOCKET *,TRAMA *);
BOOLEAN IniciarSesion(SOCKET *,TRAMA *);
BOOLEAN RESPUESTA_IniciarSesion(SOCKET *,TRAMA *);
BOOLEAN CrearImagen(SOCKET *,TRAMA *);
+BOOLEAN CrearImagenBasica(SOCKET *,TRAMA *);
+BOOLEAN CrearSoftIncremental(SOCKET *,TRAMA *);
BOOLEAN RESPUESTA_CrearImagen(SOCKET *,TRAMA *);
+BOOLEAN RESPUESTA_CrearImagenBasica(SOCKET *,TRAMA *);
+BOOLEAN RESPUESTA_CrearSoftIncremental(SOCKET *,TRAMA *);
BOOLEAN actualizaCreacionImagen(Database,Table,char*,char*,char*,char*,char*);
+BOOLEAN actualizaCreacionSoftIncremental(Database,Table,char*,char*);
BOOLEAN RestaurarImagen(SOCKET *,TRAMA *);
+BOOLEAN RestaurarImagenBasica(SOCKET *,TRAMA *);
+BOOLEAN RestaurarSoftIncremental(SOCKET *,TRAMA *);
BOOLEAN RESPUESTA_RestaurarImagen(SOCKET *,TRAMA *);
+BOOLEAN RESPUESTA_RestaurarImagenBasica(SOCKET *,TRAMA *);
+BOOLEAN RESPUESTA_RestaurarSoftIncremental(SOCKET *,TRAMA *);
BOOLEAN actualizaRestauracionImagen(Database,Table,char*,char*,char*,char*);
BOOLEAN Configurar(SOCKET *,TRAMA* );
BOOLEAN RESPUESTA_Configurar(SOCKET *,TRAMA* );
diff --git a/admin/Sources/Services/ogAdmServerAux b/admin/Sources/Services/ogAdmServerAux
new file mode 100755
index 00000000..fdc98bf2
--- /dev/null
+++ b/admin/Sources/Services/ogAdmServerAux
@@ -0,0 +1,41 @@
+#!/bin/bash
+# Script para solicitar acciones al servidor de administración desde los clientes.
+# Acciones permitidas: configurar modo de arranque.
+PARM=`cat`
+
+
+
+BASEDIR=/opt/opengnsys
+PATH=$PATH:$BASEDIR/bin
+SERVERNAME=ogAdmServer
+SERVERLOG=$BASEDIR/log/$SERVERNAME.log
+
+
+# Añade registro de incidencias.
+function echolog () {
+ date +"%Y%m%d-%H%M%S $*" >> $SERVERLOG
+}
+
+
+PARM1=$(echo $PARM | cut -f1 -d" ")
+PARM2=$(echo $PARM | cut -f2 -d" ")
+PARM3=$(echo $PARM | cut -f3 -d" ")
+PARM4=$(echo $PARM | cut -f4 -d" ")
+
+
+case "$PARM1" in
+ SET_CLIENTMODE)
+ #1 SET_CLIENTMODE
+ #2 template
+ #3 pc_name o group_pc
+ TEMPLATE="$PARM2"
+ PC="$PARM3"
+ echolog "Ejecutar $(which setclientmode) $FILE $MCASTOPT"
+ setclientmode $TEMPLATE $PC &>> $SERVERLOG
+ exit $?
+ ;;
+ default)
+ echolog "Solicitud con parametros \"$PARM\" no realizada, no registrada o con errores"
+ ;;
+esac
+
diff --git a/admin/Sources/Services/opengnsys.default b/admin/Sources/Services/opengnsys.default
index 24d24265..f998ccfb 100644
--- a/admin/Sources/Services/opengnsys.default
+++ b/admin/Sources/Services/opengnsys.default
@@ -2,8 +2,10 @@
# RUN_OGADMREPO run OpenGnSys Repository Manager service.
# RUN_BTTRACKER run Bittorrent Tracker
# RUN_BTSEEDER starts seeding of selected torrent files
+# RUN_CRON run Cron script to check started processes
RUN_OGADMSERVER="yes"
RUN_OGADMREPO="yes"
RUN_OGADMAGENT="yes"
RUN_BTTRACKER="yes"
RUN_BTSEEDER="yes"
+RUN_CRONJOB="yes"
diff --git a/admin/Sources/Services/opengnsys.init b/admin/Sources/Services/opengnsys.init
index 2c46fc70..359a3166 100755
--- a/admin/Sources/Services/opengnsys.init
+++ b/admin/Sources/Services/opengnsys.init
@@ -40,6 +40,11 @@ REPOAUXNAME=ogAdmRepoAux
REPOAUXDAEMON=$BASEDIR/sbin/$REPOAUXNAME
REPOAUXPORT=$(awk -F= '/PUERTO/ {print $2+1}' $SERVERCFG 2>/dev/null)
############## ADV
+############# IRINA # para setBootMode desde el cliente
+SERVERAUXNAME=ogAdmServerAux
+SERVERAUXDAEMON=$BASEDIR/sbin/$SERVERAUXNAME
+SERVERAUXPORT=2011
+############# IRINA
#
# Servidor de tareas programadas
@@ -75,7 +80,12 @@ fi
# Configuración de arranque según la distribución Linux usada.
config() {
- OSDISTRIB=$(lsb_release -is 2>/dev/null)
+ if [ -f /etc/os-release ]; then
+ source /etc/os-release
+ OSDISTRIB="$NAME"
+ else
+ OSDISTRIB=$(lsb_release -is 2>/dev/null)
+ fi
case "$OSDISTRIB" in
Ubuntu|Debian|LinuxMint)
INITFUNCTIONS=/lib/lsb/init-functions
@@ -139,6 +149,10 @@ arranca_demonios() {
$ACTIONMSG "Iniciando demonio: $SERVERNAME"
$DAEMONSTART $SERVERDAEMON $EXTRAOPTS $SERVERDAEMON_OPTIONS $ENDOPTS
[ $? = 0 ] && $SUCCESSMSG || $FAILMSG
+ # Para SetBootmode desde el cliente
+ $ACTIONMSG "Iniciando demonio: $SERVERAUXNAME" #
+ faucet $SERVERAUXPORT --daemon --in bash -c "$SERVERAUXDAEMON" # NUEVO
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
fi
if [ $RUN_OGADMSERVER = "yes" ] && [ $RUN_OGADMREPO = "yes" ]; then
sleep 5 # Damos tiempo a que ogAdmServer este funcionando
diff --git a/admin/WebConsole/asistentes/AsistenteParticionado.php b/admin/WebConsole/asistentes/AsistenteParticionado.php
index fdb85b88..160bb62e 100644
--- a/admin/WebConsole/asistentes/AsistenteParticionado.php
+++ b/admin/WebConsole/asistentes/AsistenteParticionado.php
@@ -58,21 +58,16 @@ if (!$cmd)
//indicamos al objeto xajax se encargue de generar el javascript de las funciones registradas por ejm: ListarParticionesXip
$xajax->printJavascript('../xajax/');
?>
+<script>
+function doOnload(){
+ calculateFreeDisk(document.fdatos);
+}
+
+</script>
</head>
-<body onload="
- var disks=document.getElementsByName('disksize');
- var min=null;
- for (var i=0; i<disks.length; i++) {
- var val=parseInt(disks[i].textContent);
- if (min==null || val<min) {
- min=val;
- }
- }
- document.getElementById('minsize').value=min;
- document.getElementById('freedisk').value=min;
-">
+<body onload="doOnload()">
<?php
switch($ambito){
case $AMBITO_CENTROS :
@@ -103,7 +98,20 @@ $xajax->printJavascript('../xajax/');
: '.$textambito.'</U></span>&nbsp;&nbsp;</span></p>';
$sws=0x11111; // Mostrar todas las configuraciones diferentes.
- pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false);
+ $configuraciones = pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false);
+ global $tbKeys; // Tabla contenedora de claves de configuración
+ global $conKeys; // Contador de claves de configuración
+ // numero de discos minimo: partimos de un valor alto y comparamos con la configuracion de cada pc.
+ $mindisks = 10;
+ foreach($configuraciones as $configuracion){
+ // Separamos las configuraciones segun el disco al que pertenezcan
+ $diskConfigs = splitConfigurationsByDisk($configuracion);
+ // En diskconfigs tendremos un array con tantas configuraciones como discos,
+ // no quedamos con su length que será el numero de discos
+ $aux = count($diskConfigs);
+ if ( $mindisks > $aux )
+ $mindisks = $aux;
+ }
?>
<form align=center name="fdatos" >
@@ -112,7 +120,11 @@ $xajax->printJavascript('../xajax/');
<tr>
<td>
<?php echo $TbMsg[35].":\n"; // Disco ?>
- <input type="text" name="n_disk" value="1">
+ <select id="n_disk" onchange="calculateFreeDisk(document.fdatos)">
+ <?php for($d = 1; $d <= $mindisks; $d++){
+ echo "<option value=\"$d\">$d</option>\n";
+ } ?>
+ </select>
</td>
</tr>
<tr>
diff --git a/admin/WebConsole/asistentes/gestores/gestor_Comandos.php b/admin/WebConsole/asistentes/gestores/gestor_Comandos.php
index 28321f89..d007e551 100644
--- a/admin/WebConsole/asistentes/gestores/gestor_Comandos.php
+++ b/admin/WebConsole/asistentes/gestores/gestor_Comandos.php
@@ -134,7 +134,6 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){
$cmd->ParamSetValor("@idcentro",$idcentro);
$auxID=split(",",$cadenaid);
$auxIP=split(";",$cadenaip);
- $vez=0;
for ($i=0;$i<sizeof($auxID);$i++){
$cmd->ParamSetValor("@idordenador",$auxID[$i]);
$cmd->ParamSetValor("@ip",$auxIP[$i]);
@@ -144,12 +143,8 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){
@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idcentro)";
$resul=$cmd->Ejecutar();
//echo "<br>".$cmd->texto;
- if(empty($vez)){
- $idaccion=$cmd->Autonumerico();
- $acciones=chr(13)."ids=".$idaccion.chr(13); // Para seguimiento
- }
- $vez++;
}
+ $acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento
}
if (!$resul){
echo '<SCRIPT language="javascript">';
diff --git a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php
index babd3899..9381d5cf 100644
--- a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php
+++ b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php
@@ -74,11 +74,12 @@ if ($ambito == 16)
$cmd->texto='SELECT aulas.modp2p,aulas.timep2p FROM aulas JOIN ordenadores ON ordenadores.idaula=aulas.idaula where ordenadores.idordenador=' . $idambito ;
}
+ $SelectHtml="";
$rs=new Recordset;
$rs->Comando=&$cmd;
-if ($rs->Abrir()){
+ if ($rs->Abrir()){
$rs->Primero();
- $SelectHtml.= $TbMsg["WDI26"] . ' :<input type="text" size="10" name="modp2p" value="'.$rs->campos["modp2p"] . '" /> <br />';
+ $SelectHtml.= $TbMsg["WDI26"] . ' :<input type="text" size="10" name="modp2p" value="'.$rs->campos["modp2p"] . '" /> <br />';
$rs->Siguiente();
$SelectHtml.= $TbMsg["WDI30"] . ' :<input type="text" size="10" maxlength="15" name="timep2p" value="'.$rs->campos["timep2p"] . '" /> <br />';
$rs->Siguiente();
@@ -186,9 +187,9 @@ $subconsultarepo='SELECT idrepositorio FROM ordenadores where idordenador=' . $
$SelectHtml="";
+ // 1.0.5 imagenes.tipo =1 para que solo muestre las monoloticas.
$cmd->texto="SELECT *,repositorios.ip as iprepositorio FROM imagenes
- INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio AND repositorios.idrepositorio=(" . $subconsultarepo . ")";
-
+ INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio AND repositorios.idrepositorio=(" . $subconsultarepo . ") WHERE imagenes.tipo=1";
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -342,6 +343,7 @@ $SelectHtml.='<OPTION value="CHROMEOS"> ChromeOS </OPTION>';
$SelectHtml.='<OPTION value="CHROMEOS-KRN"> ChromeOS Kernel </OPTION>';
$SelectHtml.='<OPTION value="CHROMEOS-RESERV"> ChromeOS Reserved </OPTION>';
$SelectHtml.='<OPTION value="HFS"> MacOS HFS </OPTION>';
+$SelectHtml.='<OPTION value="HFS-BOOT"> MacOS HFS Boot </OPTION>';
$SelectHtml.='<OPTION value="HFS-RAID"> MacOS HFS RAID </OPTION>';
$SelectHtml.='<OPTION value="FREEBSD"> FreeBSD </OPTION>';
$SelectHtml.='<OPTION value="FREEBSD-DISK"> FreeBSD Disk </OPTION>';
@@ -377,7 +379,8 @@ function htmlForm_sizepart($cmd,$numpar)
return($SelectHtml);
}
-function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
+
+function pintaParticionesAsistenteDeployImage($cmd,$configuraciones,$idordenadores,$cc)
{
global $tbKeys; // Tabla contenedora de claves de configuración
global $conKeys; // Contador de claves de configuración
diff --git a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php
index 0d968874..4cf3fead 100644
--- a/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php
+++ b/admin/WebConsole/asistentes/includes/asistentes/formCloneRemotePartition.php
@@ -4,7 +4,7 @@
<tr>
<td class="op_basic">
<?echo $TbMsg["WCRP32"] ?>
- <select name="ipMaster" id="ipMaster" style="WIDTH:220" onChange="xajax_ListarOrigenMaster(this.value);">
+ <select name="ipMaster" id="ipMaster" style="width:220" onChange="xajax_ListarOrigenMaster(this.value);">
<option value=""> -- <?echo $TbMsg["WCRP32"] ?> -- </option>
<?php echo ''.htmlOPTION_equipos($cmd,$ambito,$idambito).''; ?>
</select>
@@ -14,7 +14,7 @@
<div id="divListado"></div>
<br />
<?echo $TbMsg["WCRP34"] ?>
- <select name="targetpart" id="targetpart" style="WIDTH:220";">
+ <select name="targetpart" id="targetpart" style="width:220;">
<option value="1 1"> 1er disco - 1ª particion </option>
<option value="1 2"> 1er disco - 2ª particion </option>
<option value="1 3"> 1er disco - 3ª particion </option>
@@ -22,23 +22,23 @@
</select>
<br />
<?echo $TbMsg["WCRP35"] ?>
- <select name="idmetodo" id="idmetodo" style="WIDTH:220";">
+ <select name="idmetodo" id="idmetodo" style="width:220;">
<option value="MULTICAST"> MULTICAST </option>
<option value="UNICAST"> UNICAST </option>
</select>
<br />
<?echo $TbMsg["WCRP36"] ?>
- <select name="tool" id="tool" style="WIDTH:220";">
+ <select name="tool" id="tool" style="width:220;">
<option value="partclone"> partclone </option>
<!-- <option value="partimage"> partimage </option> -->
</select>
<br />
<?echo $TbMsg["WCRP37"] ?>
- <select name="compresor" id="compresor" style="WIDTH:220";">
+ <select name="compresor" id="compresor" style="width:220;">
<option value="lzop"> lzop </option>
<option value="gzip"> gzip </option>
</select>
- <br />
+ <br />
<br />
</td>
diff --git a/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php b/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php
index c51b8bf0..0a6da102 100644
--- a/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php
+++ b/admin/WebConsole/asistentes/includes/asistentes/formDeployImage.php
@@ -1,4 +1,16 @@
+<?php
+$disksPartitions = array();
+$diskPartIndex = 0;
+// Recorremos todas las configuraciones y vamos creando un array con disco - particion
+for($cfgIndex = 0; $cfgIndex < $conKeys; $cfgIndex++){
+ if($tbKeys[$cfgIndex]["numpar"] != 0 && $tbKeys[$cfgIndex]["clonable"] == 1){
+ $disksPartitions[$diskPartIndex]["text"] = "Disco ".$tbKeys[$cfgIndex]["numdisk"]." - Part ".$tbKeys[$cfgIndex]["numpar"];
+ $disksPartitions[$diskPartIndex]["value"] = $tbKeys[$cfgIndex]["numdisk"].";".$tbKeys[$cfgIndex]["numpar"];
+ $diskPartIndex++;
+ }
+}
+?>
<? echo $TbMsg["WDI13"] ?> <br>
<input type="radio" name="modo" value="deployImage" checked ><? echo $TbMsg["WDI14"] ?> <br>
<input type="radio" name="modo" value="updateCache" > <? echo $TbMsg["WDI15"] ?> <br>
@@ -10,9 +22,16 @@
<? echo $TbMsg["WDI20"] ?>
<select name="idparticion" id="idparticion" style="WIDTH:220">
+ <?php
+ foreach($disksPartitions as $diskPartition){
+ echo "<option value='".$diskPartition["value"]."'>".$diskPartition["text"]." </option>";
+ }
+ ?>
+ <!--
<option value="1"> 1 </option>
<option value="2"> 2 </option>
<option value="3"> 3 </option>
+ -->
</select>
<br />
<? echo $TbMsg["WDI21"] ?>
diff --git a/admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php
index 1a002387..2bfa3938 100644
--- a/admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php
+++ b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_gpt.php
@@ -46,7 +46,9 @@ for ($p=1; $p<4; $p++) {
<tr id="trPartition4">
<td><input type="checkbox" name="checkGPT4" value="checkGPT4" onclick="clickPartitionCheckbox(this.form, 4,true);" /> <?php echo $TbMsg[20].' '.$p;?> </td>
-<td><input type="label" readonly size="8" name="partGPT4" disabled="true" value="CACHE" /></td>
+<td>
+<select name="partGPT4" id="partGPT4" style="width:220" disabled="true" onchange="checkExtendedPartition(form);"><? echo htmlForm_typepartnotcacheGPT(4) ?></select>
+</td>
<td><select name="sizeGPT4" id="sizeGPT4" style="width:220" disabled="true" onclick="if (this.form.sizeGPT4.options[this.form.sizeGPT4.selectedIndex].value == 'CUSTOM') { this.form.sizeGPT4custom.disabled=false } else { this.form.sizeGPT4custom.disabled=true }" onchange="calculateFreeGPTDisk(this.form);" />
<option value="0"> <?php echo $TbMsg[40];?> </option>
<?php echo ''. htmlForm_sizepart($cmd,4) .''; ?>
diff --git a/admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php
index 46207e15..01b17917 100644
--- a/admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php
+++ b/admin/WebConsole/asistentes/includes/asistentes/formParticionado_msdos.php
@@ -51,7 +51,16 @@ for ($p=1; $p<4; $p++) {
<tr>
<td><input type="checkbox" name="check4" value="check4" onclick="clickPartitionCheckbox(this.form, 4);" /> <?php echo $TbMsg[20].' '.$p;?> </td>
-<td><input type="label" readonly size="8" name="part4" disabled="true" value="CACHE" /></td>
+<td>
+<!--
+<select disabled="true" name="part4" id="part4" size="1" onclick="if (this.form.part4.options[this.form.part4.selectedIndex].value == 'PART') { this.form.part4custom.disabled=false } else { this.form.part4custom.disabled=true }" onchange="checkExtendedPartition(form);" />
+ <option value="CACHE" selected="selected">CACHE</option>
+ <option value="PART">Particion</option>
+</select>
+<br />
+-->
+<select name="part4" id="part4" style="width:220" disabled="true" onchange="checkExtendedPartition(form);"><? echo htmlForm_typepartnotcacheEngine10(4) ?></select>
+</td>
<td><select name="size4" id="size4" style="width:220" disabled="true" onclick="if (this.form.size4.options[this.form.size4.selectedIndex].value == 'CUSTOM') { this.form.size4custom.disabled=false } else { this.form.size4custom.disabled=true }" onchange="calculateFreeDisk(this.form);" />
<option value="0"> <?php echo $TbMsg[40];?> </option>
<?php echo ''. htmlForm_sizepart($cmd,4) .''; ?>
diff --git a/admin/WebConsole/asistentes/jscripts/asistentes.js b/admin/WebConsole/asistentes/jscripts/asistentes.js
index 5a6dae4f..d86176ca 100644
--- a/admin/WebConsole/asistentes/jscripts/asistentes.js
+++ b/admin/WebConsole/asistentes/jscripts/asistentes.js
@@ -21,7 +21,7 @@ switch (form.idmetodo.value)
//form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form.PartOrigen.value + " " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " 1 " + form.PartOrigen.value + " " + form.tool.value + " " + form.compresor.value;
command="cloneRemoteFromMaster " + form.ipMaster.value + " " + form.source.value + " " + protocol + " " + form.targetpart.value + " " + form.tool.value + " " + form.compresor.value;
form.codigo.value="\
-echo \"[0] $MSG_SCRIPTS_TASK_START " + command + " \" | tee -a $OGLOGFILE $OGLOGSESSION \n " +
+ogEcho log session \"[0] $MSG_SCRIPTS_TASK_START " + comand + "\"\n " +
command + " | tee -a $OGLOGCOMMAND \n ";
//cloneRemoteFromMaster " + form.ipMaster.value + " " + form.source.value + " " + protocol + " " + form.targetpart.value + " " + form.tool.value + " " + form.compresor.value + " | tee -a $OGLOGCOMMAND \n";
//form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " " + form.source.value + " " + protocol + " " + form.targetpart.value + " " + form.tool.value + " " + form.compresor.value;
@@ -43,33 +43,49 @@ switch (form.idmetodo.value)
//form.codigo.value="deployImage REPO /";
if (form.modo[0].checked)
{
- command="deployImage REPO /" + form.idimagen.value + " 1 " + form.idparticion.value + " " + protocol ;
+ // UHU - Distinguimos entre disco y particion, el valor de idparticion sera disco;particion. eje. 1;1
+ var diskPart = form.idparticion.value.split(";");
+ command="deployImage REPO /" + form.idimagen.value + " "+diskPart[0]+" " + diskPart[1] + " " + protocol ;
form.codigo.value="\
-echo [0] $MSG_SCRIPTS_TASK_START " + command +" | tee -a $OGLOGSESSION \n \ " +
-command + " | tee -a $OGLOGCOMMAND";
+ogEcho log session \"[0] $MSG_SCRIPTS_TASK_START " + command + "\"\n \ " +
+command + " \n";
//form.codigo.value="deployImage REPO /" + form.idimagen.value + " 1 " + form.idparticion.value + " " + protocol ;
}
else
{
command="updateCache REPO /" + form.idimagen.value + ".img" + " " + protocol ;
form.codigo.value="\
-echo [0] $MSG_SCRIPTS_TASK_START " + command +" | tee -a $OGLOGSESSION \n \ " +
-command + " | tee -a $OGLOGCOMMAND";
+ogEcho log session \"[0] $MSG_SCRIPTS_TASK_START " + command +"\"\n \ " +
+command + " \n";
//form.codigo.value="updateCache REPO /" + form.idimagen.value + ".img" + " " + protocol ;
}
}
function codeParticionado(form){
+ var errorMsg = "¡El espacio libre en disco no puede ser menor que 0!";
var n_disk = form.n_disk.value;
var tipo_part_table = form.tipo_part_table.value;
// Comprobamos si la opcion elejida es GPT o MSDOS para llamar a una funcion u otra
if(tipo_part_table == "GPT"){
- codeParticionadoGPT(form);
+ // Comprobamos que el espacio libre en el disco no sea negativo, si lo es, dar aviso
+ if(parseInt(document.getElementById("freediskGPT").value) < 0){
+ alert(errorMsg);
+ }
+ else{
+ codeParticionadoGPT(form);
+ }
}
else{
- codeParticionadoMSDOS(form);
+ // Comprobamos que el espacio libre en el disco no sea negativo, si lo es, dar aviso
+ if(parseInt(document.getElementById("freedisk").value) < 0){
+ alert(errorMsg);
+ }
+ else{
+ codeParticionadoMSDOS(form);
+ }
}
+
}
@@ -81,9 +97,13 @@ function codeParticionadoMSDOS (form) {
var extended=false;
var n_disk = form.n_disk.value;
var tipo_part_table = form.tipo_part_table.value;
+ var maxParts = 4;
+
+ // Comprobamos si esta seleccionada la cuarta particion y no es CACHE
+ if(form.check4.checked && form.part4.value != "CACHE")
+ maxParts = 5;
-
- for (var nPart=1; nPart<4; nPart++) {
+ for (var nPart=1; nPart<maxParts; nPart++) {
var partCheck=eval("form.check"+nPart);
if (partCheck.checked) {
var partType=eval("form.part"+nPart);
@@ -110,36 +130,43 @@ function codeParticionadoMSDOS (form) {
partCode += " EMPTY:0";
}
}
- if (form.check4.checked) {
- if (form.size4.value == "0") {
- cacheCode="\
-echo \"[20] $MSG_HELP_ogGetPartitionSize CACHE\" | tee -a $OGLOGSESSION \n \
-sizecache=`ogGetPartitionSize 1 4` \n \
-echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
-ogDeletePartitionTable "+n_disk+" \n \
+
+ var cacheCode="";
+
+ // Si se selecciono la particion 4 y es CACHE
+ if(form.part4.value == "CACHE"){
+ if (form.check4.checked) {
+ if (form.size4.value == "0") {
+ cacheCode="\
+ogEcho session \"[20] $MSG_HELP_ogGetCacheSize\"\n \
+sizecache=`ogGetCacheSize` \n \
+ogEcho session \"[30] $MSG_HELP_ogUpdatePartitionTable "+n_disk+"\"\n \
+ogDeletePartitionTable "+n_disk+" \n \
ogUpdatePartitionTable "+n_disk+" | tee -a $OGLOGCOMMAND \n \
-echo \"[50] $MSG_HELP_ogCreateCache \" | tee -a $OGLOGSESSION \n \
-initCache $sizecache &>/dev/null | tee -a $OGLOGCOMMAND \n ";
- } else {
- if (form.size4.value == "CUSTOM") {
- cacheSize = form.size4custom.value;
+ogEcho session \"[50] $MSG_HELP_ogCreateCache\"\n \
+initCache "+n_disk+" $sizecache &>/dev/null | tee -a $OGLOGCOMMAND \n ";
} else {
- cacheSize = form.size4.value;
+ if (form.size4.value == "CUSTOM") {
+ cacheSize = form.size4custom.value;
+ } else {
+ cacheSize = form.size4.value;
+ }
+ cacheCode="\
+ogEcho session \"[30] $MSG_HELP_ogUpdatePartitionTable "+n_disk+"\"\n \
+ogDeletePartitionTable "+n_disk+" \n \
+ogUpdatePartitionTable "+n_disk+" \n \
+ogEcho session \"[50] $MSG_HELP_ogCreateCache\"\n \
+initCache " + n_disk + " " + cacheSize + " &>/dev/null | tee -a $OGLOGCOMMAND";
}
+ } else {
cacheCode="\
-echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
-ogDeletePartitionTable "+n_disk+" \n \
-ogUpdatePartitionTable "+n_disk+" \n \
-echo \"[50] $MSG_HELP_ogCreateCache \" | tee -a $OGLOGSESSION \n \
-initCache " + cacheSize + " &>/dev/null | tee -a $OGLOGCOMMAND";
- }
- } else {
- cacheCode="\
-echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
+ogEcho session \"[30] $MSG_HELP_ogUpdatePartitionTable "+n_disk+"\"\n \
ogDeletePartitionTable "+n_disk+" \n \
ogUpdatePartitionTable "+n_disk+" \n";
partCode += " EMPTY:0";
+ }
}
+
if (extended) {
var lastLogical=5;
for (var nPart=9; nPart>5; nPart--) {
@@ -174,18 +201,18 @@ partCode += " EMPTY:0";
form.codigo.value="\
ogCreatePartitionTable "+n_disk+" "+tipo_part_table +" \n \
-echo \"[0] $MSG_HELP_ogCreatePartitions \" | tee -a $OGLOGSESSION $OGLOGFILE \n \
-echo \"[10] $MSG_HELP_ogUnmountAll "+n_disk+"\" | tee -a $OGLOGSESSION \n \
+ogEcho log session \"[0] $MSG_HELP_ogCreatePartitions \"\n \
+ogEcho session \"[10] $MSG_HELP_ogUnmountAll "+n_disk+"\"\n \
ogUnmountCache \n \
-ogUnmountAll "+n_disk+" \n \
+ogUnmountAll "+n_disk+" 2>/dev/null\n \
" + cacheCode + " \n \
-echo \"[60] $MSG_HELP_ogListPartitions "+n_disk+"\" | tee -a $OGLOGSESSION \n \
+ogEcho session \"[60] $MSG_HELP_ogListPartitions "+n_disk+"\"\n \
ogListPartitions "+n_disk+" | tee -a $OGLOGCOMMAND $OGLOGSESSION \n \
-echo \"[70] $MSG_HELP_ogCreatePartitions " + partCode + " \" | tee -a $OGLOGSESSION \n \
+ogEcho session \"[70] $MSG_HELP_ogCreatePartitions " + partCode + "\"\n \
ogCreatePartitions "+n_disk+" " + partCode + " | tee -a $OGLOGCOMMAND \n \
-echo \"[80] $MSG_HELP_ogSetPartitionActive "+n_disk+" 1\" | tee -a $OGLOGSESSION \n \
+ogEcho session \"[80] $MSG_HELP_ogSetPartitionActive "+n_disk+" 1\"\n \
ogSetPartitionActive "+n_disk+" 1 \n \
-echo \"[100] $MSG_HELP_ogListPartitions "+n_disk+"\" | tee -a $OGLOGSESSION $OGLOGFILE \n \
+ogEcho log session \"[100] $MSG_HELP_ogListPartitions "+n_disk+"\"\n \
ogUpdatePartitionTable "+n_disk+" \n \
ms-sys /dev/sda | grep unknow && ms-sys /dev/sda \n \
ogListPartitions "+n_disk+" | tee -a $OGLOGCOMMAND $OGLOGSESSION $OGLOGFILE \n \
@@ -196,7 +223,7 @@ reboot \n";
function codeParticionadoGPT (form) {
var partCode="";
var logicalCode="";
- var cacheCode;
+ var cacheCode="";
var cacheSize;
var extended=false;
var n_disk = form.n_disk.value;
@@ -207,16 +234,17 @@ function codeParticionadoGPT (form) {
var partCheck=eval("form.checkGPT"+nPart);
if (partCheck.checked) {
// Distinguimos entre cache y el resto de particiones
- if(nPart == 4) {
+ // Solo tratamos la particion 4 como cache, si se selecciono este tipo
+ if(nPart == 4 && form.partGPT4.value == "CACHE") {
if (form.sizeGPT4.value == "0") {
cacheCode="\
-echo \"[20] $MSG_HELP_ogGetPartitionSize CACHE\" | tee -a $OGLOGSESSION \n \
-sizecache=`ogGetPartitionSize 1 4` \n \
-echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
+ogEcho session \"[20] $MSG_HELP_ogGetCacheSize\"\n \
+sizecache=`ogGetCacheSize` \n \
+ogEcho session \"[30] $MSG_HELP_ogUpdatePartitionTable "+n_disk+"\"\n \
ogDeletePartitionTable "+n_disk+" \n \
ogUpdatePartitionTable "+n_disk+" | tee -a $OGLOGCOMMAND \n \
-echo \"[50] $MSG_HELP_ogCreateCache \" | tee -a $OGLOGSESSION \n \
-initCache $sizecache &>/dev/null | tee -a $OGLOGCOMMAND \n ";
+ogEcho session \"[50] $MSG_HELP_ogCreateCache\"\n \
+initCache "+ n_disk +" $sizecache &>/dev/null | tee -a $OGLOGCOMMAND \n ";
} else {
if (form.sizeGPT4.value == "CUSTOM") {
cacheSize = form.sizeGPT4custom.value;
@@ -224,11 +252,11 @@ initCache $sizecache &>/dev/null | tee -a $OGLOGCOMMAND \n ";
cacheSize = form.sizeGPT4.value;
}
cacheCode="\
-echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
-ogDeletePartitionTable "+n_disk+" \n \
+ogEcho session \"[30] $MSG_HELP_ogUpdatePartitionTable "+n_disk+"\"\n \
+ogDeletePartitionTable "+n_disk+" \n \
ogUpdatePartitionTable "+n_disk+" \n \
-echo \"[50] $MSG_HELP_ogCreateCache \" | tee -a $OGLOGSESSION \n \
-initCache " + cacheSize + " &>/dev/null | tee -a $OGLOGCOMMAND";
+ogEcho session \"[50] $MSG_HELP_ogCreateCache\"\n \
+initCache " + n_disk +" "+ cacheSize + " &>/dev/null | tee -a $OGLOGCOMMAND";
}
} else{
var partType=eval("form.partGPT"+nPart);
@@ -249,7 +277,7 @@ initCache " + cacheSize + " &>/dev/null | tee -a $OGLOGCOMMAND";
} else {
if(nPart == 4){
cacheCode="\
-echo \"[30] $MSG_HELP_ogDeletePartitionTable - $MSG_HELP_ogUpdatePartitionTable 1\" | tee -a $OGLOGSESSION \n \
+ogEcho session \"[30] $MSG_HELP_ogUpdatePartitionTable "+n_disk+"\"\n \
ogDeletePartitionTable "+n_disk+" \n \
ogUpdatePartitionTable "+n_disk+" \n";
partCode += " EMPTY:0";
@@ -260,18 +288,18 @@ partCode += " EMPTY:0";
}
form.codigo.value="\
ogCreatePartitionTable "+n_disk+" "+tipo_part_table +" \n \
-echo \"[0] $MSG_HELP_ogCreatePartitions \" | tee -a $OGLOGSESSION $OGLOGFILE \n \
-echo \"[10] $MSG_HELP_ogUnmountAll "+n_disk+"\" | tee -a $OGLOGSESSION \n \
+ogEcho log session \"[0] $MSG_HELP_ogCreatePartitions "+n_disk+"\"\n \
+ogEcho session \"[10] $MSG_HELP_ogUnmountAll "+n_disk+"\"\n \
ogUnmountCache \n \
ogUnmountAll "+n_disk+" \n \
" + cacheCode + " \n \
-echo \"[60] $MSG_HELP_ogListPartitions "+n_disk+"\" | tee -a $OGLOGSESSION \n \
+ogEcho session \"[60] $MSG_HELP_ogListPartitions "+n_disk+"\"\n \
ogListPartitions "+n_disk+" | tee -a $OGLOGCOMMAND $OGLOGSESSION \n \
-echo \"[70] $MSG_HELP_ogCreatePartitions " + partCode + " \" | tee -a $OGLOGSESSION \n \
+ogEcho session \"[70] $MSG_HELP_ogCreatePartitions " + partCode + "\"\n \
ogCreatePartitions "+n_disk+" " + partCode + " | tee -a $OGLOGCOMMAND \n \
-echo \"[80] $MSG_HELP_ogSetPartitionActive "+n_disk+" 1\" | tee -a $OGLOGSESSION \n \
+ogEcho session \"[80] $MSG_HELP_ogSetPartitionActive "+n_disk+" 1\"\n \
ogSetPartitionActive "+n_disk+" 1 \n \
-echo \"[100] $MSG_HELP_ogListPartitions "+n_disk+"\" | tee -a $OGLOGSESSION $OGLOGFILE \n \
+ogEcho log session \"[100] $MSG_HELP_ogListPartitions "+n_disk+"\"\n \
ogUpdatePartitionTable "+n_disk+" \n \
ms-sys /dev/sda | grep unknow && ms-sys /dev/sda \n \
ogListPartitions "+n_disk+" | tee -a $OGLOGCOMMAND $OGLOGSESSION $OGLOGFILE \n \
@@ -322,7 +350,9 @@ function clickPartitionCheckbox (form, npart, isGPT) {
} else {
partType.disabled=true;
partSize.disabled=true;
- partTypeCustom.disabled=true;
+ // El campo TypeCustom no existe para la particion 4
+ if(npart != 4)
+ partTypeCustom.disabled=true;
partSizeCustom.disabled=true;
}
if (npart <= 4) {
@@ -334,6 +364,19 @@ function clickPartitionCheckbox (form, npart, isGPT) {
}
}
+/**
+ * Dado un numero de disco, recorre todos los input hidden con nombre disksize_"disco"
+ * y devuelve el de menor valor
+ */
+function getMinDiskSize(disk){
+ var diskSizeArray = document.getElementsByName("disksize_"+disk);
+ var minSize = diskSizeArray[0].value;
+ for(var i= 1; i < diskSizeArray.length; i++){
+ if(diskSizeArray[i].value < minSize)
+ minSize = diskSizeArray[i].value;
+ }
+ return minSize;
+}
// Código para calcular el espacio libre del disco.
function calculateFreeDisk(form) {
@@ -341,8 +384,14 @@ function calculateFreeDisk(form) {
if(document.getElementById("tipo_part_table").value == "GPT"){
calculateFreeGPTDisk(form);
}
+ // Capturamos el disco seleccionado
+ var disk = document.getElementById("n_disk").value;
+ // Buscamos por nombre todos los campos disksize_"disk" y nos quedamos con el de menor valor
+ var diskSize = getMinDiskSize(disk);
+
+
var freeDisk=document.getElementById("freedisk");
- freeDisk.value=form.minsize.value;
+ freeDisk.value=diskSize;
for (npart=1; npart<=4; npart++) {
var partCheck=eval("form.check"+npart);
var partSize=eval("form.size"+npart);
@@ -370,36 +419,40 @@ function calculateFreeDisk(form) {
// Código para calcular el espacio libre del disco. en el formulario GPT
function calculateFreeGPTDisk(form) {
// Si esta seleccionada la opcion MSDOS, se llama a la funcion correspondiente
- if(document.getElementById("tipo_part_table").value == "MSDOS"){
- calculateFreeDisk(form);
- }
-
+ if(document.getElementById("tipo_part_table").value == "MSDOS"){
+ calculateFreeDisk(form);
+ }
+ // Capturamos el disco seleccionado
+ var disk = document.getElementById("n_disk").value;
+ // Buscamos el input hidden para el disco seleccionado
+ var diskSize = getMinDiskSize(disk);
+ document.getElementById('freediskGPT').value=diskSize;
+
var freeDisk=document.getElementById("freediskGPT");
- freeDisk.value=form.minsize.value;
// Capturamos el numero de particiones que hay hechas
numParts=document.getElementById("numGPTpartitions").value;
- for (npart=1; npart<=numParts; npart++) {
- var partCheck=eval("form.checkGPT"+npart);
- var partSize=eval("form.sizeGPT"+npart);
- var partSizeCustom=eval("form.sizeGPT"+npart+"custom");
- if (partCheck.checked) {
- if (partSize.options[partSize.selectedIndex].value == "CUSTOM") {
- freeDisk.value -= parseInt(partSizeCustom.value);
- } else {
- freeDisk.value -= parseInt(partSize.options[partSize.selectedIndex].value);
- }
- }
- }
- if (parseInt(freeDisk.value) < 0) {
- freeDisk.style.fontWeight = "bold";
- freeDisk.style.fontStyle = "italic";
- } else {
- freeDisk.style.fontWeight = "normal";
- freeDisk.style.fontStyle = "normal";
- }
- if (form.size4.value == 0) {
- freeDisk.value += " (- cache)"; // Aviso de caché sin modificar.
- }
+ for (npart=1; npart<=numParts; npart++) {
+ var partCheck=eval("form.checkGPT"+npart);
+ var partSize=eval("form.sizeGPT"+npart);
+ var partSizeCustom=eval("form.sizeGPT"+npart+"custom");
+ if (partCheck.checked) {
+ if (partSize.options[partSize.selectedIndex].value == "CUSTOM") {
+ freeDisk.value -= parseInt(partSizeCustom.value);
+ } else {
+ freeDisk.value -= parseInt(partSize.options[partSize.selectedIndex].value);
+ }
+ }
+ }
+ if (parseInt(freeDisk.value) < 0) {
+ freeDisk.style.fontWeight = "bold";
+ freeDisk.style.fontStyle = "italic";
+ } else {
+ freeDisk.style.fontWeight = "normal";
+ freeDisk.style.fontStyle = "normal";
+ }
+ if (form.size4.value == 0) {
+ freeDisk.value += " (- cache)"; // Aviso de caché sin modificar.
+ }
}
// Agrega una nueva fila a la tabla de particiones con una nueva particion
@@ -416,6 +469,7 @@ function addGPTPartition(){
partitionTypes+='<OPTION value="CHROMEOS-KRN"> ChromeOS Kernel </OPTION>';
partitionTypes+='<OPTION value="CHROMEOS-RESERV"> ChromeOS Reserved </OPTION>';
partitionTypes+='<OPTION value="HFS"> MacOS HFS </OPTION>';
+ partitionTypes+='<OPTION value="HFS-BOOT"> MacOS HFS Boot </OPTION>';
partitionTypes+='<OPTION value="HFS-RAID"> MacOS HFS RAID </OPTION>';
partitionTypes+='<OPTION value="FREEBSD"> FreeBSD </OPTION>';
partitionTypes+='<OPTION value="FREEBSD-DISK"> FreeBSD Disk </OPTION>';
@@ -482,20 +536,24 @@ function deleteGPTPartition(){
function checkExtendedPartition(form) {
var logical=document.getElementById("logicas");
var visible=false;
- for (npart=1; npart<4; npart++) {
+ for (npart=1; npart<=4; npart++) {
var partCheck=eval("form.check"+npart);
var partType=eval("form.part"+npart);
var partTypeCustom=eval("form.part"+npart+"custom");
if (partCheck.checked) {
partType.style.fontWeight = "normal";
- partTypeCustom.style.fontWeight = "normal";
+
if (partType.value == "EXTENDED") {
visible=true;
partType.style.fontWeight = "bold";
}
- if (partType.value == "CUSTOM" && partTypeCustom.value == "EXTENDED") {
- visible=true;
- partTypeCustom.style.fontWeight = "bold";
+ // La particion 4 no tiene partTypeCustom
+ if(npart != 4){
+ partTypeCustom.style.fontWeight = "normal";
+ if (partType.value == "CUSTOM" && partTypeCustom.value == "EXTENDED") {
+ visible=true;
+ partTypeCustom.style.fontWeight = "bold";
+ }
}
}
}
diff --git a/admin/WebConsole/asistentes/xajax.server.php b/admin/WebConsole/asistentes/xajax.server.php
index 9d4e1bd7..6f93f685 100644
--- a/admin/WebConsole/asistentes/xajax.server.php
+++ b/admin/WebConsole/asistentes/xajax.server.php
@@ -1,9 +1,9 @@
-<?php
+<?php
//importando nuestras las referencias XAJAX
require ("xajax.common.php");
-//función que lista las Particiones segun la IP elegida
+//funcion que lista las Particiones segun la IP elegida
function ListarOrigenMaster($ip){
include_once("../includes/ctrlacc.php");
@@ -24,25 +24,24 @@ function ListarOrigenMaster($ip){
$rs=new Recordset;
//Primera consulta: Particiones del MASTER potencialmente clonables.
- $cmd->texto='SELECT ordenadores_particiones.numpar as PART,nombresos.nombreso as OS
+ $cmd->texto='SELECT ordenadores_particiones.numdisk as DISK,ordenadores_particiones.numpar as PART,nombresos.nombreso as OS
FROM ordenadores_particiones INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
INNER JOIN nombresos ON ordenadores_particiones.idnombreso=nombresos.idnombreso
INNER JOIN ordenadores ON ordenadores_particiones.idordenador=ordenadores.idordenador
WHERE ordenadores.ip="' .$ip . '"
AND tipospar.clonable>0
AND ordenadores_particiones.idnombreso>0
- ORDER BY ordenadores_particiones.numpar';
-
+ ORDER BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar';
$rs->Comando=&$cmd;
-
- if ($rs->Abrir()){
+
+ if ($rs->Abrir()){
$cantRegistros=$rs->numeroderegistros;
if($cantRegistros>0){
$rs->Primero();
while (!$rs->EOF){
- $SelectHtml.='<OPTION value=" 1 '.$rs->campos["PART"].'"';
+ $SelectHtml.='<OPTION value=" '.$rs->campos["DISK"].' '.$rs->campos["PART"].'"';
$SelectHtml.='>';
- $SelectHtml.='PART: '. $rs->campos["OS"].'</OPTION>';
+ $SelectHtml.='DISK '.$rs->campos["DISK"].',PART '.$rs->campos["PART"].': '. $rs->campos["OS"].'</OPTION>';
$rs->Siguiente();
}
}
@@ -52,12 +51,13 @@ function ListarOrigenMaster($ip){
}
$rs->Cerrar();
}
-
//Segunda consulta: Imagenes del MASTER registradas como si fuese un repo.
- $cmd->texto='SELECT *,repositorios.ip as iprepositorio FROM imagenes
-INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio
-where repositorios.ip="' .$ip .'"';
-
+
+# $cmd->texto='SELECT *,repositorios.ip as iprepositorio FROM imagenes
+#INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio
+#where repositorios.ip="' .$ip .'"';
+
+ $cmd->texto='select cache from ordenadores_particiones where codpar = 202 and idordenador = (SELECT idordenador from ordenadores where ip="' .$ip . '")';
$rs->Comando=&$cmd;
if ($rs->Abrir()){
@@ -65,9 +65,15 @@ where repositorios.ip="' .$ip .'"';
if($cantRegistros>0){
$rs->Primero();
while (!$rs->EOF){
- $SelectHtml.='<OPTION value=" CACHE /'.$rs->campos["nombreca"].'"';
- $SelectHtml.='>';
- $SelectHtml.='IMG-CACHE: ' . $rs->campos["nombreca"].'</OPTION>';
+ $files = explode(",", $rs->campos["cache"]);
+ foreach ($files as $file) {
+ if ( preg_match ( "/img$/", $file ) ) {
+ $imgname = rtrim($file, ".img");
+ $SelectHtml.='<OPTION value=" CACHE /'.ltrim($imgname).'"';
+ $SelectHtml.='>';
+ $SelectHtml.='IMG-CACHE: ' . ltrim($imgname).'</OPTION>';
+ }
+ }
$rs->Siguiente();
}
}
@@ -83,7 +89,6 @@ where repositorios.ip="' .$ip .'"';
INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio
where repositorios.idrepositorio=(select idrepositorio from ordenadores where ordenadores.ip="' .$ip .'")';
-
$rs->Comando=&$cmd;
if ($rs->Abrir()){
@@ -105,18 +110,16 @@ where repositorios.idrepositorio=(select idrepositorio from ordenadores where or
}
$SelectHtml.= '</SELECT>';
-
//asignando el contenido de la varabiale $SelectHTML al div que esta en la paquina inicial
$objResponse->assign("divListado","innerHTML",$SelectHtml);
-
-
+
return $objResponse; //retornamos la respuesta AJAX
}
-$xajax->processRequest(); //procesando cualquier petición AJAX
+$xajax->processRequest(); //procesando cualquier peticion AJAX
-?> \ No newline at end of file
+?>
diff --git a/admin/WebConsole/barramenu.php b/admin/WebConsole/barramenu.php
index be2c8928..f7a669e7 100644
--- a/admin/WebConsole/barramenu.php
+++ b/admin/WebConsole/barramenu.php
@@ -7,16 +7,32 @@
// Nombre del fichero: barramenu.php
// Descripción :Este fichero implementa el menu general de la Aplicación
// ********************************************************************************************************
+// Compatibilidad
+$device="";$device = strtolower($_SERVER['HTTP_USER_AGENT']);
+if(stripos($device,'iphone') !== false ){$device="iphone";}
+elseif (stripos($device,'ipad') !== false) {$device="ipad";}
+elseif (stripos($device,'android') !== false){$device="android";}
+else{$device=0;}
+$version=exec("cat /opt/opengnsys/doc/VERSION.txt");
+if(ereg("1.0.4",$version) == TRUE ){$version=4;}
+// ********************************************************************************************************
include_once("./includes/ctrlacc.php");
include_once("./includes/constantes.php");
+include_once("./includes/CreaComando.php");
+include_once("./clases/AdoPhp.php");
include_once("./idiomas/php/".$idioma."/barramenu_".$idioma.".php");
//________________________________________________________________________________________________________
+
+//________________________________________________________________________________________________________
+$cmd=CreaComando($cadenaconexion);
+if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexi�n con servidor B.D.
+//___________________________________________________________________________________________________
?>
<HTML>
- <TITLE>Administración web de aulas</TITLE>
<HEAD>
- <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1">
+ <TITLE>Administración web de aulas</TITLE>
+ <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<LINK rel="stylesheet" type="text/css" href="estilos.css">
<SCRIPT language="javascript">
var currentOp=null;
@@ -45,39 +61,78 @@ include_once("./idiomas/php/".$idioma."/barramenu_".$idioma.".php");
var href3="./api/tree.html"
var href4="./api/main.html"
var href5="./api/index.html"
+ var device="<?php echo $device;?>";
+ var version="<?php echo $version;?>";
+
switch(op){
case 1:
- href="./principal/aulas.php"
- break;
+ if (device!="0"){
+ href="./principal/aulas.device.php"
+ break;}
+ else{href="./principal/aulas.php"
+ break;}
+
case 2:
- href="./principal/acciones.php"
- break;
+ if (device!="0"){
+ href="./principal/acciones.device.php"
+ break;}
+ else{href="./principal/acciones.php"
+ break;}
case 3:
- href="./principal/imagenes.php"
- break;
+ if (device!="0"){
+ if (version=="4"){
+ href="./principal/imagenes.device4.php"
+ break;}
+ else{href="./principal/imagenes.device.php"
+ break;}
+ }else{href="./principal/imagenes.php"
+ break;}
case 4:
- href="./principal/hardwares.php"
- break;
+ if (device!="0"){
+ href="./principal/hardwares.device.php"
+ break;}
+ else{href="./principal/hardwares.php"
+ break;}
case 5:
- href="./principal/softwares.php"
- break;
+ if (device!="0"){
+ href="./principal/softwares.device.php"
+ break;}
+ else{href="./principal/softwares.php"
+ break;}
case 6:
- href="./principal/repositorios.php"
- break;
+ if (device!="0"){
+ href="./principal/repositorios.device.php"
+ break;}
+ else{href="./principal/repositorios.php"
+ break;}
case 7:
- href="./principal/menus.php"
- break;
+ if (device!="0"){
+ href="./principal/menus.device.php"
+ break;}
+ else{href="./principal/menus.php"
+ break;}
case 8:
href="./principal/reservas.php"
break;
case 9:
- href="./principal/administracion.php"
- break;
+ if (device!="0"){
+ href="./principal/administracion.device.php"
+ break;}
+ else{href="./principal/administracion.php"
+ break;}
case 10:
href="./images/L_Iconos.php"
href2="./images/M_Iconos.php"
break;
+ case 11:
+ if (device!="0"){
+ href="./principal/administracion.device.php"
+ href2="./principal/boot_grub4dos.php"
+ break;}
+ else{href="./principal/administracion.php"
+ href2="./principal/boot_grub4dos.php"
+ break;}
case 13:
href="./principal/usuarios.php"
break;
@@ -105,13 +160,16 @@ include_once("./idiomas/php/".$idioma."/barramenu_".$idioma.".php");
case 22:
opadre.frames["frame_contenidos"].document.location.href=href5
break;
+ case 23:
+ opadre.frames["frame_contenidos"].document.location.href="./principal/acercade.php"
+ break;
}
}
}
//________________________________________________________________________________________________________
</SCRIPT>
</HEAD>
- <BODY bgcolor="#d4d0c8">
+ <BODY style="background-color: #d4d0c8;">
<FORM name=fdatos>
<TABLE border=0 width=100% style="POSITION:absolute;LEFT:0px;TOP:0px" cellPadding=2 cellSpacing=0>
<TR>
@@ -161,17 +219,85 @@ include_once("./idiomas/php/".$idioma."/barramenu_".$idioma.".php");
<A href="#" style="text-decoration: none"><IMG border=0 src="./images/iconos/iconos.gif">
<SPAN class=menupral ><?echo $TbMsg[9] ?></SPAN></A>&nbsp;</TD>
<TD width=4 align=middle><IMG src="./images/iconos/separitem.gif"></TD>
+
+ <TD onclick=eleccion(this,11) onmouseout=desresaltar(this) onmouseover=resaltar(this) align=middle>&nbsp;
+ <A href="#" style="text-decoration: none"><IMG border=0 src="./images/iconos/tablas.gif">
+ <SPAN class=menupral ><?echo $TbMsg[15] ?></SPAN></A>&nbsp;</TD>
+ <TD width=4 align=middle><IMG src="./images/iconos/separitem.gif"></TD>
+
+
+
<?}?>
<?}?>
- <TD onclick=eleccion(this,22) onmouseout=desresaltar(this) onmouseover=resaltar(this) align=middle>&nbsp;
- <A href="#" style="text-decoration: none"><IMG border=0 src="./images/iconos/ayuda.gif">&nbsp;
- <SPAN class=menupral ><?echo $TbMsg[11] ?></SPAN></A>&nbsp;</TD>
- <TD width=4 align=middle><IMG src="./images/iconos/separitem.gif"></TD>
- <TD onclick=eleccion(this,21) onmouseout=desresaltar(this) onmouseover=resaltar(this) align=middle>&nbsp;
- <A href="#" style="text-decoration: none"><IMG border=0 src="./images/iconos/usuarioslog.gif">&nbsp;
- <SPAN class=menupral ><?echo $TbMsg[10] ?></SPAN></A>&nbsp;</TD>
-
+ <TD onclick=eleccion(this,22) onmouseout=desresaltar(this) onmouseover=resaltar(this) align=middle>
+ &nbsp;<A href="#" style="text-decoration: none"><IMG border=0 src="./images/iconos/ayuda.gif">&nbsp;<SPAN class=menupral ><?echo $TbMsg[11] ?></SPAN></A>&nbsp;</TD>
+ <TD width=4 align=middle><IMG src="./images/iconos/separitem.gif"></TD>
+
+
+ <TD onclick=eleccion(this,23) onmouseout=desresaltar(this) onmouseover=resaltar(this) align=middle>
+ &nbsp;<A href="#" style="text-decoration: none"><IMG border=0 src="./images/iconos/logocirculos.png">&nbsp;<SPAN class=menupral ><?echo $TbMsg[17] ?></SPAN></A>&nbsp;</TD>
+ <TD width=4 align=middle><IMG src="./images/iconos/separitem.gif"></TD>
+
+
+ <TD onclick=eleccion(this,21) onmouseout=desresaltar(this) onmouseover=resaltar(this) align=middle>
+ &nbsp;<A href="#" style="text-decoration: none"><IMG border=0 src="./images/iconos/usuarioslog.gif">&nbsp;<SPAN class=menupral ><?echo $TbMsg[10] ?></SPAN></A>&nbsp;</TD>
+ <TD width=4 align=middle><IMG src="./images/iconos/separitem.gif"></TD>
+
+
+<?php if($idtipousuario!=$SUPERADMINISTRADOR){ ?>
+<TD>
+<?php
+ $usuarioactual=$_SESSION["wusuario"];
+ $cmd->texto="SELECT * FROM centros
+ INNER JOIN administradores_centros ON administradores_centros.idcentro=centros.idcentro
+ INNER JOIN usuarios ON usuarios.idusuario=administradores_centros.idusuario
+ WHERE usuarios.usuario='".$usuarioactual."'
+ AND centros.identidad=".$_SESSION["widentidad"];
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(true); // Error al abrir recordset
+ $rs->Primero();
+ while (!$rs->EOF){
+ $identidad=$rs->campos["identidad"];
+ $idcentro=$rs->campos["idcentro"];
+ $nombrecentro=$rs->campos["nombrecentro"];
+ $numidcentro[]=$idcentro;$numnombrecentro[]=$nombrecentro;
+ $rs->Siguiente();
+ }//Cierre
+ $rs->Cerrar();
+echo '<form></form>';
+if (count($numidcentro) > 1)
+{
+?>
+<form name="fcentros" action="frames.php" target="_parent" method="POST">
+<select name="idmicentro" id="idmicentro" >
+<option value=""> -- <?php echo $_SESSION["wnombrecentro"] ;?> -- </option>
+<?php
+for ($i=0;$i<count($numidcentro);$i++)
+ {
+ if ($_SESSION["wnombrecentro"] == $numnombrecentro[$i])
+ {}else{
+ echo '<option value="'.$numidcentro[$i].','.$numnombrecentro[$i].'"># - '.$numnombrecentro[$i].'</option>';
+ }
+ }
+?>
+
+</select>
+<TD width=4 align=middle><IMG src="./images/iconos/separitem.gif"></TD>
+<TD width=4 align=middle><input name="submit" type="submit" value="Cambiar" ></input></TD>
+
+</form>
+<TD width=0 align=middle><IMG src="./images/iconos/separitem.gif"></TD>
+<TD><?php echo "Usuario.:.".ucwords($_SESSION["wusuario"]); ?></TD>
+
+</TD>
+<?php } }?>
+
+
+
+
+
</TR>
</TABLE>
diff --git a/admin/WebConsole/clases/AdoPhp.php b/admin/WebConsole/clases/AdoPhp.php
index 919fba7f..b48032d1 100644
--- a/admin/WebConsole/clases/AdoPhp.php
+++ b/admin/WebConsole/clases/AdoPhp.php
@@ -422,7 +422,10 @@ class Comando{
$this->ultimoerror=4;
return(false);
}
- if (stristr($this->texto,"select")){
+
+ $sqlstr=trim($this->texto);
+
+ if (strtoupper(substr($sqlstr,0,6))=="SELECT"){
$this->Recordset->Inicializar();
$this->Recordset->filas=$this->resul;
$this->Recordset->numerodecampos=mysql_num_fields($this->Recordset->filas);
diff --git a/admin/WebConsole/comandos/Arrancar.php b/admin/WebConsole/comandos/Arrancar.php
index ecb066e0..09c0b673 100644
--- a/admin/WebConsole/comandos/Arrancar.php
+++ b/admin/WebConsole/comandos/Arrancar.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -37,11 +37,30 @@ if (!$cmd)
<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
</HEAD>
<BODY>
-<?
+<?php
echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
//________________________________________________________________________________________________________
//
include_once("./includes/FiltradoAmbito.php");
+?>
+ <P align=center><SPAN align=center class=subcabeceras><? echo $TbMsg[7] ?></SPAN></p>
+ </BR>
+ <TABLE id="tabla_conf" align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
+ <TR>
+ <TH align=center>&nbsp;&nbsp;</Th>
+ <TH align=center>&nbsp;<?php echo $TbMsg[10] ?>&nbsp;</TH>
+ </TR>
+ <TR>
+ <TD align=center><input type="radio" checked id="broadcast" name="metodo" value="1"></TD>
+ <TD align=center>&nbsp;<?php echo $TbMsg[8] ?>&nbsp;</TD>
+ </TR>
+ <TR>
+ <TD align=center><input type="radio" id="unicast" name="metodo" value="2"></TD>
+ <TD align=center>&nbsp;<?php echo $TbMsg[9] ?>&nbsp;</TD>
+
+ </TR>
+ </TABLE>
+<?php
//________________________________________________________________________________________________________
//
include_once("./includes/formularioacciones.php");
diff --git a/admin/WebConsole/comandos/Configurar.php b/admin/WebConsole/comandos/Configurar.php
index 10e11523..c6d3cd73 100644
--- a/admin/WebConsole/comandos/Configurar.php
+++ b/admin/WebConsole/comandos/Configurar.php
@@ -16,10 +16,11 @@ include_once("../includes/CreaComando.php");
include_once("../includes/HTMLSELECT.php");
include_once("../includes/HTMLCTESELECT.php");
include_once("../includes/TomaDato.php");
-include_once("../includes/ConfiguracionesParticiones.php");
include_once("../includes/RecopilaIpesMacs.php");
include_once("../idiomas/php/".$idioma."/comandos/configurar_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
+include_once("../includes/ConfiguracionesParticiones.php");
+
//________________________________________________________________________________________________________
include_once("./includes/capturaacciones.php");
//________________________________________________________________________________________________________
@@ -68,7 +69,8 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
//________________________________________________________________________________________________________
//
- include_once("./includes/FiltradoAmbito.php");
+ //include_once("./includes/FiltradoAmbito.php");
+
//________________________________________________________________________________________________________
echo '<P align=center><SPAN align=center class=subcabeceras>'.$TbMsg[19].'</SPAN></P>';
@@ -113,18 +115,19 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
<?
}
$sws=$fk_sysFi | $fk_tamano | $fk_nombreSO;
- pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,true);
-
+
+ pintaConfiguraciones($cmd,$idambito,$ambito,7,$sws,false,"pintaParticionesConfigurar");
+
/* Dibuja tabla patron !OJO! no insertar caracteres entre las etiquetas*/
echo '<TABLE style="visibility:hidden"><TR id="TR_patron">';
echo '<TD align=center><input id="CHK_patron" type="checkbox"></TD>';
echo '<TD align=center>'.HTMLSELECT_particiones(0).'</TD>';
- echo '<TD align=center>'.HTMLSELECT_tipospar($cmd,0).'</TD>';
- echo '<TD align=center>'.HTMLSELECT_sistemasficheros($cmd,0).'</TD>';
+ echo '<TD align=center>'.HTMLSELECT_tipospar($cmd,"").'</TD>';
+ echo '<TD align=center>'.HTMLSELECT_sistemasficheros($cmd,"").'</TD>';
echo '<TD align=center><INPUT type="text" style="width:100" value="0"></TD>';
echo '<TD align=center>&nbsp;</TD>';
- echo '<TD align=center>'.HTMLSELECT_operaciones().'</TD></TR></TABlE>';
+ echo '<TD align=center>'.opeFormatear().'</TD></TR></TABlE>';
//________________________________________________________________________________________________________
include_once("./includes/formularioacciones.php");
//________________________________________________________________________________________________________
@@ -133,80 +136,10 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
include_once("./includes/opcionesacciones.php");
//________________________________________________________________________________________________________
?>
-<SCRIPT language="javascript">
- Sondeo();
-</SCRIPT>
</BODY>
</HTML>
<?
-/*________________________________________________________________________________________________________
-
- Descripción:
- (Esta función es llamada por pintaConfiguraciones que está incluida en ConfiguracionesParticiones.php)
- Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador,
- grupo de ordenadores o aula
- Parametros:
- $configuraciones: Cadena con las configuraciones de particioners del ámbito. El formato
- sería una secuencia de cadenas del tipo "clave de configuración" separados por "@"
- Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0
- $idordenadores: cadena con los identificadores de los ordenadores que forman parte del bloque
- $cc: Identificador de la configuración
- Devuelve:
- El código html de la tabla
-________________________________________________________________________________________________________*/
-function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
-{
- global $tbKeys; // Tabla contenedora de claves de configuración
- global $conKeys; // Contador de claves de configuración
- global $TbMsg;
-
- $colums=7;
- echo '<TR id="TR_'.$cc.'">';
- echo '<TH align=center><IMG src="../images/iconos/eliminar.gif"></TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[8].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[24].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[27].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[22].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[21].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[12].'&nbsp;</TH>';
- echo '</TR>';
-
- $auxCfg=split("@",$configuraciones); // Crea lista de particiones
- for($i=0;$i<sizeof($auxCfg);$i++){
- $auxKey=split(";",$auxCfg[$i]); // Toma clave de configuracion
- for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partición
- if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas
- $icp=$cc."_".$k; // Identificador de la configuración-partición
- echo '<TR id="TR_'.$icp.'">';
- echo '<TD align=center><input type=checkbox onclick="eliminaParticion(\''.$icp.'\',this)"></TD>';
-
- echo '<TD align=center>'.HTMLSELECT_particiones($tbKeys[$k]["numpar"]).'</TD>';
- echo '<TD align=center>'.HTMLSELECT_tipospar($cmd,$tbKeys[$k]["codpar"]).'</TD>';
-
- $sf=tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,true);
- echo'<TD align=center>'.HTMLSELECT_sistemasficheros($cmd,$sf).'</TD>';
- $tm=tomaTamano($tbKeys[$k]["numpar"],$idordenadores);
- echo'<TD align=center><INPUT type="text" style="width:100" value="'.$tm.'"></TD>';
-
- echo '<TD align=center>'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'</TD>';
-
- echo '<TD align=center>'.HTMLSELECT_operaciones().'</TD>';
- echo '</TR>';
- }
- }
- }
- /* Botones de añadir y confirmar */
- echo '<TR id="TRIMG_'.$cc.'" height=5><TD colspan='.$colums.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</TD></TR>';
- echo '<TR height=30><TD style="BACKGROUND-COLOR: #FFFFFF;" colspan='.$colums.' align=center>';
- echo ' <A href="#add" style="text-decoration:none">
- <IMG id="IMG_'.$icp.'" border=0 src="../images/boton_insertar.gif"
- value="'.$k.'" onclick="addParticion(this,'.$cc.')"></A>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- <A href="#add" style="text-decoration:none">
- <IMG border=0 src="../images/boton_aceptar.gif" onclick="Confirmar('.$cc.')"></A></TD>
- </TR>';
-}
/*________________________________________________________________________________________________________
Crea la etiqueta html <SELECT> de los número de particiones
________________________________________________________________________________________________________*/
@@ -225,23 +158,17 @@ function HTMLSELECT_particiones($p)
/*________________________________________________________________________________________________________
Crea la etiqueta html <SELECT> de las operaciones
________________________________________________________________________________________________________*/
-function HTMLSELECT_operaciones()
+function opeFormatear()
{
- global $TbMsg;
-
- $SelectHtml="";
- $opciones="1=".$TbMsg[14]."".chr(13);
- $opciones.="2=".$TbMsg[15]."".chr(13);
- $opciones.="3=".$TbMsg[16]."";
- $SelectHtml.=HTMLCTESELECT($opciones,"operaciones","estilodesple",$TbMsg[13],0,100,"");
- return($SelectHtml);
+ $ckhboxtHtml='<input type="checkbox" name=operaciones/>';
+ return($ckhboxtHtml);
}
/*________________________________________________________________________________________________________
Crea la etiqueta html <SELECT> de los tipos de particiones
________________________________________________________________________________________________________*/
function HTMLSELECT_tipospar($cmd,$codpar)
{
- return(HTMLSELECT($cmd,0,"tipospar",$codpar,"codpar","tipopar",150,"","formulariodatos"));
+ return(HTMLSELECT($cmd,0,"tipospar",$codpar,"tipopar","tipopar",150,"","formulariodatos","codpar<256"));
}
/*________________________________________________________________________________________________________
Crea la etiqueta html <SELECT> de los sistemas de ficheros
@@ -251,3 +178,4 @@ function HTMLSELECT_sistemasficheros($cmd,$idsistemafichero)
return(HTMLSELECT($cmd,0,"sistemasficheros",$idsistemafichero,"idsistemafichero","descripcion",150,"","formulariodatos"));
}
?>
+
diff --git a/admin/WebConsole/comandos/CrearImagen.php b/admin/WebConsole/comandos/CrearImagen.php
index ecc73e6d..603336f9 100644
--- a/admin/WebConsole/comandos/CrearImagen.php
+++ b/admin/WebConsole/comandos/CrearImagen.php
@@ -17,6 +17,7 @@ include_once("../includes/HTMLSELECT.php");
include_once("../includes/TomaDato.php");
include_once("../idiomas/php/".$idioma."/comandos/crearimagen_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
+include_once("../includes/pintaTablaConfiguraciones.php");
//________________________________________________________________________________________________________
include_once("./includes/capturaacciones.php");
@@ -53,20 +54,8 @@ if (!$resul){
?>
<P align=center><SPAN align=center class=subcabeceras><? echo $TbMsg[6] ?></SPAN></P>
-<FORM align=center name="fdatos">
- <TABLE id="tabla_conf" align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
- <TR>
- <TH align=center>&nbsp;&nbsp;</TH>
- <TH align=center>&nbsp;<? echo $TbMsg[8] ?>&nbsp;</TH>
- <TH align=center>&nbsp;<? echo $TbMsg[13] ?>&nbsp;</TH>
- <TH align=center>&nbsp;<? echo $TbMsg[9] ?>&nbsp;</TH>
- <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>
+<FORM align=center name="fdatos">
+ <? echo tablaConfiguracionesCrearImagen($cmd,$idambito,$idrepositorio); ?>
</FORM>
<?
@@ -111,8 +100,9 @@ function tomaPropiedades($cmd,$ido){
}
/*________________________________________________________________________________________________________
Crea la etiqueta html <SELECT> de los perfiles softwares
+ UHU - 2013/05/17 - Ahora las imagenes pueden ser en cualquier disco
________________________________________________________________________________________________________*/
-function HTMLSELECT_imagenes($cmd,$idrepositorio,$idperfilsoft,$particion,$masterip)
+function HTMLSELECT_imagenes($cmd,$idrepositorio,$idperfilsoft,$disk,$particion,$masterip)
{
$SelectHtml="";
$cmd->texto="SELECT imagenes.idimagen,imagenes.descripcion,imagenes.nombreca,imagenes.idperfilsoft, repositorios.nombrerepositorio
@@ -121,7 +111,7 @@ function HTMLSELECT_imagenes($cmd,$idrepositorio,$idperfilsoft,$particion,$maste
//echo $cmd->texto;
$rs=new Recordset;
$rs->Comando=&$cmd;
- $SelectHtml.= '<SELECT class="formulariodatos" id="despleimagen_'.$particion.'" style="WIDTH: 300">';
+ $SelectHtml.= '<SELECT class="formulariodatos" id="despleimagen_'.$disk."_".$particion.'" style="WIDTH: 300">';
$SelectHtml.= ' <OPTION value="0"></OPTION>';
if ($rs->Abrir()){
$rs->Primero();
@@ -167,15 +157,16 @@ function HTMLSELECT_imagenesORIGINAL($cmd,$idrepositorio,$idperfilsoft,$particio
/*________________________________________________________________________________________________________
Crea la etiqueta html <SELECT> de los repositorios
+ UHU - 2013/05/17 - Ahora las imagenes pueden ser en cualquier disco
________________________________________________________________________________________________________*/
-function HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$particion,$masterip){
+function HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$disk,$particion,$masterip){
$SelectHtml="";
$rs=new Recordset;
$cmd->texto='SELECT idrepositorio, nombrerepositorio, ip FROM repositorios WHERE idrepositorio="'.$idrepositorio .'" OR ip="'.$masterip.'"';
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return($SelectHtml); // Error al abrir recordset
- $SelectHtml.= '<SELECT class="formulariodatos" id="desplerepositorios_'.$particion.'" style="WIDTH: 250">';
+ $SelectHtml.= '<SELECT class="formulariodatos" id="desplerepositorios_'.$disk."_".$particion.'" style="WIDTH: 250">';
$rs->Primero();
while (!$rs->EOF){
$SelectHtml.='<OPTION value="'.$rs->campos["ip"].'"';
@@ -189,54 +180,5 @@ function HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$particion,$maste
$rs->Cerrar();
return($SelectHtml);
}
-/*________________________________________________________________________________________________________
- Crea la tabla de configuraciones y perfiles a crear
-________________________________________________________________________________________________________*/
-function tablaConfiguraciones($cmd,$idordenador,$idrepositorio)
-{
- global $idcentro;
- global $TbMsg;
- $tablaHtml="";
- $rs=new Recordset;
- $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
- FROM ordenadores
- INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
- LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
- INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
- LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen
- LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
- LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero
- WHERE ordenadores.idordenador=$idordenador ORDER BY ordenadores_particiones.numpar";
- //echo $cmd->texto;
- $rs->Comando=&$cmd;
- $rs=new Recordset;
- $rs->Comando=&$cmd;
- if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset
- $rs->Primero();
- while (!$rs->EOF){
- $swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]);
- $swc=$rs->campos["idperfilsoft"]>0; // Una partición es clonable si posee un identificador de perfil software
- $swccc=$swcc && $swcc;
- $tablaHtml.='<TR>'.chr(13);
- if($swccc){
- $tablaHtml.='<TD><input type=radio name="particion" value="'.$rs->campos["numpar"]."_".$rs->campos["codpar"].'"></TD>'.chr(13);
- $tablaHtml.='<TD align=center>&nbsp;'.$rs->campos["numpar"].'&nbsp;</TD>'.chr(13);
- $tablaHtml.='<TD align=center>&nbsp;'.$rs->campos["tipopar"].'&nbsp;</TD>'.chr(13);
- if(empty($rs->campos["nombreso"]) && !empty($rs->campos["idnombreso"])) // Si el identificador del S.O. no es nulo pero no hay descripción
- $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,$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);
- $rs->Siguiente();
- }
- $rs->Cerrar();
- return($tablaHtml);
-}
+
?>
diff --git a/admin/WebConsole/comandos/CrearImagenBasica.php b/admin/WebConsole/comandos/CrearImagenBasica.php
new file mode 100644
index 00000000..f9937f66
--- /dev/null
+++ b/admin/WebConsole/comandos/CrearImagenBasica.php
@@ -0,0 +1,213 @@
+<?php
+// *************************************************************************************************************************************************
+// Aplicaci�n WEB: ogAdmWebCon
+// Autor: Jos� Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creaci�n: A�o 2012
+// Fecha �ltima modificaci�n: Noviembre-2012
+// Nombre del fichero: CrearImagenBas.php
+// Descripci�n :
+// Implementaci�n del comando "CrearImagenBas.php"
+// *************************************************************************************************************************************************
+include_once("../includes/ctrlacc.php");
+include_once("../clases/AdoPhp.php");
+include_once("../includes/constantes.php");
+include_once("../includes/comunes.php");
+include_once("../includes/CreaComando.php");
+include_once("../includes/HTMLSELECT.php");
+include_once("../includes/HTMLCTESELECT.php");
+include_once("../idiomas/php/".$idioma."/comandos/crearimagenbasica_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
+include_once("../includes/pintaTablaConfiguraciones.php");
+//________________________________________________________________________________________________________
+//
+include_once("./includes/capturaacciones.php");
+//________________________________________________________________________________________________________
+//
+$cmd=CreaComando($cadenaconexion);
+if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexi�n con servidor B.D.
+//________________________________________________________________________________________________________
+//
+$resul=tomaPropiedades($cmd,$idambito);
+if (!$resul){
+ Header('Location: '.$pagerror.'?herror=3'); // Error de recuperaci�n de datos.
+}
+//________________________________________________________________________________________________________
+?>
+<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/CrearImagenBasica.js"></SCRIPT>
+<SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
+<?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/crearimagenbasica_'.$idioma.'.js"></SCRIPT>'?>
+<?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
+<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
+</HEAD>
+<BODY>
+<!------------------------------------------------------------------------------------------
+ Cabecera
+------------------------------------------------------------------------------------------->
+ <P align=center class=cabeceras><? echo $TbMsg[0] ?><P>
+ <P align=center>
+ <SPAN align=center class=subcabeceras><? echo $TbMsg[1] ?></SPAN>
+ </BR>
+ <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
+ <TR>
+ <TH align=center>&nbsp;<? echo $TbMsg[2] ?>&nbsp;</TD>
+ <? echo '<TD>'.$nombreordenador.'</TD>';?>
+ <TD colspan=2 valign=top align=left rowspan=3><IMG border=2 style="border-color:#63676b" src="../images/fotoordenador.gif"></TD>
+ </TR>
+ <TR>
+ <TH align=center>&nbsp;<? echo $TbMsg[3] ?>&nbsp;</TD>
+ <? echo '<TD>'.$ip.'</TD>';?>
+ </TR>
+ <TR>
+ <TH align=center>&nbsp;<? echo $TbMsg[4] ?>&nbsp;</TD>
+ <? echo '<TD>'.$mac.'</TD>';?>
+ </TR>
+ </TABLE>
+ </P>
+<!------------------------------------------------------------------------------------------
+ Subcabecera
+------------------------------------------------------------------------------------------->
+ <P align=center><SPAN align=center class=subcabeceras><? echo $TbMsg[6] ?></SPAN></p>
+ <FORM align=center name="fdatos">
+ <TABLE width=90% align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
+ <TR>
+ <TH align=center>&nbsp;&nbsp;</TH>
+ <TH align=center>&nbsp;<?php echo $TbMsg["PARTITION"] ?>&nbsp;</TH>
+ <TH align=center>&nbsp;<?php echo $TbMsg["SO_NAME"] ?>&nbsp;</TH>
+ <TH align=center>&nbsp;<?php echo $TbMsg["IMAGE_REPOSITORY"]?>&nbsp;</TH>
+ <TH align=center>&nbsp;<?php echo $TbMsg["SYNC_METHOD"]?>&nbsp;</TH>
+ <TH align=center>&nbsp;<dfn title='<?php echo $TbMsg["TITLE_W"]?>'> W </dfn> &nbsp;</TH>
+ <TH align=center>&nbsp;<dfn title='<?php echo $TbMsg["TITLE_E"]?>'> E </dfn> &nbsp;</TH>
+ <TH align=center>&nbsp;<dfn title='<?php echo $TbMsg["TITLE_C"]?>'> C </dfn> &nbsp;</TH>
+ </TR>
+<!------------------------------------------------------------------------------------------
+ Detalle
+------------------------------------------------------------------------------------------->
+ <?
+ $tbPar=tablaConfiguracionesSincronizacion1($idambito);
+ ?>
+ </TABLE>
+ <input type=hidden id="cadPar" value="<? echo $tbPar ?>">
+ <br>
+ <?
+ opcionesAdicionales();
+ ?>
+</FORM>
+<?
+//---------------------------------------------------------------------------------------------
+// Pie
+//----------------------------------------------------------------------------------------------
+ include_once("./includes/formularioacciones.php");
+ include_once("./includes/opcionesacciones.php");
+?>
+</BODY>
+</HTML>
+<?
+//*********************************************************************************************
+// FUNCIONES
+//*********************************************************************************************
+
+/*----------------------------------------------------------------------------------------------
+ Recupera los datos de un ordenador
+ Parametros:
+ - ido: El identificador del ordenador
+----------------------------------------------------------------------------------------------*/
+function tomaPropiedades($cmd,$ido)
+{
+ global $nombreordenador;
+ global $ip;
+ global $mac;
+ global $cmd;
+
+ $rs=new Recordset;
+ $cmd->texto="SELECT nombreordenador,ip,mac,idperfilhard,idrepositorio
+ FROM ordenadores
+ WHERE idordenador='".$ido."'";
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(false); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $nombreordenador=$rs->campos["nombreordenador"];
+ $ip=$rs->campos["ip"];
+ $mac=$rs->campos["mac"];global $idcentro;
+ $rs->Cerrar();
+ return(true);
+ }
+ else
+ return(false);
+}
+
+/*----------------------------------------------------------------------------------------------
+ Dibuja una tabla con las opciones generales
+----------------------------------------------------------------------------------------------*/
+function opcionesAdicionales()
+{
+ global $TbMsg;
+ global $funcion;
+
+ $tablaHtml='<table width="90%" ';
+
+ //if($funcion!="CrearImagenBasica")
+ $tablaHtml.='style="display:none"';
+
+ $tablaHtml.=' center border=0 cellPadding=0 cellSpacing=0 class="tabla_accesos">';
+ $tablaHtml.='<tr><th colspan=8 align=center><b>&nbsp;'.$TbMsg[12].'&nbsp;</b></th></tr>';
+ $tablaHtml.='<tr id="trOpc">
+ <td align=right>'.$TbMsg[13].'</td>
+ <td><input type=checkbox name="bpi"></td>'; // Borrar imagen previamente del servidor
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[14].'</td>
+ <td><input type=checkbox name="cpc"></td>'; // Copiar adem�s la imagen a la cach�
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[15].'</td>
+ <td><input type=checkbox name="bpc"></td>'; // Borrar imagen de la cach� previamente antes de copiarla
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[16].'</td>
+ <td><input type=checkbox name="nba"></td>'; // No borrar archivos en destino
+ $tablaHtml.='</tr>';
+ $tablaHtml.=' </table>';
+ echo $tablaHtml;
+}
+/*----------------------------------------------------------------------------------------------
+ Crea desplegable de imagenes
+----------------------------------------------------------------------------------------------*/
+function HTMLSELECT_imagenes($idimagen)
+{
+ global $cmd;
+ global $IMAGENES_BASICAS;
+ global $idcentro;
+
+ $SelectHtml="";
+ $cmd->texto="SELECT imagenes.idimagen,imagenes.descripcion,imagenes.nombreca,imagenes.ruta,
+ repositorios.ip,repositorios.nombrerepositorio
+ FROM imagenes
+ INNER JOIN repositorios on imagenes.idrepositorio = repositorios.idrepositorio
+ WHERE tipo=".$IMAGENES_BASICAS."
+ AND imagenes.idcentro=".$idcentro;
+
+ //echo $cmd->texto;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return("");
+ $rs->Primero();
+ $SelectHtml.= '<SELECT class="estilodesple" style="width:95%">';
+ $SelectHtml.= ' <OPTION value="0"></OPTION>';
+ while (!$rs->EOF){
+ $SelectHtml.='<OPTION value="'.$rs->campos["idimagen"].";".$rs->campos["nombreca"].";".$rs->campos["ip"].";".$rs->campos["ruta"].'"';
+ if($idimagen==$rs->campos["idimagen"]) $SelectHtml.=" selected ";
+
+ $SelectHtml.='>';
+ $SelectHtml.= $rs->campos["descripcion"].' - '. $rs->campos['nombrerepositorio'].'</OPTION>';
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+ $SelectHtml.= '</SELECT>';
+ return($SelectHtml);
+}
+?>
+
diff --git a/admin/WebConsole/comandos/CrearSoftIncremental.php b/admin/WebConsole/comandos/CrearSoftIncremental.php
new file mode 100644
index 00000000..69022ed3
--- /dev/null
+++ b/admin/WebConsole/comandos/CrearSoftIncremental.php
@@ -0,0 +1,210 @@
+<?
+// *************************************************************************************************************************************************
+// Aplicaci�n WEB: ogAdmWebCon
+// Autor: Jos� Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creaci�n: A�o 2012
+// Fecha �ltima modificaci�n: Noviembre-2012
+// Nombre del fichero: CrearImagenBas.php
+// Descripci�n :
+// Implementaci�n del comando "CrearImagenBas.php"
+// *************************************************************************************************************************************************
+include_once("../includes/ctrlacc.php");
+include_once("../clases/AdoPhp.php");
+include_once("../includes/constantes.php");
+include_once("../includes/comunes.php");
+include_once("../includes/CreaComando.php");
+include_once("../includes/HTMLSELECT.php");
+include_once("../includes/HTMLCTESELECT.php");
+include_once("../idiomas/php/".$idioma."/comandos/crearsoftincremental_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
+include_once("../includes/pintaTablaConfiguraciones.php");
+
+//________________________________________________________________________________________________________
+//
+include_once("./includes/capturaacciones.php");
+//________________________________________________________________________________________________________
+//
+$cmd=CreaComando($cadenaconexion);
+if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexi�n con servidor B.D.
+//________________________________________________________________________________________________________
+//
+$resul=tomaPropiedades($cmd,$idambito);
+if (!$resul){
+ Header('Location: '.$pagerror.'?herror=3'); // Error de recuperaci�n de datos.
+}
+//________________________________________________________________________________________________________
+?>
+<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/CrearSoftIncremental.js"></SCRIPT>
+<SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
+<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/crearsoftincremental_'.$idioma.'.js"></SCRIPT>'?>
+<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
+<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
+</HEAD>
+<BODY>
+<!------------------------------------------------------------------------------------------
+ Cabecera
+------------------------------------------------------------------------------------------->
+ <P align=center class=cabeceras><? echo $TbMsg[0] ?><P>
+ <P align=center>
+ <SPAN align=center class=subcabeceras><? echo $TbMsg[1] ?></SPAN>
+ </BR>
+ <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
+ <TR>
+ <TH align=center>&nbsp;<? echo $TbMsg[2] ?>&nbsp;</TD>
+ <? echo '<TD>'.$nombreordenador.'</TD>';?>
+ <TD colspan=2 valign=top align=left rowspan=3><IMG border=2 style="border-color:#63676b" src="../images/fotoordenador.gif"></TD>
+ </TR>
+ <TR>
+ <TH align=center>&nbsp;<? echo $TbMsg[3] ?>&nbsp;</TD>
+ <? echo '<TD>'.$ip.'</TD>';?>
+ </TR>
+ <TR>
+ <TH align=center>&nbsp;<? echo $TbMsg[4] ?>&nbsp;</TD>
+ <? echo '<TD>'.$mac.'</TD>';?>
+ </TR>
+ </TABLE>
+ </P>
+<!------------------------------------------------------------------------------------------
+ Subcabecera
+------------------------------------------------------------------------------------------->
+ <P align=center><SPAN align=center class=subcabeceras><? echo $TbMsg[6] ?></SPAN></p>
+ <FORM align=center name="fdatos">
+ <TABLE width=90% align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
+ <TR>
+ <TH align=center>&nbsp;&nbsp;</TH>
+ <TH align=center>&nbsp;<?php echo $TbMsg["PARTITION"] ?>&nbsp;</TH>
+ <TH align=center>&nbsp;<?php echo $TbMsg["SO_NAME"] ?>&nbsp;</TH>
+ <TH align=center>&nbsp;<?php echo $TbMsg["INCREMENTAL_IMAGE_REPOSITORY"]?>&nbsp;</TH>
+ <TH align=center>&nbsp;<?php echo $TbMsg["SYNC_METHOD"]?>&nbsp;</TH>
+ <TH align=center>&nbsp;<dfn title='<?php echo $TbMsg["TITLE_W"]?>'> W </dfn> &nbsp;</TH>
+ <TH align=center>&nbsp;<dfn title='<?php echo $TbMsg["TITLE_E"]?>'> E </dfn> &nbsp;</TH>
+ <TH align=center>&nbsp;<dfn title='<?php echo $TbMsg["TITLE_C"]?>'> C </dfn> &nbsp;</TH>
+ </TR>
+<!------------------------------------------------------------------------------------------
+ Detalle
+------------------------------------------------------------------------------------------->
+ <?
+ $tbPar=tablaConfiguracionesSincronizacion1($idambito);
+ ?>
+ </TABLE>
+ <input type=hidden id="cadPar" value="<? echo $tbPar ?>">
+ <br>
+ <?
+ opcionesAdicionales();
+ ?>
+</FORM>
+<?
+//---------------------------------------------------------------------------------------------
+// Pie
+//----------------------------------------------------------------------------------------------
+ include_once("./includes/formularioacciones.php");
+ include_once("./includes/opcionesacciones.php");
+?>
+</BODY>
+</HTML>
+<?
+//*********************************************************************************************
+// FUNCIONES
+//*********************************************************************************************
+
+/*----------------------------------------------------------------------------------------------
+ Recupera los datos de un ordenador
+ Parametros:
+ - ido: El identificador del ordenador
+----------------------------------------------------------------------------------------------*/
+function tomaPropiedades($cmd,$ido)
+{
+ global $nombreordenador;
+ global $ip;
+ global $mac;
+ global $cmd;
+
+ $rs=new Recordset;
+ $cmd->texto="SELECT nombreordenador, ip, mac, idperfilhard, idrepositorio
+ FROM ordenadores
+ WHERE idordenador='".$ido."'";
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(false); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $nombreordenador=$rs->campos["nombreordenador"];
+ $ip=$rs->campos["ip"];
+ $mac=$rs->campos["mac"];global $idcentro;
+ $rs->Cerrar();
+ return(true);
+ }
+ else
+ return(false);
+}
+
+/*----------------------------------------------------------------------------------------------
+ Dibuja una tabla con las opciones generales
+----------------------------------------------------------------------------------------------*/
+function opcionesAdicionales()
+{
+ global $TbMsg;
+
+ $tablaHtml='<table width="90%" style="display:none" align=center border=0 cellPadding=0 cellSpacing=0 class="tabla_accesos">';
+ $tablaHtml.='<tr><th colspan=8 align=center><b>&nbsp;'.$TbMsg[11].'&nbsp;</b></th></tr>';
+ $tablaHtml.='<tr id="trOpc">
+ <td align=right>'.$TbMsg[13].'</td>
+ <td ><input type=checkbox name="bpi"></td>'; // Borrar imagen del servidor o borrar partici�n previamente
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[14].'</td>
+ <td><input type=checkbox name="cpc"></td>'; // Copiar adem�s la imagen a la cach�
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[15].'</td>
+ <td><input type=checkbox name="bpc"></td>'; // Borrar imagen de la cach� previamente antes de copiarla
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[16].'</td>
+ <td><input type=checkbox name="nba"></td>'; // No borrar archivos en destino
+ $tablaHtml.='</tr>';
+ $tablaHtml.=' </table>';
+ echo $tablaHtml;
+}
+/*----------------------------------------------------------------------------------------------
+ Crea desplegable de imagenes
+----------------------------------------------------------------------------------------------*/
+function HTMLSELECT_imagenes($idimagen)
+{
+ global $cmd;
+ global $idcentro;
+ global $IMAGENES_INCREMENTALES;
+
+ $SelectHtml="";
+ $cmd->texto="SELECT imagenes.idimagen as idimageninc,imagenes.descripcion,imagenes.nombreca as nombreincca,
+ imagesbas.nombreca,imagesbas.idimagen,imagesbas.ruta,
+ repositorios.ip,repositorios.nombrerepositorio
+ FROM imagenes
+ INNER JOIN imagenes as imagesbas on imagesbas.idimagen = imagenes.imagenid
+ INNER JOIN repositorios on imagesbas.idrepositorio = repositorios.idrepositorio
+ WHERE imagenes.tipo=".$IMAGENES_INCREMENTALES."
+ AND imagesbas.idcentro=".$idcentro;
+ //echo $cmd->texto;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return("");
+ $rs->Primero();
+ $SelectHtml.= '<SELECT class="estilodesple" style="width:95%">';
+ $SelectHtml.= ' <OPTION value="0"></OPTION>';
+ while (!$rs->EOF){
+ $SelectHtml.='<OPTION
+ value="'.$rs->campos["idimagen"].";".$rs->campos["nombreca"].";".$rs->campos["ip"].";".$rs->campos["idimageninc"].";".$rs->campos["nombreincca"].";".$rs->campos["ruta"].'"';
+ if($idimagen==$rs->campos["idimagen"]) $SelectHtml.=" selected ";
+
+ $SelectHtml.='>';
+ $SelectHtml.= $rs->campos["descripcion"].' - '. $rs->campos['nombrerepositorio'].'</OPTION>';
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+ $SelectHtml.= '</SELECT>';
+ return($SelectHtml);
+}
+?>
+
diff --git a/admin/WebConsole/comandos/EliminarImagenCache.php b/admin/WebConsole/comandos/EliminarImagenCache.php
new file mode 100644
index 00000000..bbb59015
--- /dev/null
+++ b/admin/WebConsole/comandos/EliminarImagenCache.php
@@ -0,0 +1,448 @@
+<?php
+// *************************************************************************************************************************************************
+// Nombre del fichero: EliminarImagenCache.php
+// Descripci????n :
+// Implementaci????n?????? del comando "Eliminar Imagen Cache"
+// date: 13-junio-2013
+// Cambio: se incluye mensaje equipos sin configuracion. En la funcion tabla_configuracion incluye cabecera de la tabla.
+// *************************************************************************************************************************************************
+include_once("../includes/ctrlacc.php");
+include_once("../clases/AdoPhp.php");
+include_once("../includes/constantes.php");
+include_once("../includes/comunes.php");
+include_once("../includes/CreaComando.php");
+include_once("../includes/HTMLSELECT.php");
+include_once("../includes/HTMLCTESELECT.php");
+include_once("../includes/TomaDato.php");
+include_once("../idiomas/php/".$idioma."/comandos/eliminarimagencache_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
+//________________________________________________________________________________________________________
+include_once("./includes/capturaacciones.php");
+$funcion=EjecutarScript;
+$idc=$_SESSION["widcentro"];
+$ipservidor=$_SERVER['SERVER_ADDR'];
+//________________________________________________________________________________________________________
+$cmd=CreaComando($cadenaconexion);
+if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexi??n con servidor B.D.
+//___________________________________________________________________________________________________
+?>
+<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/EliminarImagenCache.js"></SCRIPT>
+<SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
+<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/eliminarimagencache_'.$idioma.'.js"></SCRIPT>'?>
+<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
+<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
+</HEAD>
+<BODY>
+<?php
+
+switch($ambito){
+ case $AMBITO_CENTROS :
+ $urlimg='../images/iconos/centros.gif';
+ $textambito=$TbMsg[0];
+ break;
+ case $AMBITO_GRUPOSAULAS :
+ $urlimg='../images/iconos/carpeta.gif';
+ $textambito=$TbMsg[1];
+ break;
+ case $AMBITO_AULAS :
+ $urlimg='../images/iconos/aula.gif';
+ $textambito=$TbMsg[2];//#agp
+ $cmd->texto="SELECT DISTINCT ordenadores.idrepositorio
+ FROM aulas
+ LEFT JOIN ordenadores ON ordenadores.idaula=aulas.idaula
+ WHERE aulas.idaula=$idambito";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset
+ $rs->Primero();
+ $idx=0;
+ while (!$rs->EOF){
+ $rs->Siguiente();
+ $idx++; }
+ $cuentarepos=$idx; // Guarda contador
+ $rs->Cerrar();
+ if ($cuentarepos==1){
+ $cmd->texto="SELECT repositorios.ip
+ FROM repositorios
+ INNER JOIN ordenadores ON ordenadores.idrepositorio=repositorios.idrepositorio
+ AND ordenadores.idaula='$idambito'
+ GROUP BY ip";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset
+ $rs->Primero();
+ $iprepositorioord=$rs->campos["ip"];
+ if ( $iprepositorioord == $ipservidor ){$cuentarepos=1;}else{$cuentarepos=2;}
+ $rs->Cerrar();
+ }//#agp
+ break;
+
+ case $AMBITO_GRUPOSORDENADORES :
+ $urlimg='../images/iconos/carpeta.gif';
+ $textambito=$TbMsg[3];//#agp
+ $cmd->texto="SELECT DISTINCT ordenadores.idrepositorio
+ FROM aulas
+ LEFT JOIN ordenadores ON ordenadores.idaula=aulas.idaula
+ WHERE aulas.idaula=ordenadores.idaula
+ AND aulas.idcentro='$idc'
+ AND ordenadores.grupoid=".$idambito;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset
+ $rs->Primero();
+ $idx=0;
+ while (!$rs->EOF){
+ $rs->Siguiente();
+ $idx++; }
+ $cuentarepos=$idx; // Guarda contador
+ $rs->Cerrar();
+ if ($cuentarepos==1){
+ $cmd->texto="SELECT repositorios.ip
+ FROM repositorios
+ INNER JOIN ordenadores ON ordenadores.idrepositorio=repositorios.idrepositorio
+ AND ordenadores.grupoid='$idambito'
+ GROUP BY ip";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset
+ $rs->Primero();
+ $iprepositorioord=$rs->campos["ip"];
+ if ( $iprepositorioord == $ipservidor ){$cuentarepos=1;}else{$cuentarepos=2;}
+ $rs->Cerrar();
+ }//#agp
+ break;
+
+ case $AMBITO_ORDENADORES :
+ $urlimg='../images/iconos/ordenador.gif';
+ $textambito=$TbMsg[4];//#agp
+ $cmd->texto="SELECT repositorios.ip
+ FROM repositorios
+ INNER JOIN ordenadores ON ordenadores.idrepositorio=repositorios.idrepositorio
+ AND ordenadores.idordenador=$idambito";//#agp
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset
+ $rs->Primero();
+ $iprepositorioord=$rs->campos["ip"];
+ if ( $iprepositorioord == $ipservidor ){$cuentarepos=1;}else{$cuentarepos=2;}
+ $rs->Cerrar();//#agp
+ break;
+ }
+
+ echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
+ echo '<IMG src="'.$urlimg.'">&nbsp;&nbsp;<span align=center class=subcabeceras><U>'.$TbMsg[6].': '.$textambito.','.$nombreambito.'</U></span>&nbsp;&nbsp;</span></p>';
+?>
+<!-- //#agp-->
+<?php
+ // Mensaje aviso limitacion version si hay dos repositorios
+ if ($cuentarepos >1){ ?>
+ <TABLE id="tabla_conf" align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
+ <TR>
+ <TH align=center >&nbsp;
+ <? if ($ambito==16){
+ echo $TbMsg[17]."</br>".$nombreambito.$TbMsg[16]."</br>".$TbMsg[18];
+ }else{
+ echo $TbMsg[17]."</br>".$nombreambito.$TbMsg[15]."</br>".$TbMsg[18]; }
+ ?>&nbsp;</TH> </TR>
+
+ </TABLE>
+<?php }?>
+<!-- //#agp-->
+
+ <P align=center>
+ <SPAN align=center class=subcabeceras><? echo $TbMsg[7] ?></SPAN>
+ </P>
+
+<form align=center name="fdatos">
+ <?php echo tabla_configuraciones($cmd,$idambito); ?>
+</form>
+<P></P>
+<!-- //#agp-->
+
+<?php
+ //________________________________________________________________________________________________________
+ include_once("./includes/formularioacciones.php");
+ //________________________________________________________________________________________________________
+ include_once("./includes/opcionesacciones.php");
+ //________________________________________________________________________________________________________
+?>
+</BODY>
+</HTML>
+
+<?php
+/**************************************************************************************************************************************************
+ Recupera los datos de un ordenador
+ Parametros:
+ - cmd: Una comando ya operativo (con conexi??nabierta)
+ - ido: El identificador del ordenador
+________________________________________________________________________________________________________*/
+function TomaPropiedades($cmd,$idambito)
+{
+
+ $rs=new Recordset;
+ $cmd->texto="SELECT COUNT(ordenadores.idordenador) AS numordenadores, aulas.* ,
+ GROUP_CONCAT(DISTINCT CAST( ordenadores.idmenu AS char( 11 ) )
+ ORDER BY ordenadores.idmenu SEPARATOR ',' ) AS idmenus,
+ GROUP_CONCAT(DISTINCT CAST( ordenadores.idrepositorio AS char( 11 ) )
+ ORDER BY ordenadores.idrepositorio SEPARATOR ',' ) AS idrepositorios,
+ GROUP_CONCAT(DISTINCT CAST( ordenadores.idperfilhard AS char( 11 ) )
+ ORDER BY ordenadores.idperfilhard SEPARATOR ',' ) AS idperfileshard,
+ GROUP_CONCAT(DISTINCT CAST( ordenadores.cache AS char( 11 ) )
+ ORDER BY ordenadores.cache SEPARATOR ',' ) AS caches,
+ GROUP_CONCAT(DISTINCT CAST( ordenadores.idproautoexec AS char( 11 ) )
+ ORDER BY ordenadores.idproautoexec SEPARATOR ',' ) AS idprocedimientos
+ FROM aulas
+ LEFT OUTER JOIN ordenadores ON ordenadores.idaula = aulas.idaula
+ WHERE aulas.idaula =".$idambito."
+ GROUP BY aulas.idaula";
+
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(false); // Error al abrir recordset
+ if (!$rs->EOF){
+ $idaula=$rs->campos["idaula"];
+ $nombreaula=$rs->campos["nombreaula"];
+ $urlfoto=$rs->campos["urlfoto"];
+ if ($urlfoto=="" ) $urlfoto="aula.jpg";
+ $cagnon=$rs->campos["cagnon"];
+ $pizarra=$rs->campos["pizarra"];
+ $ubicacion=$rs->campos["ubicacion"];
+ $comentarios=$rs->campos["comentarios"];
+ $puestos=$rs->campos["puestos"];
+ $horaresevini=$rs->campos["horaresevini"];
+ $horaresevfin=$rs->campos["horaresevfin"];
+ $grupoid=$rs->campos["grupoid"];
+ $modomul=$rs->campos["modomul"];
+ $ipmul=$rs->campos["ipmul"];
+ $pormul=$rs->campos["pormul"];
+ $velmul=$rs->campos["velmul"];
+#################### ADV
+ $router=$rs->campos["router"];
+ $netmask=$rs->campos["netmask"];
+ $modp2p=$rs->campos["modp2p"];
+ $timep2p=$rs->campos["timep2p"];
+###################### ADV
+###################### UHU
+ $validacion=$rs->campos["validacion"];
+ $paginalogin=$rs->campos["paginalogin"];
+ $paginavalidacion=$rs->campos["paginavalidacion"];
+###################### UHU
+
+ $ordenadores=$rs->campos["numordenadores"];
+ $idmenu=$rs->campos["idmenus"];
+ if(count(split(",",$idmenu))>1) $idmenu=0;
+ $idrepositorio=$rs->campos["idrepositorios"];
+ if(count(split(",",$idrepositorio))>1) $idrepositorio=0;
+ $idperfilhard=$rs->campos["idperfileshard"];
+ if(count(split(",",$idperfilhard))>1) $idperfilhard=0;
+ $cache=$rs->campos["caches"];
+ if(count(split(",",$cache))>1) $cache=0;
+ $idmenu=$rs->campos["idmenus"];
+ if(count(split(",",$idmenu))>1) $idmenu=0;
+ $idprocedimiento=$rs->campos["idprocedimientos"];
+ if(count(split(",",$idprocedimiento))>1) $idprocedimiento=0;
+
+ $gidmenu=$idmenu;
+ $gidprocedimiento=$idprocedimiento;
+ $gidrepositorio=$idrepositorio;
+ $gidperfilhard=$idperfilhard;
+ $gcache=$cache;
+
+ $rs->Cerrar();
+
+ return(true);
+ }
+ return(false);
+}
+
+/*________________________________________________________________________________________________________
+ Crea la tabla de configuraciones y perfiles a crear
+________________________________________________________________________________________________________*/
+
+function tabla_configuraciones($cmd,$idambito){
+
+ global $TbMsg;
+ global $cuentarepos;
+ global $idc;
+ global $ambito;
+ global $idambito;
+ global $nombreambito;
+
+ global $AMBITO_CENTROS;
+ global $AMBITO_GRUPOSAULAS;
+ global $AMBITO_AULAS;
+ global $AMBITO_GRUPOSORDENADORES;
+ global $AMBITO_ORDENADORES;
+
+switch($ambito){
+ case $AMBITO_CENTROS :
+ $urlimg='../images/iconos/centros.gif';
+ //echo "ambito - ".$ambito."<br>";
+ //echo "idcentro - ".$idc;
+ break;
+
+ case $AMBITO_GRUPOSAULAS :
+
+ $cmd->texto="SELECT * FROM grupos WHERE nombregrupo='$nombreambito' AND idcentro='$idc'";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(true); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $identificadorgrupo=$rs->campos["idgrupo"];
+ }
+ $rs->Cerrar();
+
+ $cmd->texto="SELECT * FROM aulas,grupos
+ WHERE grupos.nombregrupo='$nombreambito'
+ AND aulas.idcentro='$idc'
+ AND aulas.grupoid='$identificadorgrupo'
+ AND aulas.grupoid=grupos.idgrupo";
+
+
+ break;
+
+ case $AMBITO_AULAS :
+ $cmd->texto="SELECT * FROM ordenadores,aulas,ordenadores_particiones
+ WHERE ordenadores_particiones.idordenador=ordenadores.idordenador
+ AND ordenadores.idaula=aulas.idaula
+ AND aulas.nombreaula='$nombreambito'
+ AND aulas.idcentro='$idc'
+ AND ordenadores_particiones.numpar=4
+ GROUP BY ordenadores_particiones.cache";
+
+ break;
+
+ case $AMBITO_GRUPOSORDENADORES :
+ $cmd->texto="SELECT * FROM ordenadores,aulas,ordenadores_particiones,gruposordenadores
+ WHERE ordenadores_particiones.idordenador=ordenadores.idordenador
+ AND ordenadores.idaula=aulas.idaula
+ AND gruposordenadores.idaula=aulas.idaula
+ AND aulas.idcentro='$idc'
+ AND ordenadores_particiones.numpar=4
+ AND ordenadores.grupoid='$idambito'
+ GROUP BY ordenadores_particiones.cache";
+
+ break;
+ case $AMBITO_ORDENADORES :
+ $cmd->texto="SELECT * FROM ordenadores,ordenadores_particiones
+ WHERE ordenadores_particiones.idordenador=ordenadores.idordenador
+ AND ordenadores.nombreordenador='$nombreambito'
+ AND ordenadores_particiones.numpar=4
+ GROUP BY ordenadores_particiones.cache";
+ break;
+ }
+
+ $tablaHtml="";
+
+
+ $rs->Comando=&$cmd;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset
+ $rs->Primero();
+
+ while (!$rs->EOF){
+
+ $cache=$rs->campos["cache"];
+ $idordenador=$rs->campos["idordenador"];
+ $ima=split(",",$cache);
+
+ for ($x=0;$x<count($ima); $x++)
+ {
+ if(ereg(".img",$ima[$x]) ) //si contiene .img son ficheros de imagen
+ {
+ if (ereg(".img.sum",$ima[$x]) || ereg(".img.torrent",$ima[$x]) )//Si el nombre contiene .img.sum o img.torrent
+ {}else{$esdir[]="f";
+ if (ereg(".img.diff",$ima[$x]))
+ {
+ $ima[$x] = str_replace(".img.diff", "", $ima[$x]); //quitar todos los .img
+ $ima[$x]=trim($ima[$x]);
+ $nombreimagenes[]=$ima[$x];
+ }else{
+ $ima[$x] = str_replace(".img", "", $ima[$x]); //quitar todos los .img
+ $ima[$x]=trim($ima[$x]);
+ $nombreimagenes[]=$ima[$x];
+
+ }
+ }
+ }elseif (ereg("MB",$ima[$x]))
+ {}else{ // Es un directorio
+ $ima[$x]=trim($ima[$x]);
+ $nombreimagenes[]=$ima[$x];
+ $esdir[]="d";
+ }
+ }
+
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ //$sin_duplicados=array_unique($nombreimagenes);
+ $sin_duplicados=$nombreimagenes;
+ $contar=1;
+ if (empty($sin_duplicados)) {
+ // Equipo sin configuracion en base de datos.
+ $inicioTabla='<table id="tabla_conf" width="95%" class="tabla_listados_sin" align="center" border="0" cellpadding="0" cellspacing="1">'.chr(13);
+ $inicioTabla.='<tr><th align="center" >'.$TbMsg["CONFIG_NOCONFIG"].'</th><tr>'.chr(13);
+ }else{
+ // Equipo con configuracion en BD
+ // Incluimos primera linea de la tabla.
+ $inicioTabla='<TABLE id="tabla_conf" align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>'.chr(13);
+ $inicioTabla.=' <TR>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'.$TbMsg[11].'&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'.$TbMsg[19].'&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'.$TbMsg[12].'&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'.$TbMsg[10].'&nbsp;</TH>'.chr(13);
+ if ($cuentarepos==1)
+ $inicioTabla.=' <TH align=center>&nbsp;'.$TbMsg[13].'&nbsp;</TH>'.chr(13);
+
+
+
+ }
+
+ echo $inicioTabla;
+ $numdir=0;
+
+ foreach($sin_duplicados as $value) //imprimimos $sin_duplicados
+ {
+ if (empty($value)){
+ // Equipo sin imagenes en la cache.
+ $inicioTabla='<table id="tabla_conf" width="25%" class="tabla_listados_sin" align="center" border="0" cellpadding="0" cellspacing="1">'.chr(13);
+ $inicioTabla.='<tr><th align="center" >NO '.$TbMsg["7"].'</th><tr>'.chr(13);
+ echo $inicioTabla;
+ }else{
+ $nombrefichero=$value.'.img';
+ $tamanofich=exec("du -h /opt/opengnsys/images/$nombrefichero");
+ if ($tamanofich==""){$tamanofich=$TbMsg[14];}
+ $tamanofich=split("/",$tamanofich);
+ $todo=".*";
+ if ($esdir[$numdir] == "d"){
+ $ruta[]='rm%20-r%20/opt/opengnsys/cache/opt/opengnsys/images/'.$value;
+ }else{
+ $ruta[]='rm%20-r%20/opt/opengnsys/cache/opt/opengnsys/images/'.$value.$todo;
+ }
+ echo '<TR>'.chr(13);
+ echo '<TD align=center>&nbsp;'.$contar.'&nbsp;</TD>'.chr(13);
+ if ($esdir[$numdir]=="d"){echo '<TD align=center><font color=blue>&nbsp;D&nbsp;</font></TD>'.chr(13);}else{echo '<TD align=center>&nbsp;F&nbsp;</TD>'.chr(13);}
+ echo '<TD align=center ><input type="radio" name="codigo" value='.$ruta[$numdir].'></TD>'.chr(13);
+ if ($esdir[$numdir]=="d"){echo '<TD align=center><font color=blue>&nbsp;'.$value.'&nbsp;</font></TD>'.chr(13);}else{echo '<TD align=center>&nbsp;'.$value.'&nbsp;</TD>'.chr(13);}
+ if ($cuentarepos==1){echo '<TD align=center>&nbsp;'.$tamanofich[0].'</TD>'.chr(13);}
+ echo '</TR>'.chr(13);
+ $contar++;$numdir++;
+ }
+ }
+ echo "</table>".chr(13);
+
+
+ return($tablaHtml);
+}
+
+?>
diff --git a/admin/WebConsole/comandos/EliminarImagenRepositorio.php b/admin/WebConsole/comandos/EliminarImagenRepositorio.php
new file mode 100644
index 00000000..144f833a
--- /dev/null
+++ b/admin/WebConsole/comandos/EliminarImagenRepositorio.php
@@ -0,0 +1,739 @@
+<?php
+// *************************************************************************************************************************************************
+// Nombre del fichero: EliminarImagenRepositorio.php
+// Descripción :
+// Implementaciónï¿Å" del comando "Eliminar Imagen Repositorio"
+// *************************************************************************************************************************************************
+include_once("../includes/ctrlacc.php");
+include_once("../clases/AdoPhp.php");
+include_once("../includes/constantes.php");
+include_once("../includes/comunes.php");
+include_once("../includes/CreaComando.php");
+include_once("../includes/HTMLSELECT.php");
+include_once("../includes/TomaDato.php");
+include_once("../idiomas/php/".$idioma."/comandos/eliminarimagenrepo_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
+
+include_once("../gestores/relaciones/imagenes_eliminacion.php");
+
+if (isset($_POST["opcion"])) {$opcion=$_POST["opcion"];}else{$opcion;} // Recoge parametros
+//$opcion=$_POST["opcion"]; // Recoge parametros
+if (isset($_POST["idrepositorio"])) {$idrepositorio=$_POST["idrepositorio"];}else{$idrepositorio;}
+//$idrepositorio=$_POST["idrepositorio"];
+if (isset($_POST["grupoid"])) {$grupoid=$_POST["grupoid"];}else{$grupoid;}
+//$grupoid=$_POST["grupoid"];
+$idcentro=$_SESSION["widcentro"];
+if (isset($_GET["opcion"])) $opcion=$_GET["opcion"]; // Recoge parametros
+if (isset($_GET["idrepositorio"])) $idrepositorio=$_GET["idrepositorio"];
+if (isset($_GET["grupoid"])) $grupoid=$_GET["grupoid"];
+if (isset($_GET["identificador"])) $idrepositorio=$_GET["identificador"];
+if (isset($_POST["modov"])) {$modov=$_POST["modov"];}else{$modov=0;}
+//___________________________________________________________________________
+//________________________________________________________________________________________________________
+$idcomando=10;
+$descricomando="Ejecutar Script";
+//echo $ambito."<br>";
+//echo $idambito."<br>";
+$funcion="EjecutarScript";
+//echo $atributos."<br>";
+//echo $gestor;
+$gestor="../comandos/gestores/gestor_Comandos.php";
+//$gestor="./ElimininarImagenRepositorio.php";
+//________________________________________________________________________________________________________
+$cmd=CreaComando($cadenaconexion);
+if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
+//___________________________________________________________________________________________________
+
+$logusu=$_SESSION["wusuario"];
+$cmd->texto="SELECT * FROM usuarios WHERE usuario='$logusu'";
+$rs=new Recordset;
+$rs->Comando=&$cmd;
+if (!$rs->Abrir()) return(true); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF)
+ {
+ $tipologusu=$rs->campos["idtipousuario"];
+ }
+ $rs->Cerrar();
+
+ $espaciorepo=exec("df -h /opt/opengnsys/images");
+ $espaciorepo=split(" ",$espaciorepo);
+ for ($j=0;$j<count($espaciorepo);$j++)
+ {
+ if ($espaciorepo[$j]!="")
+ {$espaciorepos[]=$espaciorepo[$j];}
+ }
+ for ($k=0;$k<count($espaciorepos);$k++)
+ {
+ $totalrepo=$espaciorepos[1];
+ $ocupadorepo=$espaciorepos[2];
+ $librerepo=$espaciorepos[3];
+ $porcentajerepo=$espaciorepos[4];
+ }
+
+$ipservidor=$_SERVER['SERVER_ADDR'];
+
+$cmd->texto="SELECT * FROM repositorios WHERE idrepositorio=$idrepositorio";
+$rs=new Recordset;
+$rs->Comando=&$cmd;
+if (!$rs->Abrir()) return(true); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF)
+ {
+ $nombrerepositorio=$rs->campos["nombrerepositorio"];
+ $iprepositorio=$rs->campos["ip"];
+ }
+ $rs->Cerrar();
+
+if ($iprepositorio == $ipservidor)
+{
+
+$cmd->texto="SELECT * FROM repositorios WHERE ip='$iprepositorio'";
+$rs=new Recordset;
+$rs->Comando=&$cmd;
+if (!$rs->Abrir()) return(true); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF)
+ {
+ $idrepodefault=$rs->campos["idrepositorio"];
+ }
+ $rs->Cerrar();
+//#########################################################################
+
+$repolocal="si";
+ //#########################################################################
+ // LEYENDO EL DIRECTORIO local en el server
+ // /opt/opengnsys/images/
+ //#########################################################################
+ $dirtemplates="/opt/opengnsys/images/";
+ $directorio=dir($dirtemplates);
+ $imarepo= array();//pila de nombres
+ //bucle para llenar las pilas :P
+ while ($archivo = $directorio->read())
+ {
+ //no mostrar ni "." ni ".." ni "pxe"
+ if(($archivo!=".")&&($archivo!="..")&&($archivo!="mount")&&($archivo!="lost+found"))
+ {
+ array_push($imarepo, $archivo);
+ }
+ }
+ $directorio->close();
+ sort($imarepo); // Ordenamos el Array
+
+ if (isset($_POST["contar"])) {$cuantos=$_POST["contar"];}else{$cuantos=0;$contar;}
+ //$cuantos=$_POST["contar"];
+ for ($i=1;$i<=$cuantos;$i++)
+ {
+ //#########################################################################
+ // PARA SELECCIONAR EL FICHERO IMAGEN
+ //$checkbox=$_POST["checkbox".$i];
+ if (isset($_POST["checkbox".$i])){$checkbox=$_POST["checkbox".$i];}else{$checkbox="checkbox".$i;}
+ $nombre=$_POST["nombre".$i];
+ $nombre=trim($nombre);
+ $chekmarcadif=$_POST["marcadif".$i];
+ $tipoimg=$_POST["tipoimg".$i];
+
+ if ($checkbox == "si" && $chekmarcadif == 1)
+ {
+ $delete=$nombre.".img.diff.delete";
+ //echo $delete;
+ exec("touch ../tmp/$delete");
+ exec("(echo '$nombre.img.diff') > ../tmp/$delete");
+ }
+ if ($checkbox == "si" && $chekmarcadif == 0)
+ {
+ if(ereg(".ant",$nombre))
+ {
+ $nombre = str_replace(".ant", "", $nombre); //quitar todos los .backup y continuamos
+ $delete=$nombre.".img.ant.delete";
+ //echo $nombre;
+ //echo $delete;
+ exec("touch ../tmp/$delete");
+ exec("(echo '$nombre.img.ant') > ../tmp/$delete");
+ }elseif ($tipoimg == "D"){
+ $delete=$nombre.".delete";
+ //echo $delete;
+ exec("touch ../tmp/$delete");
+ exec("(echo '$nombre') > ../tmp/$delete");
+ }else{
+ $delete=$nombre.".img.delete";
+ //echo $delete;
+ exec("touch ../tmp/$delete");
+ exec("(echo '$nombre.img') > ../tmp/$delete");
+ }
+ }
+ //#########################################################################
+ // PARA SELECCIONAR EL OBJETO IMAGEN
+ if (isset($_POST["checkboxobjeto".$i])){$checkboxobjeto=$_POST["checkboxobjeto".$i];}else{$checkboxobjeto="checkboxobjeto".$i;}
+ if ($checkboxobjeto == "si")
+ {
+ //#########################################################################
+ $cmd->texto="SELECT * FROM imagenes WHERE nombreca='$nombre' AND idcentro='$idcentro'";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(0); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $idimagen=$rs->campos["idimagen"];
+ $nombrecanonico=$rs->campos["nombreca"];
+ $centroimagen=$rs->campos["idcentro"];
+ $idimagen=$rs->campos["idimagen"];
+ //$cmd->texto="DELETE FROM imagenes WHERE idimagen='$idimagen'";
+ //$resul=$cmd->Ejecutar();
+ }
+ $rs->Cerrar();
+
+ EliminaImagenes($cmd,$idimagen,"idimagen");// Eliminación en cascada
+
+ //echo $nombrecanonico." - ".$centroimagen."<br />";
+ //#########################################################################
+ }
+}
+
+}else{
+$repolocal="no";
+//#########################################################################
+ $urlimg='../images/iconos/repositorio.gif';
+ $textambito=$TbMsg[0];
+ $nombreambito="";
+
+ echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
+ echo '<IMG src="'.$urlimg.'">&nbsp;&nbsp;<span align=center class=subcabeceras><U>'.$TbMsg[6].': '.$iprepositorio.','.$nombrerepositorio.'</U></span>&nbsp;&nbsp;</span></p>';
+ echo '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">';
+ echo' <LINK rel="stylesheet" type="text/css" href="../estilos.css">';
+ echo '<TABLE id=tabla_conf align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>';
+ echo '<TR>';
+ echo '</TR>';
+ echo '<TR>';
+ echo '<TH align=center >&nbsp;'.$TbMsg[22].'</br>'.$nombreambito.$TbMsg[23].'</br>'.$TbMsg[24].'&nbsp;</TH>';
+ echo '</TR>';
+ echo '</TABLE>';
+
+
+ }
+
+//#########################################################################
+?>
+
+<?php if ( $repolocal == "si" ){
+
+?>
+
+<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="../clases/jscripts/HttpLib.js"></SCRIPT>
+<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
+<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
+<script type="text/javascript">
+function confirmeliminar() {var mensaje="<?php echo $TbMsg[17];?>";if(confirm(mensaje)) {document.eliimarepo.submit();}}
+</script>
+</script>
+</HEAD>
+<BODY>
+<?
+
+ $urlimg='../images/iconos/repositorio.gif';
+ $textambito=$TbMsg[0];
+
+ echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
+ echo '<IMG src="'.$urlimg.'">&nbsp;&nbsp;<span align=center class=subcabeceras><U>'.$TbMsg[6].': '.$iprepositorio.','.$nombrerepositorio.'</U></span>&nbsp;&nbsp;</span></p>';
+?>
+
+
+ <TABLE align=center border=0 cellPadding=2 cellSpacing=2 class=tabla_datos >
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <?php if ($espaciorepo != ""){?>
+ <TR>
+ <TH align=center>&nbsp;<?echo $TbMsg[18]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[19]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[20]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[21]?>&nbsp;</TD>
+ </TR>
+ <TR>
+ <TD align=center width=110>&nbsp;<?echo $totalrepo?>&nbsp;</TD>
+ <TD align=center width=120>&nbsp;<?echo $ocupadorepo?>&nbsp;</TD>
+ <TD align=center width=120>&nbsp;<?echo $librerepo?>&nbsp;</TD>
+ <TD align=center width=101>&nbsp;<?echo $porcentajerepo?>&nbsp;</TD>
+ </TR>
+ <?php }else {?>
+ <TR>
+ <TH align=center width=485>&nbsp;<?echo $TbMsg[22]?>&nbsp;</TD>
+
+ </TR>
+ <?php } ?>
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ </TABLE>
+
+ <P align=center>
+ <div align=center class=subcabeceras><? echo $TbMsg[7] ?>
+
+
+ <form align="center" name="modoadmin" action="./EliminarImagenRepositorio.php" method="post">
+ <INPUT type="hidden" name="opcion" value="<? echo $opcion?>">
+ <INPUT type="hidden" name="idrepositorio" value="<? echo $idrepositorio?>">
+ <INPUT type="hidden" name="grupoid" value="<? echo $grupoid ?>">
+ <?php if ($modov == "0"){?>
+ <INPUT type="hidden" name="modov" value="1">
+ <input type=button onclick=submit() value="<?php echo $TbMsg[28]; ?>"/>
+ <?php }else{ ?>
+ <INPUT type="hidden" name="modov" value="0">
+ <input type=button onclick=submit() value="<?php echo $TbMsg[29]; ?>"/>
+ <?php } ?>
+ </form>
+ </div>
+
+
+
+
+
+<form align=center name="eliimarepo" action="./EliminarImagenRepositorio.php" method="post">
+ <TABLE id="tabla_conf" align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
+ <TR>
+ <TD align=center>&nbsp;</TD>
+ <TH align=center>&nbsp;<? echo $TbMsg[27] ?>&nbsp;</TH>
+ <TH align=center>&nbsp;<? echo "F => ".$TbMsg[31]; ?>&nbsp;</TH>
+ <TD align=center>&nbsp;</TD>
+ <TD align=center>&nbsp;</TD>
+ <TH align=center>&nbsp;<? echo "D => ".$TbMsg[32]; ?>&nbsp;</TH>
+ <TD align=center>&nbsp;</TD>
+ <TD align=center>&nbsp;</TD>
+ <TH align=center>&nbsp;<? echo "B => Backup" ?>&nbsp;</TH>
+ <TD align=center>&nbsp;</TD>
+ </TR>
+ </TABLE>
+
+ <TABLE id="tabla_conf" align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
+ <TR>
+ <TH align=center>&nbsp;<? echo $TbMsg[11] ?>&nbsp;</TH>
+ <TH align=center>&nbsp;<? echo $TbMsg[12] ?>&nbsp;</TH>
+ <TH align=center>&nbsp;<? echo $TbMsg[27] ?>&nbsp;</TH>
+ <TH align=center>&nbsp;<? echo $TbMsg[10] ?>&nbsp;</TH>
+ <TH align=center>&nbsp;<? echo $TbMsg[13] ?>&nbsp;</TH>
+ <TH align=center>&nbsp;<? echo $TbMsg[26] ?>&nbsp;</TH>
+ <?php if ($modov == 1){ ?><TH align=center>&nbsp;<? echo $TbMsg[30] ?>&nbsp;</TH><?php } ?>
+
+
+ </TR>
+ <?
+ //echo tabla_configuraciones($cmd,$idambito);
+
+
+ $idc=$_SESSION["widcentro"];
+ for ($x=0;$x<count($imarepo); $x++)
+ { //Llave For
+ if(ereg(".img",$imarepo[$x]) ) //si contiene .img
+ {
+ if (ereg(".sum",$imarepo[$x]) || ereg(".torrent",$imarepo[$x])|| ereg(".lock",$imarepo[$x]) )//Si el nombre contiene .img.sum o img.torrent o .img.lock
+ {}else{ // COMPROBANDO EL NOMBRE DIF
+ if(ereg(".img.diff",$imarepo[$x]))
+ {
+ $imarepo[$x] = str_replace(".diff", "", $imarepo[$x]); //quitar todos los .img
+ $imarepo[$x]=trim($imarepo[$x]);
+ $imarepo[$x] = str_replace(".img", "", $imarepo[$x]); //quitar todos los .img
+ $imarepo[$x]=trim($imarepo[$x]);
+ $nombreimagenes[]=$imarepo[$x].'.diff';
+ $tipo[]="F";
+ }elseif(ereg(".ant",$imarepo[$x]))
+ {
+ $imarepo[$x] = str_replace(".img", "", $imarepo[$x]); //quitar todos los .img
+ $imarepo[$x]=trim($imarepo[$x]);
+ $nombreimagenes[]=$imarepo[$x];
+ $tipo[]="B";
+ }else{
+ $imarepo[$x] = str_replace(".img", "", $imarepo[$x]); //quitar todos los .img
+ $imarepo[$x]=trim($imarepo[$x]);
+ $nombreimagenes[]=$imarepo[$x];
+ $tipo[]="F";
+ }
+ }
+ }else{
+ // Compruebo si es un directorio
+ $buscodir="/opt/opengnsys/images/".$imarepo[$x];
+ $buscopengnsys=$buscodir."/.marcimg";
+ if(is_dir($buscodir) && file_exists($buscopengnsys)){
+ $imarepo[$x]=trim($imarepo[$x]);
+ $nombreimagenes[]=$imarepo[$x];
+ $tipo[]="D";
+ }
+ }
+ } //Fin Llave For
+
+
+
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Tenemos los nombres en un Array[]
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// $sin_duplicados=array_unique($nombreimagenes);
+ $sin_duplicados=$nombreimagenes;
+ $contandotipo=0;
+ $contar=1;
+ foreach($sin_duplicados as $value) //imprimimos $sin_duplicados
+ { //Llave Forach
+
+
+ //Buscamos tamano de fichero
+ //Buscamos .torrent y .sum con lock
+ $gensum=$value.".img.sum.lock";
+ $gentor=$value.".img.lock";
+ if(ereg(".diff",$value))$gendif=$value.".img.diff";
+ // ########### Buscando si existe fichero imagen #####################
+ $buscando="find /opt/opengnsys/images/ -maxdepth 1 -name ".$gentor." -print";
+ $generando="Generando .torrent";
+ $bustor=exec($buscando);
+ if(ereg(".diff",$value))
+ {
+ $marcadif=1;
+ $value = str_replace(".diff", "", $value); //quitar todos los .diff y continuamos
+ $nombrefichero=trim($value);
+ $nombrefichero=$value.'.img.diff';
+ }
+ elseif(ereg(".ant",$value))
+ {
+ $nombrefichero=str_replace(".ant", "", $value);
+ $nombrefichero=$nombrefichero.".img.ant";$marcadif=0;
+ }else
+ {
+ $nombrefichero=$value.'.img';$marcadif=0;
+ }
+
+
+ if ($modov != 1){
+
+ // ####################################################################################
+ // ########## Si el nombre imagen existe en la Unidad Organizativa ####################
+ // ####################################################################################
+ //echo $value." - ".$idcentro."</br>";
+
+ $cmd->texto="SELECT * FROM imagenes WHERE nombreca='$value' ";//AND idcentro='$idcentro'";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(0); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $nombrecacentro=$rs->campos["nombreca"];
+ $nombrecaidcentro=$rs->campos["idcentro"];
+ }
+ if ($nombrecacentro != $value){$nombrecaidcentro=0;}
+ $rs->Cerrar();
+
+ if($nombrecaidcentro == $idcentro || $nombrecaidcentro==0)
+ { //Comienzo de Condicion si es nombrecaidcentro
+ //echo "Value - ".$value."/ - Id Centro - ".$idc." /Nombrecacentro - ".$nombrecacentro." /Base ID Centro ".$nombrecaidcentro."</br>";
+
+ // ####################################################################################
+ // ####################################################################################
+ // ########## Buscando si existe objeto imagen ########################################
+ // ########## Si el Nombre contiene .diff lo quitamos para buscar objeto imagen
+ if(ereg(".diff",$value)){ $valuediff=$value; $value = str_replace(".diff", "", $value);} //quitar todos los .diff y continuamos
+ // ####################################################################################
+
+ $encontradoobjetoimagen="";
+ $cmd->texto="SELECT * FROM imagenes WHERE nombreca='$value' AND idcentro='$idcentro'";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(0); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $encontradoobjetoimagen=$rs->campos["nombreca"];
+ }
+ if($encontradoobjetoimagen == $value){$encontradoobjetoimagen;}else{$encontradoobjetoimagen="";}
+ $rs->Cerrar();
+ // ####################################################################################
+
+ // ########################## VARIABLES FICHERO DELETE ################################
+ $nombredirectorio="/opt/opengnsys/images/".$value;
+ // ####################################################################################
+ if ($tipo[$contandotipo] == "D")
+ {
+ $nombrefichero=str_replace(".img", "", $nombrefichero);
+ $ficherodelete="../tmp/".$nombrefichero.".delete";
+ }else{
+ $ficherodelete="../tmp/".$nombrefichero.".delete";
+ }
+ // ########################## VARIABLES FICHERO DELETE ################################
+ // ####################################################################################
+ // ######## TAMAÑO DEL FICHERO Y DIRECTORIO ##########################
+ if (is_dir ($nombredirectorio) && $tipo[$contandotipo] == "D")
+ {
+ $tamanofich=exec("ls -lah ".$nombredirectorio." | awk 'NR==1 {print $2}'");
+ }
+ elseif (ereg(".ant",$nombrefichero))
+ {
+ $nombreficheroant=str_replace(".ant", "", $nombrefichero); //quitar todos los .ant y continuamos
+
+ $nombreficheroant=$nombreficheroant.".ant";
+ $tamanofich=exec("du -h --max-depth=1 /opt/opengnsys/images/$nombreficheroant");
+ $tamanofich=split("/",$tamanofich);//////////////////////////////////////////echo $nombrefichero."</br>";
+ }else{
+ $tamanofich=exec("du -h --max-depth=1 /opt/opengnsys/images/$nombrefichero");
+ $tamanofich=split("/",$tamanofich);//////////////////////////////////////////echo $nombrefichero."</br>";
+ }
+ // ######## TAMAÑO DEL FICHERO Y DIRECTORIO ##########################
+
+ $todo=".delete";
+ $ruta='touch%20/opt/opengnsys/images/'.$value.$todo;//////////////////////////////////////echo $value;//
+
+ echo '<TR>'.chr(13);
+
+ // ########## Nº ######################################################################
+ echo '<TD align=center>&nbsp;'.$contar.'&nbsp;</TD>'.chr(13);
+
+ // ########## Marcar ##################################################################
+
+ if ($bustor<>"")
+ {
+ echo '<TD align=center><font color=red><strong>&nbsp;'.$TbMsg[14].'</strong></TD>'.chr(13);
+ }
+ elseif (file_exists($ficherodelete))
+ {
+ echo '<TD align=center><font color=red><strong>&nbsp;'.$TbMsg[15].'</strong></TD>'.chr(13);}
+ else
+ {
+ echo '<TD align=center ><input type="checkbox" name="checkbox'.$contar.'" value="si"></TD>'.chr(13);
+ }
+
+ // ########## Tipo ####################################################################
+ if ($tipo[$contandotipo]=="D")
+ {
+ echo '<TD align=center ><font color=blue>'.$tipo[$contandotipo].'</TD>'.chr(13);
+ }
+ elseif ($tipo[$contandotipo]=="B")
+ {
+ echo '<TD align=center><font color=red>&nbsp;'.$tipo[$contandotipo].'&nbsp;</TD>'.chr(13);
+ }else{
+ echo '<TD align=center >'.$tipo[$contandotipo].'</TD>'.chr(13);
+ }
+
+ echo '<input type="hidden" name="nombre'.$contar.'" value='.$value.'></TD>'.chr(13);;
+ echo '<input type="hidden" name="contar" value='.$contar.'></TD>'.chr(13);;
+ echo '<input type="hidden" name="marcadif'.$contar.'" value='.$marcadif.'></TD>'.chr(13);;
+ echo '<input type="hidden" name="tipoimg'.$contar.'" value='.$tipo[$contandotipo].'></TD>'.chr(13);;
+
+ // ########## Nombre de Imagen ########################################################
+ if ($tipo[$contandotipo]=="D")
+ {
+ echo '<TD align=center><font color=blue>&nbsp;'.$value.'&nbsp;</TD>'.chr(13);
+ }
+ else
+ {
+
+ echo '<TD align=center>&nbsp;'.$value.'&nbsp;</TD>'.chr(13);
+ }
+
+ // ########## Tamaño de Imagen ########################################################
+ if (is_dir ($nombredirectorio) && $tipo[$contandotipo] == "D")
+ {echo '<TD align=center>&nbsp;'.$tamanofich.'</TD>'.chr(13);}
+ else{echo '<TD align=center>&nbsp;'.$tamanofich[0].'</TD>'.chr(13);}
+
+ // ########## Objeto Imagen ###########################################################
+ if($encontradoobjetoimagen<>"")
+ {
+ echo '<TD align=center ><input type="checkbox" name="checkboxobjeto'.$contar.'" value="si"></TD>'.chr(13);
+ }
+ elseif (ereg(".ant",$nombrefichero))
+ {
+ echo '<TD align=center><font color=red>&nbsp;------</strong></TD>'.chr(13);
+ }else{
+ echo '<TD align=center><font color=red>&nbsp;'.$TbMsg[25].'</strong></TD>'.chr(13);
+ }
+ // #####################################################################################
+ echo '</TR>'.chr(13);
+ $contar++;
+ $contandotipo++;
+
+ }else{$contandotipo++;}//Fin de Condicion si es nombrecaidcentro
+
+ }
+
+ else{
+
+
+ $nombrecaidcentro=$idrepodefault;
+ //echo $value." - ".$idcentro."</br>";
+ $cmd->texto="SELECT * FROM imagenes WHERE nombreca='$value' ";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(0); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $nombrecacentro=$rs->campos["nombreca"];
+ $nombrecaidcentro=$rs->campos["idcentro"];
+ }
+ $rs->Cerrar();
+
+ $cmd->texto="SELECT * FROM centros WHERE idcentro='$nombrecaidcentro' ";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(0); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $nombrecentro=$rs->campos["nombrecentro"];
+ }
+ $rs->Cerrar();
+
+
+ // ####################################################################################
+ // ####################################################################################
+ // ########## Buscando si existe objeto imagen ########################################
+ // ########## Si el Nombre contiene .diff lo quitamos para buscar objeto imagen
+ if(ereg(".diff",$value)){ $valuediff=$value; $value = str_replace(".diff", "", $value);} //quitar todos los .diff y continuamos
+ // ####################################################################################
+
+ $encontradoobjetoimagen="";
+ $cmd->texto="SELECT * FROM imagenes WHERE nombreca='$value'";// AND idcentro='$idcentro'";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(0); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $encontradoobjetoimagen=$rs->campos["nombreca"];
+ }
+ if($encontradoobjetoimagen == $value){$encontradoobjetoimagen;}else{$encontradoobjetoimagen="";}
+ $rs->Cerrar();
+ // ####################################################################################
+
+ // ########################## VARIABLES FICHERO DELETE ################################
+ $nombredirectorio="/opt/opengnsys/images/".$value;
+ // ####################################################################################
+ if ($tipo[$contandotipo] == "D")
+ {
+ $nombrefichero=str_replace(".img", "", $nombrefichero);
+ $ficherodelete="../tmp/".$nombrefichero.".delete";
+ }else{
+ $ficherodelete="../tmp/".$nombrefichero.".delete";
+ }
+ // ########################## VARIABLES FICHERO DELETE ################################
+
+ // ####################################################################################
+ // ######## TAMAÑO DEL FICHERO Y DIRECTORIO ##########################
+ if (is_dir ($nombredirectorio) && $tipo[$contandotipo] == "D")
+ {
+ $tamanofich=exec("ls -lah ".$nombredirectorio." | awk 'NR==1 {print $2}'");
+ }
+ elseif (ereg(".ant",$nombrefichero))
+ {
+ $nombreficheroant=str_replace(".ant", "", $nombrefichero); //quitar todos los .ant y continuamos
+
+ $nombreficheroant=$nombreficheroant.".ant";
+ $tamanofich=exec("du -h --max-depth=1 /opt/opengnsys/images/$nombreficheroant");
+ $tamanofich=split("/",$tamanofich);//////////////////////////////////////////echo $nombrefichero."</br>";
+ }else{
+ $tamanofich=exec("du -h --max-depth=1 /opt/opengnsys/images/$nombrefichero");
+ $tamanofich=split("/",$tamanofich);//////////////////////////////////////////echo $nombrefichero."</br>";
+ }
+ // ######## TAMAÑO DEL FICHERO Y DIRECTORIO ##########################
+
+ $todo=".delete";
+ $ruta='touch%20/opt/opengnsys/images/'.$value.$todo;//////////////////////////////////////echo $value;//
+
+ echo '<TR>'.chr(13);
+
+ // ########## Nº ######################################################################
+ echo '<TD align=center>&nbsp;'.$contar.'&nbsp;</TD>'.chr(13);
+
+ // ########## Marcar ##################################################################
+ if ($bustor<>"")
+ {
+ echo '<TD align=center><font color=red><strong>&nbsp;'.$TbMsg[14].'</strong></TD>'.chr(13);
+ }
+ elseif (file_exists($ficherodelete))
+ {
+ echo '<TD align=center><font color=red><strong>&nbsp;'.$TbMsg[15].'</strong></TD>'.chr(13);}
+ else
+ {
+ echo '<TD align=center ><input type="checkbox" name="checkbox'.$contar.'" value="si"></TD>'.chr(13);
+ }
+
+ // ########## Tipo ####################################################################
+ if ($tipo[$contandotipo]=="D")
+ {
+ echo '<TD align=center ><font color=blue>'.$tipo[$contandotipo].'</TD>'.chr(13);
+ }
+ elseif ($tipo[$contandotipo]=="B")
+ {
+ echo '<TD align=center><font color=red>&nbsp;'.$tipo[$contandotipo].'&nbsp;</TD>'.chr(13);
+ }else{
+ echo '<TD align=center >'.$tipo[$contandotipo].'</TD>'.chr(13);
+ }
+
+ echo '<input type="hidden" name="nombre'.$contar.'" value='.$value.'></TD>'.chr(13);;
+ echo '<input type="hidden" name="contar" value='.$contar.'></TD>'.chr(13);;
+ echo '<input type="hidden" name="marcadif'.$contar.'" value='.$marcadif.'></TD>'.chr(13);;
+ echo '<input type="hidden" name="tipoimg'.$contar.'" value='.$tipo[$contandotipo].'></TD>'.chr(13);;
+
+ // ########## Nombre de Imagen ########################################################
+ if ($tipo[$contandotipo]=="D")
+ {
+ echo '<TD align=center><font color=blue>&nbsp;'.$value.'&nbsp;</TD>'.chr(13);
+ }
+ else
+ {
+ echo '<TD align=center>&nbsp;'.$value.'&nbsp;</TD>'.chr(13);
+ }
+
+ // ########## Tamaño de Imagen ########################################################
+ if (is_dir ($nombredirectorio) && $tipo[$contandotipo] == "D")
+ {echo '<TD align=center>&nbsp;'.$tamanofich.'</TD>'.chr(13);}
+ else{echo '<TD align=center>&nbsp;'.$tamanofich[0].'</TD>'.chr(13);}
+
+ // ########## Objeto Imagen ###########################################################
+ if($encontradoobjetoimagen<>"")
+ {
+ echo '<TD align=center ><input type="checkbox" name="checkboxobjeto'.$contar.'" value="si"></TD>'.chr(13);
+ }
+ elseif (ereg(".ant",$nombrefichero))
+ {
+ echo '<TD align=center><font color=red>&nbsp;------</strong></TD>'.chr(13);
+ }else{
+ echo '<TD align=center><font color=red>&nbsp;'.$TbMsg[25].'</strong></TD>'.chr(13);
+ }
+ // #####################################################################################
+ // ########## Unidad Organizativa ######################################################
+
+ echo '<TD align=center >'.$nombrecentro.'</TD>'.chr(13);
+
+ // #####################################################################################
+ echo '</TR>'.chr(13);
+ $contar++;
+ $contandotipo++;
+
+// }else{$contandotipo++;}//Fin de Condicion si es nombrecaidcentro
+
+ }
+
+
+
+ } //Fin Llave Forach
+
+ ?>
+
+
+ <INPUT type="hidden" name="opcion" value="<? echo $opcion?>">
+ <INPUT type="hidden" name="idrepositorio" value="<? echo $idrepositorio?>">
+ <INPUT type="hidden" name="grupoid" value="<? echo $grupoid ?>">
+ <INPUT type="hidden" name="modov" value="<?php echo $modov; ?>">
+
+ </TABLE><BR/>
+ <TABLE align=center>
+ <TR>
+ <TD></TD>
+ <TD align=center></TD>
+ </TR>
+ <TR>
+ <TD></TD>
+ <TD align=center><A href=#><IMG border=0 src="../images/boton_confirmar_<? echo $idioma ?>.gif" onclick="javascript:confirmeliminar()" ></A></TD>
+ </TR>
+ </TABLE>
+</FORM>
+
+
+</BODY>
+</HTML>
+
+<?php }
+
+ ?> \ No newline at end of file
diff --git a/admin/WebConsole/comandos/IniciarSesion.php b/admin/WebConsole/comandos/IniciarSesion.php
index e9ffc80d..2f1cd7e7 100644
--- a/admin/WebConsole/comandos/IniciarSesion.php
+++ b/admin/WebConsole/comandos/IniciarSesion.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -15,6 +15,7 @@ include_once("../includes/comunes.php");
include_once("../includes/CreaComando.php");
include_once("../includes/HTMLSELECT.php");
include_once("../includes/TomaDato.php");
+include_once("../includes/pintaTablaConfiguraciones.php");
include_once("../idiomas/php/".$idioma."/comandos/iniciarsesion_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
//________________________________________________________________________________________________________
@@ -32,12 +33,12 @@ if (!$cmd)
<LINK rel="stylesheet" type="text/css" href="../estilos.css">
<SCRIPT language="javascript" src="./jscripts/IniciarSesion.js"></SCRIPT>
<SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
-<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/iniciarsesion_'.$idioma.'.js"></SCRIPT>'?>
-<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
+<?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/iniciarsesion_'.$idioma.'.js"></SCRIPT>'?>
+<?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
</HEAD>
<BODY>
-<?
+<?php
echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
//________________________________________________________________________________________________________
//
@@ -48,18 +49,9 @@ if (!$cmd)
<SPAN align=center class=subcabeceras><? echo $TbMsg[7] ?></SPAN>
</BR>
<form align=center name="fdatos">
- <TABLE id="tabla_conf" align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
- <TR>
- <TH align=center>&nbsp;&nbsp;</TH>
- <TH align=center>&nbsp;<? echo $TbMsg[8] ?>&nbsp;</TH>
- <TH align=center>&nbsp;<? echo $TbMsg[9] ?>&nbsp;</TH>
- </TR>
- <?
- echo tabla_configuraciones($cmd,$idambito);
- ?>
- </TABLE>
-</FORM>
-<?
+ <?php echo tablaConfiguracionesIniciarSesion($cmd,$idambito); ?>
+</form>
+<?php
//________________________________________________________________________________________________________
include_once("./includes/formularioacciones.php");
//________________________________________________________________________________________________________
@@ -71,7 +63,7 @@ if (!$cmd)
</SCRIPT>
</BODY>
</HTML>
-<?
+<?php
/**************************************************************************************************************************************************
Recupera los datos de un ordenador
Parametros:
@@ -107,16 +99,23 @@ ________________________________________________________________________________
function tabla_configuraciones($cmd,$idordenador){
global $idcentro;
$tablaHtml="";
- $cmd->texto="SELECT ordenadores_particiones.idnombreso,ordenadores_particiones.numpar,ordenadores_particiones.tamano,nombresos.nombreso,tipospar.tipopar,
- imagenes.descripcion as imagen,perfilessoft.descripcion as perfilsoft,sistemasficheros.descripcion as sistemafichero
- FROM ordenadores
- INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
- LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
- INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
- LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen
- LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
- LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero
- WHERE ordenadores.idordenador=".$idordenador." AND tipospar.clonable=1 ORDER BY ordenadores_particiones.numpar";
+ $cmd->texto="SELECT ordenadores_particiones.numpar,
+ ordenadores_particiones.tamano,
+ ordenadores_particiones.idnombreso, nombresos.nombreso,
+ tipospar.tipopar, imagenes.descripcion AS imagen,
+ perfilessoft.descripcion AS perfilsoft,
+ sistemasficheros.descripcion AS sistemafichero
+ FROM ordenadores
+ INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
+ LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
+ INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
+ LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen
+ LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
+ LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero
+ WHERE ordenadores.idordenador=".$idordenador."
+ AND tipospar.clonable=1
+ AND nombresos.nombreso!='DATA'
+ ORDER BY ordenadores_particiones.numpar";
$rs->Comando=&$cmd;
$rs=new Recordset;
@@ -137,3 +136,4 @@ function tabla_configuraciones($cmd,$idordenador){
return($tablaHtml);
}
?>
+
diff --git a/admin/WebConsole/comandos/InventarioSoftware.php b/admin/WebConsole/comandos/InventarioSoftware.php
index 7ec5b168..1aeea4bb 100644
--- a/admin/WebConsole/comandos/InventarioSoftware.php
+++ b/admin/WebConsole/comandos/InventarioSoftware.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -14,6 +14,7 @@ include_once("../includes/constantes.php");
include_once("../includes/comunes.php");
include_once("../includes/CreaComando.php");
include_once("../includes/HTMLSELECT.php");
+include_once("../includes/pintaTablaConfiguraciones.php");
include_once("../idiomas/php/".$idioma."/comandos/inventariosoftware_".$idioma.".php");
include_once("./includes/capturaacciones.php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
@@ -36,7 +37,7 @@ if (!$cmd)
<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
</HEAD>
<BODY>
-<?
+<?php
switch($ambito){
case $AMBITO_CENTROS :
$urlimg='../images/iconos/centros.gif';
@@ -65,19 +66,10 @@ switch($ambito){
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<P align=center>
<SPAN align=center class=subcabeceras><? echo $TbMsg[7] ?></SPAN>
- </BR>
- <TABLE id="tabla_conf" align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
- <TR>
- <TH align=center>&nbsp;&nbsp;</TH>
- <TH align=center>&nbsp;<? echo $TbMsg[8] ?>&nbsp;</TH>
- <TH align=center>&nbsp;<? echo $TbMsg[9] ?>&nbsp;</TH>
- </TR>
- <?
- echo tabla_configuraciones($cmd,$idambito);
- ?>
- </TABLE>
+ </p>
+ <?php echo tablaConfiguracionesIniciarSesion($cmd,$idambito); ?>
-<BR>
+ </BR>
<?
//________________________________________________________________________________________________________
include_once("./includes/formularioacciones.php");
diff --git a/admin/WebConsole/comandos/RestaurarImagen.php b/admin/WebConsole/comandos/RestaurarImagen.php
index cbd208ea..e1633415 100644
--- a/admin/WebConsole/comandos/RestaurarImagen.php
+++ b/admin/WebConsole/comandos/RestaurarImagen.php
@@ -16,10 +16,12 @@ include_once("../includes/CreaComando.php");
include_once("../includes/HTMLSELECT.php");
include_once("../includes/HTMLCTESELECT.php");
include_once("../includes/TomaDato.php");
-include_once("../includes/ConfiguracionesParticiones.php");
include_once("../includes/RecopilaIpesMacs.php");
+include_once("../includes/opcionesprotocolos.php");
include_once("../idiomas/php/".$idioma."/comandos/restaurarimagen_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
+include_once("../includes/ConfiguracionesParticiones.php");
+
//________________________________________________________________________________________________________
include_once("./includes/capturaacciones.php");
//________________________________________________________________________________________________________
@@ -61,11 +63,11 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
<SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
<SCRIPT language="javascript" src="../jscripts/constantes.js"></SCRIPT>
-<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
-<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/restaurarimagen_'.$idioma.'.js"></SCRIPT>'?>
+<?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
+<?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/restaurarimagen_'.$idioma.'.js"></SCRIPT>'?>
</HEAD>
<BODY>
-<?
+<?php
echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>';
//________________________________________________________________________________________________________
@@ -110,10 +112,10 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
</TR>
</TABLE>
</FORM>
-<?
+<?php
}
$sws=$fk_sysFi | $fk_tamano | $fk_nombreSO;
- pintaConfiguraciones($cmd,$idambito,$ambito,9,$sws,false);
+ pintaConfiguraciones($cmd,$idambito,$ambito,9,$sws,false,"pintaParticionesRestaurarImagen");
//________________________________________________________________________________________________________
include_once("./includes/formularioacciones.php");
//________________________________________________________________________________________________________
@@ -126,86 +128,15 @@ if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
</SCRIPT>
</BODY>
</HTML>
-<?
-//________________________________________________________________________________________________________
-//
-// Descripción:
-// (Esta función es llamada por pintaConfiguraciones que está incluida en ConfiguracionesParticiones.php)
-// Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador,
-// grupo de ordenadores o aula
-// Parametros:
-// $configuraciones: Cadena con las configuraciones de particioners del ámbito. El formato
-// sería una secuencia de cadenas del tipo "clave de configuración" separados por "@"
-// Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0
-// Devuelve:
-// El código html de la tabla
-//________________________________________________________________________________________________________
-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
- global $TbMsg;
- global $_SESSION;
- $colums=8;
- echo '<TR>';
- echo '<TH align=center>&nbsp;&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[8].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[24].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[31].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[27].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[22].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[10].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[11].'&nbsp;</TH>';
- echo '<TH align=center>&nbsp;'.$TbMsg[9].'&nbsp;</TH>';
- echo '</TR>';
-
- $auxCfg=split("@",$configuraciones); // Crea lista de particiones
- for($i=0;$i<sizeof($auxCfg);$i++){
- $auxKey=split(";",$auxCfg[$i]); // Toma clave de configuracion
- for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partición
- if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas
- $swcc=$tbKeys[$k]["clonable"];
- echo '<TR>'.chr(13);
- if($swcc){
- $icp=$cc."_".$tbKeys[$k]["numpar"]; // Identificador de la configuración-partición
- echo '<TD ><input type=radio idcfg="'.$cc.'" id="'.$icp.'" name="particion" value='.$tbKeys[$k]["numpar"].'></TD>'.chr(13);
- echo '<TD align=center>&nbsp;'.$tbKeys[$k]["numpar"].'&nbsp;</TD>'.chr(13);
- echo '<TD align=center>&nbsp;'.$tbKeys[$k]["tipopar"].'&nbsp;</TD>'.chr(13);
- echo '<TD align=center>&nbsp;'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
- echo'<TD align=center>&nbsp;'.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).'&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,$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="UNICAST=UNICAST-CACHE".chr(13);
- $metodos.="UNICAST-DIRECT=UNICAST-DIRECT".chr(13);
- $metodos.="MULTICAST " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-CACHE".chr(13);
- $metodos.="MULTICAST-DIRECT " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-DIRECT".chr(13);
- $metodos.="TORRENT " . torrent_syntax($cmd,$ambito,$idambito) . "=TORRENT-CACHE";
+<?php
- $TBmetodos["UNICAST-CACHE"]=1;
- $TBmetodos["UNICAST-DIRECT"]=2;
- $TBmetodos["MULTICAST-CACHE"]=3;
- $TBmetodos["MULTICAST-DIRECT"]=4;
- $TBmetodos["TORRENT-CACHE"]=5;
- $idxc=$_SESSION["protclonacion"];
- if ($idxc == "UNICAST") {
- $idxc = "UNICAST-DIRECT";
- }
- echo '<TD>'.HTMLCTESELECT($metodos,"protoclonacion_".$icp,"estilodesple","",$TBmetodos[$idxc],100).'</TD>';
- }
- echo '</TR>'.chr(13);
- }
- }
- }
- echo '<TR height=5><TD colspan='.$colums.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</TD></TR>';
-}
/*________________________________________________________________________________________________________
Crea la etiqueta html <SELECT> de los perfiles softwares
________________________________________________________________________________________________________*/
function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw,$idordenadores,$ambito)
{
+ global $IMAGENES_MONOLITICAS;
+
$SelectHtml="";
$cmd->texto="SELECT *,repositorios.ip as iprepositorio FROM imagenes
INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio";
@@ -214,7 +145,8 @@ function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw,$idordenado
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
+ $cmd->texto.=" AND imagenes.tipo=".$IMAGENES_MONOLITICAS;
$idordenador1 = explode(",",$idordenadores);
$idordenador=$idordenador1[0];
@@ -274,94 +206,6 @@ function HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$particion){
}
-function mcast_syntax($cmd,$ambito,$idambito)
-{
-//if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
-if ($ambito == 4)
-{
-$cmd->texto='SELECT pormul, ipmul, modomul, velmul, puestos FROM aulas
- WHERE aulas.idaula=' . $idambito ;
-}
-
-if ($ambito == 8)
-{
-$cmd->texto='SELECT pormul, ipmul, modomul, velmul, puestos FROM aulas
- JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula
- WHERE gruposordenadores.idgrupo=' . $idambito ;
-}
-
-if ($ambito == 16)
-{
-$cmd->texto='SELECT pormul, ipmul, modomul, velmul, puestos 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 = $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->Siguiente();
- $mcastsyntax.=$rs->campos["puestos"] . ':';
-
- $rs->Cerrar();
- }
- $mcastsyntax.="60";
-
- return($mcastsyntax);
-}
-
-
-function torrent_syntax($cmd,$ambito,$idambito)
-{
-if ($ambito == 4)
-{
- $cmd->texto='SELECT modp2p, timep2p FROM aulas
- WHERE aulas.idaula=' . $idambito ;
-}
-if ($ambito == 8)
-{
- $cmd->texto='SELECT modp2p, timep2p FROM aulas
- JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula
- WHERE gruposordenadores.idgrupo=' . $idambito ;
-}
-if ($ambito == 16)
-{
- $cmd->texto='SELECT modp2p, 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();
- $torrentsyntax=$rs->campos["modp2p"] . ':';
- $rs->Siguiente();
- $torrentsyntax.=$rs->campos["timep2p"];
- $rs->Siguiente();
- $rs->Cerrar();
-}
-return($torrentsyntax);
-}
?>
diff --git a/admin/WebConsole/comandos/RestaurarImagenBasica.php b/admin/WebConsole/comandos/RestaurarImagenBasica.php
new file mode 100644
index 00000000..e08a7211
--- /dev/null
+++ b/admin/WebConsole/comandos/RestaurarImagenBasica.php
@@ -0,0 +1,228 @@
+<?
+// ********************************************************************************************************
+// Aplicaci�n WEB: ogAdmWebCon
+// Autor: Jos� Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creaci�n: A�o 2012
+// Fecha �ltima modificaci�n: Noviembre-2012
+// Nombre del fichero: RestaurarImagenBasica.php
+// Descripci�n :
+// Implementaci�n del comando "RestaurarImagenB�sica"
+// ********************************************************************************************************
+include_once("../includes/ctrlacc.php");
+include_once("../clases/AdoPhp.php");
+include_once("../includes/constantes.php");
+include_once("../includes/comunes.php");
+include_once("../includes/CreaComando.php");
+include_once("../includes/HTMLSELECT.php");
+include_once("../includes/HTMLCTESELECT.php");
+include_once("../includes/TomaDato.php");
+include_once("../includes/RecopilaIpesMacs.php");
+include_once("../includes/opcionesprotocolos.php");
+include_once("../idiomas/php/".$idioma."/comandos/restaurarimagenbasica_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
+include_once("./includes/capturaacciones.php");
+include_once("../includes/ConfiguracionesParticiones.php");
+
+//________________________________________________________________________________________________________
+//
+$cmd=CreaComando($cadenaconexion);
+if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexi�n con servidor B.D.
+//________________________________________________________________________________________________________
+//
+//
+// Captura par�metros
+//________________________________________________________________________________________________________
+//
+
+$ambito=0;
+$idambito=0;
+
+// Agrupamiento por defecto
+
+$fk_sysFi=0;
+$fk_tamano=0;
+$fk_nombreSO=0;
+
+if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
+if (isset($_GET["ambito"])) $ambito=$_GET["ambito"];
+
+if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
+if (isset($_POST["ambito"])) $ambito=$_POST["ambito"];
+
+if (isset($_POST["fk_sysFi"])) $fk_sysFi=$_POST["fk_sysFi"];
+if (isset($_POST["fk_tamano"])) $fk_tamano=$_POST["fk_tamano"];
+if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
+
+//________________________________________________________________________________________________________
+//
+?>
+<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">
+<STYLE TYPE="text/css"></STYLE>
+<SCRIPT language="javascript" src="./jscripts/RestaurarImagenBasica.js"></SCRIPT>
+<SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
+<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
+<SCRIPT language="javascript" src="../jscripts/constantes.js"></SCRIPT>
+<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
+<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/restaurarimagenbasica_'.$idioma.'.js"></SCRIPT>'?>
+</HEAD>
+<BODY>
+<?
+
+//________________________________________________________________________________________________________
+//
+//
+// Cabecera
+//________________________________________________________________________________________________________
+//
+//
+ echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>'; // T�tulo
+ include_once("./includes/FiltradoAmbito.php");
+//________________________________________________________________________________________________________
+//
+
+
+
+ echo '<P align=center><SPAN align=center class=subcabeceras>'.$TbMsg[19].'</SPAN></P>';
+ if($ambito!=$AMBITO_ORDENADORES){
+ $cadenaid="";
+ $cadenaip="";
+ $cadenamac="";
+ RecopilaIpesMacs($cmd,$ambito,$idambito);
+ ?>
+ <FORM action="RestaurarImagenBasica.php" name="fdatos" method="POST">
+ <INPUT type="hidden" name="idambito" value="<? echo $idambito?>">
+ <INPUT type="hidden" name="ambito" value="<? echo $ambito?>">
+ <INPUT type="hidden" name="cadenaid" value="<? echo $cadenaid?>">
+ <TABLE class="tabla_busquedas" align=center border=0 cellPadding=0 cellSpacing=0>
+ <TR>
+ <TH height=15 align="center" colspan=14><? echo $TbMsg[18]?></TH>
+ </TR>
+ <TR>
+ <TD align=right><? echo $TbMsg[30]?></TD>
+ <TD align=center><INPUT onclick="document.fdatos.submit()" type="checkbox" value="<? echo $msk_sysFi?>" name="fk_sysFi" <? if($fk_sysFi==$msk_sysFi) echo " checked "?>></TD>
+ <TD width="20" align=center>&nbsp;</TD>
+
+ <TD align=right><? echo $TbMsg[32]?></TD>
+ <TD align=center><INPUT onclick="document.fdatos.submit()" type="checkbox" value="<? echo $msk_tamano?>" name="fk_tamano" <? if($fk_tamano==$msk_tamano) echo " checked "?>></TD>
+ <TD width="20" align=center>&nbsp;</TD>
+
+ <TD align=right><? echo $TbMsg[31]?></TD>
+ <TD align=center><INPUT onclick="document.fdatos.submit()" type="checkbox" value="<? echo $msk_nombreSO?>" name="fk_nombreSO" <? if($fk_nombreSO==$msk_nombreSO) echo " checked "?>></TD>
+ <TD width="20" align=center>&nbsp;</TD>
+ </TR>
+ <TR>
+ <TD height=2 style="BORDER-TOP:#999999 1px solid;" align="center" colspan=14>&nbsp;</TD>
+ </TR>
+ </TABLE>
+ </FORM>
+<?
+ }
+ $sws=$fk_sysFi | $fk_tamano | $fk_nombreSO;
+ pintaConfiguraciones($cmd,$idambito,$ambito,9,$sws,true,"pintaParticionesRestaurarImagenSincronizacion1");
+ echo "<br>";
+ opcionesAdicionales();
+//________________________________________________________________________________________________________
+//
+ include_once("./includes/formularioacciones.php");
+ include_once("./includes/opcionesacciones.php");
+//________________________________________________________________________________________________________
+//
+?>
+<SCRIPT language="javascript">
+ Sondeo();
+</SCRIPT>
+</BODY>
+</HTML>
+<?
+
+/*________________________________________________________________________________________________________
+
+ Crea la etiqueta html <SELECT> de las im�genes
+________________________________________________________________________________________________________*/
+function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw,$idordenadores,$ambito)
+{
+
+ global $IMAGENES_BASICAS;
+ global $AMBITO_ORDENADORES;
+
+ $SelectHtml="";
+ $cmd->texto="SELECT imagenes.*,repositorios.ip as iprepositorio,repositorios.nombrerepositorio
+ FROM imagenes
+ INNER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio";
+
+ if($sw) // Im�genes con el mismo tipo de partici�n
+ $cmd->texto.= " WHERE imagenes.codpar=".$codpar;
+ else
+ $cmd->texto.= " WHERE imagenes.codpar<>".$codpar;
+
+ $cmd->texto.=" AND imagenes.tipo=".$IMAGENES_BASICAS."
+ AND imagenes.numpar>0
+ AND imagenes.codpar>0
+ AND imagenes.idrepositorio>0";
+ //AND imagenes.idperfilsoft>0"; // La imagene debe existir y estar creada
+
+ $idordenador1 = explode(",",$idordenadores);
+ $idordenador=$idordenador1[0];
+ if ($ambito == $AMBITO_ORDENADORES)
+ $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 .")";
+
+ $cmd->texto.=" ORDER BY imagenes.descripcion";
+ //echo $cmd->texto;
+
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if($sw) $des=1; else $des=0;
+ $SelectHtml.= '<SELECT class="formulariodatos" id="despleimagen_'.$icp.'_'.$des.'" style="width:95%">';
+ $SelectHtml.= ' <OPTION value="0"></OPTION>';
+
+ if ($rs->Abrir()){
+ $rs->Primero();
+ while (!$rs->EOF){
+ $SelectHtml.='<OPTION
+ value="'.$rs->campos["idimagen"]."_".$rs->campos["nombreca"]."_".$rs->campos["iprepositorio"]."_".$rs->campos["idperfilsoft"]."_".$rs->campos["ruta"].'"';
+ if($idimagen==$rs->campos["idimagen"]) $SelectHtml.=" selected ";
+ $SelectHtml.='>';
+ $SelectHtml.= $rs->campos["descripcion"].'</OPTION>';
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+ }
+ $SelectHtml.= '</SELECT>';
+ return($SelectHtml);
+}
+/*----------------------------------------------------------------------------------------------
+ Dibuja una tabla con las opciones generales
+----------------------------------------------------------------------------------------------*/
+function opcionesAdicionales()
+{
+ global $TbMsg;
+
+ $tablaHtml='<table style="display:none" width="95%" align=center border=0 cellPadding=0 cellSpacing=0 class="tabla_accesos">';
+ $tablaHtml.='<tr><th colspan=8 align=center><b>&nbsp;'.$TbMsg[11].'&nbsp;</b></th></tr>';
+ $tablaHtml.='<tr id="trOpc">
+ <td align=right>'.$TbMsg[35].'</td>
+ <td><input type=checkbox name="bpi"></td>'; // Borrar imagen previamente del servidor
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[36].'</td>
+ <td><input type=checkbox name="cpc"></td>'; // Copiar adem�s la imagen a la cach�
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[37].'</td>
+ <td><input type=checkbox name="bpc"></td>'; // Borrar imagen de la cach� previamente antes de copiarla
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[38].'</td>
+ <td><input type=checkbox name="nba"></td>'; // No borrar archivos en destino
+ $tablaHtml.='</tr>';
+ $tablaHtml.=' </table>';
+ echo $tablaHtml;
+}
+
+?>
+
diff --git a/admin/WebConsole/comandos/RestaurarSoftIncremental.php b/admin/WebConsole/comandos/RestaurarSoftIncremental.php
new file mode 100644
index 00000000..b030ce2b
--- /dev/null
+++ b/admin/WebConsole/comandos/RestaurarSoftIncremental.php
@@ -0,0 +1,225 @@
+<?
+// ********************************************************************************************************
+// Aplicaci�n WEB: ogAdmWebCon
+// Autor: Jos� Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creaci�n: A�o 2012
+// Fecha �ltima modificaci�n: Noviembre-2012
+// Nombre del fichero: RestaurarSoftIncremental.php
+// Descripci�n :
+// Implementaci�n del comando "RestaurarSoftIncremental"
+// ********************************************************************************************************
+include_once("../includes/ctrlacc.php");
+include_once("../clases/AdoPhp.php");
+include_once("../includes/constantes.php");
+include_once("../includes/comunes.php");
+include_once("../includes/CreaComando.php");
+include_once("../includes/HTMLSELECT.php");
+include_once("../includes/HTMLCTESELECT.php");
+include_once("../includes/TomaDato.php");
+include_once("../includes/RecopilaIpesMacs.php");
+include_once("../includes/opcionesprotocolos.php");
+include_once("../idiomas/php/".$idioma."/comandos/restaurarsoftincremental_".$idioma.".php");
+include_once("../idiomas/php/".$idioma."/comandos/opcionesacciones_".$idioma.".php");
+include_once("./includes/capturaacciones.php");
+include_once("../includes/ConfiguracionesParticiones.php");
+
+//________________________________________________________________________________________________________
+//
+$cmd=CreaComando($cadenaconexion);
+if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexi�n con servidor B.D.
+//________________________________________________________________________________________________________
+//
+//
+// Captura par�metros
+//________________________________________________________________________________________________________
+//
+
+$ambito=0;
+$idambito=0;
+
+// Agrupamiento por defecto
+
+$fk_sysFi=0;
+$fk_tamano=0;
+$fk_nombreSO=0;
+
+if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
+if (isset($_GET["ambito"])) $ambito=$_GET["ambito"];
+
+if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
+if (isset($_POST["ambito"])) $ambito=$_POST["ambito"];
+
+if (isset($_POST["fk_sysFi"])) $fk_sysFi=$_POST["fk_sysFi"];
+if (isset($_POST["fk_tamano"])) $fk_tamano=$_POST["fk_tamano"];
+if (isset($_POST["fk_nombreSO"])) $fk_nombreSO=$_POST["fk_nombreSO"];
+
+//________________________________________________________________________________________________________
+//
+?>
+<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">
+<STYLE TYPE="text/css"></STYLE>
+<SCRIPT language="javascript" src="./jscripts/RestaurarSoftIncremental.js"></SCRIPT>
+<SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
+<SCRIPT language="javascript" src="./jscripts/comunescomandos.js"></SCRIPT>
+<SCRIPT language="javascript" src="../jscripts/constantes.js"></SCRIPT>
+<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
+<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comandos/restaurarsoftincremental_'.$idioma.'.js"></SCRIPT>'?>
+</HEAD>
+<BODY>
+<?
+
+//________________________________________________________________________________________________________
+//
+//
+// Cabecera
+//________________________________________________________________________________________________________
+//
+//
+ echo '<p align=center><span class=cabeceras>'.$TbMsg[5].'&nbsp;</span><br>'; // T�tulo
+ include_once("./includes/FiltradoAmbito.php");
+//________________________________________________________________________________________________________
+//
+ echo '<P align=center><SPAN align=center class=subcabeceras>'.$TbMsg[19].'</SPAN></P>';
+ if($ambito!=$AMBITO_ORDENADORES){
+ $cadenaid="";
+ $cadenaip="";
+ $cadenamac="";
+ RecopilaIpesMacs($cmd,$ambito,$idambito);
+ ?>
+ <FORM action="RestaurarSoftIncremental.php" name="fdatos" method="POST">
+ <INPUT type="hidden" name="idambito" value="<? echo $idambito?>">
+ <INPUT type="hidden" name="ambito" value="<? echo $ambito?>">
+ <INPUT type="hidden" name="cadenaid" value="<? echo $cadenaid?>">
+ <TABLE class="tabla_busquedas" align=center border=0 cellPadding=0 cellSpacing=0>
+ <TR>
+ <TH height=15 align="center" colspan=14><? echo $TbMsg[18]?></TH>
+ </TR>
+ <TR>
+ <TD align=right><? echo $TbMsg[30]?></TD>
+ <TD align=center><INPUT onclick="document.fdatos.submit()" type="checkbox" value="<? echo $msk_sysFi?>" name="fk_sysFi" <? if($fk_sysFi==$msk_sysFi) echo " checked "?>></TD>
+ <TD width="20" align=center>&nbsp;</TD>
+
+ <TD align=right><? echo $TbMsg[32]?></TD>
+ <TD align=center><INPUT onclick="document.fdatos.submit()" type="checkbox" value="<? echo $msk_tamano?>" name="fk_tamano" <? if($fk_tamano==$msk_tamano) echo " checked "?>></TD>
+ <TD width="20" align=center>&nbsp;</TD>
+
+ <TD align=right><? echo $TbMsg[31]?></TD>
+ <TD align=center><INPUT onclick="document.fdatos.submit()" type="checkbox" value="<? echo $msk_nombreSO?>" name="fk_nombreSO" <? if($fk_nombreSO==$msk_nombreSO) echo " checked "?>></TD>
+ <TD width="20" align=center>&nbsp;</TD>
+ </TR>
+ <TR>
+ <TD height=2 style="BORDER-TOP:#999999 1px solid;" align="center" colspan=14>&nbsp;</TD>
+ </TR>
+ </TABLE>
+ </FORM>
+<?
+ }
+ $sws=$fk_sysFi | $fk_tamano | $fk_nombreSO;
+ pintaConfiguraciones($cmd,$idambito,$ambito,9,$sws,true,"pintaParticionesRestaurarImagenSincronizacion1");
+ echo "<br>";
+ opcionesAdicionales();
+//________________________________________________________________________________________________________
+//
+ include_once("./includes/formularioacciones.php");
+ include_once("./includes/opcionesacciones.php");
+//________________________________________________________________________________________________________
+//
+?>
+<SCRIPT language="javascript">
+ Sondeo();
+</SCRIPT>
+</BODY>
+</HTML>
+<?
+
+/*________________________________________________________________________________________________________
+
+ Crea la etiqueta html <SELECT> de las im�genes
+________________________________________________________________________________________________________*/
+function HTMLSELECT_imagenes($cmd,$idimagen,$numpar,$codpar,$icp,$sw,$idordenadores,$ambito)
+{
+ global $IMAGENES_INCREMENTALES;
+ global $AMBITO_ORDENADORES;
+
+ $SelectHtml="";
+ $cmd->texto="SELECT imagesbas.*,repositorios.ip as iprepositorio,repositorios.nombrerepositorio,
+ imagenes.idperfilsoft as idperfilsoftinc,imagenes.idimagen as idimageninc,
+ imagenes.nombreca as nombrecainc,imagenes.descripcion as descripcioninc
+ FROM imagenes
+ INNER JOIN imagenes as imagesbas on imagesbas.idimagen = imagenes.imagenid
+ INNER JOIN repositorios ON repositorios.idrepositorio=imagesbas.idrepositorio";
+ if($sw) // Im�genes con el mismo tipo de partici�n
+ $cmd->texto.= " WHERE imagesbas.codpar=".$codpar;
+ else
+ $cmd->texto.= " WHERE imagesbas.codpar<>".$codpar;
+
+ $cmd->texto.=" AND imagenes.tipo=".$IMAGENES_INCREMENTALES;
+// AND imagenes.idperfilsoft>=0"; // La imagene debe existir y estar creada
+
+ $idordenador1 = explode(",",$idordenadores);
+ $idordenador=$idordenador1[0];
+ if ($ambito == $AMBITO_ORDENADORES)
+ $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;
+ $SelectHtml.= '<SELECT class="formulariodatos" id="despleimagen_'.$icp.'_'.$des.'" style="width:95%">';
+ $SelectHtml.= ' <OPTION value="0"></OPTION>';
+
+ if ($rs->Abrir()){
+ $rs->Primero();
+ while (!$rs->EOF){
+ $SelectHtml.='<OPTION
+ value="'.$rs->campos["idimagen"]."_".$rs->campos["nombreca"]."_".$rs->campos["iprepositorio"]."_".$rs->campos["idperfilsoftinc"]."_".$rs->campos["idimageninc"]."_".$rs->campos["nombrecainc"]."_".$rs->campos["ruta"].'"';
+ if($idimagen==$rs->campos["idimagen"]) $SelectHtml.=" selected ";
+ $SelectHtml.='>';
+ $SelectHtml.= $rs->campos["descripcioninc"].'</OPTION>';
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+ }
+ $SelectHtml.= '</SELECT>';
+ return($SelectHtml);
+}
+/*----------------------------------------------------------------------------------------------
+ Dibuja una tabla con las opciones generales
+----------------------------------------------------------------------------------------------*/
+function opcionesAdicionales()
+{
+ global $TbMsg;
+
+ $tablaHtml='<table style="display:none" width="95%" align=center border=0 cellPadding=0 cellSpacing=0 class="tabla_accesos">';
+ $tablaHtml.='<tr><th colspan=8 align=center><b>&nbsp;'.$TbMsg[11].'&nbsp;</b></th></tr>';
+ $tablaHtml.='<tr id="trOpc">
+ <td align=right>'.$TbMsg[35].'</td>
+ <td><input type=checkbox name="bpi"></td>'; // Borrar imagen previamente del servidor
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[36].'</td>
+ <td><input type=checkbox name="cpc"></td>'; // Copiar adem�s la imagen a la cach�
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[37].'</td>
+ <td><input type=checkbox name="bpc"></td>'; // Borrar imagen de la cach� previamente antes de copiarla
+ $tablaHtml.='
+ <td align=right>'.$TbMsg[39].'</td>
+ <td><input type=checkbox name="nba"></td>'; // No borrar archivos en destino
+ $tablaHtml.='</tr>';
+ $tablaHtml.=' </table>';
+ echo $tablaHtml;
+}
+
+
+?>
+
+
+
diff --git a/admin/WebConsole/comandos/gestores/gestor_Comandos.php b/admin/WebConsole/comandos/gestores/gestor_Comandos.php
index 07011d17..cd01a728 100644
--- a/admin/WebConsole/comandos/gestores/gestor_Comandos.php
+++ b/admin/WebConsole/comandos/gestores/gestor_Comandos.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -60,10 +60,13 @@ $funcion="nfn=".$funcion.chr(13); // Nombre de la función que procesa el comand
$aplicacion=""; // Ámbito de aplicación (cadena de ipes separadas por ";" y de identificadores de ordenadores por ","
$acciones=""; // Cadena de identificadores de acciones separadas por ";" para seguimiento
+
+
$atributos=str_replace('@',chr(13),$atributos); // Reemplaza caracters
$atributos=str_replace('#',chr(10),$atributos);
$atributos=str_replace('$',chr(9),$atributos);
+
//__________________________________________________________________
?>
<HTML>
@@ -72,7 +75,7 @@ $atributos=str_replace('$',chr(9),$atributos);
<BODY>
<SCRIPT language="javascript" src="../jscripts/comunescomandos.js"></SCRIPT>
<? echo '<SCRIPT language="javascript" src="../../idiomas/javascripts/'.$idioma.'/comandos/comunescomandos_'.$idioma.'.js"></SCRIPT>'?>
-<?
+<?php
/* Recopila identificadore ,ipes y macs para envío de comandos */
$cadenaid="";
@@ -117,6 +120,7 @@ if(!empty($filtro)){ // Ambito restringido a un subconjuto de ordenadores
$cmd->ParamSetValor("@restrambito",$filtro);
}
$resul=true;
+
/*--------------------------------------------------------------------------------------------------------------------
Switch de ejecución inmediata y de seguimiento
--------------------------------------------------------------------------------------------------------------------*/
@@ -142,7 +146,6 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){
$cmd->ParamSetValor("@idcentro",$idcentro);
$auxID=split(",",$cadenaid);
$auxIP=split(";",$cadenaip);
- $vez=0;
for ($i=0;$i<sizeof($auxID);$i++){
$cmd->ParamSetValor("@idordenador",$auxID[$i]);
$cmd->ParamSetValor("@ip",$auxIP[$i]);
@@ -152,12 +155,8 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){
@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idcentro)";
$resul=$cmd->Ejecutar();
//echo "<br>".$cmd->texto;
- if(empty($vez)){
- $idaccion=$cmd->Autonumerico();
- $acciones=chr(13)."ids=".$idaccion.chr(13); // Para seguimiento
- }
- $vez++;
}
+ $acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento
}
if (!$resul){
echo '<SCRIPT language="javascript">';
@@ -171,7 +170,7 @@ if($sw_ejya=='on' || $sw_ejprg=="on" ){
if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
$parametros.=$aplicacion;
$parametros.=$acciones;
- //echo $parametros;
+ //die($parametros);
$resul=$shidra->envia_comando($parametros);
if($resul)
$trama=$shidra->recibe_respuesta();
@@ -225,11 +224,13 @@ if($sw_mkprocedimiento=='on' || $sw_mktarea=='on'){
$cmd->ParamSetValor("@ordprocedimiento",$ordprocedimiento);
$parametros=$funcion.$atributos;
$cmd->ParamSetValor("@parametros",$parametros);
- $cmd->texto="INSERT INTO procedimientos_acciones(idprocedimiento,orden,idcomando,parametros) VALUES (@idprocedimiento,@ordprocedimiento,@idcomando,@parametros)";
+ $cmd->texto="INSERT INTO procedimientos_acciones(idprocedimiento,orden,idcomando,parametros)
+ VALUES (@idprocedimiento,@ordprocedimiento,@idcomando,@parametros)";
$resul=$cmd->Ejecutar();
if($sw_mktarea=='on' && $idprocedimiento!=$idprocedimientotarea){ // Si es tarea se graba para su procedimiento independiente aunque los parametros sean los mismos
$cmd->ParamSetValor("@idprocedimiento",$idprocedimientotarea);
- $cmd->texto="INSERT INTO procedimientos_acciones(idprocedimiento,orden,idcomando,parametros) VALUES (@idprocedimiento,@ordprocedimiento,@idcomando,@parametros)";
+ $cmd->texto="INSERT INTO procedimientos_acciones(idprocedimiento,orden,idcomando,parametros)
+ VALUES (@idprocedimiento,@ordprocedimiento,@idcomando,@parametros)";
$resul=$cmd->Ejecutar();
}
}
@@ -295,3 +296,4 @@ if ($resul){
?>
</BODY>
</HTML>
+
diff --git a/admin/WebConsole/comandos/includes/FiltradoAmbito.php b/admin/WebConsole/comandos/includes/FiltradoAmbito.php
index 8c357efe..62b12952 100644
--- a/admin/WebConsole/comandos/includes/FiltradoAmbito.php
+++ b/admin/WebConsole/comandos/includes/FiltradoAmbito.php
@@ -371,6 +371,7 @@ function filtrado()
{
var ipes="";
for(j=1;j<=cid;j++){
+
var objTB=document.getElementById("tbo-"+j);
if(objTB){
var imagenes = objTB.getElementsByTagName('img');
diff --git a/admin/WebConsole/comandos/includes/opcionesacciones.php b/admin/WebConsole/comandos/includes/opcionesacciones.php
index c4c72d2b..601403b0 100644
--- a/admin/WebConsole/comandos/includes/opcionesacciones.php
+++ b/admin/WebConsole/comandos/includes/opcionesacciones.php
@@ -31,7 +31,7 @@
</TR>
<TR>
<TD>&nbsp; </TD>
- <TD><INPUT checked name=sw_seguimiento type=radio value=0></TD><TD><? echo $TbMsgAux[3] ?>&nbsp;</TD>
+ <TD><INPUT checked name=sw_seguimiento type=radio value=0></TD><TD><? echo $TbMsgAux[3] ?>&nbsp;</TD>
</TR>
<!-------------------------------------------------------------------------------------------------------------------------------->
<TR HEIGHT=5><TD colspan=4><HR></TD></TR>
diff --git a/admin/WebConsole/comandos/jscripts/Arrancar.js b/admin/WebConsole/comandos/jscripts/Arrancar.js
index fde33943..b9265b49 100644
--- a/admin/WebConsole/comandos/jscripts/Arrancar.js
+++ b/admin/WebConsole/comandos/jscripts/Arrancar.js
@@ -7,9 +7,17 @@
// Descripción :
// Este fichero implementa las funciones javascript del fichero Arrancar.php (Comandos)
// *************************************************************************************************************************************************
- function confirmar(){
+ function confirmar()
+ {
+ var RC='@';
if (comprobar_datos()){
filtrado();
+ var obRadB=document.getElementById('broadcast');
+ if(obRadB.checked)
+ document.fdatosejecucion.atributos.value="mar=1"+RC; // Arranque Broadcast
+ else
+ document.fdatosejecucion.atributos.value="mar=2"+RC; // Arranque unicast
+
document.fdatosejecucion.submit();
}
}
diff --git a/admin/WebConsole/comandos/jscripts/Configurar.js b/admin/WebConsole/comandos/jscripts/Configurar.js
index 2d0629b4..bcb9e0ff 100644
--- a/admin/WebConsole/comandos/jscripts/Configurar.js
+++ b/admin/WebConsole/comandos/jscripts/Configurar.js
@@ -8,7 +8,9 @@
// Este fichero implementa las funciones javascript del fichero Configurar.php (Comandos)
// *************************************************************************************************************************************************
-var atributos; // Variable global
+var atributos=""; // Variable global
+var swc=false; // Switch para detectar cache
+var swe=false; // Switch para detectar partición extendida
//________________________________________________________________________________________________________
//
@@ -18,13 +20,20 @@ var atributos; // Variable global
// o: Objeto checkbox que invoca la función
//________________________________________________________________________________________________________
-function eliminaParticion(icp,o)
+function eliminaParticion(o,icp)
{
var res=confirm(TbMsg[4]); // Pide confirmación
if(!res){
o.checked=false;
return;
}
+
+// Toma desplegable de tipo de partición
+ var desplepar=o.parentNode.nextSibling.nextSibling.childNodes[0];
+ var tipar=tomavalorDesple(desplepar); // Partición
+ if(tipar=="CACHE") swc=false; // Si es la caché se pone a false su switch
+ if(tipar=="EXTENDED") swe=false; // Si es la EXTENDED se pone a false su switch
+
var tbCfg = document.getElementById("tabla_conf"); // Recupera objeto <TABLE>
var trCfg = document.getElementById("TR_"+icp); // Recupera <TR> de la fila a eliminar
var tbodyObj=tbCfg.firstChild; // Recupera hijo <TBODY> del objeto <TABLE>
@@ -50,7 +59,7 @@ function addParticion(objImg,cc)
nwTR.innerHTML=patron.innerHTML;
/* Actualiza objeto checkbox nuevo para que actue como los demás */
var nwCHK = document.getElementById("CHK_patron"); // Recupera reciente chekcbox
- var fclbk="eliminaParticion('"+icp+"');";
+ var fclbk="eliminaParticion(this,'"+icp+"');";
nwCHK.setAttribute("onclick",fclbk);
nwCHK.removeAttribute("id");
/* Incrementa para siguiente identificador de nodo */
@@ -72,10 +81,6 @@ function addParticion(objImg,cc)
function Confirmar(cc)
{
if(comprobarDatos(cc)){
- var RC="@";
- var disco=1; // Siempre disco 1
- atributos+=RC+"dsk="+disco+RC; // Le añade a la variable global el parámetro disco
- //alert(atributos)
if(document.fdatosejecucion.ambito.value!=AMBITO_ORDENADORES){
var tbOrd= document.getElementById("tbOrd_"+cc); // Recupera tabla de ordenadores de la configuración
var idordenadores=tbOrd.getAttribute('value'); // Toma identificadores de los ordenadores
@@ -86,7 +91,8 @@ function Confirmar(cc)
}
}
document.fdatosejecucion.atributos.value=atributos;
- filtrado();
+ //alert(atributos)
+ //filtrado();
document.fdatosejecucion.submit();
}
}
@@ -106,48 +112,123 @@ function comprobarDatos(cc)
var itama=4;
var iope=6;
- var SL="#";
- var TB="$";
-
+ var SL="%";
+ var TB="*";
+ var maxpar=0;
var tbpar=new Array(); // Para control de particiones duplicadas
- atributos="cfg="; // Inicializa variable global de parámetros del comando
-
+ var tbparam=new Array(); // Para control de configuración
+ var npar; // Partición en formato integer
+ var tch=0; // Tamaño de la caché
+
var trCfg = document.getElementById("TR_"+cc); // Recupera primer <TR> de la configuración
trCfg=trCfg.nextSibling; // Primera fila de particiones
while(trCfg.id!="TRIMG_"+cc){
+
+ var tama=trCfg.childNodes[itama].childNodes[0].value; // Tamaño de partición
+
var par=tomavalorDesple(trCfg.childNodes[ipar].childNodes[0]); // Partición
- if(par==0){
+ npar=parseInt(par);
+ if(maxpar<npar) maxpar=npar; // Guarda partición de mayor orden
+ if (npar==4){
+ swc=true; // Se especifica partición caché
+ tch=tama;
+ }
+
+ if(npar==0){
alert(TbMsg[1]);
trCfg.childNodes[ipar].childNodes[0].focus();
return(false);
}
- if(tbpar[par]==1){ // Existe ya una partición con ese número
+
+ if(tbpar[npar]==1){ // Existe ya una partición con ese número
alert(TbMsg[0]);
trCfg.childNodes[ipar].childNodes[0].focus();
return(false);
}
- tbpar[par]=1;
+
+ tbpar[npar]=1;
var codpar=tomavalorDesple(trCfg.childNodes[icodpar].childNodes[0]); // Tipo de partición
- if(codpar==0){
+ if(codpar==""){
alert(TbMsg[2]);
trCfg.childNodes[icodpar].childNodes[0].focus();
return(false);
}
+ if(codpar=="EXTENDED") swe=true;
+ if(codpar=="CACHE" && npar!=4){
+ alert(TbMsg[6]);
+ trCfg.childNodes[icodpar].childNodes[0].focus();
+ return(false);
+ }
+
+ var ope=tomavalorCheck(trCfg.childNodes[iope].childNodes[0]); // Formatar a realizar
+
var sysfi=tomatextDesple(trCfg.childNodes[isysfi].childNodes[0]); // Sistema de ficheros
-
- var tama=trCfg.childNodes[itama].childNodes[0].value; // Tamaño de partición
- if(tama==0){
+ if(sysfi=="" || sysfi=="EMPTY" ){ // Si el sistema de fichero es vacio o empty...
+ if(ope==1){ // Si se quiere formatear...
+ alert(TbMsg[5]);
+ trCfg.childNodes[isysfi].childNodes[0].focus();
+ return(false);
+ }
+ else
+ sysfi="EMPTY";
+ }
+
+ if(tama==0 && codpar!="EXTENDED") {
alert(TbMsg[3]);
trCfg.childNodes[itama].childNodes[0].focus();
return(false);
}
- var ope=tomavalorDesple(trCfg.childNodes[iope].childNodes[0]); // Operación a realizar
-
- trCfg=trCfg.nextSibling; // Primera fila de particiones
+
+ trCfg=trCfg.nextSibling; // Siguiente fila de particiones
/* Compone formato del comando */
- atributos+="par="+par+TB+"cpt="+codpar+TB+"sfi="+sysfi+TB+"tam="+tama+TB+"ope="+ope+SL;
- }
+ tbparam[npar]="par="+par+TB+"cpt="+codpar+TB+"sfi="+sysfi+TB+"tam="+tama+TB+"ope="+ope+SL;
+
+ }
+
+ //Controles finales de los paramtros a enviar
+
+ if(!swe){ // Si no se han especificado particiones extendidas ...
+ if(maxpar>4){ // La partición de mayor orden supera el número 4
+ alert(TbMsg[7]);
+ return(false);
+ }
+ }
+
+ /* Compone cadena de particiones (Deja fuera la cache,
+ si se especificó) ya que va en parametro aparte
+ */
+
+ var RC="!";
+ var disco=1; // Siempre disco 1
+
+ atributos="dsk="+disco+"@"+"cfg="; // Inicializa variable global de parámetros del comando
+
+
+ if(swc){
+ atributos+="dis="+disco+TB+"che=1"+TB+"tch="+tch+RC; // Caché con su tamaño
+ }
+ else{
+ atributos+="dis="+disco+TB+"che=0"+TB+"tch=0"+RC; // No se especifica caché
+ }
+
+ for(var i=1;i<=maxpar;i++){
+ if(i!=4){
+ if(tbparam[i]!=undefined)
+ atributos+=tbparam[i];
+ else
+ atributos+="par="+i+TB+"cpt=EMPTY"+TB+"sfi=EMPTY"+TB+"tam=0"+TB+"ope=0"+SL;
+ }
+ }
+
+ // Completa con EMPTY si las particiones son menores a 4 y no hay cache
+ if(maxpar<4){
+ var up=4;
+ if(swc) up=3;
+ for(var i=maxpar+1;i<=up;i++)
+ atributos+="par="+i+TB+"cpt=EMPTY"+TB+"sfi=EMPTY"+TB+"tam=0"+TB+"ope=0"+SL;
+ }
+
return(true);
}
//________________________________________________________________________________________________________
@@ -161,6 +242,13 @@ function tomavalorDesple(desplegable)
var val=desplegable.options[idx].value; // Valor seleccionado en el desplegable
return(val);
}
+
+function tomavalorCheck(chk)
+{
+ if(chk.checked) // Valor seleccionado en el desplegable
+ return(1);
+ return(0);
+}
//________________________________________________________________________________________________________
//
// Devuelve el valor seleccionado de un desplegable cualquiera
diff --git a/admin/WebConsole/comandos/jscripts/CrearImagen.js b/admin/WebConsole/comandos/jscripts/CrearImagen.js
index ebf37155..00283885 100644
--- a/admin/WebConsole/comandos/jscripts/CrearImagen.js
+++ b/admin/WebConsole/comandos/jscripts/CrearImagen.js
@@ -12,23 +12,25 @@
if (!comprobar_datos()) return;
var RC="@";
- var disco=1; // Siempre disco 1
- var atributos="dsk="+disco+RC;
+ // UHU - Ahora puede ser cualquier disco
+ var disco;
+ var atributos="";
var tb_conf=document.getElementById("tabla_conf");
var ochecks=tb_conf.getElementsByTagName('INPUT')
for(var i=0;i<ochecks.length;i++){
if(ochecks[i].checked){
- var parcod=ochecks[i].value.split("_");
- atributos+="par="+parcod[0]+RC; // Número de partición
- atributos+="cpt="+parcod[1]+RC; // Código de partición
+ var parcod=ochecks[i].value.split("_");
+ atributos+="dsk="+parcod[0]+RC; // Número de disco
+ atributos+="par="+parcod[1]+RC; // Número de partición
+ atributos+="cpt="+parcod[2]+RC; // Código de partición
- var despleimagen=document.getElementById("despleimagen_"+parcod[0]);
+ var despleimagen=document.getElementById("despleimagen_"+parcod[0]+"_"+parcod[1]);
var imgcan=despleimagen.value.split("_");
atributos+="idi="+imgcan[0]+RC; // Identificador de la imagen
atributos+="nci="+imgcan[1]+RC; // Nonbre canónico
- var desplerepositorios=document.getElementById("desplerepositorios_"+parcod[0]);
+ var desplerepositorios=document.getElementById("desplerepositorios_"+parcod[0]+"_"+parcod[1]);
var idx=desplerepositorios.selectedIndex;
atributos+="ipr="+desplerepositorios.options[idx].value+RC;
break;
@@ -51,13 +53,16 @@
for(var i=0;i<ochecks.length;i++){
if(ochecks[i].checked){
op++;
- var particion=ochecks[i].value.split("_")[0];
- despleimagen=document.getElementById("despleimagen_"+particion);
+ // Los checks tienen en su nombre disco_nparticion_idparticion (Ej. 1_1_7 -> disco 1, part 1, NTFS
+ var disco=ochecks[i].value.split("_")[0];
+ var particion=ochecks[i].value.split("_")[1];
+ // El desplegable de imagen ahora indica disco y particion en su nombre
+ despleimagen=document.getElementById("despleimagen_"+disco+"_"+particion);
var p=despleimagen.selectedIndex
if (p==0){
- alert(TbMsg[0])
+ alert(TbMsg[0])
despleimagen.focus()
- return(false)
+ return(false)
}
}
}
diff --git a/admin/WebConsole/comandos/jscripts/CrearImagenBasica.js b/admin/WebConsole/comandos/jscripts/CrearImagenBasica.js
new file mode 100644
index 00000000..d63fd86a
--- /dev/null
+++ b/admin/WebConsole/comandos/jscripts/CrearImagenBasica.js
@@ -0,0 +1,109 @@
+// *************************************************************************************************************************************************
+// Libreria de scripts de Javascript
+// Copyright 2003-2005 Jos Manuel Alonso. Todos los derechos reservados.
+// Fecha Creacin:2003-2004
+// Fecha ltima modificacin: Marzo-2005
+// Nombre del fichero: CrearImagenBasica.js
+// Descripcin :
+// Este fichero implementa las funciones javascript del fichero CrearImagenBasica.php (Comandos)
+// *************************************************************************************************************************************************
+ var RC="@";
+
+ function confirmar()
+ {
+ var prm=comprobar_datos()
+ if(prm=="") return; // Ha habido algn error
+
+ var disco=1; // Siempre disco 1
+ document.fdatosejecucion.atributos.value="dsk="+disco+RC+prm;
+ //alert(document.fdatosejecucion.atributos.value)
+ document.fdatosejecucion.submit();
+}
+//________________________________________________________________________________________________________
+//
+// Cancela la edicin
+//________________________________________________________________________________________________________
+
+function cancelar(){
+ alert(CTbMsg[0]);
+ location.href="../nada.php"
+}
+//________________________________________________________________________________________________________
+//
+// Comprobar_datos
+//________________________________________________________________________________________________________
+
+function comprobar_datos()
+{
+ var prm=""; // Retorno parmetros
+ var cadPar=document.getElementById("cadPar").getAttribute("value");
+ var tbPar=cadPar.split(";");
+ for(var i=0;i<tbPar.length;i++){
+ var par=tbPar[i]; // Numero de particin
+ if(par>0){
+ var trObj=document.getElementById('trPar-'+par); // Recupera objeto fila
+ var obRDO=trObj.childNodes[0].childNodes[0]; // Recupera Radio buton de la fila
+ if(obRDO.checked){ // Si est seleccionado ...
+ var cpt=obRDO.getAttribute("value");
+ var obSel=trObj.childNodes[3].childNodes[0]; // Recupera objeto select de la Imagen
+ var idx=obSel.selectedIndex;
+ if(idx==0){ // No ha seleccionado indice en el desplegable imagen
+ alert(TbMsg[1]);
+ return(false);
+ }
+ // Compone parametros
+ var tbIMG=obSel.options[idx].value.split(";");
+ var idi=tbIMG[0]; // Identificador de la imagen
+ var nci=tbIMG[1]; // Nombre cannico de la imagen
+ var ipr=tbIMG[2]; // Ip del repositorio de la imagen
+ var rti=tbIMG[3]; // Ruta de origen de la imagen
+
+ prm+="par="+par+RC;
+ prm+="cpt="+cpt+RC;
+ prm+="idi="+idi+RC;
+ prm+="nci="+nci+RC;
+ prm+="ipr="+ipr+RC;
+ prm+="rti="+rti+RC;
+
+
+ var desplemet=document.getElementById("desplesync_"+par); // Desplegable metodo de syncronizacin
+ var p=desplemet.selectedIndex // Toma ndice seleccionado
+
+ // No ha elegido ninguna particin
+ if(p==0){
+ alert(TbMsg[3])
+ return("");
+ }
+ prm+="msy="+p+RC; // Mtodo de syncronizacin 1=Sincronizacin1 2=Sincronizacion2
+
+
+ var chrChk=document.getElementById('whl-'+par); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) prm+="whl=1"+RC; else prm+="whl=0"+RC;
+ chrChk=document.getElementById('eli-'+par); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) prm+="eli=1"+RC; else prm+="eli=0"+RC;
+ chrChk=document.getElementById('cmp-'+par); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) prm+="cmp=1"+RC; else prm+="cmp=0"+RC;
+
+ var trObj=document.getElementById('trOpc'); // Recupera objeto fila de la tabla opciones adicionales
+ var obChk=trObj.childNodes[3].childNodes[0]; // Recupera objeto checkbox borrar de la Imagen
+ if(obChk.checked) prm+="bpi=1"+RC; else prm+="bpi=0"+RC;
+ var obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en cache
+ if(obChk.checked) prm+="cpc=1"+RC; else prm+="cpc=0"+RC;
+ var obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la cache
+ if(obChk.checked) prm+="bpc=1"+RC; else prm+="bpc=0"+RC;
+ var obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino
+ if(obChk.checked) prm+="nba=1"+RC; else prm+="nba=0"+RC;
+
+ if(comprobar_datosejecucion()) // Comprueba opciones de ejecucin
+ return(prm);
+ else
+ return("");
+ }
+ }
+ }
+ // No ha elegido ninguna particin
+ alert(TbMsg[2])
+ return("");
+}
+
+
diff --git a/admin/WebConsole/comandos/jscripts/CrearSoftIncremental.js b/admin/WebConsole/comandos/jscripts/CrearSoftIncremental.js
new file mode 100644
index 00000000..fa033e50
--- /dev/null
+++ b/admin/WebConsole/comandos/jscripts/CrearSoftIncremental.js
@@ -0,0 +1,110 @@
+// **************************************************************************************************************
+// Libreria de scripts de Javascript
+// Copyright 2003-2005 Jos Manuel Alonso. Todos los derechos reservados.
+// Fecha Creacin:2003-2004
+// Fecha ltima modificacin: Marzo-2005
+// Nombre del fichero: CrearSoftIncremental.js
+// Descripcin :
+// Este fichero implementa las funciones javascript del fichero CrearSoftIncremental.php (Comandos)
+// **************************************************************************************************************
+
+ var RC="@";
+
+ function confirmar()
+ {
+ var prm=comprobar_datos()
+ if(prm=="") return; // Ha habido algn error
+
+ var disco=1; // Siempre disco 1
+ document.fdatosejecucion.atributos.value="dsk="+disco+RC+prm;
+ //alert(document.fdatosejecucion.atributos.value);
+ document.fdatosejecucion.submit();
+}
+//________________________________________________________________________________________________________
+//
+// Cancela la edicin
+//________________________________________________________________________________________________________
+
+function cancelar(){
+ alert(CTbMsg[0]);
+ location.href="../nada.php"
+}
+//________________________________________________________________________________________________________
+//
+// Comprobar_datos
+//________________________________________________________________________________________________________
+
+function comprobar_datos()
+{
+ var prm=""; // Retorno parmetros
+ var cadPar=document.getElementById("cadPar").getAttribute("value");
+ var tbPar=cadPar.split(";");
+ for(var i=0;i<tbPar.length;i++){
+ var par=tbPar[i]; // Numero de particin
+ if(par>0){
+ var trObj=document.getElementById('trPar-'+par); // Recupera objeto fila
+ var obRDO=trObj.childNodes[0].childNodes[0]; // Recupera Radio buton de la fila
+ if(obRDO.checked){ // Si est seleccionado ...
+ var obSel=trObj.childNodes[3].childNodes[0]; // Recupera objeto select de la Imagen
+ var idx=obSel.selectedIndex;
+ if(idx==0){ // No ha seleccionado indice en el desplegable imagen
+ alert(TbMsg[3]);
+ return(false);
+ }
+ var tbIMG=obSel.options[idx].value.split(";");
+ var idi=tbIMG[0]; // Identificador de la imagen bsica
+ var nci=tbIMG[1]; // Nombre cannico de la imagen bsica
+ var ipr=tbIMG[2]; // Ip del repositorio de la imagen
+ var idf=tbIMG[3]; // NIdentificador de la imagen incremental
+ var ncf=tbIMG[4]; // Nombre cannico de la imagen incremental
+ var rti=tbIMG[5]; // Ruta de origen de la imagen
+
+ // Compone parametros
+ prm+="par="+par+RC;
+ prm+="idi="+idi+RC;
+ prm+="nci="+nci+RC;
+ prm+="ipr="+ipr+RC;
+ prm+="idf="+idf+RC;
+ prm+="ncf="+ncf+RC;
+ prm+="rti="+rti+RC;
+
+ var desplemet=document.getElementById("desplesync_"+par); // Desplegable metodo de syncronizacin
+ var p=desplemet.selectedIndex // Toma ndice seleccionado
+
+ // No ha elegido ninguna particin
+ if(p==0){
+ alert(TbMsg[4])
+ return("");
+ }
+ prm+="msy="+p+RC; // Mtodo de syncronizacin 1=Sincronizacin1 2=Sincronizacion2
+
+ var chrChk=document.getElementById('whl-'+par); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) prm+="whl=1"+RC; else prm+="whl=0"+RC;
+ chrChk=document.getElementById('eli-'+par); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) prm+="eli=1"+RC; else prm+="eli=0"+RC;
+ chrChk=document.getElementById('cmp-'+par); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) prm+="cmp=1"+RC; else prm+="cmp=0"+RC;
+
+
+ var trObj=document.getElementById('trOpc'); // Recupera objeto fila de la tabla opciones adicionales
+ var obChk=trObj.childNodes[3].childNodes[0]; // Recupera objeto checkbox borrar de la Imagen
+ if(obChk.checked) prm+="bpi=1"+RC; else prm+="bpi=0"+RC;
+ var obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en cache
+ if(obChk.checked) prm+="cpc=1"+RC; else prm+="cpc=0"+RC;
+ var obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la cache
+ if(obChk.checked) prm+="bpc=1"+RC; else prm+="bpc=0"+RC;
+ var obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino
+ if(obChk.checked) prm+="nba=1"+RC; else prm+="nba=0"+RC;
+
+ if(comprobar_datosejecucion()) // Comprueba opciones de ejecucin
+ return(prm);
+ else
+ return("");
+ }
+ }
+ }
+ // No ha elegido ninguna particin
+ alert(TbMsg[2])
+ return("");
+}
+
diff --git a/admin/WebConsole/comandos/jscripts/EjecutarScripts.js b/admin/WebConsole/comandos/jscripts/EjecutarScripts.js
index 5fd6c6aa..9dc8100e 100644
--- a/admin/WebConsole/comandos/jscripts/EjecutarScripts.js
+++ b/admin/WebConsole/comandos/jscripts/EjecutarScripts.js
@@ -10,7 +10,8 @@
function confirmar(){
if (comprobar_datos()){
var RC='@';
- document.fdatosejecucion.atributos.value="scp="+escape(document.fdatos.codigo.value)+RC;
+ document.fdatos.codigo.value+="\n";
+ document.fdatosejecucion.atributos.value="scp="+escape(document.fdatos.codigo.value+"\n")+RC;
filtrado();
document.fdatosejecucion.submit();
}
diff --git a/admin/WebConsole/comandos/jscripts/EliminarImagenCache.js b/admin/WebConsole/comandos/jscripts/EliminarImagenCache.js
new file mode 100644
index 00000000..e8af1325
--- /dev/null
+++ b/admin/WebConsole/comandos/jscripts/EliminarImagenCache.js
@@ -0,0 +1,44 @@
+// *************************************************************************************************************************************************
+// Libreria de scripts de Javascript
+// Nombre del fichero: EliminarImagenCache.js
+// Descripcin :
+// Este fichero implementa las funciones javascript del fichero IniciarSesion.php (Comandos)
+// *************************************************************************************************************************************************
+function confirmar(){
+ if (comprobar_datos()){
+ // Compone atributos del comando
+ tb_conf=document.getElementById("tabla_conf");
+ var ochecks=tb_conf.getElementsByTagName('INPUT')
+ var atributos;
+ for(var i=0;i<ochecks.length;i++){
+ if(ochecks[i].checked){
+ atributos=ochecks[i].value
+ }
+ }
+ var RC='@';
+ document.fdatosejecucion.atributos.value="scp="+atributos+RC;
+ document.fdatosejecucion.submit();
+ }
+ }
+//________________________________________________________________________________________________________
+ function cancelar()
+{
+ alert(CTbMsg[0]);
+ location.href="../nada.php"
+ }
+//________________________________________________________________________________________________________
+ function comprobar_datos()
+{
+ tb_conf=document.getElementById("tabla_conf");
+ var ochecks=tb_conf.getElementsByTagName('INPUT')
+ var op=0
+ for(var i=0;i<ochecks.length;i++){
+ if(ochecks[i].checked) op++;
+ }
+ if(op==0){
+ alert(TbMsg[1])
+ return(false);
+ }
+ return(comprobar_datosejecucion())
+}
+
diff --git a/admin/WebConsole/comandos/jscripts/IniciarSesion.js b/admin/WebConsole/comandos/jscripts/IniciarSesion.js
index 16b1d550..3967f665 100644
--- a/admin/WebConsole/comandos/jscripts/IniciarSesion.js
+++ b/admin/WebConsole/comandos/jscripts/IniciarSesion.js
@@ -12,14 +12,16 @@ function confirmar(){
// Compone atributos del comando
tb_conf=document.getElementById("tabla_conf");
var ochecks=tb_conf.getElementsByTagName('INPUT')
- var particion;
+ var diskPart;
for(var i=0;i<ochecks.length;i++){
if(ochecks[i].checked){
- particion=ochecks[i].value
+ diskPart=ochecks[i].value.split(";");
}
}
var RC='@';
- document.fdatosejecucion.atributos.value="par="+particion+RC;
+ var disk = diskPart[0];
+ var particion = diskPart[1];
+ document.fdatosejecucion.atributos.value="dsk="+disk+RC+"par="+particion+RC;
filtrado();
document.fdatosejecucion.submit();
}
diff --git a/admin/WebConsole/comandos/jscripts/InventarioSoftware.js b/admin/WebConsole/comandos/jscripts/InventarioSoftware.js
index aeb8437e..99dda40c 100644
--- a/admin/WebConsole/comandos/jscripts/InventarioSoftware.js
+++ b/admin/WebConsole/comandos/jscripts/InventarioSoftware.js
@@ -14,11 +14,13 @@
var particion;
for(var i=0;i<ochecks.length;i++){
if(ochecks[i].checked){
- particion=ochecks[i].value
+ diskPart=ochecks[i].value.split(";");
}
}
var RC="@";
- var disco=1; // Siempre disco 1
+ // UHU - Ahora se puede hacer de cualquier disco
+ var disco = diskPart[0];
+ var particion = diskPart[1];
document.fdatosejecucion.atributos.value="dsk="+disco+RC+"par="+particion+RC;
document.fdatosejecucion.submit();
}
@@ -34,7 +36,8 @@
var ochecks=tb_conf.getElementsByTagName('INPUT')
var op=0
for(var i=0;i<ochecks.length;i++){
- if(ochecks[i].checked) op++;
+ if(ochecks[i].checked)
+ op++;
}
if(op==0){
alert(TbMsg[1])
diff --git a/admin/WebConsole/comandos/jscripts/RestaurarImagen.js b/admin/WebConsole/comandos/jscripts/RestaurarImagen.js
index fd1061bf..91e7b3ea 100644
--- a/admin/WebConsole/comandos/jscripts/RestaurarImagen.js
+++ b/admin/WebConsole/comandos/jscripts/RestaurarImagen.js
@@ -10,15 +10,18 @@
function confirmar(){
if(comprobar_datos()){
var RC="@";
- var disco=1; // Siempre disco 1
- var atributos="dsk="+disco+RC;
+ // UHU - Ahora puede ser cualquier disco
+ var disco;
+ var atributos="";
var tb_conf=document.getElementById("tabla_conf");
var ochecks=tb_conf.getElementsByTagName('INPUT')
for(var i=0;i<ochecks.length;i++){
if(ochecks[i].checked){
- var idradio=ochecks[i].id;
- var numpar=ochecks[i].value;
-
+ var idradio=ochecks[i].id;
+ var diskPart = ochecks[i].value.split(";");
+ disco = diskPart[0];
+ var numpar= diskPart[1];
+ atributos+="dsk="+disco+RC; // Numero de disco
atributos+="par="+numpar+RC; // Número de partición
var despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1");
var despleimagendrcha=document.getElementById("despleimagen_"+idradio+"_0");
diff --git a/admin/WebConsole/comandos/jscripts/RestaurarImagenBasica.js b/admin/WebConsole/comandos/jscripts/RestaurarImagenBasica.js
new file mode 100644
index 00000000..8af30d8b
--- /dev/null
+++ b/admin/WebConsole/comandos/jscripts/RestaurarImagenBasica.js
@@ -0,0 +1,125 @@
+// *************************************************************************************************************************************************
+// Libreria de scripts de Javascript
+// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creación: 2009-2010
+// Fecha Última modificación: Agosto-2010
+// Nombre del fichero: RestaurarImagenBasica.js
+// Descripción :
+// Este fichero implementa las funciones javascript del fichero RestaurarImagenBasica.php (Comandos)
+// *************************************************************************************************************************************************
+ function confirmar(){
+ if(comprobar_datos()){
+ var RC="@";
+ // UHU - Ahora puede ser cualquier disco
+ var disco;
+ var atributos="";
+ var tb_conf=document.getElementById("tabla_conf");
+ var ochecks=tb_conf.getElementsByTagName('INPUT')
+ for(var i=0;i<ochecks.length;i++){
+ if(ochecks[i].checked && ochecks[i].name=="particion"){
+ var idradio=ochecks[i].id;
+ var diskPart = ochecks[i].value.split(";");
+ disco =diskPart[0];
+ var numpar= diskPart[1];
+ atributos+="dsk="+disco+RC; // Número de disco
+ atributos+="par="+numpar+RC; // Número de partición
+ var despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1");
+ var despleimagen;
+
+ if(despleimagenizda.selectedIndex>0) despleimagen=despleimagenizda;
+
+ var imgcanrepo=despleimagen.value.split("_");
+ atributos+="idi="+imgcanrepo[0]+RC; // Identificador de la imagen
+ atributos+="nci="+imgcanrepo[1]+RC; // Nombre canónico
+ atributos+="ipr="+imgcanrepo[2]+RC; // Dirección ip del repositorio donde se aloja la imagen
+ atributos+="ifs="+imgcanrepo[3]+RC; // Identificador del perfil software de la imagen
+ atributos+="rti="+imgcanrepo[4]+RC; // Ruta de origen de la imagen
+
+ var desplemet=document.getElementById("desplemet_"+idradio); // Desplegable metodo de restauración
+ var p=desplemet.selectedIndex // Toma índice seleccionado
+ atributos+="met="+p+RC; // Método de clonación 0=caché 1=repositorio
+
+ var desplemet=document.getElementById("desplesync_"+idradio); // Desplegable metodo de syncronización
+ var p=desplemet.selectedIndex // Toma índice seleccionado
+ atributos+="msy="+p+RC; // Método de clonación
+
+ var desplemet=document.getElementById("despletpt_"+idradio); // Desplegable metodo de syncronización
+ var p=desplemet.value // Toma índice seleccionado
+ atributos+="tpt="+p+RC; // Método de clonación
+
+ var chrChk=document.getElementById('whl-'+idradio); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) atributos+="whl=1"+RC; else atributos+="whl=0"+RC;
+ chrChk=document.getElementById('eli-'+idradio); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) atributos+="eli=1"+RC; else atributos+="eli=0"+RC;
+ chrChk=document.getElementById('cmp-'+idradio); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) atributos+="cmp=1"+RC; else atributos+="cmp=0"+RC;
+
+ var cc=ochecks[i].getAttribute('idcfg'); // Toma identificador del bloque de configuración
+ if(document.fdatosejecucion.ambito.value!=AMBITO_ORDENADORES){
+ var tbOrd=document.getElementById("tbOrd_"+cc);
+ var idordenadores=tbOrd.getAttribute('value'); // Toma identificadores de los ordenadores
+ var cadenaid=document.fdatos.cadenaid.value; // Cadena de identificadores de todos los ordenadores del ámbito
+ if(idordenadores!=cadenaid){
+ document.fdatosejecucion.ambito.value=0; // Ambito de aplicación restringido
+ document.fdatosejecucion.idambito.value=idordenadores;
+ }
+ }
+ // Opciones adicionales
+ var trObj=document.getElementById('trOpc'); // Recupera objeto fila de la tabla opciones adicionales
+ var obChk=trObj.childNodes[3].childNodes[0]; // Recupera objeto checkbox borrar de la Imagen
+ if(obChk.checked) atributos+="bpi=1"+RC; else atributos+="bpi=0"+RC;
+ var obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en cache
+ if(obChk.checked) atributos+="cpc=1"+RC; else atributos+="cpc=0"+RC;
+ var obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la cache
+ if(obChk.checked) atributos+="bpc=1"+RC; else atributos+="bpc=0"+RC;
+ var obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino
+ if(obChk.checked) atributos+="nba=1"+RC; else atributos+="nba=0"+RC;
+
+ document.fdatosejecucion.atributos.value=atributos;
+ filtrado();
+ //alert(atributos)
+ document.fdatosejecucion.submit();
+ break;
+ }
+ }
+ }
+ }
+//________________________________________________________________________________________________________
+ function cancelar(){
+ alert(CTbMsg[0]);
+ location.href="../nada.php"
+ }
+//________________________________________________________________________________________________________
+ function comprobar_datos()
+{
+ tb_conf=document.getElementById("tabla_conf");
+ var ochecks=tb_conf.getElementsByTagName('INPUT')
+ var op=0
+ for(var i=0;i<ochecks.length;i++){
+ if(ochecks[i].checked && ochecks[i].name=="particion"){
+ op++;
+ var idradio=ochecks[i].id; // Toma idemtificador del desplegable de imagenes
+ despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1"); // Desplegable izda.
+ var p1=despleimagenizda.selectedIndex // Toma índice seleccionado
+ if (p1==0){
+ alert(TbMsg[0])
+ despleimagenizda.focus()
+ return(false)
+ }
+ // Comprobamos tipo de sincronizacion.
+ var desplemet=document.getElementById("desplesync_"+idradio); // Desplegable metodo de syncronización
+ var p1=desplemet.selectedIndex // Toma índice seleccionado
+ if (p1==0){
+ alert(TbMsg[7])
+ desplemet.focus()
+ return(false)
+ }
+ }
+ }
+ if(op==0){
+ alert(TbMsg[1])
+ return(false);
+ }
+ return(comprobar_datosejecucion())
+}
+
diff --git a/admin/WebConsole/comandos/jscripts/RestaurarSoftIncremental.js b/admin/WebConsole/comandos/jscripts/RestaurarSoftIncremental.js
new file mode 100644
index 00000000..7fe6dcad
--- /dev/null
+++ b/admin/WebConsole/comandos/jscripts/RestaurarSoftIncremental.js
@@ -0,0 +1,127 @@
+// *************************************************************************************************************************************************
+// Libreria de scripts de Javascript
+// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creación: 2009-2010
+// Fecha Última modificación: Agosto-2010
+// Nombre del fichero: RestaurarSoftIncremental.js
+// Descripción :
+// Este fichero implementa las funciones javascript del fichero RestaurarSoftIncremental.php (Comandos)
+// *************************************************************************************************************************************************
+ function confirmar(){
+ if(comprobar_datos()){
+ var RC="@";
+ // UHU - Ahora puede ser cualquier disco
+ var disco;
+ var atributos="";
+ var tb_conf=document.getElementById("tabla_conf");
+ var ochecks=tb_conf.getElementsByTagName('INPUT')
+ for(var i=0;i<ochecks.length;i++){
+ if(ochecks[i].checked && ochecks[i].name=="particion"){
+ var idradio=ochecks[i].id;
+ var diskPart = ochecks[i].value.split(";");
+ disco =diskPart[0];
+ var numpar= diskPart[1];
+ atributos+="dsk="+disco+RC; // Número de disco
+ atributos+="par="+numpar+RC; // Número de partición
+
+ var despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1");
+ var despleimagen;
+
+ if(despleimagenizda.selectedIndex>0) despleimagen=despleimagenizda;
+
+ var imgcanrepo=despleimagen.value.split("_");
+ atributos+="idi="+imgcanrepo[0]+RC; // Identificador de la imagen
+ atributos+="nci="+imgcanrepo[1]+RC; // Nombre canónico de la imagen básica
+ atributos+="ipr="+imgcanrepo[2]+RC; // Dirección ip del repositorio donde se aloja la imagen
+ atributos+="ifs="+imgcanrepo[3]+RC; // Identificador del perfil software
+ atributos+="idf="+imgcanrepo[4]+RC; // Identificador de la imagen incremental
+ atributos+="ncf="+imgcanrepo[5]+RC; // Nombre canónico de la imagen incremental
+ atributos+="rti="+imgcanrepo[6]+RC; // Ruta de origen de la imagen
+
+ var desplemet=document.getElementById("desplemet_"+idradio); // Desplegable metodo de restauración
+ var p=desplemet.selectedIndex // Toma índice seleccionado
+ atributos+="met="+p+RC; // Método de clonación 0=caché 1=repositorio
+
+ var desplemet=document.getElementById("desplesync_"+idradio); // Desplegable metodo de syncronización
+ var p=desplemet.selectedIndex // Toma índice seleccionado
+ atributos+="msy="+p+RC; // Método de clonación
+
+ var desplemet=document.getElementById("despletpt_"+idradio); // Desplegable metodo de syncronización
+ var p=desplemet.value // Toma índice seleccionado
+ atributos+="tpt="+p+RC; // Método de transmision
+
+ var chrChk=document.getElementById('whl-'+idradio); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) atributos+="whl=1"+RC; else atributos+="whl=0"+RC;
+ chrChk=document.getElementById('eli-'+idradio); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) atributos+="eli=1"+RC; else atributos+="eli=0"+RC;
+ chrChk=document.getElementById('cmp-'+idradio); // Recupera objeto fila de la tabla opciones adicionales
+ if(chrChk.checked) atributos+="cmp=1"+RC; else atributos+="cmp=0"+RC;
+
+ var cc=ochecks[i].getAttribute('idcfg'); // Toma identificador del bloque de configuración
+ if(document.fdatosejecucion.ambito.value!=AMBITO_ORDENADORES){
+ var tbOrd=document.getElementById("tbOrd_"+cc);
+ var idordenadores=tbOrd.getAttribute('value'); // Toma identificadores de los ordenadores
+ var cadenaid=document.fdatos.cadenaid.value; // Cadena de identificadores de todos los ordenadores del ámbito
+ if(idordenadores!=cadenaid){
+ document.fdatosejecucion.ambito.value=0; // Ambito de aplicación restringido
+ document.fdatosejecucion.idambito.value=idordenadores;
+ }
+ }
+ // Opciones adicionales
+ var trObj=document.getElementById('trOpc'); // Recupera objeto fila de la tabla opciones adicionales
+ var obChk=trObj.childNodes[3].childNodes[0]; // Recupera objeto checkbox borrar de la Imagen
+ if(obChk.checked) atributos+="bpi=1"+RC; else atributos+="bpi=0"+RC;
+ var obChk=trObj.childNodes[7].childNodes[0]; // Recupera objeto checkbox copiar en cache
+ if(obChk.checked) atributos+="cpc=1"+RC; else atributos+="cpc=0"+RC;
+ var obChk=trObj.childNodes[11].childNodes[0]; // Recupera objeto checkbox borrar la cache
+ if(obChk.checked) atributos+="bpc=1"+RC; else atributos+="bpc=0"+RC;
+ var obChk=trObj.childNodes[15].childNodes[0]; // Recupera objeto checkbox no borrar archivos en destino
+ if(obChk.checked) atributos+="nba=1"+RC; else atributos+="nba=0"+RC;
+
+ document.fdatosejecucion.atributos.value=atributos;
+ filtrado();
+ //alert(atributos)
+ document.fdatosejecucion.submit();
+ break;
+ }
+ }
+ }
+ }
+//________________________________________________________________________________________________________
+ function cancelar(){
+ alert(CTbMsg[0]);
+ location.href="../nada.php"
+ }
+//________________________________________________________________________________________________________
+ function comprobar_datos()
+{
+ tb_conf=document.getElementById("tabla_conf");
+ var ochecks=tb_conf.getElementsByTagName('INPUT')
+ var op=0
+ for(var i=0;i<ochecks.length;i++){
+ if(ochecks[i].checked && ochecks[i].name=="particion"){
+ op++;
+ var idradio=ochecks[i].id; // Toma idemtificador del desplegable de imagenes
+ despleimagenizda=document.getElementById("despleimagen_"+idradio+"_1"); // Desplegable imagenes.
+ var p1=despleimagenizda.selectedIndex // Toma índice seleccionado
+ if (p1==0){
+ alert(TbMsg[0])
+ despleimagenizda.focus()
+ return(false)
+ }
+ var desplemet=document.getElementById("desplesync_"+idradio); // Desplegable metodo de syncronización
+ var p1=desplemet.selectedIndex // Toma índice seleccionado
+ if (p1==0){
+ alert(TbMsg[7])
+ desplemet.focus()
+ return(false)
+ }
+ }
+ }
+ if(op==0){
+ alert(TbMsg[1])
+ return(false);
+ }
+ return(comprobar_datosejecucion())
+}
+
diff --git a/admin/WebConsole/controlacceso.php b/admin/WebConsole/controlacceso.php
index 7fa41b67..de3b8b41 100644
--- a/admin/WebConsole/controlacceso.php
+++ b/admin/WebConsole/controlacceso.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *********************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -17,3 +17,4 @@
$idi="esp"; // Idioma por defecto
//========================================================================================================
?>
+
diff --git a/admin/WebConsole/controlpostacceso.php b/admin/WebConsole/controlpostacceso.php
index 9f0a404b..bc02e4af 100644
--- a/admin/WebConsole/controlpostacceso.php
+++ b/admin/WebConsole/controlpostacceso.php
@@ -13,7 +13,8 @@ include_once("./clases/AdoPhp.php");
#include_once("idiomas/php/$idi/acceso_$idi.php");
//________________________________________________________________________________________________________
$usu="";
- $pss="";
+ $pss="";
+ $ident="";
$idc=0;
$iph=""; // Switch menu cliente
@@ -28,6 +29,22 @@ include_once("./clases/AdoPhp.php");
die($TbMsg["ACCESS_ERROR"]);
//________________________________________________________________________________________________________
+if ($idc != 0)
+{
+ $rs=new Recordset;
+// $cmd->texto="SELECT * FROM centros WHERE idcentro='$idc'";
+ $cmd->texto="SELECT * FROM centros WHERE idcentro=".$idc;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(false); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $ident=$rs->campos["identidad"];
+ }$rs->Cerrar();
+}
+
+//________________________________________________________________________________________________________
+
+
$nmc="";
$idi="";
@@ -51,6 +68,7 @@ include_once("./clases/AdoPhp.php");
session_start(); // Activa variables de sesión
+ $_SESSION["widentidad"]=$ident;
$_SESSION["widcentro"]=$idc;
$_SESSION["wnombrecentro"]=$nmc;
$_SESSION["wusuario"]=$usu;
@@ -59,6 +77,7 @@ include_once("./clases/AdoPhp.php");
$_SESSION["wcadenaconexion"]=$cnx;
$_SESSION["wpagerror"]=$wer;
$_SESSION["wurlacceso"]=$wac;
+ $_SESSION["wadminetboot"]=$adminetboot;
// Variables de entorno
$resul=toma_entorno($cmd,$ips,$prt,$pclo,$rep);
@@ -80,6 +99,7 @@ include_once("./clases/AdoPhp.php");
// Devuelve el identificador del centro, el nombre y el idioma utilizado por el usuario
//_______________________________________________________________________________________________________
function toma_datos($cmd,$idcentro,&$nombrecentro,&$idioma,$usuario,&$idtipousuario,$pasguor){
+ global $adminetboot;
$rs=new Recordset;
if(!empty($idcentro)){
$cmd->texto="SELECT usuarios.idtipousuario, centros.nombrecentro,
@@ -104,6 +124,7 @@ include_once("./clases/AdoPhp.php");
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return($false); // Error al abrir recordset
if(!$rs->EOF){
+ $adminetboot=$rs->campos["idtipousuario"];
$idtipousuario=$rs->campos["idtipousuario"];
$idioma=$rs->campos["idioma"];
if(!empty($idcentro)){
diff --git a/admin/WebConsole/estilos.css b/admin/WebConsole/estilos.css
index 6e60d6a9..f64d969d 100644
--- a/admin/WebConsole/estilos.css
+++ b/admin/WebConsole/estilos.css
@@ -1,4 +1,7 @@
-.acceso {
+body {
+ background-color: white;
+}
+.acceso {
font: normal normal 12px sans-serif;
}
.acceso h1 {
@@ -55,163 +58,167 @@
.pie span {
float: right;
}
-.textos{
- COLOR: #A53B2D;
- FONT-FAMILY:MS Sans Serif;
- FONT-SIZE: 8pt;
-}
-
-.texto_arbol{
- COLOR: #000000;
- FONT-FAMILY: sans-serif;
- FONT-SIZE: 11px;
-}
-
-.menu_contextual TABLE{
- BACKGROUND-COLOR: #d4d0c8;
-}
-
-.menu_contextual TD{
- COLOR: #000000;
- FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px;
- LETTER-SPACING: -1px;
-}
-.menu_contextual SPAN{
- COLOR: #000000;
- FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px;
- LETTER-SPACING: -1px;
-}
-.tabla_standar TD{
- COLOR: #000000;
- FONT-FAMILY: Verdana;
- FONT-SIZE: 11px;
-}
-
-.tabla_lista TD{
- COLOR: #000000;
- FONT-FAMILY: Verdana;
- FONT-SIZE: 11px;
- LETTER-SPACING: -1px;
-}
-
-.input_nodo{
- BORDER-BOTTOM: 1px solid;
- BORDER-LEFT: 1px solid;
- BORDER-RIGHT: 1px solid;
- BORDER-TOP: 1px solid;
- COLOR: #000000;
- FONT-SIZE: 11px;
- HEIGHT: 14px;
-}
-.marcorelieve{
- BORDER-BOTTOM: #808080 1px solid;
- BORDER-LEFT: #ffffff 1px solid;
- BORDER-RIGHT: #808080 1px solid;
- BORDER-TOP: #ffffff 1px solid;
-}
-.marco{
- BORDER-BOTTOM: #999999 1px solid;
- BORDER-LEFT: #999999 1px solid;
- BORDER-RIGHT: #999999 1px solid;
+.acercade {
+ color: black;
+ font-family: sans-serif;
+}
+.textos{
+ COLOR: #A53B2D;
+ FONT-FAMILY:MS Sans Serif;
+ FONT-SIZE: 8pt;
+}
+
+.texto_arbol{
+ COLOR: #000000;
+ FONT-FAMILY: sans-serif;
+ FONT-SIZE: 11px;
+}
+
+.menu_contextual TABLE{
+ BACKGROUND-COLOR: #d4d0c8;
+}
+
+.menu_contextual TD{
+ COLOR: #000000;
+ FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px;
+ LETTER-SPACING: -1px;
+}
+.menu_contextual SPAN{
+ COLOR: #000000;
+ FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px;
+ LETTER-SPACING: -1px;
+}
+.tabla_standar TD{
+ COLOR: #000000;
+ FONT-FAMILY: Verdana;
+ FONT-SIZE: 11px;
+}
+
+.tabla_lista TD{
+ COLOR: #000000;
+ FONT-FAMILY: Verdana;
+ FONT-SIZE: 11px;
+ LETTER-SPACING: -1px;
+}
+
+.input_nodo{
+ BORDER-BOTTOM: 1px solid;
+ BORDER-LEFT: 1px solid;
+ BORDER-RIGHT: 1px solid;
+ BORDER-TOP: 1px solid;
+ COLOR: #000000;
+ FONT-SIZE: 11px;
+ HEIGHT: 14px;
+}
+.marcorelieve{
+ BORDER-BOTTOM: #808080 1px solid;
+ BORDER-LEFT: #ffffff 1px solid;
+ BORDER-RIGHT: #808080 1px solid;
+ BORDER-TOP: #ffffff 1px solid;
+}
+.marco{
+ BORDER-BOTTOM: #999999 1px solid;
+ BORDER-LEFT: #999999 1px solid;
+ BORDER-RIGHT: #999999 1px solid;
BORDER-TOP: #999999 1px solid;
- COLOR: #000000;
- FONT-FAMILY: Verdana,Arial, Helvetica, sans-serif;
- FONT-SIZE: 13px;
-}
-.menupral{
- BACKGROUND-COLOR: #d4d0c8;
- FONT-FAMILY: sans-serif;
- FONT-SIZE: 11px;
-}
-.menupral TD{
- BORDER-BOTTOM: #d4d0c8 1px solid;
- BORDER-LEFT: #d4d0c8 1px solid;
- BORDER-RIGHT: #d4d0c8 1px solid;
- BORDER-TOP: #d4d0c8 1px solid;
-}
-
-.menupral SPAN{
- COLOR: #000000;
- FONT-FAMILY: sans-serif;
- FONT-SIZE: 11px;
-}
-
+ COLOR: #000000;
+ FONT-FAMILY: Verdana,Arial, Helvetica, sans-serif;
+ FONT-SIZE: 13px;
+}
+.menupral{
+ BACKGROUND-COLOR: #d4d0c8;
+ FONT-FAMILY: sans-serif;
+ FONT-SIZE: 11px;
+}
+.menupral TD{
+ BORDER-BOTTOM: #d4d0c8 1px solid;
+ BORDER-LEFT: #d4d0c8 1px solid;
+ BORDER-RIGHT: #d4d0c8 1px solid;
+ BORDER-TOP: #d4d0c8 1px solid;
+}
+
+.menupral SPAN{
+ COLOR: #000000;
+ FONT-FAMILY: sans-serif;
+ FONT-SIZE: 11px;
+}
+
.filtros{
- BORDER-BOTTOM: #999999 1px solid;
- BORDER-LEFT: #999999 1px solid;
- BORDER-RIGHT: #999999 1px solid;
- BORDER-TOP: #999999 1px solid;
-}
-
-.filtros TD{
- FONT-FAMILY: sans-serif;
- FONT-SIZE: 11px;
- COLOR:#999999;
-}
-.supercabeceras {
- COLOR:#FE6C65;
- FONT-FAMILY: Arial;
- FONT-SIZE: 30px;
- FONT-WEIGHT: 600;
-}
-.sobrecabeceras {
- COLOR:#7575DD;
- FONT-FAMILY: Arial;
- FONT-SIZE: 24px;
- FONT-WEIGHT: 400;
-}
-.cabeceras{
- COLOR: #999999;
- FONT-FAMILY: Verdana;
- FONT-SIZE: 24px;
- FONT-WEIGHT: 600;
-}
-.subcabeceras{
- COLOR: #D6A621;
- FONT-FAMILY: Verdana;
- FONT-SIZE: 20px;
-}
-
-.presentaciones{
- COLOR: #999999;
- FONT-FAMILY: Verdana,Arial, Helvetica, sans-serif;
- FONT-SIZE: 12px;
-}
-
-
-.notas{
- COLOR: #999999;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 10px;
-}
-
-.tabla_datos{
-}
-
-.tabla_datos TH{
- BACKGROUND-COLOR: #63676b;
- COLOR: #ffffff;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 12px;
- FONT-WEIGHT: 500;
- BORDER-BOTTOM:#999999 1px solid ;
-}
-
-.tabla_datos TD{
- BACKGROUND-COLOR: #d4d0c8;
- COLOR: #003300;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 12px;
- BORDER-BOTTOM:#999999 1px solid;
-}
-
-.formulariodatos{
- COLOR: #000000;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px
-}
+ BORDER-BOTTOM: #999999 1px solid;
+ BORDER-LEFT: #999999 1px solid;
+ BORDER-RIGHT: #999999 1px solid;
+ BORDER-TOP: #999999 1px solid;
+}
+
+.filtros TD{
+ FONT-FAMILY: sans-serif;
+ FONT-SIZE: 11px;
+ COLOR:#999999;
+}
+.supercabeceras {
+ COLOR:#FE6C65;
+ FONT-FAMILY: Arial;
+ FONT-SIZE: 30px;
+ FONT-WEIGHT: 600;
+}
+.sobrecabeceras {
+ COLOR:#7575DD;
+ FONT-FAMILY: Arial;
+ FONT-SIZE: 24px;
+ FONT-WEIGHT: 400;
+}
+.cabeceras{
+ COLOR: #999999;
+ FONT-FAMILY: Verdana;
+ FONT-SIZE: 24px;
+ FONT-WEIGHT: 600;
+}
+.subcabeceras{
+ COLOR: #D6A621;
+ FONT-FAMILY: Verdana;
+ FONT-SIZE: 20px;
+}
+
+.presentaciones{
+ COLOR: #999999;
+ FONT-FAMILY: Verdana,Arial, Helvetica, sans-serif;
+ FONT-SIZE: 12px;
+}
+
+
+.notas{
+ COLOR: #999999;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 10px;
+}
+
+.tabla_datos{
+}
+
+.tabla_datos TH{
+ BACKGROUND-COLOR: #63676b;
+ COLOR: #ffffff;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 12px;
+ FONT-WEIGHT: 500;
+ BORDER-BOTTOM:#999999 1px solid ;
+}
+
+.tabla_datos TD{
+ BACKGROUND-COLOR: #d4d0c8;
+ COLOR: #003300;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 12px;
+ BORDER-BOTTOM:#999999 1px solid;
+}
+
+.formulariodatos{
+ COLOR: #000000;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px
+}
.tabla_listados {
font-family: Arial, Helvetica, sans-serif;
@@ -234,219 +241,219 @@
border-bottom: #999999 1px solid;
}
-.tabla_listados_sin {
-}
-.tabla_listados_sin TH{
- BACKGROUND-COLOR: #63676b;
- COLOR: #ffffff;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 12px;
+.tabla_listados_sin {
+}
+.tabla_listados_sin TH{
+ BACKGROUND-COLOR: #63676b;
+ COLOR: #ffffff;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 12px;
FONT-WEIGHT: 500;
BORDER-BOTTOM:#4f4f4f 1px solid;
- BORDER-RIGHT:#4f4f4f 1px solid;
-}
-
-.tabla_listados_sin TD{
- BACKGROUND-COLOR: #EEEECC;
- COLOR: #000000;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11;
-}
-A.tabla_listados_sin:visited{
- COLOR: #000000;
- FONT-FAMILY: sans-serif;
- FONT-SIZE: 11px;
-}
-A.tabla_listados_sin:link{
- COLOR: #000000;
- FONT-FAMILY: sans-serif;
- FONT-SIZE: 11px;
-}
-
-.recuadros{
- BACKGROUND-COLOR: lightseagreen;
- BORDER-BOTTOM: teal solid;
- BORDER-LEFT: #b4e0d2 solid;
- BORDER-RIGHT: teal solid;
- BORDER-TOP: #b4e0d2 solid;
- COLOR: white;
- FONT-STYLE: italic
-}
-
-.tabla_meses{
-}
-
-.tabla_meses TH{
- BACKGROUND-COLOR: #b5daad;
- COLOR: #000000;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px;
- FONT-WEIGHT: 500;
- BORDER-BOTTOM: #999999 1px solid;
- BORDER-LEFT: #999999 1px solid;
- BORDER-RIGHT: #999999 1px solid;
- BORDER-TOP: #999999 1px solid;
-}
-
-.tabla_meses TD{
- BACKGROUND-COLOR: #EEEECC;
- COLOR: #003300;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 12px;
- BORDER-BOTTOM: #d4d4d4 1px solid;
- BORDER-LEFT: #d4d4d4 1px solid;
-
-}
-
-.tabla_reservas{
-}
-
-.tabla_reservas TH{
- BACKGROUND-COLOR: #B5DAAD;
- COLOR: #000000;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 10px;
- FONT-WEIGHT: 700;
-}
-
-.tabla_reservas TD{
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 10px;
-
-}
-.tabla_busquedas{
-}
-
-.tabla_busquedas TH{
- BACKGROUND-COLOR: #5a86b5;
- COLOR: #ffffff;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px;
- FONT-WEIGHT: 500;
- BORDER-BOTTOM:#000000 1px solid ;
-}
-
-.tabla_busquedas TD{
- COLOR: #003300;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px;
-}
-
-.tablaipes{
- BACKGROUND-COLOR: #b5daad;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 9px
-}
-
-.estilodesple{
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px
-}
-
-.cajatexto{
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px
-}
+ BORDER-RIGHT:#4f4f4f 1px solid;
+}
+
+.tabla_listados_sin TD{
+ BACKGROUND-COLOR: #EEEECC;
+ COLOR: #000000;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11;
+}
+A.tabla_listados_sin:visited{
+ COLOR: #000000;
+ FONT-FAMILY: sans-serif;
+ FONT-SIZE: 11px;
+}
+A.tabla_listados_sin:link{
+ COLOR: #000000;
+ FONT-FAMILY: sans-serif;
+ FONT-SIZE: 11px;
+}
+
+.recuadros{
+ BACKGROUND-COLOR: lightseagreen;
+ BORDER-BOTTOM: teal solid;
+ BORDER-LEFT: #b4e0d2 solid;
+ BORDER-RIGHT: teal solid;
+ BORDER-TOP: #b4e0d2 solid;
+ COLOR: white;
+ FONT-STYLE: italic
+}
+
+.tabla_meses{
+}
+
+.tabla_meses TH{
+ BACKGROUND-COLOR: #b5daad;
+ COLOR: #000000;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px;
+ FONT-WEIGHT: 500;
+ BORDER-BOTTOM: #999999 1px solid;
+ BORDER-LEFT: #999999 1px solid;
+ BORDER-RIGHT: #999999 1px solid;
+ BORDER-TOP: #999999 1px solid;
+}
+
+.tabla_meses TD{
+ BACKGROUND-COLOR: #EEEECC;
+ COLOR: #003300;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 12px;
+ BORDER-BOTTOM: #d4d4d4 1px solid;
+ BORDER-LEFT: #d4d4d4 1px solid;
+
+}
+
+.tabla_reservas{
+}
+
+.tabla_reservas TH{
+ BACKGROUND-COLOR: #B5DAAD;
+ COLOR: #000000;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 10px;
+ FONT-WEIGHT: 700;
+}
+
+.tabla_reservas TD{
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 10px;
+
+}
+.tabla_busquedas{
+}
+
+.tabla_busquedas TH{
+ BACKGROUND-COLOR: #5a86b5;
+ COLOR: #ffffff;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px;
+ FONT-WEIGHT: 500;
+ BORDER-BOTTOM:#000000 1px solid ;
+}
+
+.tabla_busquedas TD{
+ COLOR: #003300;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px;
+}
+
+.tablaipes{
+ BACKGROUND-COLOR: #b5daad;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 9px
+}
+
+.estilodesple{
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px
+}
+
+.cajatexto{
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px
+}
.cajacomandos{
BACKGROUND-COLOR: #ffffff;
- COLOR: #000000;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 12px
+ COLOR: #000000;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 12px
}
.salidacomandos{
BACKGROUND-COLOR: #000000;
- COLOR: #ffffff;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 12px
-}
-
-.tabla_parametros{
-}
-
-.tabla_parametros TH{
- BACKGROUND-COLOR: #D4D4D4;
- COLOR: #000000;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 12px;
- FONT-WEIGHT: 700;
- BORDER-BOTTOM:#000000 1px solid ;
-
-}
-.tabla_parametros TD{
- BACKGROUND-COLOR: #B5DAAD;
- COLOR: #003300;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px;
- BORDER-BOTTOM:#000000 1px solid;
-
-}
-.opciones_ejecucion{
- BORDER-TOP: silver thin solid;
- BORDER-BOTTOM: silver thin solid;
- BORDER-LEFT: silver thin solid;
- BORDER-RIGHT: silver thin solid;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px;
-}
-
-.tablaprogramacion TABLE{
-}
-
-.tablaprogramacion TH{
- FONT-WEIGHT: bold;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px;
- BORDER-LEFT: medium none;
- COLOR: white;
- BACKGROUND-COLOR: lightseagreen;
- TEXT-ALIGN: left;
-}
-
-.tablaprogramacion TD{
- FONT-SIZE: 9pt;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- COLOR: #000000;
-
-}
-
-.botonprogramacion{
- BORDER-BOTTOM: #666666 1px solid;
- BORDER-TOP: #ffffff 1px solid;
- BORDER-LEFT: #ffffff 1px solid;
- BORDER-RIGHT: #666666 1px solid;
- BACKGROUND-COLOR: #EEEECC;
- FONT-SIZE: 9pt;
- COLOR: #000000;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
-}
-
-.tabla_accesos{
-}
-
-.tabla_accesos TH{
- BACKGROUND-COLOR: lightseagreen;
- COLOR: #ffffff;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px;
- FONT-WEIGHT: 500;
- BORDER-BOTTOM:#000000 1px solid ;
-}
-
-.tabla_accesos TD{
- COLOR: #003300;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 11px;
-}
-.mensajebrowser{
- BORDER-BOTTOM: #999999 1px solid;
- BORDER-LEFT: #999999 1px solid;
- BORDER-RIGHT: #999999 1px solid;
+ COLOR: #ffffff;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 12px
+}
+
+.tabla_parametros{
+}
+
+.tabla_parametros TH{
+ BACKGROUND-COLOR: #D4D4D4;
+ COLOR: #000000;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 12px;
+ FONT-WEIGHT: 700;
+ BORDER-BOTTOM:#000000 1px solid ;
+
+}
+.tabla_parametros TD{
+ BACKGROUND-COLOR: #B5DAAD;
+ COLOR: #003300;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px;
+ BORDER-BOTTOM:#000000 1px solid;
+
+}
+.opciones_ejecucion{
+ BORDER-TOP: silver thin solid;
+ BORDER-BOTTOM: silver thin solid;
+ BORDER-LEFT: silver thin solid;
+ BORDER-RIGHT: silver thin solid;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px;
+}
+
+.tablaprogramacion TABLE{
+}
+
+.tablaprogramacion TH{
+ FONT-WEIGHT: bold;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px;
+ BORDER-LEFT: medium none;
+ COLOR: white;
+ BACKGROUND-COLOR: lightseagreen;
+ TEXT-ALIGN: left;
+}
+
+.tablaprogramacion TD{
+ FONT-SIZE: 9pt;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ COLOR: #000000;
+
+}
+
+.botonprogramacion{
+ BORDER-BOTTOM: #666666 1px solid;
+ BORDER-TOP: #ffffff 1px solid;
+ BORDER-LEFT: #ffffff 1px solid;
+ BORDER-RIGHT: #666666 1px solid;
+ BACKGROUND-COLOR: #EEEECC;
+ FONT-SIZE: 9pt;
+ COLOR: #000000;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+}
+
+.tabla_accesos{
+}
+
+.tabla_accesos TH{
+ BACKGROUND-COLOR: lightseagreen;
+ COLOR: #ffffff;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px;
+ FONT-WEIGHT: 500;
+ BORDER-BOTTOM:#000000 1px solid ;
+}
+
+.tabla_accesos TD{
+ COLOR: #003300;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 11px;
+}
+.mensajebrowser{
+ BORDER-BOTTOM: #999999 1px solid;
+ BORDER-LEFT: #999999 1px solid;
+ BORDER-RIGHT: #999999 1px solid;
BORDER-TOP: #999999 1px solid;
- BACKGROUND-COLOR: #FFFFFF;
- COLOR: #999999;
- FONT-FAMILY: Arial, Helvetica, sans-serif;
- FONT-SIZE: 14px;
- FONT-WEIGHT: 300;
-}
-
+ BACKGROUND-COLOR: #FFFFFF;
+ COLOR: #999999;
+ FONT-FAMILY: Arial, Helvetica, sans-serif;
+ FONT-SIZE: 14px;
+ FONT-WEIGHT: 300;
+}
+
diff --git a/admin/WebConsole/frames.php b/admin/WebConsole/frames.php
index 564be519..fc5b5f66 100644
--- a/admin/WebConsole/frames.php
+++ b/admin/WebConsole/frames.php
@@ -10,9 +10,22 @@
// *******************************************************************************************************
include_once("./includes/ctrlacc.php");
include_once("./includes/constantes.php");
+if (! empty ($_POST['idmicentro'])) {
+ $cambiocentro=split(",",$_POST['idmicentro']);
+ $_SESSION["widcentro"]=$cambiocentro[0];
+ $_SESSION["wnombrecentro"]=$cambiocentro[1];
+ }
if (empty ($idioma)) $idioma="esp";
include_once("./idiomas/php/$idioma/acceso_$idioma.php");
//________________________________________________________________________________________________________
+// ********************************************************************************************************
+// Compatibilidad
+$device="";$device = strtolower($_SERVER['HTTP_USER_AGENT']);
+if(stripos($device,'iphone') !== false ){$device="iphone";}
+elseif (stripos($device,'ipad') !== false) {$device="ipad";}
+elseif (stripos($device,'android') !== false){$device="android";}
+else{$device=0;}
+// ********************************************************************************************************
?>
<html>
<head>
@@ -24,15 +37,25 @@ include_once("./idiomas/php/$idioma/acceso_$idioma.php");
<FRAME SRC="barramenu.php" frameborder=1 scrolling=no NAME="frame_menus" >
<FRAMESET cols="22%,*">
<?php if($idtipousuario!=$SUPERADMINISTRADOR)
- echo '<FRAME SRC="./principal/aulas.php" frameborder=1 scrolling=auto NAME="frame_arbol" >';
+ if ($device=="0")
+ {echo '<FRAME SRC="./principal/aulas.php" frameborder=1 scrolling=auto NAME="frame_arbol" >';}
+ else
+ {echo '<FRAME SRC="./principal/aulas.device.php" frameborder=1 scrolling=auto NAME="frame_arbol" >';}
else{
if($idtipousuario==$SUPERADMINISTRADOR)
- echo '<FRAME SRC="./principal/administracion.php" frameborder=1 scrolling=auto NAME="frame_arbol" >';
+ if ($device=="0")
+ {echo '<FRAME SRC="./principal/administracion.php" frameborder=1 scrolling=auto NAME="frame_arbol" >';}
+ else
+ {echo '<FRAME SRC="./principal/administracion.device.php" frameborder=1 scrolling=auto NAME="frame_arbol" >';}
}
?>
<FRAME SRC="nada.php" frameborder=0 NAME="frame_contenidos">
- </FRAMESET>
</FRAMESET>
+ <noframes>
+ <body>
+ <p><strong><?php echo $TbMsg["ACCESS_NOFRAMES"];?></strong></p>
+ </body>
+ </noframes>
</FRAMESET>
</html>
diff --git a/admin/WebConsole/gestores/gestor_aulas.php b/admin/WebConsole/gestores/gestor_aulas.php
index a2630809..e584dd29 100644
--- a/admin/WebConsole/gestores/gestor_aulas.php
+++ b/admin/WebConsole/gestores/gestor_aulas.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -17,6 +17,7 @@ include_once("../includes/constantes.php");
include_once("./relaciones/aulas_eliminacion.php");
include_once("./relaciones/ordenadores_eliminacion.php");
include_once("../includes/opciones.php");
+include_once("../includes/tftputils.php");
include_once("./relaciones/gruposordenadores_eliminacion.php");
//________________________________________________________________________________________________________
$opcion=0; // Inicializa parametros
@@ -36,7 +37,6 @@ $idmenu=0;
$idproautoexec=0;
$idrepositorio=0;
$idperfilhard=0;
-$cache=0;
$modomul=0;
$ipmul="";
$pormul=0;
@@ -46,16 +46,22 @@ $router=0;
$netmask=0;
$modp2p=0;
$timep2p=0;
-############ ADV
+############ Ramón
+$dns="";
+$proxy="";
+############ UHU
+$validacion="";
+$paginalogin="";
+$paginavalidacion="";
+############ UHU
//##agp
-if($_FILES['archivo']['type']=="image/gif" || $_FILES['archivo']['type']=="image/jpeg" || $_FILES['archivo']['type']=="image/jpg" || $_FILES['archivo']['type']=="image/png" || $_FILES['archivo']['type']=="image/JPG")
-{
- $uploaddir ="../images/fotos/";
-
- $uploadfile = $uploaddir.$_FILES['archivo']['name'];
-
-move_uploaded_file($_FILES['archivo']['tmp_name'], $uploadfile);
-#copy($_FILES['archivo']['tmp_name'], $uploadfile);
+if (isset($_FILES['archivo'])) {
+ if($_FILES['archivo']['type']=="image/gif" || $_FILES['archivo']['type']=="image/jpeg" || $_FILES['archivo']['type']=="image/jpg" || $_FILES['archivo']['type']=="image/png" || $_FILES['archivo']['type']=="image/JPG") {
+ $uploaddir ="../images/fotos/";
+ $uploadfile = $uploaddir.$_FILES['archivo']['name'];
+ move_uploaded_file($_FILES['archivo']['tmp_name'], $uploadfile);
+ #copy($_FILES['archivo']['tmp_name'], $uploadfile);
+ }
}
//##agp
if (isset($_POST["opcion"])) $opcion=$_POST["opcion"]; // Recoge parametros
@@ -77,7 +83,6 @@ if (isset($_POST["idmenu"])) $idmenu=$_POST["idmenu"];
if (isset($_POST["idprocedimiento"])) $idproautoexec=$_POST["idprocedimiento"];
if (isset($_POST["idrepositorio"])) $idrepositorio=$_POST["idrepositorio"];
if (isset($_POST["idperfilhard"])) $idperfilhard=$_POST["idperfilhard"];
-if (isset($_POST["cache"])) $cache=$_POST["cache"];
if (isset($_POST["modomul"])) $modomul=$_POST["modomul"];
if (isset($_POST["ipmul"])) $ipmul=$_POST["ipmul"];
if (isset($_POST["pormul"])) $pormul=$_POST["pormul"];
@@ -87,19 +92,24 @@ if (isset($_POST["router"])) $router=$_POST["router"];
if (isset($_POST["netmask"])) $netmask=$_POST["netmask"];
if (isset($_POST["modp2p"])) $modp2p=$_POST["modp2p"];
if (isset($_POST["timep2p"])) $timep2p=$_POST["timep2p"];
-################# ADV
+################# Ramón
+if (isset($_POST["dns"])) $dns=$_POST["dns"];
+if (isset($_POST["proxy"])) $proxy=$_POST["proxy"];
+################# UHU
+if (isset($_POST["validacion"])) $validacion=$_POST["validacion"];
+if (isset($_POST["paginalogin"])) $paginalogin=$_POST["paginalogin"];
+if (isset($_POST["paginavalidacion"])) $paginavalidacion=$_POST["paginavalidacion"];
+################# UHU
$gidmenu=0;
$gidproautoexec=0;
$gidrepositorio=0;
$gidperfilhard=0;
-$gcache=0;
-
+
if (isset($_POST["gidmenu"])) $gidmenu=$_POST["gidmenu"];
if (isset($_POST["gidprocedimiento"])) $gidproautoexec=$_POST["gidprocedimiento"];
if (isset($_POST["gidrepositorio"])) $gidrepositorio=$_POST["gidrepositorio"];
if (isset($_POST["gidperfilhard"])) $gidperfilhard=$_POST["gidperfilhard"];
-if (isset($_POST["gcache"])) $gcache=$_POST["gcache"];
$tablanodo=""; // Arbol para nodos insertados
$cmd=CreaComando($cadenaconexion); // Crea objeto comando
@@ -115,7 +125,7 @@ if ($cmd){
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<BODY>
<SCRIPT language="javascript" src="../jscripts/propiedades_aulas.js"></SCRIPT>
-<?
+<?php
$literal="";
switch($opcion){
case $op_alta :
@@ -150,7 +160,7 @@ else{
?>
</BODY>
</HTML>
-<?
+<?php
/**************************************************************************************************************************************************
Inserta, modifica o elimina datos en la tabla aulas
________________________________________________________________________________________________________*/
@@ -176,13 +186,11 @@ function Gestiona(){
global $idproautoexec;
global $idrepositorio;
global $idperfilhard;
- global $cache;
global $gidmenu;
global $gidproautoexec;
global $gidrepositorio;
global $gidperfilhard;
- global $gcache;
global $modomul;
global $ipmul;
@@ -193,7 +201,15 @@ function Gestiona(){
global $netmask;
global $modp2p;
global $timep2p;
-########################## ADV
+########################## Ramón
+ global $dns;
+ global $proxy;
+ global $idioma;
+########################## UHU
+ global $validacion;
+ global $paginalogin;
+ global $paginavalidacion;
+########################## UHU
global $op_alta;
global $op_modificacion;
@@ -201,7 +217,6 @@ function Gestiona(){
global $tablanodo;
-
$cmd->CreaParametro("@grupoid",$grupoid,1);
$cmd->CreaParametro("@idcentro",$idcentro,1);
@@ -219,7 +234,8 @@ function Gestiona(){
$cmd->CreaParametro("@idproautoexec",$idproautoexec,1);
$cmd->CreaParametro("@idrepositorio",$idrepositorio,1);
$cmd->CreaParametro("@idperfilhard",$idperfilhard,1);
- $cmd->CreaParametro("@cache",$cache,1);
+ $cmd->CreaParametro("@dns",$dns,0);
+ $cmd->CreaParametro("@proxy",$proxy,0);
$cmd->CreaParametro("@modomul",$modomul,1);
$cmd->CreaParametro("@ipmul",$ipmul,0);
$cmd->CreaParametro("@pormul",$pormul,1);
@@ -230,13 +246,25 @@ function Gestiona(){
$cmd->CreaParametro("@modp2p",$modp2p,0);
$cmd->CreaParametro("@timep2p",$timep2p,1);
############### ADV
+############### UHU
+ $cmd->CreaParametro("@validacion",$validacion,1);
+ $cmd->CreaParametro("@paginalogin",$paginalogin,0);
+ $cmd->CreaParametro("@paginavalidacion",$paginavalidacion,0);
+############### UHU
switch($opcion){
case $op_alta :
- $cmd->texto="INSERT INTO aulas(idcentro,grupoid,nombreaula,urlfoto,cagnon,pizarra,ubicacion,comentarios,
- puestos,horaresevini,horaresevfin,modomul,ipmul,pormul,velmul,router,netmask,modp2p,timep2p)
- VALUES (@idcentro,@grupoid,@nombreaula,@urlfoto,@cagnon,@pizarra,@ubicacion,@comentarios,
- @puestos,@horaresevini,@horaresevfin,@modomul,@ipmul,@pormul,@velmul,@router,@netmask,@modp2p,@timep2p)";
+ $cmd->texto="INSERT INTO aulas
+ (idcentro, grupoid, nombreaula, urlfoto, cagnon,
+ pizarra, ubicacion, comentarios, puestos,
+ horaresevini, horaresevfin, router, netmask,
+ dns, proxy, modomul, ipmul, pormul, velmul,
+ modp2p, timep2p, validacion, paginalogin, paginavalidacion)
+ VALUES (@idcentro, @grupoid, @nombreaula, @urlfoto, @cagnon,
+ @pizarra, @ubicacion, @comentarios, @puestos,
+ @horaresevini, @horaresevfin, @router, @netmask,
+ @dns, @proxy, @modomul, @ipmul, @pormul, @velmul,
+ @modp2p, @timep2p, @validacion, @paginalogin, @paginavalidacion)";
$resul=$cmd->Ejecutar();
if ($resul){ // Crea una tabla nodo para devolver a la página que llamó ésta
$idaula=$cmd->Autonumerico();
@@ -248,11 +276,17 @@ function Gestiona(){
}
break;
case $op_modificacion:
- $cmd->texto="UPDATE aulas SET nombreaula=@nombreaula,urlfoto=@urlfoto,cagnon=@cagnon,pizarra=@pizarra,
- ubicacion=@ubicacion,comentarios=@comentarios,puestos=@puestos,horaresevini=@horaresevini,
- horaresevfin=@horaresevfin,modomul=@modomul,ipmul=@ipmul,pormul=@pormul,velmul=@velmul,router=@router,netmask=@netmask,modp2p=@modp2p,timep2p=@timep2p WHERE idaula=@idaula";
+ $cmd->texto="UPDATE aulas SET
+ nombreaula=@nombreaula, urlfoto=@urlfoto, cagnon=@cagnon,
+ pizarra=@pizarra, ubicacion=@ubicacion,
+ comentarios=@comentarios, puestos=@puestos,
+ horaresevini=@horaresevini, horaresevfin=@horaresevfin,
+ router=@router,netmask=@netmask, dns=@dns, proxy=@proxy,
+ modomul=@modomul, ipmul=@ipmul, pormul=@pormul, velmul=@velmul,
+ modp2p=@modp2p, timep2p=@timep2p, validacion=@validacion,
+ paginalogin=@paginalogin, paginavalidacion=@paginavalidacion
+ WHERE idaula=@idaula";
$resul=$cmd->Ejecutar();
- //echo $cmd->texto;
if ($resul){ // Crea una tabla nodo para devolver a la página que llamó ésta
$clsUpdate="";
if($idmenu>0 || $gidmenu>0)
@@ -263,15 +297,19 @@ function Gestiona(){
$clsUpdate.="idrepositorio=@idrepositorio,";
if($idperfilhard>0 || $gidperfilhard>0)
$clsUpdate.="idperfilhard=@idperfilhard,";
- if($cache!=0 || $gcache>0)
- $clsUpdate.="cache=@cache,";
+ // UHU - Actualiza la validacion en los ordenadores
+ $clsUpdate .="validacion=@validacion,";
+ $clsUpdate .="paginalogin=@paginalogin,";
+ $clsUpdate .="paginavalidacion=@paginavalidacion,";
+
if(!empty($clsUpdate)){
$clsUpdate=substr($clsUpdate,0,strlen($clsUpdate)-1); // Quita última coma
$cmd->texto="UPDATE ordenadores SET ".$clsUpdate." WHERE idaula=@idaula";
$resul=$cmd->Ejecutar();
- //echo $cmd->texto;
}
+ // Actualizar ficheros PXE de todos los ordenadores afectados.
+ updateBootMode ($cmd, "idaula", $idaula, $idioma);
}
break;
case $op_eliminacion :
diff --git a/admin/WebConsole/gestores/gestor_ejecutaracciones.php b/admin/WebConsole/gestores/gestor_ejecutaracciones.php
index ae652af5..cf53f5c4 100644
--- a/admin/WebConsole/gestores/gestor_ejecutaracciones.php
+++ b/admin/WebConsole/gestores/gestor_ejecutaracciones.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -137,7 +137,7 @@ function actualizaAutoexec($idprocedimiento)
$resul=$cmd->Ejecutar();
return(resul);
}
-//________________________________________________________________________________________________________
+//________________________________________recorreProcedimientos________________________________________________________________
//
// Ejecuta un procedimiento: lo registra en acciones y lo envía por la red
//________________________________________________________________________________________________________
@@ -232,7 +232,8 @@ function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambit
global $cadenaid;
global $cadenaip;
global $cmd;
- global $vez;
+ global $sesion;
+ global $vez;
if($ambito==0){ // Ambito restringido a un subconjuto de ordenadores con formato (idordenador1,idordenador2,etc)
$cmd->ParamSetValor("@restrambito",$idambito);
@@ -255,7 +256,7 @@ function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambit
$cmd->ParamSetValor("@idordenador",$auxID[$i]);
$cmd->ParamSetValor("@ip",$auxIP[$i]);
$cmd->texto="INSERT INTO acciones (idordenador,tipoaccion,idtipoaccion,descriaccion,ip,sesion,idcomando,parametros,fechahorareg,estado,resultado,ambito,idambito,restrambito,idprocedimiento,idtarea,idcentro)
- VALUES (@idordenador,@tipoaccion,@idtipoaccion,@descriaccion,@ip,@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idprocedimiento,@idtarea,@idcentro)";
+ VALUES (@idordenador,@tipoaccion,@idtipoaccion,@descriaccion,@ip,@sesion,@idcomando,@parametros,@fechahorareg,@estado,@resultado,@ambito,@idambito,@restrambito,@idprocedimiento,@idtarea,@idcentro)";
$resul=$cmd->Ejecutar();
//echo $cmd->texto;
if(!$resul) return(false);
@@ -263,10 +264,9 @@ function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambit
/* Sólo envía por la red el primer comando, el resto, si hubiera,
lo encontrará el cliente a través de los comandos pendientes */
if(empty($vez)){
- $idaccion=$cmd->Autonumerico();
- if(!enviaComando($parametros,$idaccion)) return(false);
+ if(!enviaComando($parametros,$sesion)) return(false);
+ $vez++;
}
- $vez++;
}
return(true);
}
@@ -274,7 +274,7 @@ function insertaComando($idcomando,$parametros,$idprocedimiento,$ambito,$idambit
//
// Envia un procedimiento a un grupo de ordenadores a través de la red
//________________________________________________________________________________________________________
-function enviaComando($parametros,$idaccion)
+function enviaComando($parametros,$sesion)
{
global $cadenaid;
global $cadenaip;
@@ -287,7 +287,7 @@ function enviaComando($parametros,$idaccion)
// Envio al servidor
$aplicacion=chr(13)."ido=".$cadenaid.chr(13)."mac=".$cadenamac.chr(13)."iph=".$cadenaip.chr(13);
- $acciones=chr(13)."ids=".$idaccion.chr(13); // Para seguimiento
+ $acciones=chr(13)."ids=".$sesion.chr(13); // Para seguimiento
if ($shidra->conectar()){ // Se ha establecido la conexión con el servidor hidra
$parametros.=$aplicacion;
@@ -299,3 +299,4 @@ function enviaComando($parametros,$idaccion)
return(true);
}
?>
+
diff --git a/admin/WebConsole/gestores/gestor_grupos.php b/admin/WebConsole/gestores/gestor_grupos.php
index b20ed22e..e846e112 100644
--- a/admin/WebConsole/gestores/gestor_grupos.php
+++ b/admin/WebConsole/gestores/gestor_grupos.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -67,7 +67,7 @@ if ($cmd){
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<BODY>
<SCRIPT language="javascript" src="../jscripts/propiedades_grupos.js"></SCRIPT>
-<?
+<?php
$literal="";
switch($opcion){
case $op_alta :
@@ -100,7 +100,7 @@ else{
?>
</BODY>
</HTML>
-<?
+<?php
/**************************************************************************************************************************************************
Inserta, modifica o elimina datos en la tabla grupos
________________________________________________________________________________________________________*/
@@ -184,7 +184,9 @@ function EliminaGrupos($cmd,$identificador,$nombreid,$literaltipo,$swid=1){
if (empty($identificador)) return(true);
global $LITAMBITO_GRUPOSAULAS ;
- global $LITAMBITO_GRUPOSIMAGENES ;
+ global $LITAMBITO_GRUPOSIMAGENESMONOLITICAS ;
+ global $LITAMBITO_GRUPOSIMAGENESBASICAS ;
+ global $LITAMBITO_GRUPOSIMAGENESINCREMENTALES ;
global $LITAMBITO_GRUPOSPROCEDIMIENTOS ;
global $LITAMBITO_GRUPOSTAREAS ;
global $LITAMBITO_GRUPOSTRABAJOS ;
@@ -223,9 +225,15 @@ function EliminaGrupos($cmd,$identificador,$nombreid,$literaltipo,$swid=1){
case $LITAMBITO_GRUPOSTRABAJOS :
$resul=EliminaTrabajos($cmd,$rs->campos["idgrupo"],"grupoid");
break;
- case $LITAMBITO_GRUPOSIMAGENES :
+ case $LITAMBITO_GRUPOSIMAGENESMONOLITICAS :
$resul=EliminaImagenes($cmd,$rs->campos["idgrupo"],"grupoid");
break;
+ case $LITAMBITO_GRUPOSIMAGENESBASICAS :
+ $resul=EliminaImagenes($cmd,$rs->campos["idgrupo"],"grupoid");
+ break;
+ case $LITAMBITO_GRUPOSIMAGENESINCREMENTALES :
+ $resul=EliminaImagenes($cmd,$rs->campos["idgrupo"],"grupoid");
+ break;
case $LITAMBITO_GRUPOSCOMPONENTESHARD :
$resul=EliminaHardwares($cmd,$rs->campos["idgrupo"],"grupoid");
break;
@@ -271,3 +279,4 @@ function EliminaGrupos($cmd,$identificador,$nombreid,$literaltipo,$swid=1){
return($resul);
}
?>
+
diff --git a/admin/WebConsole/gestores/gestor_imagenes.php b/admin/WebConsole/gestores/gestor_imagenes.php
index bbffd63a..95d2d97f 100644
--- a/admin/WebConsole/gestores/gestor_imagenes.php
+++ b/admin/WebConsole/gestores/gestor_imagenes.php
@@ -21,6 +21,7 @@ $opcion=0; // Inicializa parametros
$idimagen=0;
$nombreca="";
+$ruta="";
$descripcion="";
$grupoid=0;
$idperfilsoft=0;
@@ -28,11 +29,15 @@ $comentarios="";
$numpar=0;
$codpar=0;
$idrepositorio=0;
+$imagenid=0;
+$tipoimg=0;
+$litamb="";
if (isset($_POST["opcion"])) $opcion=$_POST["opcion"]; // Recoge parametros
if (isset($_POST["idimagen"])) $idimagen=$_POST["idimagen"];
if (isset($_POST["nombreca"])) $nombreca=$_POST["nombreca"];
+if (isset($_POST["ruta"])) $ruta=$_POST["ruta"];
if (isset($_POST["descripcion"])) $descripcion=$_POST["descripcion"];
if (isset($_POST["grupoid"])) $grupoid=$_POST["grupoid"];
if (isset($_POST["idperfilsoft"])) $idperfilsoft=$_POST["idperfilsoft"];
@@ -41,6 +46,9 @@ if (isset($_POST["identificador"])) $idimagen=$_POST["identificador"];
if (isset($_POST["numpar"])) $numpar=$_POST["numpar"];
if (isset($_POST["codpar"])) $codpar=$_POST["codpar"];
if (isset($_POST["idrepositorio"])) $idrepositorio=$_POST["idrepositorio"];
+if (isset($_POST["imagenid"])) $imagenid=$_POST["imagenid"];
+if (isset($_POST["tipoimg"])) $tipoimg=$_POST["tipoimg"];
+if (isset($_POST["litamb"])) $litamb=$_POST["litamb"];
$tablanodo=""; // Arbol para nodos insertados
@@ -95,9 +103,9 @@ if($opcion!=$op_movida){
echo '</BODY> ';
echo '</HTML>';
}
-/**************************************************************************************************************************************************
+/*********************************************************************************************************
Inserta, modifica o elimina datos en la tabla imagenes
-________________________________________________________________________________________________________*/
+/*********************************************************************************************************/
function Gestiona(){
global $cmd;
global $opcion;
@@ -105,13 +113,16 @@ function Gestiona(){
global $idcentro;
global $idimagen;
global $nombreca;
+ global $ruta;
global $descripcion;
global $grupoid;
global $comentarios;
global $numpar;
global $codpar;
global $idrepositorio;
+ global $imagenid;
global $idperfilsoft;
+ global $tipoimg;
global $op_alta;
global $op_modificacion;
@@ -124,6 +135,7 @@ function Gestiona(){
$cmd->CreaParametro("@idimagen",$idimagen,1);
$cmd->CreaParametro("@nombreca",$nombreca,0);
+ $cmd->CreaParametro("@ruta",$ruta,0);
$cmd->CreaParametro("@descripcion",$descripcion,0);
$cmd->CreaParametro("@grupoid",$grupoid,1);
$cmd->CreaParametro("@idperfilsoft",$idperfilsoft,1);
@@ -131,11 +143,13 @@ function Gestiona(){
$cmd->CreaParametro("@numpar",$numpar,1);
$cmd->CreaParametro("@codpar",$codpar,1);
$cmd->CreaParametro("@idrepositorio",$idrepositorio,1);
+ $cmd->CreaParametro("@imagenid",$imagenid,1);
+ $cmd->CreaParametro("@tipo",$tipoimg,1);
switch($opcion){
case $op_alta :
- $cmd->texto="INSERT INTO imagenes (nombreca,descripcion,idperfilsoft,comentarios,numpar,codpar,idrepositorio,idcentro,grupoid)
- VALUES (@nombreca,@descripcion,@idperfilsoft,@comentarios,@numpar,@codpar,@idrepositorio,@idcentro,@grupoid)";
+ $cmd->texto="INSERT INTO imagenes (nombreca,ruta,descripcion,idperfilsoft,comentarios,numpar,codpar,idrepositorio,imagenid,idcentro,grupoid,tipo)
+ VALUES (@nombreca,@ruta,@descripcion,@idperfilsoft,@comentarios,@numpar,@codpar,@idrepositorio,@imagenid,@idcentro,@grupoid,@tipo)";
$resul=$cmd->Ejecutar();
if ($resul){ // Crea una tabla nodo para devolver a la página que llamó ésta
$idimagen=$cmd->Autonumerico();
@@ -147,9 +161,10 @@ function Gestiona(){
}
break;
case $op_modificacion:
- $cmd->texto="UPDATE imagenes SET nombreca=@nombreca,descripcion=@descripcion,idperfilsoft=@idperfilsoft,
- comentarios=@comentarios,numpar=@numpar,codpar=@codpar,idrepositorio=@idrepositorio
- WHERE idimagen=@idimagen";
+ $cmd->texto="UPDATE imagenes SET nombreca=@nombreca,ruta=@ruta,descripcion=@descripcion,idperfilsoft=@idperfilsoft,
+ comentarios=@comentarios,numpar=@numpar,codpar=@codpar,idrepositorio=@idrepositorio,
+ imagenid=@imagenid
+ WHERE idimagen=@idimagen";
$resul=$cmd->Ejecutar();
break;
case $op_eliminacion :
@@ -167,14 +182,16 @@ function Gestiona(){
/*________________________________________________________________________________________________________
Crea un arbol XML para el nuevo nodo insertado
________________________________________________________________________________________________________*/
-function SubarbolXML_imagenes($idimagen,$descripcion){
- global $LITAMBITO_IMAGENES;
+function SubarbolXML_imagenes($idimagen,$descripcion)
+{
+ global $litamb;
+
$cadenaXML='<IMAGEN';
// Atributos
$cadenaXML.=' imagenodo="../images/iconos/imagen.gif"';
$cadenaXML.=' infonodo="'.$descripcion.'"';
- $cadenaXML.=' clickcontextualnodo="menu_contextual(this,' ."'flo_".$LITAMBITO_IMAGENES."'" .')"';
- $cadenaXML.=' nodoid='.$LITAMBITO_IMAGENES.'-'.$idimagen;
+ $cadenaXML.=' clickcontextualnodo="menu_contextual(this,' ."'flo_".$litamb."'" .')"';
+ $cadenaXML.=' nodoid='.$litamb.'-'.$idimagen;
$cadenaXML.='>';
$cadenaXML.='</IMAGEN>';
return($cadenaXML);
diff --git a/admin/WebConsole/gestores/gestor_menus.php b/admin/WebConsole/gestores/gestor_menus.php
index 36e90920..0b1bb948 100644
--- a/admin/WebConsole/gestores/gestor_menus.php
+++ b/admin/WebConsole/gestores/gestor_menus.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -15,6 +15,7 @@ include_once("../clases/ArbolVistaXML.php");
include_once("../includes/CreaComando.php");
include_once("../includes/constantes.php");
include_once("../includes/opciones.php");
+include_once("../includes/tftputils.php");
include_once("./relaciones/menus_eliminacion.php");
//________________________________________________________________________________________________________
$opcion=0; // Inicializa parametros
@@ -132,6 +133,7 @@ function Gestiona(){
global $htmlmenupri;
global $resolucion;
global $idurlimg;
+ global $idioma;
global $op_alta;
global $op_modificacion;
@@ -154,7 +156,7 @@ function Gestiona(){
$cmd->CreaParametro("@grupoid",$grupoid,1);
$cmd->CreaParametro("@htmlmenupub",$htmlmenupub,0);
$cmd->CreaParametro("@htmlmenupri",$htmlmenupri,0);
- $cmd->CreaParametro("@resolucion",$resolucion,1);
+ $cmd->CreaParametro("@resolucion",$resolucion,0);
$cmd->CreaParametro("@idurlimg",$idurlimg,1);
switch($opcion){
@@ -176,8 +178,10 @@ function Gestiona(){
case $op_modificacion:
$cmd->texto="UPDATE menus SET descripcion=@descripcion,titulo=@titulo,coorx=@coorx,coory=@coory,modalidad=@modalidad,scoorx=@scoorx,scoory=@scoory,smodalidad=@smodalidad,
comentarios=@comentarios,htmlmenupub=@htmlmenupub ,htmlmenupri=@htmlmenupri,resolucion=@resolucion,idurlimg=@idurlimg
- WHERE idmenu=@idmenu";
+ WHERE idmenu=@idmenu";
$resul=$cmd->Ejecutar();
+ // Actualizar ficheros PXE de todos los ordenadores afectados.
+ updateBootMode ($cmd, "idmenu", $idmenu, $idioma);
break;
case $op_eliminacion :
$resul=EliminaMenus($cmd,$idmenu,"idmenu");
diff --git a/admin/WebConsole/gestores/gestor_ordenadores.php b/admin/WebConsole/gestores/gestor_ordenadores.php
index 3d754106..58ccb0fd 100644
--- a/admin/WebConsole/gestores/gestor_ordenadores.php
+++ b/admin/WebConsole/gestores/gestor_ordenadores.php
@@ -15,6 +15,7 @@ include_once("../clases/ArbolVistaXML.php");
include_once("../includes/CreaComando.php");
include_once("../includes/constantes.php");
include_once("./relaciones/ordenadores_eliminacion.php");
+include_once("../includes/tftputils.php");
include_once("../includes/opciones.php");
//________________________________________________________________________________________________________
$opcion=0; // Inicializa parametros
@@ -31,11 +32,16 @@ $idrepositorio=0;
$idmenu=0;
$idprocedimiento=0;
$idimagen=0;
-$cache=0;
#### ADV
$netiface="";
$netdriver="";
-### ADV
+### UHU
+$validacion="";
+$paginalogin="";
+$paginavalidacion="";
+### Ramón
+$arranque="";
+
//##agp
if (isset($_FILES['archivo'])) {
if($_FILES['archivo']['type']=="image/gif" || $_FILES['archivo']['type']=="image/jpeg" || $_FILES['archivo']['type']=="image/jpg" || $_FILES['archivo']['type']=="image/png" || $_FILES['archivo']['type']=="image/JPG") {
@@ -59,11 +65,15 @@ if (isset($_POST["idperfilhard"])) $idperfilhard=$_POST["idperfilhard"];
if (isset($_POST["idrepositorio"])) $idrepositorio=$_POST["idrepositorio"];
if (isset($_POST["idmenu"])) $idmenu=$_POST["idmenu"];
if (isset($_POST["idprocedimiento"])) $idprocedimiento=$_POST["idprocedimiento"];
-if (isset($_POST["cache"])) $cache=$_POST["cache"];
-if(empty($cache)) $cache=0;
if (isset($_POST["netiface"])) $netiface=$_POST["netiface"];
if (isset($_POST["netdriver"])) $netdriver=$_POST["netdriver"];
+######## UHU
+if (isset($_POST["validacion"])) $validacion=$_POST["validacion"];
+if (isset($_POST["paginalogin"])) $paginalogin=$_POST["paginalogin"];
+if (isset($_POST["paginavalidacion"])) $paginavalidacion=$_POST["paginavalidacion"];
+######## Ramón
+if (isset($_POST["arranque"])) $arranque=$_POST["arranque"];
$tablanodo=""; // Arbol para nodos insertados
//________________________________________________________________________________________________________
@@ -141,10 +151,9 @@ function toma_aula($cmd,$idgrupo){
Inserta, modifica o elimina datos en la tabla ordenadores
________________________________________________________________________________________________________*/
function Gestiona(){
- global $cmd;
- global $opcion;
+ global $cmd;
+ global $opcion;
global $fotoordenador;
- $fotoordenador="../images/fotos/".$fotoordenador;
global $grupoid;
global $idordenador;
global $nombreordenador;
@@ -155,15 +164,21 @@ function Gestiona(){
global $idrepositorio;
global $idmenu;
global $idprocedimiento;
- global $cache;
global $netiface;
global $netdriver;
+######################## UHU
+ global $validacion;
+ global $paginalogin;
+ global $paginavalidacion;
+######################## Ramón
+ global $arranque;
+ global $idioma;
- global $op_alta;
- global $op_modificacion;
- global $op_eliminacion;
- global $op_movida;
- global $tablanodo;
+ global $op_alta;
+ global $op_modificacion;
+ global $op_eliminacion;
+ global $op_movida;
+ global $tablanodo;
$cmd->CreaParametro("@grupoid",$grupoid,1);
@@ -176,18 +191,22 @@ function Gestiona(){
$cmd->CreaParametro("@idrepositorio",$idrepositorio,1);
$cmd->CreaParametro("@idmenu",$idmenu,1);
$cmd->CreaParametro("@idprocedimiento",$idprocedimiento,1);
- $cmd->CreaParametro("@cache",$cache,1);
$cmd->CreaParametro("@netiface",$netiface,0);
$cmd->CreaParametro("@netdriver",$netdriver,0);
$cmd->CreaParametro("@fotoordenador",$fotoordenador,0);
-
+######################################################### UHU
+ $cmd->CreaParametro("@validacion",$validacion,0);
+ $cmd->CreaParametro("@paginalogin",$paginalogin,0);
+ $cmd->CreaParametro("@paginavalidacion",$paginavalidacion,0);
+######################################################### UHU
+
switch($opcion){
case $op_alta :
- //Insertar fotoord con Values @fotoordenador
+ //Insertar fotoord con Values @fotoordenador
$cmd->texto="INSERT INTO ordenadores(nombreordenador,ip,mac,idperfilhard,idrepositorio,
- idmenu,idproautoexec,idaula,grupoid,cache,netiface,netdriver,fotoord) VALUES (@nombreordenador,@ip,@mac,@idperfilhard,@idrepositorio,
- @idmenu,@idprocedimiento,@idaula,@grupoid,@cache,@netiface,@netdriver,@fotoordenador)";
+ idmenu,idproautoexec,idaula,grupoid,netiface,netdriver,fotoord,validacion,paginalogin,paginavalidacion) VALUES (@nombreordenador,@ip,@mac,@idperfilhard,@idrepositorio,
+ @idmenu,@idprocedimiento,@idaula,@grupoid,@netiface,@netdriver,@fotoordenador,@validacion,@paginalogin,@paginavalidacion)";
$resul=$cmd->Ejecutar();
//echo $cmd->texto;
@@ -199,16 +218,21 @@ function Gestiona(){
$arbol=new ArbolVistaXML($arbolXML,0,$baseurlimg,$clasedefault);
$tablanodo=$arbol->CreaArbolVistaXML();
}
+ // Crear fichero TFTP/PXE por defecto para el nuevo ordenador.
+ createBootMode ($cmd, "", $idordenador, $idioma);
break;
case $op_modificacion:
$cmd->texto="UPDATE ordenadores SET nombreordenador=@nombreordenador,ip=@ip,mac=@mac,idperfilhard=@idperfilhard,
- idrepositorio=@idrepositorio,idmenu=@idmenu,idproautoexec=@idprocedimiento,cache=@cache,netiface=@netiface,netdriver=@netdriver,fotoord=@fotoordenador
+ idrepositorio=@idrepositorio,idmenu=@idmenu,idproautoexec=@idprocedimiento,netiface=@netiface,netdriver=@netdriver,fotoord=@fotoordenador,validacion=@validacion,paginalogin=@paginalogin,paginavalidacion=@paginavalidacion
WHERE idordenador=@idordenador";
$resul=$cmd->Ejecutar();
- //echo $cmd->texto;
+ // Actualizar fichero TFTP/PXE a partir de la plantilla asociada.
+ createBootMode ($cmd, $arranque, $idordenador, $idioma);
break;
case $op_eliminacion :
$resul=EliminaOrdenadores($cmd,$idordenador,"idordenador");// Eliminación en cascada
+ // Borrar fichero PXE.
+ deleteBootFile ($mac);
break;
case $op_movida :
$cmd->texto="UPDATE ordenadores SET idaula=@idaula, grupoid=@grupoid WHERE idordenador=@idordenador";
diff --git a/admin/WebConsole/gestores/gestor_perfilhardwares.php b/admin/WebConsole/gestores/gestor_perfilhardwares.php
index a9ee3294..43f50a28 100644
--- a/admin/WebConsole/gestores/gestor_perfilhardwares.php
+++ b/admin/WebConsole/gestores/gestor_perfilhardwares.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -15,6 +15,7 @@ include_once("../clases/ArbolVistaXML.php");
include_once("../includes/CreaComando.php");
include_once("../includes/constantes.php");
include_once("../includes/opciones.php");
+include_once("../includes/tftputils.php");
include_once("./relaciones/perfileshard_eliminacion.php");
//________________________________________________________________________________________________________
$opcion=0; // Inicializa parametros
@@ -102,8 +103,8 @@ function Gestiona(){
global $comentarios;
global $grupoid;
global $winboot;
-
- global $urlimgth;
+ global $idioma;
+ global $urlimgth;
global $op_alta;
global $op_modificacion;
@@ -135,6 +136,8 @@ function Gestiona(){
case $op_modificacion:
$cmd->texto="UPDATE perfileshard SET descripcion=@descripcion,comentarios=@comentarios,winboot=@winboot WHERE idperfilhard=@idperfilhard";
$resul=$cmd->Ejecutar();
+ // Actualizar ficheros PXE de todos los ordenadores afectados.
+ updateBootMode ($cmd, "idperfilhard", $idperfilhard, $idioma);
break;
case $op_eliminacion :
$resul=EliminaPerfileshard($cmd,$idperfilhard,"idperfilhard");
diff --git a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php
index d4e67599..4992e1e2 100644
--- a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php
+++ b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php
@@ -7,6 +7,7 @@ include_once("../clases/SockHidra.php");
include_once("../includes/constantes.php");
include_once("../includes/comunes.php");
include_once("../includes/CreaComando.php");
+include_once("../includes/tftputils.php");
include_once("../idiomas/php/".$idioma."/aulas_".$idioma.".php");
$cmd=CreaComando($cadenaconexion);
@@ -29,105 +30,13 @@ foreach ($lista as $sublista) {
$elementos = explode("|",$sublista);
$hostname=$elementos[1];
$optboot=$elementos[0];
- ogBootServer($cmd,$optboot,$hostname,$idioma);
+ createBootMode ($cmd, $optboot, $hostname, $idioma);
}
}
echo " </body>";
echo " </html> ";
-function ogBootServer($cmd,$optboot,$hostname,$idioma)
-{
-global $cmd;
-global $hostname;
-global $optboot;
-global $retrun;
-$return="\n";
-$cmd->CreaParametro("@optboot",$optboot,0);
-$cmd->CreaParametro("@hostname",$hostname,0);
-$cmd->texto="UPDATE ordenadores SET arranque=@optboot WHERE nombreordenador=@hostname";
-$cmd->Ejecutar();
-$cmd->texto="SELECT ordenadores.ip AS ip, ordenadores.mac AS mac,
- ordenadores.netiface AS netiface, aulas.netmask AS netmask,
- aulas.router AS router, repositorios.ip AS iprepo,
- aulas.nombreaula AS grupo,
- menus.resolucion AS vga,
- perfileshard.winboot AS winboot
- FROM ordenadores
- JOIN aulas ON ordenadores.idaula=aulas.idaula
- JOIN repositorios ON ordenadores.idrepositorio=repositorios.idrepositorio
- LEFT JOIN menus ON ordenadores.idmenu=menus.idmenu
- LEFT JOIN perfileshard ON ordenadores.idperfilhard=perfileshard.idperfilhard
- WHERE ordenadores.nombreordenador='". $hostname ."'";
-
-$rs=new Recordset;
-$rs->Comando=&$cmd;
-if (!$rs->Abrir()) echo "error";
-$rs->Primero();
- $mac=$rs->campos["mac"];
- $netiface=$rs->campos["netiface"];
- $ip=$rs->campos["ip"];
- $router=$rs->campos["router"];
- $netmask=$rs->campos["netmask"];
- $repo=$rs->campos["iprepo"];
- $group=cleanString($rs->campos["grupo"]);
- if($rs->campos["vga"]== null || $rs->campos["vga"]== 0)
- $vga="788";
- else
- $vga=$rs->campos["vga"];
- $winboot=$rs->campos["winboot"];
-
-$rs->Cerrar();
-
-$cmd->texto="SELECT ipserveradm FROM entornos";
-$rs=new Recordset;
-$rs->Comando=&$cmd;
-if (!$rs->Abrir()) echo "error";
-
-$rs->Primero();
- $server=$rs->campos["ipserveradm"];
-$rs->Cerrar();
-
-
-switch ($idioma) {
- case "eng":
- $idioma="en_GB";
- break;
- case "esp":
- $idioma="es_ES";
- break;
- case "cat":
- $idioma="ca_ES";
- break;
-}
-
-
-$infohost=" vga=$vga".
- " LANG=$idioma".
- " ip=$ip:$server:$router:$netmask:$hostname:$netiface:none" .
- " group=$group" .
- " ogrepo=$repo" .
- " oglive=$repo" .
- " oglog=$server" .
- " ogshare=$server";
-if (! empty ($winboot)) {
- $infohost.=" winboot=$winboot";
-}
-
-###################obtenemos las variables de red del aula.
-
-#02.1 obtenemos nombre fichero mac
-$pxedir="/opt/opengnsys/tftpboot/menu.lst";
-$mac= substr($mac,0,2) . ":" . substr($mac,2,2) . ":" . substr($mac,4,2) . ":" . substr($mac,6,2) . ":" . substr($mac,8,2) . ":" . substr($mac,10,2);
-$macfile="$pxedir/01-" . str_replace(":","-",strtoupper($mac));
-
-#controlar optboot
-
-exec("sed -e 's/vga=...//g' -e 's/INFOHOST/$infohost/g' $pxedir/templates/$optboot > $macfile");
-exec("chmod 777 $macfile");
-}
-
-
function netmask2cidr($netmask) {
$cidr = 0;
foreach (explode('.', $netmask) as $number) {
@@ -138,12 +47,3 @@ function netmask2cidr($netmask) {
return $cidr;
}
-// Sustituye espacio por "_" y quita acentos y tildes.
-function cleanString ($cadena) {
- $patron = array ('/ /','/á/','/é/','/í/','/ó/','/ú/','/ñ/','/Á/','/É/','/Í/','/Ó/','/Ú/','/Ñ/');
- $reemplazo = array ('_','a','e','i','o','u','n','A','E','I','O','U','N');
- return preg_replace($patron,$reemplazo,$cadena);
-}
-
-?>
-
diff --git a/admin/WebConsole/gestores/relaciones/ordenadores_eliminacion.php b/admin/WebConsole/gestores/relaciones/ordenadores_eliminacion.php
index 0f2415b8..dd008dee 100644
--- a/admin/WebConsole/gestores/relaciones/ordenadores_eliminacion.php
+++ b/admin/WebConsole/gestores/relaciones/ordenadores_eliminacion.php
@@ -1,5 +1,8 @@
-<?
-// *************************************************************************************************************************************************
+<?php
+//Ficheros de inclusión.
+include_once (dirname (__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR. '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'tftputils.php');
+
+// ************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
// Fecha Creación: Año 2009-2010
@@ -12,33 +15,38 @@
// - identificador: El identificador por el que se eliminará el ordenador
// - nombreid: Nombre del campo identificador del registro
// - swid: Indica 0= El identificador es tipo alfanumérico 1= EI identificador es tipo numérico ( valor por defecto)
-//*************************************************************************************************************************************************
-function EliminaOrdenadores($cmd,$identificador,$nombreid,$swid=1)
+//*************************************************************************************************
+function EliminaOrdenadores($cmd,$identificador,$nombreid,$swid=1)
{
- if (empty($identificador)) return(true);
+ if (empty ($identificador)) return (true); // Salir si identificador nulo.
if($swid==0)
- $cmd->texto="SELECT idordenador FROM ordenadores WHERE ".$nombreid."='".$identificador."'";
+ $cmd->texto="SELECT idordenador, mac FROM ordenadores WHERE ".$nombreid."='".$identificador."'";
else
- $cmd->texto='SELECT idordenador FROM ordenadores WHERE '.$nombreid.'='.$identificador;
+ $cmd->texto='SELECT idordenador, mac FROM ordenadores WHERE '.$nombreid.'='.$identificador;
$rs=new Recordset;
$rs->Comando=&$cmd;
- if (!$rs->Abrir()) return(false); // Error al abrir recordset
- if ($rs->numeroderegistros==0) return(true);
+ if (!$rs->Abrir()) return (false); // Error al abrir recordset.
+ if ($rs->numeroderegistros==0) return (true); // No hay registros que borrar.
$rs->Primero();
while (!$rs->EOF){
- $cmd->texto="DELETE FROM ordenadores_particiones WHERE idordenador=".$rs->campos["idordenador"];
+ $mac = $rs->campos["mac"];
+ $cmd->texto="DELETE FROM ordenadores_particiones WHERE idordenador=".$rs->campos["idordenador"];
$resul=$cmd->Ejecutar();
- if (!$resul){
+ if ($resul) {
+ // Borrar fichero PXE asociado.
+ deleteBootFile ($mac);
+ } else {
$rs->Cerrar();
return(false);
}
$rs->Siguiente();
}
- if($swid==0)
- $cmd->texto="DELETE FROM ordenadores WHERE ".$nombreid."='".$identificador."'";
+ if ($swid==0)
+ $cmd->texto="DELETE FROM ordenadores WHERE ".$nombreid."='".$identificador."'";
else
- $cmd->texto='DELETE FROM ordenadores WHERE '.$nombreid.'='.$identificador;
+ $cmd->texto='DELETE FROM ordenadores WHERE '.$nombreid.'='.$identificador;
$resul=$cmd->Ejecutar();
return($resul);
}
?>
+
diff --git a/admin/WebConsole/idiomas/javascripts/cat/comandos/crearimagenbasica_cat.js b/admin/WebConsole/idiomas/javascripts/cat/comandos/crearimagenbasica_cat.js
new file mode 100644
index 00000000..99465fbf
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/cat/comandos/crearimagenbasica_cat.js
@@ -0,0 +1,10 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: crearimagenbasica_esp.js
+// Idioma: Español
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="";
+TbMsg[1]="Debe elegir una imagen para esta partición";
+TbMsg[2]="No ha seleccionado ninguna partición";
+TbMsg[3]="No ha seleccionado ningún método de sincronización";
diff --git a/admin/WebConsole/idiomas/javascripts/cat/comandos/eliminarimagencache_cat.js b/admin/WebConsole/idiomas/javascripts/cat/comandos/eliminarimagencache_cat.js
new file mode 100644
index 00000000..ca8745fb
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/cat/comandos/eliminarimagencache_cat.js
@@ -0,0 +1,8 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: eliminarimagencache_esp.js
+// Idioma: Español
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="";
+TbMsg[1]="Debe elegir al menos una Imagen";
diff --git a/admin/WebConsole/idiomas/javascripts/cat/comandos/restaurarimagenbasica_cat.js b/admin/WebConsole/idiomas/javascripts/cat/comandos/restaurarimagenbasica_cat.js
new file mode 100644
index 00000000..bce2cdc4
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/cat/comandos/restaurarimagenbasica_cat.js
@@ -0,0 +1,14 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: restaurarimagenbasica_esp.js
+// Idioma: Español
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="Debe elegir una imagen para esta partición";
+TbMsg[1]="Debe elegir al menos una partición y una imagen";
+TbMsg[2]="";
+TbMsg[3]="¿ Está seguro ?";
+TbMsg[4]="Debe elegir al menos una imagen para la partición";
+TbMsg[5]="Debe elegir al menos un path de imagen para la partición ";
+TbMsg[6]="Debe elegir la imagen de uno sólo de los desplegables";
+TbMsg[7]="Debe elegir un método de Sincronización";
diff --git a/admin/WebConsole/idiomas/javascripts/cat/comandos/restaurarsoftincremental_cat.es b/admin/WebConsole/idiomas/javascripts/cat/comandos/restaurarsoftincremental_cat.es
new file mode 100644
index 00000000..22a112d9
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/cat/comandos/restaurarsoftincremental_cat.es
@@ -0,0 +1,14 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: restaurarsoftincremental_esp.js
+// Idioma: Español
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="Debe elegir una imagen para esta partición";
+TbMsg[1]="Debe elegir al menos una partición y una imagen";
+TbMsg[2]=" ";
+TbMsg[3]="¿ Está seguro ?";
+TbMsg[4]="Debe elegir al menos una imagen para la partición";
+TbMsg[5]="Debe elegir al menos un path de imagen para la partición ";
+TbMsg[6]="Debe elegir un software incremental para esta partición";
+TbMsg[7]="Debe elegir un método de Sincronización";
diff --git a/admin/WebConsole/idiomas/javascripts/cat/propiedades_aulas_cat.js b/admin/WebConsole/idiomas/javascripts/cat/propiedades_aulas_cat.js
index 8f510866..db27cc88 100644
--- a/admin/WebConsole/idiomas/javascripts/cat/propiedades_aulas_cat.js
+++ b/admin/WebConsole/idiomas/javascripts/cat/propiedades_aulas_cat.js
@@ -1,12 +1,12 @@
//________________________________________________________________________________________________________
//
-// Fichero de idiomas javascript: propiedades_aulas_esp.js
-// Idioma: Español
+// Fichero de idiomas javascript: propiedades_aulas_cat.js
+// Idioma: Catalán
//________________________________________________________________________________________________________
TbMsg=new Array;
TbMsg[0]="Debe introducir un nombre para este aula";
TbMsg[1]="Debe introducir un número de puestos para este aula";
-TbMsg[2]="ATENCIÓN.- Este aula contiene grupos de ordenadores u ordenadores. Si los elimina, eliminará también éstos. ¿ Está seguro ?";
+TbMsg[2]="ATENCIÓN.- Esta aula contiene grupos de ordenadores u ordenadores. Si los elimina, eliminará también éstos. ¿ Está seguro ?";
TbMsg[3]="La hora de comienzo del intervalo de reservas debe ser menor que la hora final";
TbMsg[4]="La direccion del router no es valida";
TbMsg[5]="La mascara de red no es valida";
@@ -16,4 +16,7 @@ TbMsg[8]="Modo multicast no es valido";
TbMsg[9]="La dirección multicast no es valida";
TbMsg[10]="El puerto de multicast no es valida";
TbMsg[11]="La velocidad de multicast no es válida, sólo números";
+TbMsg[12]="La dirección IP del servidor DNS no es válida";
+TbMsg[13]="La URL del servidor Proxy no es válida";
+TbMsg[14]="Deben introducirse datos de validación: página de login y página de validación";
diff --git a/admin/WebConsole/idiomas/javascripts/cat/propiedades_ordenadores_cat.js b/admin/WebConsole/idiomas/javascripts/cat/propiedades_ordenadores_cat.js
index e27af69e..a58baa41 100644
--- a/admin/WebConsole/idiomas/javascripts/cat/propiedades_ordenadores_cat.js
+++ b/admin/WebConsole/idiomas/javascripts/cat/propiedades_ordenadores_cat.js
@@ -9,4 +9,5 @@ TbMsg[1]="Debe introducir una dirección IP";
TbMsg[2]="Debe introducir a una dirección MAC";
TbMsg[3]="";
TbMsg[4]="";
-TbMsg[5]="Debe elegir un repositorio por defecto"; \ No newline at end of file
+TbMsg[5]="Debe elegir un repositorio por defecto";
+TbMsg[6]="Deben introducirse datos de validación: página de login y página de validación";
diff --git a/admin/WebConsole/idiomas/javascripts/eng/comandos/crearimagenbasica_eng.js b/admin/WebConsole/idiomas/javascripts/eng/comandos/crearimagenbasica_eng.js
new file mode 100644
index 00000000..99465fbf
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/eng/comandos/crearimagenbasica_eng.js
@@ -0,0 +1,10 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: crearimagenbasica_esp.js
+// Idioma: Español
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="";
+TbMsg[1]="Debe elegir una imagen para esta partición";
+TbMsg[2]="No ha seleccionado ninguna partición";
+TbMsg[3]="No ha seleccionado ningún método de sincronización";
diff --git a/admin/WebConsole/idiomas/javascripts/eng/comandos/eliminarimagencache_eng.js b/admin/WebConsole/idiomas/javascripts/eng/comandos/eliminarimagencache_eng.js
new file mode 100644
index 00000000..e52857b0
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/eng/comandos/eliminarimagencache_eng.js
@@ -0,0 +1,8 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: eliminarimagencache_eng.js
+// Idioma: Ingles
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="";
+TbMsg[1]="You must choose at least one image";
diff --git a/admin/WebConsole/idiomas/javascripts/eng/comandos/restaurarimagenbasica_eng.js b/admin/WebConsole/idiomas/javascripts/eng/comandos/restaurarimagenbasica_eng.js
new file mode 100644
index 00000000..bce2cdc4
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/eng/comandos/restaurarimagenbasica_eng.js
@@ -0,0 +1,14 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: restaurarimagenbasica_esp.js
+// Idioma: Español
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="Debe elegir una imagen para esta partición";
+TbMsg[1]="Debe elegir al menos una partición y una imagen";
+TbMsg[2]="";
+TbMsg[3]="¿ Está seguro ?";
+TbMsg[4]="Debe elegir al menos una imagen para la partición";
+TbMsg[5]="Debe elegir al menos un path de imagen para la partición ";
+TbMsg[6]="Debe elegir la imagen de uno sólo de los desplegables";
+TbMsg[7]="Debe elegir un método de Sincronización";
diff --git a/admin/WebConsole/idiomas/javascripts/eng/comandos/restaurarsoftincremental_eng.js b/admin/WebConsole/idiomas/javascripts/eng/comandos/restaurarsoftincremental_eng.js
new file mode 100644
index 00000000..22a112d9
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/eng/comandos/restaurarsoftincremental_eng.js
@@ -0,0 +1,14 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: restaurarsoftincremental_esp.js
+// Idioma: Español
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="Debe elegir una imagen para esta partición";
+TbMsg[1]="Debe elegir al menos una partición y una imagen";
+TbMsg[2]=" ";
+TbMsg[3]="¿ Está seguro ?";
+TbMsg[4]="Debe elegir al menos una imagen para la partición";
+TbMsg[5]="Debe elegir al menos un path de imagen para la partición ";
+TbMsg[6]="Debe elegir un software incremental para esta partición";
+TbMsg[7]="Debe elegir un método de Sincronización";
diff --git a/admin/WebConsole/idiomas/javascripts/eng/propiedades_aulas_eng.js b/admin/WebConsole/idiomas/javascripts/eng/propiedades_aulas_eng.js
index fa7b8bfc..7bd40d8c 100644
--- a/admin/WebConsole/idiomas/javascripts/eng/propiedades_aulas_eng.js
+++ b/admin/WebConsole/idiomas/javascripts/eng/propiedades_aulas_eng.js
@@ -9,4 +9,14 @@ TbMsg[1]="You must introduce a number of places for this lab";
TbMsg[2]="WARNING.- This lab contain others groups or labs. If you remove it, you will also remove all these. Are you sure ?";
TbMsg[3]="Time for begining of reserves periode must be smaller than final time";
TbMsg[4]="Multicast speed is not valid, use numbers only";
+TbMsg[5]="Netmask is not valid";
+TbMsg[6]="P2P mode is not valid";
+TbMsg[7]="El tiempo (segundos ) de semillero despues de la descarga p2p no es valida";
+TbMsg[8]="Multicast mode is not valid";
+TbMsg[9]="Multicast IP address is not valid";
+TbMsg[10]="Multicast port is not valid";
+TbMsg[11]="Multicast speed is not valid, use numbers only";
+TbMsg[12]="DNS server IP address is not valid";
+TbMsg[13]="Proxy server URL is not valid";
+TbMsg[14]="Deben introducirse datos de validacin: pgina de login y pgina de validacin";
diff --git a/admin/WebConsole/idiomas/javascripts/eng/propiedades_ordenadores_eng.js b/admin/WebConsole/idiomas/javascripts/eng/propiedades_ordenadores_eng.js
index f255316b..a93a0279 100644
--- a/admin/WebConsole/idiomas/javascripts/eng/propiedades_ordenadores_eng.js
+++ b/admin/WebConsole/idiomas/javascripts/eng/propiedades_ordenadores_eng.js
@@ -9,4 +9,5 @@ TbMsg[1]="You must introduce an IP Address";
TbMsg[2]="You must introduce a MAC Address";
TbMsg[3]="You must link this computer with some of a hardware profile";
TbMsg[4]="You must introduce a DHCP server";
-TbMsg[5]="You must introduce a OpenGnsys server"; \ No newline at end of file
+TbMsg[5]="You must introduce a OpenGnsys server";
+TbMsg[6]="Deben introducirse datos de validacin: pgina de login y pgina de validacin";
diff --git a/admin/WebConsole/idiomas/javascripts/esp/comandos/configurar_esp.js b/admin/WebConsole/idiomas/javascripts/esp/comandos/configurar_esp.js
index b4b05984..0bbde452 100644
--- a/admin/WebConsole/idiomas/javascripts/esp/comandos/configurar_esp.js
+++ b/admin/WebConsole/idiomas/javascripts/esp/comandos/configurar_esp.js
@@ -9,4 +9,4 @@ TbMsg[1]="El número de la partición debe ser mayor de 0";
TbMsg[2]="El tipo de partición no se ha especificado";
TbMsg[3]="El tamaño de la partición debe ser mayor que cero";
TbMsg[4]="ATENCIÓN: Se va a eliminar esta partición ¿ Está seguro ?";
-
+TbMsg[5]="Debe especificar el tipo de fichero si desea formatear la partición";
diff --git a/admin/WebConsole/idiomas/javascripts/esp/comandos/crearimagenbasica_esp.js b/admin/WebConsole/idiomas/javascripts/esp/comandos/crearimagenbasica_esp.js
new file mode 100644
index 00000000..99465fbf
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/esp/comandos/crearimagenbasica_esp.js
@@ -0,0 +1,10 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: crearimagenbasica_esp.js
+// Idioma: Español
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="";
+TbMsg[1]="Debe elegir una imagen para esta partición";
+TbMsg[2]="No ha seleccionado ninguna partición";
+TbMsg[3]="No ha seleccionado ningún método de sincronización";
diff --git a/admin/WebConsole/idiomas/javascripts/esp/comandos/crearsoftincremental_esp.js b/admin/WebConsole/idiomas/javascripts/esp/comandos/crearsoftincremental_esp.js
index bfcbf99a..bf789d68 100644
--- a/admin/WebConsole/idiomas/javascripts/esp/comandos/crearsoftincremental_esp.js
+++ b/admin/WebConsole/idiomas/javascripts/esp/comandos/crearsoftincremental_esp.js
@@ -4,5 +4,8 @@
// Idioma: Español
//________________________________________________________________________________________________________
TbMsg=new Array;
-TbMsg[0]="Debe elegir un software incremental para esta partición";
-TbMsg[1]="Debe elegir al menos una partición y un software incremental";
+TbMsg[0]="";
+TbMsg[1]="Debe elegir una imagen básica para esta partición";
+TbMsg[2]="No ha seleccionado ninguna partición";
+TbMsg[3]="Debe elegir una imagen incremental para esta partición";
+TbMsg[4]="No ha seleccionado ningún método de sincronización";
diff --git a/admin/WebConsole/idiomas/javascripts/esp/comandos/eliminarimagencache_esp.js b/admin/WebConsole/idiomas/javascripts/esp/comandos/eliminarimagencache_esp.js
new file mode 100644
index 00000000..ca8745fb
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/esp/comandos/eliminarimagencache_esp.js
@@ -0,0 +1,8 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: eliminarimagencache_esp.js
+// Idioma: Español
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="";
+TbMsg[1]="Debe elegir al menos una Imagen";
diff --git a/admin/WebConsole/idiomas/javascripts/esp/comandos/restaurarimagenbasica_esp.js b/admin/WebConsole/idiomas/javascripts/esp/comandos/restaurarimagenbasica_esp.js
new file mode 100644
index 00000000..bce2cdc4
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/esp/comandos/restaurarimagenbasica_esp.js
@@ -0,0 +1,14 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: restaurarimagenbasica_esp.js
+// Idioma: Español
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="Debe elegir una imagen para esta partición";
+TbMsg[1]="Debe elegir al menos una partición y una imagen";
+TbMsg[2]="";
+TbMsg[3]="¿ Está seguro ?";
+TbMsg[4]="Debe elegir al menos una imagen para la partición";
+TbMsg[5]="Debe elegir al menos un path de imagen para la partición ";
+TbMsg[6]="Debe elegir la imagen de uno sólo de los desplegables";
+TbMsg[7]="Debe elegir un método de Sincronización";
diff --git a/admin/WebConsole/idiomas/javascripts/esp/comandos/restaurarsoftincremental_esp.js b/admin/WebConsole/idiomas/javascripts/esp/comandos/restaurarsoftincremental_esp.js
new file mode 100644
index 00000000..22a112d9
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/esp/comandos/restaurarsoftincremental_esp.js
@@ -0,0 +1,14 @@
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas javascripts: restaurarsoftincremental_esp.js
+// Idioma: Español
+//________________________________________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="Debe elegir una imagen para esta partición";
+TbMsg[1]="Debe elegir al menos una partición y una imagen";
+TbMsg[2]=" ";
+TbMsg[3]="¿ Está seguro ?";
+TbMsg[4]="Debe elegir al menos una imagen para la partición";
+TbMsg[5]="Debe elegir al menos un path de imagen para la partición ";
+TbMsg[6]="Debe elegir un software incremental para esta partición";
+TbMsg[7]="Debe elegir un método de Sincronización";
diff --git a/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js b/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js
index 8f510866..efdc4a57 100644
--- a/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js
+++ b/admin/WebConsole/idiomas/javascripts/esp/propiedades_aulas_esp.js
@@ -6,7 +6,7 @@
TbMsg=new Array;
TbMsg[0]="Debe introducir un nombre para este aula";
TbMsg[1]="Debe introducir un número de puestos para este aula";
-TbMsg[2]="ATENCIÓN.- Este aula contiene grupos de ordenadores u ordenadores. Si los elimina, eliminará también éstos. ¿ Está seguro ?";
+TbMsg[2]="ATENCIÓN.- Esta aula contiene grupos de ordenadores u ordenadores. Si los elimina, eliminará también éstos. ¿ Está seguro ?";
TbMsg[3]="La hora de comienzo del intervalo de reservas debe ser menor que la hora final";
TbMsg[4]="La direccion del router no es valida";
TbMsg[5]="La mascara de red no es valida";
@@ -16,4 +16,7 @@ TbMsg[8]="Modo multicast no es valido";
TbMsg[9]="La dirección multicast no es valida";
TbMsg[10]="El puerto de multicast no es valida";
TbMsg[11]="La velocidad de multicast no es válida, sólo números";
+TbMsg[12]="La dirección IP del servidor DNS no es válida";
+TbMsg[13]="La URL del servidor Proxy no es válida";
+TbMsg[14]="Deben introducirse datos de validación: página de login y página de validación";
diff --git a/admin/WebConsole/idiomas/javascripts/esp/propiedades_imagenes_esp.js b/admin/WebConsole/idiomas/javascripts/esp/propiedades_imagenes_esp.js
index 7deec9a3..f8583cae 100644
--- a/admin/WebConsole/idiomas/javascripts/esp/propiedades_imagenes_esp.js
+++ b/admin/WebConsole/idiomas/javascripts/esp/propiedades_imagenes_esp.js
@@ -7,8 +7,9 @@ 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]="nombre canónico fichero-imagen no puede contener valores no alfanumericos";
+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
+TbMsg[7]="Falta un comentario";
+TbMsg[8]="Debe especificar la imagen básica con la que estará adjunta"; \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/javascripts/esp/propiedades_ordenadores_esp.js b/admin/WebConsole/idiomas/javascripts/esp/propiedades_ordenadores_esp.js
index e27af69e..a58baa41 100644
--- a/admin/WebConsole/idiomas/javascripts/esp/propiedades_ordenadores_esp.js
+++ b/admin/WebConsole/idiomas/javascripts/esp/propiedades_ordenadores_esp.js
@@ -9,4 +9,5 @@ TbMsg[1]="Debe introducir una dirección IP";
TbMsg[2]="Debe introducir a una dirección MAC";
TbMsg[3]="";
TbMsg[4]="";
-TbMsg[5]="Debe elegir un repositorio por defecto"; \ No newline at end of file
+TbMsg[5]="Debe elegir un repositorio por defecto";
+TbMsg[6]="Deben introducirse datos de validación: página de login y página de validación";
diff --git a/admin/WebConsole/idiomas/php/cat/acceso_cat.php b/admin/WebConsole/idiomas/php/cat/acceso_cat.php
index 1f3b3094..8bfd920f 100644
--- a/admin/WebConsole/idiomas/php/cat/acceso_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/acceso_cat.php
@@ -1,34 +1,34 @@
<?
// __________________________________________________
//
-// Fichero de idiomas php: acceso_esp.php
-// Idioma: Español
+// Fichero de idiomas php: acceso_cat.php
+// Idioma: Català
// __________________________________________________
// Mensajes de error.
$TbErr=array();
-$TbErr[0]="SIN ERRORES";
-$TbErr[1]="ATENCIÓN: Debe acceder a la aplicación a través de la pagina inicial";
-$TbErr[2]="ATENCIÓN: La Aplicación no tiene acceso al Servidor de Bases de Datos";
-$TbErr[3]="ATENCIÓN: Existen problemas para recuperar el registro, puede que haya sido eliminado";
-$TbErr[4]="ATENCIÓN: Usted no tiene acceso a esta aplicación";
+$TbErr[0]="SENSE ERRORS";
+$TbErr[1]="ATENCIÓ: Ha d'accedir a l\'aplicació a través de la pàgina inicial";
+$TbErr[2]="ATENCIÓ: L\'Aplicació no te accés al Servidor de Bases de Dades";
+$TbErr[3]="ATENCIÓ: Existeixen problemes per a recuperar el registre, podria haver estat eliminat";
+$TbErr[4]="ATENCIÓ: Vostè no te accés a aquesta aplicació";
// Mensajes.
$TbMsg=array();
-$TbMsg["ACCESS_TITLE"]="OpenGnSys: Administraci&oacute;n web de aulas";
-$TbMsg["ACCESS_HEADING"]="Gestión de Aulas de Inform&aacute;tica";
-$TbMsg["ACCESS_SUBHEAD"]="Acceso para administradores";
-$TbMsg["ACCESS_USERNAME"]="Usuario";
-$TbMsg["ACCESS_PASSWORD"]="Contrase&ntilde;a";
-$TbMsg["ACCESS_ORGUNIT"]="Unidad Organizativa";
+$TbMsg["ACCESS_TITLE"]="OpenGnSys: Administració web d\'aules";
+$TbMsg["ACCESS_HEADING"]="Gestió d\'Aules d\'Informàtica";
+$TbMsg["ACCESS_SUBHEAD"]="Accés per administradors";
+$TbMsg["ACCESS_USERNAME"]="Usuari";
+$TbMsg["ACCESS_PASSWORD"]="Paraula de pas";
+$TbMsg["ACCESS_ORGUNIT"]="Unitat Organitzativa";
$TbMsg["ACCESS_OK"]="OK";
-$TbMsg["ACCESS_CHOOSE"]="Elegir";
-$TbMsg["ACCESS_NOUSER"]="Debe introducir un nombre de usuario";
-$TbMsg["ACCESS_NOPASS"]="Debe introducir una contraseña";
-$TbMsg["ACCESS_NOUNIT"]='ATENCIÓN: No ha introducido ninguna Unidad Organizativa.\nNO tendrá acceso al sistema a menos que sea adminstrador general de la Aplicación.\n¿Desea acceder con este perfil?';
-$TbMsg["ACCESS_ALLOWED"]='Acceso permitido. Espere por favor ...';
-$TbMsg["ACCESS_ERROR"]='Error de acceso';
-$TbMsg["ACCESS_UNKNOWNERROR"]='Error desconocido';
-
+$TbMsg["ACCESS_CHOOSE"]="Escollir";
+$TbMsg["ACCESS_NOUSER"]="Ha d\'introduir un nom d\'usuari";
+$TbMsg["ACCESS_NOPASS"]="Ha d\'introduir una paraula de pas";
+$TbMsg["ACCESS_NOUNIT"]='ATENCIÓ: No ha introduït cap Unitat Organitzativa.\nNO tindrà acces al sistema de no ser que sigui administrador general de l\'Aplicació.\nVol accedir amb aquest perfil?';
+$TbMsg["ACCESS_ALLOWED"]='Accés permès. Esperi si us plau ...';
+$TbMsg["ACCESS_ERROR"]='Error d\'acces';
+$TbMsg["ACCESS_UNKNOWNERROR"]='Error desconegut';
+$TbMsg["ACCESS_NOFRAMES"]='El navegador necessita suport per a "frames" per a mostrar la pàgina.';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/acciones_cat.php b/admin/WebConsole/idiomas/php/cat/acciones_cat.php
index 56cc0e95..fe8001a2 100644
--- a/admin/WebConsole/idiomas/php/cat/acciones_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/acciones_cat.php
@@ -10,7 +10,7 @@
$TbMsg[2]='"Col.locar procediment"';
$TbMsg[3]='"Renombrar"';
$TbMsg[4]='"Eliminar grup de procediments"';
- $TbMsg[5]='"Gesti d'ordres"';
+ $TbMsg[5]='"Gesti d\'ordres"';
$TbMsg[6]='"Informaci Procediment"';
$TbMsg[7]='"Moure procediment"';
$TbMsg[8]='"Propietats"';
diff --git a/admin/WebConsole/idiomas/php/cat/accionmenu_cat.php b/admin/WebConsole/idiomas/php/cat/accionmenu_cat.php
index d603a34e..7307ac90 100644
--- a/admin/WebConsole/idiomas/php/cat/accionmenu_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/accionmenu_cat.php
@@ -1,12 +1,12 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: accionmenu_esp.php
+// Fitxer d'idiomes php: accionmenu_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]='Items';
- $TbMsg[1]='Gesti Items Menu';
+ $TbMsg[1]='Gesti Items Men';
$TbMsg[2]='Procediment';
$TbMsg[3]='Tasca';
$TbMsg[4]='Treballs';
@@ -14,10 +14,10 @@
$TbMsg[6]='Privat';
$TbMsg[7]='Items pblics ';
$TbMsg[8]='Items privats ';
- $TbMsg[9]='Nom del Menu';
+ $TbMsg[9]='Nom del Men';
$TbMsg[10]='Tipus item';
$TbMsg[11]='Imatge del item';
$TbMsg[12]='Literal item';
$TbMsg[13]='Ord';
- $TbMsg[14]='(*)Per a incloure alguna acci en aquest men deu fer click sobre la casella de verificaci corresponenet. Per a actualitzar fagi click sobre la imatge.';
+ $TbMsg[14]='(*)Per a incloure alguna acci en aquest men ha de fer click sobre la casella de verificaci corresponent. Per a actualitzar faci click sobre la imatge.';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/acercade_cat.php b/admin/WebConsole/idiomas/php/cat/acercade_cat.php
new file mode 100644
index 00000000..2e4e0147
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/acercade_cat.php
@@ -0,0 +1,19 @@
+<?php
+//______________________________________________________
+//
+// Fichero de idiomas php: pintaParticiones_esp.php
+// Idioma: Español
+//______________________________________________________
+// Si ya existe TbMsg, solo agregamos lo nuevo
+if(!isset($TbMsg)){
+ $TbMsg=array();
+}
+
+$TbMsg["TITLE"]='Aplicaci&oacute;n libre y abierta para la gesti&oacute;n y el despliegue de sistemas operativos';
+$TbMsg["DESCRIPTION"]='OpenGnSys <em>(l&eacute;ase OpenG&eacute;nesis)</em> re&uacute;ne el esfuerzo conjunto de varias Universidades P&uacute;blicas Espa&ntilde;olas, para disponer de una serie de herramientas libres y abiertas que constituyan un sistema completo, vers&aacute;til e intuitivo, para la gesti&oacute;n y clonaci&oacute;n de equipos. Esta aplicaci&oacute;n permite la distribuci&oacute;n, instalaci&oacute;n y despliegue de distintos sistemas operativos. ';
+$TbMsg["LICENSE"]='OpenGnSys es un proyecto de Software Libre, todo el c&oacute;digo est&aacute; licenciado bajo ';
+$TbMsg["LINK"]='Web del proyecto: ';
+
+
+?>
+
diff --git a/admin/WebConsole/idiomas/php/cat/actualizar_cat.php b/admin/WebConsole/idiomas/php/cat/actualizar_cat.php
index 3d1b08d8..5d7ef58d 100644
--- a/admin/WebConsole/idiomas/php/cat/actualizar_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/actualizar_cat.php
@@ -5,6 +5,6 @@
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Aquest mbit s'ha actualitzat correctament';
- $TbMsg[1]='ATENCI: Ha hagut un problema al actualitzar l'mbit';
+ $TbMsg[0]='Aquest mbit s\'ha actualitzat correctament';
+ $TbMsg[1]='ATENCI: Hi ha hagut un problema al actualitzar l\'mbit';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/administracion_cat.php b/admin/WebConsole/idiomas/php/cat/administracion_cat.php
index 164916ba..b11e0ed8 100644
--- a/admin/WebConsole/idiomas/php/cat/administracion_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/administracion_cat.php
@@ -6,14 +6,14 @@
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]='"Administraci"';
- $TbMsg[1]='"Nou grup d'Entitats"';
+ $TbMsg[1]='"Nou grup d\'Entitats"';
$TbMsg[2]='"Nova Entitat"';
$TbMsg[3]='"Nou Superadministrador"';
$TbMsg[4]='"Propietats"';
$TbMsg[5]='"Eliminar"';
$TbMsg[6]='"Renombrar"';
- $TbMsg[7]='"Eliminar grup d'Entitats"';
- $TbMsg[8]='"Nova unitat organizativa"';
+ $TbMsg[7]='"Eliminar grup d\'Entitats"';
+ $TbMsg[8]='"Nova unitat organitzativa"';
$TbMsg[9]='"Nou Administrador"';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/administradores_centros_cat.php b/admin/WebConsole/idiomas/php/cat/administradores_centros_cat.php
index c3fa398a..575cf3f4 100644
--- a/admin/WebConsole/idiomas/php/cat/administradores_centros_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/administradores_centros_cat.php
@@ -1,14 +1,14 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: administradores_centros_esp.php
-// Idioma: Español
+// Fichero de idiomas php: administradores_centros_cat.php
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Unidades Administrativas';
- $TbMsg[1]='Asignar administradores';
- $TbMsg[2]='Administradores asignados';
- $TbMsg[3]='Nombre del adminsitrador';
- $TbMsg[4]='(*)Para incluir algún adminsitrador en esta Unidad Organizativa debe hacer click sobre la casilla de verificación correspondiente.';
- $TbMsg[5]='Administradores disponibles';
+ $TbMsg[0]='Unitats Administratives';
+ $TbMsg[1]='Assignar administradors';
+ $TbMsg[2]='Administradors assignats';
+ $TbMsg[3]='Nom de l\'administrador';
+ $TbMsg[4]='(*)Per incluir algun administrador en aquesta Unitat Organitzativa ha de fer click sobre la casella de verificació corresponent.';
+ $TbMsg[5]='Administradors disponibles';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/administradores_usuarios_cat.php b/admin/WebConsole/idiomas/php/cat/administradores_usuarios_cat.php
index 56bb1caa..d02e01c3 100644
--- a/admin/WebConsole/idiomas/php/cat/administradores_usuarios_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/administradores_usuarios_cat.php
@@ -1,14 +1,14 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: administradores_centros_esp.php
-// Idioma: Español
+// Fichero de idiomas php: administradores_centros_cat.php
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Unidades Administrativas';
- $TbMsg[1]='Asignar centros';
- $TbMsg[2]='Centros asignados';
- $TbMsg[3]='Nombre del centro';
- $TbMsg[4]='(*)Para asignar algún centro a un administrador determinado debe hacer click sobre la casilla de verificación correspondiente.';
- $TbMsg[5]='Centros disponibles';
+ $TbMsg[0]='Unitats Administratives';
+ $TbMsg[1]='Assignar centres';
+ $TbMsg[2]='Centres assignats';
+ $TbMsg[3]='Nom del centre';
+ $TbMsg[4]='(*)Per assignar algun centre a un administrador ha de fer click sobre la casella de verificació corresponent.';
+ $TbMsg[5]='Centres disponibles';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/aulas_cat.php b/admin/WebConsole/idiomas/php/cat/aulas_cat.php
index 00e15d1e..0813abf4 100644
--- a/admin/WebConsole/idiomas/php/cat/aulas_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/aulas_cat.php
@@ -2,7 +2,7 @@
//________________________________________________________________________________________________________
//
// Fitxer d'idiomes php: aules_cat.php
-// Idioma: Catal�
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]='"Nou grup d\'aules"';
@@ -15,7 +15,7 @@
$TbMsg[7]='"Eliminar grup d\'aules"';
$TbMsg[8]='"Nou grup d\'ordinadors"';
$TbMsg[9]='"Afegir nou ordinador"';
- $TbMsg[10]='"Configuraci�"';
+ $TbMsg[10]='"Configuració"';
$TbMsg[11]='"Col.locar ordinador"';
$TbMsg[12]='"Ordinador Plantilla"';
$TbMsg[13]='"Propietats"';
@@ -29,30 +29,32 @@
$TbMsg[21]='"Totes"';
$TbMsg[22]='Estatus ordinadors';
$TbMsg[23]='Aula d\'ordinadors';
- $TbMsg[24]='�mbit: Centres';
- $TbMsg[25]='�mbit: Grup d\'aules';
- $TbMsg[26]='�mbito: Grup d\'ordinadors';
+ $TbMsg[24]='Àmbit: Centres';
+ $TbMsg[25]='Àmbit: Grup d\'aules';
+ $TbMsg[26]='Àmbit: Grup d\'ordinadors';
$TbMsg[27]='"Incorporar ordinadors"';
- $TbMsg[28]='"Procedimentss"';
+ $TbMsg[28]='"Procediments"';
$TbMsg[29]='"Reserves d\'aules"';
$TbMsg[30]='"Confirmades"';
$TbMsg[31]='"Pendents"';
$TbMsg[32]='"Denegades"';
$TbMsg[33]='"Commutar"';
- $TbMsg[34]='"Programaci� reserves"';
+ $TbMsg[34]='"Programació reserves"';
$TbMsg[35]='"Operadors"';
$TbMsg[36]='"Eliminar Operador"';
$TbMsg[37]='"Afegir nou Operador"';
$TbMsg[38]='"Assistents"';
$TbMsg[39]='"Eco de consola"';
- $TbMsg[40]='"NetBoot avan�at"';
+ $TbMsg[40]='"NetBoot avançat"';
$TbMsg[41]='"Reubicar ordinadors"';
- $TbMsg[42]='Gesti� Arrancada Avan�at';
+ $TbMsg[42]='Gestió Arrancada Avançada';
$TbMsg[43]='"Guardar"';
- $TbMsg[44]='Ubicador Ordenadores';
- $TbMsg[45]='Nombre ámbito';
- $TbMsg[46]='Identificador ámbito';
- $TbMsg[47]='"Log historico"';
- $TbMsg[48]='"Log en tiempo real"';
+ $TbMsg[44]='Ubicador Ordinadors';
+ $TbMsg[45]='Nom àmbit';
+ $TbMsg[46]='Identificador àmbit';
+ $TbMsg[47]='"Log històric"';
+ $TbMsg[48]='"Log en temps real"';
+ $TbMsg[49]='"Sincronización"';
+ $TbMsg[50]='"Sincronización 2"';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/avisos_cat.php b/admin/WebConsole/idiomas/php/cat/avisos_cat.php
index 6be18a06..39248b31 100644
--- a/admin/WebConsole/idiomas/php/cat/avisos_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/avisos_cat.php
@@ -1,12 +1,12 @@
<?php
//______________________________________________
//
-// Fichero de idiomas php: avisos_esp.php
-// Idioma: Español
+// Fichero de idiomas php: avisos_cat.php
+// Idioma: Català
//______________________________________________
if (empty ($TbMsg)) $TbMsg=array();
-$TbMsg["WARN_NETBOOT"]='AVISO: Despu&eacute;s de aceptar, ejecutar NetBoot Avanzado en el aula para aplicar los cambios.';
-$TbMsg["WARN_REBOOTAFTER"]='AVISO: Se realizar&aacute; autom&aacute;ticamente un reinicio despu&eacute;s de ejecutar la operaci&oacute;n.';
+$TbMsg["WARN_NAMELENGTH"]='AVÍS: El nom d\'equip no ha de superar els 15 caràcters si s\'instalen sistemes Windows.';
+$TbMsg["WARN_REBOOTAFTER"]='AVÍS: Es realitzarà automàticament un reinici després d\'executar l\'operació.';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/barramenu_cat.php b/admin/WebConsole/idiomas/php/cat/barramenu_cat.php
index 87167bca..281b63e9 100644
--- a/admin/WebConsole/idiomas/php/cat/barramenu_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/barramenu_cat.php
@@ -7,17 +7,21 @@
$TbMsg=array();
$TbMsg[0]='Aules';
$TbMsg[1]='Accions';
- $TbMsg[2]='Imátges';
+ $TbMsg[2]='Imatges';
$TbMsg[3]='Hardware';
$TbMsg[4]='Software';
$TbMsg[5]='Servidors';
$TbMsg[6]='Menús';
$TbMsg[7]='Reserves';
$TbMsg[8]='Administració';
- $TbMsg[9]='Iconos';
+ $TbMsg[9]='Icones';
$TbMsg[10]='Sortida';
$TbMsg[11]='Ajuda';
$TbMsg[12]='Administradors';
$TbMsg[14]='Cercar';
+ $TbMsg[15]='Netboot Avançat';
+ $TbMsg[16]='Unitat Organitzativa';
+ $TbMsg[17]='Acerca&nbsp;de';
+
?>
diff --git a/admin/WebConsole/idiomas/php/cat/boot_grub4dos_cat.php b/admin/WebConsole/idiomas/php/cat/boot_grub4dos_cat.php
new file mode 100644
index 00000000..ca0ade44
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/boot_grub4dos_cat.php
@@ -0,0 +1,53 @@
+<?
+//____________________________________________________________
+//
+// Fichero de idiomas php: aulas_cat.php
+// Idioma: Catal
+//_____________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Nou';
+ $TbMsg[1]='Modificar';
+ $TbMsg[2]='Eliminar';
+ $TbMsg[3]='Nova Columna d\'Arrancada';
+ $TbMsg[4]='Modificar Columna d\'Arrancada';
+ $TbMsg[5]='Eliminar Columna d\'Arrancada';
+ $TbMsg[6]='Arrancada Creada Correctament';
+ $TbMsg[7]='Arrancada Modificada Correctament';
+ $TbMsg[8]='Arrancada Eliminada Correctament';
+ $TbMsg[9]='Selecciona Columna Arrancada';
+ $TbMsg[10]='"Mode Usuari"';
+ $TbMsg[11]='"Mode Administraci"';
+ $TbMsg[12]='Nom';
+ $TbMsg[13]='Acceptar';
+ $TbMsg[14]='Introdueixi un Nom de Columna';
+ $TbMsg[15]='"Renombrar"';
+ $TbMsg[16]='Cancellar';
+ $TbMsg[17]='Plantilla';
+ $TbMsg[18]='Sense Plantilla';
+ $TbMsg[19]='Comandes';
+ $TbMsg[20]='Descripci';
+ $TbMsg[21]='Fitxer';
+ $TbMsg[22]='##NO-TOCAR-ESTA-LINEA ';
+ $TbMsg[23]='NO HI HA COLUMNA NOVA';
+ $TbMsg[24]='mbit: Centros';
+ $TbMsg[25]='mbit: Grup d\'aulas';
+ $TbMsg[26]='mbit: Grup d\'ordinadors';
+ $TbMsg[27]='"Incorporar ordinadors"';
+ $TbMsg[28]='"Procediments"';
+ $TbMsg[29]='"Reserves d\'aulas"';
+ $TbMsg[30]='"Confirmades"';
+ $TbMsg[31]='"Pendents"';
+ $TbMsg[32]='"Denegades"';
+ $TbMsg[33]='"Consola remota"';
+ $TbMsg[34]='"Programaci reserves"';
+ $TbMsg[35]='"Operadors"';
+ $TbMsg[36]='"Eliminar Operador"';
+ $TbMsg[37]='"Afegir nou Operador"';
+ $TbMsg[38]='"Assistents"';
+ $TbMsg[39]='"Eco de Consola"';
+ $TbMsg[40]='"NetBoot avanat"';
+ $TbMsg[41]='"Reubicar ordinadors"';
+ $TbMsg[42]='Gesti Arrancada Avanada';
+ $TbMsg[43]='"Guardar"';
+ $TbMsg[44]='Ubicador Ordinadors';
+ $TbMsg[45]='Nom mbit';
diff --git a/admin/WebConsole/idiomas/php/cat/buscar_cat.php b/admin/WebConsole/idiomas/php/cat/buscar_cat.php
index 63436a60..5f4d304a 100644
--- a/admin/WebConsole/idiomas/php/cat/buscar_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/buscar_cat.php
@@ -5,15 +5,15 @@
// Idioma: Català
//________________________________________________
$TbMsg=array();
-$TbMsg["SEARCH_TITLE"]="BUSCAR EQUIPS";
+$TbMsg["SEARCH_TITLE"]="CERCAR EQUIPS";
$TbMsg["SEARCH_CRITERIA"]="Criteri de cerca";
-$TbMsg["SEARCH_RESULTS"]="Resultats de la recerca";
+$TbMsg["SEARCH_RESULTS"]="Resultats de la cerca";
$TbMsg["SEARCH_LAB"]="Aula";
$TbMsg["SEARCH_NAME"]="Nom";
$TbMsg["SEARCH_IP"]="Adreça IP";
$TbMsg["SEARCH_MAC"]="Adreça MAC";
$TbMsg["SEARCH_DUPLICATES"]="Duplicats";
$TbMsg["SEARCH_NOMATCHES"]="No es troben resultats";
-$TbMsg["SEARCH_NOVALUE"]="Ha d\'introduir un valor per al criteri de cerca";
+$TbMsg["SEARCH_NOVALUE"]="Ha d\'introduir un valor pel criteri de cerca";
?>
diff --git a/admin/WebConsole/idiomas/php/cat/clases/Almanaque_cat.php b/admin/WebConsole/idiomas/php/cat/clases/Almanaque_cat.php
index 579addde..f9bdff68 100644
--- a/admin/WebConsole/idiomas/php/cat/clases/Almanaque_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/clases/Almanaque_cat.php
@@ -30,26 +30,26 @@ class Almanaque{
$this->onmouseout=$ponmouseout;
$this->onclick=$ponclick;
- $this->nombre_mes[1]=array ("Enero",0x0001);
- $this->nombre_mes[2]=array ("Febrero",0x0002);
- $this->nombre_mes[3]=array ("Marzo",0x0004);
+ $this->nombre_mes[1]=array ("Gener",0x0001);
+ $this->nombre_mes[2]=array ("Febrer",0x0002);
+ $this->nombre_mes[3]=array ("Març",0x0004);
$this->nombre_mes[4]=array ("Abril",0x0008);
- $this->nombre_mes[5]=array ("Mayo",0x0010);
- $this->nombre_mes[6]=array ("Junio",0x0020);
- $this->nombre_mes[7]=array ("Julio",0x0040);
- $this->nombre_mes[8]=array ("Agosto",0x0080);
- $this->nombre_mes[9]=array ("Septiembre",0x0100);
+ $this->nombre_mes[5]=array ("Maig",0x0010);
+ $this->nombre_mes[6]=array ("Juny",0x0020);
+ $this->nombre_mes[7]=array ("Juliol",0x0040);
+ $this->nombre_mes[8]=array ("Agost",0x0080);
+ $this->nombre_mes[9]=array ("Setembre",0x0100);
$this->nombre_mes[10]=array ("Octubre",0x0200);
- $this->nombre_mes[11]=array ("Noviembre",0x0400);
- $this->nombre_mes[12]=array ("Diciembre",0x0800);
+ $this->nombre_mes[11]=array ("Novembre",0x0400);
+ $this->nombre_mes[12]=array ("Decembre",0x0800);
- $this->nombre_dia[1]=array ("L",0x01); // tamaño 1 bytes
- $this->nombre_dia[2]=array ("M",0x02);
- $this->nombre_dia[3]=array ("X",0x04);
- $this->nombre_dia[4]=array ("J",0x08);
- $this->nombre_dia[5]=array ("V",0x10);
- $this->nombre_dia[6]=array ("S",0x20);
- $this->nombre_dia[7]=array ("D",0x40);
+ $this->nombre_dia[1]=array ("DL",0x01); // tamaño 1 bytes
+ $this->nombre_dia[2]=array ("DM",0x02);
+ $this->nombre_dia[3]=array ("DC",0x04);
+ $this->nombre_dia[4]=array ("DJ",0x08);
+ $this->nombre_dia[5]=array ("DV",0x10);
+ $this->nombre_dia[6]=array ("DS",0x20);
+ $this->nombre_dia[7]=array ("DG",0x40);
$this->dias_meses[1]=31;
diff --git a/admin/WebConsole/idiomas/php/cat/clases/Calendario_cat.php b/admin/WebConsole/idiomas/php/cat/clases/Calendario_cat.php
index 91fcd2e6..277b7d7a 100644
--- a/admin/WebConsole/idiomas/php/cat/clases/Calendario_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/clases/Calendario_cat.php
@@ -30,18 +30,18 @@ class Calendario{
$this->onmouseout=$ponmouseout;
$this->onclick=$ponclick;
- $this->nombre_mes[1]=array ("Enero",0x0001);
- $this->nombre_mes[2]=array ("Febrero",0x0002);
- $this->nombre_mes[3]=array ("Marzo",0x0004);
+ $this->nombre_mes[1]=array ("Gener",0x0001);
+ $this->nombre_mes[2]=array ("Febrer",0x0002);
+ $this->nombre_mes[3]=array ("Març",0x0004);
$this->nombre_mes[4]=array ("Abril",0x0008);
- $this->nombre_mes[5]=array ("Mayo",0x0010);
- $this->nombre_mes[6]=array ("Junio",0x0020);
- $this->nombre_mes[7]=array ("Julio",0x0040);
- $this->nombre_mes[8]=array ("Agosto",0x0080);
- $this->nombre_mes[9]=array ("Septiembre",0x0100);
+ $this->nombre_mes[5]=array ("Maig",0x0010);
+ $this->nombre_mes[6]=array ("Juny",0x0020);
+ $this->nombre_mes[7]=array ("Juliol",0x0040);
+ $this->nombre_mes[8]=array ("Agost",0x0080);
+ $this->nombre_mes[9]=array ("Setembre",0x0100);
$this->nombre_mes[10]=array ("Octubre",0x0200);
- $this->nombre_mes[11]=array ("Noviembre",0x0400);
- $this->nombre_mes[12]=array ("Diciembre",0x0800);
+ $this->nombre_mes[11]=array ("Novembre",0x0400);
+ $this->nombre_mes[12]=array ("Decembre",0x0800);
$this->numero_annos[1]=array ("2004",0x01); // tamaño 1 bytes
$this->numero_annos[2]=array ("2005",0x02);
@@ -65,13 +65,13 @@ class Calendario{
$this->dias_meses[11]=30;
$this->dias_meses[12]=31;
- $this->nombre_dia[1]=array ("L",0x01); // tamaño 1 bytes
- $this->nombre_dia[2]=array ("M",0x02);
- $this->nombre_dia[3]=array ("X",0x04);
- $this->nombre_dia[4]=array ("J",0x08);
- $this->nombre_dia[5]=array ("V",0x10);
- $this->nombre_dia[6]=array ("S",0x20);
- $this->nombre_dia[7]=array ("D",0x40);
+ $this->nombre_dia[1]=array ("DL",0x01); // tamaño 1 bytes
+ $this->nombre_dia[2]=array ("DM",0x02);
+ $this->nombre_dia[3]=array ("DC",0x04);
+ $this->nombre_dia[4]=array ("DJ",0x08);
+ $this->nombre_dia[5]=array ("DV",0x10);
+ $this->nombre_dia[6]=array ("DS",0x20);
+ $this->nombre_dia[7]=array ("DG",0x40);
}
/*________________________________________________________________________________________________________
Esta función devuelve una cadena con el código HTML del calendario del mes y año elegidos
diff --git a/admin/WebConsole/idiomas/php/cat/colasacciones_cat.php b/admin/WebConsole/idiomas/php/cat/colasacciones_cat.php
index ec379419..1a9f3c8e 100644
--- a/admin/WebConsole/idiomas/php/cat/colasacciones_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/colasacciones_cat.php
@@ -14,7 +14,7 @@ $LITEJECUCION_TRABAJO="Treballs";
$LITACCION_EXITOSA='Finalitzada correctament'; // Literal Finalitzada exitosament
$LITACCION_FALLIDA='Finalitzada amb errors'; // Literal Finalitzada amb errors
$LITACCION_TERMINADA='Finalitzada manualment'; //Literal Finalitzada manualment amb indicaci d'exit
-$LITACCION_ABORTADA='Cancelada manualment'; // Literal Finalitzada manualment amb indicaci d'errors
+$LITACCION_ABORTADA='Cancellada manualment'; // Literal Finalitzada manualment amb indicaci d'errors
$LITACCION_SINERRORES='Activa sense errors'; // Literal Activa i sense cap error
$LITACCION_CONERRORES='Activa amb errors'; // Literal Activa i amb algn error
@@ -23,23 +23,23 @@ $LITACCION_INICIADA='Activa'; // Literal acci activa
$LITACCION_FINALIZADA='Finalitzada'; // Literal acci finalitzada
$TbMsg=array();
- $TbMsg[0]='Cua d'accions';
- $TbMsg[1]='Opcions de bsqueda';
+ $TbMsg[0]='Cua d\'accions';
+ $TbMsg[1]='Opcions de cerca';
$TbMsg[2]='Accions';
$TbMsg[3]='Resultats';
$TbMsg[4]='Estats';
- $TbMsg[5]='Percentatge desde';
+ $TbMsg[5]='Percentatge des de';
$TbMsg[6]='fins';
$TbMsg[7]='Data inici';
$TbMsg[8]='Data final';
$TbMsg[9]='Hora inici';
$TbMsg[10]='Hora final';
- $TbMsg[11]='mbit';
+ $TbMsg[11]='mbit';
$TbMsg[12]='Eliminar';
$TbMsg[13]='Reiniciar';
$TbMsg[14]='Parar';
- $TbMsg[15]='Seguir';
- $TbMsg[16]='Cancel.lar';
+ $TbMsg[15]='Continuar';
+ $TbMsg[16]='Cancellar';
$TbMsg[17]='Finalitzar';
$TbMsg[18]='Acci';
@@ -50,9 +50,9 @@ $TbMsg=array();
$TbMsg[23]='Nom';
$TbMsg[24]='Centres';
- $TbMsg[25]='Grup d'aules';
+ $TbMsg[25]='Grup d\'aules';
$TbMsg[26]='Aules';
- $TbMsg[27]='Grup d'ordinadors';
+ $TbMsg[27]='Grup d\'ordinadors';
$TbMsg[28]='Ordinadors';
$TbMsg[30]='Ordres';
@@ -60,18 +60,18 @@ $TbMsg=array();
$TbMsg[32]='Treballs';
$TbMsg[41]='"Filtre Acci"';
- $TbMsg[42]='"Filtre mbit"';
+ $TbMsg[42]='"Filtre mbit"';
$TbMsg[43]='"Eliminar filtre"';
$TbMsg[44]='"Modificar Acci"';
$TbMsg[45]='"Reiniciar"';
$TbMsg[46]='"Eliminar"';
$TbMsg[47]='"Tasca pare"';
- $TbMsg[48]='"Treball paree"';
+ $TbMsg[48]='"Treball pare"';
$TbMsg[49]='"Veure Ordres"';
$TbMsg[50]='"Veure tasques"';
$TbMsg[51]='"Parar"';
- $TbMsg[52]='"Seguir"';
- $TbMsg[53]='"Cancelar"';
+ $TbMsg[52]='"Continuar"';
+ $TbMsg[53]='"Cancellar"';
$TbMsg[54]='"Finalitzar"';
$TbMsg[55]='"Finalitzar sense errors"';
$TbMsg[56]='"Finalitzar amb errors"';
diff --git a/admin/WebConsole/idiomas/php/cat/colasreservas_cat.php b/admin/WebConsole/idiomas/php/cat/colasreservas_cat.php
index 3116cdaf..c263d1f3 100644
--- a/admin/WebConsole/idiomas/php/cat/colasreservas_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/colasreservas_cat.php
@@ -16,21 +16,21 @@ $LITRESERVA_PARADA='Suspesa'; // Literal reserva momentniament aturada
$LITRESERVA_ACTIVA='Activa'; // Literal reserva activa
$TbMsg=array();
- $TbMsg[0]='Reserves d'aules';
+ $TbMsg[0]='Reserves d\'aules';
$TbMsg[1]='Opcions de bsqueda';
$TbMsg[2]='Tipus';
$TbMsg[3]='';
$TbMsg[4]='Estats';
- $TbMsg[5]='Percentatge desde';
+ $TbMsg[5]='Percentatge des de';
$TbMsg[6]='Percentatge fins ';
$TbMsg[7]='Data inici';
$TbMsg[8]='Data final';
$TbMsg[9]='Hora inici';
$TbMsg[10]='Hora final';
- $TbMsg[11]='mbit';
+ $TbMsg[11]='mbit';
$TbMsg[12]='Centres';
- $TbMsg[13]='Grup d'aules';
+ $TbMsg[13]='Grup d\'aules';
$TbMsg[14]='Aules';
$TbMsg[15]='Any';
@@ -38,13 +38,13 @@ $TbMsg=array();
$TbMsg[17]='Da';
$TbMsg[18]='Aula';
$TbMsg[19]='Ocupaci';
- $TbMsg[20]='Imatge asociada';
+ $TbMsg[20]='Imatge associada';
$TbMsg[21]='Descripci';
$TbMsg[22]='Programaci reserves';
$TbMsg[23]='(Sense especificar)';
$TbMsg[24]='Aula';
- $TbMsg[25]='Solicitant';
+ $TbMsg[25]='Sollicitant';
$TbMsg[26]="Anticipaci previa";
$TbMsg[27]="(Sense acci previa)";
$TbMsg[28]="Tasca previa";
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/apagar_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/apagar_cat.php
index bfdd6783..4d065807 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/apagar_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/apagar_cat.php
@@ -1,16 +1,16 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: apagar_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: apagar_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Apagar ordenadores';
- $TbMsg[6]='Ámbito';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Apagar ordinadors';
+ $TbMsg[6]='Àmbit';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/arrancar_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/arrancar_cat.php
index 2cdbb0d6..60ae87fd 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/arrancar_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/arrancar_cat.php
@@ -1,16 +1,20 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: arrancar_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: arrancar_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Arrancar ordenadores';
- $TbMsg[6]='Ámbito';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Arrencar ordinadors';
+ $TbMsg[6]='Àmbit';
+ $TbMsg[7]='Datos a suministrar';
+ $TbMsg[8]='Broadcast';
+ $TbMsg[9]='Unicast';
+ $TbMsg[10]='Método de arranque';
-?> \ No newline at end of file
+?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/comando_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/comando_cat.php
index a56c1fbd..5e998208 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/comando_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/comando_cat.php
@@ -1,16 +1,16 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: comando_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: comando_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Apagar ordenadores';
- $TbMsg[6]='Ámbito';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Apagar ordinadors';
+ $TbMsg[6]='Àmbit';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/configurar_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/configurar_cat.php
index aa943a31..5bc5a793 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/configurar_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/configurar_cat.php
@@ -1,47 +1,47 @@
-<?
+<?php
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: configurar_esp.php (Comandos)
-// Idioma: Espa�l
+// Fitxer d'idiomes php: configurar_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
- $TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Particionar y Formatear';
- $TbMsg[6]='Ámbito';
- $TbMsg[7]='Partición oculta';
+ if (empty ($TbMsg)) $TbMsg=array();
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Particionar i Formatejar';
+ $TbMsg[6]='Àmbit';
+ $TbMsg[7]='Partició oculta';
$TbMsg[8]='Par';
$TbMsg[9]='';
$TbMsg[10]='';
$TbMsg[11]='';
- $TbMsg[12]='Operación';
- $TbMsg[13]='Sin acción';
- $TbMsg[14]='Formatear';
+ $TbMsg[12]='Operació';
+ $TbMsg[13]='Sense acció';
+ $TbMsg[14]='Formatejar';
$TbMsg[15]='Ocultar';
$TbMsg[16]='Mostrar';
- $TbMsg[17]=' Espacio libre !!';
+ $TbMsg[17]=' Espai lliure !!';
- $TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:";
- $TbMsg[19]="Datos a suministrar";
+ $TbMsg[18]="DES-AGRUPAR SEGONS VALORS DIFERENTS DE:";
+ $TbMsg[19]="Dades a subministrar";
// Cabeceras de tabla de configuración
- $TbMsg[20]='Partición';
- $TbMsg[21]='S.O. Instalado';
- $TbMsg[22]='Tamaño';
- $TbMsg[23]='Datos de configuration';
- $TbMsg[24]='Tipo';
- $TbMsg[25]='Imagen';
+ $TbMsg[20]='Partició';
+ $TbMsg[21]='S.O. Instal·lat';
+ $TbMsg[22]='Grandària';
+ $TbMsg[23]='Dades de configuració';
+ $TbMsg[24]='Tipus';
+ $TbMsg[25]='Imatge';
$TbMsg[26]='Perfil Software';
$TbMsg[27]='S.F.';
- $TbMsg[28]='Ninguno';
- $TbMsg[29]='Desconocido';
+ $TbMsg[28]='Cap';
+ $TbMsg[29]='Desconegut';
// Desagrupamiento
- $TbMsg[30]='Sistema de Ficheros';
- $TbMsg[31]='Nombre del S.O.';
- $TbMsg[32]='Tamaño de partición';
- $TbMsg[33]='Nombre de la Imagen ';
- $TbMsg[34]='Perfil software';
+ $TbMsg[30]='Sistema de Fitxers';
+ $TbMsg[31]='Nom del S.O.';
+ $TbMsg[32]='Grandària de partició';
+ $TbMsg[33]='Nom de la Imatge ';
+ $TbMsg[34]='Perfil Software';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/conmutar_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/conmutar_cat.php
index c34c5804..5be32591 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/conmutar_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/conmutar_cat.php
@@ -1,16 +1,16 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: conmutar_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: conmutar_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Conmutar ordenadores';
- $TbMsg[6]='Ámbito';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Commutar ordinadors';
+ $TbMsg[6]='Àmbit';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/crearimagen_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/crearimagen_cat.php
index 01801683..983fb44e 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/crearimagen_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/crearimagen_cat.php
@@ -1,24 +1,24 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: crearperfilsoftware_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: crearperfilsoftware_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Creación de Imagen';
- $TbMsg[1]='Características del ordenador';
- $TbMsg[2]='Nombre';
- $TbMsg[3]='Dirección IP';
- $TbMsg[4]='Dirección MAC';
+ $TbMsg[0]='Creació d\'Imatge';
+ $TbMsg[1]='Característiques de l\'ordinador';
+ $TbMsg[2]='Nom';
+ $TbMsg[3]='Direcció IP';
+ $TbMsg[4]='Direcció MAC';
$TbMsg[5]='Perfil Hardware';
- $TbMsg[6]='Datos a suministrar';
- $TbMsg[7]='Se necesita capturar Perfil Software';
+ $TbMsg[6]='Dades a subministrar';
+ $TbMsg[7]='Es necessita capturar Perfil Software';
$TbMsg[8]='Par';
- $TbMsg[9]='Nombre S.O.';
- $TbMsg[10]='Imagen a crear ';
- $TbMsg[11]='Repositorio de destino';
- $TbMsg[12]='Desconocido';
- $TbMsg[13]='Tipo';
- $TbMsg[14]='Ámbito';
- $TbMsg[15]='Ordenadores';
+ $TbMsg[9]='Nom S.O.';
+ $TbMsg[10]='Imatge a crear ';
+ $TbMsg[11]='Repositori de destí';
+ $TbMsg[12]='Desconegut';
+ $TbMsg[13]='Tipus';
+ $TbMsg[14]='Àmbit';
+ $TbMsg[15]='Ordinadors';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/crearimagenbasica_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/crearimagenbasica_cat.php
new file mode 100644
index 00000000..9ba1d89e
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/comandos/crearimagenbasica_cat.php
@@ -0,0 +1,25 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: crearimagenbasica_cat.php (Comandos)
+// Idioma: Catalán
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Creación de Imagen Básica <br> (experimental)' ;
+ $TbMsg[1]='Características del ordenador';
+ $TbMsg[2]='Nombre';
+ $TbMsg[3]='Dirección IP';
+ $TbMsg[4]='Dirección MAC';
+ $TbMsg[5]='Perfil Hardware';
+ $TbMsg[6]='Datos a suministrar';
+ $TbMsg[7]='Disco';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Nombre S.O.';
+ $TbMsg[10]='Imagen / Repositorio';
+ $TbMsg[11]='Repositorio';
+ $TbMsg[12]='Opciones Adicionales';
+ $TbMsg[13]='Borrar la Imagen Previamente';
+ $TbMsg[14]='Copiar Imagen en cache';
+ $TbMsg[15]='Borrarla previamente de la cache';
+ $TbMsg[16]='No borrar archivos en destino';
+?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/crearperfilsoftware_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/crearperfilsoftware_cat.php
index c7e63493..1c909508 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/crearperfilsoftware_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/crearperfilsoftware_cat.php
@@ -1,20 +1,21 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: crearperfilsoftware_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: crearperfilsoftware_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Creación de Imagen';
- $TbMsg[1]='Características del ordenador';
- $TbMsg[2]='Nombre';
- $TbMsg[3]='Dirección IP';
- $TbMsg[4]='Dirección MAC';
+ $TbMsg[0]='Creació d\'Imatge';
+ $TbMsg[1]='Característiques de l\'ordinador';
+ $TbMsg[2]='Nom';
+ $TbMsg[3]='Direcció IP';
+ $TbMsg[4]='Direcció MAC';
$TbMsg[5]='Perfil Hardware';
- $TbMsg[6]='Datos a suministrar';
+ $TbMsg[6]='Dades a subministrar';
$TbMsg[7]='';
$TbMsg[8]='Par';
- $TbMsg[9]='Nombre S.O.';
- $TbMsg[10]='Descripción de la Imagen ';
- $TbMsg[11]='Repositorio de destino';
+ $TbMsg[9]='Nom S.O.';
+ $TbMsg[10]='Descripció de la Imatge ';
+ $TbMsg[11]='Repositori de destí';
+
?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/crearsoftincremental_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/crearsoftincremental_cat.php
index 0eb03d9b..a38610cc 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/crearsoftincremental_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/crearsoftincremental_cat.php
@@ -1,19 +1,19 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: crearsoftincremental_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: crearsoftincremental_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Generación de software Incremental' ;
- $TbMsg[1]='Características del ordenador';
- $TbMsg[2]='Nombre';
- $TbMsg[3]='Dirección IP';
- $TbMsg[4]='Dirección MAC';
+ $TbMsg[0]='Generació de software Incremental <br> (experimental) ' ;
+ $TbMsg[1]='Característiques de l\'ordinador';
+ $TbMsg[2]='Nom';
+ $TbMsg[3]='Direcció IP';
+ $TbMsg[4]='Direcció MAC';
$TbMsg[5]='Perfil Hardware';
- $TbMsg[6]='Datos a suministrar';
+ $TbMsg[6]='Dades a subministrar';
$TbMsg[7]='';
$TbMsg[8]='Par';
- $TbMsg[9]='Nombre Perfil';
+ $TbMsg[9]='Nom Perfil';
$TbMsg[10]='Software incremental disponible';
-?> \ No newline at end of file
+?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php
index cd0087eb..dc6885cd 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/ejecutarscripts_cat.php
@@ -5,47 +5,48 @@
// Idioma: Català
//________________________________________________________________________________________________________
if (empty ($TbMsg)) $TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Ejecutar script';
- $TbMsg[6]='Ámbito';
- $TbMsg[7]='Título';
- $TbMsg[8]='Description';
- $TbMsg[9]='Código del script';
- $TbMsg[10]='Datos a suministrar';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grupo d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Executar script';
+ $TbMsg[6]='Àmbit';
+ $TbMsg[7]='Títol';
+ $TbMsg[8]='Descripció';
+ $TbMsg[9]='Codi del script';
+ $TbMsg[10]='Dades a subministrar';
+ $TbMsg[11]='Eliminar Imatge de la Cache de Client';
- $TbMsg["WDI11"]='Asistente de Despliegue de la imagen';
- $TbMsg["WDI12"]='Generar InstruccionOG';
- $TbMsg["WDI13"]='Elige si solo quieres almacenar la imagen en la Cache - UpdateCache ';
+ $TbMsg["WDI11"]='Asistent de Desplegament de la imatge';
+ $TbMsg["WDI12"]='Generar Instrucció OG';
+ $TbMsg["WDI13"]='Escull si només vols emmagatzemar la imatge en la Cache - UpdateCache ';
$TbMsg["WDI14"]='deployImage (update+restore)';
- $TbMsg["WDI15"]='updateCache (solo descarga)';
- $TbMsg["WDI16"]='opciones basicas';
- $TbMsg["WDI17"]='opciones multicast';
- $TbMsg["WDI18"]='opciones torrent';
- $TbMsg["WDI19"]='opciones unicast';
- $TbMsg["WDI20"]='Elige la particion del disco donde se restaurar la imagen:';
- $TbMsg["WDI21"]='Elige la imagen a distribuir:';
- $TbMsg["WDI22"]='--Selecciona imagen --';
- $TbMsg["WDI23"]='Elige el metodo de transferencia';
+ $TbMsg["WDI15"]='updateCache (només descarrega)';
+ $TbMsg["WDI16"]='opcions básiques';
+ $TbMsg["WDI17"]='opcions multicast';
+ $TbMsg["WDI18"]='opcions torrent';
+ $TbMsg["WDI19"]='opcions unicast';
+ $TbMsg["WDI20"]='Escull la partició del disc on es restaurarà la imatge:';
+ $TbMsg["WDI21"]='Escull la imatge a distribuir:';
+ $TbMsg["WDI22"]='--Selecciona imatge --';
+ $TbMsg["WDI23"]='Escull el mètode de transferència';
- $TbMsg["WDI24"]='puerto : ';
- $TbMsg["WDI25"]='direccion Mcast : ';
- $TbMsg["WDI26"]='modo : ';
- $TbMsg["WDI27"]='velocidad : ';
- $TbMsg["WDI28"]='nº Max. clientes : ';
- $TbMsg["WDI29"]='Tiempo(seg) Max. Espera : ';
+ $TbMsg["WDI24"]='port : ';
+ $TbMsg["WDI25"]='direcció Mcast : ';
+ $TbMsg["WDI26"]='mode : ';
+ $TbMsg["WDI27"]='velocitat : ';
+ $TbMsg["WDI28"]='n&ordm; M&aacute;x. clients : ';
+ $TbMsg["WDI29"]='Temps M&aacute;x. Espera (seg) : ';
- $TbMsg["WDI30"]='tiempo de semilla :';
+ $TbMsg["WDI30"]='temps de llavor :';
- $TbMsg["WCRP31"]='Asistente Clonacion Particiones Remotas';
- $TbMsg["WCRP32"]='Elige equipo MASTER:';
- $TbMsg["WCRP33"]='Elige desde el Master la imagen o particion a enviar';
- $TbMsg["WCRP34"]='Elige la identificacion de la particion destino de los clientes:';
- $TbMsg["WCRP35"]='Elige el metodo de transferencia';
- $TbMsg["WCRP36"]='Elige herramienta de clonacion:';
- $TbMsg["WCRP37"]='Elige compresor para la herramienta de clonacion:';
+ $TbMsg["WCRP31"]='Assistent Clonaci&oacute; Particions Remotes';
+ $TbMsg["WCRP32"]='Escull equip MASTER:';
+ $TbMsg["WCRP33"]='Escull des de el Master la imatge o partició a enviar';
+ $TbMsg["WCRP34"]='Escull la identificació de la partició destí dels clients:';
+ $TbMsg["WCRP35"]='Escull el mètode de transferència';
+ $TbMsg["WCRP36"]='Escull eina de clonaci&oacute;:';
+ $TbMsg["WCRP37"]='Escull compressor per l\'eina de clonaci&oacute;:';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagencache_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagencache_cat.php
new file mode 100644
index 00000000..5280c31a
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagencache_cat.php
@@ -0,0 +1,29 @@
+<?php
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: eliminarimagencache_cat.php (Comandos)
+// Idioma: Catal�
+//________________________________________________________________________________________________________
+ if (empty ($TbMsg)) $TbMsg=array();
+ $TbMsg[0]='Creaci&oacute; d\'Imatge';
+ $TbMsg[1]='Caracter&iacute;stiques de l\'ordinador';
+ $TbMsg[2]='Nom';
+ $TbMsg[3]='Direcci&oacute; IP';
+ $TbMsg[4]='Direcci&oacute; MAC';
+ $TbMsg[5]='Eliminar Imatge de la Cache en Client';
+ $TbMsg[6]='Dades a subministrar';
+ $TbMsg[7]='Im&aacute;tges Disponibles';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Nom S.O.';
+ $TbMsg[10]='Nom de la Imatge';
+ $TbMsg[11]='N&ordm;';
+ $TbMsg[12]='Marcar';
+ $TbMsg[13]='Grand�ria';
+ $TbMsg[14]='Imatge NO est&aacute; al Repositori';
+ $TbMsg[15]=' te varis Repositoris assignats';
+ $TbMsg[16]=' NO te el Repositori al Servidor';
+ $TbMsg[17]='Limitacions Versi&oacute; 1.1';
+ $TbMsg[18]='Grand�ria de la imatge disponible si Repositori i Servidor Web allotjats al mateix Servidor';
+ $TbMsg[19]='Tipus';
+ $TbMsg["CONFIG_NOCONFIG"]='Sense configuraci�: client no connectat al servidor.';
+?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagenrepo_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagenrepo_cat.php
new file mode 100644
index 00000000..4a179f64
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/comandos/eliminarimagenrepo_cat.php
@@ -0,0 +1,41 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: eliminarimagencache_esp.php (Comandos)
+// Idioma: Español
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Creaci&oacute; d\'Imatge';
+ $TbMsg[1]='Caracter&iacute;stiques de l\'ordinador';
+ $TbMsg[2]='Nom';
+ $TbMsg[3]='Direcci&oacute; IP';
+ $TbMsg[4]='Direcci&oacute; MAC';
+ $TbMsg[5]='Eliminar Imatge del Repositori';
+ $TbMsg[6]='Dades a subministrar';
+ $TbMsg[7]='Im&aacute;tges Disponibles';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Nom S.O.';
+ $TbMsg[10]='----------- Nom de la Imatge -----------';
+ $TbMsg[11]='N&ordm;';
+ $TbMsg[12]='Marcar';
+ $TbMsg[13]='Grandària';
+ $TbMsg[14]='Imatge Bloquejada';
+ $TbMsg[15]='Eliminant Imatge';
+ $TbMsg[16]='**** ATENCIÓN ****';
+ $TbMsg[17]='Si premeu Acceptar seliminen els objectes seleccionats';
+ $TbMsg[18]="Espaci TOTAL";
+ $TbMsg[19]="Espaci Ocupat";
+ $TbMsg[20]="Espaci Lliure";
+ $TbMsg[21]="% Ocupat";
+ $TbMsg[22]="No hi ha connexió amb el Repositori";
+ $TbMsg[23]='Limitacions Versió 1.5';
+ $TbMsg[24]='Informació Espai és permès si Repositori i Servidor Web allotjats al mateix Servidor';
+ $TbMsg[25]='NO Creat';
+ $TbMsg[26]='Eliminar Objecte Imatge';
+ $TbMsg[27]='Tipus';
+ $TbMsg[28]='Vista Repositori Complet';
+ $TbMsg[29]='Vista Unitat Organitzativa';
+ $TbMsg[30]='Unitat Organitzativa';
+ $TbMsg[31]='Arxiu';
+ $TbMsg[32]='Directori';
+?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/gestor_ejecutarscripts_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/gestor_ejecutarscripts_cat.php
index ca0d1042..2c1873aa 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/gestor_ejecutarscripts_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/gestor_ejecutarscripts_cat.php
@@ -1,13 +1,13 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: gestor_ejecutarscripts_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: gestor_ejecutarscripts_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[1]='"ATENCIÓN: El Comando Ejecutar Scripts has sido registrado correctamente"';
- $TbMsg[2]='"ATENCIÓN: Hay algún problema para ejecutar el script"';
- $TbMsg[3]='"ATENCIÓN: El fichero no tiene la extensión .rbc"';
- $TbMsg[4]='"ATENCIÓN: El fichero no contiene código Rembo-C para ejecutar"';
- $TbMsg[5]='"ATENCIÓN: Hay algún problema para salvar el fichero de script"';
+ $TbMsg[1]='"ATENCIÓ: La Comanda Executar Scripts ha sigut registrada correctament"';
+ $TbMsg[2]='"ATENCIÓ: Hi ha algun problema per executar el script"';
+ $TbMsg[3]='"ATENCIÓ: El fitxer no te la extensió .rbc"';
+ $TbMsg[4]='"ATENCIÓ: El fitxer no conté codi Rembo-C per executar"';
+ $TbMsg[5]='"ATENCIÓ: Hi ha algun problema per salvar el fitxer de script"';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/iniciarsesion_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/iniciarsesion_cat.php
index 45f2f152..827108af 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/iniciarsesion_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/iniciarsesion_cat.php
@@ -1,19 +1,21 @@
-<?
+<?php
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: crearperfilsoftware_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: iniciarsesion_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
- $TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Iniciar Sesión';
- $TbMsg[6]='Ámbito';
- $TbMsg[7]='Datos a suministrar';
+ if (empty ($TbMsg)) $TbMsg=array();
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Iniciar Sessió';
+ $TbMsg[6]='Àmbit';
+ $TbMsg[7]='Dades a subministrar';
$TbMsg[8]='Par';
- $TbMsg[9]='Nombre S.O.';
- $TbMsg[10]='Nombre de la Imagen ';
+ $TbMsg[9]='Nom S.O.';
+ $TbMsg[10]='Nom de la Imatge ';
+
+
?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/inventariohardware_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/inventariohardware_cat.php
index 8736e3d9..80a6e8e1 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/inventariohardware_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/inventariohardware_cat.php
@@ -1,16 +1,16 @@
-<?
+<?php
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: inventariohardware__esp.php (Comandos)
-// Idioma: Espa�l
+// Fichero de idiomas php: inventariohardware_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
- $TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Inventario Hardware';
- $TbMsg[6]='Ámbito';
-
+ if (empty ($TbMsg)) $TbMsg=array();
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Inventari Hardware';
+ $TbMsg[6]='Àmbit';
+
?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/inventariosoftware_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/inventariosoftware_cat.php
index 6bd5a009..a638c406 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/inventariosoftware_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/inventariosoftware_cat.php
@@ -1,18 +1,18 @@
-<?
+<?php
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: inventariosoftware__esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: inventariosoftware_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
- $TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Inventario Software';
- $TbMsg[6]='Ámbito';
- $TbMsg[7]='Datos a suministrar';
+ if (empty ($TbMsg)) $TbMsg=array();
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Inventari Software';
+ $TbMsg[6]='Àmbit';
+ $TbMsg[7]='Dades a subministrar';
$TbMsg[8]='Par';
- $TbMsg[9]='Nombre S.O.';
+ $TbMsg[9]='Nom S.O.';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/mensajes_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/mensajes_cat.php
index ae41ac2d..bdd675cb 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/mensajes_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/mensajes_cat.php
@@ -1,4 +1,4 @@
-<?
+<?php
//________________________________________________________
//
// Fichero de idiomas php: comandos/mensajes_cat.php
@@ -6,17 +6,23 @@
//________________________________________________________
if (empty ($TbMsg)) $TbMsg=Array();
$TbMsg["COMMAND_Apagar"]="Apagar";
-$TbMsg["COMMAND_Arrancar"]="Arrancar";
+$TbMsg["COMMAND_Arrancar"]="Arrencar";
$TbMsg["COMMAND_Configurar"]="Configurar";
-$TbMsg["COMMAND_CrearImagen"]="Crear Imagen";
-$TbMsg["COMMAND_EjecutarScript"]="Ejecutar Script";
-$TbMsg["COMMAND_IniciarSesion"]="Iniciar Sesi&oacute;n";
-$TbMsg["COMMAND_InventarioHardware"]="Inventario Hardware";
-$TbMsg["COMMAND_InventarioSoftware"]="Inventario Software";
+$TbMsg["COMMAND_CrearImagen"]="Crear Imatge";
+$TbMsg["COMMAND_EjecutarScript"]="Executar Script";
+$TbMsg["COMMAND_EliminarImagenCache"]="Eliminar Imatge Cache";
+$TbMsg["COMMAND_IniciarSesion"]="Iniciar Sesi&oacute;";
+$TbMsg["COMMAND_InventarioHardware"]="Inventari Hardware";
+$TbMsg["COMMAND_InventarioSoftware"]="Inventari Software";
$TbMsg["COMMAND_Reiniciar"]="Reiniciar";
-$TbMsg["COMMAND_RestaurarImagen"]="Restaurar Imagen";
-$TbMsg["WIZARD_Asistente Particionado"]="Particionar";
-$TbMsg["WIZARD_Asistente Clonacion Particiones Remotas"]="Clonar paticiones remotas";
-$TbMsg["WIZARD_Asistente "Deploy" de Imagenes"]="Deploy de imagenes";
+$TbMsg["COMMAND_RestaurarImagen"]="Restaurar Imatge";
+$TbMsg["COMMAND_EliminarImagenCache"]="Eliminar Imatge de Cach&eacute;";
+$TbMsg["COMMAND_CrearImagenBasica"]="Crear Imatge Bàsica";
+$TbMsg["COMMAND_RestaurarImagenBasica"]="Restaurar Imatge Bàsica";
+$TbMsg["COMMAND_CrearSoftIncremental"]="Crear Software Incremental";
+$TbMsg["COMMAND_RestaurarSoftIncremental"]="Restaurar Software Incremental";
+$TbMsg["WIZARD_Asistente Particionado"]="Assistent de particionat";
+$TbMsg["WIZARD_Asistente Clonacion Particiones Remotas"]="Clonar particions remotes";
+$TbMsg["WIZARD_Asistente Deploy de Imagenes"]="Deploy d\'imatges";
?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/opcionesacciones_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/opcionesacciones_cat.php
index a25d6c18..cd1e14c3 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/opcionesacciones_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/opcionesacciones_cat.php
@@ -1,21 +1,21 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: opcionesacciones_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: opcionesacciones_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsgAux=array();
- $TbMsgAux[0]='Opciones de Ejecución';
- $TbMsgAux[1]='Ejecutar inmediatamente';
- $TbMsgAux[2]='Incluirlo en Cola de Acciones';
- $TbMsgAux[3]='No incluirlo en Cola de Acciones';
- $TbMsgAux[4]='Programar comando';
- $TbMsgAux[5]='Guardar como procedimiento';
- $TbMsgAux[6]='Guardar como nuevo procedimiento';
- $TbMsgAux[7]='Incluir en un procedimiento existente';
- $TbMsgAux[8]='Orden de ejecución';
- $TbMsgAux[9]='Guardar como tarea';
- $TbMsgAux[10]='Guardar como una tarea nueva' ;
- $TbMsgAux[11]='Incluir en una tarea existente' ;
- $TbMsgAux[12]='Orden de ejecución';
+ $TbMsgAux[0]='Opcions d\'Execució';
+ $TbMsgAux[1]='Executar inmediatament';
+ $TbMsgAux[2]='Incluir-ho en Cola d\'Accions';
+ $TbMsgAux[3]='No incluir-ho en Cola d\'Accions';
+ $TbMsgAux[4]='Programar comanda';
+ $TbMsgAux[5]='Guardar como a procediment';
+ $TbMsgAux[6]='Guardar como a nou procediment';
+ $TbMsgAux[7]='Incluir-ho en un procediment existent';
+ $TbMsgAux[8]='Ordre d\'execució';
+ $TbMsgAux[9]='Guardar como a tasca';
+ $TbMsgAux[10]='Guardar como a tasca nova' ;
+ $TbMsgAux[11]='Incluir-ho en una tasca existent' ;
+ $TbMsgAux[12]='Ordre d\'execució';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/particionaryformatear_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/particionaryformatear_cat.php
index e309dce1..43c82dd5 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/particionaryformatear_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/particionaryformatear_cat.php
@@ -1,26 +1,26 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: particionaryformatear_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: particionaryformatear_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Particionar y Formatear';
- $TbMsg[6]='Ámbito';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Particionar i Formatejar';
+ $TbMsg[6]='Àmbit';
$TbMsg[7]='';
$TbMsg[8]='Par';
- $TbMsg[9]='Tipo';
- $TbMsg[10]='Nombre S.O.';
- $TbMsg[11]='Tamaño';
- $TbMsg[12]='Operación';
- $TbMsg[13]='Sin action';
- $TbMsg[14]='Formatear';
+ $TbMsg[9]='Tipus';
+ $TbMsg[10]='Nom S.O.';
+ $TbMsg[11]='Grandària';
+ $TbMsg[12]='Operació';
+ $TbMsg[13]='Sense action';
+ $TbMsg[14]='Formatejar';
$TbMsg[15]='Ocultar';
$TbMsg[16]='Mostrar';
- $TbMsg[17]='¡¡ Espacio libre !!';
+ $TbMsg[17]='¡¡ Espai liure !!';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/reiniciar_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/reiniciar_cat.php
index 1dd0a887..62bf6ae2 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/reiniciar_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/reiniciar_cat.php
@@ -1,16 +1,16 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: reiniciar_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: reiniciar_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Reiniciar ordenadores';
- $TbMsg[6]='Ámbito';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grupo d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Reiniciar ordinadors';
+ $TbMsg[6]='Àmbit';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/rembooffline_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/rembooffline_cat.php
index fd048c06..cd171c54 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/rembooffline_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/rembooffline_cat.php
@@ -1,16 +1,16 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: rembooffline_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: rembooffline_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Activar Rembo OffLine';
- $TbMsg[6]='Ámbito';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grupo d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Activar rembo Offline';
+ $TbMsg[6]='Àmbit';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagen_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagen_cat.php
index 1bb81e5f..04178922 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagen_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagen_cat.php
@@ -1,45 +1,45 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: restaurarimagen_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: restaurarimagen_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Restaurar Imagen';
- $TbMsg[6]='Ámbito';
- $TbMsg[7]='Datos a suministrar';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grupo d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Restaurar Imatge';
+ $TbMsg[6]='Àmbit';
+ $TbMsg[7]='Dades a subministrar';
$TbMsg[8]='Par';
- $TbMsg[9]='Método';
- $TbMsg[10]='Imagen (Mismo sistema)';
- $TbMsg[11]='Imagen (Distinto sistema)';
- $TbMsg[12]='Desconocido';
+ $TbMsg[9]='Mètode';
+ $TbMsg[10]='Imatge (Mateix sistema)';
+ $TbMsg[11]='Imatge (Diferent sistema)';
+ $TbMsg[12]='Desconegut';
$TbMsg[13]='';
- $TbMsg[14]='Ámbito';
- $TbMsg[15]='Ordenadores';
+ $TbMsg[14]='Àmbit';
+ $TbMsg[15]='Ordinadors';
$TbMsg[16]='';
$TbMsg[17]='';
- $TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:";
- $TbMsg[19]="Datos a suministrar";
+ $TbMsg[18]="DES-AGRUPAR SEGONS VALORS DIIFERENTS DE:";
+ $TbMsg[19]="Dades a subministrar";
// Cabeceras de tabla de configuración
- $TbMsg[20]='Partición';
- $TbMsg[21]='S.O. Instalado';
- $TbMsg[22]='Tamaño';
- $TbMsg[23]='Datos de configuration';
- $TbMsg[24]='Tipo';
- $TbMsg[25]='Imagen';
+ $TbMsg[20]='Partició';
+ $TbMsg[21]='S.O. Instal·lat';
+ $TbMsg[22]='Grandària';
+ $TbMsg[23]='Dades de configuració';
+ $TbMsg[24]='Tipus';
+ $TbMsg[25]='Imatge';
$TbMsg[26]='Perfil Software';
$TbMsg[27]='S.F.';
- $TbMsg[28]='Ninguno';
- $TbMsg[29]='Desconocido';
+ $TbMsg[28]='Cap';
+ $TbMsg[29]='Desconegut';
// Desagrupamiento
- $TbMsg[30]='Sistema de Ficheros';
- $TbMsg[31]='Nombre del S.O.';
- $TbMsg[32]='Tamaño de partición';
- $TbMsg[33]='Nombre de la Imagen ';
+ $TbMsg[30]='Sistema de Fitxers';
+ $TbMsg[31]='Nom del S.O.';
+ $TbMsg[32]='Grandària de partició';
+ $TbMsg[33]='Nom de la Imatge ';
$TbMsg[34]='Perfil software';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagenbasica_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagenbasica_cat.php
new file mode 100644
index 00000000..66d2d731
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/comandos/restaurarimagenbasica_cat.php
@@ -0,0 +1,53 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: restaurarimagenbasica_cat.php (Comandos)
+// Idioma: Catalán
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Centros';
+ $TbMsg[1]='Grupo de aulas';
+ $TbMsg[2]='Aulas';
+ $TbMsg[3]='Grupo de ordenadores';
+ $TbMsg[4]='Ordenadores';
+ $TbMsg[5]='Restaurar Imagen Básica <br> (experimental)';
+ $TbMsg[6]='Ámbito';
+ $TbMsg[7]='Datos a suministrar';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Repositorio';
+ $TbMsg[10]='Imagen';
+ $TbMsg[11]='Opciones Adicionales';
+ $TbMsg[12]='Desconocido';
+ $TbMsg[13]='Caché';
+ $TbMsg[14]='Ámbito';
+ $TbMsg[15]='Ordenadores';
+ $TbMsg[16]='Desde';
+ $TbMsg[17]='';
+ $TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:";
+ $TbMsg[19]="Datos a suministrar";
+ // Cabeceras de tabla de configuración
+ $TbMsg[20]='Partición';
+ $TbMsg[21]='S.O. Instalado';
+ $TbMsg[22]='Tamaño';
+ $TbMsg[23]='Datos de configuration';
+ $TbMsg[24]='Tipo';
+ $TbMsg[25]='Imagen';
+ $TbMsg[26]='Perfil Software';
+ $TbMsg[27]='S.F.';
+ $TbMsg[28]='Ninguno';
+ $TbMsg[29]='Desconocido';
+ // Desagrupamiento
+ $TbMsg[30]='Sistema de Ficheros';
+ $TbMsg[31]='Nombre del S.O.';
+ $TbMsg[32]='Tamaño de partición';
+ $TbMsg[33]='Nombre de la Imagen ';
+ $TbMsg[34]='Perfil software';
+ // OPciones adicionales
+ $TbMsg[35]='Borrar la Partición Previamente';
+ $TbMsg[36]='Copiar Imagen en cache';
+ $TbMsg[37]='Borrarla previamente de la cache';
+ $TbMsg[38]='No borrar archivos en destino';
+ $TbMsg[39]='Método';
+ $TbMsg[40]='Unicast';
+ $TbMsg[41]='Multicast';
+?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/restaurarsoftincremental_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/restaurarsoftincremental_cat.php
new file mode 100644
index 00000000..e0524484
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/comandos/restaurarsoftincremental_cat.php
@@ -0,0 +1,51 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: restaurarsoftincremental_cat.php (Comandos)
+// Idioma: Catalán
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Centros';
+ $TbMsg[1]='Grupo de aulas';
+ $TbMsg[2]='Aulas';
+ $TbMsg[3]='Grupo de ordenadores';
+ $TbMsg[4]='Ordenadores';
+ $TbMsg[5]='Restaurar Software Incremental <br> (experimental)';
+ $TbMsg[6]='Ámbito';
+ $TbMsg[7]='Datos a suministrar';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Repositorio';
+ $TbMsg[10]='Imagen';
+ $TbMsg[11]='Opciones Adicionales';
+ $TbMsg[12]='Desconocido';
+ $TbMsg[13]='Caché';
+ $TbMsg[14]='Ámbito';
+ $TbMsg[15]='Ordenadores';
+ $TbMsg[16]='Desde';
+ $TbMsg[17]='';
+ $TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:";
+ $TbMsg[19]="Datos a suministrar";
+ // Cabeceras de tabla de configuración
+ $TbMsg[20]='Partición';
+ $TbMsg[21]='S.O. Instalado';
+ $TbMsg[22]='Tamaño';
+ $TbMsg[23]='Datos de configuration';
+ $TbMsg[24]='Tipo';
+ $TbMsg[25]='Imagen';
+ $TbMsg[26]='Perfil Software';
+ $TbMsg[27]='S.F.';
+ $TbMsg[28]='Ninguno';
+ $TbMsg[29]='Desconocido';
+ // Desagrupamiento
+ $TbMsg[30]='Sistema de Ficheros';
+ $TbMsg[31]='Nombre del S.O.';
+ $TbMsg[32]='Tamaño de partición';
+ $TbMsg[33]='Nombre de la Imagen ';
+ $TbMsg[34]='Perfil software';
+ // OPciones adicionales
+ $TbMsg[35]='Borrar la Partición Previamente';
+ $TbMsg[36]='Copiar Imagen en cache';
+ $TbMsg[37]='Borrarla previamente de la cache';
+ $TbMsg[38]='Software Incremental';
+ $TbMsg[39]='No borrar archivos en destino';
+?>
diff --git a/admin/WebConsole/idiomas/php/cat/comandos/tomaconfiguracion_cat.php b/admin/WebConsole/idiomas/php/cat/comandos/tomaconfiguracion_cat.php
index 7bc1e25e..d367db0c 100644
--- a/admin/WebConsole/idiomas/php/cat/comandos/tomaconfiguracion_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/comandos/tomaconfiguracion_cat.php
@@ -1,16 +1,16 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: tomaconfiguracion_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: tomaconfiguracion_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Tomar configuración';
- $TbMsg[6]='Ámbito';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Agafar configuració';
+ $TbMsg[6]='Àmbit';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php b/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php
index 9feb3e2f..4370c92f 100644
--- a/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php
@@ -4,61 +4,61 @@
// Fitxer d'idiomes php: configuraciones_cat.php
// Idioma: Català
//____________________________________________________
-$TbMsg=array();
-$TbMsg[0]='Configuraciones';
-$TbMsg[1]='Ámbito';
-$TbMsg[2]="Aulas";
-$TbMsg[3]="Grupo de Ordenadores";
-$TbMsg[4]="Ordenadores";
+if (empty ($TbMsg)) $TbMsg=array();
+$TbMsg[0]='Configuracions';
+$TbMsg[1]='Àmbit';
+$TbMsg[2]="Aules";
+$TbMsg[3]="Grup d\'Ordinadors";
+$TbMsg[4]="Ordinadors";
-$TbMsg[5]="Nombre";
-$TbMsg[6]="Ubicación";
-$TbMsg[7]="Cañón";
-$TbMsg[8]="Pizarra";
-$TbMsg[9]="Puestos";
-$TbMsg[10]="URL Imagen";
+$TbMsg[5]="Nom";
+$TbMsg[6]="Ubicació";
+$TbMsg[7]="Canó";
+$TbMsg[8]="Pissarra";
+$TbMsg[9]="Llocs";
+$TbMsg[10]="URL Imatge";
$TbMsg[11]="Menú";
-$TbMsg[12]="Comentarios";
-$TbMsg[13]="Ordenadores";
+$TbMsg[12]="Comentaris";
+$TbMsg[13]="Ordinadors";
-$TbMsg[14]="Nombre";
-$TbMsg[15]="Dirección IP";
-$TbMsg[16]="Dirección MAC";
+$TbMsg[14]="Nom";
+$TbMsg[15]="Direcció IP";
+$TbMsg[16]="Direcció MAC";
$TbMsg[17]="Perfil Hardware";
-$TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:";
-$TbMsg[19]="Datos a suministrar";
+$TbMsg[18]="DES-AGRUPAR SEGONS VALORS DIFERENTS DE:";
+$TbMsg[19]="Dades a subministrar";
-$TbMsg[20]='Partición';
-$TbMsg[21]='S.O. Instalado';
-$TbMsg[22]='Tamaño';
-$TbMsg[23]='Datos de configuración';
-$TbMsg[24]='Tipo';
-$TbMsg[25]='Imagen';
+$TbMsg[20]='Partició';
+$TbMsg[21]='S.O. Instal·lat';
+$TbMsg[22]='Grandària';
+$TbMsg[23]='Dades de configuració';
+$TbMsg[24]='Tipus';
+$TbMsg[25]='Imatge';
$TbMsg[26]='Perfil Software';
$TbMsg[27]='S.F.';
-$TbMsg[28]='Ninguno';
-$TbMsg[29]='Desconocido';
+$TbMsg[28]='Cap';
+$TbMsg[29]='Desconegut';
-$TbMsg[30]='Sistema de Ficheros';
-$TbMsg[31]='Nombre del S.O.';
-$TbMsg[32]='Tamaño de partición';
-$TbMsg[33]='Nombre de la Imagen ';
+$TbMsg[30]='Sistema de Fitxers';
+$TbMsg[31]='Nom del S.O.';
+$TbMsg[32]='Grandària de partició';
+$TbMsg[33]='Nom de la Imatge ';
$TbMsg[34]='Perfil software';
-$TbMsg[35]='Disco';
-$TbMsg[36]='Particiones Primarias';
-$TbMsg[37]='Particiones L&oacute;gicas';
-$TbMsg[38]='Menor espacio libre (KB)';
-$TbMsg[39]='Personalizar';
-$TbMsg[40]='Sin modificar tama&ntilde;o';
-$TbMsg[41]='Generar Instrucci&oacute;n OG';
-$TbMsg["CONFIG_PARTTABLE"='Tabla de particiones';
+$TbMsg[35]='Disc';
+$TbMsg[36]='Particions Primàries';
+$TbMsg[37]='Particions Lògiques';
+$TbMsg[38]='Menor espai lliure (KB)';
+$TbMsg[39]='Personalitzar';
+$TbMsg[40]='Sense modificar grandària';
+$TbMsg[41]='Generar Instrucció OG';
+$TbMsg["CONFIG_PARTTABLE"]='Tabla de particions';
$TbMsg[42]='Variable';
-$TbMsg[43]='Sin configuraci&oacute;n: cliente no conectado al servidor.';
-$TbMsg[44]='Equipo sin Perfil de Hardware';
-$TbMsg[45]='Agregue Perfil para obtener datos';
-$TbMsg[495]='Contenido Cach&eacute;';
-$TbMsg[4951]='Cach&eacute; libre';
+$TbMsg["CONFIG_NOCONFIG"]='Sense configuració: client no connectat al servidor.';
+$TbMsg[44]='Equip sense Perfil de Hardware';
+$TbMsg[45]='Afegeixi Perfil per obtenir dades';
+$TbMsg[495]='Contingut Caché';
+$TbMsg[4951]='Caché lliure';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/conmutar_cat.php b/admin/WebConsole/idiomas/php/cat/conmutar_cat.php
index 73d998ee..e4f52b23 100644
--- a/admin/WebConsole/idiomas/php/cat/conmutar_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/conmutar_cat.php
@@ -1,10 +1,10 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: conmutar_esp.php
+// Fitxer d'idiomes php: conmutar_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Aquest mbit ha conmutat correctament';
- $TbMsg[1]='ATENCI: Ha hagut algn problema al conmutar L'mbit';
+ $TbMsg[0]='Aquest mbit ha commutat correctament';
+ $TbMsg[1]='ATENCI: Ha hagut algun problema al conmutar l\'mbit';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/consolaremota_cat.php b/admin/WebConsole/idiomas/php/cat/consolaremota_cat.php
index 0210a511..75ae4920 100644
--- a/admin/WebConsole/idiomas/php/cat/consolaremota_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/consolaremota_cat.php
@@ -1,24 +1,24 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: incorporaordenadores_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: incorporaordenadores_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenadores';
- $TbMsg[5]='Apagar ordenadores';
- $TbMsg[6]='Ámbito';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grupo d\'ordinadors';
+ $TbMsg[4]='Ordinadors';
+ $TbMsg[5]='Apagar ordinadors';
+ $TbMsg[6]='Àmbit';
$TbMsg[7]='Consola remota';
- $TbMsg[8]='Atención para ejecutar un comando teclee su sintaxis en la caja de texto de comandos y pulse enter';
- $TbMsg[9]='Se ha enviado una petición de consola remota a este ámbito, puede empezar a escribir comandos en la ventana para recibir el eco en la ventana de salida';
- $TbMsg[10]='ATENCIÓN: Ha habido algún problema al enviar una petición de consola remota a este ámbito';
- $TbMsg[11]='Código del script';
- $TbMsg[12]='Eco remoto';
- $TbMsg[13]='ATENCIÓN.- Ha elegido un ámbito de aplicación para la consola remota distinto al de "ordenador". <BR>Para visulizar el eco de cualquier cliente pulse sobre él con el botón secundario y elija "Eco de consola"; <BR>Se abrirá una ventana que se referescará automáticamente donde podrá hacer un seguiento del comando/script introducido';
- $TbMsg[14]='...Espere por favor, se está enviando el código del script';
- $TbMsg[15]='...El código del script se ha enviado, para ver la salida de cualquier ordenador elija "Eco de Consola"';
+ $TbMsg[8]='ATENCIÓ: Per executar una comanda teclegi la seva sintaxis en la caixa de text de comandes i premi enter';
+ $TbMsg[9]='S\'ha enviat una petició de consola remota a aquest àmbit, pot començar a escriure comandes en la finestra per rebre l\'eco en la finestra de sortida';
+ $TbMsg[10]='ATENCIÓ: Ha ocorregut algun problema en l\'enviament d\'una petició de consola remota en aquest àmbit';
+ $TbMsg[11]='Codi del script';
+ $TbMsg[12]='Eco remot';
+ $TbMsg[13]='ATENCIÓ: Ha escollit un àmbit d\'aplicació per la consola remota diferent al "d\'ordinador". <BR>Per visualitzar l\'eco de qualsevol client premi sobre ell amb el botón secundari i seleccioni "Eco de consola"; <BR>S\'obrirà una finestra que es refrescarà automàticament on podrà fer un seguiment de la/el comanda/script introduït';
+ $TbMsg[14]='...Esperi si us plau, enviant el codi del script';
+ $TbMsg[15]='...El codi del script s\'ha enviat, per veure la sortida de qualsevol ordinador seleccioni "Eco de Consola"';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/ecoremoto_cat.php b/admin/WebConsole/idiomas/php/cat/ecoremoto_cat.php
index 669c225c..f14c1f7d 100644
--- a/admin/WebConsole/idiomas/php/cat/ecoremoto_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/ecoremoto_cat.php
@@ -1,21 +1,21 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: incorporaordenadores_esp.php (Comandos)
-// Idioma: Español
+// Fichero de idiomas php: incorporaordenadores_cat.php (Comandos)
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Centros';
- $TbMsg[1]='Grupo de aulas';
- $TbMsg[2]='Aulas';
- $TbMsg[3]='Grupo de ordenadores';
- $TbMsg[4]='Ordenador';
+ $TbMsg[0]='Centres';
+ $TbMsg[1]='Grup d\'aules';
+ $TbMsg[2]='Aules';
+ $TbMsg[3]='Grup d\'ordinadors';
+ $TbMsg[4]='Ordinador';
$TbMsg[5]='';
- $TbMsg[6]='Ámbito';
+ $TbMsg[6]='Àmbit';
$TbMsg[7]='Eco de consola remota';
$TbMsg[8]='';
- $TbMsg[9]='Se ha enviado una petición de eco consola remota a este ámbito, espere unos segundos para empezar a recibir información de esta consola...';
- $TbMsg[10]='ATENCIÓN: Ha habido algún problema al enviar una petición de eco consola remota a este ámbito';
- $TbMsg[11]='... espere por favor.';
+ $TbMsg[9]='S\'ha enviat una petició de eco de consola remota a aquest àmbit, esperi uns segons per començar a rebre informació d\'aquesta consola...';
+ $TbMsg[10]='ATENCIÓ: Ha ocorregut algun problema al enviar una petició de eco de consola remota a aquest àmbit';
+ $TbMsg[11]='... esperi si us plau.';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/ejecutaracciones_cat.php b/admin/WebConsole/idiomas/php/cat/ejecutaracciones_cat.php
index 46a60e41..c7b0ec99 100644
--- a/admin/WebConsole/idiomas/php/cat/ejecutaracciones_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/ejecutaracciones_cat.php
@@ -1,7 +1,7 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: acciones_esp.php
+// Fitxer d'idiomes php: acciones_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
@@ -11,8 +11,9 @@
$TbMsg[3]='Grup d\'ordinadors';
$TbMsg[4]='Ordinadors';
$TbMsg[5]='Execuci de procediments';
- $TbMsg[6]='mbit';
+ $TbMsg[6]='mbit';
$TbMsg[7]='Procediments';
- $TbMsg[8]='Procedimients';
+ $TbMsg[8]='Procediments';
$TbMsg[9]='"Executar procediment"';
+ $TbMsg[10]='"Afegir com autoexec"';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/estados_cat.php b/admin/WebConsole/idiomas/php/cat/estados_cat.php
index ba77568d..277e38bb 100644
--- a/admin/WebConsole/idiomas/php/cat/estados_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/estados_cat.php
@@ -6,9 +6,9 @@
//____________________________________________
if (empty ($TbMsg)) $TbMsg=array();
-$TbMsg["STATUS_BSY"]="Ocupado";
-$TbMsg["STATUS_INI"]="Iniciando";
-$TbMsg["STATUS_OFF"]="Apagado";
+$TbMsg["STATUS_BSY"]="Ocupat";
+$TbMsg["STATUS_INI"]="Iniciant";
+$TbMsg["STATUS_OFF"]="Apagat";
$TbMsg["STATUS_OPG"]="OpenGnSys";
$TbMsg["STATUS_LNX"]="GNU/Linux";
$TbMsg["STATUS_WXP"]="Windows";
diff --git a/admin/WebConsole/idiomas/php/cat/hardwares_cat.php b/admin/WebConsole/idiomas/php/cat/hardwares_cat.php
index 62fabd65..34c7dec6 100644
--- a/admin/WebConsole/idiomas/php/cat/hardwares_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/hardwares_cat.php
@@ -1,7 +1,7 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: hardwares_esp.php
+// Fitxer d'idiomes php: hardwares_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
@@ -17,7 +17,7 @@
$TbMsg[9]='"Eliminar component"';
$TbMsg[10]='"Nou grup de perfils"';
$TbMsg[11]='"Definir nou perfil"';
- $TbMsg[12]='"Col.locar perfil"';
+ $TbMsg[12]='"Collocar perfil"';
$TbMsg[13]='"Eliminar grup de perfils"';
$TbMsg[14]='"Gesti Components"';
$TbMsg[15]='"Informaci Perfil"';
diff --git a/admin/WebConsole/idiomas/php/cat/iconos_cat.php b/admin/WebConsole/idiomas/php/cat/iconos_cat.php
index 1836a4d6..8022be71 100644
--- a/admin/WebConsole/idiomas/php/cat/iconos_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/iconos_cat.php
@@ -1,30 +1,30 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: m_iconos_esp.php (
-// Idioma: Español
+// Fichero de idiomas php: m_iconos_cat.php (
+// Idioma: Català
//________________________________________________________________________________________________________
// Parte derecha de la página
$TbMsg=array();
- $TbMsg["ERROR_SELECT"]='Fallo al abrir la tabla: Iconos';
+ $TbMsg["ERROR_SELECT"]='Error al obrir la taula: Icones';
- $TbMsg["TITLE"]='Iconos';
- $TbMsg["TABLE_TITLE"]='____ Datos de Iconos ____';
- $TbMsg["TYPE_WEB"]='Iconos web';
- $TbMsg["TYPE_ITEMS"]='Iconos items';
- $TbMsg["TYPE_MENU"]='Fondo menu';
- $TbMsg["SELECT_WEB"]='1=iconos web';
- $TbMsg["SELECT_ITEMS"]='2=iconos items';
- $TbMsg["SELECT_MENU"]='3=fondo menu';
- $TbMsg["MSG_SIZE_FILE"]='El tamaño del archivo no corresponde con los límites permitidos, debe ser mayor que 0 y menor de 100 KB';
- $TbMsg["SUCCESS_SEND"]='Se ha enviado al servidor web el fichero de Icono, correctamente';
- $TbMsg["SUCCESS_UPDATE"]='Se ha sustituido del servidor web el fichero de Icono, correctamente';
- $TbMsg["SUCCESS_DELETE"]='Se ha eliminado del servidor web el fichero de Icono, correctamente';
- $TbMsg["TYPE"]='Tipo';
- $TbMsg["DESCRIP"]='Descripci&oacute;n';
- $TbMsg["NAME"]='Nombre';
- $TbMsg["ICON"]='Icono';
- $TbMsg["REPLACE"]='Sustituir Fichero';
+ $TbMsg["TITLE"]='Icones';
+ $TbMsg["TABLE_TITLE"]='____ Dades de Icones ____';
+ $TbMsg["TYPE_WEB"]='Icones web';
+ $TbMsg["TYPE_ITEMS"]='Icones items';
+ $TbMsg["TYPE_MENU"]='Fons menu';
+ $TbMsg["SELECT_WEB"]='1=icones web';
+ $TbMsg["SELECT_ITEMS"]='2=icones items';
+ $TbMsg["SELECT_MENU"]='3=fons menu';
+ $TbMsg["MSG_SIZE_FILE"]='La grandària de l\'arxiu no correspon amb els límits permesos, ha de ser major que 0 i menor que 100 KB';
+ $TbMsg["SUCCESS_SEND"]='S\'ha enviat al servidor web el fitxer d\'icona correctament';
+ $TbMsg["SUCCESS_UPDATE"]='S\'ha substituit en el servidor web el fitxer d\'icona correctament';
+ $TbMsg["SUCCESS_DELETE"]='S\'ha eliminat del servidor web el fitxer d\'icona correctament';
+ $TbMsg["TYPE"]='Tipus';
+ $TbMsg["DESCRIP"]='Descripció';
+ $TbMsg["NAME"]='Nom';
+ $TbMsg["ICON"]='Icona';
+ $TbMsg["REPLACE"]='Substituir Fitxer';
// Los siguientes nombres de atributos son variables de la página
$TbMsg["INSERTAR"]='INSERTAR';
@@ -33,25 +33,25 @@
$TbMsg["ELIMINAR"]='ELIMINAR';
// Parte izquierda de la página
- $TbMsg["SEARCH_OPT"]='____ Opciones de b&uacute;squeda ____';
- $TbMsg["SEARCH_RESULT"]='Registros encontrados : ';
+ $TbMsg["SEARCH_OPT"]='____ Opcions de cerca ____';
+ $TbMsg["SEARCH_RESULT"]='Registres trobats : ';
$TbMsg["MENU_CONS"]='Consultar';
$TbMsg["MENU_REPLACE"]='Modificar';
$TbMsg["MENU_DEL"]='Eliminar';
// Los atributos son las descripciones de los iconos en la BD
- $TbMsg["Cámara web"]='Cámara web';
- $TbMsg["Controladores IDE"]='Controladores IDE ';
- $TbMsg["Dispositivos de audio"]='Dispositivos de audio';
- $TbMsg["Lectoras y grabadoras de DVD"]='Lectoras y grabadoras de DVD';
- $TbMsg["Mi icono usb"]='Mi icono usb';
- $TbMsg["Placas base"]=' Placas base';
- $TbMsg["Tarjeta de Red"]='Tarjeta de Red';
- $TbMsg["Tarjeta de sonido"]='Tarjeta de sonido';
- $TbMsg["Tarjeta gráfica"]='Tarjeta gráfica';
+ $TbMsg["Cámara web"]='Càmera web';
+ $TbMsg["Controladores IDE"]='Controladors IDE ';
+ $TbMsg["Dispositivos de audio"]='Dispositius d\'àudio';
+ $TbMsg["Lectoras y grabadoras de DVD"]='Lectors i gravadores de DVD';
+ $TbMsg["Mi icono usb"]='La meva icona usb';
+ $TbMsg["Placas base"]='Plaques base';
+ $TbMsg["Tarjeta de Red"]='Targeta de Xarxa';
+ $TbMsg["Tarjeta de sonido"]='Targeta de so';
+ $TbMsg["Tarjeta gráfica"]='Targeta gràfica';
$TbMsg["Logo General de Linux"]='Logo General de Linux';
$TbMsg["Logo Windows XP"]='Logo Windows XP';
- $TbMsg["Ordenador apagado"]='Ordenador apagado';
- $TbMsg["Ordenador encendido"]='Ordenador encendido';
+ $TbMsg["Ordenador apagado"]='Ordinador apagat';
+ $TbMsg["Ordenador encendido"]='Ordinador encès';
$TbMsg["Particionar"]='Particionar';
diff --git a/admin/WebConsole/idiomas/php/cat/imagenes_cat.php b/admin/WebConsole/idiomas/php/cat/imagenes_cat.php
index 36fb497b..38998a80 100644
--- a/admin/WebConsole/idiomas/php/cat/imagenes_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/imagenes_cat.php
@@ -1,19 +1,22 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxcher d'idiomes php: imagenes_esp.php
+// Fitxcher d'idiomes php: imagenes_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='"Nou grup d'imtges"';
+ $TbMsg[0]='"Nou grup d\'imatges"';
$TbMsg[1]='"Definir nova imatge"';
- $TbMsg[2]='"Col.locar imatge"';
+ $TbMsg[2]='"Collocar imatge"';
$TbMsg[3]='"Renombrar"';
- $TbMsg[4]='"Eliminar grup d'imtges"';
+ $TbMsg[4]='"Eliminar grup d\'imatges"';
$TbMsg[5]='"Imatge informaci"';
$TbMsg[6]='"Moure imatge"';
$TbMsg[7]='"Propietats"';
$TbMsg[8]='"Eliminar Imatge"';
- $TbMsg[9]='"Imtges"';
+ $TbMsg[9]='"Imatges"';
$TbMsg[10]='"Gesti incrementals"';
+ $TbMsg[11]='"Imagenes Monoliticas"';
+ $TbMsg[12]='"Imagenes Basicas"';
+ $TbMsg[13]='"Imagenes Incrementales"';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/imagenincremental_cat.php b/admin/WebConsole/idiomas/php/cat/imagenincremental_cat.php
index 2b970d06..265b51cd 100644
--- a/admin/WebConsole/idiomas/php/cat/imagenincremental_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/imagenincremental_cat.php
@@ -1,13 +1,13 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: imagenincremental_esp.php
+// Fitxer d'idiomes php: imagenincremental_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Imtges';
+ $TbMsg[0]='Imatges';
$TbMsg[1]='Gesti de software incremental';
$TbMsg[2]='Imatge';
$TbMsg[3]='Nom del software incremental';
- $TbMsg[4]='(*)Per a incloure algun software incremental en aquesta imatge deu fer click sobre la casella de verificaci corresponent.';
+ $TbMsg[4]='(*)Per a incloure algun software incremental en aquesta imatge ha de fer click sobre la casella de verificaci corresponent.';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/inclusionacciones_cat.php b/admin/WebConsole/idiomas/php/cat/inclusionacciones_cat.php
index bc875e14..7a35c49e 100644
--- a/admin/WebConsole/idiomas/php/cat/inclusionacciones_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/inclusionacciones_cat.php
@@ -1,21 +1,21 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: inclusionacciones_esp.php
-// Idioma: Español
+// Fichero de idiomas php: inclusionacciones_cat.php
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
-$TbMsg[0]='Inclusión de Procedimientos en Procedimientos';
-$TbMsg[1]='Inclusión de Procedimientos o Tareas en Tareas';
-$TbMsg[2]='Comando / Procedimiento';
-$TbMsg[3]='Procedimiento / Tarea';
-$TbMsg[4]='Orden';
-$TbMsg[5]='(*)Para incluir o excluir algún procedimiento en este procedimiento <BR> debe hacer click sobre la casilla de verificación correspondiente';
-$TbMsg[6]='(*)Para incluir o excluir algún procedimiento o tarea en esta tarea <BR> debe hacer click sobre la casilla de verificación correspondiente';
-$TbMsg[7]='Configuración actual';
-$TbMsg[8]='Procedimientos disponibles';
-$TbMsg[9]='Tareas disponibles';
-$TbMsg[10]='Parámetros';
+$TbMsg[0]='Inclusió de Procediments en Procediments';
+$TbMsg[1]='Inclusió de Procediments o Tasques en Tasques';
+$TbMsg[2]='Comanda / Procediment';
+$TbMsg[3]='Procediment / Tasca';
+$TbMsg[4]='Ordre';
+$TbMsg[5]='(*)Per incloure o excloure algun procediment en aquest procediment <BR> ha de fer click sobre la casella de verificació corresponent';
+$TbMsg[6]='(*)Per incloure o excloure algun procediment o tasca en aquesta tasca <BR> ha de fer click sobre la casella de verificació corresponent';
+$TbMsg[7]='Configuració actual';
+$TbMsg[8]='Procediments disponibles';
+$TbMsg[9]='Tasques disponibles';
+$TbMsg[10]='Paràmetres';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/incorporaordenadores_cat.php b/admin/WebConsole/idiomas/php/cat/incorporaordenadores_cat.php
index f9060859..a03ed606 100644
--- a/admin/WebConsole/idiomas/php/cat/incorporaordenadores_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/incorporaordenadores_cat.php
@@ -1,17 +1,17 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: incorporaordenadores_esp.php (Comandos)
+// Fitxer d'idiomes php: incorporaordenadores_cat.php (Comandos)
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Incorporaci d'Ordinadors';
+ $TbMsg[0]='Incorporaci d\'Ordinadors';
$TbMsg[1]='Aula';
$TbMsg[2]='Fitxer';
- $TbMsg[3]='ATENCI: Ha hagut algn problema al incorporar ordinadors des del fitxer';
+ $TbMsg[3]='ATENCI: Hi ha hagut algn problema al incorporar ordinadors des del fitxer';
$TbMsg[4]='ATENCI: El fitxer est buit';
- $TbMsg[5]='ATENCI: El fitxer no cont informaci amb el format necesari per a incorpora ordinadors';
+ $TbMsg[5]='ATENCI: El fitxer no cont informaci amb el format necesari per incorporar ordinadors';
$TbMsg[6]='ATENCI: Hi ha algn problema per a salvar el fitxer';
- $TbMsg[7]='S'han incorporat correctament ordinadors desde fitxer';
+ $TbMsg[7]='S\'han incorporat correctament ordinadors desde fitxer';
$TbMsg[8]='Contingut';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/incrementalcomponente_soft_cat.php b/admin/WebConsole/idiomas/php/cat/incrementalcomponente_soft_cat.php
index cf9ece55..2c5f6425 100644
--- a/admin/WebConsole/idiomas/php/cat/incrementalcomponente_soft_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/incrementalcomponente_soft_cat.php
@@ -1,7 +1,7 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: incrementalcomponente_soft_esp.php
+// Fitxer d'idiomes php: incrementalcomponente_soft_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
@@ -9,5 +9,5 @@
$TbMsg[1]='Gesti de components software';
$TbMsg[2]='Software incremental';
$TbMsg[3]='Nombre del component';
- $TbMsg[4]='(*)Per a incloure algn component en aquest software incremental deu fer click sobre la casella de verificaci corresponent.';
+ $TbMsg[4]='(*)Per a incloure algun component en aquest software incremental ha de fer click sobre la casella de verificaci corresponent.';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/informacion_acciones_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_acciones_cat.php
index 04c55a73..1c06bf30 100644
--- a/admin/WebConsole/idiomas/php/cat/informacion_acciones_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/informacion_acciones_cat.php
@@ -1,15 +1,15 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: informacion_perfileshard_esp.php
-// Idioma: Español
+// Fichero de idiomas php: informacion_perfileshard_cat.php
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Acciones';
- $TbMsg[1]='Procedimientos';
- $TbMsg[2]='Información sobre Procedimientos';
- $TbMsg[3]='Tareas';
- $TbMsg[4]='Información sobre Tareas';
- $TbMsg[5]='Información';
- $TbMsg[6]='Sin parámetros';
+ $TbMsg[0]='Accions';
+ $TbMsg[1]='Procediments';
+ $TbMsg[2]='Informació sobre Procediments';
+ $TbMsg[3]='Tasques';
+ $TbMsg[4]='Informació sobre Tasques';
+ $TbMsg[5]='Informació';
+ $TbMsg[6]='Sense paràmetres';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/informacion_imagenes_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_imagenes_cat.php
index cab1ce4d..807677f3 100644
--- a/admin/WebConsole/idiomas/php/cat/informacion_imagenes_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/informacion_imagenes_cat.php
@@ -1,15 +1,15 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: informacion_imagenes_esp.php
+// Fitxer d'idiomes php: informacion_imagenes_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Imtges';
- $TbMsg[1]='Informacio sobre imatges';
+ $TbMsg[0]='Imatges';
+ $TbMsg[1]='Informaci sobre imatges';
$TbMsg[2]='Imatge';
$TbMsg[3]='Informaci de la Imatge';
- $TbMsg[4]='Componentes software';
+ $TbMsg[4]='Components software';
$TbMsg[5]='Software incremental';
$TbMsg[6]='Perfil Software';
$TbMsg[7]='Ordinadors amb aquesta imatge';
diff --git a/admin/WebConsole/idiomas/php/cat/informacion_incrementales_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_incrementales_cat.php
index fc15ab13..88fc0c19 100644
--- a/admin/WebConsole/idiomas/php/cat/informacion_incrementales_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/informacion_incrementales_cat.php
@@ -1,8 +1,8 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: informacion_incrementales_esp.php
-// Idioma: Catal
+// Fitxer d'idiomes php: informacion_incrementales_cat.php
+// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]='Software Incremental';
diff --git a/admin/WebConsole/idiomas/php/cat/informacion_menus_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_menus_cat.php
index e6f88df0..4f712490 100644
--- a/admin/WebConsole/idiomas/php/cat/informacion_menus_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/informacion_menus_cat.php
@@ -1,29 +1,29 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: informacion_menus_esp.php
+// Fitxer d'idiomes php: informacion_menus_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Items del Menu';
+ $TbMsg[0]='tems del Men';
$TbMsg[1]='Informaci del Men';
$TbMsg[2]='Men';
$TbMsg[3]='Informaci Men';
- $TbMsg[4]='Propietats de los items';
+ $TbMsg[4]='Propietats dels tems';
$TbMsg[5]='Propietats';
- $TbMsg[6]='Eliminar Item';
- $TbMsg[7]='Ttul';
- $TbMsg[8]='Propietats de los items pblics del Men';
+ $TbMsg[6]='Eliminar tem';
+ $TbMsg[7]='Ttol';
+ $TbMsg[8]='Propietats dels tems pblics del Men';
$TbMsg[9]='Coordenada x';
$TbMsg[10]='Coordenada y';
$TbMsg[11]='Modalitat';
- $TbMsg[12]='Propietats de los items privats del Men';
- $TbMsg[13]='Items pblics ';
- $TbMsg[14]='Items privats';
- $TbMsg[15]='Orden del item';
- $TbMsg[16]='Literal del item';
+ $TbMsg[12]='Propietats de los tems privats del Men';
+ $TbMsg[13]='tems pblics ';
+ $TbMsg[14]='tems privats';
+ $TbMsg[15]='Ordre del tem';
+ $TbMsg[16]='Literal del tem';
$TbMsg[17]='Nombre de la Imatge';
$TbMsg[18]='Men simple';
$TbMsg[19]='Men doble';
- $TbMsg[20]='Cdi del item';
+ $TbMsg[20]='Codi del tem';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/informacion_perfileshard_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_perfileshard_cat.php
index 6ebf5869..1ad03dd8 100644
--- a/admin/WebConsole/idiomas/php/cat/informacion_perfileshard_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/informacion_perfileshard_cat.php
@@ -1,12 +1,12 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: informacion_perfileshard_esp.php
+// Fitxer d'idiomes php: informacion_perfileshard_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]='Perfils hardware';
- $TbMsg[1]='Informacio sobre Perfils hardware';
+ $TbMsg[1]='Informaci sobre Perfils hardware';
$TbMsg[2]='Perfil hardware';
$TbMsg[3]='Informaci Perfil hardware';
$TbMsg[4]='Perfils software disponibles';
diff --git a/admin/WebConsole/idiomas/php/cat/informacion_perfilessoft_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_perfilessoft_cat.php
index 13fada81..191dd854 100644
--- a/admin/WebConsole/idiomas/php/cat/informacion_perfilessoft_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/informacion_perfilessoft_cat.php
@@ -1,7 +1,7 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: informacion_perfilessoft_esp.php
+// Fitxer d'idiomes php: informacion_perfilessoft_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
@@ -9,7 +9,7 @@
$TbMsg[1]='Informaci sobre perfils software';
$TbMsg[2]='Perfil software';
$TbMsg[3]='Informaci perfils software';
- $TbMsg[4]='Perfils Hardware soportatass';
+ $TbMsg[4]='Perfils Hardware soportats';
$TbMsg[5]='Components hardware';
$TbMsg[6]='Components software';
$TbMsg[7]='Software Incremental';
diff --git a/admin/WebConsole/idiomas/php/cat/informacion_procedimientos_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_procedimientos_cat.php
index 48005b00..9f121708 100644
--- a/admin/WebConsole/idiomas/php/cat/informacion_procedimientos_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/informacion_procedimientos_cat.php
@@ -1,11 +1,11 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: informacion_procedimientos_esp.php
+// Fitxer d'idiomes php: informacion_procedimientos_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Parmetres dels comandaments del Procedimeno';
+ $TbMsg[0]='Parmetres dels comandaments del Procedment';
$TbMsg[1]='Parmetre';
$TbMsg[2]='Valor';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/informacion_repositorio_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_repositorio_cat.php
index a05dca48..acc4c2e8 100644
--- a/admin/WebConsole/idiomas/php/cat/informacion_repositorio_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/informacion_repositorio_cat.php
@@ -1,16 +1,16 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: informacion_repositorio_esp.php
-// Idioma: Español
+// Fichero de idiomas php: informacion_repositorio_cat.php
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Repositorios';
- $TbMsg[1]='Información sobre Repositorios';
- $TbMsg[2]='Repositorio';
- $TbMsg[3]='Información Repositorio';
- $TbMsg[4]='Comentarios';
- $TbMsg[5]='Imágenes alojadas';
- $TbMsg[6]='Ordenadores asigandos';
+ $TbMsg[0]='Repositoris';
+ $TbMsg[1]='Informació sobre Repositoris';
+ $TbMsg[2]='Repositori';
+ $TbMsg[3]='Informació Repositori';
+ $TbMsg[4]='Comentaris';
+ $TbMsg[5]='Imatges allotjades';
+ $TbMsg[6]='Ordinadors assignats';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/informacion_tareas_cat.php b/admin/WebConsole/idiomas/php/cat/informacion_tareas_cat.php
index 71301069..0e2e624c 100644
--- a/admin/WebConsole/idiomas/php/cat/informacion_tareas_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/informacion_tareas_cat.php
@@ -1,13 +1,13 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: informacion_tareas_esp.php
+// Fitxer d'idiomes php: informacion_tareas_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Parmetres dels Comandaents de la Tascaa';
+ $TbMsg[0]='Parmetres de les Comandes de la Tasca';
$TbMsg[1]='Parmetre';
$TbMsg[2]='Valor';
- $TbMsg[3]='mbit';
+ $TbMsg[3]='mbit';
$TbMsg[4]='Nom';
?> \ 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
index 32828c77..df9cd061 100644
--- a/admin/WebConsole/idiomas/php/cat/menucliente_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/menucliente_cat.php
@@ -1,12 +1,12 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: menuscliente_esp.php
-// Idioma: Español
+// Fichero de idiomas php: menuscliente_cat.php
+// Idioma: Català
//________________________________________________________________________________________________________
$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[0]='"***ATENCIÓ.- No està accedint des d\'un ordinador permès"';
+ $TbMsg[1]='"Direcció IP"';
+ $TbMsg[2]='NO S\'HA DETECTAT CAP MENÚ PER AQUEST CLIENT';
$TbMsg[3]='Apagar l\'equip';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/menus_cat.php b/admin/WebConsole/idiomas/php/cat/menus_cat.php
index d1259e05..b3451d76 100644
--- a/admin/WebConsole/idiomas/php/cat/menus_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/menus_cat.php
@@ -1,13 +1,13 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: menus_esp.php
+// Fitxer d'idiomes php: menus_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]='"Nou grup de mens"';
$TbMsg[1]='"Definir nou men"';
- $TbMsg[2]='"Col.locar menu"';
+ $TbMsg[2]='"Collocar men"';
$TbMsg[3]='"Renombrar"';
$TbMsg[4]='"Eliminar grup de mens"';
$TbMsg[5]='"Informaci Men"';
@@ -15,6 +15,6 @@
$TbMsg[7]='"Propietats"';
$TbMsg[8]='"Eliminar men"';
$TbMsg[9]='"Mens"';
- $TbMsg[10]='"Gestionar Items"';
+ $TbMsg[10]='"Gestionar Items"';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/msgbrowser_cat.php b/admin/WebConsole/idiomas/php/cat/msgbrowser_cat.php
index e38ebbb0..a274ac67 100644
--- a/admin/WebConsole/idiomas/php/cat/msgbrowser_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/msgbrowser_cat.php
@@ -2,36 +2,36 @@
//________________________________________________________________________________________________________
//
// Fichero de idiomas php: msgbrowser.php
-// Idioma: Español
+// Idioma: Català
//________________________________________________________________________________________________________
// Literales de los mensajes del browser del cliente
$TbMsg=array();
- $TbMsg[0]='Indice del mensaje NO identificado';
- $TbMsg[1]='Actualizando, por favor espere...';
- $TbMsg[2]='Creando imagen, por favor espere...';
- $TbMsg[3]='Restaurando imagen, por favor espere...';
- $TbMsg[4]='Modificando tabla de particiones, por favor espere...';
- $TbMsg[5]='Formateando, por favor espere...';
- $TbMsg[6]='Creando Inventario Hardware, por favor espere...';
- $TbMsg[7]='Creando Inventario Software, por favor espere...';
- $TbMsg[8]='Ejecutando script, por favor espere...';
- $TbMsg[9]='El proceso de creación de imagen ha terminado correctamente';
- $TbMsg[10]='ATENCIÓN, ha habido algún error en el proceso de creación de imagen';
- $TbMsg[11]='El proceso de restauración de imagen ha terminado correctamente';
- $TbMsg[12]='ATENCIÓN, ha habido algún error en el proceso de restauración de imagen';
- $TbMsg[13]='El proceso de particionado ha terminado correctamente';
- $TbMsg[14]='ATENCIÓN, ha habido algún error en el proceso de particionado';
- $TbMsg[15]='El proceso de formateado ha terminado correctamente';
- $TbMsg[16]='ATENCIÓN, ha habido algún error en el proceso de formateado';
- $TbMsg[17]='El proceso de Inventario Hardware ha terminado correctamente';
- $TbMsg[18]='ATENCIÓN, ha habido algún error en el proceso de Inventario Hardware';
- $TbMsg[19]='El proceso de Inventario Software ha terminado correctamente';
- $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.';
+ $TbMsg[0]='Índex del missatge NO identificat';
+ $TbMsg[1]='Actualitzant, si us plau esperi...';
+ $TbMsg[2]='Creant imatge, si us plau esperi...';
+ $TbMsg[3]='Restaurant imatge, si us plau esperi...';
+ $TbMsg[4]='Modificant taula de particions, si us plau esperi...';
+ $TbMsg[5]='Formatejant, si us plau esperi...';
+ $TbMsg[6]='Creant Inventari Hardware, si us plau esperi...';
+ $TbMsg[7]='Creant Inventari Software, si us plau esperi...';
+ $TbMsg[8]='Executant script, si us plau esperi...';
+ $TbMsg[9]='El procés de creació de imatge ha finalitzat correctament';
+ $TbMsg[10]='ATENCIÓ, ha ocorregut algun error en el procés de creació de imatge';
+ $TbMsg[11]='El procés de restauració imatge ha finalitzat correctament';
+ $TbMsg[12]='ATENCIÓ, ha ocorregut algun error en el procés de restauració de imatge';
+ $TbMsg[13]='El procés de particionat ha finalitzat correctament';
+ $TbMsg[14]='ATENCIÓ, ha ocorregut algun error en el procés de particionat';
+ $TbMsg[15]='El procés de formatejat ha finalitzat correctament';
+ $TbMsg[16]='ATENCIÓ, ha ocorregut algun error en el procés de formatejat';
+ $TbMsg[17]='El procés de Inventari Hardware ha finalitzat correctament';
+ $TbMsg[18]='ATENCIÓ, ha ocorregut algun error en el procés de Inventari Hardware';
+ $TbMsg[19]='El procés de Inventari Software ha finalitzat correctament';
+ $TbMsg[20]='ATENCIÓ, ha ocorregut algun error en el procés de Inventari Software';
+ $TbMsg[21]='El procés de execució del script bash ha finalitzat correctament';
+ $TbMsg[22]='ATENCIÓ, ha ocorregut algun error en el procés d\'execució del script bash';
+ $TbMsg[23]='ATENCIÓ';
+ $TbMsg[24]='NO UTILITZI NI APAGUI AQUEST ORDINADOR.';
diff --git a/admin/WebConsole/idiomas/php/cat/nada_cat.php b/admin/WebConsole/idiomas/php/cat/nada_cat.php
new file mode 100644
index 00000000..4ddb3e8c
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/nada_cat.php
@@ -0,0 +1,16 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: nada_esp.php
+// Idioma: Español
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]="DISPOSITIU UTILITZAT PER ACCEDIR A OPENGNSYS";
+ $TbMsg[1]="IP - Dispositiu";
+ $TbMsg[2]="Tipus - Dispositiu";
+ $TbMsg[3]="Sistema Operatiu";
+ $TbMsg[4]="Versió Sistema";
+ $TbMsg[5]="Navegador";
+ $TbMsg[6]="Versió Navegador";
+
+?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/perfilcomponente_hard_cat.php b/admin/WebConsole/idiomas/php/cat/perfilcomponente_hard_cat.php
index 54522fb7..daad4410 100644
--- a/admin/WebConsole/idiomas/php/cat/perfilcomponente_hard_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/perfilcomponente_hard_cat.php
@@ -1,7 +1,7 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: perfilcomponente_hard_esp.php
+// Fitxer d'idiomes php: perfilcomponente_hard_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
@@ -9,5 +9,5 @@
$TbMsg[1]='Gesti Components hardware';
$TbMsg[2]='Perfil hardware';
$TbMsg[3]='Nom del component';
- $TbMsg[4]='(*)Per a incloure algn component en aquest perfil deu fer click sobre la casella de verificaci corresponent.';
+ $TbMsg[4]='(*)Per incloure algun component en aquest perfil ha de fer click sobre la casella de verificaci corresponent.';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/perfilcomponente_soft_cat.php b/admin/WebConsole/idiomas/php/cat/perfilcomponente_soft_cat.php
index a72db2e8..928608c8 100644
--- a/admin/WebConsole/idiomas/php/cat/perfilcomponente_soft_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/perfilcomponente_soft_cat.php
@@ -1,7 +1,7 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: perfilcomponente_soft_esp.php
+// Fitxer d'idiomes php: perfilcomponente_soft_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
@@ -9,5 +9,5 @@
$TbMsg[1]='Gesti de components software';
$TbMsg[2]='Perfil software';
$TbMsg[3]='Nom del component';
- $TbMsg[4]='(*)Per a incloure algn component en aquest perfil deu fer click sobre la casella de verificaci corresponent.';
+ $TbMsg[4]='(*)Per incloure algun component en aquest perfil ha de fer click sobre la casella de verificaci corresponent.';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/pintaParticiones_cat.php b/admin/WebConsole/idiomas/php/cat/pintaParticiones_cat.php
new file mode 100644
index 00000000..1773f1d1
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/cat/pintaParticiones_cat.php
@@ -0,0 +1,51 @@
+<?php
+//______________________________________________________
+//
+// Fichero de idiomas php: pintaParticiones_esp.php
+// Idioma: Español
+//______________________________________________________
+// Si ya existe TbMsg, solo agregamos lo nuevo
+if(!isset($TbMsg)){
+ $TbMsg=array();
+}
+
+$TbMsg["PARTITION"]='Partici&oacute;n';
+$TbMsg["INST_SO"]='S.O. Instalado';
+$TbMsg["SIZE_KB"]='Tama&ntilde;o (KB)';
+$TbMsg["PARTITION_TYPE"]='Tipo';
+$TbMsg["IMAGE"]='Imagen';
+$TbMsg["SOFT_PROFILE"]='Perfil Software';
+$TbMsg["FILESYSTEM_SHORT"]='S.F.';
+
+$TbMsg["DISK"]='Disco';
+$TbMsg["CONFIG_PARTTABLE"]='Tabla de particiones';
+
+$TbMsg["VARIABLE"]='Variable';
+$TbMsg["CACHE_CONTENT"]='Contenido cach&eacute;';
+$TbMsg["CACHE_FREESPACE"]='Cach&eacute; libre';
+
+$TbMsg["SAMESYSTEM_IMAGE"]='Imagen (Mismo sistema)';
+$TbMsg["DIFFERENTSYSTEM_IMAGE"]='Imagen (Distinto sistema)';
+$TbMsg["RESTORE_METHOD"]='M&eacute;todo';
+
+$TbMsg["SO_NAME"]='Nombre S.O.';
+$TbMsg["IMAGE_TO_CREATE"]='Imagen a crear';
+$TbMsg["DESTINATION_REPOSITORY"]='Repositorio de destino';
+
+$TbMsg["IMAGE_REPOSITORY"]='Imagen / Repositorio';
+$TbMsg["INCREMENTAL_IMAGE_REPOSITORY"]='Imagen Incremental / Repositorio';
+
+$TbMsg["CONFIG_NOCONFIG"]='Sense configuració: client no connectat al servidor.';
+$TbMsg["CONFIG_NODISK1MSDOS"]='Avís: aquest comandament sol tracta el disc 1 amb taula de particions MSDOS.';
+
+$TbMsg["SYNC_METHOD"]='Método';
+$TbMsg["SYNC1_DIR"]='Basada en directorio';
+$TbMsg["SYNC2_FILE"]='Basada en archivo';
+
+$TbMsg["TITLE_W"]='Opción de rsync: El algoritmo incremental rsync no se usa y se envía todo el archivo. Rsync lo usa por defecto cuando el origen y destino locales. ';
+$TbMsg["TITLE_E"]='Opción de rsync: Se compara el destino con el origen y se borran los ficheros que no existen en el primero.';
+$TbMsg["TITLE_C"]='Opción de rsync: Comprime los archivos de datos que se envían a la máquina de destino, lo que reduce la cantidad de datos que se transmiten. ';
+$TbMsg["SEND"]='Protocolo';
+
+?>
+
diff --git a/admin/WebConsole/idiomas/php/cat/procedimientoscomandos_cat.php b/admin/WebConsole/idiomas/php/cat/procedimientoscomandos_cat.php
index 0acd6309..5adf0672 100644
--- a/admin/WebConsole/idiomas/php/cat/procedimientoscomandos_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/procedimientoscomandos_cat.php
@@ -1,16 +1,16 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: procedimientoscomandos_esp.php
+// Fitxer d'idiomes php: procedimientoscomandos_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Gesti Comandaments del Procediment';
- $TbMsg[1]='Comandaments inclosos';
+ $TbMsg[0]='Gesti Comandes del Procediment';
+ $TbMsg[1]='Comandes incloses';
$TbMsg[2]='Procediment';
- $TbMsg[3]='Nom Comandaments';
+ $TbMsg[3]='Nom Comandes';
$TbMsg[4]='Ord.';
- $TbMsg[5]='Parmetre';
+ $TbMsg[5]='Parmetre';
$TbMsg[6]='Valor';
- $TbMsg[7]='(*)Per a excluir algn comandament de aquest procediment deu fer click sobre la casella de verificaci corresponent';
+ $TbMsg[7]='(*)Per excloure alguna comanda d\'aquest procediment ha de fer click sobre la casella de verificaci corresponent';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/programaciones_cat.php b/admin/WebConsole/idiomas/php/cat/programaciones_cat.php
index d7dfa906..e4e6548e 100644
--- a/admin/WebConsole/idiomas/php/cat/programaciones_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/programaciones_cat.php
@@ -1,12 +1,12 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: programaciones_esp.php
+// Fitxer d'idiomes php: programaciones_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
// Literals dels tipus d'accions
-$LITEJECUCION_COMANDO="Comandaments";
-$LITEJECUCION_PROCEDIMIENTO="Procedimentss";
+$LITEJECUCION_COMANDO="Comandes";
+$LITEJECUCION_PROCEDIMIENTO="Procediments";
$LITEJECUCION_TAREA="Tasques";
$LITEJECUCION_TRABAJO="Treballs";
$LITEJECUCION_RESERVA="Reserves";
diff --git a/admin/WebConsole/idiomas/php/cat/programacionesaulas_cat.php b/admin/WebConsole/idiomas/php/cat/programacionesaulas_cat.php
index 50efa88a..d23a2308 100644
--- a/admin/WebConsole/idiomas/php/cat/programacionesaulas_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/programacionesaulas_cat.php
@@ -1,7 +1,7 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: colasreservas_esp.php
+// Fitxer d'idiomes php: colasreservas_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
@@ -10,44 +10,44 @@ $LITRESERVA_PENDIENTE="Pendents";
$LITRESERVA_CONFIRMADA="Confirmades";
$LITRESERVA_DENEGADA="Denegades";
-$RESERVA_PARADA=1; // reserva momentaniament aturada
+$RESERVA_PARADA=1; // reserva momentaneament aturada
$RESERVA_ACTIVA=0; // Reserva activa
-$LITRESERVA_PARADA='Suspendida'; // Literal reserva momentaniament aturada
+$LITRESERVA_PARADA='Suspesa'; // Literal reserva momentaneament aturada
$LITRESERVA_ACTIVA='Activa'; // Literal reserva activa
$TbMsg=array();
- $TbMsg[0]='Reserves d'aules';
- $TbMsg[1]='Opcions de Recerca';
+ $TbMsg[0]='Reserves d\'aules';
+ $TbMsg[1]='Opcions de Cerca';
$TbMsg[2]='Tipus';
$TbMsg[3]='';
$TbMsg[4]='Estats';
- $TbMsg[5]='Percentatge desde';
- $TbMsg[6]='Porcentatge fins ';
+ $TbMsg[5]='Percentatge des de';
+ $TbMsg[6]='Percentatge fins ';
$TbMsg[7]='Data inici';
$TbMsg[8]='Data final';
$TbMsg[9]='Hora inici';
$TbMsg[10]='Hora final';
- $TbMsg[11]='mbit';
+ $TbMsg[11]='mbit';
$TbMsg[12]='Centres';
- $TbMsg[13]='Grup d'aules';
+ $TbMsg[13]='Grup d\'aules';
$TbMsg[14]='Aules';
$TbMsg[15]='Any';
$TbMsg[16]='Mes';
- $TbMsg[17]='Da';
+ $TbMsg[17]='Dia';
$TbMsg[18]='Aula';
$TbMsg[19]='Ocupaci';
- $TbMsg[20]='Imatge asociada';
+ $TbMsg[20]='Imatge associada';
$TbMsg[21]='Descripci';
$TbMsg[22]='Programaci reserves';
$TbMsg[23]='(Sense especificar)';
$TbMsg[24]='Aula';
- $TbMsg[25]='Solicitant';
- $TbMsg[26]="Anticipaci previa";
- $TbMsg[27]="(Sense acci previa)";
- $TbMsg[28]="Tasca previa";
+ $TbMsg[25]='Sollicitant';
+ $TbMsg[26]="Anticipaci prvia";
+ $TbMsg[27]="(Sense acci prvia)";
+ $TbMsg[28]="Tasca prvia";
$TbMsg[29]="Treball previ";
$TbMsg[30]='Grup de reserves';
diff --git a/admin/WebConsole/idiomas/php/cat/programacionesreservas_cat.php b/admin/WebConsole/idiomas/php/cat/programacionesreservas_cat.php
index 28becbf9..7e213a2b 100644
--- a/admin/WebConsole/idiomas/php/cat/programacionesreservas_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/programacionesreservas_cat.php
@@ -1,7 +1,7 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: colasreservas_esp.php
+// Fitxer d'idiomes php: colasreservas_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
@@ -12,41 +12,41 @@ $LITRESERVA_DENEGADA="Denegades";
$RESERVA_PARADA=1; // reserva momentaniament aturada
$RESERVA_ACTIVA=0; // Reserva activa
-$LITRESERVA_PARADA='Suspendida'; // Literal reserva momentaniament aturada
+$LITRESERVA_PARADA='Suspesa'; // Literal reserva momentaniament aturada
$LITRESERVA_ACTIVA='Activa'; // Literal reserva activa
$TbMsg=array();
- $TbMsg[0]='Reserves d'aules';
+ $TbMsg[0]='Reserves d\'aules';
$TbMsg[1]='Opcions de recerca';
$TbMsg[2]='Tipus';
$TbMsg[3]='';
$TbMsg[4]='Estats';
- $TbMsg[5]='Percentatge desde';
+ $TbMsg[5]='Percentatge des de';
$TbMsg[6]='Percentatge fins ';
$TbMsg[7]='Data inici';
$TbMsg[8]='Data final';
$TbMsg[9]='Hora inici';
$TbMsg[10]='Hora final';
- $TbMsg[11]='mbit';
+ $TbMsg[11]='mbit';
$TbMsg[12]='Reserves';
$TbMsg[13]='Grup de reserves';
$TbMsg[15]='Any';
$TbMsg[16]='Mes';
- $TbMsg[17]='Da';
+ $TbMsg[17]='Dia';
$TbMsg[18]='Aula';
$TbMsg[19]='Ocupaci';
- $TbMsg[20]='Imatge asociada';
+ $TbMsg[20]='Imatge associada';
$TbMsg[21]='Descripci';
$TbMsg[22]='Programaci reserves';
$TbMsg[23]='(Sense especificar)';
$TbMsg[24]='Aula';
- $TbMsg[25]='Sol.licitant';
- $TbMsg[26]="Anticipaci previa";
- $TbMsg[27]="(Sense accin previa)";
- $TbMsg[28]="Tasca previa";
+ $TbMsg[25]='Sollicitant';
+ $TbMsg[26]="Anticipaci prvia";
+ $TbMsg[27]="(Sense acci prvia)";
+ $TbMsg[28]="Tasca prvia";
$TbMsg[29]="Treball previ";
$TbMsg[30]="Dades Reserva";
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php
index 09cfa98f..b3b2edc0 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_aulas_cat.php
@@ -1,38 +1,50 @@
<?php
//______________________________________________________
//
-// Fitxer d'idiomes php: propiedades_aulas_esp.php
-// Idioma: Catala
+// Fitxer d'idiomes php: propiedades_aulas_cat.php
+// Idioma: Català
//______________________________________________________
$TbMsg=array();
-$TbMsg[0]="Sense Opcio";
-$TbMsg[1]="Insertar";
+$TbMsg[0]="Sense Opció";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gestio Aules";
+$TbMsg[4]="Gestió Aules";
$TbMsg[5]="Nom";
-$TbMsg[6]="Ubicacio";
-$TbMsg[7]="Canon";
+$TbMsg[6]="Ubicació";
+$TbMsg[7]="Canó";
$TbMsg[8]="Pissarra";
-$TbMsg[9]="Puestos";
+$TbMsg[9]="Llocs";
$TbMsg[10]="Url Imatge";
-$TbMsg[11]="Menu";
+$TbMsg[11]="Menú";
$TbMsg[12]="Comentaris";
$TbMsg[13]="Intervals";
-$TbMsg[14]="Hora desde:";
+$TbMsg[14]="Hora des de:";
$TbMsg[15]="Hora fins:";
-$TbMsg[16]="Repositorio";
+$TbMsg[16]="Repositori";
$TbMsg[17]="Perfil Hardware";
-$TbMsg[18]="Propietat pert tot els ordinadors";
-$TbMsg[19]="Tamaño caché (KB)";
+$TbMsg[18]="Propietats per tots els ordinadors";
+$TbMsg[19]="Grandària caché (KB)";
$TbMsg[20]="Autoexec";
$TbMsg[21]="Ordinadors";
-$TbMsg[22]="Modo Multicast";
+$TbMsg[22]="Mode Multicast";
$TbMsg[23]="IP Multicast";
$TbMsg[24]="Port Multicast";
-$TbMsg[25]="Velocidat Multicast";
-$TbMsg[26]="Modo P2P -semillero durante la descarga-";
-$TbMsg[27]="Temp P2P -semillero despres de descarga-";
-$TbMsg[28]="adresa gateway del aule";
-$TbMsg[29]="Mascara de la xarxa del aule";
+$TbMsg[25]="Velocitat Multicast";
+$TbMsg[26]="Modo P2P -semiller durant la descarrega-";
+$TbMsg[27]="Temp P2P -semiller després de la descarrega-";
+$TbMsg[28]="Adreça gateway de l\'aula";
+$TbMsg[29]="Màscara de la xarxa de l\'aula";
+// UHU
+$TbMsg[30]="Validació";
+$TbMsg[31]="Pàgina login";
+$TbMsg[32]="Pàgina validació";
+// UHU
+$TbMsg[495]="Contingut cache";
+$TbMsg[509]="Foto ordinador";
+$TbMsg[5091]="Afegir foto";
+$TbMsg[5092]="Veure fotos";
+// Ramón
+$TbMsg['PROP_DNSIP']="IP Servidor DNS <em>(opcional)</em>";
+$TbMsg['PROP_PROXYURL']="URL Servidor Proxy <em>(opcional)</em>";
?>
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_centros_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_centros_cat.php
index a68cb4e8..f081ecd6 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_centros_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_centros_cat.php
@@ -1,16 +1,16 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_ordenadores_esp.php
+// Fitxer d'idiomes php: propiedades_ordenadores_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gesti d'Unidats Organitzatives";
-$TbMsg[5]="Nom de la unitat";
+$TbMsg[4]="Gesti d'Unitats Organitzatives";
+$TbMsg[5]="Nom de la unitat";
$TbMsg[6]="Comentaris";
?>
\ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_componentehardwares_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_componentehardwares_cat.php
index 2fd987f2..e361b8f1 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_componentehardwares_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_componentehardwares_cat.php
@@ -1,12 +1,12 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_componentehardwares_esp.php
+// Fitxer d'idiomes php: propiedades_componentehardwares_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
$TbMsg[4]="Gesti Components Hardware";
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_componentesoftwares_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_componentesoftwares_cat.php
index 9bdb40ec..307fd20b 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_componentesoftwares_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_componentesoftwares_cat.php
@@ -1,12 +1,12 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_componentesoftwares_esp.php
+// Fitxer d'idiomes php: propiedades_componentesoftwares_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
$TbMsg[4]="Gesti Components Software";
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_entidades_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_entidades_cat.php
index bb097247..30df52f9 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_entidades_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_entidades_cat.php
@@ -1,12 +1,12 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_ordenadores_esp.php
+// Fitxer d'idiomes php: propiedades_ordenadores_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
$TbMsg[4]="Gesti Entitats";
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_entornos_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_entornos_cat.php
index dd7bbb53..96ac190b 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_entornos_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_entornos_cat.php
@@ -1,18 +1,18 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: propiedades_aulas_esp.php
-// Idioma: Español
+// Fichero de idiomas php: propiedades_aulas_cat.php
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
-$TbMsg[0]="Sin Opción";
-$TbMsg[1]="Insertar";
+$TbMsg[0]="Sense Opció";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gestión de Variables de Entorno";
-$TbMsg[5]="IP Servidor de administración";
-$TbMsg[6]="Puerto Servidor de administración";
-$TbMsg[7]="Método de clonación preferido";
+$TbMsg[4]="Gestió de Variables d\'Entorn";
+$TbMsg[5]="IP Servidor d\'administració";
+$TbMsg[6]="Port Servidor d\'administració";
+$TbMsg[7]="Mètode de clonació preferit";
$TbMsg[8]="";
$TbMsg[9]="";
$TbMsg[10]="";
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_grupos_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_grupos_cat.php
index 1dbe4345..2664717a 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_grupos_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_grupos_cat.php
@@ -1,22 +1,22 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_tareas_esp.php
+// Fitxer d'idiomes php: propiedades_tareas_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gesti Grups";
-$TbMsg[5]="Nom Grup";
+$TbMsg[4]="Gesti Grups";
+$TbMsg[5]="Nom Grup";
$TbMsg[6]="Comentaris";
$TbMsg[7]="Grups d'Aules";
$TbMsg[8]="Grups de Procediments";
$TbMsg[9]="Grups de Tasques";
$TbMsg[10]="Grups de Treballs";
-$TbMsg[11]="Grups d'Imtges";
+$TbMsg[11]="Grups d'Imatges";
$TbMsg[12]="Grups de Components Hardware";
$TbMsg[13]="Grups de Components Software";
$TbMsg[14]="Grups de Perfils Hardware";
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_imagenes_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_imagenes_cat.php
index b28bb149..f3d40f7e 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_imagenes_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_imagenes_cat.php
@@ -1,16 +1,28 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_imagenes_esp.php
-// Idioma: Catal
+// Fitxer d'idiomes php: propiedades_imagenes_cat.php
+// Idioma: Catal�
//________________________________________________________________________________________________________
$TbMsg=array();
-$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[0]="Sense Opci�";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gesti Imtges";
+$TbMsg[4]="Gesti� Imatges";
$TbMsg[5]="Nom Imatge";
$TbMsg[6]="Perfil Software";
$TbMsg[7]="Comentaris";
-?> \ No newline at end of file
+$TbMsg[8]="Partici�n";
+$TbMsg[9]="Tipo partici�n";
+$TbMsg[10]="Repositorio";
+$TbMsg[11]="Nombre";
+$TbMsg[12]="Gesti�n Im�genes B�sicas";
+$TbMsg[13]="Gesti�n Im�genes Incrementales";
+$TbMsg[14]="Imagen b�sica";
+$TbMsg[15]="ATENCI�N.- Una imagen que tiene perfil software indica que en alg�n momento se ha creado < br>
+ y por tanto no pueden modificarse ciertos datos a menos que la elimine y la vuelva a crear";
+$TbMsg[16]="Ruta Origen";
+$TbMsg[17]='"Nombre can�nico fichero-imagen existe : Introduzca otro nombre"';
+$TbMsg[18]="Introduzca otro Nombre";
+?>
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_menus_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_menus_cat.php
index 3df91f1c..12fa7942 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_menus_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_menus_cat.php
@@ -1,23 +1,23 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idioms php: propiedades_menus_esp.php
+// Fitxer d'idioms php: propiedades_menus_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
$TbMsg[4]="Gesti Menus";
$TbMsg[5]="Nom del Men";
-$TbMsg[6]="Ttul";
+$TbMsg[6]="Ttol";
$TbMsg[7]="Comentaris";
-$TbMsg[8]="Items pblics del Menu";
+$TbMsg[8]="tems pblics del Men";
$TbMsg[9]="Coordenada x";
$TbMsg[10]="Coordenada y";
$TbMsg[11]="Modalitat";
-$TbMsg[12]="Items privats del Menu";
+$TbMsg[12]="tems privats del Men";
$TbMsg[13]="Men simple";
$TbMsg[14]="Men doble";
$TbMsg[15]="Html men pblic";
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_ordenadores_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_ordenadores_cat.php
index 1eb20fb6..c2939945 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_ordenadores_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_ordenadores_cat.php
@@ -5,25 +5,25 @@
// Idioma: Catal
//____________________________________________________________
$TbMsg=array();
-$TbMsg[0]="Sense Opci&oacute;";
-$TbMsg[1]="Insertar";
+$TbMsg[0]="Sense Opci";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gesti&oacute; Ordinadors";
+$TbMsg[4]="Gesti Ordinadors";
$TbMsg[5]="Nom";
-$TbMsg[6]="Direcci&oacute; IP";
-$TbMsg[7]="Direcci&oacute; MAC";
+$TbMsg[6]="Direcci IP";
+$TbMsg[7]="Direcci MAC";
$TbMsg[8]="Perfil Hardware";
$TbMsg[9]="Autoexec";
$TbMsg[10]="Repositori";
-$TbMsg[11]="Menu";
-$TbMsg[12]="Tamany Cach&eacute;";
-$TbMsg[13]="Interfice de Xarxa";
+$TbMsg[11]="Men";
+$TbMsg[12]="Grandria Cach";
+$TbMsg[13]="Interficie de Xarxa";
$TbMsg[14]="Driver de Xarxa";
-$TbMsg[509]="Foto ordenador";
-$TbMsg[5091]="Insertar foto";
-$TbMsg[5092]="Ver fotos";
-$TbMsg[495]="Contenido cach&eacute;";
-$TbMsg[4951]="Cach&eacute; libre";
+$TbMsg[509]="Foto ordinador";
+$TbMsg[5091]="Afegir foto";
+$TbMsg[5092]="Veure fotos";
+$TbMsg[495]="Contingut cach";
+$TbMsg[4951]="Cach lliure";
?>
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_ordenadorestandar_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_ordenadorestandar_cat.php
index 785784f0..485b3a62 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_ordenadorestandar_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_ordenadorestandar_cat.php
@@ -1,7 +1,7 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_ordenadorestandar_esp.php
+// Fitxer d'idiomes php: propiedades_ordenadorestandar_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
@@ -13,9 +13,9 @@ $TbMsg[4]="Direcci MAC";
$TbMsg[5]="Perfil hardware";
$TbMsg[6]="Servidor Dhcp";
$TbMsg[7]="Servidor Rembo ";
-$TbMsg[8]="Ordinadors per a insertar";
-$TbMsg[9]='(*) Per a modificar un ordinador amb un certa dada, en aquest'aula, deu introduir el valor corresponent i deixar el camp "Ordinadors a insertar" a zero.';
-$TbMsg[10]="(**)Si es tracta de ordinadors nous amb una configuraci per defecte, pero no vol modificar els ordinadors ja existents deu introduir un valor mes gran que zero.";
-$TbMsg[11]="Tamany Cach";
+$TbMsg[8]="Ordinadors per a afegir";
+$TbMsg[9]='(*) Per modificar un ordinador amb un certa dada, en aquesta aula, ha d\'introduir el valor corresponent i deixar el camp "Ordinadors a afegir" a zero.';
+$TbMsg[10]="(**) Si es tracta d\'ordinadors nous amb una configuraci per defecte, per no vol modificar els ordinadors ja existents ha d'\introduir un valor ms gran que zero.";
+$TbMsg[11]="Grandria Cach";
?>
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php
index 735906ec..1ce3ef22 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_perfilhardwares_cat.php
@@ -1,15 +1,15 @@
<?php
//________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_perfilhardwares_esp.php
+// Fitxer d'idiomes php: propiedades_perfilhardwares_cat.php
// Idioma: Català
//________________________________________________________________
$TbMsg=array();
-$TbMsg[0]="Sense Opci&oacute;";
-$TbMsg[1]="Insertar";
+$TbMsg[0]="Sense Opció";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg["HARD_TITLE"]="Gesti&oacute; Perfils Hardware";
+$TbMsg["HARD_TITLE"]="Gestió Perfils Hardware";
$TbMsg["HARD_NAME"]="Nom";
$TbMsg["HARD_COMMENTS"]="Comentaris";
$TbMsg["HARD_COMPUTERS"]="Ordinadors";
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_perfilsoftwares_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_perfilsoftwares_cat.php
index c10acd57..ab2e3ccc 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_perfilsoftwares_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_perfilsoftwares_cat.php
@@ -1,12 +1,12 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_perfilsoftwares_esp.php
+// Fitxer d'idiomes php: propiedades_perfilsoftwares_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
$TbMsg[4]="Gesti de Perfils software";
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_procedimientos_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_procedimientos_cat.php
index c9912844..d426ef82 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_procedimientos_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_procedimientos_cat.php
@@ -1,12 +1,12 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_procedimientos_esp.php
+// Fitxer d'idiomes php: propiedades_procedimientos_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
$TbMsg[4]="Gesti Procediments";
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_repositorios_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_repositorios_cat.php
index 7c3223c4..ccaaadcb 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_repositorios_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_repositorios_cat.php
@@ -1,19 +1,25 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: propiedades_servidoresrembo_esp.php
-// Idioma: Español
+// Fichero de idiomas php: propiedades_servidoresrembo_cat.php
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
-$TbMsg[0]="Sin Opción";
-$TbMsg[1]="Insertar";
+$TbMsg[0]="Sense Opció";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gestión Repositorios";
-$TbMsg[5]="Nombre del Repositorio";
-$TbMsg[6]="Dirección IP";
-$TbMsg[7]="Comentarios";
-$TbMsg[8]="Puerto";
-$TbMsg[9]="Directorio Base";
-$TbMsg[10]="Directorio PXE";
+$TbMsg[4]="Gestió Repositoris";
+$TbMsg[5]="Nom del Repositori";
+$TbMsg[6]="Direcció IP";
+$TbMsg[7]="Comentaris";
+$TbMsg[8]="Port";
+$TbMsg[9]="Directori Base";
+$TbMsg[10]="Directori PXE";
+$TbMsg[11]="Espai TOTAL";
+$TbMsg[12]="Espai Ocupat";
+$TbMsg[13]="Espai Lliure";
+$TbMsg[14]="% Ocupat";
+$TbMsg[15]='Limitacions d\'aquesta versió';
+$TbMsg[16]='Informació d\'espai és permès si Repositori i Servidor Web allotjats al mateix servidor';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_reservas_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_reservas_cat.php
index 5f14953f..bc739ee6 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_reservas_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_reservas_cat.php
@@ -1,30 +1,30 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_reservas_esp.php
+// Fitxer d'idiomes php: propiedades_reservas_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
$TbMsg[4]="Gesti Reserves";
$TbMsg[5]="Descripci";
-$TbMsg[6]="Nom solicitant";
+$TbMsg[6]="Nom sollicitant";
$TbMsg[7]="Comentaris";
$TbMsg[8]="E-mail";
$TbMsg[9]="Estatus universitari";
$TbMsg[10]="Aula";
$TbMsg[11]="Imatge associada";
-$TbMsg[12]="Anticipacin previa";
+$TbMsg[12]="Anticipaci previa";
$TbMsg[13]="Confirmada";
$TbMsg[14]="Pendent";
$TbMsg[15]="Denegada";
-$TbMsg[16]="Estatat de la reserva";
+$TbMsg[16]="Estat de la reserva";
$TbMsg[17]="(En blanc o 0 minuts indica sense anticipaci)";
$TbMsg[18]="(Sense acci anticipada)";
-$TbMsg[19]="Tasca previa";
+$TbMsg[19]="Tasca prvia";
$TbMsg[20]="Treball previ";
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_tareas_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_tareas_cat.php
index 98f47efd..46e743a0 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_tareas_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_tareas_cat.php
@@ -6,18 +6,18 @@
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
$TbMsg[4]="Gesti Tasques";
-$TbMsg[5]="Nom Tascaa";
+$TbMsg[5]="Nom Tasca";
$TbMsg[6]="Comentaris";
-$TbMsg[7]="Tipo mbito";
-$TbMsg[8]="mbito de aplicacin";
+$TbMsg[7]="Tipus mbit";
+$TbMsg[8]="mbit d\'aplicaci";
$TbMsg[9]="";
-$TbMsg[10]="Centros";
-$TbMsg[11]="Grupos de Aulas";
-$TbMsg[12]="Aulas";
-$TbMsg[13]="Grupos de Ordenadores";
-$TbMsg[14]="Ordenadores";
+$TbMsg[10]="Centres";
+$TbMsg[11]="Grups d\'Aules";
+$TbMsg[12]="Aules";
+$TbMsg[13]="Grups d\Ordinadors";
+$TbMsg[14]="Ordinadors";
?>
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_tipohardwares_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_tipohardwares_cat.php
index f40f70eb..33d4bdce 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_tipohardwares_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_tipohardwares_cat.php
@@ -1,15 +1,15 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_tipohardwares_esp.php
+// Fitxer d'idiomes php: propiedades_tipohardwares_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
$TbMsg[4]="Gesti Tipus de Hardware";
$TbMsg[5]="Nom";
-$TbMsg[6]="icono";
+$TbMsg[6]="Icona";
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_universidades_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_universidades_cat.php
index e109f054..78b6e488 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_universidades_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_universidades_cat.php
@@ -1,12 +1,12 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_aulas_esp.php
+// Fitxer d'idiomes php: propiedades_aulas_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
$TbMsg[4]="Gesti Universitats";
diff --git a/admin/WebConsole/idiomas/php/cat/propiedades_usuarios_cat.php b/admin/WebConsole/idiomas/php/cat/propiedades_usuarios_cat.php
index 89ba2159..7848de59 100644
--- a/admin/WebConsole/idiomas/php/cat/propiedades_usuarios_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/propiedades_usuarios_cat.php
@@ -1,12 +1,12 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: propiedades_ordenadores_esp.php
+// Fitxer d'idiomes php: propiedades_ordenadores_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]="Sense Opci";
-$TbMsg[1]="Insertar";
+$TbMsg[1]="Afegir";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
$TbMsg[4]="Gesti Usuaris";
@@ -15,5 +15,5 @@ $TbMsg[6]="Password";
$TbMsg[7]="Nom complet";
$TbMsg[8]="E-mail";
$TbMsg[9]="Unitat organitzativa";
-$TbMsg[10]="Idioma ";
+$TbMsg[10]="Idioma";
?>
diff --git a/admin/WebConsole/idiomas/php/cat/purgar_cat.php b/admin/WebConsole/idiomas/php/cat/purgar_cat.php
index 297dbac0..4b87974d 100644
--- a/admin/WebConsole/idiomas/php/cat/purgar_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/purgar_cat.php
@@ -1,10 +1,10 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: actualizar_esp.php
+// Fitxer d'idiomes php: actualizar_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Aquest mbit ha estat purgat correctament';
- $TbMsg[1]='ATENCI: Ha hagut algn problema al purgar l'mbit';
+ $TbMsg[0]='Aquest mbit ha estat purgat correctament';
+ $TbMsg[1]='ATENCI: Ha ocorregut algn problema al purgar l\'mbit';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/repositorios_cat.php b/admin/WebConsole/idiomas/php/cat/repositorios_cat.php
index 481b0c03..dca73063 100644
--- a/admin/WebConsole/idiomas/php/cat/repositorios_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/repositorios_cat.php
@@ -1,24 +1,24 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: repositorios_esp.php
-// Idioma: Español
+// Fichero de idiomas php: repositorios_cat.php
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='"Nuevo grupo de Repositorios"';
- $TbMsg[1]='"Añadir Repositorio "';
- $TbMsg[2]='"Colocar Repositorio"';
+ $TbMsg[0]='"Nou grup de Repositoris"';
+ $TbMsg[1]='"Afegir Repositori "';
+ $TbMsg[2]='"Col·locar Repositori"';
$TbMsg[3]='"Renombrar"';
- $TbMsg[4]='"Eliminar grupo de repositorios"';
- $TbMsg[5]='"Información Repositorio"';
- $TbMsg[6]='"Mover Repositorio"';
- $TbMsg[7]='"Propiedades"';
- $TbMsg[8]='"Eliminar Repositorio"';
- $TbMsg[9]='"Nuevo grupo de Repositorios"';
- $TbMsg[10]='';
+ $TbMsg[4]='"Eliminar grup de repositoris"';
+ $TbMsg[5]='"Informació Repositori"';
+ $TbMsg[6]='"Moure Repositori"';
+ $TbMsg[7]='"Propietats"';
+ $TbMsg[8]='"Eliminar Repositori"';
+ $TbMsg[9]='"Nou grup de Repositoris"';
+ $TbMsg[10]='"Eliminar Imatge Repositori"';
$TbMsg[11]='';
- $TbMsg[12]='"Repositorios"';
+ $TbMsg[12]='"Repositoris"';
$TbMsg[13]='""';
- $TbMsg[14]='"Repositorios"';
- $TbMsg[15]='"Iconos"';
+ $TbMsg[14]='"Repositoris"';
+ $TbMsg[15]='"Icones"';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/reservas_cat.php b/admin/WebConsole/idiomas/php/cat/reservas_cat.php
index 115b9a9c..b3272f9e 100644
--- a/admin/WebConsole/idiomas/php/cat/reservas_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/reservas_cat.php
@@ -1,13 +1,13 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: reservas_esp.php
+// Fitxer d'idiomes php: reservas_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]='"Nou grup de reserves"';
$TbMsg[1]='"Definir nova reserva"';
- $TbMsg[2]='"Col.locar reserva"';
+ $TbMsg[2]='"Collocar reserva"';
$TbMsg[3]='"Renombrar"';
$TbMsg[4]='"Eliminar grup de reserves"';
$TbMsg[5]='"Informaci Reserva"';
diff --git a/admin/WebConsole/idiomas/php/cat/softwares_cat.php b/admin/WebConsole/idiomas/php/cat/softwares_cat.php
index d3a75f6f..6dc99649 100644
--- a/admin/WebConsole/idiomas/php/cat/softwares_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/softwares_cat.php
@@ -1,7 +1,7 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: softwares_esp.php
+// Fitxer d'idiomes php: softwares_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
@@ -10,14 +10,14 @@
$TbMsg[2]='""';
$TbMsg[3]='"Nou grup de components"';
$TbMsg[4]='"Definir nou component"';
- $TbMsg[5]='"Col.locar component"';
+ $TbMsg[5]='"Collocar component"';
$TbMsg[6]='"Renombrar"';
$TbMsg[7]='"Eliminar grup de components"';
$TbMsg[8]='"Moure component"';
$TbMsg[9]='"Eliminar component"';
$TbMsg[10]='"Nou grup de perfils"';
$TbMsg[11]='"Definir nou perfil"';
- $TbMsg[12]='"Col.locar perfil"';
+ $TbMsg[12]='"Collocar perfil"';
$TbMsg[13]='"Eliminar grup de perfils"';
$TbMsg[14]='"Gesti components"';
$TbMsg[15]='"Informaci Perfil"';
@@ -27,11 +27,11 @@
$TbMsg[19]='"Components software"';
$TbMsg[20]='"Perfils software"';
$TbMsg[21]='"Software Incremental"';
- $TbMsg[22]='"Nou grup d'incrementals"';
- $TbMsg[23]='"Definir nuevo incremental"';
- $TbMsg[24]='"Col.locar incremental"';
- $TbMsg[25]='"Eliminar grup diincrementals"';
- $TbMsg[26]='"Informaci Incremental"';
+ $TbMsg[22]='"Nou grup d\'incrementals"';
+ $TbMsg[23]='"Definir nova incremental"';
+ $TbMsg[24]='"Collocar incremental"';
+ $TbMsg[25]='"Eliminar grup d\'incrementals"';
+ $TbMsg[26]='"Informaci incremental"';
$TbMsg[27]='"Moure incremental"';
$TbMsg[28]='"Eliminar incremental"';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/cat/sondeo_cat.php b/admin/WebConsole/idiomas/php/cat/sondeo_cat.php
index 4f51d542..2fa2aacd 100644
--- a/admin/WebConsole/idiomas/php/cat/sondeo_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/sondeo_cat.php
@@ -1,10 +1,10 @@
<?
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: sondeo_esp.php
-// Idioma: Español
+// Fichero de idiomas php: sondeo_cat.php
+// Idioma: Català
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]='';
- $TbMsg[1]='ATENCIÓN: Ha habido algún problema al consultar el estado de los ordenadore';
+ $TbMsg[1]='ATENCIÓ: Ha ocorregut algun problema al consultar l\'estat del ordinadors';
?>
diff --git a/admin/WebConsole/idiomas/php/cat/tareascomandos_cat.php b/admin/WebConsole/idiomas/php/cat/tareascomandos_cat.php
index 031523c4..2a108b60 100644
--- a/admin/WebConsole/idiomas/php/cat/tareascomandos_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/tareascomandos_cat.php
@@ -1,16 +1,16 @@
<?
//________________________________________________________________________________________________________
//
-// Fitxer d'idiomes php: tareascomandos_esp.php
+// Fitxer d'idiomes php: tareascomandos_cat.php
// Idioma: Catal
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Gesti Comandaments de la Tasca';
- $TbMsg[1]='Comandaments inclosos';
+ $TbMsg[0]='Gesti Comandes de la Tasca';
+ $TbMsg[1]='Comandes incloses';
$TbMsg[2]='Tasca';
- $TbMsg[3]='Nom Comandament';
+ $TbMsg[3]='Nom Comanda';
$TbMsg[4]='Ord.';
- $TbMsg[5]='Parmetre';
+ $TbMsg[5]='Parmetre';
$TbMsg[6]='Valor';
- $TbMsg[7]='(*)Per a excloure algn comandament d'aquesta tasca deu fer click sobre la casella de verificaci corresponent';
+ $TbMsg[7]='(*)Per excloure alguna comanda d\'aquesta tasca ha de fer click sobre la casella de verificaci corresponent';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/eng/acceso_eng.php b/admin/WebConsole/idiomas/php/eng/acceso_eng.php
index bcb2a2b3..05ccb65f 100644
--- a/admin/WebConsole/idiomas/php/eng/acceso_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/acceso_eng.php
@@ -29,6 +29,6 @@ $TbMsg["ACCESS_NOUNIT"]='You have not entered any Organizational Unit.\nYou will
$TbMsg["ACCESS_ALLOWED"]='Allowed access. Please wait ...';
$TbMsg["ACCESS_ERROR"]='Access error';
$TbMsg["ACCESS_UNKNOWNERROR"]='Unknown error';
-
+$TbMsg["ACCESS_NOFRAMES"]='Sorry, your browser does not handle frames.';
?>
diff --git a/admin/WebConsole/idiomas/php/eng/acercade_eng.php b/admin/WebConsole/idiomas/php/eng/acercade_eng.php
new file mode 100644
index 00000000..638dca56
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/acercade_eng.php
@@ -0,0 +1,19 @@
+<?php
+//______________________________________________________
+//
+// Fichero de idiomas php: acercade_eng.php
+// Idioma: Ingles
+//______________________________________________________
+// Si ya existe TbMsg, solo agregamos lo nuevo
+if(!isset($TbMsg)){
+ $TbMsg=array();
+}
+
+$TbMsg["TITLE"]='Free and open-source application for deployment and management of operating systems.';
+$TbMsg["DESCRIPTION"]='OpenGnSys <em> (Open Genesis)</em> Project brings together the combined efforts of several Spanish Public Universities. OpenGnSys provide a number of free and open tools for managing and deploying computers. These tools supplies a complete, versatile and intuitive sytem. This system allows the arrangement, installation and deployment of different operating systems.';
+$TbMsg["LICENSE"]='OpenGnSys is a Free Software project. As such, all code is licensed under ';
+$TbMsg["LINK"]='Web project:';
+
+
+?>
+
diff --git a/admin/WebConsole/idiomas/php/eng/aulas_eng.php b/admin/WebConsole/idiomas/php/eng/aulas_eng.php
index 6f27779c..5a644688 100644
--- a/admin/WebConsole/idiomas/php/eng/aulas_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/aulas_eng.php
@@ -54,6 +54,7 @@
$TbMsg[46]='Scope id';
$TbMsg[47]='"Historical log"';
$TbMsg[48]='"Real time log"';
-
+ $TbMsg[49]='"Synchronization';
+ $TbMsg[50]='"Synchronization 2';
?>
diff --git a/admin/WebConsole/idiomas/php/eng/avisos_eng.php b/admin/WebConsole/idiomas/php/eng/avisos_eng.php
index 3720510b..42d61299 100644
--- a/admin/WebConsole/idiomas/php/eng/avisos_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/avisos_eng.php
@@ -6,7 +6,7 @@
//________________________________________
if (empty ($TbMsg)) $TbMsg=array();
-$TbMsg["WARN_NETBOOT"]='WARNING: After accepting, executing Advanced NetBoot in the Lab to apply the changes.';
+$TbMsg["WARN_NAMELENGTH"]='WARNING: The hostname must not exceed 15 characters if you install Windows systems.';
$TbMsg["WARN_REBOOTAFTER"]='WARNING: Client(s) will be automatically rebooted after executing the operation.';
?>
diff --git a/admin/WebConsole/idiomas/php/eng/barramenu_eng.php b/admin/WebConsole/idiomas/php/eng/barramenu_eng.php
index aa4d10b3..c418be9e 100644
--- a/admin/WebConsole/idiomas/php/eng/barramenu_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/barramenu_eng.php
@@ -2,7 +2,7 @@
//________________________________________________________________________________________________________
//
// Fichero de idiomas php: barramenu_eng.php
-// Idioma: Ings
+// Idioma: Ing�s
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]='Labs';
@@ -19,5 +19,8 @@
$TbMsg[11]='Help';
$TbMsg[12]='Administrators';
$TbMsg[14]='Search';
+ $TbMsg[15]='Advanced Netboot';
+ $TbMsg[16]='Organizational Unit';
+ $TbMsg[17]='About';
?>
diff --git a/admin/WebConsole/idiomas/php/eng/boot_grub4dos_eng.php b/admin/WebConsole/idiomas/php/eng/boot_grub4dos_eng.php
new file mode 100644
index 00000000..67240fde
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/boot_grub4dos_eng.php
@@ -0,0 +1,58 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: aulas_eng.php
+// Idioma: English
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='New';
+ $TbMsg[1]='Modify';
+ $TbMsg[2]='Delete';
+ $TbMsg[3]='Start new column';
+ $TbMsg[4]='Boot modify column';
+ $TbMsg[5]='Boot delete column';
+ $TbMsg[6]='Created Boot Properly';
+ $TbMsg[7]='Modified Start Properly';
+ $TbMsg[8]='Removed Boot Properly';
+ $TbMsg[9]='Select Start Column';
+ $TbMsg[10]='"User Mode"';
+ $TbMsg[11]='"Management Mode"';
+ $TbMsg[12]='Name';
+ $TbMsg[13]='Accept';
+ $TbMsg[14]='Enter a Column Name';
+ $TbMsg[15]='"Rename"';
+ $TbMsg[16]='Cancel';
+ $TbMsg[17]='Template';
+ $TbMsg[18]='No Template';
+ $TbMsg[19]='Commands';
+ $TbMsg[20]='Description';
+ $TbMsg[21]='File';
+ $TbMsg[22]='##NOT-TO-TOUCH-THIS-LINE ';
+ $TbMsg[23]='NO NEW COLUMN';
+ $TbMsg[24]='Scope: Centers';
+ $TbMsg[25]='Scope: Group of labs';
+ $TbMsg[26]='Scope: Group of computers';
+ $TbMsg[27]='"Incorpore computers"';
+ $TbMsg[28]='"Procedures"';
+ $TbMsg[29]='"Labs Reserves"';
+ $TbMsg[30]='"Confirmed"';
+ $TbMsg[31]='"Pending"';
+ $TbMsg[32]='"Denied"';
+ $TbMsg[33]='"Remote console"';
+ $TbMsg[34]='"Reserve schedules"';
+ $TbMsg[35]='"Operators"';
+ $TbMsg[36]='"Remove operator"';
+ $TbMsg[37]='"Add a new operator"';
+ $TbMsg[38]='"Wizards"';
+ $TbMsg[39]='"Console echo"';
+ $TbMsg[40]='"Advanced NetBoot"';
+ $TbMsg[41]='"Relocate computers"';
+ $TbMsg[42]='Advanced Boot Management';
+ $TbMsg[43]='"Save"';
+ $TbMsg[44]='Computers locator';
+ $TbMsg[45]='Scope name';
+
+
+
+?>
+
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/arrancar_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/arrancar_eng.php
index 3b3582fb..5b1a1472 100644
--- a/admin/WebConsole/idiomas/php/eng/comandos/arrancar_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/comandos/arrancar_eng.php
@@ -12,5 +12,9 @@
$TbMsg[4]='Computers';
$TbMsg[5]='Power-On computers';
$TbMsg[6]='Environment';
+ $TbMsg[7]='Data to submit';
+ $TbMsg[8]='Broadcast';
+ $TbMsg[9]='Unicast';
+ $TbMsg[10]='Boot method';
-?> \ No newline at end of file
+?>
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/configurar_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/configurar_eng.php
index 82c72bdb..5acb7f01 100644
--- a/admin/WebConsole/idiomas/php/eng/comandos/configurar_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/comandos/configurar_eng.php
@@ -1,10 +1,10 @@
-<?
+<?php
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: configurar_eng.php (Comandos)
-// Idioma: Ings
+// Php language file: configurar_eng.php (Comandos)
+// Language: English
//________________________________________________________________________________________________________
- $TbMsg=array();
+ if (empty ($TbMsg)) $TbMsg=array();
$TbMsg[0]='Centers';
$TbMsg[1]='Group of labs';
$TbMsg[2]='Labs';
@@ -23,4 +23,4 @@
$TbMsg[15]='Hide';
$TbMsg[16]='Show';
$TbMsg[17]=' Free space !!';
-?> \ No newline at end of file
+?>
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/crearimagenbasica_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/crearimagenbasica_eng.php
new file mode 100644
index 00000000..fa18bf11
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/comandos/crearimagenbasica_eng.php
@@ -0,0 +1,25 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: crearimagenbasica_eng.php (Comandos)
+// Idioma: Ingles
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Generation of base image <br> (experimental)' ;
+ $TbMsg[1]='Computer features';
+ $TbMsg[2]='Name';
+ $TbMsg[3]='IP Address';
+ $TbMsg[4]='MAC Address';
+ $TbMsg[5]='Hardware profile';
+ $TbMsg[6]='Data to provide';
+ $TbMsg[7]='Disc';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='O.S. Name';
+ $TbMsg[10]='Image / Repositorio';
+ $TbMsg[11]='Repositorio';
+ $TbMsg[12]='Additional Options';
+ $TbMsg[13]='Borrar la Imagen Previamente';
+ $TbMsg[14]='Copiar Imagen en cache';
+ $TbMsg[15]='Borrarla previamente de la cache';
+ $TbMsg[16]='No borrar archivos en destino';
+?>
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/crearsoftincremental_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/crearsoftincremental_eng.php
index 4c90e59b..c23a2a5f 100644
--- a/admin/WebConsole/idiomas/php/eng/comandos/crearsoftincremental_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/comandos/crearsoftincremental_eng.php
@@ -5,7 +5,7 @@
// Idioma: Ings
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Generation of incremental software';
+ $TbMsg[0]='Generation of incremental software <br> (experimental)';
$TbMsg[1]='Computer features';
$TbMsg[2]='Name';
$TbMsg[3]='IP Address';
@@ -15,5 +15,5 @@
$TbMsg[7]='';
$TbMsg[8]='Par';
$TbMsg[9]='Profile name';
- $TbMsg[10]='Availables incremetnal software ';
-?> \ No newline at end of file
+ $TbMsg[10]='Availables incremental software ';
+?>
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php
index 00a16d3d..6f081390 100644
--- a/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/comandos/ejecutarscripts_eng.php
@@ -14,8 +14,9 @@
$TbMsg[6]='Scope';
$TbMsg[7]='Title';
$TbMsg[8]='Description';
- $TbMsg[9]='Opengnsys code';
+ $TbMsg[9]='OpenGnSys code';
$TbMsg[10]='Data to submit';
+ $TbMsg[11]='Delete Cache Image on Client';
$TbMsg["WDI11"]='Deploy Image Wizard';
$TbMsg["WDI12"]='Generate OG Code';
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/eliminarimagencache_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/eliminarimagencache_eng.php
new file mode 100644
index 00000000..475bcf90
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/comandos/eliminarimagencache_eng.php
@@ -0,0 +1,29 @@
+<?php
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: eliminarimagencache_eng.php (Comandos)
+// Idioma: English
+//________________________________________________________________________________________________________
+ if (empty ($TbMsg)) $TbMsg=array();
+ $TbMsg[0]='Generation of software profiles';
+ $TbMsg[1]='Computer features';
+ $TbMsg[2]='Name';
+ $TbMsg[3]='IP Address';
+ $TbMsg[4]='MAC Address';
+ $TbMsg[5]='Image Delete Cache Client';
+ $TbMsg[6]='Environment';
+ $TbMsg[7]='Available Images';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='System name';
+ $TbMsg[10]='----------- Image name -----------';
+ $TbMsg[11]='Nº';
+ $TbMsg[12]='Mark';
+ $TbMsg[13]='Size';
+ $TbMsg[14]='Image is not in Repository';
+ $TbMsg[15]=' has several assigned Repositories';
+ $TbMsg[16]=' NOT have the Repository on the Server';
+ $TbMsg[17]='Version limitations: 1.1';
+ $TbMsg[18]='Image size available if Repository and Web server hosted on the same Server';
+ $TbMsg[19]='Type';
+ $TbMsg["CONFIG_NOCONFIG"]='No configuration: client does not connect to server.';
+?>
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/eliminarimagenrepo_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/eliminarimagenrepo_eng.php
new file mode 100644
index 00000000..b341b96e
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/comandos/eliminarimagenrepo_eng.php
@@ -0,0 +1,41 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: eliminarimagenrepositorio_eng.php (Comandos)
+// Idioma: Ing�s
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Generation of software profiles';
+ $TbMsg[1]='Computer features';
+ $TbMsg[2]='Name';
+ $TbMsg[3]='IP Address';
+ $TbMsg[4]='MAC Address';
+ $TbMsg[5]='Remove Image Repository';
+ $TbMsg[6]='Environment';
+ $TbMsg[7]='Available Images';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='System name';
+ $TbMsg[10]='----------- Image name -----------';
+ $TbMsg[11]='Nº';
+ $TbMsg[12]='Mark';
+ $TbMsg[13]='Size';
+ $TbMsg[14]='Locked Image';
+ $TbMsg[15]='Removing Image';
+ $TbMsg[16]='**** WARNING ****';
+ $TbMsg[17]='Clicking OK deletes the selected objects';
+ $TbMsg[18]="TOTAL Space";
+ $TbMsg[19]="Space Occupied";
+ $TbMsg[20]="Space Release";
+ $TbMsg[21]="% Occupied";
+ $TbMsg[22]="No connection to the Repository";
+ $TbMsg[23]='Version Limitations 1.5';
+ $TbMsg[24]='Clear Image is permitted if Repository and Web server hosted on the same server';
+ $TbMsg[25]='NOT Created';
+ $TbMsg[26]='Delete Image object';
+ $TbMsg[27]='Type';
+ $TbMsg[28]='View Full Repository';
+ $TbMsg[29]='View Organizational Unit';
+ $TbMsg[30]='Organizational Unit';
+ $TbMsg[31]='Archive';
+ $TbMsg[32]='Directory';
+?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/iniciarsesion_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/iniciarsesion_eng.php
index e2b3ede7..49d85e1b 100644
--- a/admin/WebConsole/idiomas/php/eng/comandos/iniciarsesion_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/comandos/iniciarsesion_eng.php
@@ -1,17 +1,17 @@
-<?
+<?php
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: crearperfilsoftware_esp.php (Comandos)
+// Fichero de idiomas php: iniciarsesion_eng.php (Comandos)
// Idioma: Español
//________________________________________________________________________________________________________
- $TbMsg=array();
+ if (empty ($TbMsg)) $TbMsg=array();
$TbMsg[0]='Centers';
$TbMsg[1]='Group of labs';
$TbMsg[2]='Labs';
$TbMsg[3]='Group of computers';
$TbMsg[4]='Computers';
$TbMsg[5]='Login';
- $TbMsg[6]='Environment';
+ $TbMsg[6]='Scope';
$TbMsg[7]='Providing data';
$TbMsg[8]='Par';
$TbMsg[9]='O.S. name';
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/inventariohardware_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/inventariohardware_eng.php
new file mode 100644
index 00000000..8ef43596
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/comandos/inventariohardware_eng.php
@@ -0,0 +1,16 @@
+<?php
+//________________________________________________________________________________________________________
+//
+// Php language file: inventariohardware_eng.php (Comandos)
+// Language: English
+//________________________________________________________________________________________________________
+ if (empty ($TbMsg)) $TbMsg=array();
+ $TbMsg[0]='Centers';
+ $TbMsg[1]='Group of labs';
+ $TbMsg[2]='Labs';
+ $TbMsg[3]='Group of computers';
+ $TbMsg[4]='Computers';
+ $TbMsg[5]='Hardware Inventory';
+ $TbMsg[6]='Scope';
+
+?>
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/inventariosoftware_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/inventariosoftware_eng.php
new file mode 100644
index 00000000..a960eeb4
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/comandos/inventariosoftware_eng.php
@@ -0,0 +1,18 @@
+<?php
+//________________________________________________________________________________________________________
+//
+// Php language file: inventariosoftware_eng.php (Comandos)
+// Language: English
+//________________________________________________________________________________________________________
+ if (empty ($TbMsg)) $TbMsg=array();
+ $TbMsg[0]='Centers';
+ $TbMsg[1]='Group of labs';
+ $TbMsg[2]='Labs';
+ $TbMsg[3]='Group of computers';
+ $TbMsg[4]='Computers';
+ $TbMsg[5]='Software Inventory';
+ $TbMsg[6]='Scope';
+ $TbMsg[7]='Providing data';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='O.S. name';
+?>
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/mensajes_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/mensajes_eng.php
index f50593e5..310bedcb 100644
--- a/admin/WebConsole/idiomas/php/eng/comandos/mensajes_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/comandos/mensajes_eng.php
@@ -1,4 +1,4 @@
-<?
+<?php
//________________________________________________________
//
// Fichero de idiomas php: comandos/mensajes_eng.php
@@ -10,12 +10,18 @@ $TbMsg["COMMAND_Arrancar"]="Boot";
$TbMsg["COMMAND_Configurar"]="Configure";
$TbMsg["COMMAND_CrearImagen"]="Make Image";
$TbMsg["COMMAND_EjecutarScript"]="Execute Script";
+$TbMsg["COMMAND_EliminarImagenCache"]="Delete Cache Image";
$TbMsg["COMMAND_IniciarSesion"]="Init Session";
$TbMsg["COMMAND_InventarioHardware"]="Hardware Inventory";
$TbMsg["COMMAND_InventarioSoftware"]="Software Inventory";
$TbMsg["COMMAND_Reiniciar"]="Reboot";
$TbMsg["COMMAND_RestaurarImagen"]="Restore Image";
-$TbMsg["WIZARD_Asistente Particionado"]="Partition";
+$TbMsg["COMMAND_EliminarImagenCache"]="Delete Cache Image";
+$TbMsg["COMMAND_CrearImagenBasica"]="Create Basic Image";
+$TbMsg["COMMAND_RestaurarImagenBasica"]="Restore Basic Image";
+$TbMsg["COMMAND_CrearSoftIncremental"]="Create Incremental Software";
+$TbMsg["COMMAND_RestaurarSoftIncremental"]="Restore Incremental Software";
+$TbMsg["WIZARD_Asistente Particionado"]="Partitioning";
$TbMsg["WIZARD_Asistente Clonacion Particiones Remotas"]="Clone Remote Partitions ";
$TbMsg["WIZARD_Asistente \"Deploy\" de Imagenes"]="Deploy image";
?>
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/reiniciar_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/reiniciar_eng.php
index c47e8a02..a626507d 100644
--- a/admin/WebConsole/idiomas/php/eng/comandos/reiniciar_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/comandos/reiniciar_eng.php
@@ -10,7 +10,7 @@
$TbMsg[2]='Labs';
$TbMsg[3]='Group of computers';
$TbMsg[4]='Computers';
- $TbMsg[5]='Rebootf computers';
+ $TbMsg[5]='Reboot computers';
$TbMsg[6]='Environment';
-?> \ No newline at end of file
+?>
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/restaurarimagenbasica_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/restaurarimagenbasica_eng.php
new file mode 100644
index 00000000..4068d492
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/comandos/restaurarimagenbasica_eng.php
@@ -0,0 +1,53 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: restaurarimagenbasica_eng.php (Comandos)
+// Idioma: Ingles
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Centros';
+ $TbMsg[1]='Grupo de aulas';
+ $TbMsg[2]='Aulas';
+ $TbMsg[3]='Grupo de ordenadores';
+ $TbMsg[4]='Ordenadores';
+ $TbMsg[5]='Restaurar Imagen Básica <br> (experimental)';
+ $TbMsg[6]='Ámbito';
+ $TbMsg[7]='Datos a suministrar';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Repositorio';
+ $TbMsg[10]='Imagen';
+ $TbMsg[11]='Opciones Adicionales';
+ $TbMsg[12]='Desconocido';
+ $TbMsg[13]='Caché';
+ $TbMsg[14]='Ámbito';
+ $TbMsg[15]='Ordenadores';
+ $TbMsg[16]='Desde';
+ $TbMsg[17]='';
+ $TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:";
+ $TbMsg[19]="Datos a suministrar";
+ // Cabeceras de tabla de configuración
+ $TbMsg[20]='Partición';
+ $TbMsg[21]='S.O. Instalado';
+ $TbMsg[22]='Tamaño';
+ $TbMsg[23]='Datos de configuration';
+ $TbMsg[24]='Tipo';
+ $TbMsg[25]='Imagen';
+ $TbMsg[26]='Perfil Software';
+ $TbMsg[27]='S.F.';
+ $TbMsg[28]='Ninguno';
+ $TbMsg[29]='Desconocido';
+ // Desagrupamiento
+ $TbMsg[30]='Sistema de Ficheros';
+ $TbMsg[31]='Nombre del S.O.';
+ $TbMsg[32]='Tamaño de partición';
+ $TbMsg[33]='Nombre de la Imagen ';
+ $TbMsg[34]='Perfil software';
+ // OPciones adicionales
+ $TbMsg[35]='Borrar la Partición Previamente';
+ $TbMsg[36]='Copiar Imagen en cache';
+ $TbMsg[37]='Borrarla previamente de la cache';
+ $TbMsg[38]='No borrar archivos en destino';
+ $TbMsg[39]='Método';
+ $TbMsg[40]='Unicast';
+ $TbMsg[41]='Multicast';
+?>
diff --git a/admin/WebConsole/idiomas/php/eng/comandos/restaurarsoftincremental_eng.php b/admin/WebConsole/idiomas/php/eng/comandos/restaurarsoftincremental_eng.php
new file mode 100644
index 00000000..8fcae75a
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/comandos/restaurarsoftincremental_eng.php
@@ -0,0 +1,51 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: restaurarsoftincremental_eng.php (Comandos)
+// Idioma: Ingles
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Centros';
+ $TbMsg[1]='Grupo de aulas';
+ $TbMsg[2]='Aulas';
+ $TbMsg[3]='Grupo de ordenadores';
+ $TbMsg[4]='Ordenadores';
+ $TbMsg[5]='Restaurar Software Incremental <br> (experimental)';
+ $TbMsg[6]='Ámbito';
+ $TbMsg[7]='Datos a suministrar';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Repositorio';
+ $TbMsg[10]='Imagen';
+ $TbMsg[11]='Opciones Adicionales';
+ $TbMsg[12]='Desconocido';
+ $TbMsg[13]='Caché';
+ $TbMsg[14]='Ámbito';
+ $TbMsg[15]='Ordenadores';
+ $TbMsg[16]='Desde';
+ $TbMsg[17]='';
+ $TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:";
+ $TbMsg[19]="Datos a suministrar";
+ // Cabeceras de tabla de configuración
+ $TbMsg[20]='Partición';
+ $TbMsg[21]='S.O. Instalado';
+ $TbMsg[22]='Tamaño';
+ $TbMsg[23]='Datos de configuration';
+ $TbMsg[24]='Tipo';
+ $TbMsg[25]='Imagen';
+ $TbMsg[26]='Perfil Software';
+ $TbMsg[27]='S.F.';
+ $TbMsg[28]='Ninguno';
+ $TbMsg[29]='Desconocido';
+ // Desagrupamiento
+ $TbMsg[30]='Sistema de Ficheros';
+ $TbMsg[31]='Nombre del S.O.';
+ $TbMsg[32]='Tamaño de partición';
+ $TbMsg[33]='Nombre de la Imagen ';
+ $TbMsg[34]='Perfil software';
+ // OPciones adicionales
+ $TbMsg[35]='Borrar la Partición Previamente';
+ $TbMsg[36]='Copiar Imagen en cache';
+ $TbMsg[37]='Borrarla previamente de la cache';
+ $TbMsg[38]='Software Incremental';
+ $TbMsg[39]='No borrar archivos en destino';
+?>
diff --git a/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php b/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php
index 8b513ad9..c5b959f2 100644
--- a/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php
@@ -4,7 +4,7 @@
// Php language file: configuraciones_eng.php
// Language: English
//_________________________________________________
-$TbMsg=array();
+if (empty ($TbMsg)) $TbMsg=array();
$TbMsg[0]='Configurations';
$TbMsg[1]='Scope';
$TbMsg[2]="Labs";
@@ -52,10 +52,10 @@ $TbMsg[38]='Less free disk space (KB)';
$TbMsg[39]='Customize';
$TbMsg[40]='Size unchanged';
$TbMsg[41]='Generate OG Instruction';
-$TbMsg["CONFIG_PARTTABLE"='Partition table';
+$TbMsg["CONFIG_PARTTABLE"]='Partition table';
$TbMsg[42]='Variable';
-$TbMsg[43]='No configuration: client does not connect to server.';
+$TbMsg["CONFIG_NOCONFIG"]='No configuration: client does not connect to server.';
$TbMsg[44]='Hardware equipment without profile';
$TbMsg[45]='Add Profile to obtain data';
$TbMsg[495]='Content cache';
diff --git a/admin/WebConsole/idiomas/php/eng/imagenes_eng.php b/admin/WebConsole/idiomas/php/eng/imagenes_eng.php
index a3211bdc..ab3c64d2 100644
--- a/admin/WebConsole/idiomas/php/eng/imagenes_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/imagenes_eng.php
@@ -16,4 +16,7 @@
$TbMsg[8]='"Remove Image"';
$TbMsg[9]='"Images"';
$TbMsg[10]='"Incrementals management"';
+ $TbMsg[11]='"Monolithic Image"';
+ $TbMsg[12]='"Base Image"';
+ $TbMsg[13]='"Incremental Image"';
?>
diff --git a/admin/WebConsole/idiomas/php/eng/nada_eng.php b/admin/WebConsole/idiomas/php/eng/nada_eng.php
new file mode 100644
index 00000000..171bc0f1
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/nada_eng.php
@@ -0,0 +1,16 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: nada_esp.php
+// Idioma: Español
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]="USED TO ACCESS DEVICE OPENGNSYS";
+ $TbMsg[1]="IP - Device";
+ $TbMsg[2]="Type - Device";
+ $TbMsg[3]="Operating System";
+ $TbMsg[4]="System Version";
+ $TbMsg[5]="Browser";
+ $TbMsg[6]="Browser Version";
+
+?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/eng/pintaParticiones_eng.php b/admin/WebConsole/idiomas/php/eng/pintaParticiones_eng.php
new file mode 100644
index 00000000..01ca897a
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/eng/pintaParticiones_eng.php
@@ -0,0 +1,51 @@
+<?php
+//______________________________________________________
+//
+// Fichero de idiomas php: pintaParticiones_esp.php
+// Idioma: Español
+//______________________________________________________
+// Si ya existe TbMsg, solo agregamos lo nuevo
+if(!isset($TbMsg)){
+ $TbMsg=array();
+}
+
+$TbMsg["PARTITION"]='Partici&oacute;n';
+$TbMsg["INST_SO"]='S.O. Instalado';
+$TbMsg["SIZE_KB"]='Tama&ntilde;o (KB)';
+$TbMsg["PARTITION_TYPE"]='Tipo';
+$TbMsg["IMAGE"]='Imagen';
+$TbMsg["SOFT_PROFILE"]='Perfil Software';
+$TbMsg["FILESYSTEM_SHORT"]='S.F.';
+
+$TbMsg["DISK"]='Disco';
+$TbMsg["CONFIG_PARTTABLE"]='Tabla de particiones';
+
+$TbMsg["VARIABLE"]='Variable';
+$TbMsg["CACHE_CONTENT"]='Contenido cach&eacute;';
+$TbMsg["CACHE_FREESPACE"]='Cach&eacute; libre';
+
+$TbMsg["SAMESYSTEM_IMAGE"]='Imagen (Mismo sistema)';
+$TbMsg["DIFFERENTSYSTEM_IMAGE"]='Imagen (Distinto sistema)';
+$TbMsg["RESTORE_METHOD"]='M&eacute;todo';
+
+$TbMsg["SO_NAME"]='Nombre S.O.';
+$TbMsg["IMAGE_TO_CREATE"]='Imagen a crear';
+$TbMsg["DESTINATION_REPOSITORY"]='Repositorio de destino';
+
+$TbMsg["IMAGE_REPOSITORY"]='Imagen / Repositorio';
+$TbMsg["INCREMENTAL_IMAGE_REPOSITORY"]='Imagen Incremental / Repositorio';
+
+$TbMsg["CONFIG_NOCONFIG"]='No configuration: client does not connect to server.';
+$TbMsg["CONFIG_NODISK1MSDOS"]='Warning: this command only uses disk 1 with a MSDOS partition table.';
+
+$TbMsg["SYNC_METHOD"]='Method';
+$TbMsg["SYNC1_DIR"]='Based on directory';
+$TbMsg["SYNC2_FILE"]='Based on file';
+
+$TbMsg["TITLE_W"]='Rsync option: delta-transfer algorithm is not used and the whole file is sent as-is instead. This is the default when both the source and destination are specified as local paths.';
+$TbMsg["TITLE_E"]="Rsync option: delete extraneous files from the receiving side (ones that aren't on the sending side).";
+$TbMsg["TITLE_C"]='Rsync option: compresses the file data as it is sent to the destination machine, which reduces the amount of data being transmitted.';
+$TbMsg["SEND"]='Protocol';
+
+?>
+
diff --git a/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php b/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php
index 48b21c98..52c9f5bf 100644
--- a/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/propiedades_aulas_eng.php
@@ -35,8 +35,17 @@ $TbMsg[26]="P2P mode -seeder while downloading";
$TbMsg[27]="P2P time -seeder time(s) after download-";
$TbMsg[28]="Gateway";
$TbMsg[29]="Netmask";
+// UHU
+$TbMsg[30]="Validation";
+$TbMsg[31]="Login page";
+$TbMsg[32]="Validation page";
+// UHU
+$TbMsg[495]="Cache content";
$TbMsg[509]="Computer Photo";
$TbMsg[5091]="Insert Photo";
$TbMsg[5092]="View Images";
+// Ramón
+$TbMsg['PROP_DNSIP']="DNS Server IP <em>(optional)</em>";
+$TbMsg['PROP_PROXYURL']="Proxy Server URL <em>(optional)</em>";
?>
diff --git a/admin/WebConsole/idiomas/php/eng/propiedades_imagenes_eng.php b/admin/WebConsole/idiomas/php/eng/propiedades_imagenes_eng.php
index 4bae91af..25feee35 100644
--- a/admin/WebConsole/idiomas/php/eng/propiedades_imagenes_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/propiedades_imagenes_eng.php
@@ -16,6 +16,14 @@ $TbMsg[7]="Comments";
$TbMsg[8]="Partition";
$TbMsg[9]="Partition Type";
$TbMsg[10]="Repository";
-$TbMsg[11]="Canonical Name";
+$TbMsg[11]="Name";
+$TbMsg[12]="Basic Image Management";
+$TbMsg[13]="Incremental Image Management";
+$TbMsg[14]="Basic Picture";
+$TbMsg[15]="ATTENTION. - A software image that has profile indicates that at some point has been created <br>
+ and therefore some data can not be changed unless you delete and recreate";
+$TbMsg[16]="Route Origin";
+$TbMsg[17]='"Canonical name-image file exists: Enter another name"';
+$TbMsg[18]="Enter another Name";
?>
diff --git a/admin/WebConsole/idiomas/php/eng/propiedades_repositorios_eng.php b/admin/WebConsole/idiomas/php/eng/propiedades_repositorios_eng.php
index 4020f5ec..22644e67 100644
--- a/admin/WebConsole/idiomas/php/eng/propiedades_repositorios_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/propiedades_repositorios_eng.php
@@ -16,4 +16,10 @@ $TbMsg[7]="Comments";
$TbMsg[8]="Port";
$TbMsg[9]="Base Directory";
$TbMsg[10]="PXE Directory";
+$TbMsg[11]="Space TOTAL";
+$TbMsg[12]="Space Taken";
+$TbMsg[13]="Space Free";
+$TbMsg[14]="% Taken";
+$TbMsg[15]='Limitations of this version';
+$TbMsg[16]='Space information is allowed only if Repository and Web Server are hosted on the same server';
?>
diff --git a/admin/WebConsole/idiomas/php/eng/repositorios_eng.php b/admin/WebConsole/idiomas/php/eng/repositorios_eng.php
index f5889ff1..75c5a49a 100644
--- a/admin/WebConsole/idiomas/php/eng/repositorios_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/repositorios_eng.php
@@ -15,7 +15,7 @@
$TbMsg[7]='"Properties"';
$TbMsg[8]='"Remove Repository"';
$TbMsg[9]='"New Group of Repositories"';
- $TbMsg[10]='';
+ $TbMsg[10]='"Remove Image Repository"';
$TbMsg[11]='';
$TbMsg[12]='"Repositories"';
$TbMsg[13]='""';
diff --git a/admin/WebConsole/idiomas/php/esp/acceso_esp.php b/admin/WebConsole/idiomas/php/esp/acceso_esp.php
index 1f3b3094..7dcd76a3 100644
--- a/admin/WebConsole/idiomas/php/esp/acceso_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/acceso_esp.php
@@ -29,6 +29,5 @@ $TbMsg["ACCESS_NOUNIT"]='ATENCIÓN: No ha introducido ninguna Unidad Organizativ
$TbMsg["ACCESS_ALLOWED"]='Acceso permitido. Espere por favor ...';
$TbMsg["ACCESS_ERROR"]='Error de acceso';
$TbMsg["ACCESS_UNKNOWNERROR"]='Error desconocido';
-
+$TbMsg["ACCESS_NOFRAMES"]='El navegador necesita soporte para "frames" para mostrar la p&aacute;gina.';
?>
-
diff --git a/admin/WebConsole/idiomas/php/esp/acercade_esp.php b/admin/WebConsole/idiomas/php/esp/acercade_esp.php
new file mode 100644
index 00000000..2e4e0147
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/acercade_esp.php
@@ -0,0 +1,19 @@
+<?php
+//______________________________________________________
+//
+// Fichero de idiomas php: pintaParticiones_esp.php
+// Idioma: Español
+//______________________________________________________
+// Si ya existe TbMsg, solo agregamos lo nuevo
+if(!isset($TbMsg)){
+ $TbMsg=array();
+}
+
+$TbMsg["TITLE"]='Aplicaci&oacute;n libre y abierta para la gesti&oacute;n y el despliegue de sistemas operativos';
+$TbMsg["DESCRIPTION"]='OpenGnSys <em>(l&eacute;ase OpenG&eacute;nesis)</em> re&uacute;ne el esfuerzo conjunto de varias Universidades P&uacute;blicas Espa&ntilde;olas, para disponer de una serie de herramientas libres y abiertas que constituyan un sistema completo, vers&aacute;til e intuitivo, para la gesti&oacute;n y clonaci&oacute;n de equipos. Esta aplicaci&oacute;n permite la distribuci&oacute;n, instalaci&oacute;n y despliegue de distintos sistemas operativos. ';
+$TbMsg["LICENSE"]='OpenGnSys es un proyecto de Software Libre, todo el c&oacute;digo est&aacute; licenciado bajo ';
+$TbMsg["LINK"]='Web del proyecto: ';
+
+
+?>
+
diff --git a/admin/WebConsole/idiomas/php/esp/aulas_esp.php b/admin/WebConsole/idiomas/php/esp/aulas_esp.php
index ed4de97f..71c28f05 100644
--- a/admin/WebConsole/idiomas/php/esp/aulas_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/aulas_esp.php
@@ -54,5 +54,7 @@
$TbMsg[46]='Identificador ámbito';
$TbMsg[47]='"Log historico"';
$TbMsg[48]='"Log en tiempo real"';
+ $TbMsg[49]='"Sincronización"';
+ $TbMsg[50]='"Sincronización 2"';
?>
diff --git a/admin/WebConsole/idiomas/php/esp/avisos_esp.php b/admin/WebConsole/idiomas/php/esp/avisos_esp.php
index 6be18a06..e3211ccb 100644
--- a/admin/WebConsole/idiomas/php/esp/avisos_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/avisos_esp.php
@@ -6,7 +6,7 @@
//______________________________________________
if (empty ($TbMsg)) $TbMsg=array();
-$TbMsg["WARN_NETBOOT"]='AVISO: Despu&eacute;s de aceptar, ejecutar NetBoot Avanzado en el aula para aplicar los cambios.';
+$TbMsg["WARN_NAMELENGTH"]='AVISO: El nombre de equipo no debe superar los 15 caracteres si se instalan sistemas Windows.';
$TbMsg["WARN_REBOOTAFTER"]='AVISO: Se realizar&aacute; autom&aacute;ticamente un reinicio despu&eacute;s de ejecutar la operaci&oacute;n.';
?>
diff --git a/admin/WebConsole/idiomas/php/esp/barramenu_esp.php b/admin/WebConsole/idiomas/php/esp/barramenu_esp.php
index c25cf429..63c387a9 100644
--- a/admin/WebConsole/idiomas/php/esp/barramenu_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/barramenu_esp.php
@@ -19,5 +19,8 @@
$TbMsg[11]='Ayuda';
$TbMsg[12]='Administradores';
$TbMsg[14]='Buscar';
+ $TbMsg[15]='Netboot Avanzado';
+ $TbMsg[16]='Unidad Organizativa';
+ $TbMsg[17]='Acerca&nbsp;de';
?>
diff --git a/admin/WebConsole/idiomas/php/esp/boot_grub4dos_esp.php b/admin/WebConsole/idiomas/php/esp/boot_grub4dos_esp.php
new file mode 100644
index 00000000..a163d1e7
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/boot_grub4dos_esp.php
@@ -0,0 +1,53 @@
+<?
+//____________________________________________________________
+//
+// Fichero de idiomas php: aulas_esp.php
+// Idioma: Espaol
+//_____________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Nuevo';
+ $TbMsg[1]='Modificar';
+ $TbMsg[2]='Eliminar';
+ $TbMsg[3]='Nueva Columna de Arranque';
+ $TbMsg[4]='Modificar Columna de Arranque';
+ $TbMsg[5]='Eliminar Columna de Arranque';
+ $TbMsg[6]='Arranque Creado Correctamente';
+ $TbMsg[7]='Arranque Modificado Correctamente';
+ $TbMsg[8]='Arranque Eliminado Correctamente';
+ $TbMsg[9]='Selecciona Columna Arranque';
+ $TbMsg[10]='"Modo Usuario"';
+ $TbMsg[11]='"Modo Administracion"';
+ $TbMsg[12]='Nombre';
+ $TbMsg[13]='Aceptar';
+ $TbMsg[14]='Introduzca un Nombre de Columna';
+ $TbMsg[15]='"Renombrar"';
+ $TbMsg[16]='Cancelar';
+ $TbMsg[17]='Plantilla';
+ $TbMsg[18]='Sin Plantilla';
+ $TbMsg[19]='Comandos';
+ $TbMsg[20]='Descripcion';
+ $TbMsg[21]='Fichero';
+ $TbMsg[22]='##NO-TOCAR-ESTA-LINEA ';
+ $TbMsg[23]='NO HAY COLUMNA NUEVA';
+ $TbMsg[24]='mbito: Centros';
+ $TbMsg[25]='mbito: Grupo de aulas';
+ $TbMsg[26]='mbito: Grupo de ordenadores';
+ $TbMsg[27]='"Incorporar ordenadores"';
+ $TbMsg[28]='"Procedimientos"';
+ $TbMsg[29]='"Reservas de aulas"';
+ $TbMsg[30]='"Confirmadas"';
+ $TbMsg[31]='"Pendientes"';
+ $TbMsg[32]='"Denegadas"';
+ $TbMsg[33]='"Consola remota"';
+ $TbMsg[34]='"Programacin reservas"';
+ $TbMsg[35]='"Operadores"';
+ $TbMsg[36]='"Eliminar Operador"';
+ $TbMsg[37]='"Aadir nuevo Operador"';
+ $TbMsg[38]='"Asistentes"';
+ $TbMsg[39]='"Eco de Consola"';
+ $TbMsg[40]='"NetBoot avanzado"';
+ $TbMsg[41]='"Reubicar ordenadores"';
+ $TbMsg[42]='Gesti&oacute;n Arranque Avanzado';
+ $TbMsg[43]='"Guardar"';
+ $TbMsg[44]='Ubicador Ordenadores';
+ $TbMsg[45]='Nombre mbito';
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/arrancar_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/arrancar_esp.php
index 2cdbb0d6..3e82fbcc 100644
--- a/admin/WebConsole/idiomas/php/esp/comandos/arrancar_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/comandos/arrancar_esp.php
@@ -12,5 +12,9 @@
$TbMsg[4]='Ordenadores';
$TbMsg[5]='Arrancar ordenadores';
$TbMsg[6]='Ámbito';
+ $TbMsg[7]='Datos a suministrar';
+ $TbMsg[8]='Broadcast';
+ $TbMsg[9]='Unicast';
+ $TbMsg[10]='Método de arranque';
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/configurar_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/configurar_esp.php
index aa943a31..fd2343a5 100644
--- a/admin/WebConsole/idiomas/php/esp/comandos/configurar_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/comandos/configurar_esp.php
@@ -1,10 +1,10 @@
-<?
+<?php
//________________________________________________________________________________________________________
//
// Fichero de idiomas php: configurar_esp.php (Comandos)
// Idioma: Espa�l
//________________________________________________________________________________________________________
- $TbMsg=array();
+ if (empty ($TbMsg)) $TbMsg=array();
$TbMsg[0]='Centros';
$TbMsg[1]='Grupo de aulas';
$TbMsg[2]='Aulas';
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/crearimagenbasica_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/crearimagenbasica_esp.php
new file mode 100644
index 00000000..bfef1056
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/comandos/crearimagenbasica_esp.php
@@ -0,0 +1,25 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: crearimagenbasica_esp.php (Comandos)
+// Idioma: Español
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Creación de Imagen Básica <br> (experimental)' ;
+ $TbMsg[1]='Características del ordenador';
+ $TbMsg[2]='Nombre';
+ $TbMsg[3]='Dirección IP';
+ $TbMsg[4]='Dirección MAC';
+ $TbMsg[5]='Perfil Hardware';
+ $TbMsg[6]='Datos a suministrar';
+ $TbMsg[7]='Disco';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Nombre S.O.';
+ $TbMsg[10]='Imagen / Repositorio';
+ $TbMsg[11]='Repositorio';
+ $TbMsg[12]='Opciones Adicionales';
+ $TbMsg[13]='Borrar la Imagen Previamente';
+ $TbMsg[14]='Copiar Imagen en cache';
+ $TbMsg[15]='Borrarla previamente de la cache';
+ $TbMsg[16]='No borrar archivos en destino';
+?>
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/crearsoftincremental_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/crearsoftincremental_esp.php
index 0eb03d9b..1ec2ba80 100644
--- a/admin/WebConsole/idiomas/php/esp/comandos/crearsoftincremental_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/comandos/crearsoftincremental_esp.php
@@ -5,15 +5,21 @@
// Idioma: Español
//________________________________________________________________________________________________________
$TbMsg=array();
- $TbMsg[0]='Generación de software Incremental' ;
+ $TbMsg[0]='Creación de Imagen Incremental <br> (experimental)' ;
$TbMsg[1]='Características del ordenador';
$TbMsg[2]='Nombre';
$TbMsg[3]='Dirección IP';
$TbMsg[4]='Dirección MAC';
$TbMsg[5]='Perfil Hardware';
$TbMsg[6]='Datos a suministrar';
- $TbMsg[7]='';
+ $TbMsg[7]='Disco';
$TbMsg[8]='Par';
- $TbMsg[9]='Nombre Perfil';
- $TbMsg[10]='Software incremental disponible';
-?> \ No newline at end of file
+ $TbMsg[9]='Nombre S.O.';
+ $TbMsg[10]='Imagen Incremental / Repositorio';
+ $TbMsg[11]='Opciones Adicionales';
+ $TbMsg[12]='Software incremental';
+ $TbMsg[13]='Borrar Incremental previamente';
+ $TbMsg[14]='Copiar Incremental en cache';
+ $TbMsg[15]='Borrarla previamente de la cache';
+ $TbMsg[16]='No borrar archivos en destino';
+?>
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php
index c8a8f0d2..3c70d168 100644
--- a/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/comandos/ejecutarscripts_esp.php
@@ -11,14 +11,15 @@
$TbMsg[3]='Grupo de ordenadores';
$TbMsg[4]='Ordenadores';
$TbMsg[5]='Ejecutar script';
- $TbMsg[6]='Ámbito';
- $TbMsg[7]='Título';
- $TbMsg[8]='Description';
- $TbMsg[9]='Código del script';
+ $TbMsg[6]='&Aacute;mbito';
+ $TbMsg[7]='T&iacute;tulo';
+ $TbMsg[8]='Descripci&oacute;n';
+ $TbMsg[9]='C&oacute;digo del script';
$TbMsg[10]='Datos a suministrar';
+ $TbMsg[11]='Eliminar Imagen de la Cach&eacute; de Cliente';
$TbMsg["WDI11"]='Asistente de Despliegue de la imagen';
- $TbMsg["WDI12"]='Generar InstruccionOG';
+ $TbMsg["WDI12"]='Generar Instrucci&oacute;n OG';
$TbMsg["WDI13"]='Elige si solo quieres almacenar la imagen en la Cache - UpdateCache ';
$TbMsg["WDI14"]='deployImage (update+restore)';
$TbMsg["WDI15"]='updateCache (solo descarga)';
@@ -29,23 +30,23 @@
$TbMsg["WDI20"]='Elige la particion del disco donde se restaurar la imagen:';
$TbMsg["WDI21"]='Elige la imagen a distribuir:';
$TbMsg["WDI22"]='--Selecciona imagen --';
- $TbMsg["WDI23"]='Elige el metodo de transferencia';
+ $TbMsg["WDI23"]='Elige el m&eacute;todo de transferencia';
$TbMsg["WDI24"]='puerto : ';
$TbMsg["WDI25"]='direccion Mcast : ';
$TbMsg["WDI26"]='modo : ';
$TbMsg["WDI27"]='velocidad : ';
- $TbMsg["WDI28"]='nº Max. clientes : ';
- $TbMsg["WDI29"]='Tiempo(seg) Max. Espera : ';
+ $TbMsg["WDI28"]='n&ordm; M&aacute;x. clientes : ';
+ $TbMsg["WDI29"]='Tiempo M&aacute;x. Espera (seg) : ';
$TbMsg["WDI30"]='tiempo de semilla :';
- $TbMsg["WCRP31"]='Asistente Clonacion Particiones Remotas';
+ $TbMsg["WCRP31"]='Asistente Clonaci&oacute;n Particiones Remotas';
$TbMsg["WCRP32"]='Elige equipo MASTER:';
$TbMsg["WCRP33"]='Elige desde el Master la imagen o particion a enviar';
$TbMsg["WCRP34"]='Elige la identificacion de la particion destino de los clientes:';
$TbMsg["WCRP35"]='Elige el metodo de transferencia';
- $TbMsg["WCRP36"]='Elige herramienta de clonacion:';
- $TbMsg["WCRP37"]='Elige compresor para la herramienta de clonacion:';
+ $TbMsg["WCRP36"]='Elige herramienta de clonaci&oacute;n:';
+ $TbMsg["WCRP37"]='Elige compresor para la herramienta de clonaci&oacute;n:';
?>
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagencache_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagencache_esp.php
new file mode 100644
index 00000000..ecb710b1
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagencache_esp.php
@@ -0,0 +1,29 @@
+<?php
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: eliminarimagencache_esp.php (Comandos)
+// Idioma: Espa�ol
+//________________________________________________________________________________________________________
+ if (empty ($TbMsg)) $TbMsg=array();
+ $TbMsg[0]='Creaci&oacute;n de Imagen';
+ $TbMsg[1]='Caracter&iacute;sticas del ordenador';
+ $TbMsg[2]='Nombre';
+ $TbMsg[3]='Direcci&oacute;n IP';
+ $TbMsg[4]='Direcci&oacute;n MAC';
+ $TbMsg[5]='Eliminar Imagen de la Cache en Cliente';
+ $TbMsg[6]='Datos a suministrar';
+ $TbMsg[7]='Im&aacute;genes Disponibles';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Nombre S.O.';
+ $TbMsg[10]='Nombre de la Imagen';
+ $TbMsg[11]='N&ordm;';
+ $TbMsg[12]='Marcar';
+ $TbMsg[13]='Tama&ntilde;o';
+ $TbMsg[14]='Imagen NO est&aacute; en Repositorio';
+ $TbMsg[15]=' tiene varios Repositorios asignados';
+ $TbMsg[16]=' NO tiene el Repositorio en el Servidor';
+ $TbMsg[17]='Limitaciones Versi&oacute;n 1.1';
+ $TbMsg[18]='Tama&ntilde;o de la imagen disponible si Repositorio y Servidor Web alojados en el mismo Servidor';
+ $TbMsg[19]='Tipo';
+ $TbMsg["CONFIG_NOCONFIG"]='Sin configuraci&oacute;n: cliente no conectado al servidor.';
+?>
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagenrepo_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagenrepo_esp.php
new file mode 100644
index 00000000..c10f5094
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/comandos/eliminarimagenrepo_esp.php
@@ -0,0 +1,41 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: eliminarimagencache_esp.php (Comandos)
+// Idioma: Español
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Creación de Imagen';
+ $TbMsg[1]='Características del ordenador';
+ $TbMsg[2]='Nombre';
+ $TbMsg[3]='Dirección IP';
+ $TbMsg[4]='Dirección MAC';
+ $TbMsg[5]='Eliminar Imagen del Repositorio';
+ $TbMsg[6]='Datos a suministrar';
+ $TbMsg[7]='Imagenes Disponibles';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Nombre S.O.';
+ $TbMsg[10]='----------- Nombre de la Imagen -----------';
+ $TbMsg[11]='Nº';
+ $TbMsg[12]='Marcar';
+ $TbMsg[13]='Tamaño';
+ $TbMsg[14]='Imagen Bloqueada';
+ $TbMsg[15]='Eliminando imagen';
+ $TbMsg[16]='**** ATENCIÓN ****';
+ $TbMsg[17]='Si pulsa Aceptar se eliminan los objetos seleccionados';
+ $TbMsg[18]="Espacio TOTAL";
+ $TbMsg[19]="Espacio Ocupado";
+ $TbMsg[20]="Espacio Libre";
+ $TbMsg[21]="% Ocupado";
+ $TbMsg[22]="No hay conexion con el Repositorio";
+ $TbMsg[23]='Limitaciones Versi&oacute;n 1.5';
+ $TbMsg[24]='Eliminar Imagen es permitido si Repositorio y Servidor Web alojados en el mismo Servidor';
+ $TbMsg[25]='NO Creado';
+ $TbMsg[26]='Eliminar Objeto Imagen';
+ $TbMsg[27]='Tipo';
+ $TbMsg[28]='Vista Repositorio Completo';
+ $TbMsg[29]='Vista Unidad Organizativa';
+ $TbMsg[30]='Unidad Organizativa';
+ $TbMsg[31]='Archivo';
+ $TbMsg[32]='Directorio';
+?>
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/iniciarsesion_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/iniciarsesion_esp.php
index 45f2f152..e0ddaf0e 100644
--- a/admin/WebConsole/idiomas/php/esp/comandos/iniciarsesion_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/comandos/iniciarsesion_esp.php
@@ -1,10 +1,10 @@
-<?
+<?php
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: crearperfilsoftware_esp.php (Comandos)
+// Fichero de idiomas php: iniciarsesion_esp.php (Comandos)
// Idioma: Español
//________________________________________________________________________________________________________
- $TbMsg=array();
+ if (empty ($TbMsg)) $TbMsg=array();
$TbMsg[0]='Centros';
$TbMsg[1]='Grupo de aulas';
$TbMsg[2]='Aulas';
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/inventariohardware_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/inventariohardware_esp.php
index 8736e3d9..ee14ae66 100644
--- a/admin/WebConsole/idiomas/php/esp/comandos/inventariohardware_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/comandos/inventariohardware_esp.php
@@ -1,10 +1,10 @@
-<?
+<?php
//________________________________________________________________________________________________________
//
// Fichero de idiomas php: inventariohardware__esp.php (Comandos)
-// Idioma: Espa�l
+// Idioma: Español
//________________________________________________________________________________________________________
- $TbMsg=array();
+ if (empty ($TbMsg)) $TbMsg=array();
$TbMsg[0]='Centros';
$TbMsg[1]='Grupo de aulas';
$TbMsg[2]='Aulas';
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/inventariosoftware_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/inventariosoftware_esp.php
index 6bd5a009..b26bada7 100644
--- a/admin/WebConsole/idiomas/php/esp/comandos/inventariosoftware_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/comandos/inventariosoftware_esp.php
@@ -1,10 +1,10 @@
-<?
+<?php
//________________________________________________________________________________________________________
//
-// Fichero de idiomas php: inventariosoftware__esp.php (Comandos)
+// Fichero de idiomas php: inventariosoftware_esp.php (Comandos)
// Idioma: Español
//________________________________________________________________________________________________________
- $TbMsg=array();
+ if (empty ($TbMsg)) $TbMsg=array();
$TbMsg[0]='Centros';
$TbMsg[1]='Grupo de aulas';
$TbMsg[2]='Aulas';
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php
index 28c15adb..77ecd669 100644
--- a/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/comandos/mensajes_esp.php
@@ -1,4 +1,4 @@
-<?
+<?php
//________________________________________________________
//
// Fichero de idiomas php: comandos/mensajes_esp.php
@@ -7,14 +7,27 @@
if (empty ($TbMsg)) $TbMsg=Array();
$TbMsg["COMMAND_Apagar"]="Apagar";
$TbMsg["COMMAND_Arrancar"]="Arrancar";
-$TbMsg["COMMAND_Configurar"]="Configurar";
+$TbMsg["COMMAND_Configurar"]="Particionar y Formatear";
$TbMsg["COMMAND_CrearImagen"]="Crear Imagen";
$TbMsg["COMMAND_EjecutarScript"]="Ejecutar Script";
+$TbMsg["COMMAND_EliminarImagenCache"]="Eliminar Imagen Cache";
$TbMsg["COMMAND_IniciarSesion"]="Iniciar Sesi&oacute;n";
$TbMsg["COMMAND_InventarioHardware"]="Inventario Hardware";
$TbMsg["COMMAND_InventarioSoftware"]="Inventario Software";
$TbMsg["COMMAND_Reiniciar"]="Reiniciar";
$TbMsg["COMMAND_RestaurarImagen"]="Restaurar Imagen";
+$TbMsg["COMMAND_EliminarImagenCache"]="Eliminar Imagen de Cach&eacute;";
+$TbMsg["COMMAND_CrearImagenBasica"]="Crear Imagen B&aacute;sica";
+$TbMsg["COMMAND_RestaurarImagenBasica"]="Restaurar Imagen B&aacute;sica";
+$TbMsg["COMMAND_CrearSoftIncremental"]="Crear Imagen Incremental";
+$TbMsg["COMMAND_RestaurarSoftIncremental"]="Restaurar Imagen Incremental";
+
+$TbMsg["COMMAND_CreateBaseImage"]="Crear Imagen B&aacute;sica";
+$TbMsg["COMMAND_RestoreBaseImage"]="Restaurar Imagen B&aacute;sica";
+$TbMsg["COMMAND_CreateDiffImage"]="Crear Imagen Diferencial";
+$TbMsg["COMMAND_RestoreDiffImage"]="Restaurar Imagen Diferencial";
+
+
$TbMsg["WIZARD_Asistente Particionado"]="Asistente de particionado";
$TbMsg["WIZARD_Asistente Clonacion Particiones Remotas"]="Clonar particiones remotas";
$TbMsg["WIZARD_Asistente Deploy de Imagenes"]="Deploy de imagenes";
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/restaurarimagenbasica_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/restaurarimagenbasica_esp.php
new file mode 100644
index 00000000..0f07b09a
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/comandos/restaurarimagenbasica_esp.php
@@ -0,0 +1,53 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: restaurarimagenbasica_esp.php (Comandos)
+// Idioma: Español
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Centros';
+ $TbMsg[1]='Grupo de aulas';
+ $TbMsg[2]='Aulas';
+ $TbMsg[3]='Grupo de ordenadores';
+ $TbMsg[4]='Ordenadores';
+ $TbMsg[5]='Restaurar Imagen Básica <br> (experimental)';
+ $TbMsg[6]='Ámbito';
+ $TbMsg[7]='Datos a suministrar';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Repositorio';
+ $TbMsg[10]='Imagen';
+ $TbMsg[11]='Opciones Adicionales';
+ $TbMsg[12]='Desconocido';
+ $TbMsg[13]='Caché';
+ $TbMsg[14]='Ámbito';
+ $TbMsg[15]='Ordenadores';
+ $TbMsg[16]='Desde';
+ $TbMsg[17]='';
+ $TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:";
+ $TbMsg[19]="Datos a suministrar";
+ // Cabeceras de tabla de configuración
+ $TbMsg[20]='Partición';
+ $TbMsg[21]='S.O. Instalado';
+ $TbMsg[22]='Tamaño';
+ $TbMsg[23]='Datos de configuration';
+ $TbMsg[24]='Tipo';
+ $TbMsg[25]='Imagen';
+ $TbMsg[26]='Perfil Software';
+ $TbMsg[27]='S.F.';
+ $TbMsg[28]='Ninguno';
+ $TbMsg[29]='Desconocido';
+ // Desagrupamiento
+ $TbMsg[30]='Sistema de Ficheros';
+ $TbMsg[31]='Nombre del S.O.';
+ $TbMsg[32]='Tamaño de partición';
+ $TbMsg[33]='Nombre de la Imagen ';
+ $TbMsg[34]='Perfil software';
+ // OPciones adicionales
+ $TbMsg[35]='Borrar la Partición Previamente';
+ $TbMsg[36]='Copiar Imagen en cache';
+ $TbMsg[37]='Borrarla previamente de la cache';
+ $TbMsg[38]='No borrar archivos en destino';
+ $TbMsg[39]='Método';
+ $TbMsg[40]='Unicast';
+ $TbMsg[41]='Multicast';
+?>
diff --git a/admin/WebConsole/idiomas/php/esp/comandos/restaurarsoftincremental_esp.php b/admin/WebConsole/idiomas/php/esp/comandos/restaurarsoftincremental_esp.php
new file mode 100644
index 00000000..a0c26069
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/comandos/restaurarsoftincremental_esp.php
@@ -0,0 +1,51 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: restaurarsoftincremental_esp.php (Comandos)
+// Idioma: Español
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]='Centros';
+ $TbMsg[1]='Grupo de aulas';
+ $TbMsg[2]='Aulas';
+ $TbMsg[3]='Grupo de ordenadores';
+ $TbMsg[4]='Ordenadores';
+ $TbMsg[5]='Restaurar Software Incremental <br> (experimental)';
+ $TbMsg[6]='Ámbito';
+ $TbMsg[7]='Datos a suministrar';
+ $TbMsg[8]='Par';
+ $TbMsg[9]='Repositorio';
+ $TbMsg[10]='Imagen';
+ $TbMsg[11]='Opciones Adicionales';
+ $TbMsg[12]='Desconocido';
+ $TbMsg[13]='Caché';
+ $TbMsg[14]='Ámbito';
+ $TbMsg[15]='Ordenadores';
+ $TbMsg[16]='Desde';
+ $TbMsg[17]='';
+ $TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:";
+ $TbMsg[19]="Datos a suministrar";
+ // Cabeceras de tabla de configuración
+ $TbMsg[20]='Partición';
+ $TbMsg[21]='S.O. Instalado';
+ $TbMsg[22]='Tamaño';
+ $TbMsg[23]='Datos de configuration';
+ $TbMsg[24]='Tipo';
+ $TbMsg[25]='Imagen';
+ $TbMsg[26]='Perfil Software';
+ $TbMsg[27]='S.F.';
+ $TbMsg[28]='Ninguno';
+ $TbMsg[29]='Desconocido';
+ // Desagrupamiento
+ $TbMsg[30]='Sistema de Ficheros';
+ $TbMsg[31]='Nombre del S.O.';
+ $TbMsg[32]='Tamaño de partición';
+ $TbMsg[33]='Nombre de la Imagen ';
+ $TbMsg[34]='Perfil software';
+ // OPciones adicionales
+ $TbMsg[35]='Borrar la Partición Previamente';
+ $TbMsg[36]='Copiar Imagen en cache';
+ $TbMsg[37]='Borrarla previamente de la cache';
+ $TbMsg[38]='Software Incremental';
+ $TbMsg[39]='No borrar archivos en destino';
+?>
diff --git a/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php b/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php
index e464e32b..fe3ed192 100644
--- a/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php
@@ -4,7 +4,7 @@
// Fichero de idiomas php: configuraciones_esp.php
// Idioma: Español
//______________________________________________________
-$TbMsg=array();
+if (empty ($TbMsg)) $TbMsg=array();
$TbMsg[0]='Configuraciones';
$TbMsg[1]='&Aacute;mbito';
$TbMsg[2]="Aulas";
@@ -55,7 +55,7 @@ $TbMsg[41]='Generar Instrucci&oacute;n OG';
$TbMsg["CONFIG_PARTTABLE"]='Tabla de particiones';
$TbMsg[42]='Variable';
-$TbMsg[43]='Sin configuraci&oacute;n: cliente no conectado al servidor.';
+$TbMsg["CONFIG_NOCONFIG"]='Sin configuraci&oacute;n: cliente no conectado al servidor.';
$TbMsg[44]='Equipo sin perfil de hardware';
$TbMsg[45]='Agregue perfil para obtener datos';
$TbMsg[495]='Contenido cach&eacute;';
diff --git a/admin/WebConsole/idiomas/php/esp/imagenes_esp.php b/admin/WebConsole/idiomas/php/esp/imagenes_esp.php
index 076060b4..3abb5600 100644
--- a/admin/WebConsole/idiomas/php/esp/imagenes_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/imagenes_esp.php
@@ -16,4 +16,7 @@
$TbMsg[8]='"Eliminar Imagen"';
$TbMsg[9]='"Imágenes"';
$TbMsg[10]='"Gestión incrementales"';
+ $TbMsg[11]='"Imágenes Monolíticas"';
+ $TbMsg[12]='"Imágenes Básicas"';
+ $TbMsg[13]='"Imágenes Incrementales"';
?>
diff --git a/admin/WebConsole/idiomas/php/esp/informacion_imagenes_esp.php b/admin/WebConsole/idiomas/php/esp/informacion_imagenes_esp.php
index 365420b8..70bfe202 100644
--- a/admin/WebConsole/idiomas/php/esp/informacion_imagenes_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/informacion_imagenes_esp.php
@@ -4,15 +4,15 @@
// Fichero de idiomas php: informacion_imagenes_esp.php
// Idioma: Español
//________________________________________________________________________________________________________
- $TbMsg=array();
- $TbMsg[0]='Imágenes';
- $TbMsg[1]='Information sobre imagenes';
- $TbMsg[2]='Imagen';
- $TbMsg[3]='Información de la Imagen';
- $TbMsg[4]='Componentes software';
- $TbMsg[5]='Software incremental';
- $TbMsg[6]='Perfil Software';
- $TbMsg[7]='Ordenadores con esta imagen';
- $TbMsg[8]='Partición';
- $TbMsg[9]='Comentarios';
-?> \ No newline at end of file
+$TbMsg=array();
+$TbMsg[0]='Imágenes';
+$TbMsg[1]='Information sobre imagenes';
+$TbMsg[2]='Imagen';
+$TbMsg[3]='Información de la Imagen';
+$TbMsg[4]='Componentes software';
+$TbMsg[5]='Software incremental';
+$TbMsg[6]='Perfil Software';
+$TbMsg[7]='Ordenadores con esta imagen';
+$TbMsg[8]='Partición';
+$TbMsg[9]='Comentarios';
+?>
diff --git a/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php b/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php
index e38ebbb0..76ad742d 100644
--- a/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/msgbrowser_esp.php
@@ -32,7 +32,16 @@ $TbMsg=array();
$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.';
-
-
+ $TbMsg[25]='Creando Imagen Incremental, por favor espere...';
+ $TbMsg[26]='El proceso de creación de imagen incremental ha terminado correctamente';
+ $TbMsg[27]='ATENCIÓN, ha habido algún error en el proceso de creación de imagen incremental';
+ $TbMsg[28]='El proceso de creación de imagen básica ha terminado correctamente';
+ $TbMsg[29]='ATENCIÓN, ha habido algún error en el proceso de creación de imagen básica';
+ $TbMsg[30]='Creando Imagen Básica, por favor espere...';
+ $TbMsg[31]='Restaurando Imagen Básica, por favor espere...';
+ $TbMsg[32]='El proceso de restauración de imagen básica ha terminado correctamente';
+ $TbMsg[33]='ATENCIÓN, ha habido algún error en el proceso de restauración de imagen básica';
+ $TbMsg[34]='El proceso de restauración de imagen básica ha terminado correctamente';
+ $TbMsg[35]='ATENCIÓN, ha habido algún error en el proceso de restauración de imagen básica';
?>
diff --git a/admin/WebConsole/idiomas/php/esp/nada_esp.php b/admin/WebConsole/idiomas/php/esp/nada_esp.php
new file mode 100644
index 00000000..cbcdeb28
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/nada_esp.php
@@ -0,0 +1,16 @@
+<?
+//________________________________________________________________________________________________________
+//
+// Fichero de idiomas php: nada_esp.php
+// Idioma: Español
+//________________________________________________________________________________________________________
+ $TbMsg=array();
+ $TbMsg[0]="DISPOSITIVO UTILIZADO PARA ACCEDER A OPENGNSYS";
+ $TbMsg[1]="IP - Dispositivo";
+ $TbMsg[2]="Tipo - Dispositivo";
+ $TbMsg[3]="Sistema Operativo";
+ $TbMsg[4]="Versi&oacuten Sistema";
+ $TbMsg[5]="Navegador";
+ $TbMsg[6]="Versi&oacute;n Navegador";
+
+?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/esp/pintaParticiones_esp.php b/admin/WebConsole/idiomas/php/esp/pintaParticiones_esp.php
new file mode 100644
index 00000000..c50bf84d
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/pintaParticiones_esp.php
@@ -0,0 +1,50 @@
+<?php
+//______________________________________________________
+//
+// Fichero de idiomas php: pintaParticiones_esp.php
+// Idioma: Español
+//______________________________________________________
+// Si ya existe TbMsg, solo agregamos lo nuevo
+if(!isset($TbMsg)){
+ $TbMsg=array();
+}
+
+$TbMsg["PARTITION"]='Partici&oacute;n';
+$TbMsg["INST_SO"]='S.O. Instalado';
+$TbMsg["SIZE_KB"]='Tama&ntilde;o (KB)';
+$TbMsg["PARTITION_TYPE"]='Tipo';
+$TbMsg["IMAGE"]='Imagen';
+$TbMsg["SOFT_PROFILE"]='Perfil Software';
+$TbMsg["FILESYSTEM_SHORT"]='S.F.';
+
+$TbMsg["DISK"]='Disco';
+$TbMsg["CONFIG_PARTTABLE"]='Tabla de particiones';
+
+$TbMsg["VARIABLE"]='Variable';
+$TbMsg["CACHE_CONTENT"]='Contenido cach&eacute;';
+$TbMsg["CACHE_FREESPACE"]='Cach&eacute; libre';
+
+$TbMsg["SAMESYSTEM_IMAGE"]='Imagen (Mismo sistema)';
+$TbMsg["DIFFERENTSYSTEM_IMAGE"]='Imagen (Distinto sistema)';
+$TbMsg["RESTORE_METHOD"]='M&eacute;todo';
+
+$TbMsg["SO_NAME"]='Nombre S.O.';
+$TbMsg["IMAGE_TO_CREATE"]='Imagen a crear';
+$TbMsg["DESTINATION_REPOSITORY"]='Repositorio de destino';
+
+$TbMsg["IMAGE_REPOSITORY"]='Imagen / Repositorio';
+$TbMsg["INCREMENTAL_IMAGE_REPOSITORY"]='Imagen Incremental / Repositorio';
+
+$TbMsg["CONFIG_NOCONFIG"]='Sin configuraci&oacute;n: cliente no conectado al servidor.';
+$TbMsg["CONFIG_NODISK1MSDOS"]='Aviso: este comando solo trata el disco 1 con tabla de particiones MSDOS.';
+
+$TbMsg["SYNC_METHOD"]='Método';
+$TbMsg["SYNC1_DIR"]='Basada en directorio';
+$TbMsg["SYNC2_FILE"]='Basada en archivo';
+
+$TbMsg["TITLE_W"]='Opción de rsync: El algoritmo incremental rsync no se usa y se envía todo el archivo. Rsync lo usa por defecto cuando el origen y destino locales. ';
+$TbMsg["TITLE_E"]='Opción de rsync: Se compara el destino con el origen y se borran los ficheros que no existen en el primero.';
+$TbMsg["TITLE_C"]='Opción de rsync: Comprime los archivos de datos que se envían a la máquina de destino, lo que reduce la cantidad de datos que se transmiten. ';
+$TbMsg["SEND"]='Protocolo';
+?>
+
diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php
index 8327b7bc..2c5dfc87 100644
--- a/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/propiedades_aulas_esp.php
@@ -35,9 +35,17 @@ $TbMsg[26]="Modo P2P -semillero durante la descarga-";
$TbMsg[27]="Tiempo P2P -semillero despu&eacute;s de descarga-";
$TbMsg[28]="Direcci&oacute;n gateway del aula";
$TbMsg[29]="M&aacute;scara de red del aula";
+// UHU
+$TbMsg[30]="Validaci&oacute;n";
+$TbMsg[31]="P&aacute;gina login";
+$TbMsg[32]="P&aacute;gina validaci&oacute;n";
+// UHU
$TbMsg[495]="Contenido cach&eacute;";
$TbMsg[509]="Foto ordenador";
$TbMsg[5091]="Insertar foto";
-$TbMsg[5092]="Ver fotos";
+$TbMsg[5092]="Ver fotos";
+// Ramón
+$TbMsg['PROP_DNSIP']="IP Servidor DNS <em>(opcional)</em>";
+$TbMsg['PROP_PROXYURL']="URL Servidor Proxy <em>(opcional)</em>";
?>
diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_grupos_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_grupos_esp.php
index c2bf7247..1ac0bb97 100644
--- a/admin/WebConsole/idiomas/php/esp/propiedades_grupos_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/propiedades_grupos_esp.php
@@ -28,4 +28,7 @@ $TbMsg[19]="Grupos de Menús";
$TbMsg[20]="Grupos de Reservas";
$TbMsg[21]="Grupos de Entidades";
$TbMsg[22]="Grupos de Ordenadores";
+$TbMsg[23]="Grupos de Imágenes Monolíticas";
+$TbMsg[24]="Grupos de Imágenes Básicas";
+$TbMsg[25]="Grupos de Imágenes Incrementales";
?> \ No newline at end of file
diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_imagenes_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_imagenes_esp.php
index 965ef98a..57345240 100644
--- a/admin/WebConsole/idiomas/php/esp/propiedades_imagenes_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/propiedades_imagenes_esp.php
@@ -9,12 +9,20 @@ $TbMsg[0]="Sin Opción";
$TbMsg[1]="Insertar";
$TbMsg[2]="Modificar";
$TbMsg[3]="Eliminar";
-$TbMsg[4]="Gestión Imágenes";
-$TbMsg[5]="Nombre Imagen";
+$TbMsg[4]="Gestión Imágenes Monolíticas";
+$TbMsg[5]="Descripción";
$TbMsg[6]="Perfil Software";
$TbMsg[7]="Comentarios";
$TbMsg[8]="Partición";
$TbMsg[9]="Tipo partición";
$TbMsg[10]="Repositorio";
-$TbMsg[11]="Nombre canónico";
+$TbMsg[11]="Nombre";
+$TbMsg[12]="Gestión Imágenes Básicas";
+$TbMsg[13]="Gestión Imágenes Incrementales";
+$TbMsg[14]="Imagen básica";
+$TbMsg[15]="ATENCIÓN.- Una imagen que tiene perfil software indica que en algún momento se ha creado <br>
+ y por tanto no pueden modificarse ciertos datos a menos que la elimine y la vuelva a crear";
+$TbMsg[16]="Ruta Origen";
+$TbMsg[17]='"Nombre canónico fichero-imagen existe : Introduzca otro nombre"';
+$TbMsg[18]="Introduzca otro Nombre";
?>
diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php
index 5f7d68df..90bcc4d0 100644
--- a/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/propiedades_ordenadores_esp.php
@@ -20,6 +20,11 @@ $TbMsg[11]="Men&uacute;";
$TbMsg[12]="Tama&ntilde;o cach&eacute; (KB)";
$TbMsg[13]="Interfaz de red";
$TbMsg[14]="Driver de red";
+// UHU
+$TbMsg[15]="Validación";
+$TbMsg[16]="Pagina login";
+$TbMsg[17]="Pagina validación";
+// UHU
$TbMsg[509]="Foto ordenador";
$TbMsg[5091]="Insertar foto";
$TbMsg[5092]="Ver fotos";
diff --git a/admin/WebConsole/idiomas/php/esp/propiedades_repositorios_esp.php b/admin/WebConsole/idiomas/php/esp/propiedades_repositorios_esp.php
index 7c3223c4..2eae0b47 100644
--- a/admin/WebConsole/idiomas/php/esp/propiedades_repositorios_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/propiedades_repositorios_esp.php
@@ -16,4 +16,10 @@ $TbMsg[7]="Comentarios";
$TbMsg[8]="Puerto";
$TbMsg[9]="Directorio Base";
$TbMsg[10]="Directorio PXE";
+$TbMsg[11]="Espacio TOTAL";
+$TbMsg[12]="Espacio Ocupado";
+$TbMsg[13]="Espacio Libre";
+$TbMsg[14]="% Ocupado";
+$TbMsg[15]='Limitaciones de esta versi&oacute;n';
+$TbMsg[16]='Informaci&oacute;n de espacio solo disponible si Repositorio y Servidor Web est&aacute;n alojados en el mismo servidor';
?>
diff --git a/admin/WebConsole/idiomas/php/esp/repositorios_esp.php b/admin/WebConsole/idiomas/php/esp/repositorios_esp.php
index 481b0c03..0213214c 100644
--- a/admin/WebConsole/idiomas/php/esp/repositorios_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/repositorios_esp.php
@@ -15,7 +15,7 @@
$TbMsg[7]='"Propiedades"';
$TbMsg[8]='"Eliminar Repositorio"';
$TbMsg[9]='"Nuevo grupo de Repositorios"';
- $TbMsg[10]='';
+ $TbMsg[10]='"Eliminar Imagen Repositorio"';
$TbMsg[11]='';
$TbMsg[12]='"Repositorios"';
$TbMsg[13]='""';
diff --git a/admin/WebConsole/idiomas/php/esp/tiposhardwares_esp.php b/admin/WebConsole/idiomas/php/esp/tiposhardwares_esp.php
new file mode 100644
index 00000000..50d901bd
--- /dev/null
+++ b/admin/WebConsole/idiomas/php/esp/tiposhardwares_esp.php
@@ -0,0 +1,24 @@
+<?
+//________________________________________________________
+//
+// Fichero de idiomas php: tiposhardwares_esp.php
+// Idioma: Español
+//________________________________________________________
+if (empty ($TbMsg)) $TbMsg=Array();
+$TbMsg["HARDWARE_aud"]="Dispositivos de sonido";
+$TbMsg["HARDWARE_bio"]="Modelo y versi&oacute;n de la BIOS";
+$TbMsg["HARDWARE_boa"]="Placas";
+$TbMsg["HARDWARE_bus"]="Bus del sistema";
+$TbMsg["HARDWARE_cdr"]="Dispositivos &oacute;pticos CD/DVD";
+$TbMsg["HARDWARE_cpu"]="Procesadores";
+$TbMsg["HARDWARE_dis"]="Discos";
+$TbMsg["HARDWARE_fir"]="Controladores FireWire";
+$TbMsg["HARDWARE_ide"]="Controladores IDE";
+$TbMsg["HARDWARE_mem"]="Memorias";
+$TbMsg["HARDWARE_mod"]="Marca y modelo del equipo";
+$TbMsg["HARDWARE_mul"]="Dispositivos Multimedia";
+$TbMsg["HARDWARE_net"]="Tarjetas de red";
+$TbMsg["HARDWARE_usb"]="Controladores USB";
+$TbMsg["HARDWARE_vga"]="Tarjetas gr&aacute;ficas";
+?>
+
diff --git a/admin/WebConsole/images/acercade.png b/admin/WebConsole/images/acercade.png
new file mode 100644
index 00000000..15017e44
--- /dev/null
+++ b/admin/WebConsole/images/acercade.png
Binary files differ
diff --git a/admin/WebConsole/images/gplv3-88x31.png b/admin/WebConsole/images/gplv3-88x31.png
new file mode 100644
index 00000000..b06e0439
--- /dev/null
+++ b/admin/WebConsole/images/gplv3-88x31.png
Binary files differ
diff --git a/admin/WebConsole/images/login_cat.jpg b/admin/WebConsole/images/login_cat.jpg
new file mode 100644
index 00000000..e9be8e20
--- /dev/null
+++ b/admin/WebConsole/images/login_cat.jpg
Binary files differ
diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php
index 16633f88..bf5b1e6a 100644
--- a/admin/WebConsole/includes/ConfiguracionesParticiones.php
+++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php
@@ -1,31 +1,37 @@
<?php
+include_once("pintaParticiones.php");
+
/*________________________________________________________________________________________________________
- La clave de configuración está formada por una serie de valores separados por ";"
- Ejemplo:1;7;30000000;3;3;0;11
+ UHU - 2013/05/14 - Se añade la clave número de disco
+ La clave de configuración está formada por una serie de valores separados por ";"
+
+ Ejemplo:1;1;7;30000000;3;3;0;11
Parámetros:
- 1) Número de partición
- 2) Código de la partición
- 3) Tamaño
- 4) Identificador del sistema de ficheros instalado en la partición
- 5) Identificador del nombre del sistema operativo instalado en la partición
- 6) Identificador de la imagen restaurada en la partición
- 7) Identificador del perfil software que contiene el S.O. instalado en la partición
+ 1) Número de disco
+ 2) Número de partición
+ 3) Código de la partición
+ 4) Tamaño
+ 5) Identificador del sistema de ficheros instalado en la partición
+ 6) Identificador del nombre del sistema operativo instalado en la partición
+ 7) Identificador de la imagen restaurada en la partición
+ 8) Identificador del perfil software que contiene el S.O. instalado en la partición
Además de este campo, la consulta almacena la descripción de los identificadores que forman parte
de esta clave compuesta de manera que el tiempo de acceso para recuperlarlos sean corto
ya que están en memoria y no en tablas.
En el ejempo anterior podríamos tener datos
- 1 NTFS 30000000 Windows NTFS Windows XP profesional NULL Perfil Software (CUR-8, Part:1)
+ 1 1 NTFS 30000000 Windows NTFS Windows XP profesional NULL Perfil Software (CUR-8, Part:1)
Que indica:
- 1) Número de partición
- 2) Código de la partición
- 3) Tamaño
- 4) Descripción del sistema de ficheros instalado en la partición
- 5) Descripción del nombre del sistema operativo instalado en la partición
- 6) Descripción de la imagen restaurada en la partición
- 7) Descripción del perfil software que contiene el S.O. instalado en la partición
+ 1) Número de disco
+ 2) Número de partición
+ 3) Código de la partición
+ 4) Tamaño
+ 5) Descripción del sistema de ficheros instalado en la partición
+ 6) Descripción del nombre del sistema operativo instalado en la partición
+ 7) Descripción de la imagen restaurada en la partición
+ 8) Descripción del perfil software que contiene el S.O. instalado en la partición
Estos datos se guardan en la misma tabla de claves que será una matriz asociativa.
@@ -59,7 +65,7 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
global $msk_perfil;
global $msk_cache;
- $cmd->texto="SELECT CONCAT_WS( ';', ordenadores_particiones.numpar, ";
+ $cmd->texto="SELECT CONCAT_WS( ';',ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ";
if($sws & $msk_tamano)
$cmd->texto.=" ordenadores_particiones.tamano,";
@@ -79,27 +85,27 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
if($sws & $msk_cache)
$cmd->texto.=" ordenadores_particiones.cache, ";
- $cmd->texto.=" ordenadores_particiones.codpar) as configuracion,
+ $cmd->texto.=" ordenadores_particiones.codpar) AS configuracion,
ordenadores_particiones.numdisk,
ordenadores_particiones.numpar ,
ordenadores_particiones.codpar ,
- tipospar.tipopar,
+ IFNULL (tipospar.tipopar, ordenadores_particiones.codpar) AS tipopar,
tipospar.clonable,
ordenadores_particiones.tamano,
- sistemasficheros.descripcion as sistemafichero,
+ sistemasficheros.descripcion AS sistemafichero,
ordenadores_particiones.idnombreso,
nombresos.nombreso,
imagenes.idimagen,
- imagenes.descripcion as imagen,
- imagenes.nombreca as nombreca,
- imagenes.idrepositorio as repositorio,
+ imagenes.descripcion AS imagen,
+ imagenes.nombreca AS nombreca,
+ imagenes.idrepositorio AS repositorio,
ordenadores_particiones.idperfilsoft,
- perfilessoft.descripcion as perfilsoft
+ perfilessoft.descripcion AS perfilsoft
FROM ordenadores
INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
- INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
+ LEFT OUTER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen
LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero";
@@ -116,11 +122,13 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
case $AMBITO_ORDENADORES :
$cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
- }
+ }
+
if($swr) // Si se trata de restauración no se tiene en cuenta las partciones no clonables
- $cmd->texto.=" AND tipospar.clonable=1 ";
+ $cmd->texto.=" AND tipospar.clonable=1 AND ordenadores_particiones.numpar>0 ";
$cmd->texto.=" GROUP by configuracion";
+
//echo "carga claves:".$cmd->texto;
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -153,6 +161,8 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
$rs->Cerrar();
}
/*________________________________________________________________________________________________________
+ UHU - 2013/05/14 - Se añade la clave número de disco
+ UHU - 2013/06/06 - Se añade un return de las configuraciones detectadas
Dibuja la tabla de configuración de las particiones de un grupo de ordenadores
Parámetros de la función:
@@ -167,7 +177,7 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
configuración de los ordenadores o la pantalla de los comandos "Configurar" o "RestaurarImagen"
para permitir introducir los datos necesarios.
________________________________________________________________________________________________________*/
-function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr)
+function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr,$pintaParticionesFunction="pintaParticiones")
{
global $AMBITO_AULAS;
global $AMBITO_GRUPOSORDENADORES;
@@ -194,9 +204,9 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr)
FROM (SELECT
temp1.idordenador AS idordenador,
GROUP_CONCAT(CAST( temp1.configuracion AS CHAR(250) ) ORDER BY temp1.configuracion SEPARATOR '@' ) AS configuraciones
- FROM (SELECT ordenadores_particiones.idordenador,
+ FROM (SELECT ordenadores_particiones.idordenador,ordenadores_particiones.numdisk,
ordenadores_particiones.numpar,
- concat_WS( ';',
+ concat_WS( ';', ordenadores_particiones.numdisk,
ordenadores_particiones.numpar, ";
if($sws & $msk_tamano)
@@ -208,6 +218,7 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr)
if($sws & $msk_nombreSO)
$cmd->texto.=" ordenadores_particiones.idnombreso, ";
+
if($sws & $msk_imagen)
$cmd->texto.=" ordenadores_particiones.idimagen, ";
@@ -221,7 +232,7 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr)
FROM ordenadores
INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
- INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
+ LEFT JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen
LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero";
@@ -231,43 +242,46 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr)
$cmd->texto.=" INNER JOIN aulas ON aulas.idaula = ordenadores.idaula WHERE aulas.idaula =".$idambito;
break;
case $AMBITO_GRUPOSORDENADORES :
- $cmd->texto.=" INNER JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid WHERE gruposordenadores.idgrupo =".$idambito;
+ $cmd->texto.=" INNER JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid WHERE gruposordenadores.idgrupo =".$idambito;
break;
case $AMBITO_ORDENADORES :
$cmd->texto.=" WHERE ordenadores.idordenador=".$idambito;
break;
- }
+ }
+
if ($swr) // Si se trata de restauración no se tiene en cuenta las particiones no clonables
- $cmd->texto.=" AND tipospar.clonable=1 ";
-
- $cmd->texto.=" ORDER BY ordenadores_particiones.idordenador, ordenadores_particiones.numpar) AS temp1
+ $cmd->texto.=" AND tipospar.clonable=1 AND ordenadores_particiones.numpar>0";
+
+ $cmd->texto.=" ORDER BY ordenadores_particiones.idordenador, ordenadores_particiones.numdisk, ordenadores_particiones.numpar) AS temp1
GROUP BY temp1.idordenador) AS temp2
GROUP BY temp2.configuraciones
ORDER BY con desc,idordenadores";
-
- //echo $cmd->texto;
+
$rs=new Recordset;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return; // Error al abrir recordset
$rs->Primero();
$cc=0; // Contador de configuraciones
- echo '<table id="tabla_conf" width="95%" class="tabla_listados_sin" align=center border=0 cellPadding=0 cellSpacing=1>';
+ $configuraciones = array();
+ echo '<table id="tabla_conf" width="95%" class="tabla_listados_sin" align="center" border="0" cellpadding="0" cellspacing="1">';
while (!$rs->EOF){
$cc++;
//Muestra ordenadores
- echo '<tr><td colspan='.$colums.' style="background-color: #ffffff;">';
+ echo '<tr><td colspan="'.$colums.'" style="background-color: #ffffff;">';
echo pintaOrdenadores($cmd,$rs->campos["idordenadores"],10,$cc);
echo '</td></tr>';
//Muestra particiones y configuración
-
- echo pintaParticiones($cmd,$rs->campos["configuraciones"],$rs->campos["idordenadores"],$cc,$ambito,$idambito);
+ $configuraciones[$cc-1] = $rs->campos["configuraciones"];
+ echo $pintaParticionesFunction($cmd,$rs->campos["configuraciones"],$rs->campos["idordenadores"],$cc,$ambito,$idambito);
$rs->Siguiente();
}
if ($cc == 0) {
- echo '<tr><th>'.$TbMsg[43].'</th><tr>'; // Cliente sin configuración.
- }
+ echo '<tr><th>'.$TbMsg["CONFIG_NOCONFIG"].'</th><tr>'; // Cliente sin configuración.
+ }
echo "</table>";
$rs->Cerrar();
+
+ return $configuraciones;
}
//________________________________________________________________________________________________________
// Descripción:
@@ -306,6 +320,7 @@ function pintaOrdenadores($cmd,$idordenadores,$maxcontor,$cc)
/*________________________________________________________________________________________________________
Selecciona los ordenadores que tienen el mismo sistema de ficheros del ámbito elegido
+ UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
________________________________________________________________________________________________________*/
function cargaSistemasFicheros($cmd,$idambito,$ambito)
{
@@ -317,6 +332,7 @@ function cargaSistemasFicheros($cmd,$idambito,$ambito)
$cmd->texto="SELECT COUNT(*) AS con,
ordenadores_particiones.idsistemafichero,
+ ordenadores_particiones.numdisk,
ordenadores_particiones.numpar,
sistemasficheros.descripcion AS sistemafichero,
GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
@@ -338,8 +354,8 @@ function cargaSistemasFicheros($cmd,$idambito,$ambito)
$cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
}
- $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.idsistemafichero";
- //echo "carga sistemas de ficheros:".$cmd->texto;
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idsistemafichero";
+
$rs=new Recordset;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return; // Error al abrir recordset
@@ -348,6 +364,7 @@ function cargaSistemasFicheros($cmd,$idambito,$ambito)
//echo $cmd->texto;
while (!$rs->EOF){
$tbSysFi[$idx]["idsistemafichero"]=$rs->campos["idsistemafichero"];
+ $tbSysFi[$idx]["numdisk"]=$rs->campos["numdisk"];
$tbSysFi[$idx]["numpar"]=$rs->campos["numpar"];
$tbSysFi[$idx]["sistemafichero"]=$rs->campos["sistemafichero"];
$tbSysFi[$idx]["ordenadores"]=$rs->campos["ordenadores"];
@@ -360,14 +377,16 @@ function cargaSistemasFicheros($cmd,$idambito,$ambito)
/*________________________________________________________________________________________________________
Toma sistema de ficheros común a los ordenadores pasados como parámetros
+ UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
+
________________________________________________________________________________________________________*/
-function tomaSistemasFicheros($numpar,$ordenadores,$sw=false)
+function tomaSistemasFicheros($numpar,$ordenadores,$sw=false,$numdisk = 1)
{
global $tbSysFi; // Tabla contenedora de ordenadores incluidos en la consulta
global $conSysFi; // Contador de elementos anteriores
for ($k=0; $k<$conSysFi; $k++){
- if ($tbSysFi[$k]["numpar"] == $numpar){
+ if ($tbSysFi[$k]["numdisk"] == $numdisk && $tbSysFi[$k]["numpar"] == $numpar) {
//$pos = strpos($tbSysFi[$k]["ordenadores"], $ordenadores);
//if ($pos !== false) { // Cadena encontrada
$pcs = explode (",", $ordenadores);
@@ -385,6 +404,7 @@ function tomaSistemasFicheros($numpar,$ordenadores,$sw=false)
/*________________________________________________________________________________________________________
Selecciona los ordenadores que tienen el mismo perfil software en la misma partición
+ UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
________________________________________________________________________________________________________*/
function cargaPerfiles($cmd,$idambito,$ambito)
{
@@ -396,6 +416,7 @@ function cargaPerfiles($cmd,$idambito,$ambito)
$cmd->texto="SELECT count(*) AS con,
ordenadores_particiones.idperfilsoft,
+ ordenadores_particiones.numdisk,
ordenadores_particiones.numpar,
perfilessoft.descripcion AS perfilsoft,
GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
@@ -417,7 +438,7 @@ function cargaPerfiles($cmd,$idambito,$ambito)
$cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
}
- $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.idperfilsoft";
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idperfilsoft";
//echo "carga perfiles:".$cmd->texto;
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -427,6 +448,7 @@ function cargaPerfiles($cmd,$idambito,$ambito)
while (!$rs->EOF){
$tbPerfil[$idx]["idperfilsoft"]=$rs->campos["idperfilsoft"];
$tbPerfil[$idx]["perfilsoft"]=$rs->campos["perfilsoft"];
+ $tbPerfil[$idx]["numdisk"]=$rs->campos["numdisk"];
$tbPerfil[$idx]["numpar"]=$rs->campos["numpar"];
$tbPerfil[$idx]["ordenadores"]=$rs->campos["ordenadores"];
$idx++;
@@ -438,8 +460,9 @@ function cargaPerfiles($cmd,$idambito,$ambito)
/*________________________________________________________________________________________________________
Toma perfilsoft común a los ordenadores pasados como parámetros
+ UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
________________________________________________________________________________________________________*/
-function tomaPerfiles($numpar,$ordenadores)
+function tomaPerfiles($numpar,$ordenadores,$numdisk = 1)
{
global $tbPerfil; // Tabla contenedora de ordenadores incluidos en la consulta
global $conPerfil; // Contador de elementos anteriores
@@ -448,7 +471,7 @@ function tomaPerfiles($numpar,$ordenadores)
//$pos = strpos($tbPerfil[$k]["ordenadores"], $ordenadores);
//if ($pos !== false) { // Cadena encontrada
//if($tbPerfil[$k]["numpar"]==$numpar)
- if ($tbPerfil[$k]["numpar"] == $numpar) {
+ if ($tbPerfil[$k]["numdisk"] == $numdisk && $tbPerfil[$k]["numpar"] == $numpar) {
$pcs = explode (",", $ordenadores);
$intersec = array_intersect (explode(",", $tbPerfil[$k]["ordenadores"]), $pcs);
if (array_diff ($pcs, $intersec) == NULL) {
@@ -460,6 +483,7 @@ function tomaPerfiles($numpar,$ordenadores)
/*________________________________________________________________________________________________________
Selecciona los ordenadores que tienen la misma imagen en la misma partición
+ UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
________________________________________________________________________________________________________*/
function cargaImagenes($cmd,$idambito,$ambito)
{
@@ -471,6 +495,7 @@ function cargaImagenes($cmd,$idambito,$ambito)
$cmd->texto="SELECT count(*) as con,
ordenadores_particiones.idimagen,
+ ordenadores_particiones.numdisk,
ordenadores_particiones.numpar,
imagenes.descripcion as imagen,
GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
@@ -492,7 +517,7 @@ function cargaImagenes($cmd,$idambito,$ambito)
$cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
}
- $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.idimagen";
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idimagen";
//echo "carga imagenes:".$cmd->texto;
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -502,6 +527,7 @@ function cargaImagenes($cmd,$idambito,$ambito)
while (!$rs->EOF){
$tbImg[$idx]["idimagen"]=$rs->campos["idimagen"];
$tbImg[$idx]["imagen"]=$rs->campos["imagen"];
+ $tbImg[$idx]["numdisk"]=$rs->campos["numdisk"];
$tbImg[$idx]["numpar"]=$rs->campos["numpar"];
$tbImg[$idx]["ordenadores"]=$rs->campos["ordenadores"];
$idx++;
@@ -513,8 +539,9 @@ function cargaImagenes($cmd,$idambito,$ambito)
/*________________________________________________________________________________________________________
Toma sistema operativo común a los ordenadores pasados como parámetros
+ UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
________________________________________________________________________________________________________*/
-function tomaImagenes($numpar,$ordenadores)
+function tomaImagenes($numpar,$ordenadores, $numdisk = 1)
{
global $tbImg; // Tabla contenedora de ordenadores incluidos en la consulta
global $conImg; // Contador de elementos anteriores
@@ -523,7 +550,7 @@ function tomaImagenes($numpar,$ordenadores)
//$pos = strpos($tbImg[$k]["ordenadores"], $ordenadores);
//if ($pos !== false) { // Cadena encontrada
//if($tbImg[$k]["numpar"]==$numpar){
- if ($tbImg[$k]["numpar"] == $numpar) {
+ if ($tbImg[$k]["numdisk"] == $numdisk && $tbImg[$k]["numpar"] == $numpar) {
$pcs = explode (",", $ordenadores);
$intersec = array_intersect (explode(",", $tbImg[$k]["ordenadores"]), $pcs);
if (array_diff ($pcs, $intersec) == NULL) {
@@ -535,6 +562,7 @@ function tomaImagenes($numpar,$ordenadores)
/*________________________________________________________________________________________________________
Selecciona los ordenadores que tienen el mismo sistema de ficheros en la misma partición
+ UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
________________________________________________________________________________________________________*/
function cargaNombresSO($cmd,$idambito,$ambito)
{
@@ -546,7 +574,7 @@ function cargaNombresSO($cmd,$idambito,$ambito)
$cmd->texto="SELECT COUNT(*) AS con,
ordenadores_particiones.idnombreso,
- ordenadores_particiones.numpar,nombresos.nombreso,
+ ordenadores_particiones.numdisk,ordenadores_particiones.numpar,nombresos.nombreso,
GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
FROM ordenadores
@@ -566,7 +594,7 @@ function cargaNombresSO($cmd,$idambito,$ambito)
$cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
}
- $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.idnombreso";
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idnombreso";
//echo "carga nombresos:".$cmd->texto;
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -576,6 +604,7 @@ function cargaNombresSO($cmd,$idambito,$ambito)
while (!$rs->EOF){
$tbSO[$idx]["idnombreso"]=$rs->campos["idnombreso"];
$tbSO[$idx]["nombreso"]=$rs->campos["nombreso"];
+ $tbSO[$idx]["numdisk"]=$rs->campos["numdisk"];
$tbSO[$idx]["numpar"]=$rs->campos["numpar"];
$tbSO[$idx]["ordenadores"]=$rs->campos["ordenadores"];
$idx++;
@@ -587,14 +616,15 @@ function cargaNombresSO($cmd,$idambito,$ambito)
/*________________________________________________________________________________________________________
Toma sistema operativo común a los ordenadores pasados como parámetros
+ UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
________________________________________________________________________________________________________*/
-function tomaNombresSO($numpar,$ordenadores)
+function tomaNombresSO($numpar,$ordenadores,$numdisk = 1)
{
global $tbSO; // Tabla contenedora de ordenadores incluidos en la consulta
global $conSO; // Contador de elementos anteriores
for($k=0; $k<$conSO; $k++) {
- if ($tbSO[$k]["numpar"]==$numpar) {
+ if ($tbSO[$k]["numdisk"] == $numdisk && $tbSO[$k]["numpar"] == $numpar) {
//$pos = strpos($tbSO[$k]["ordenadores"], $ordenadores);
//if ($pos !== false) { // Cadena encontrada
$pcs = explode (",", $ordenadores);
@@ -608,6 +638,7 @@ function tomaNombresSO($numpar,$ordenadores)
/*________________________________________________________________________________________________________
Selecciona los ordenadores que tienen el mismo tamaño para la misma partición
+ UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
________________________________________________________________________________________________________*/
function cargaTamano($cmd,$idambito,$ambito)
{
@@ -619,6 +650,7 @@ function cargaTamano($cmd,$idambito,$ambito)
$cmd->texto="SELECT COUNT(*) AS con,
ordenadores_particiones.tamano,
+ ordenadores_particiones.numdisk,
ordenadores_particiones.numpar,
GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
@@ -638,7 +670,7 @@ function cargaTamano($cmd,$idambito,$ambito)
$cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
}
- $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.tamano";
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.tamano";
//echo "carga tamaños:".$cmd->texto;
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -647,6 +679,7 @@ function cargaTamano($cmd,$idambito,$ambito)
$idx=0;
while (!$rs->EOF){
$tbTam[$idx]["tamano"]=$rs->campos["tamano"];
+ $tbTam[$idx]["numdisk"]=$rs->campos["numdisk"];
$tbTam[$idx]["numpar"]=$rs->campos["numpar"];
$tbTam[$idx]["ordenadores"]=$rs->campos["ordenadores"];
$idx++;
@@ -658,14 +691,15 @@ function cargaTamano($cmd,$idambito,$ambito)
/*________________________________________________________________________________________________________
Toma tamaño de partición común a los ordenadores pasados como parámetros
+ UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
________________________________________________________________________________________________________*/
-function tomaTamano($numpar,$ordenadores)
+function tomaTamano($numpar,$ordenadores,$numdisk = 1)
{
global $tbTam; // Tabla contenedora de ordenadores incluidos en la consulta
global $conTam; // Contador de elementos anteriores
for ($k=0; $k<$conTam; $k++) {
- if ($tbTam[$k]["numpar"] == $numpar) {
+ if ($tbTam[$k]["numdisk"] == $numdisk && $tbTam[$k]["numpar"] == $numpar) {
// $pos = strpos ($tbTam[$k]["ordenadores"], $ordenadores);
// if ($pos !== FALSE) { // Cadena encontrada
$pcs = explode (",", $ordenadores);
@@ -679,6 +713,7 @@ function tomaTamano($numpar,$ordenadores)
/*________________________________________________________________________________________________________
Selecciona los ordenadores que tienen el mismo Contenido de Cache para la misma partición
+ UHU 2013/05/17 - Ahora se carga también el numero de disco en la consulta
________________________________________________________________________________________________________*/
function cargaCache($cmd,$idambito,$ambito)
{
@@ -690,7 +725,8 @@ function cargaCache($cmd,$idambito,$ambito)
$cmd->texto="SELECT COUNT(*) AS con,
ordenadores_particiones.cache,
- ordenadores_particiones.numpar,
+ ordenadores_particiones.numdisk,
+ ordenadores_particiones.numpar,
GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
FROM ordenadores
@@ -709,7 +745,7 @@ function cargaCache($cmd,$idambito,$ambito)
$cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
}
- $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.cache";
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.cache";
$rs=new Recordset;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return; // Error al abrir recordset
@@ -717,6 +753,7 @@ function cargaCache($cmd,$idambito,$ambito)
$idx=0;
while (!$rs->EOF){
$tbCac[$idx]["cache"]=$rs->campos["cache"];
+ $tbCac[$idx]["numdisk"]=$rs->campos["numdisk"];
$tbCac[$idx]["numpar"]=$rs->campos["numpar"];
$tbCac[$idx]["ordenadores"]=$rs->campos["ordenadores"];
$idx++;
@@ -728,14 +765,15 @@ function cargaCache($cmd,$idambito,$ambito)
/*________________________________________________________________________________________________________
Toma tamaño de partición común a los ordenadores pasados como parámetros
+ UHU 2013/05/17 - Ahora se tienen en cuenta el disco, sino se le pasa ningun parametro, se asigna 1
________________________________________________________________________________________________________*/
-function tomaCache($numpar,$ordenadores)
+function tomaCache($numpar,$ordenadores,$numdisk = 1)
{
global $tbCac; // Tabla contenedora de ordenadores incluidos en la consulta
global $conCac; // Contador de elementos anteriores
for ($k=0; $k<$conCac; $k++) {
- if ($tbCac[$k]["numpar"] == $numpar) {
+ if ($tbCac[$k]["numdisk"] == $numdisk && $tbCac[$k]["numpar"] == $numpar) {
$pcs = explode (",", $ordenadores);
$intersec = array_intersect (explode(",", $tbCac[$k]["ordenadores"]), $pcs);
if (array_diff ($pcs, $intersec) == NULL) {
diff --git a/admin/WebConsole/includes/CreaTablaParametros.php b/admin/WebConsole/includes/CreaTablaParametros.php
index 53757345..454da864 100644
--- a/admin/WebConsole/includes/CreaTablaParametros.php
+++ b/admin/WebConsole/includes/CreaTablaParametros.php
@@ -20,6 +20,7 @@ function CreaTablaParametros($cmd,$tabla_parametros,$cont_parametros){
$rs->Primero();
$cont=0;
while (!$rs->EOF){
+echo "<br>".$rs->campos["nemonico"];
$auxtabla_parametros="";
$auxtabla_parametros["nemonico"]=$rs->campos["nemonico"];
$auxtabla_parametros["descripcion"]=$rs->campos["descripcion"];
@@ -47,4 +48,4 @@ function CreaTablaParametros($cmd,$tabla_parametros,$cont_parametros){
}
$cont_parametros=$cont;
}
-?>
+?>
diff --git a/admin/WebConsole/includes/HTMLCTESELECT.php b/admin/WebConsole/includes/HTMLCTESELECT.php
index 93719426..31f59385 100644
--- a/admin/WebConsole/includes/HTMLCTESELECT.php
+++ b/admin/WebConsole/includes/HTMLCTESELECT.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon.
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -23,9 +23,13 @@ function HTMLCTESELECT($parametros,$nombreid,$clase,$defaultlit,$valorselec,$anc
if (!empty($defaultlit)) $SelectHtml.= '<option value="0">'.$defaultlit.'</option>';
for($i=0;$i<sizeof($opciones);$i++){
$item=split("=",$opciones[$i]);
- $SelectHtml.= '<option value="'.$item[0].'"';
- if($valorselec==$item[0]) $SelectHtml.=" selected ";
- $SelectHtml.= '>'.$item[1].'</option>';
+ // Comprobar formato de línea: "nombre=valor".
+ if (! empty ($item[1])) {
+ $SelectHtml.= '<option value="'.$item[0].'"';
+ if($valorselec==$item[0])
+ $SelectHtml.=" selected ";
+ $SelectHtml.= '>'.$item[1].'</option>';
+ }
}
$SelectHtml.= '</select>';
return($SelectHtml);
diff --git a/admin/WebConsole/includes/HTMLSELECT.php b/admin/WebConsole/includes/HTMLSELECT.php
index 5db2e45b..76433d08 100644
--- a/admin/WebConsole/includes/HTMLSELECT.php
+++ b/admin/WebConsole/includes/HTMLSELECT.php
@@ -19,12 +19,13 @@
// - clase: Clase que define su estilo (por defecto: formulariodatos)
// - clausulawhere: Clausula Where adicional
// *************************************************************************************************************************************************
-function HTMLSELECT($cmd,$idcentro,$nombretabla,$identificador,$nombreid,$nombreliteral,$ancho,$eventochg = "",$clase="",$clausulawhere=""){
+function HTMLSELECT($cmd,$idcentro,$nombretabla,$identificador,$nombreid,$nombreliteral,$ancho,$eventochg = "",$clase="",$clausulawhere="",$nwname=""){
$nombretabla=htmlentities($nombretabla);
$nombreid=htmlentities($nombreid);
$nombreliteral=htmlentities($nombreliteral);
if (!empty($eventochg)) $eventochg='onchange="'.$eventochg.'(this);"';
if (empty($clase)) $clase='formulariodatos';
+ if (empty($nwname)) $nwname=$nombreid;
$SelectHtml="";
$rs=new Recordset;
if ($idcentro>0){
@@ -41,7 +42,7 @@ function HTMLSELECT($cmd,$idcentro,$nombretabla,$identificador,$nombreid,$nombre
//echo "<br>".$cmd->texto;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return(""); // Error al abrir recordset
- $SelectHtml.= '<SELECT '.$eventochg.' class="'.$clase.'" name="'.$nombreid.'" style="WIDTH: '.$ancho.'">';
+ $SelectHtml.= '<SELECT '.$eventochg.' class="'.$clase.'" name="'.$nwname.'" style="WIDTH: '.$ancho.'">';
$SelectHtml.= ' <OPTION value="0"></OPTION>';
$rs->Primero();
while (!$rs->EOF){
diff --git a/admin/WebConsole/includes/comunes.php b/admin/WebConsole/includes/comunes.php
index e3e89700..35e53697 100644
--- a/admin/WebConsole/includes/comunes.php
+++ b/admin/WebConsole/includes/comunes.php
@@ -182,7 +182,11 @@
break;
case 4: // El valor lo toma directamente pero está codificado con urlencode
$tbParametrosValor[$nemonico]["valor"]='<PRE>'.urldecode($valor).'</PRE>';
-
+ break;
+ case 5: // El valor es 0 ó 1 y se muestra NO o SI
+ $tbSN[0]="No";
+ $tbSN[1]="Si";
+ $tbParametrosValor[$nemonico]["valor"]=$tbSN[$valor];
}
}
}
@@ -240,8 +244,8 @@
for($i=$len-1;$i>=0;$i--){
$cadenafinal=substr($cadena,$i,1).$cadenafinal;
if($m%3==0 && $i>0){
- $cadenafinal=".".$cadenafinal;
- $m=0;
+ $cadenafinal=".".$cadenafinal;
+ $m=0;
}
$m++;
}
@@ -251,7 +255,7 @@
Devuelve la url de la imagen y la descripción de un ámbito
Parametros:
- ambito: Identificador del ambito
- - urlimg: Por referencia. Es donde se devuelve la url de la imagen
+ - urlimg: Por referencia. Es donde se devuelve la url de la imagen
- textambito: Por referencia. Es donde se devuelve la descripción
Devuelve:
@@ -296,7 +300,7 @@
Devuelve la descripción de un ambito
Parametros:
- - cmd: Objeto comando (Operativo)
+ - cmd: Objeto comando (Operativo)
- ambito: tipo de ambito
- idambito: Identificador del ambito
- textambito: Por referencia. Es donde se devuelve la descripción
@@ -305,7 +309,7 @@
- Los dos parámetros pasados por referencia
________________________________________________________________________*/
- function tomaDescriAmbito($cmd,$ambito,$idambito,&$textambito)
+ function tomaDescriAmbito($cmd,$ambito,$idambito,$textambito)
{
global $AMBITO_CENTROS;
global $AMBITO_GRUPOSAULAS;
@@ -313,29 +317,29 @@
global $AMBITO_GRUPOSORDENADORES;
global $AMBITO_ORDENADORES;
- switch($ambito){
- case $AMBITO_CENTROS :
- $textambito=TomaDato($cmd,0,'centros',$idambito,'idcentro','nombrecentro');
- break;
- case $AMBITO_GRUPOSAULAS :
- $textambito=TomaDato($cmd,0,'grupos',$idambito,'idgrupo','nombregrupo');
- break;
- case $AMBITO_AULAS :
- $textambito=TomaDato($cmd,0,'aulas',$idambito,'idaula','nombreaula');
- break;
- case $AMBITO_GRUPOSORDENADORES :
- $textambito=TomaDato($cmd,0,'gruposordenadores',$idambito,'idgrupo','nombregrupoordenador');
- break;
- case $AMBITO_ORDENADORES :
- $textambito=TomaDato($cmd,0,'ordenadores',$idambito,'idordenador','nombreordenador');
- break;
- default:
- $textambito;
- }
+ switch($ambito){
+ case $AMBITO_CENTROS :
+ $textambito=TomaDato($cmd,0,'centros',$idambito,'idcentro','nombrecentro');
+ break;
+ case $AMBITO_GRUPOSAULAS :
+ $textambito=TomaDato($cmd,0,'grupos',$idambito,'idgrupo','nombregrupo');
+ break;
+ case $AMBITO_AULAS :
+ $textambito=TomaDato($cmd,0,'aulas',$idambito,'idaula','nombreaula');
+ break;
+ case $AMBITO_GRUPOSORDENADORES :
+ $textambito=TomaDato($cmd,0,'gruposordenadores',$idambito,'idgrupo','nombregrupoordenador');
+ break;
+ case $AMBITO_ORDENADORES :
+ $textambito=TomaDato($cmd,0,'ordenadores',$idambito,'idordenador','nombreordenador');
+ break;
+ default:
+ $textambito;
+ }
}
/*______________________________________________________________________
- Devuelve el código HTML de una etiqueta "select" para un ámbito concreto
+ Devuelve el código html de una etiqueta SELECT para un ámbito concreto
Parametros:
- cmd: Objeto comando (Operativo)
- ambito: tipo de ambito
@@ -376,4 +380,3 @@
}
return($selecHtml);
}
-
diff --git a/admin/WebConsole/includes/constantes.php b/admin/WebConsole/includes/constantes.php
index ba79ef33..40c568e1 100644
--- a/admin/WebConsole/includes/constantes.php
+++ b/admin/WebConsole/includes/constantes.php
@@ -1,6 +1,6 @@
<?php
-// Código de los ambitos para comandos
+// Código de los ámbitos para comandos
$AMBITO_CENTROS=0x01;
$AMBITO_GRUPOSAULAS=0x02;
$AMBITO_AULAS=0x04;
@@ -8,11 +8,14 @@ $AMBITO_GRUPOSORDENADORES=0x08;
$AMBITO_ORDENADORES=0x10;
-// Código del resto de �bitos
+// Código del resto de ábitos
$AMBITO_IMAGENES=0x20;
$AMBITO_PROCEDIMIENTOS=0x21;
$AMBITO_TAREAS=0x22;
$AMBITO_COMANDOS=0x23;
+$AMBITO_IMAGENESMONOLITICAS=0x49;
+$AMBITO_IMAGENESBASICAS=0x50;
+$AMBITO_IMAGENESINCREMENTALES=0x51;
$AMBITO_COMPONENTESHARD=0x24;
$AMBITO_COMPONENTESSOFT=0x25;
@@ -20,13 +23,12 @@ $AMBITO_PERFILESHARD=0x26;
$AMBITO_PERFILESSOFT=0x27;
$AMBITO_MENUS=0x28;
$AMBITO_REPOSITORIOS=0x29;
-$AMBITO_RESERVAS=0x32;
+$AMBITO_RESERVAS=0x31;
-// Código del resto de ambitos( grupos )
+// Código del resto de ámbitos (grupos)
$AMBITO_GRUPOSIMAGENES=0x32;
$AMBITO_GRUPOSPROCEDIMIENTOS=0x33;
$AMBITO_GRUPOSTAREAS=0x34;
-
$AMBITO_GRUPOSCOMPONENTESHARD=0x36;
$AMBITO_GRUPOSCOMPONENTESSOFT=0x37;
$AMBITO_GRUPOSPERFILESHARD=0x38;
@@ -35,12 +37,21 @@ $AMBITO_GRUPOSMENUS=0x40;
$AMBITO_GRUPOSREPOSITORIOS=0x41;
$AMBITO_GRUPOSRESERVAS=0x44;
$AMBITO_GRUPOSENTIDADES=0x45;
-
-// Literales de los ambitos
+$AMBITO_GRUPOSIMAGENESMONOLITICAS=0x46;
+$AMBITO_GRUPOSIMAGENESBASICAS=0x47;
+$AMBITO_GRUPOSIMAGENESINCREMENTALES=0x48;
+$AMBITO_GRUPOSIMAGENESMONOLITICAS=0x46;
+$AMBITO_GRUPOSIMAGENESBASICAS=0x47;
+$AMBITO_GRUPOSIMAGENESINCREMENTALES=0x48;
+
+// Literales de los ámbitos
$LITAMBITO_CENTROS="centros";
$LITAMBITO_AULAS="aulas";
$LITAMBITO_ORDENADORES="ordenadores";
$LITAMBITO_IMAGENES="imagenes";
+$LITAMBITO_IMAGENESMONOLITICAS="imagenesmonoliticas";
+$LITAMBITO_IMAGENESBASICAS="imagenesbasicas";
+$LITAMBITO_IMAGENESINCREMENTALES="imagenesincrementales";
$LITAMBITO_PROCEDIMIENTOS="procedimientos";
$LITAMBITO_TAREAS="tareas";
@@ -52,16 +63,18 @@ $LITAMBITO_PERFILESSOFT="perfilessoft";
$LITAMBITO_MENUS="menus";
$LITAMBITO_REPOSITORIOS="repositorios";
-
$LITAMBITO_RESERVAS="reservas";
$LITAMBITO_ADMINISTRACION="administracion";
$LITAMBITO_UNIVERSIDADES="universidades";
$LITAMBITO_ENTIDADES="entidades";
$LITAMBITO_USUARIOS="usuarios";
-// Literales de los ambitos ( Grupos )
+// Literales de los ámbitos (grupos)
$LITAMBITO_GRUPOSAULAS="gruposaulas";
$LITAMBITO_GRUPOSORDENADORES="gruposordenadores";
$LITAMBITO_GRUPOSIMAGENES="gruposimagenes";
+$LITAMBITO_GRUPOSIMAGENESMONOLITICAS="gruposimagenesmonoliticas";
+$LITAMBITO_GRUPOSIMAGENESBASICAS="gruposimagenesbasicas";
+$LITAMBITO_GRUPOSIMAGENESINCREMENTALES="gruposimagenesincrementales";
$LITAMBITO_GRUPOSPROCEDIMIENTOS="gruposprocedimientos";
$LITAMBITO_GRUPOSTAREAS="grupostareas";
@@ -75,7 +88,6 @@ $LITAMBITO_GRUPOSRESERVAS="gruposreservas";
$LITAMBITO_GRUPOSENTIDADES="gruposentidades";
// Código de los tipo de acciones
-
$EJECUCION_COMANDO=0x0001;
$EJECUCION_PROCEDIMIENTO=0x0002;
$EJECUCION_TAREA=0x0003;
@@ -87,7 +99,7 @@ $NOTIFICADOR_ORDENADOR=0x0001;
$NOTIFICADOR_COMANDO=0x0002;
$NOTIFICADOR_TAREA=0x0003;
-// Categorias de sucesos
+// Categorías de sucesos
$PROCESOS=0x01;
$INFORMACIONES=0x02;
$NOTIFICACIONES=0x03;
@@ -105,11 +117,11 @@ $RESPUESTA_EJECUCION_TAREA=0x0002;
$RESPUESTA_EJECUCION_TRABAJO=0x0003;
$RESPUESTA_EJECUCION_PETICION=0x0004;
-// Código de los tipos de items de los mens de clientes
+// Código de los tipos de ítems de los menús de clientes
$ITEM_PUBLICO=0x0001;
$ITEM_PRIVADO=0x0002;
-//Codificaci� de los resultados de las acciones
+//Codificación de los resultados de las acciones
$ACCION_SINRESULTADO=0; // Sin resultado
$ACCION_EXITOSA=1; // Finalizada con éxito
@@ -117,44 +129,30 @@ $ACCION_FALLIDA=2; // Finalizada con errores
$LITACCION_FALLIDA="Acción CANCELADA manualmente";
$LITACCION_EXITOSA="Acción TERMINADA manualmente";
-//Codificaci� de los estados de las acciones
+//Codificación de los estados de las acciones
-$ACCION_INICIADA=1; // Acci� activa
-$ACCION_DETENIDA=2; // Acci� momentanemente parada
-$ACCION_FINALIZADA=3; // Acci� finalizada
+$ACCION_INICIADA=1; // Acción activa
+$ACCION_DETENIDA=2; // Acción momentanemente parada
+$ACCION_FINALIZADA=3; // Acción finalizada
$ACCION_PROGRAMADA=4; // Acción programada
-// Nombrey path del fichero de intercambio de parametros entre páginas
-// Ha sido necesario porque cuando los parametros enviados execed�n de cierta longitud
-// ocurria una excepci� al llamar a la p�ina por GET.
+// Nombre y path del fichero de intercambio de parametros entre páginas
+// Ha sido necesario porque cuando los parametros enviados execedían de cierta longitud
+// ocurria una excepción al llamar a la página por GET.
$fileparam="../includes/PRM_".$usuario;
-$pathfileco="/opt/opengnsys/log/clients"; // Path del fichero de eco de consola
+$pathfileco="/opt/opengnsys/log/clients"; // Path del fichero de eco de consola
-// M�ima longitud de los parametros enviados entre páginas
+// Máxima longitud de los parametros enviados entre páginas
$MAXLONPRM=16000;
-$MAXLONVISUSCRIPT =1024; // longitud Maxima de visualizaci� del script en las colas de acciones
-$MAXSIZEFILERBC=100000; // longitud Maxima de los fichero de script enviados como comandos ejecuci� de script
+$MAXLONVISUSCRIPT=1024; // Longitud máxima de visualización del script en las colas de acciones
+$MAXSIZEFILERBC=100000; // Longitud máxima de los fichero de script enviados como comandos ejecución de script
$LONHEXPRM=5; // Longitud de la cadena hexdecimal que contiene la longitud total de la trama
-$LONCABECERA=16; // Longitud de la cabecera de las tramas
-$LONBLK=512; // Longitud de los paquetes de tramas leidos cada vez
-
-$tbTiposParticiones="";
-$tbTiposParticiones[0]="EMPTY";
-$tbTiposParticiones[1]="BIGDOS";
-$tbTiposParticiones[2]="FAT32";
-$tbTiposParticiones[3]="NTFS";
-$tbTiposParticiones[4]="EXT2";
-$tbTiposParticiones[5]="EXT3";
-$tbTiposParticiones[6]="EXT4";
-$tbTiposParticiones[7]="LINUX-SWAP";
-$tbTiposParticiones[8]="CACHE";
-$tbTiposParticiones[9]="VFAT";
-$tbTiposParticiones[10]="UNKNOW";
-
-
-//Codificaci� de los estados de las reservas
+$LONCABECERA=16; // Longitud de la cabecera de las tramas
+$LONBLK=512; // Longitud de los paquetes de tramas leidos cada vez
+
+//Codificación de los estados de las reservas
$RESERVA_CONFIRMADA=1; // Reserva confirmada
$RESERVA_PENDIENTE=2; // Reserva pendiente
$RESERVA_DENEGADA=3; // Reserva denegada
@@ -170,5 +168,10 @@ $msk_imagen=0x08;
$msk_perfil=0x10;
$msk_cache=0x12;
-?>
+// Tipos de imágenes
+$IMAGENES_MONOLITICAS=0x01;
+$IMAGENES_BASICAS=0x02;
+$IMAGENES_INCREMENTALES=0x03;
+/* AVISO: no crear salto de línea ni líneas en blanco tras el fin del código PHP. */
+?>
diff --git a/admin/WebConsole/includes/ctrlacc.php b/admin/WebConsole/includes/ctrlacc.php
index cf3c830c..9e09b9b7 100644
--- a/admin/WebConsole/includes/ctrlacc.php
+++ b/admin/WebConsole/includes/ctrlacc.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
diff --git a/admin/WebConsole/includes/opcionesprotocolos.php b/admin/WebConsole/includes/opcionesprotocolos.php
new file mode 100644
index 00000000..5002316c
--- /dev/null
+++ b/admin/WebConsole/includes/opcionesprotocolos.php
@@ -0,0 +1,101 @@
+<?
+/**
+ * @file: opcionesprotocolos.php
+ * @brief: Toma los parametros de mcast y torrent para mostrarlos en las paginas de restaurar imagen (monoliticas y sincronizadas)
+ * @date: 2013-11-25
+ * @copyright GNU Public License v3+
+ */
+
+
+function mcast_syntax($cmd,$ambito,$idambito)
+{
+//if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
+if ($ambito == 4)
+{
+$cmd->texto='SELECT pormul, ipmul, modomul, velmul, puestos FROM aulas
+ WHERE aulas.idaula=' . $idambito ;
+}
+
+if ($ambito == 8)
+{
+$cmd->texto='SELECT pormul, ipmul, modomul, velmul, puestos FROM aulas
+ JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula
+ WHERE gruposordenadores.idgrupo=' . $idambito ;
+}
+
+if ($ambito == 16)
+{
+$cmd->texto='SELECT pormul, ipmul, modomul, velmul, puestos 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 = $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->Siguiente();
+ $mcastsyntax.=$rs->campos["puestos"] . ':';
+
+ $rs->Cerrar();
+ }
+ $mcastsyntax.="60";
+
+ return($mcastsyntax);
+}
+
+
+function torrent_syntax($cmd,$ambito,$idambito)
+{
+if ($ambito == 4)
+{
+ $cmd->texto='SELECT modp2p, timep2p FROM aulas
+ WHERE aulas.idaula=' . $idambito ;
+}
+if ($ambito == 8)
+{
+ $cmd->texto='SELECT modp2p, timep2p FROM aulas
+ JOIN gruposordenadores ON aulas.idaula=gruposordenadores.idaula
+ WHERE gruposordenadores.idgrupo=' . $idambito ;
+}
+if ($ambito == 16)
+{
+ $cmd->texto='SELECT modp2p, 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();
+ $torrentsyntax=$rs->campos["modp2p"] . ':';
+ $rs->Siguiente();
+ $torrentsyntax.=$rs->campos["timep2p"];
+ $rs->Siguiente();
+ $rs->Cerrar();
+}
+return($torrentsyntax);
+}
+
+
+
+?>
+
diff --git a/admin/WebConsole/includes/pintaParticiones.php b/admin/WebConsole/includes/pintaParticiones.php
new file mode 100644
index 00000000..41046771
--- /dev/null
+++ b/admin/WebConsole/includes/pintaParticiones.php
@@ -0,0 +1,602 @@
+<?php
+
+include_once("../idiomas/php/".$idioma."/pintaParticiones_".$idioma.".php");
+
+/**
+ * Separa las distintas configuraciones de una cadena por disco.
+ * Ej. 1;0;1@1;1;7@1;2;131@2;0;1@2;1;7
+ * Serian dos configuraciones, para el disco 1 -> 1;0;1@1;1;7@1;2;131 y
+ * para el disco 2 -> 2;0;1@2;1;7
+ */
+function splitConfigurationsByDisk($configuraciones){
+ // Recorremos las configuraciones para separalas segun el disco al que pertenezcan
+ $diskConfigs = array();
+ $configs = split("@",$configuraciones);
+ foreach($configs as $config){
+ $parts = split(";",$config);
+ if(!isset($diskConfigs[$parts[0]])){
+ $diskConfigs[$parts[0]] = "@";
+ }
+ else if($diskConfigs[$parts[0]] != ""){
+ $diskConfigs[$parts[0]] .= "@";
+ }
+
+ // Concatenamos la configuracion en el disco que corresponda
+ $diskConfigs[$parts[0]] .= $config;
+ }
+ return $diskConfigs;
+}
+
+
+
+// *************************************************************************************************************************************************
+// UHU - 2013/15/14 - Se pintan los discos ademas de las particiones
+// Descripción:
+// Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador,
+// grupo de ordenadores o aula
+// Parametros:
+// $configuraciones: Cadena con las configuraciones de particioners del ámbito. El formato
+// sería una secuencia de cadenas del tipo "clave de configuración" separados por "@"
+// Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0
+//________________________________________________________________________________________________________
+function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
+{
+ global $tbKeys; // Tabla contenedora de claves de configuración
+ global $conKeys; // Contador de claves de configuración
+ global $TbMsg;
+
+
+ // Separamos las configuraciones segun el disco al que pertenezcan
+ $diskConfigs = splitConfigurationsByDisk($configuraciones);
+
+ $columns=9;
+ echo '<tr height="16">';
+ echo '<th align="center">&nbsp;'.$TbMsg["DISK"].'&nbsp;</th>'; // Número de disco
+ echo '<th align="center">&nbsp;'.$TbMsg["PARTITION"].'&nbsp;</th>'; // Número de partición
+ echo '<th align="center">&nbsp;'.$TbMsg["PARTITION_TYPE"].'&nbsp;</th>'; // Tipo de partición
+ echo '<th align="center">&nbsp;'.$TbMsg["FILESYSTEM_SHORT"].'&nbsp;</th>'; // Sistema de ficheros
+ echo '<th align="center">&nbsp;'.$TbMsg["INST_SO"].'&nbsp;</th>'; // Sistema Operativo Instalado
+ echo '<th align="center">&nbsp;'.$TbMsg["SIZE_KB"].'&nbsp;</th>'; // Tamaño
+ echo '<th align="center">&nbsp;'.$TbMsg["IMAGE"].'&nbsp;</th>'; // Imagen instalada
+ echo '<th align="center">&nbsp;'.$TbMsg["SOFT_PROFILE"].'&nbsp;</th>'; // Perfil software
+ echo '<th align="center">&nbsp;'.$TbMsg["CACHE_CONTENT"].'&nbsp;</th>';
+ echo '</tr>';
+
+ // Recorremos todas las configuraciones encontradas para cada disco
+
+ foreach($diskConfigs as $disk => $diskConfig){
+ echo'<tr height="16">'.chr(13);
+ echo '<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">&nbsp;'.$TbMsg["DISK"].'&nbsp;'.$disk.'</td>'.chr(13);
+
+
+
+ $auxCfg=split("@",$diskConfig); // Crea lista de particiones
+ for($i=0;$i<sizeof($auxCfg);$i++){
+ $auxKey=split(";",$auxCfg[$i]); // Toma clave de configuracion
+ for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partición
+ if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas
+ if ($tbKeys[$k]["numpar"] == 0) { // Info del disco (umpart=0)
+ $disksize[$tbKeys[$k]["numdisk"]] = tomaTamano($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]);
+ if (empty ($disksize)) {
+ $disksize = '<em>'.$TbMsg["VARIABLE"].'</em>';
+ }
+ switch ($tbKeys[$k]["codpar"]) {
+ case 1: $disktable[$tbKeys[$k]["numdisk"]] = "MSDOS";
+ break;
+ case 2: $disktable[$tbKeys[$k]["numdisk"]] = "GPT";
+ break;
+ default: $disktable[$tbKeys[$k]["numdisk"]] = "";
+ }
+ }
+ else { // Información de partición (numpart>0)
+ echo'<tr height="16">'.chr(13);
+ echo'<td align="center">&nbsp;</td>'.chr(13);
+ echo'<td align="center">'.$tbKeys[$k]["numpar"].'</td>'.chr(13);
+ if (is_numeric ($tbKeys[$k]["tipopar"])) {
+ echo '<td align="center"><em>'.sprintf("%02X",$tbKeys[$k]["tipopar"]).'</em></td>'.chr(13);
+ }
+ else {
+ echo '<td align="center">'.$tbKeys[$k]["tipopar"].'</td>'.chr(13);
+ }
+ $filesys=tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,false,$tbKeys[$k]["numdisk"]);
+ echo'<td align="center">&nbsp;'.$filesys.'&nbsp;</td>'.chr(13);
+
+ echo '<td align="center">&nbsp;'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]).'&nbsp;</td>'.chr(13);
+
+ echo'<td align="right">&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]).'&nbsp;</td>'.chr(13);
+
+ echo'<td align="center">&nbsp;'.tomaImagenes($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]).'&nbsp;</td>'.chr(13);
+
+ echo'<td align="center">&nbsp;'.tomaPerfiles($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]).'&nbsp;</td>'.chr(13);
+
+ if ($filesys == "CACHE") {
+ $rs=new Recordset;
+ $cmd->texto="SELECT cache FROM ordenadores_particiones WHERE idordenador=".$idordenadores." AND numdisk=".$tbKeys[$k]["numdisk"]." AND numpar=".$tbKeys[$k]["numpar"];
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(false); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $campocache=$rs->campos["cache"];
+ }
+ $rs->Cerrar();
+ echo '<td align="leght">&nbsp;';
+ $campocache = eregi_replace("[\n|\r|\n\r]", '', $campocache);
+ $ima=split(",",$campocache);
+ $numero=1;
+ for ($x=0;$x<count($ima); $x++) {
+ if(substr($ima[$x],-3)==".MB") {
+ echo '<strong>'.$TbMsg["CACHE_FREESPACE"].': '.$ima[$x].'</strong>';
+ }elseif (! empty($ima[1])){
+ // $dir=is_dir('$ima');echo $dir;
+ // if ($ima == "directorio"){$dir="si";}
+ // Esto para la informacion de la imagen
+ if (substr($ima[$x],-5)==".diff"){$info="F";}elseif(substr($ima[$x],-4)==".img"){$info="F";}else{$info="D";}
+ // Esto para numerarla
+ if(substr($ima[$x],-4)==".img" || substr($ima[$x],-5)==".diff" || substr($ima[$x],-4)=="") {
+ echo '<br />('.$info.') &nbsp;'.$numero++.'.-'.$ima[$x];
+ } elseif(ereg(".sum",$ima[$x]) || ereg(".torrent",$ima[$x])) {
+ echo '<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$ima[$x];
+ }else{
+ echo '<br /><font color=blue>('.$info.') </font>'.$numero++.'.-<font color=blue>'.$ima[$x]."</font>";
+ }
+ }
+ }
+ echo '&nbsp;</td>'.chr(13);
+
+ } else {
+ echo'<td align="center">&nbsp;&nbsp;</td>'.chr(13);
+ }
+
+ echo'</tr>'.chr(13);
+ }
+ break;
+ }
+ }
+ }
+ // Mostrar información del disco, si se ha obtenido.
+ if (!empty ($disksize)) {
+ echo'<tr height="16">'.chr(13);
+ echo'<td align="center">&nbsp;</td>'.chr(13);
+ echo'<td align="center">&nbsp;'.$disktable[$disk].'&nbsp;</td>'.chr(13);
+ echo'<td></td>'.chr(13);
+ echo'<td></td>'.chr(13);
+ echo'<td></td>'.chr(13);
+ echo'<td align="right">&nbsp;<strong>'.$disksize[$disk].'</span></strong>&nbsp;</td>'.chr(13);
+ // Creamos un campo oculto para guardar información sobre el disco y su tamaño separados por ;
+ echo "<input type='hidden' name='disksize_".$disk."' value='".$disksize[$disk]."'/>\n";
+ echo'<td></td>'.chr(13);
+ echo'<td></td>'.chr(13);
+ echo'<td></td>'.chr(13);
+ echo'</tr>'.chr(13);
+ }
+ }
+ echo '<tr height="5"><td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</td></tr>';
+}
+
+
+//________________________________________________________________________________________________________
+//
+// Descripción:
+// (Esta función es llamada por pintaConfiguraciones que está incluida en ConfiguracionesParticiones.php)
+// Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador,
+// grupo de ordenadores o aula
+// Parametros:
+// $configuraciones: Cadena con las configuraciones de particioners del ámbito. El formato
+// sería una secuencia de cadenas del tipo "clave de configuración" separados por "@"
+// Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0
+// Devuelve:
+// El código html de la tabla
+//________________________________________________________________________________________________________
+function pintaParticionesRestaurarImagen($cmd,$configuraciones,$idordenadores,$cc,$ambito,$idambito)
+{
+ global $tbKeys; // Tabla contenedora de claves de configuración
+ global $conKeys; // Contador de claves de configuración
+ global $TbMsg;
+ global $_SESSION;
+
+ // Separamos las configuraciones segun el disco al que pertenezcan
+ $diskConfigs = splitConfigurationsByDisk($configuraciones);
+
+ $columns=10;
+ echo '<TR>';
+ echo '<TH align=center>&nbsp;&nbsp;</TH>';
+ echo '<th align="center">&nbsp;'.$TbMsg["DISK"].'&nbsp;</th>'; // Número de disco
+ echo '<TH align=center>&nbsp;'.$TbMsg["PARTITION"].'&nbsp;</TH>';
+ echo '<th align="center">&nbsp;'.$TbMsg["PARTITION_TYPE"].'&nbsp;</th>'; // Tipo de partición
+ echo '<th align="center">&nbsp;'.$TbMsg["INST_SO"].'&nbsp;</th>'; // Sistema Operativo Instalado
+ echo '<th align="center">&nbsp;'.$TbMsg["FILESYSTEM_SHORT"].'&nbsp;</th>'; // Sistema de ficheros
+ echo '<th align="center">&nbsp;'.$TbMsg["SIZE_KB"].'&nbsp;</th>'; // Tamaño
+ echo '<TH align=center>&nbsp;'.$TbMsg["SAMESYSTEM_IMAGE"].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg["DIFFERENTSYSTEM_IMAGE"].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg["RESTORE_METHOD"].'&nbsp;</TH>';
+ echo '</TR>';
+
+
+ // Recorremos todas las configuraciones encontradas para cada disco
+
+ foreach($diskConfigs as $disk => $diskConfig){
+ echo'<tr height="16">'.chr(13);
+ echo '<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">&nbsp;'.$TbMsg["DISK"].'&nbsp;'.$disk.'</td>'.chr(13);
+
+ $auxCfg=split("@",$diskConfig); // Crea lista de particiones
+ for($i=0;$i<sizeof($auxCfg);$i++){
+ $auxKey=split(";",$auxCfg[$i]); // Toma clave de configuracion
+ for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partición
+ if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas
+ if($tbKeys[$k]["numpar"]!=0){ // No es info. del disco (part. 0)
+ $swcc=$tbKeys[$k]["clonable"];
+ if($swcc){
+ echo '<TR>'.chr(13);
+ echo '<TD align=center>&nbsp;&nbsp;</TD>';
+ $icp=$cc."_".$tbKeys[$k]["numdisk"]."_".$tbKeys[$k]["numpar"]; // Identificador de la configuración-partición
+ echo '<TD ><input type=radio idcfg="'.$cc.'" id="'.$icp.'" name="particion" value='.$tbKeys[$k]["numdisk"].";".$tbKeys[$k]["numpar"].'></TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.$tbKeys[$k]["numpar"].'&nbsp;</TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.$tbKeys[$k]["tipopar"].'&nbsp;</TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]).'&nbsp;</TD>'.chr(13);
+ echo'<TD align=center>&nbsp;'.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,false,$tbKeys[$k]["numdisk"]).'&nbsp;</TD>'.chr(13);
+ echo'<TD align=center>&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]).'&nbsp;</TD>'.chr(13);
+ 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="UNICAST=UNICAST-CACHE".chr(13);
+ $metodos.="UNICAST-DIRECT=UNICAST-DIRECT".chr(13);
+ $metodos.="MULTICAST " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-CACHE".chr(13);
+ $metodos.="MULTICAST-DIRECT " . mcast_syntax($cmd,$ambito,$idambito) . "=MULTICAST-DIRECT".chr(13);
+ $metodos.="TORRENT " . torrent_syntax($cmd,$ambito,$idambito) . "=TORRENT-CACHE";
+
+ $TBmetodos["UNICAST-CACHE"]=1;
+ $TBmetodos["UNICAST-DIRECT"]=2;
+ $TBmetodos["MULTICAST-CACHE"]=3;
+ $TBmetodos["MULTICAST-DIRECT"]=4;
+ $TBmetodos["TORRENT-CACHE"]=5;
+ $idxc=$_SESSION["protclonacion"];
+ if ($idxc == "UNICAST") {
+ $idxc = "UNICAST-DIRECT";
+ }
+ echo '<TD>'.HTMLCTESELECT($metodos,"protoclonacion_".$icp,"estilodesple","",$TBmetodos[$idxc],100).'</TD>';
+ echo '</TR>'.chr(13);
+ }
+ }
+ }
+ }
+ }
+ }
+ echo '<TR height=5><TD colspan='.$columns.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</TD></TR>';
+}
+
+/*________________________________________________________________________________________________________
+
+ Descripción:
+ (Esta función es llamada por pintaConfiguraciones que está incluida en ConfiguracionesParticiones.php)
+ Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador,
+ grupo de ordenadores o aula
+ Parametros:
+ $configuraciones: Cadena con las configuraciones de particioners del ámbito. El formato
+ sería una secuencia de cadenas del tipo "clave de configuración" separados por "@"
+ Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0
+ $idordenadores: cadena con los identificadores de los ordenadores que forman parte del bloque
+ $cc: Identificador de la configuración
+ Devuelve:
+ El código html de la tabla
+________________________________________________________________________________________________________*/
+function pintaParticionesConfigurar($cmd,$configuraciones,$idordenadores,$cc)
+{
+
+ global $tbKeys; // Tabla contenedora de claves de configuración
+ global $conKeys; // Contador de claves de configuración
+ global $TbMsg;
+
+ $colums=7;
+ echo '<TR id="TR_'.$cc.'">';
+ echo '<TH align=center><IMG src="../images/iconos/eliminar.gif"></TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg[8].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg[24].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg[27].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg[22].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg[21].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg[14].'&nbsp;</TH>';
+ echo '</TR>';
+
+ $aviso=false;
+ $auxCfg=split("@",$configuraciones); // Crea lista de particiones
+ for($i=0;$i<sizeof($auxCfg);$i++){
+ $auxKey=split(";",$auxCfg[$i]); // Toma clave de configuracion
+ for($k=1;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partición
+ if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas
+ if($tbKeys[$k]["numdisk"]==1){ // Solo tratar disco 1
+ if($tbKeys[$k]["numpar"]>0){ // Solo particiones (número>0)
+ $icp=$cc."_".$k; // Identificador de la configuración-partición
+ echo '<tr id="TR_'.$icp.'" align="center">';
+ echo '<td><input type="checkbox" onclick="eliminaParticion(this,\''.$icp.'\')"></td>';
+ echo '<td>'.HTMLSELECT_particiones($tbKeys[$k]["numpar"]).'</td>';
+ echo '<td>'.HTMLSELECT_tipospar($cmd,$tbKeys[$k]["tipopar"]).'</td>';
+ $sf=tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,true);
+ echo '<td>'.HTMLSELECT_sistemasficheros($cmd,$sf).'</td>';
+ $tm=tomaTamano($tbKeys[$k]["numpar"],$idordenadores);
+ echo '<td><input type="text" style="width:100" value="'.$tm.'"></td>';
+ echo '<td>'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'</td>';
+ echo '<td>'.opeFormatear().'</td>';
+ echo '</tr>';
+ } else {
+ if ($tbKeys[$k]["codpar"]!=1) { // Aviso tabla no MSDOS.
+ $aviso=true;
+ }
+ }
+ } else { // Aviso: más de un disco.
+ $aviso=true;
+ }
+ }
+ }
+ }
+ if ($aviso) { // Mostrar aviso: solo disco 1 con tabla MSDOS.
+ echo '<tr><th colspan='.$colums.'">'.$TbMsg["CONFIG_NODISK1MSDOS"].'</th></tr>';
+ }
+ /* Botones de añadir y confirmar */
+ echo '<TR id="TRIMG_'.$cc.'" height=5><TD colspan='.$colums.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</TD></TR>';
+ echo '<TR height=30><TD style="BACKGROUND-COLOR: #FFFFFF;" colspan='.$colums.' align=center>';
+ echo ' <A href="#add" style="text-decoration:none">
+ <IMG id="IMG_'.$icp.'" border=0 src="../images/boton_insertar.gif"
+ value="'.$k.'" onclick="addParticion(this,'.$cc.')"></A>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ <A href="#add" style="text-decoration:none">
+ <IMG border=0 src="../images/boton_aceptar.gif" onclick="Confirmar('.$cc.')"></A></TD>
+ </TR>';
+}
+
+/*
+//
+// Descripcion:
+// (Esta funci�n es llamada por pintaConfiguraciones que est� incluida en ConfiguracionesParticiones.php)
+// Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador,
+// grupo de ordenadores o aula
+// Parametros:
+// $configuraciones: Cadena con las configuraciones de particioners del �mbito. El formato
+// ser�a una secuencia de cadenas del tipo "clave de configuraci�n" separados por "@"
+// Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0
+// Devuelve:
+// El c�digo html de la tabla
+//________________________________________________________________________________________________________
+//
+//
+*/
+function pintaParticionesRestaurarImagenSincronizacion1($cmd,$configuraciones,$idordenadores,$cc,$ambito,$idambito)
+{
+ global $tbKeys; // Tabla contenedora de claves de configuraci�n
+ global $conKeys; // Contador de claves de configuraci�n
+ global $TbMsg;
+ global $_SESSION;
+
+ // Separamos las configuraciones segun el disco al que pertenezcan
+ $diskConfigs = splitConfigurationsByDisk($configuraciones);
+
+ $columns=14;
+ echo '<TR>';
+ echo '<TH align=center>&nbsp;&nbsp;</TH>';
+ echo '<th align="center">&nbsp;'.$TbMsg["DISK"].'&nbsp;</th>'; // Número de disco
+ echo '<TH align=center>&nbsp;'.$TbMsg["PARTITION"].'&nbsp;</TH>';
+ echo '<th align="center">&nbsp;'.$TbMsg["PARTITION_TYPE"].'&nbsp;</th>'; // Tipo de partición
+ echo '<th align="center">&nbsp;'.$TbMsg["INST_SO"].'&nbsp;</th>'; // Sistema Operativo Instalado
+ echo '<th align="center">&nbsp;'.$TbMsg["FILESYSTEM_SHORT"].'&nbsp;</th>'; // Sistema de ficheros
+ echo '<th align="center">&nbsp;'.$TbMsg["SIZE_KB"].'&nbsp;</th>'; // Tamaño
+ echo '<TH align=center>&nbsp;'.$TbMsg[10].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg[16].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg["SYNC_METHOD"].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg["SEND"].'&nbsp;</TH>';
+ echo ' <TH align=center>&nbsp;<dfn title="'.$TbMsg["TITLE_W"].'">W</dfn> &nbsp;</TH>';
+ echo ' <TH align=center>&nbsp;<dfn title="'.$TbMsg["TITLE_E"].'">E</dfn> &nbsp;</TH>';
+ echo ' <TH align=center>&nbsp;<dfn title="'.$TbMsg["TITLE_C"].'">C</dfn> &nbsp;</TH>';
+ echo '</TR>';
+
+
+ // Recorremos todas las configuraciones encontradas para cada disco
+
+ foreach($diskConfigs as $disk => $diskConfig){
+ echo'<tr height="16">'.chr(13);
+ echo '<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">&nbsp;'.$TbMsg["DISK"].'&nbsp;'.$disk.'</td>'.chr(13);
+
+ $auxCfg=split("@",$diskConfig); // Crea lista de particiones
+ for($i=0;$i<sizeof($auxCfg);$i++){
+ $auxKey=split(";",$auxCfg[$i]); // Toma clave de configuracion
+ for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partici�n
+ if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas
+ $swcc=$tbKeys[$k]["clonable"];
+ echo '<TR>'.chr(13);
+ echo '<TD align=center>&nbsp;&nbsp;</TD>';
+ if($swcc){
+ $icp=$cc."_".$tbKeys[$k]["numdisk"]."_".$tbKeys[$k]["numpar"]; // Identificador de la configuraci�n-partici�n
+ echo '<TD align=center><input type=radio idcfg="'.$cc.'" id="'.$icp.'" name="particion" value='.$tbKeys[$k]["numdisk"].";".$tbKeys[$k]["numpar"].'></TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.$tbKeys[$k]["numpar"].'&nbsp;</TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.$tbKeys[$k]["tipopar"].'&nbsp;</TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]).'&nbsp;</TD>'.chr(13);
+ echo'<TD align=center>&nbsp;'.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,false,$tbKeys[$k]["numdisk"]).'&nbsp;</TD>'.chr(13);
+ echo'<TD align=center>&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores,$tbKeys[$k]["numdisk"]).'&nbsp;</TD>'.chr(13);
+ echo '<TD align=center>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true,$idordenadores,$ambito).'</TD>';
+ $metodos="CACHE=".$TbMsg[13].chr(13);
+ $metodos.="REPO=".$TbMsg[9];
+ echo '<TD align=center>'.HTMLCTESELECT($metodos,"desplemet_".$icp,"estilodesple","",1,100).'</TD>';
+
+ $metodos="SYNC0="." ".chr(13);
+ $metodos.="SYNC1=".$TbMsg["SYNC1_DIR"].chr(13);
+ $metodos.="SYNC2=".$TbMsg["SYNC2_FILE"];
+ echo '<TD align=center>'.HTMLCTESELECT($metodos,"desplesync_".$icp,"estilodesple","",1,100).'</TD>';
+
+ $metodos="UNICAST="."Unicast".chr(13);
+ $metodos.="MULTICAST_". mcast_syntax($cmd,$ambito,$idambito) ."="."Multicast".chr(13);
+ $metodos.="TORRENT_". torrent_syntax($cmd,$ambito,$idambito) ."="."Torrent".chr(13);
+ $metodos.="RSYNC=Rsync";
+ echo '<TD align=center>'.HTMLCTESELECT($metodos,"despletpt_".$icp,"estilodesple","",1,100).'</TD>';
+
+ echo '<td align=center><input type=checkbox name="whole" id="whl-'.$icp.'"></td>';
+ echo '<td align=center><input type=checkbox name="paramb" checked id="eli-'.$icp.'"></td>';
+ echo '<td align=center><input type=checkbox name="compres" id="cmp-'.$icp.'"></td>';
+
+ }
+ echo '</TR>'.chr(13);
+ }
+ }
+ }
+ }
+ echo '<TR height=5><TD colspan='.$columns.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</TD></TR>';
+}
+/**
+ * Las funcion pintaParticionesRestaurarImagenSincronizacion1 sustituye a las funciones
+ * pintaParticionesRestaurarSoftIncremental y pintaParticionesRestaurarImagenBasica
+ * para volver a usarlas tan sólo hay que ir al fichero comandos/RestaurarImagenBasica o comandos/RestaurarSoftIncremental y cambiar la
+ * llamada a la función que queramos en el parametro de pintaConfiguraciones.
+ * Actualmente en ambos ficheros llaman a la función pintaParticionesRestaurarImagenSincronizacion1 ya que pintan
+ * exactamente lo mismo.
+ *
+
+//*********************************************************************************************
+// FUNCIONES
+//*********************************************************************************************
+//
+// Descripci�n:
+// (Esta funci�n es llamada por pintaConfiguraciones que est� incluida en ConfiguracionesParticiones.php)
+// Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador,
+// grupo de ordenadores o aula
+// Parametros:
+// $configuraciones: Cadena con las configuraciones de particioners del �mbito. El formato
+// ser�a una secuencia de cadenas del tipo "clave de configuraci�n" separados por "@"
+// Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0
+// Devuelve:
+// El c�digo html de la tabla
+//________________________________________________________________________________________________________
+//
+//
+function pintaParticionesRestaurarSoftIncremental($cmd,$configuraciones,$idordenadores,$cc,$ambito,$idambito)
+{
+ global $tbKeys; // Tabla contenedora de claves de configuraci�n
+ global $conKeys; // Contador de claves de configuraci�n
+ global $TbMsg;
+ global $_SESSION;
+
+ // Separamos las configuraciones segun el disco al que pertenezcan
+ $diskConfigs = splitConfigurationsByDisk($configuraciones);
+
+ $columns=9;
+ echo '<TR>';
+ echo '<TH align=center>&nbsp;&nbsp;</TH>';
+ echo '<th align="center">&nbsp;'.$TbMsg["DISK"].'&nbsp;</th>'; // Número de disco
+ echo '<TH align=center>&nbsp;'.$TbMsg["PARTITION"].'&nbsp;</TH>';
+ echo '<th align="center">&nbsp;'.$TbMsg["PARTITION_TYPE"].'&nbsp;</th>'; // Tipo de partición
+ echo '<th align="center">&nbsp;'.$TbMsg["INST_SO"].'&nbsp;</th>'; // Sistema Operativo Instalado
+ echo '<th align="center">&nbsp;'.$TbMsg["FILESYSTEM_SHORT"].'&nbsp;</th>'; // Sistema de ficheros
+ echo '<th align="center">&nbsp;'.$TbMsg["SIZE_KB"].'&nbsp;</th>'; // Tamaño
+ echo '<TH align=center>&nbsp;'.$TbMsg[10].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg[16].'&nbsp;</TH>';
+ echo '</TR>';
+
+
+ // Recorremos todas las configuraciones encontradas para cada disco
+
+ foreach($diskConfigs as $disk => $diskConfig){
+ echo'<tr height="16">'.chr(13);
+ echo '<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">&nbsp;'.$TbMsg["DISK"].'&nbsp;'.$disk.'</td>'.chr(13);
+
+ $auxCfg=split("@",$diskConfig); // Crea lista de particiones
+ for($i=0;$i<sizeof($auxCfg);$i++){
+ $auxKey=split(";",$auxCfg[$i]); // Toma clave de configuracion
+ for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partici�n
+ if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas
+ $swcc=$tbKeys[$k]["clonable"];
+ echo '<TR>'.chr(13);
+ echo '<TD align=center>&nbsp;&nbsp;</TD>';
+ if($swcc){
+ $icp=$cc."_".$tbKeys[$k]["numpar"]; // Identificador de la configuraci�n-partici�n
+ echo '<TD align=center><input type=radio idcfg="'.$cc.'" id="'.$icp.'" name="particion" value='.$tbKeys[$k]["numpar"].'></TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.$tbKeys[$k]["numpar"].'&nbsp;</TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.$tbKeys[$k]["tipopar"].'&nbsp;</TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
+ echo'<TD align=center>&nbsp;'.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
+ echo'<TD align=center>&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
+ echo '<TD align=center>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true,$idordenadores,$ambito).'</TD>';
+ $metodos="CACHE=".$TbMsg[13].chr(13);
+ $metodos.="REPO=".$TbMsg[9];
+ echo '<TD align=center>'.HTMLCTESELECT($metodos,"desplemet_".$icp,"estilodesple","",1,100).'</TD>';
+
+ }
+ echo '</TR>'.chr(13);
+ }
+ }
+ }
+ }
+ echo '<TR height=5><TD colspan='.$columns.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</TD></TR>';
+}
+
+//*********************************************************************************************
+// FUNCIONES
+//*********************************************************************************************
+//
+// Descripci�n:
+// (Esta funci�n es llamada por pintaConfiguraciones que est� incluida en ConfiguracionesParticiones.php)
+// Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador,
+// grupo de ordenadores o aula
+// Parametros:
+// $configuraciones: Cadena con las configuraciones de particioners del �mbito. El formato
+// ser�a una secuencia de cadenas del tipo "clave de configuraci�n" separados por "@"
+// Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0
+// Devuelve:
+// El c�digo html de la tabla
+//________________________________________________________________________________________________________
+//
+//
+function pintaParticionesRestaurarImagenBasica($cmd,$configuraciones,$idordenadores,$cc,$ambito,$idambito)
+{
+ global $tbKeys; // Tabla contenedora de claves de configuraci�n
+ global $conKeys; // Contador de claves de configuraci�n
+ global $TbMsg;
+ global $_SESSION;
+
+ // Separamos las configuraciones segun el disco al que pertenezcan
+ $diskConfigs = splitConfigurationsByDisk($configuraciones);
+
+ $columns=9;
+ echo '<TR>';
+ echo '<TH align=center>&nbsp;&nbsp;</TH>';
+ echo '<th align="center">&nbsp;'.$TbMsg["DISK"].'&nbsp;</th>'; // Número de disco
+ echo '<TH align=center>&nbsp;'.$TbMsg["PARTITION"].'&nbsp;</TH>';
+ echo '<th align="center">&nbsp;'.$TbMsg["PARTITION_TYPE"].'&nbsp;</th>'; // Tipo de partición
+ echo '<th align="center">&nbsp;'.$TbMsg["INST_SO"].'&nbsp;</th>'; // Sistema Operativo Instalado
+ echo '<th align="center">&nbsp;'.$TbMsg["FILESYSTEM_SHORT"].'&nbsp;</th>'; // Sistema de ficheros
+ echo '<th align="center">&nbsp;'.$TbMsg["SIZE_KB"].'&nbsp;</th>'; // Tamaño
+ echo '<TH align=center>&nbsp;'.$TbMsg[10].'&nbsp;</TH>';
+ echo '<TH align=center>&nbsp;'.$TbMsg[16].'&nbsp;</TH>';
+ echo '</TR>';
+
+ // Recorremos todas las configuraciones encontradas para cada disco
+
+ foreach($diskConfigs as $disk => $diskConfig){
+ echo'<tr height="16">'.chr(13);
+ echo '<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">&nbsp;'.$TbMsg["DISK"].'&nbsp;'.$disk.'</td>'.chr(13);
+
+ $auxCfg=split("@",$diskConfig); // Crea lista de particiones
+ for($i=0;$i<sizeof($auxCfg);$i++){
+ $auxKey=split(";",$auxCfg[$i]); // Toma clave de configuracion
+ for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partici�n
+ if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas
+ $swcc=$tbKeys[$k]["clonable"];
+ if($swcc){
+ echo '<TR>'.chr(13);
+ echo '<TD align=center>&nbsp;&nbsp;</TD>';
+ $icp=$cc."_".$tbKeys[$k]["numpar"]; // Identificador de la configuraci�n-partici�n
+ echo '<TD align=center><input type=radio idcfg="'.$cc.'" id="'.$icp.'" name="particion" value='.$tbKeys[$k]["numpar"].'></TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.$tbKeys[$k]["numpar"].'&nbsp;</TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.$tbKeys[$k]["tipopar"].'&nbsp;</TD>'.chr(13);
+ echo '<TD align=center>&nbsp;'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
+ echo'<TD align=center>&nbsp;'.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
+ echo'<TD align=center>&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
+ echo '<TD align=center>'.HTMLSELECT_imagenes($cmd,$tbKeys[$k]["idimagen"],$tbKeys[$k]["numpar"],$tbKeys[$k]["codpar"],$icp,true,$idordenadores,$ambito).'</TD>';
+ $metodos="CACHE=".$TbMsg[13].chr(13);
+ $metodos.="REPO=".$TbMsg[9];
+ echo '<TD align=center>'.HTMLCTESELECT($metodos,"desplemet_".$icp,"estilodesple","",1,100).'</TD>';
+ }
+ }
+ }
+ }
+ }
+ echo '<TR height=5><TD colspan='.$columns.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</TD></TR>';
+}
+**/
+
diff --git a/admin/WebConsole/includes/pintaTablaConfiguraciones.php b/admin/WebConsole/includes/pintaTablaConfiguraciones.php
new file mode 100644
index 00000000..b5dddee9
--- /dev/null
+++ b/admin/WebConsole/includes/pintaTablaConfiguraciones.php
@@ -0,0 +1,338 @@
+<?php
+include_once("../idiomas/php/".$idioma."/pintaParticiones_".$idioma.".php");
+
+/*________________________________________________________________________________________________________
+ Crea la tabla de configuraciones y perfiles a crear
+________________________________________________________________________________________________________*/
+function tablaConfiguracionesIniciarSesion($cmd,$idordenador){
+ global $TbMsg;
+ global $idcentro;
+ $tablaHtml="";
+ $cmd->texto="SELECT ordenadores_particiones.numdisk,ordenadores_particiones.numpar,
+ ordenadores_particiones.tamano,
+ ordenadores_particiones.idnombreso, nombresos.nombreso,
+ tipospar.tipopar, imagenes.descripcion AS imagen,
+ perfilessoft.descripcion AS perfilsoft,
+ sistemasficheros.descripcion AS sistemafichero
+ FROM ordenadores
+ INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
+ LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
+ INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
+ LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen
+ LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
+ LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero
+ WHERE ordenadores.idordenador=".$idordenador."
+ AND tipospar.clonable=1
+ AND nombresos.nombreso!='DATA'
+ ORDER BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar";
+
+ $rs->Comando=&$cmd;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir())
+ return($tablaHtml); // Error al abrir recordset
+ $rs->Primero();
+ $actualDisk = 0;
+ $columns = 3;
+ while (!$rs->EOF){
+ if($actualDisk != $rs->campos["numdisk"]){
+ $actualDisk = $rs->campos["numdisk"];
+ $tablaHtml.='<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">&nbsp;<strong>'.$TbMsg["DISK"].'&nbsp;'.$actualDisk.'</strong></td>'.chr(13);
+ }
+ if(!empty($rs->campos["idnombreso"])){
+ $tablaHtml.='<TR>'.chr(13);
+ $tablaHtml.='<TD ><input type="radio" name="particion" value='.$rs->campos["numdisk"].";".$rs->campos["numpar"].'></TD>'.chr(13);
+ $tablaHtml.='<TD align=center>&nbsp;'.$rs->campos["numpar"].'&nbsp;</TD>'.chr(13);
+ $tablaHtml.='<TD>&nbsp;'.$rs->campos["nombreso"].'&nbsp;</TD>'.chr(13);
+ $tablaHtml.='</TR>'.chr(13);
+ }
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+
+ if ( $tablaHtml == "" ) {
+ // Equipo sin configuracion en base de datos.
+ $tablaHtml='<table id="tabla_conf" width="95%" class="tabla_listados_sin" align="center" border="0" cellpadding="0" cellspacing="1">'.chr(13);
+ $tablaHtml.='<tr><th align="center" >'.$TbMsg["CONFIG_NOCONFIG"].'</th><tr>'.chr(13);
+ }
+ else
+ {
+ // Equipo con configuracion en BD
+ // Incluimos primera linea de la tabla.
+ $inicioTabla='<TABLE id="tabla_conf" align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>'.chr(13);
+ $inicioTabla.=' <TR>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'. $TbMsg["PARTITION"] .'&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'. $TbMsg["SO_NAME"] .'&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' </TR>'.chr(13);
+ $tablaHtml=$inicioTabla.$tablaHtml;
+ }
+
+ $tablaHtml.="</table>".chr(13);
+
+ return($tablaHtml);
+}
+
+
+/*________________________________________________________________________________________________________
+ Crea la tabla de configuraciones y perfiles a crear
+________________________________________________________________________________________________________*/
+function tablaConfiguracionesCrearImagen($cmd,$idordenador,$idrepositorio)
+{
+ global $idcentro;
+ global $TbMsg;
+ $tablaHtml="";
+ $rs=new Recordset;
+ $cmd->texto="SELECT ordenadores.ip AS masterip,ordenadores_particiones.numdisk, 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
+ FROM ordenadores
+ INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
+ LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
+ INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
+ LEFT OUTER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen
+ LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
+ LEFT OUTER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero
+ WHERE ordenadores.idordenador=".$idordenador." ORDER BY ordenadores_particiones.numdisk,ordenadores_particiones.numpar";
+ //echo $cmd->texto;
+ $rs->Comando=&$cmd;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir())
+ return($tablaHtml."</table>"); // Error al abrir recordset
+ $rs->Primero();
+ $actualDisk = 0;
+ $columns = 6;
+ while (!$rs->EOF){
+
+ if($actualDisk != $rs->campos["numdisk"]){
+ $actualDisk = $rs->campos["numdisk"];
+ $tablaHtml.='<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">&nbsp;<strong>'.$TbMsg["DISK"].'&nbsp;'.$actualDisk.'</strong></td>'.chr(13);
+ }
+
+ $swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]);
+ $swc=$rs->campos["idperfilsoft"]>0; // Una partición es clonable si posee un identificador de perfil software
+ $swccc=$swcc && $swcc;
+ $tablaHtml.='<TR>'.chr(13);
+ if($swccc){
+ $tablaHtml.='<TD><input type=radio name="particion" value="'.$rs->campos["numdisk"]."_".$rs->campos["numpar"]."_".$rs->campos["codpar"].'"></TD>'.chr(13);
+ $tablaHtml.='<TD align=center>&nbsp;'.$rs->campos["numpar"].'&nbsp;</TD>'.chr(13);
+ $tablaHtml.='<TD align=center>&nbsp;'.$rs->campos["tipopar"].'&nbsp;</TD>'.chr(13);
+ if(empty($rs->campos["nombreso"]) && !empty($rs->campos["idnombreso"])) // Si el identificador del S.O. no es nulo pero no hay descripción
+ $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,$idrepositorio,$rs->campos["idperfilsoft"],$rs->campos["numdisk"],$rs->campos["numpar"],$rs->campos["masterip"]).'</TD>';
+ $tablaHtml.='<TD>'.HTMLSELECT_repositorios($cmd,$idcentro,$idrepositorio,$rs->campos["numdisk"],$rs->campos["numpar"],$rs->campos["masterip"]).'</TD>';
+ //$tablaHtml.='<TD>&nbsp;</TD>';
+ }
+ $tablaHtml.='</TR>'.chr(13);
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+ if ( $tablaHtml == "" ) {
+ // Equipo sin configuracion en base de datos.
+ $tablaHtml='<table id="tabla_conf" width="95%" class="tabla_listados_sin" align="center" border="0" cellpadding="0" cellspacing="1">'.chr(13);
+ $tablaHtml.='<tr><th align="center" >'.$TbMsg["CONFIG_NOCONFIG"].'</th><tr>'.chr(13);
+ }
+ else
+ {
+ // Equipo con configuracion en BD
+ // Incluimos primera linea de la tabla.
+ $inicioTabla='<TABLE id="tabla_conf" align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>'.chr(13);
+ $inicioTabla.=' <TR>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'. $TbMsg["PARTITION"] .'&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'. $TbMsg["PARTITION_TYPE"] .'&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'. $TbMsg["SO_NAME"] .'&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'. $TbMsg["IMAGE_TO_CREATE"] .'&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' <TH align=center>&nbsp;'. $TbMsg["DESTINATION_REPOSITORY"] .'&nbsp;</TH>'.chr(13);
+ $inicioTabla.=' </TR>'.chr(13);
+
+ $tablaHtml=$inicioTabla.$tablaHtml;
+
+ }
+
+
+ $tablaHtml.="</table>";
+ return($tablaHtml);
+}
+
+/*----------------------------------------------------------------------------------------------
+ Dibuja una tabla con los datos de particiones y parametros a elegir
+
+ Parametros:
+ - idordenador: El identificador del ordenador
+----------------------------------------------------------------------------------------------*/
+function tablaConfiguracionesSincronizacion1($idordenador)
+{
+ global $idcentro;
+ global $TbMsg;
+ global $cmd;
+
+ $tablaHtml="";
+
+ $cmd->texto="SELECT DISTINCT ordenadores_particiones.numdisk,ordenadores_particiones.numpar, ordenadores_particiones.idnombreso, nombresos.nombreso,
+ ordenadores_particiones.idimagen, ordenadores_particiones.codpar,
+ tipospar.clonable, perfilessoft.idperfilsoft,
+ nombresos.idnombreso, nombresos.nombreso
+ FROM ordenadores_particiones
+ INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
+ LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
+ LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
+ WHERE ordenadores_particiones.idordenador=".$idordenador."
+ ORDER BY ordenadores_particiones.numdisk, ordenadores_particiones.numpar";
+ //echo $cmd->texto;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir())
+ return($tablaHtml); // Error al abrir recordset
+ $rs->Primero();
+ $tbPAR="";
+ $actualDisk = 0;
+ $columns = 9;
+ while (!$rs->EOF){
+ if($actualDisk != $rs->campos["numdisk"]){
+ $actualDisk = $rs->campos["numdisk"];
+ $tablaHtml.='<td colspan="'.$columns.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #D4D0C8;">&nbsp;<strong>'.$TbMsg["DISK"].'&nbsp;'.$actualDisk.'</strong></td>'.chr(13);
+ }
+ //$swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]) && !empty($rs->campos["idperfilsoft"]);
+ $sw=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]);
+ if($sw){// Una partici�n es clonable si es cierta esta variable
+ $tbPAR.=$rs->campos["numpar"].";"; // Cadena con las particiones a procesar
+ $tablaHtml.='<tr id="trPar-'.$rs->campos["numpar"].'">';
+ $tablaHtml.='<td align=center><input type=radio name="particion" value="'.$rs->campos["codpar"].'"></td>';
+ $tablaHtml.='<td align="center">&nbsp;'.$rs->campos["numpar"].'&nbsp;</td>'; // N�mero de partici�n
+ $tablaHtml.='<td align=center>&nbsp;'.$rs->campos["nombreso"].'&nbsp;</td>'; // Nombre sistema operativo
+ $tablaHtml.='<td align=center>'.HTMLSELECT_imagenes($rs->campos["idimagen"]).'</td>';
+
+ $metodos="SYNC0="." ".chr(13);
+ $metodos.="SYNC1=".$TbMsg["SYNC1_DIR"].chr(13);
+ $metodos.="SYNC2=".$TbMsg["SYNC2_FILE"];
+ $tablaHtml.= '<TD align=center>'.HTMLCTESELECT($metodos,"desplesync_".$rs->campos["numpar"],"estilodesple","",1,100).'</TD>';
+
+ $tablaHtml.='<td align=center><input type=checkbox name="whole" id="whl-'.$rs->campos["numpar"].'"></td>';
+ $tablaHtml.='<td align=center><input type=checkbox name="paramb" checked id="eli-'.$rs->campos["numpar"].'"></td>';
+ $tablaHtml.='<td align=center><input type=checkbox name="compres" id="cmp-'.$rs->campos["numpar"].'"></td>';
+ $tablaHtml.='</tr>';
+ }
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+ echo $tablaHtml;
+ return($tbPAR);
+}
+
+/**
+ * La funcion tablaConfiguracionesSincronizacion1 sustituye a las funciones tablaConfiguracionesCrearImagenBasica y
+ * tablaConfiguracionesCrearSoftIncremental que eran llamadas desde comandos/CrearImagenBasica.php y comandos/CrearSoftIncremental.php
+ * Ahora en ambos ficheros se llama a la misma función ya que pintaban lo mismo en pantalla
+ *
+
+/*----------------------------------------------------------------------------------------------
+ Dibuja una tabla con los datos de particiones y parametros a elegir
+
+ Parametros:
+ - idordenador: El identificador del ordenador
+----------------------------------------------------------------------------------------------*
+function tablaConfiguracionesCrearImagenBasica($idordenador)
+{
+ global $idcentro;
+ global $TbMsg;
+ global $cmd;
+
+ $tablaHtml="";
+ $cmd->texto="SELECT DISTINCT ordenadores_particiones.numpar, ordenadores_particiones.idnombreso, nombresos.nombreso,
+ ordenadores_particiones.idimagen, ordenadores_particiones.codpar,
+ tipospar.clonable, perfilessoft.idperfilsoft,
+ nombresos.idnombreso, nombresos.nombreso
+ FROM ordenadores_particiones
+ INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
+ LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
+ LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
+ WHERE ordenadores_particiones.idordenador=$idordenador
+ ORDER BY ordenadores_particiones.numpar";
+ //echo $cmd->texto;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset
+ $rs->Primero();
+ $tbPAR="";
+ while (!$rs->EOF){
+ //$swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]) && !empty($rs->campos["idperfilsoft"]);
+ $sw=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]);
+ if($sw){// Una partici�n es clonable si es cierta esta variable
+ $tbPAR.=$rs->campos["numpar"].";"; // Cadena con las particiones a procesar
+ $tablaHtml.='<tr id="trPar-'.$rs->campos["numpar"].'">';
+ $tablaHtml.='<td align=center><input type=radio name="particion" value="'.$rs->campos["codpar"].'"></td>';
+ $tablaHtml.='<td align="center">&nbsp;'.$rs->campos["numpar"].'&nbsp;</td>'; // N�mero de partici�n
+ $tablaHtml.='<td align=center>&nbsp;'.$rs->campos["nombreso"].'&nbsp;</td>'; // Nombre sistema operativo
+ $tablaHtml.='<td align=center>'.HTMLSELECT_imagenes($rs->campos["idimagen"]).'</td>';
+ $tablaHtml.='<td align=center><input type=checkbox name="whole" id="whl-'.$rs->campos["numpar"].'"></td>';
+ $tablaHtml.='<td align=center><input type=checkbox name="paramb" checked id="eli-'.$rs->campos["numpar"].'"></td>';
+ $tablaHtml.='<td align=center><input type=checkbox name="compres" id="cmp-'.$rs->campos["numpar"].'"></td>';
+ $tablaHtml.='</tr>';
+ }
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+ echo $tablaHtml;
+ return($tbPAR);
+}
+
+
+/*----------------------------------------------------------------------------------------------
+ Dibuja una tabla con los datos de particiones y parametros a elegir
+
+ Parametros:
+ - idordenador: El identificador del ordenador
+----------------------------------------------------------------------------------------------*
+function tablaConfiguracionesCrearSoftIncremental($idordenador)
+{
+ global $idcentro;
+ global $TbMsg;
+ global $cmd;
+
+ $tablaHtml="";
+
+ $cmd->texto="SELECT DISTINCT ordenadores_particiones.numpar, ordenadores_particiones.idnombreso,
+ nombresos.nombreso, ordenadores_particiones.idimagen,
+ tipospar.clonable, perfilessoft.idperfilsoft,
+ nombresos.idnombreso, nombresos.nombreso
+ FROM ordenadores_particiones
+ INNER JOIN tipospar ON tipospar.codpar=ordenadores_particiones.codpar
+ LEFT OUTER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso
+ LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft
+ WHERE ordenadores_particiones.idordenador=$idordenador
+ ORDER BY ordenadores_particiones.numpar";
+ //echo $cmd->texto;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return($tablaHtml); // Error al abrir recordset
+ $rs->Primero();
+ $tbPAR="";
+ while (!$rs->EOF){
+ //$swcc=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]) && !empty($rs->campos["idperfilsoft"]);
+ $sw=$rs->campos["clonable"] && !empty($rs->campos["idnombreso"]);
+ if($sw){// Una partici�n es clonable si es cierta esta variable
+ $tbPAR.=$rs->campos["numpar"].";"; // Cadena con las particiones a procesar
+ $tablaHtml.='<TR id="trPar-'.$rs->campos["numpar"].'">';
+ $tablaHtml.='<td align=center ><input type=radio name="particion" value="'.$rs->campos["numpar"].'"></td>';
+ $tablaHtml.='<td align="center">&nbsp;'.$rs->campos["numpar"].'&nbsp;</td>'; // N�mero de partici�n
+ $tablaHtml.='<td align=center>&nbsp;'.$rs->campos["nombreso"].'&nbsp;</td>'; // Nombre sistema operativo
+ $tablaHtml.='<td align=center>'.HTMLSELECT_imagenes($rs->campos["idimagen"]).'</td>';
+ $tablaHtml.='<td align=center><input type=checkbox name="whole" id="whl-'.$rs->campos["numpar"].'"></td>';
+ $tablaHtml.='<td align=center><input type=checkbox name="paramb" checked id="eli-'.$rs->campos["numpar"].'"></td>';
+ $tablaHtml.='<td align=center><input type=checkbox name="compres" id="cmp-'.$rs->campos["numpar"].'"></td>';
+ $tablaHtml.='</TR>';
+ }
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+ echo $tablaHtml;
+ return($tbPAR);
+}
+<<<<<<< .mine
+/**/
+
diff --git a/admin/WebConsole/includes/tftputils.php b/admin/WebConsole/includes/tftputils.php
new file mode 100644
index 00000000..13b126f3
--- /dev/null
+++ b/admin/WebConsole/includes/tftputils.php
@@ -0,0 +1,216 @@
+<?php
+/**
+ * @file tftptools.php
+ * @brief Utilidades para menejar ficheros de arranque TFTP/PXE.
+ * @version 1.0.5
+ * @copyright GNU Public License v3+
+ */
+
+
+// Ficheros de inclusión.
+include_once("../includes/ctrlacc.php");
+include_once("../clases/AdoPhp.php");
+
+
+/**
+ * @brief Sustituye espacio por "_" y quita acentos y tildes.
+ * @param cadena Cadena a modificar.
+ * @return string Cadena modificada.
+ * @versión 1.0.5 - Primera versión, adaptada de NetBoot Avanzado.
+ * @author
+ * @date
+*/
+function cleanString ($cadena) {
+ return strtr ($cadena, " áéíóúñçÁÉÍÓÚÑÇ", "_aeiouncAEIOUNC");
+}
+
+
+/**
+ * Función que obtiene la versión del Kernel del cliente que se ejecuta durante el
+ * proceso de arranque mediante TFTP/PXE.
+ * @brief Obtiene la versión del Kernel usada en arranque TFTP/PXE.
+ * @return float Versión del Kernel (Versión.Revisión, con 2 decimales).
+ * @versión 1.0.5 - Versión inicial.
+ * @authors Ramón Gómez - ETSII Universidad de Sevilla
+ * @date 2013-04-11
+ */
+function clientKernelVersion () {
+ $tftpDir = "/opt/opengnsys/tftpboot"; // Directorio TFTP.
+ $kernelFile = "$tftpDir/ogclient/ogvmlinuz"; // Fichero del Kernel
+
+ // Devolver versión del Kernel (Versión.Revisión, con 2 decimales).
+ return exec ("file -bkr $kernelFile 2>/dev/null | awk '/Linux/ {for(i=1;i<=NF;i++) if(\$i~/version/) {v=\$(i+1); printf(\"%d\",v); sub(/[0-9]*\./,\"\",v); printf(\".%02d\",v)}}'");
+}
+
+
+/**
+ * createBootMode ($cmd, $bootopt, $hostid, $lang)
+ * @brief Crea un fichero PXE para el ordenador basado en la plantilla indicada y usando
+ * los datos almacenados en la BD.
+ * @param {Object} cmd Objeto de conexión a la base de datos.
+ * @param {String} bootopt Plantilla de arranque PXE.
+ * @param {Number} hostid Id. del ordenador.
+ * @param {String} lang Idioma de arranque.
+ * @versión 1.0.5 - Primera versión, adaptada de NetBoot Avanzado.
+ * @authors Ramón Gómez - ETSII Universidad de Sevilla
+ * @date 2013-04-25
+ */
+function createBootMode ($cmd, $bootopt, $hostid, $lang) {
+
+ // Plantilla con las opciones por defecto.
+ if (empty ($bootopt)) $bootopt = "00unknown";
+
+ // Actualizar opción de arranque para el equipo.
+ $cmd->CreaParametro("@arranque",$bootopt,0);
+ $cmd->CreaParametro("@idordenador",$hostid,1);
+ $cmd->texto="UPDATE ordenadores SET arranque=@arranque WHERE idordenador=@idordenador";
+ $cmd->Ejecutar();
+
+ // Obtener información de la base de datos.
+ $cmd->texto="SELECT ordenadores.nombreordenador AS hostname, ordenadores.ip AS ip,
+ ordenadores.mac AS mac, ordenadores.netiface AS netiface,
+ aulas.netmask AS netmask, aulas.router AS router,
+ aulas.dns AS dns, aulas.proxy AS proxy,
+ aulas.nombreaula AS grupo, repositorios.ip AS iprepo,
+ (SELECT ipserveradm FROM entornos LIMIT 1) AS ipserveradm,
+ menus.resolucion AS vga, perfileshard.winboot AS winboot
+ FROM ordenadores
+ JOIN aulas USING (idaula)
+ JOIN repositorios USING (idrepositorio)
+ LEFT JOIN menus USING (idmenu)
+ LEFT JOIN perfileshard USING (idperfilhard)
+ WHERE ordenadores.idordenador='$hostid'";
+
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return;
+ $rs->Primero();
+ $hostname=$rs->campos["hostname"];
+ $ip=$rs->campos["ip"];
+ $mac=$rs->campos["mac"];
+ $netiface=$rs->campos["netiface"];
+ $netmask=$rs->campos["netmask"];
+ $router=$rs->campos["router"];
+ $dns=$rs->campos["dns"];
+ $proxy=$rs->campos["proxy"];
+ $group=cleanString($rs->campos["grupo"]);
+ $repo=$rs->campos["iprepo"];
+ $server=$rs->campos["ipserveradm"];
+ $vga=$rs->campos["vga"];
+ $winboot=$rs->campos["winboot"];
+
+ $rs->Cerrar();
+
+ // Componer código de idioma para el parámetro de arranque.
+ switch ($lang) {
+ case "eng":
+ $lang="en_GB";
+ break;
+ case "esp":
+ $lang="es_ES";
+ break;
+ case "cat":
+ $lang="ca_ES";
+ break;
+ }
+
+ // Componer parámetros del kernel.
+ $infohost=" LANG=$lang".
+ " ip=$ip:$server:$router:$netmask:$hostname:$netiface:none" .
+ " group=$group" .
+ " ogrepo=$repo" .
+ " oglive=$repo" .
+ " oglog=$server" .
+ " ogshare=$server";
+ // Añadir parámetros opcionales.
+ if (! empty ($dns)) { $infohost.=" ogdns=$dns"; }
+ if (! empty ($proxy)) { $infohost.=" ogproxy=$proxy"; }
+ if (! empty ($winboot)) { $infohost.=" winboot=$winboot"; }
+ // Comprobar si se usa el parámetro "vga" (número de 3 cifras) o "video" (cadena).
+ if (! empty ($vga)) {
+ // UHU - Se sustituye la función is_int por is_numeric, ya que al ser un string no funciona bien con is_int
+ if (is_numeric($vga) && strlen($vga) == 3) {
+ $infohost.=" vga=$vga";
+ } else {
+ $infohost.=" video=$vga";
+ }
+ }
+
+ // Obtener nombre de fichero PXE a partir de la MAC del ordenador cliente.
+ $pxedir="/opt/opengnsys/tftpboot/menu.lst";
+ $mac = substr($mac,0,2) . ":" . substr($mac,2,2) . ":" . substr($mac,4,2) . ":" . substr($mac,6,2) . ":" . substr($mac,8,2) . ":" . substr($mac,10,2);
+ $macfile="$pxedir/01-" . str_replace(":","-",strtoupper($mac));
+
+ // Crear fichero de arranque a partir de la plantilla y los datos del cliente.
+ // UHU - si el parametro vga no existe, no se quita.
+ if (! empty ($vga)) {
+ exec ("sed -e 's|vga=...||g' -e 's|INFOHOST|$infohost|g' $pxedir/templates/$bootopt > $macfile");
+ }
+ else{
+ exec ("sed -e 's|INFOHOST|$infohost|g' $pxedir/templates/$bootopt > $macfile");
+ }
+ exec ("chmod 777 $macfile");
+}
+
+
+/**
+ * deleteBootFile ($mac)
+ * @brief Borra el fichero PXE del ordenador con la dirección MAC correspondiente.
+ * @param {String} mac Dirección MAC del ordenador (sin caracteres ":").
+ * @versión 1.0.5 - Primera versión, adaptada de NetBoot Avanzado.
+ * @authors Ramón Gómez - ETSII Universidad de Sevilla
+ * @date 2013-04-25
+ */
+function deleteBootFile ($mac) {
+
+ // Obtener nombre de fichero a partir de dirección MAC.
+ $pxedir="/opt/opengnsys/tftpboot/menu.lst";
+ $macfile = "$pxedir/01-" . substr($mac,0,2) . "-" . substr($mac,2,2) . "-" . substr($mac,4,2) . "-" . substr($mac,6,2) . "-" . substr($mac,8,2) . "-" . substr($mac,10,2);
+ // Eliminar el fichero.
+ exec ("rm -f $macfile");
+}
+
+/**
+ * updateBootMode ($cmd, $idfield, $idvalue, $lang)
+ * @brief Ejecuta la función para componer fichero PXE para todos los clientes que cumplan
+ * con un determinado criterio de búsqueda basado en clave ejena.
+ * @param {Object} cmd Objeto de conexión con la base de datos.
+ * @param {String} idfield Campo identificador de la clave ajena para buscar ordenadores.
+ * @param {Number} idvalue Valor a buscar en el ídentificador de la clave ajena.
+ * @param {String} lang Idioma de arranque.
+ * @versión 1.0.5 - Primera versión, adaptada de NetBoot Avanzado.
+ * @authors Ramón Gómez - ETSII Universidad de Sevilla
+ * @date 2013-04-25
+ */
+function updateBootMode ($cmd, $idfield, $idvalue, $lang) {
+
+ // Salir si los es nulo el campo de identificador y su valor de índice.
+ if (empty ($idfield) or empty ($idvalue))
+ return;
+ // Control para evitar ataques XSS.
+ $idfield = mysql_real_escape_string ($idfield);
+ $idvalue = mysql_real_escape_string ($idvalue);
+
+ // Obtener los ordenadores asociados al aula y sus plantillas de arranque.
+ $cmd->texto = "SELECT idordenador AS hostid, arranque AS bootopt
+ FROM ordenadores
+ WHERE $idfield=$idvalue";
+ $rs = new Recordset;
+ $rs->Comando=&$cmd;
+ if ($rs->Abrir()) {
+ $rs->Primero();
+ while (! $rs->EOF) {
+ $hostid=$rs->campos["hostid"];
+ if (! empty ($hostid)) {
+ $bootopt=$rs->campos["bootopt"];
+ // Volver a crear el fichero de arranque.
+ createBootMode ($cmd, $bootopt, $hostid, $lang);
+ }
+ $rs->Siguiente();
+ }
+ $rs->Cerrar();
+ }
+}
+
+?>
+
diff --git a/admin/WebConsole/jscripts/boot_grub4dos.js b/admin/WebConsole/jscripts/boot_grub4dos.js
new file mode 100644
index 00000000..7deffdf4
--- /dev/null
+++ b/admin/WebConsole/jscripts/boot_grub4dos.js
@@ -0,0 +1,76 @@
+// *************************************************************************************************************************************************
+// Libreria de scripts de Javascript
+// Autor: Alberto García Padilla (Universidad de Málaga)
+// Fecha Creación: 2012
+// Fecha Última modificación: Mayo-2012
+// Nombre del fichero: boot_grub4dos.js
+// Descripción :
+// Este fichero implementa las funciones javascript del fichero boot_grub4dos.php
+// *************************************************************************************************************************************************
+//________________________________________________________________________________________________________
+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;
+} \ No newline at end of file
diff --git a/admin/WebConsole/jscripts/constantes.js b/admin/WebConsole/jscripts/constantes.js
index 59315348..33d35675 100644
--- a/admin/WebConsole/jscripts/constantes.js
+++ b/admin/WebConsole/jscripts/constantes.js
@@ -116,3 +116,9 @@ var MSG_NOTIFICACION=0x02; // Respuesta a la ejecución un comando
var MSG_PETICION=0x03; // Petición de cualquier actuación
var MSG_RESPUESTA=0x04; // Respuesta a una petición
var MSG_INFORMACION=0x05; // Envío de cualquier información sin espera de confirmación o respuesta
+
+
+// Tipos de imagenes
+var IMAGENES_MONOLITICAS=0x01;
+var IMAGENES_BASICAS=0x02;
+var IMAGENES_INCREMENTALES=0x03;
diff --git a/admin/WebConsole/jscripts/imagenes.js b/admin/WebConsole/jscripts/imagenes.js
index 9a2d2a6f..327e6f42 100644
--- a/admin/WebConsole/jscripts/imagenes.js
+++ b/admin/WebConsole/jscripts/imagenes.js
@@ -26,3 +26,39 @@ function insertar_imagenincremental(){
var whref="../varios/imagenincremental.php?idimagen="+identificador+"&descripcionimagen="+descripcionimagen
window.open(whref,"frame_contenidos")
}
+//________________________________________________________________________________________________________
+//
+// Inserta nueva imagen
+//________________________________________________________________________________________________________
+//
+function insertar_imagen(litamb,tipoimg)
+{
+ reset_contextual(-1,-1) // Oculta menu contextual
+ var identificador=currentNodo.toma_identificador()
+ var whref="../propiedades/propiedades_imagenes.php?opcion="+op_alta+"&grupoid="+identificador+"&litamb="+litamb+"&tipoimg="+tipoimg
+ window.open(whref,"frame_contenidos");
+}
+//________________________________________________________________________________________________________
+//
+// Modificar datos de imagen
+//________________________________________________________________________________________________________
+//
+function modificar_imagen(tipoimg)
+{
+ reset_contextual(-1,-1) // Oculta menu contextual
+ var identificador=currentNodo.toma_identificador()
+ var whref="../propiedades/propiedades_imagenes.php?opcion="+op_modificacion+"&tipoimg="+tipoimg+"&identificador="+identificador
+ window.open(whref,"frame_contenidos");
+}
+//________________________________________________________________________________________________________
+//
+// Eliminar una imagen
+//________________________________________________________________________________________________________
+//
+function eliminar_imagen(tipoimg)
+{
+ reset_contextual(-1,-1) // Oculta menu contextual
+ var identificador=currentNodo.toma_identificador()
+ var whref="../propiedades/propiedades_imagenes.php?opcion="+op_eliminacion+"&tipoimg="+tipoimg+"&identificador="+identificador
+ window.open(whref,"frame_contenidos");
+}
diff --git a/admin/WebConsole/jscripts/propiedades_aulas.js b/admin/WebConsole/jscripts/propiedades_aulas.js
index 61126a6f..947ab1d5 100644
--- a/admin/WebConsole/jscripts/propiedades_aulas.js
+++ b/admin/WebConsole/jscripts/propiedades_aulas.js
@@ -93,26 +93,36 @@ function comprobar_datos(){
return true;
}
+/* HORA DE RESERVA TEMPORALMENTE DESHABILITADA.
if (parseInt(document.fdatos.horaresevini.value)>parseInt(document.fdatos.horaresevfin.value)) {
alert(TbMsg[3]);
validation_highlight (document.fdatos.horaresevini);
validation_highlight (document.fdatos.horaresevfin);
return(false);
}
+*/
var form = document.fdatos;
+ // Si se activa la validación, comprobar que se incluyen los datos adecuados.
+ if (form.validacion.options[form.validacion.selectedIndex].value == 1 && (form.paginalogin.value == '' || form.paginavalidacion.value == '')) {
+ alert(TbMsg[14]);
+ validation_highlight (document.fdatos.paginalogin);
+ validation_highlight (document.fdatos.paginavalidacion);
+ return(false);
+ }
+ // Validación general de datos del formulario.
return validate (form.nombreaula, validate_notnull, 0) &&
validate (form.puestos, validate_number_notnull, 1) &&
validate (form.router, validate_ipadress_notnull, 4) &&
- validate (form.netmask, validate_ipadress_notnull, 5) &&
+ validate (form.netmask, validate_ipadress_notnull, 5) &&
+ validate (form.dns, validate_ipadress, 12) &&
+ validate (form.proxy, validate_url, 13) &&
validate (form.modp2p, validate_notnull, 6) &&
- validate (form.timep2p, validate_number_notnull, 7) &&
- validate (form.modomul, validate_notnull, 8) &&
- validate (form.ipmul, validate_ipadress_notnull, 9) &&
- validate (form.pormul, validate_notnull, 10) &&
+ validate (form.timep2p, validate_number_notnull, 7) &&
+ validate (form.modomul, validate_notnull, 8) &&
+ validate (form.ipmul, validate_ipadress_notnull, 9) &&
+ validate (form.pormul, validate_notnull, 10) &&
validate (form.velmul, validate_number_notnull, 11);
-
- return(true);
}
//________________________________________________________________________________________________________
diff --git a/admin/WebConsole/jscripts/propiedades_imagenes.js b/admin/WebConsole/jscripts/propiedades_imagenes.js
index 2cecc566..0161f715 100644
--- a/admin/WebConsole/jscripts/propiedades_imagenes.js
+++ b/admin/WebConsole/jscripts/propiedades_imagenes.js
@@ -2,7 +2,7 @@
// Libreria de scripts de Javascript
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
// Fecha Creación: 2009-2010
-// Fecha Última modificación: Agosto-2010
+// Fecha Última modificación: Noviembre-2012
// Nombre del fichero: propiedades_imagenes.js
// Descripción :
// Este fichero implementa las funciones javascript del fichero propiedades_imagenes.php
@@ -74,6 +74,7 @@ function confirmar(op){
// Comprobar_datos
//________________________________________________________________________________________________________
function comprobar_datos(){
+
function validate (field, validator, msgi) {
if (!validator (field.value)) {
alert(TbMsg[msgi]);
@@ -82,15 +83,20 @@ function comprobar_datos(){
}
return true;
}
-
-
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);
-
+ if(form.tipoimg.getAttribute("value")!=IMAGENES_INCREMENTALES){
+ 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);
+ }
+ else{
+ return validate (form.nombreca, validate_nameimagefile, 3) &&
+ validate (form.nombreca, validate_notnull, 3) &&
+ validate (form.descripcion, validate_notnull, 0) &&
+ validate (form.imagenid, validate_notnull, 8);
+ }
return(true);
}
diff --git a/admin/WebConsole/jscripts/propiedades_ordenadores.js b/admin/WebConsole/jscripts/propiedades_ordenadores.js
index 22de9adf..21482f8f 100644
--- a/admin/WebConsole/jscripts/propiedades_ordenadores.js
+++ b/admin/WebConsole/jscripts/propiedades_ordenadores.js
@@ -74,26 +74,26 @@ function confirmar(op){
// Comprobar_datos
//________________________________________________________________________________________________________
function comprobar_datos(){
- if (document.fdatos.nombreordenador.value=="") {
- alert(TbMsg[0]);
- document.fdatos.nombreordenador.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.ip.value=="") {
- alert(TbMsg[1]);
- document.fdatos.ip.focus();
- return(false);
- }
- if (document.fdatos.mac.value=="") {
- alert(TbMsg[2]);
- document.fdatos.mac.focus();
- return(false);
- }
- var p=document.fdatos.idrepositorio.selectedIndex
- if (p==0){
- alert(TbMsg[5])
- document.forms.fdatos.idrepositorio.focus()
- return(false)
- }
- return(true);
+
+ var form = document.fdatos;
+ // Si se activa la validación, comprobar que se incluyen los datos adecuados.
+ if (form.validacion.options[form.validacion.selectedIndex].value == 1 && (form.paginalogin.value == '' || form.paginavalidacion.value == '')) {
+ alert(TbMsg[6]);
+ validation_highlight (document.fdatos.paginalogin);
+ validation_highlight (document.fdatos.paginavalidacion);
+ return(false);
+ }
+
+ return validate (form.nombreordenador, validate_notnull, 0) &&
+ validate (form.ip, validate_ipadress_notnull, 1) &&
+ validate (form.mac, validate_macaddress_notnull, 2) &&
+ validate (form.idrepositorio, validate_number_notnull, 5) ;
}
diff --git a/admin/WebConsole/jscripts/validators.js b/admin/WebConsole/jscripts/validators.js
index e0359505..b4f40801 100644
--- a/admin/WebConsole/jscripts/validators.js
+++ b/admin/WebConsole/jscripts/validators.js
@@ -17,11 +17,18 @@
*/
+// Validar expresión regular.
function validate_expr(value, epx) {
var expr = new RegExp(epx);
return (value.search(expr) == 0);
}
+// Validar expresión ignorando diferencias entre mayúsculas y minúsculas.
+function validate_expr_nocase(value, epx) {
+ var expr = new RegExp(epx, "i");
+ return (value.search(expr) == 0);
+}
+
function validate_number(value) {
return validate_expr(value, "^\\d*$");
}
@@ -42,15 +49,39 @@ function validate_alphanum_notnull(value) {
return validate_number(value) && validate_notnull(value);
}
-
+// Validar dirección IPv4.
function validate_ipadress(value) {
- return validate_expr(value, "^\\d+\\.\\d+\.\\d+\\.\\d+$");
+ var octet = '(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])';
+ var regex = '^((?:' + octet + '\\.){3}' + octet + ')?$';
+ return validate_expr(value, regex);
}
function validate_ipadress_notnull(value) {
return validate_ipadress(value) && validate_notnull(value);
}
+// Validar direccion MAC
+function validate_macaddress(value) {
+ var regex = '^([0-9a-fA-F]){12}$'
+ return validate_expr(value, regex);
+}
+
+function validate_macaddress_notnull(value) {
+ return validate_macaddress(value) && validate_notnull(value);
+}
+
+// Validar URL.
+function validate_url(value) {
+ var octet = '(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])';
+ var regex = '^((ht|f)tps?:\/\/(([a-z0-9]+([\.\-a-z0-9]+)?\.[a-z]{2,5})|((' + octet + '\\.){3}' + octet + '))(:[0-9]{2,5})?(\/.*)?)?$';
+ return validate_expr_nocase(value, regex);
+
+}
+
+function validate_url_notnull(value) {
+ return validate_url(value) && validate_notnull(value);
+}
+
function validate_nameimagefile(value) {
return validate_expr(value, "^[0-9a-zA-Z]*$");
}
@@ -61,3 +92,4 @@ function validation_highlight(field) {
field.style.border = "1px solid red";
field.style.background = "#fee";
}
+
diff --git a/admin/WebConsole/menus/examplemenu.html b/admin/WebConsole/menus/examplemenu.html
index e5fa336c..8ca86f4f 100644
--- a/admin/WebConsole/menus/examplemenu.html
+++ b/admin/WebConsole/menus/examplemenu.html
@@ -57,6 +57,11 @@
<dd>The installation process takes a few minutes.</dd>
</dl>
+ <dl class="windows">
+ <dt><a href="commandwithconfirmation:/opt/opengnsys/interfaceAdm/RestaurarImagenBasica 1 1 WINXPRD2 10.1.15.3 0000 0" title="Restore Windows Image" accesskey="1">Restore Windows Image.</a></dt>
+ <dd>Restore Windows Image using synchronization.</dd>
+ </dl>
+
<dl class="linux">
<dt><a href="command:bootOs 1 2" title="Init session GNU/Linux" accesskey="2">Init session GNU/Linux.</a></dt>
<dd>Normal boot <acronym title="GNU's not Unix">GNU</acronym>/Linux without changes.</dd>
diff --git a/admin/WebConsole/menus/menuejemplo.html b/admin/WebConsole/menus/menuejemplo.html
index 78701260..57a52a22 100644
--- a/admin/WebConsole/menus/menuejemplo.html
+++ b/admin/WebConsole/menus/menuejemplo.html
@@ -25,7 +25,7 @@
dl {
background: transparent url('images/xp_peque.png') no-repeat top left;
padding: 0 0 1em 5em;
- margin: 5px 50px;
+ margin: 2em 10em;
}
dl.windows {
@@ -41,34 +41,43 @@
}
dt { float: left;}
- dd { margin: 1em 20em; }
+ dd { margin: 1em 10em 1em 20em; }
</style>
</head>
<body>
-
<h1>Men&uacute; de opciones</h1>
+
<dl class="windows">
- <dt><a href="command:bootOs 1 1" title="Iniciar sesi&oacute;n de Windows" accesskey="1">Arrancar Windows.</a></dt>
+ <dt><a href="command:bootOs 1 1" title="Iniciar sesi&oacute;n de Windows, accesskey: 1" accesskey="1">[1] Arrancar Windows.</a></dt>
<dd>Arranque normal de Windows sin modificaciones.</dd>
- <dt><a href="commandwithconfirmation:restoreImage REPO windows 1 1" title="Formatear el disco e instalar el sistema operativo Windows" accesskey="3">Instalar Windows.</a></dt>
+ <dt><a href="commandwithconfirmation:restoreImage REPO windows 1 1" title="Formatear el disco e instalar el sistema operativo Windows, accesskey: 2" accesskey="2">[2] Instalar Windows. </a></dt>
<dd>El proceso de instalaci&oacute;n tardar&aacute; unos minutos.</dd>
</dl>
+ <!-- dl class="windows">
+ <dt><a href="commandwithconfirmation:/opt/opengnsys/interfaceAdm/RestaurarImagenBasica 1 1 WINXPRD2 10.1.15.3 0000 0" title="Sincronizar imagen de Windows, accesskey: 2" accesskey="2">Sincronizar Imagen Window.</a></dt>
+ <dd>Restaurar Imagen Windows con sincronizaci&oacute;n.</dd>
+ </dl -->
+
<dl class="linux">
- <dt><a href="command:bootOs 1 2" title="Iniciar sesi&oacute;n de GNU/Linux" accesskey="2">Arrancar GNU/Linux.</a></dt>
+ <dt><a href="command:bootOs 1 2" title="Iniciar sesi&oacute;n de Ubuntu 12, accesskey: 3" accesskey="3">[3] Arrancar GNU/Linux. </a></dt>
<dd>Arranque normal de <acronym title="GNU's not Unix">GNU</acronym>/Linux sin modificaciones.</dd>
- <dt><a href="commandwithconfirmation:restoreImage REPO linux 1 2" title="Formatear el disco e instalar el sistema operativo GNU/Linux" accesskey="4">Instalar GNU/Linux.</a></dt>
+
+ <dt><a href="commandwithconfirmation:restoreImage REPO linux 1 2" title="Formatear el disco e instalar el sistema operativo GNU/Linux, accesskey: 4" accesskey="4">[4] Instalar GNU/Linux. </a></dt>
<dd>El proceso de instalaci&oacute;n tardar&aacute; unos minutos.</dd>
</dl>
-
+
<dl class="apagar">
- <dt><a href="command:poweroff" title="Apagar la m&aacute;quina" accesskey="5">Apagar.</a></dt>
+ <dt><a href="command:poweroff" title="Apagar la m&aacute;quina, accesskey: 0" accesskey="0">[0] Apagar. </a></dt>
<dd>Apagar el ordenador.</dd>
- <dt><a href="command:reboot" title="Reiniciar la m&aacute;quina" accesskey="6">Reiniciar.</a></dt>
+
+ <dt><a href="command:reboot" title="Reiniciar la m&aacute;quina, accesskey: 6" accesskey="6">[6] Reiniciar. </a></dt>
<dd>Reiniciar el ordenador.</dd>
</dl>
+
</body>
</html>
+
diff --git a/admin/WebConsole/nada.php b/admin/WebConsole/nada.php
index d12380bb..8df19673 100644
--- a/admin/WebConsole/nada.php
+++ b/admin/WebConsole/nada.php
@@ -1,9 +1,238 @@
+<?php
+include_once("./includes/ctrlacc.php");
+include_once("./idiomas/php/".$idioma."/nada_".$idioma.".php");
+// ##########################################################################################################
+// ############### PARA SABER QUE IP TIENE EL DISPOSITIVO QUE ESTA UTILIZANDO OPENGNSYS ###################
+// ##########################################################################################################
+//Para saber la IP con Proxy o sin el
+
+function getRemoteInfo () {
+ $proxy="";
+ $IP = "";
+ if (isSet($_SERVER)) {
+ if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) {
+ $IP = $_SERVER["HTTP_X_FORWARDED_FOR"];
+ $proxy = $_SERVER["REMOTE_ADDR"];
+ } elseif (isSet($_SERVER["HTTP_CLIENT_IP"])) {
+ $IP = $_SERVER["HTTP_CLIENT_IP"];
+ } else {
+ $IP = $_SERVER["REMOTE_ADDR"];
+ }
+ } else {
+ if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
+ $IP = getenv( 'HTTP_X_FORWARDED_FOR' );
+ $proxy = getenv( 'REMOTE_ADDR' );
+ } elseif ( getenv( 'HTTP_CLIENT_IP' ) ) {
+ $IP = getenv( 'HTTP_CLIENT_IP' );
+ } else {
+ $IP = getenv( 'REMOTE_ADDR' );
+ }
+ }
+ if (strstr($IP, ',')) {
+ $ips = explode(',', $IP);
+ $IP = $ips[0];
+ }
+ $RemoteInfo[0]=$IP;
+ $RemoteInfo[1]=@GetHostByAddr($IP);
+ $RemoteInfo[2]=$proxy;
+
+ return $RemoteInfo[0];
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// ##########################################################################################################
+// ############### PARA SABER QUE TIPO DISPOSITIVO ESTA UTILIZANDO OPENGNSYS ##############################
+// ##########################################################################################################
+$device="";
+$device = strtolower($_SERVER['HTTP_USER_AGENT']);
+if(stripos($device,'iphone') == TRUE ){$device="iphone";$tipodevice="Iphone / Ipad";$ipreal=getRemoteInfo();$_SESSION["ipdevice"]=$ipreal;}
+elseif (stripos($device,'ipad') == TRUE) {$device="ipad";$tipodevice="Ipad / Iphone";$ipreal=getRemoteInfo();$_SESSION["ipdevice"]=$ipreal;}
+elseif (stripos($device,'android') == TRUE) {$device="android";$tipodevice="Movil / Tablet";$ipreal=getRemoteInfo();$_SESSION["ipdevice"]=$ipreal;}
+elseif (stripos($device,'linux') == TRUE) {$device="linux";$tipodevice="Linux";$ipreal=getRemoteInfo();$_SESSION["ipdevice"]=$ipreal;}
+elseif (stripos($device,'macintosh') == TRUE) {$device="macintosh";$tipodevice="Macintosh";$ipreal=getRemoteInfo();$_SESSION["ipdevice"]=$ipreal;}
+else{$device="0";$tipodevice="PC";}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+// ##########################################################################################################
+// ################################ PARA SABER QUE SISTEMA DEL DISPOSITIVO ################################
+// ##########################################################################################################
+$sistem="";
+$buscasistem="";
+$buscasistem=strtolower($_SERVER['HTTP_USER_AGENT']);
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// SISTEMAS WINDOWS //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+if(stripos($buscasistem,'windows nt 6.2') == TRUE ){$sistem="Windows 8";}
+if(stripos($buscasistem,'windows nt 6.1') == TRUE ){$sistem="Windows 7";}
+if(stripos($buscasistem,'windows nt 6.0') == TRUE ){$sistem="Windows Vista/Server 2008";}
+if(stripos($buscasistem,'windows nt 5.2') == TRUE ){$sistem="Windows Server 2003";}
+if(stripos($buscasistem,'windows nt 5.1') == TRUE ){$sistem="Windows XP";}
+if(stripos($buscasistem,'windows nt 5.0') == TRUE ){$sistem="Windows 2000";}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// SISTEMAS APPLE //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+if(stripos($buscasistem,'ipad') == TRUE ){$sistem="iOS";}
+if(stripos($buscasistem,'iphone') == TRUE ){$sistem="iOS";}
+if ($device == "macintosh" ){$sistem="Mac OSX";}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// SISTEMAS LINUX //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+if(stripos($buscasistem,'ubuntu') == TRUE ){$sistem="Ubuntu";}
+if(stripos($buscasistem,'red hat') == TRUE ){$sistem="Red Hat";}
+if(stripos($buscasistem,'centos') == TRUE ){$sistem="CentOs";}
+if(stripos($buscasistem,'suse') == TRUE ){$sistem="Open Suse";}
+if(stripos($buscasistem,'mandriva') == TRUE ){$sistem="Mandriva";}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// SISTEMAS ANDROID //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+if(stripos($buscasistem,'android') == TRUE ){$sistem="Android";}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ##########################################################################################################
+// ########################## PARA SABER QUE VERSION DEL SISTEMA DEL DISPOSITIVO ##########################
+// ##########################################################################################################
+$versistem="";
+$buscaversistem="";
+$buscaversistem=strtolower($_SERVER['HTTP_USER_AGENT']);
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// VERSION WINDOWS //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+if(stripos($buscaversistem,'windows nt 6.2') == TRUE ){$versistem="NT 6.2";}
+if(stripos($buscaversistem,'windows nt 6.1') == TRUE ){$versistem="NT 6.1";}
+if(stripos($buscaversistem,'windows nt 6.0') == TRUE ){$versistem="NT 6.0";}
+if(stripos($buscaversistem,'windows nt 5.2') == TRUE ){$versistem="NT 5.2";}
+if(stripos($buscaversistem,'windows nt 5.1') == TRUE ){$versistem="NT 5.1";}
+if(stripos($buscaversistem,'windows nt 5.0') == TRUE ){$versistem="NT 5.0";}
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// VERSION APPLE //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+if(stripos($buscaversistem,'os x') == TRUE ){
+$buscaversistemapple="";
+$buscaversistemapple=$_SERVER['HTTP_USER_AGENT'];
+$buscaversistemapple=str_replace("OS","OS:",$buscaversistemapple);
+$buscaversistemapple=str_replace("like",":like",$buscaversistemapple);
+$buscaversistemapple=split(":",$buscaversistemapple);
+$versistem=$buscaversistemapple[1];}
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// VERSION LINUX //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+if(stripos($buscaversistem,'linux') == TRUE ){
+$buscaversistemlinux="";
+$buscaversistemlinux=str_replace(")",";",$buscaversistem);
+$buscaversistemlinux=split(";",$buscaversistemlinux);
+$versistem=$buscaversistemlinux[3];
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// VERSION ANDROID //
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+if(stripos($buscaversistem,'android') == TRUE ){
+$buscaversistemandroid="";
+$buscaversistemandroid=str_replace(")",";",$buscaversistem);
+$buscaversistemandroid=split(";",$buscaversistemandroid);
+$versistem=$buscaversistemandroid[2];
+}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ##########################################################################################################
+// ########################## PARA SABER QUE NAVEGADOR DEL SISTEMA DEL DISPOSITIVO ########################
+// ##########################################################################################################
+$buscanav="";
+$buscanav=strtolower($_SERVER['HTTP_USER_AGENT']);
+if(stripos($buscanav,'firefox') == TRUE ){$nav="Firefox";}
+if(stripos($buscanav,'safari') == TRUE ){$nav="Safari";}
+if(stripos($buscanav,'msie') == TRUE ){$nav="Internet Explorer";}
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// ##########################################################################################################
+// ########################## PARA SABER VERSION DEL NAVEGADOR DEL DISPOSITIVO ############################
+// ##########################################################################################################
+$buscavernav="";
+$buscavernav=strtolower($_SERVER['HTTP_USER_AGENT']);
+$vernav=end(explode("/",$buscavernav));
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+
+?>
+
+
+<?php
+if ($device == "ipad" || $device == "iphone" || $device == "android" )
+{
+?>
<HTML>
<HEAD>
- <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+ <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+ <LINK rel="stylesheet" type="text/css" href="./estilos.css">
<SCRIPT language="javascript">
</SCRIPT>
</HEAD>
<BODY>
+
+<table width="100%" border="0">
+ <tr>
+ <td colspan="3" align="center">&nbsp;</td>
+ </tr>
+ <tr>
+ <td colspan="3" align="center"><SPAN align=center class=cabeceras><font size="4"><?php echo $TbMsg[0] ;?></font></SPAN></td>
+ </tr>
+ <tr>
+ <td colspan="3" align="center"><SPAN align=center class=cabeceras><font size="4"><?php $versionfile="../doc/VERSION.txt";if (file_exists ($versionfile)){include ($versionfile);} ;?></font></SPAN></td>
+ </tr>
+ <tr>
+ <td colspan="3" align="center">&nbsp;</td>
+ </tr>
+ <tr>
+ <td width="23%">&nbsp;</td>
+ <td width="28%"><SPAN align=center class=subcabeceras><font size="3"><?php echo $TbMsg[1] ;?></font></SPAN></td>
+ <td width="49%"><SPAN align=center class=sobrecabeceras><font size="3"><?php echo $_SESSION['ipdevice']; ?></font></SPAN></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td><SPAN align=center class=subcabeceras><font size="3"><?php echo $TbMsg[2] ;?></font></SPAN></td>
+ <td><SPAN align=center class=sobrecabeceras><font size="3"><?php echo $tipodevice; ?></font></SPAN></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td><SPAN align=center class=subcabeceras><font size="3"><?php echo $TbMsg[3] ;?></font></SPAN></td>
+ <td><SPAN align=center class=sobrecabeceras><font size="3"><?php echo $sistem; ?></font></SPAN></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td><SPAN align=center class=subcabeceras><font size="3"><?php echo $TbMsg[4] ;?></font></SPAN></td>
+ <td><SPAN align=center class=sobrecabeceras><font size="3"><?php echo $versistem; ?></font></SPAN></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td><SPAN align=center class=subcabeceras><font size="3"><?php echo $TbMsg[5] ;?></font></SPAN></td>
+ <td><SPAN align=center class=sobrecabeceras><font size="3"><?php echo $nav; ?></font></SPAN></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td><SPAN align=center class=subcabeceras><font size="3"><?php echo $TbMsg[6] ;?></font></SPAN></td>
+ <td><SPAN align=center class=sobrecabeceras><font size="3"><?php echo $vernav; ?></font></SPAN></td>
+ </tr>
+ <tr>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ </tr>
+</table>
+
+
</BODY>
</HTML>
+
+<?php } ?>
diff --git a/admin/WebConsole/principal/acercade.php b/admin/WebConsole/principal/acercade.php
new file mode 100644
index 00000000..2703939e
--- /dev/null
+++ b/admin/WebConsole/principal/acercade.php
@@ -0,0 +1,43 @@
+<?php
+//********************************************************************
+// Descripción :
+// Pagina de informacion sobre el proyecto OpenGnSys
+//********************************************************************
+include_once("../includes/ctrlacc.php");
+include_once("../idiomas/php/".$idioma."/acercade_".$idioma.".php");
+
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<title> Administración web de aulas </title>
+<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="../estilos.css" />
+</head>
+
+<body class="acercade">
+
+<img alt="*" src="../images/acercade.png" align="left" hspace="10em" vspace="10em" />
+
+<h1><img alt="OpenGnSys" src="../images/iconos/logoopengnsys.png" /></h1>
+
+<p>
+<?php
+// Añadir versión.
+$versionfile="../../doc/VERSION.txt";
+if (file_exists ($versionfile))
+ include ($versionfile);
+
+?>
+</p>
+
+
+<p><strong><?php echo $TbMsg["TITLE"] ?></strong></p>
+
+<p><?php echo $TbMsg["DESCRIPTION"] ?> </p>
+
+<p><?php echo $TbMsg["LICENSE"] ?> <a href="http://www.gnu.org/licenses/gpl.html" target="_blank" ><img alt="GPL v3" src="../images/gplv3-88x31.png" height="20em" /></a></p>
+
+<p><strong><?php echo $TbMsg["LINK"] ?> <a href="http://opengnsys.es" target="_blank" >opengnsys.es</a><strong></p>
+</body>
+</html>
diff --git a/admin/WebConsole/principal/aula.php b/admin/WebConsole/principal/aula.php
index 83b750d1..aa606053 100644
--- a/admin/WebConsole/principal/aula.php
+++ b/admin/WebConsole/principal/aula.php
@@ -120,6 +120,18 @@ echo $flotante->CreaMenuContextual($XMLcontextual);
$XMLcontextual=ContextualXMLAsistentes($LITAMBITO_ORDENADORES,$AMBITO_ORDENADORES);
echo $flotante->CreaMenuContextual($XMLcontextual);
+// Crea contextual de los comandos para los distintos ámbitos
+$XMLcontextual=ContextualXMLSincronizacion($LITAMBITO_AULAS,$AMBITO_AULAS);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+$XMLcontextual=ContextualXMLSincronizacion($LITAMBITO_ORDENADORES,$AMBITO_ORDENADORES);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+
+// Crea contextual de los comandos para los distintos �bitos
+$XMLcontextual=ContextualXMLDiferenciacion($LITAMBITO_AULAS,$AMBITO_AULAS);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+$XMLcontextual=ContextualXMLDiferenciacion($LITAMBITO_ORDENADORES,$AMBITO_ORDENADORES);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+
?>
<SCRIPT language="javascript">
Sondeo();
@@ -352,11 +364,20 @@ function ContextualXMLAulas(){
$layerXML.='></ITEM>';
$layerXML.='<ITEM';
+ $layerXML.=' subflotante="flo_sincronizacion_'.$LITAMBITO_AULAS.'"';
+ $layerXML.=' imgitem="../images/iconos/comandos.gif"';
+ $layerXML.=' textoitem='.$TbMsg[49];
+ $layerXML.='></ITEM>';
+
+ $layerXML.='<ITEM';
$layerXML.=' subflotante="flo_asistentes_'.$LITAMBITO_AULAS.'"';
$layerXML.=' imgitem="../images/iconos/comandos.gif"';
$layerXML.=' textoitem='.$TbMsg[38];
$layerXML.='></ITEM>';
+ $layerXML.='<SEPARADOR>';
+ $layerXML.='</SEPARADOR>';
+
$layerXML.='<ITEM';
$layerXML.=' alpulsar="confirmarprocedimiento('.$AMBITO_AULAS.')"';
$layerXML.=' imgitem="../images/iconos/procedimiento.gif"';
@@ -420,7 +441,8 @@ function ContextualXMLAulas(){
$layerXML.=' imgitem="../images/iconos/reservas.gif"';
$layerXML.=' textoitem='.$TbMsg[29];
$layerXML.='></ITEM>';
-
+ $layerXML.='<SEPARADOR>';
+ $layerXML.='</SEPARADOR>';
$layerXML.='</MENUCONTEXTUAL>';
return($layerXML);
}
@@ -495,12 +517,20 @@ function ContextualXMLOrdenadores(){
$layerXML.='></ITEM>';
$layerXML.='<ITEM';
+ $layerXML.=' subflotante="flo_sincronizacion_'.$LITAMBITO_ORDENADORES.'"';
+ $layerXML.=' imgitem="../images/iconos/comandos.gif"';
+ $layerXML.=' textoitem='.$TbMsg[49];
+ $layerXML.='></ITEM>';
+
+ $layerXML.='<ITEM';
$layerXML.=' subflotante="flo_asistentes_'.$LITAMBITO_ORDENADORES.'"';
$layerXML.=' imgitem="../images/iconos/comandos.gif"';
$layerXML.=' textoitem='.$TbMsg[38];
$layerXML.='></ITEM>';
-
+ $layerXML.='<SEPARADOR>';
+ $layerXML.='</SEPARADOR>';
+
$layerXML.='<ITEM';
$layerXML.=' alpulsar="confirmarprocedimiento('.$AMBITO_ORDENADORES.')"';
$layerXML.=' imgitem="../images/iconos/procedimiento.gif"';
@@ -544,10 +574,10 @@ function ContextualXMLComandos($litambito,$ambito){
global $TbMsg;
$maxlongdescri=0;
$rs=new Recordset;
- $cmd->texto="SELECT idcomando,descripcion,pagina,gestor,funcion
- FROM comandos
- WHERE activo=1 AND aplicambito & ".$ambito.">0
- ORDER BY descripcion";
+ $cmd->texto="SELECT idcomando,descripcion,pagina,gestor,funcion
+ FROM comandos
+ WHERE activo=1 AND submenu='' AND aplicambito & ".$ambito.">0
+ ORDER BY descripcion";
$rs->Comando=&$cmd;
if ($rs->Abrir()){
$layerXML="";
@@ -555,14 +585,14 @@ function ContextualXMLComandos($litambito,$ambito){
while (!$rs->EOF){
$descrip=$TbMsg["COMMAND_".$rs->campos["funcion"]];
if (empty ($descrip)) {
- $descrip=$rs->campos["funcion"];
+ $descrip=$rs->campos["descripcion"];
}
$layerXML.='<ITEM';
$layerXML.=' alpulsar="confirmarcomando('."'".$ambito."'".','.$rs->campos["idcomando"].',\''.$rs->campos["descripcion"].'\',\''.$rs->campos["pagina"]. '\',\''.$rs->campos["gestor"]. '\',\''.$rs->campos["funcion"]. '\')"';
$layerXML.=' textoitem="'.$descrip.'"';
$layerXML.='></ITEM>';
- if($maxlongdescri<strlen($rs->campos["descripcion"])) // Toma la Descripción de mayor longitud
- $maxlongdescri=strlen($rs->campos["descripcion"]);
+ if ($maxlongdescri < strlen($descrip)) // Toma la Descripción de mayor longitud
+ $maxlongdescri=strlen($descrip);
$rs->Siguiente();
}
$layerXML.='</MENUCONTEXTUAL>';
@@ -575,8 +605,81 @@ function ContextualXMLComandos($litambito,$ambito){
return($finallayerXML);
}
}
-
-
+//________________________________________________________________________________________________________
+function ContextualXMLSincronizacion($litambito,$ambito){
+ global $cmd;
+ global $TbMsg;
+ $maxlongdescri=0;
+ $rs=new Recordset;
+ $cmd->texto="SELECT idcomando,descripcion,pagina,gestor,funcion
+ FROM comandos
+ WHERE activo=1 AND submenu='Sincronizacion' AND aplicambito & ".$ambito.">0
+ ORDER BY descripcion";
+ $rs->Comando=&$cmd;
+ if ($rs->Abrir()){
+ $layerXML="";
+ $rs->Primero();
+ while (!$rs->EOF){
+ $descrip=$TbMsg["COMMAND_".$rs->campos["funcion"]];
+ if (empty ($descrip)) {
+ $descrip=$rs->campos["descripcion"];
+ }
+ $layerXML.='<ITEM';
+ $layerXML.=' alpulsar="confirmarcomando('."'".$ambito."'".','.$rs->campos["idcomando"].',\''.$rs->campos["descripcion"].'\',\''.$rs->campos["pagina"]. '\',\''.$rs->campos["gestor"]. '\',\''.$rs->campos["funcion"]. '\')"';
+ $layerXML.=' textoitem="'.$descrip.'"';
+ $layerXML.='></ITEM>';
+ if ($maxlongdescri < strlen($descrip)) // Toma la Descripción de mayor longitud
+ $maxlongdescri=strlen($descrip);
+ $rs->Siguiente();
+ }
+ $layerXML.='</MENUCONTEXTUAL>';
+ $prelayerXML='<MENUCONTEXTUAL';
+ $prelayerXML.=' idctx="flo_sincronizacion_'.$litambito.'"';
+ $prelayerXML.=' maxanchu='.$maxlongdescri*7;
+ $prelayerXML.=' clase="menu_contextual"';
+ $prelayerXML.='>';
+ $finallayerXML=$prelayerXML.$layerXML;
+ return($finallayerXML);
+ }
+}
+//________________________________________________________________________________________________________
+function ContextualXMLDiferenciacion($litambito,$ambito){
+ global $cmd;
+ global $TbMsg;
+ $maxlongdescri=0;
+ $rs=new Recordset;
+ $cmd->texto="SELECT idcomando,descripcion,pagina,gestor,funcion
+ FROM comandos
+ WHERE activo=1 AND submenu='diferenciacion' AND aplicambito & ".$ambito.">0
+ ORDER BY descripcion";
+ $rs->Comando=&$cmd;
+ if ($rs->Abrir()){
+ $layerXML="";
+ $rs->Primero();
+ while (!$rs->EOF){
+ $descrip=$TbMsg["COMMAND_".$rs->campos["funcion"]];
+ if (empty ($descrip)) {
+ $descrip=$rs->campos["descripcion"];
+ }
+ $layerXML.='<ITEM';
+ $layerXML.=' alpulsar="confirmarcomando('."'".$ambito."'".','.$rs->campos["idcomando"].',\''.$rs->campos["descripcion"].'\',\''.$rs->campos["pagina"]. '\',\''.$rs->campos["gestor"]. '\',\''.$rs->campos["funcion"]. '\')"';
+ $layerXML.=' textoitem="'.$descrip.'"';
+ $layerXML.='></ITEM>';
+ if ($maxlongdescri < strlen($descrip)) // Toma la Descripción de mayor longitud
+ $maxlongdescri=strlen($descrip);
+ $rs->Siguiente();
+ }
+ $layerXML.='</MENUCONTEXTUAL>';
+ $prelayerXML='<MENUCONTEXTUAL';
+ $prelayerXML.=' idctx="flo_diferenciacion_'.$litambito.'"';
+ $prelayerXML.=' maxanchu='.$maxlongdescri*6;
+ $prelayerXML.=' clase="menu_contextual"';
+ $prelayerXML.='>';
+ $finallayerXML=$prelayerXML.$layerXML;
+ return($finallayerXML);
+ }
+}
+//________________________________________________________________________________________________________
function ContextualXMLAsistentes($litambito,$ambito){
global $cmd;
global $TbMsg;
diff --git a/admin/WebConsole/principal/aulas.php b/admin/WebConsole/principal/aulas.php
index d0856843..6d8887fc 100644
--- a/admin/WebConsole/principal/aulas.php
+++ b/admin/WebConsole/principal/aulas.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -30,8 +30,8 @@ $arbol=new ArbolVistaXML($arbolXML,0,$baseurlimg,$clasedefault,1,0,5); // Crea e
//________________________________________________________________________________________________________
?>
<HTML>
-<TITLE>Administración web de aulas</TITLE>
<HEAD>
+<TITLE>Administración web de aulas</TITLE>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<LINK rel="stylesheet" type="text/css" href="../estilos.css">
<SCRIPT language="javascript" src="../clases/jscripts/ArbolVistaXML.js"></SCRIPT>
@@ -41,8 +41,8 @@ $arbol=new ArbolVistaXML($arbolXML,0,$baseurlimg,$clasedefault,1,0,5); // Crea e
<SCRIPT language="javascript" src="../jscripts/constantes.js"></SCRIPT>
<SCRIPT language="javascript" src="../jscripts/comunes.js"></SCRIPT>
<SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
- <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comunes_'.$idioma.'.js"></SCRIPT>'?>
- <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/aulas_'.$idioma.'.js"></SCRIPT>'?>
+ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comunes_'.$idioma.'.js"></SCRIPT>'?>
+ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/aulas_'.$idioma.'.js"></SCRIPT>'?>
</HEAD>
<BODY OnContextMenu="return false">
<FORM name="fcomandos" action="" method="post" target="frame_contenidos">
@@ -85,6 +85,15 @@ echo $flotante->CreaMenuContextual($XMLcontextual);
$XMLcontextual=ContextualXMLComandos($LITAMBITO_ORDENADORES,$AMBITO_ORDENADORES);
echo $flotante->CreaMenuContextual($XMLcontextual);
+// Crea contextual de los comandos para los distintos �bitos
+$XMLcontextual=ContextualXMLSincronizacion($LITAMBITO_AULAS,$AMBITO_AULAS);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+$XMLcontextual=ContextualXMLSincronizacion($LITAMBITO_GRUPOSORDENADORES,$AMBITO_GRUPOSORDENADORES);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+$XMLcontextual=ContextualXMLSincronizacion($LITAMBITO_ORDENADORES,$AMBITO_ORDENADORES);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+
+
// Crea submenu contextual de clase de gestion de arranque pxe
$XMLcontextual=ContextualXMLNetBoot(); // Crea submenu contextual de acciones
echo $flotante->CreaMenuContextual($XMLcontextual);
@@ -162,12 +171,14 @@ function SubarbolXML_grupos_aulas($cmd,$idcentro,$grupoid){
$cadenaXML.='<AULA ';
// Atributos
$cadenaXML.=' clickcontextualnodo="menu_contextual(this,' ."'flo_".$LITAMBITO_AULAS."'" .')"';
+ $cadenaXML.=' clicksupnodo="ver_aulas();"';
$cadenaXML.=' imagenodo="../images/iconos/aula.gif"';
$cadenaXML.=' infonodo="'.$rs->campos["nombreaula"].'"';
$cadenaXML.=' nodoid='.$LITAMBITO_AULAS.'-'.$rs->campos["idaula"];
$cadenaXML.='>';
$cadenaXML.=SubarbolXML_aulas_ordenadores($cmd,$rs->campos["idaula"],0);
- $cadenaXML.=SubarbolXML_aulas_operadores($cmd,$rs->campos["idaula"],$cc);
+ // La siguiente línea está prevista para añadir operatores de aulas.
+ //$cadenaXML.=SubarbolXML_aulas_operadores($cmd,$rs->campos["idaula"],$cc);
$cadenaXML.='</AULA>';
$rs->Siguiente();
}
@@ -175,7 +186,7 @@ function SubarbolXML_grupos_aulas($cmd,$idcentro,$grupoid){
return($cadenaXML);
}
//________________________________________________________________________________________________________
-function SubarbolXML_aulas_operadores($cmd,$idaula,&$cont){
+function SubarbolXML_aulas_operadores($cmd,$idaula,$cont){
global $TbMsg;
global $LITAMBITO_USUARIOS;
global $cadenaXML;
@@ -233,7 +244,10 @@ function SubarbolXML_aulas_ordenadores($cmd,$idaula,$grupoid){
$cadenaXML.='<ORDENADOR';
// Atributos
$cadenaXML.=' imagenodo="../images/iconos/ordenador.gif"';
+ $wpages="../propiedades/propiedades_ordenadores.php";
+ $wParam="0,0,0,0,'". $wpages."'";
$cadenaXML.=' clickcontextualnodo="menu_contextual(this,' ."'flo_".$LITAMBITO_ORDENADORES."'" .')"';
+ $cadenaXML.=' clicksupnodo="modificar('.$wParam.')"';
$cadenaXML.=' infonodo="'.$rs->campos["nombreordenador"].'"';
$cadenaXML.=' nodoid='.$LITAMBITO_ORDENADORES.'-'.$rs->campos["idordenador"];
$cadenaXML.='></ORDENADOR>';
@@ -329,6 +343,7 @@ function ContextualXMLCentros(){
$layerXML.=' textoitem='.$TbMsg[5];
$layerXML.='></ITEM>';
+
$layerXML.='<ITEM';
$layerXML.=' alpulsar="confirmarprocedimiento('.$AMBITO_CENTROS.')"';
$layerXML.=' imgitem="../images/iconos/procedimiento.gif"';
@@ -578,11 +593,20 @@ function ContextualXMLAulas(){
$layerXML.='></ITEM>';
$layerXML.='<ITEM';
+ $layerXML.=' subflotante="flo_sincronizacion_'.$LITAMBITO_AULAS.'"';
+ $layerXML.=' imgitem="../images/iconos/comandos.gif"';
+ $layerXML.=' textoitem='.$TbMsg[49];
+ $layerXML.='></ITEM>';
+
+ $layerXML.='<ITEM';
$layerXML.=' subflotante="flo_asistentes_'.$LITAMBITO_AULAS.'"';
$layerXML.=' imgitem="../images/iconos/comandos.gif"';
$layerXML.=' textoitem='.$TbMsg[38];
$layerXML.='></ITEM>';
+ $layerXML.='<SEPARADOR>';
+ $layerXML.='</SEPARADOR>';
+
$layerXML.='<ITEM';
$layerXML.=' alpulsar="confirmarprocedimiento('.$AMBITO_AULAS.')"';
$layerXML.=' imgitem="../images/iconos/procedimiento.gif"';
@@ -767,14 +791,22 @@ function ContextualXMLGruposOrdenadores(){
$layerXML.=' imgitem="../images/iconos/comandos.gif"';
$layerXML.=' textoitem='.$TbMsg[5];
$layerXML.='></ITEM>';
-
+
+ $layerXML.='<ITEM';
+ $layerXML.=' subflotante="flo_sincronizacion_'.$LITAMBITO_GRUPOSORDENADORES.'"';
+ $layerXML.=' imgitem="../images/iconos/comandos.gif"';
+ $layerXML.=' textoitem='.$TbMsg[49];
+ $layerXML.='></ITEM>';
+
$layerXML.='<ITEM';
$layerXML.=' subflotante="flo_asistentes_'.$LITAMBITO_GRUPOSORDENADORES.'"';
$layerXML.=' imgitem="../images/iconos/comandos.gif"';
$layerXML.=' textoitem='.$TbMsg[38];
$layerXML.='></ITEM>';
-
-
+
+ $layerXML.='<SEPARADOR>';
+ $layerXML.='</SEPARADOR>';
+
$layerXML.='<ITEM';
$layerXML.=' alpulsar="confirmarprocedimiento('.$AMBITO_GRUPOSORDENADORES.')"';
$layerXML.=' imgitem="../images/iconos/procedimiento.gif"';
@@ -893,6 +925,11 @@ function ContextualXMLOrdenadores(){
$layerXML.=' textoitem='.$TbMsg[5];
$layerXML.='></ITEM>';
+ $layerXML.='<ITEM';
+ $layerXML.=' subflotante="flo_sincronizacion_'.$LITAMBITO_ORDENADORES.'"';
+ $layerXML.=' imgitem="../images/iconos/comandos.gif"';
+ $layerXML.=' textoitem='.$TbMsg[49];
+ $layerXML.='></ITEM>';
$layerXML.='<ITEM';
$layerXML.=' subflotante="flo_asistentes_'.$LITAMBITO_ORDENADORES.'"';
@@ -900,6 +937,8 @@ function ContextualXMLOrdenadores(){
$layerXML.=' textoitem='.$TbMsg[38];
$layerXML.='></ITEM>';
+ $layerXML.='<SEPARADOR>';
+ $layerXML.='</SEPARADOR>';
$layerXML.='<ITEM';
$layerXML.=' alpulsar="confirmarprocedimiento('.$AMBITO_ORDENADORES.')"';
@@ -946,7 +985,7 @@ function ContextualXMLComandos($litambito,$ambito){
$rs=new Recordset;
$cmd->texto="SELECT idcomando,descripcion,pagina,gestor,funcion
FROM comandos
- WHERE activo=1 AND aplicambito & ".$ambito.">0
+ WHERE activo=1 AND submenu='' AND aplicambito & ".$ambito.">0
ORDER BY descripcion";
$rs->Comando=&$cmd;
if ($rs->Abrir()){
@@ -955,7 +994,7 @@ function ContextualXMLComandos($litambito,$ambito){
while (!$rs->EOF){
$descrip=$TbMsg["COMMAND_".$rs->campos["funcion"]];
if (empty ($descrip)) {
- $descrip=$rs->campos["funcion"];
+ $descrip=$rs->campos["descripcion"];
}
$layerXML.='<ITEM';
$layerXML.=' alpulsar="confirmarcomando('."'".$ambito."'".','.$rs->campos["idcomando"].',\''.$rs->campos["descripcion"].'\',\''.$rs->campos["pagina"]. '\',\''.$rs->campos["gestor"]. '\',\''.$rs->campos["funcion"]. '\')"';
@@ -968,7 +1007,7 @@ function ContextualXMLComandos($litambito,$ambito){
$layerXML.='</MENUCONTEXTUAL>';
$prelayerXML='<MENUCONTEXTUAL';
$prelayerXML.=' idctx="flo_comandos_'.$litambito.'"';
- $prelayerXML.=' maxanchu='.$maxlongdescri*7;
+ $prelayerXML.=' maxanchu='.$maxlongdescri*6;
$prelayerXML.=' clase="menu_contextual"';
$prelayerXML.='>';
$finallayerXML=$prelayerXML.$layerXML;
@@ -976,7 +1015,44 @@ function ContextualXMLComandos($litambito,$ambito){
}
}
+//________________________________________________________________________________________________________
+function ContextualXMLSincronizacion($litambito,$ambito){
+ global $cmd;
+ global $TbMsg;
+ $maxlongdescri=0;
+ $rs=new Recordset;
+ $cmd->texto="SELECT idcomando,descripcion,pagina,gestor,funcion
+ FROM comandos
+ WHERE activo=1 AND submenu='Sincronizacion' AND aplicambito & ".$ambito.">0
+ ORDER BY descripcion";
+ $rs->Comando=&$cmd;
+ if ($rs->Abrir()){
+ $layerXML="";
+ $rs->Primero();
+ while (!$rs->EOF){
+ $descrip=$TbMsg["COMMAND_".$rs->campos["funcion"]];
+ if (empty ($descrip)) {
+ $descrip=$rs->campos["descripcion"];
+ }
+ $layerXML.='<ITEM';
+ $layerXML.=' alpulsar="confirmarcomando('."'".$ambito."'".','.$rs->campos["idcomando"].',\''.$rs->campos["descripcion"].'\',\''.$rs->campos["pagina"]. '\',\''.$rs->campos["gestor"]. '\',\''.$rs->campos["funcion"]. '\')"';
+ $layerXML.=' textoitem="'.$descrip.'"';
+ $layerXML.='></ITEM>';
+ if ($maxlongdescri < strlen($descrip)) // Toma la Descripción de mayor longitud
+ $maxlongdescri=strlen($descrip);
+ $rs->Siguiente();
+ }
+ $layerXML.='</MENUCONTEXTUAL>';
+ $prelayerXML='<MENUCONTEXTUAL';
+ $prelayerXML.=' idctx="flo_sincronizacion_'.$litambito.'"';
+ $prelayerXML.=' maxanchu='.$maxlongdescri*6;
+ $prelayerXML.=' clase="menu_contextual"';
+ $prelayerXML.='>';
+ $finallayerXML=$prelayerXML.$layerXML;
+ return($finallayerXML);
+ }
+}
//________________________________________________________________________________________________________
function ContextualXMLAsistentes($litambito,$ambito){
global $cmd;
@@ -1007,7 +1083,7 @@ function ContextualXMLAsistentes($litambito,$ambito){
$layerXML.='</MENUCONTEXTUAL>';
$prelayerXML='<MENUCONTEXTUAL';
$prelayerXML.=' idctx="flo_asistentes_'.$litambito.'"';
- $prelayerXML.=' maxanchu='.$maxlongdescri*7;
+ $prelayerXML.=' maxanchu='.$maxlongdescri*6;
$prelayerXML.=' clase="menu_contextual"';
$prelayerXML.='>';
$finallayerXML=$prelayerXML.$layerXML;
diff --git a/admin/WebConsole/principal/boot_grub4dos.php b/admin/WebConsole/principal/boot_grub4dos.php
index 3e6a2c04..111de4ef 100644
--- a/admin/WebConsole/principal/boot_grub4dos.php
+++ b/admin/WebConsole/principal/boot_grub4dos.php
@@ -1,86 +1,3 @@
-<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");
@@ -90,7 +7,7 @@ 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");
+include_once("../idiomas/php/".$idioma."/boot_grub4dos_".$idioma.".php");
$cmd=CreaComando($cadenaconexion);
if (!$cmd)
@@ -100,14 +17,18 @@ if (!$cmd)
$litambito=0;
$idambito=0;
$nombreambito="";
-$id_aula=0;
+$opcion=0;
+$modo="";
if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; // Recoge parametros
if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
if (isset($_GET["nombreambito"])) $nombreambito=$_GET["nombreambito"];
-if (isset($_GET["id_aula"])) $idambito=$_GET["id_aula"];
-
+if (isset($_POST["litambito"])) $litambito=$_POST["litambito"]; // Recoge parametros
+if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
+if (isset($_POST["nombreambito"])) $nombreambito=$_POST["nombreambito"];
+if (isset($_POST["opcion"])) $opcion=$_POST["opcion"];
+if (isset($_POST["modo"])) $modo=$_POST["modo"];
switch($litambito){
case "aulas":
@@ -117,96 +38,243 @@ switch($litambito){
$seleccion= "and grupoid=" . $idambito . "";
break;
}
-?>
+//#########################################################################
+// LEYENDO EL DIRECTORIO
+// /var/lib/tftboot/menu.lst/templates
+//#########################################################################
+$dirtemplates="/var/lib/tftpboot/menu.lst/templates/";
+$directorio=dir($dirtemplates);
+$pn= array();//pila de nombres
+//bucle para llenar las pilas :P
+while ($archivo = $directorio->read())
+{
+ //no mostrar ni "." ni ".." ni "pxe"
+ if(($archivo!="pxe")&&($archivo!=".")&&($archivo!=".."))
+ {
+ array_push($pn, $archivo);
+ }
+}
+$directorio->close();
+//ordenar las pilas segun la pila de nombres
+array_multisort($pn);
+
+//Leemos el ultimo fichero y extraemos su numero
+$ultimofichero=end($pn);
+$ultimonumero=substr($ultimofichero,0,2);
+
+//Comprobamos que no se mayor que 99 (tendria 3 caracteres)
+if ($ultimonumero==99)
+ {$ultimonumero=20;
+}else{
+ $ultimonumero++;
+}
+//Buscamos si el siguiente numero esta disponible
+$encontrado=FALSE;
+while($encontrado==FALSE)
+{
+ if (in_array($ultimonumero, $pn))
+ {
+ $ultimonumero++;
+ }else{
+ $encontrado=TRUE;
+ }
+}
+?>
+<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="../jscripts/boot_grub4dos.js"></SCRIPT>
+ <SCRIPT language="javascript" src="../idiomas/javascripts/esp/propiedades_aulas_esp.js"></SCRIPT></HEAD>
+</head>
+<body>
<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?>" >
+<TR valign="bottom"><TD colspan="100%" align="left" nowrap>
+<form name="modoadmin" id="modoadmin" method="post" action="./boot_grub4dos.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="opcion" value="<? echo $opcion?>">
+<?php
+ if (empty($_SESSION["widcentro"]))
+ {$modo=1;
+ /*
+ if ($modo == 1)
+ {
+ echo '<input type=hidden name=modo value=>';
+ echo '<input value='.$TbMsg[10].' type=submit>';
+ }else{
+ echo '<input type=hidden name=modo value=1>';
+ echo '<input value='.$TbMsg[11].' type=submit>';
+ }
+ */
+ }
+?>
+</form>
+</TD></TR>
+<tr>
+<?php
+if (empty($modo))
+{}else{?>
+<td valign="top">
+<?php include_once("./boot_grub4dos_tabla.php");?>
+</td>
+<?php }?>
+<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><?php echo $TbMsg[42]; ?><BR>
- <SPAN align=center class=subcabeceras> <?php echo $nombreambito; ?> </SPAN>
- <input type="submit" value=<?php echo $TbMsg[43]; ?> name="saveButton" onclick="allSelect()"> </P>
-
-
-
-
+ <span align=center class=subcabeceras> <?php echo $nombreambito; ?> </span>
+<?php /////////////////////////////////////////////////
+ if (!empty($_SESSION["widcentro"])){ ?>
+ <input type="submit" value=<?php echo $TbMsg[43]; ?> name="saveButton" onclick="allSelect()"></P>
+<?php /////////////////////////////////////////////////
+ } ?>
<input type="hidden" name="listOfItems" value="">
-<input type="hidden" name="rungrupo" value="<?php echo $id_aula;?>">
-
-
+<?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> -->
-<br>OGclient <br><br>
-<select multiple size="30" name="Lpxe" id="Lpxe">
+<td width="80">
+ <!-- <a href="./muestramenu.php?labelmenu=pxe"> OGlive </a><br> pxe <br> -->
+<?php
+//Leer fichero pxe
+$description=exec("awk 'NR==1 {print $2}' ".$dirtemplates."pxe");//$text=trim($text);
+?>
+<br><?php echo $description;?> <br><br>
+<select multiple size="28" name="Lpxe" id="Lpxe">
<?php
-#### Listado de equipos con menú PXE.
+#### listado de equipos con menu pxe
$menupxe="pxe";
-$listadopxe=listaequipos($cmd,$menupxe,$seleccion);
-echo $listadopxe;
+//////////////////////////////////////////////////
+if (!empty($_SESSION["widcentro"]))
+//////////////////////////////////////////////////
+{
+ $listadopxe=listaequipos($cmd,$menupxe,$seleccion);
+ echo $listadopxe;
+}
?>
</select>
</td>
-
-
<?php
+//##agp
+ //$listadopxe="";
+ $desconocido="00unknown";
+//
+
+ echo $estado;
+//mostrar los datos
+for($i=0; $i<count($pn); $i++)
+ {//for
+ if ($pn[$i]==$desconocido)
+ {$listadopxe=listadesconocido($cmd,$desconocido,$seleccion);
+ if ($existe==""){}else{
+
+ $description=exec("awk 'NR==1 {print $2}' ".$dirtemplates.$pn[$i]); //$text=trim($text);
+ echo "<td></td>";
+ echo "<td> <font color=red>";
+ echo $description;
+ echo " <br>";
+ echo "<input type='button' onClick='move(this.form.L" . $pn[$i] . ",this.form.Lpxe)' value='OUT' style='height: 25px; width: 50px' >";
+ echo "<input type='button' onClick='move(this.form.Lpxe,this.form.L" . $pn[$i] .")' value='IN' style='height: 25px; width: 35px' >";
+ echo " <br>";
+ echo "<select multiple size='28' name='L" . $pn[$i] . "' >";
+ $listadopxe="";
+ $desconocido="00unknown";
+ if ($pn[$i]==$desconocido)
+ {
+ $listadopxe=listaequipos($cmd,$desconocido,$seleccion);
+ echo $listadopxe;
+ }else{
+ $listadopxe=listaequipos($cmd,$pn[$i],$seleccion);
+ echo $listadopxe;
+ }
+ echo "</select>";
+ echo "</td>";
+ }
-$cmd->texto="SELECT * FROM menuboot WHERE label <> 'pxe' ";
-$rsmenu=new Recordset;
-$rsmenu->Comando=&$cmd;
-if (!$rsmenu->Abrir()) echo "error";
-$rsmenu->Primero();
-while (!$rsmenu->EOF)
-{
+ }else{
+ $description=exec("awk 'NR==1 {print $2}' ".$dirtemplates.$pn[$i]); //$text=trim($text);
echo "<td></td>";
echo "<td> ";
- echo $rsmenu->campos['description'];
+ echo $description;
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 "<input type='button' onClick='move(this.form.L" . $pn[$i] . ",this.form.Lpxe)' value='OUT' style='height: 25px; width: 50px' >";
+ echo "<input type='button' onClick='move(this.form.Lpxe,this.form.L" . $pn[$i] .")' value='IN' style='height: 25px; width: 35px' >";
echo " <br>";
- echo "<select multiple size='30' name='L" . $rsmenu->campos['label'] . "' >";
- $listadopxe=listaequipos($cmd,$rsmenu->campos['label'],$seleccion);
+ echo "<select multiple size='28' name='L" . $pn[$i] . "' >";
+ $listadopxe="";
+ $desconocido="00unknown";
+///////////////////////////////////////////////////////////////
+if (!empty($_SESSION["widcentro"]))
+{
+ if ($pn[$i]==$desconocido)
+ {
+ $listadopxe=listaequipos($cmd,$desconocido,$seleccion);
echo $listadopxe;
+ }else{
+ $listadopxe=listaequipos($cmd,$pn[$i],$seleccion);
+ echo $listadopxe;
+ }
+}
+////////////////////////////////////////////////////////////////
echo "</select>";
echo "</td>";
- $rsmenu->Siguiente();
-}
-$rsmenu->Cerrar();
-
-
+ }//Primer if
+ }//for
+//##agp
// 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;
+$cmd->texto="SELECT idordenador, nombreordenador
+ 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>";
+ echo "<option value='".$rs->campos["idordenador"]."'>".$rs->campos["nombreordenador"]."</option>";
$rs->Siguiente();
}
$rs->Cerrar();
}
-?>
+// esta funcion genera los elementos de un select(formulario html) donde aparecen los nombres de los ordenadores, según su menu pxe
+function listadesconocido($cmd,$desconocido,$seleccion)
+{
+global $existe;
+$cmd->texto="SELECT * FROM ordenadores where arranque='" . $desconocido ."' " . $seleccion;
+$rs=new Recordset;
+$rs->Comando=&$cmd;
+if (!$rs->Abrir()) echo "error";
+$rs->Primero();
+while (!$rs->EOF)
+{
+$existe= $rs->campos["nombreordenador"];
+ $rs->Siguiente();
+}
+$rs->Cerrar();
+}
-</tr>
+?>
</form>
+</tr>
+
+
+
</table>
+
</body>
</html>
-
diff --git a/admin/WebConsole/principal/boot_grub4dos_crear.php b/admin/WebConsole/principal/boot_grub4dos_crear.php
new file mode 100644
index 00000000..01ffd3c1
--- /dev/null
+++ b/admin/WebConsole/principal/boot_grub4dos_crear.php
@@ -0,0 +1,771 @@
+<?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."/boot_grub4dos_".$idioma.".php");
+
+$cmd=CreaComando($cadenaconexion);
+if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
+//________________________________________________________________________________________________________
+
+if (isset($_POST["litambito"])) $litambito=$_POST["litambito"]; // Recoge parametros
+if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
+if (isset($_POST["nombreambito"])) $nombreambito=$_POST["nombreambito"];
+if (isset($_POST["opcion"])) $opcion=$_POST["opcion"];
+if (isset($_POST["opcioncrear"])) $opcioncrear=$_POST["opcioncrear"];
+if (isset($_POST["ultimonumero"])) $ultimonumero=$_POST["ultimonumero"];
+if ($opcioncrear == 1){$boton = $_REQUEST["boton"];if ($boton == $TbMsg[13] && $opcioncrear == 1){$confirmado="1";}}
+if ($opcioncrear == 2){$boton = $_REQUEST["boton"];if ($boton == $TbMsg[13] && $opcioncrear == 2){$confirmado="1";}}
+
+switch($litambito){
+ case "aulas":
+ $seleccion="and idaula=" . $idambito ."";
+ break;
+ case "gruposordenadores":
+ $seleccion= "and grupoid=" . $idambito . "";
+ break;
+}
+?>
+<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="../jscripts/boot_grub4dos.js"></SCRIPT>
+ <SCRIPT language="javascript" src="../idiomas/javascripts/esp/propiedades_aulas_esp.js"></SCRIPT></HEAD>
+</head>
+
+<body>
+<P align=center class=cabeceras><?php echo $TbMsg[42]; ?><BR>
+ <SPAN align=center class=subcabeceras> <?php echo $nombreambito; ?> </SPAN></P>
+<!-- <input type="submit" value=<?php echo $TbMsg[43]; ?> name="saveButton" onclick="allSelect()"> </P> -->
+<?php
+//##################################################################################################################################
+//########### NUEVO COLUMNA ARRANQUE #############################################################################################
+//##################################################################################################################################
+
+if ($opcioncrear == 1)
+ {
+ //$confirmado=$_POST["confirmado"];
+ if ($confirmado == 1)
+ {
+ //$delcar=array(" "," /", "-", "@", "=");
+ $guarnomb=ucfirst($_POST["nombrenuevoboot"]);
+ $descripfich=$guarnomb;$descripfich=ereg_replace("[^A-Za-z0-9]", "-", $descripfich);//str_replace($delcar, "-", $descripfich);
+ $guarnomb=ereg_replace("[^A-Za-z0-9]", "", $descripfich);//str_replace($delcar, "", $guarnomb);
+ $nombrenuevoboot=$ultimonumero.$guarnomb;
+ $parametrosnuevoboot=$_POST["parametrosnuevoboot"];
+ $nuevoboot = "/var/lib/tftpboot/menu.lst/templates/".$nombrenuevoboot;
+ if(empty($_POST["nombrenuevoboot"]))
+ {}else{
+ $fp = fopen($nuevoboot, "w");
+ $string = $TbMsg[22].$descripfich."\n".$parametrosnuevoboot;
+ $write = fputs($fp, $string);
+ fclose($fp);}
+ if (empty($guarnomb)){?>
+ <TABLE width="500" align=center border=1 >
+ <TR><TD align="center"><br><br><br><SPAN align=center class=subcabeceras><?php echo $TbMsg[14];?></span><br><br><br>
+ <form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="ultimonumero" value="<? echo $ultimonumero?>">
+ <input type="hidden" name="confirmado" value="">
+ <input type="hidden" name="opcioncrear" value="1">
+ <input type="submit" value="Continuar" name="nuevoarran">
+ </form>
+ </TR></TD>
+</TABLE>
+
+ <?php
+ }else{
+ ?>
+ <TABLE width="500" align=center border=1 >
+ <TR><TD align="center"><br><?php if ($guarnomb != null) echo $TbMsg[6];?><br><br><SPAN align=center class=subcabeceras><?php echo $descripfich;?></span><br><br><br>
+ <form name="crearranque" method="post" action="./boot_grub4dos.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="confirmado" value="1">
+ <input type="hidden" name="opcioncrear" value="1">
+ <input type="submit" value="Continuar" name="nuevoarran">
+ </form>
+ </TR></TD>
+ </TABLE>
+ <?php }?>
+<?php }else{
+?>
+
+<TABLE width="650" align=CENTER border=1 cellPadding=1 cellSpacing=1 class=tabla_datos >
+
+<TR align=center>
+ <TD height="70" colspan="2" valign="middle">
+ <SPAN align=center class=cabeceras> <?php echo $TbMsg[3]?> </SPAN>
+ </TD>
+ </TR>
+<TR align=right>
+ <TD colspan="2" valign="middle">
+
+
+
+ </TD>
+ </TR>
+<TR>
+<form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
+ <TD width="150" height="10" valign="middle">
+ <SPAN align=center class=subcabeceras><?php echo $TbMsg[12]?></SPAN>
+ </TD>
+
+ <TD width="500" height="10" valign="middle">
+ <input type="text" name="nombrenuevoboot" id="textfield" size="25" value="<?php echo $_POST["nombrenuevoboot"];?>">
+ </TD>
+
+</TR>
+<TR>
+ <TD width="150" height="100" valign="middle">
+
+<SPAN align=center class=subcabeceras><?php echo $TbMsg[19]?><br></SPAN>
+<?php
+if ($boton == $TbMsg[17])
+{echo '<input name=boton type=submit value="'.$TbMsg[18].'">';}else{echo '<input name=boton type=submit value=Plantilla>';}
+?>
+ </TD>
+
+ <TD width="500" height="100" valign="middle">
+
+
+ <textarea name="parametrosnuevoboot" id="parametrosnuevoboot" cols="60" rows="12">
+<?php
+if ($boton == $TbMsg[17])
+echo "timeout 3
+title FirstHardDisk-FirstPartition
+keeppxe
+root (hd0,0)
+chainloader (hd0,0)+1
+boot";
+?>
+ </textarea>
+ </TD>
+</TR>
+<TR>
+ <TD width="150" valign="middle">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="ultimonumero" value="<? echo $ultimonumero?>">
+ <input type="hidden" name="opcioncrear" value="1">
+
+ <input type="submit" name="boton" value="<?php echo $TbMsg[13]?>">
+ </form>
+ </TD>
+
+<TD width="500" valign="middle"><br />
+ <form name="crearranque" method="post" action="./boot_grub4dos.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="modo" value="1">
+ <input type="submit" value="<?php echo $TbMsg[16]?>">
+ </form>
+ </TD>
+</TR>
+</TABLE>
+<?php
+//##################################################################################################################################
+//########### NUEVO COLUMNA ARRANQUE #############################################################################################
+//##################################################################################################################################
+}}?>
+
+
+<?php
+//##################################################################################################################################
+//########### MODIFICAR COLUMNA ARRANQUE #########################################################################################
+//##################################################################################################################################
+
+
+if ($opcioncrear == 2)
+ {
+ $confirmado=$_POST["confirmado"];
+ if ($confirmado == 1)
+ {
+ $modificadescripcion=ucfirst($_POST["modificadescripcion"]);
+// $modificadescripcion=str_replace(" ", "", $modificadescripcion);
+ $descripfich=$modificadescripcion;$descripfich=ereg_replace("[^A-Za-z0-9]", "-", $descripfich);
+ $ficherow="/var/lib/tftpboot/menu.lst/templates/".$_POST["nombrefichero"];//echo $ficherow."<br>";
+ $parametrosmodifica=$_POST["parametrosmodifica"];
+
+ if(empty($_POST["modificadescripcion"]))
+ {?>
+
+ <TABLE width="500" align=center border=1 >
+ <TR><TD align="center"><br><br><br><SPAN align=center class=subcabeceras><?php echo $TbMsg[14];?></span><br><br><br>
+ <form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="confirmado" value="0">
+ <input type="hidden" name="opcioncrear" value="2">
+ <input type="submit" value="Continuar" name="nuevoarran">
+ </form>
+ </TR></TD>
+ </TABLE>
+
+ <?php }else{
+ //echo $_POST["nombrefichero"]." -- Descripcion -- ".$descripfich."<br>".$string;
+ ///*
+ $fp = fopen($ficherow, "w");
+ $string = $TbMsg[22].$descripfich."\n".$_POST["parametrosmodifica"];
+ $write = fputs($fp, $string);//Escribe la primera linea
+ fclose($fp);
+ //*/
+
+
+ ?>
+ <TABLE width="500" align=center border=1 >
+ <TR><TD align="center"><br><br><br><SPAN align=center class=subcabeceras><?php echo $TbMsg[7];?></span><br><br><br>
+ <form name="crearranque" method="post" action="./boot_grub4dos.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="confirmado" value="0">
+ <input type="hidden" name="opcioncrear" value="2">
+ <input type=hidden name=modo value=1></input>
+ <input type="submit" value="Continuar" name="nuevoarran">
+ </form>
+ </TR></TD>
+ </TABLE>
+ <?php }?>
+ <?php }else{
+?>
+<?php
+//#########################################################################
+// MODO USUARIO
+//#########################################################################
+$admin=$_POST["modo"];
+if (empty($admin)){
+//#########################################################################
+// LEYENDO EL DIRECTORIO
+// /var/lib/tftboot/menu.lst/templates
+//#########################################################################
+$dirtemplates="/var/lib/tftpboot/menu.lst/templates/";
+$directorio=dir($dirtemplates);
+$pn= array();//pila de nombres
+//bucle para llenar las pilas :P
+while ($archivo = $directorio->read())
+{
+ //no mostrar ni "." ni ".." ni "pxe"
+ if(($archivo!="pxe")&&($archivo!=".")&&($archivo!=".."))
+ {
+ array_push($pn, $archivo);
+ }
+}
+$directorio->close();
+
+//ordenar las pilas segun la pila de nombres
+array_multisort($pn);
+
+//Leyendo la Descripcion de los ficheros mayores que 20
+for ($b=0;$b<count($pn);$b++)
+{
+$numeros=substr($pn[$b],0,2);
+if ($numeros > 19)
+ {
+ $descripcion=exec("cat ".$dirtemplates.$pn[$b]." | awk 'NR==1 {print $2}'");//$text=trim($text);
+ //Aqui busco el fichero, parametros y descripcion segun llega de $_POST["modificafichero"]
+ if ($descripcion == $_POST["selecdescripcion"])
+ {
+ $fichero=$pn[$b];
+ $param=$dirtemplates.$fichero;
+ $parametros=file($param);
+ //echo $fichero." -- Descripcion -- ".$descripcion."<br>";
+ }
+
+ }
+}
+
+?>
+<TABLE width="850" align=CENTER border=1 cellPadding=1 cellSpacing=1 class=tabla_datos >
+<TR >
+ <TD height="70" colspan="2" valign="middle">
+ <p align=center><SPAN align=center class=cabeceras> <?php echo $TbMsg[4]?> </SPAN></p><p aling=left>
+ <form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="ultimonumero" value="<? echo $ultimonumero?>">
+ <input type="hidden" name="opcioncrear" value="2">
+ <input type="hidden" name="modo" value="1">
+ <?php if ($_SESSION["wadminetboot"] == 1 ){ ?>
+ <input type="submit" value=<?php echo $TbMsg[11]?> name="nuevoarran">
+ <?php } ?>
+
+ </form></p>
+ </TD>
+ </TR>
+ <?php if ($numeros > 19){ ?>
+<TR>
+<form name="actualiza" method="post" action="./boot_grub4dos_crear.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="ultimonumero" value="<? echo $ultimonumero?>">
+ <input type="hidden" name="opcioncrear" value="2">
+
+ <TD height="10" colspan="2" valign="middle">
+ <SPAN align=center class=subcabeceras><?php echo $TbMsg[9]." ------> ";?></SPAN>
+ <select name="selecdescripcion" id="selecdescripcion" onChange="document.actualiza.submit()">
+ <option value"" ></option>
+ <?php
+ for ($z=0;$z<count($pn);$z++)
+ {
+ if((substr($pn[$z],0,2)) > 19)
+ {
+ $descripcion=exec("cat ".$dirtemplates.$pn[$z]." | awk 'NR==1 {print $2}'");//$text=trim($text);
+ echo '<option value='.$descripcion.'>'.$descripcion.'</option>';
+ }
+ }
+ ?>
+ </select>
+ </TD>
+ </form>
+</TR>
+<?php }else{?>
+<TR>
+<form name="actualiza" method="post" action="./boot_grub4dos.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="ultimonumero" value="<? echo $ultimonumero?>">
+ <input type="hidden" name="modo" value="1">
+
+ <TD height="10" colspan="2" valign="middle">
+<SPAN align=center class=subcabeceras><?php echo $TbMsg[23]." -------> ";?><input type="submit" value=<?php echo $TbMsg[16]?> name="nuevoarran"></SPAN>
+ </TD>
+ </form>
+</TR>
+
+<?php } ?>
+
+
+<?php if (!empty($_POST["selecdescripcion"])) { ?>
+
+<form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
+<TR>
+ <TD width="300" height="10" valign="middle" colspan="">
+ <SPAN align=center class=subcabeceras><?php echo $TbMsg[12];?></SPAN>
+ </TD>
+
+ <TD width="500" height="10" valign="middle">
+ <input type="hidden" name="nombrefichero" id="nombrefichero" value="<?php echo $fichero;?>">
+ <input type="text" name="modificadescripcion" id="modificadescripcion" size="25" value="<?php echo $_POST["selecdescripcion"];?>">
+ </TD>
+</TR>
+
+<TR>
+ <TD width="300" height="100" valign="middle">
+ <SPAN align=center class=subcabeceras><?php echo $TbMsg[19]?></SPAN>
+ </TD>
+
+ <TD width="500" height="100" valign="middle">
+ <textarea name="parametrosmodifica" id="parametrosmodifica" cols="80" rows="15"><?php //Leyendo las lineas del Array parametros
+ for ($k=1;$k<count($parametros);$k++) {
+ echo $parametros[$k];
+}?></textarea>
+
+ </TD>
+</TR>
+<TR>
+ <TD width="300" valign="middle">
+ <SPAN align=center class=subcabeceras></SPAN>
+
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="ultimonumero" value="<? echo $ultimonumero?>">
+ <input type="hidden" name="confirmado" value="1">
+ <input type="hidden" name="opcioncrear" value="2">
+ <input type="submit" value="<?php echo $TbMsg[13]?>" name="nuevoarran">
+
+ </TD></form>
+
+ <TD width="500" valign="middle"><br />
+ <form name="crearranque" method="post" action="./boot_grub4dos.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="confirmado" value="1">
+ <input type="hidden" name="opcioncrear" value="2">
+ <input type="hidden" name="modo" value="1">
+ <input type="submit" value="<?php echo $TbMsg[16]?>" name="nuevoarran">
+ </form>
+ </TD>
+</TR>
+<?php }?>
+
+</TABLE>
+<?php
+//##################################################################################################################################
+//########### MODIFICAR COLUMNA ARRANQUE #########################################################################################
+//##################################################################################################################################
+//#### FIN SI USUARIO
+}
+
+else{
+//##################################################################################################################################
+//########### MODIFICAR COLUMNA ARRANQUE #########################################################################################
+//##################################################################################################################################
+//#########################################################################
+// MODO ADMINISTRADOR
+//#########################################################################
+//#########################################################################
+// LEYENDO EL DIRECTORIO
+// /var/lib/tftboot/menu.lst/templates
+//#########################################################################
+$dirtemplates="/var/lib/tftpboot/menu.lst/templates/";
+$directorio=dir($dirtemplates);
+$pn= array();//pila de nombres
+//bucle para llenar las pilas :P
+while ($archivo = $directorio->read())
+{
+ //no mostrar ni "." ni ".." ni "pxe"
+ if(($archivo!=".")&&($archivo!=".."))
+ {
+ //$description=exec("cat ".$dirtemplates.$pn[$i]." | awk 'NR==1 {print $2}'");//$text=trim($text);
+ array_push($pn, $archivo);
+ }
+}
+$directorio->close();
+//ordenar las pilas segun la pila de nombres
+array_multisort($pn);
+
+
+for ($b=0;$b<count($pn);$b++)
+{
+ if ($pn[$b] == "pxe")
+ {
+ $descripcion=exec("cat ".$dirtemplates.$pn[$b]." | awk 'NR==1 {print $2}'");//$text=trim($text);
+ //Aqui busco el fichero, parametros y descripcion segun llega de $_POST["modificafichero"]
+ if ($descripcion == $_POST["selecdescripcion"])
+ {
+ $fichero=$pn[$b];
+ $param=$dirtemplates.$fichero;
+ $parametros=file($param);
+ //echo $fichero." -- Descripcion -- ".$descripcion."<br>";
+ }
+ }
+}
+//Leyendo la Descripcion de los ficheros menores que 20
+for ($b=0;$b<count($pn);$b++)
+{
+ $numeros=substr($pn[$b],0,2);
+ if ($numeros > 19)
+ break;
+ {
+ $descripcion=exec("cat ".$dirtemplates.$pn[$b]." | awk 'NR==1 {print $2}'");//$text=trim($text);
+ //Aqui busco el fichero, parametros y descripcion segun llega de $_POST["modificafichero"]
+ if ($descripcion == $_POST["selecdescripcion"])
+ {
+ $fichero=$pn[$b];
+ $param=$dirtemplates.$fichero;
+ $parametros=file($param);
+ //echo $fichero." -- Descripcion -- ".$descripcion."<br>";
+ }
+
+ }
+}
+
+?>
+<TABLE width="850" align=CENTER border=1 cellPadding=1 cellSpacing=1 class=tabla_datos >
+<TR >
+ <TD height="70" colspan="4" valign="middle">
+ <p align=center><SPAN align=center class=cabeceras> <?php echo $TbMsg[4]?> </SPAN></p><p align=left>
+ <form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="ultimonumero" value="<? echo $ultimonumero?>">
+ <input type="hidden" name="opcioncrear" value="2">
+ <?php echo $modo;if ($modo==1)
+ {
+ echo '<input type=hidden name=modo value=1>';
+ }else{echo '<input type=hidden name=modo value=>';}
+
+ ?>
+ <input type="submit" value=<?php echo $TbMsg[10]?> name="nuevoarran">
+ </form></p>
+ </TD>
+ </TR>
+<TR>
+<form name="actualiza" method="post" action="./boot_grub4dos_crear.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="ultimonumero" value="<? echo $ultimonumero?>">
+ <input type="hidden" name="opcioncrear" value="2">
+ <input type="hidden" name="modo" value="1">
+
+
+ <TD height="10" colspan="3" valign="middle"><input type="hidden" name="nombreficheromodifica" id="nombreficheromodifica" value="<?php echo $fichero;?>">
+ <SPAN align=center class=subcabeceras><?php echo $TbMsg[9]." -------------------- >";?></SPAN>
+
+ </TD>
+ <TD height="10" valign="middle" align="right">
+ <select name="selecdescripcion" id="selecdescripcion" onChange="document.actualiza.submit()">
+ <option value"" ></option>
+ <?php
+ for ($z=0;$z<count($pn);$z++)
+ {
+ if((substr($pn[$z],0,2)) < 20 )
+ {
+ $descripcion=exec("cat ".$dirtemplates.$pn[$z]." | awk 'NR==1 {print $2}'");//$text=trim($text);
+ echo '<option value='.$descripcion.'>'.$descripcion.'</option>';
+ }
+ }
+ ?>
+ </select>
+
+ &nbsp;
+ </TD>
+ </form>
+</TR>
+<?php if (!empty($_POST["selecdescripcion"])){ ?>
+<form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
+<TR>
+ <TD width="600" height="10" valign="middle">
+ <SPAN align=center class=subcabeceras><?php echo $TbMsg[21];?></SPAN>
+ </TD>
+
+ <TD width="249" height="10" valign="middle">
+ &nbsp;<?php echo $fichero;?>
+ </TD>
+
+ <TD width="100" valign="middle" align="right">
+ <input type="hidden" name="nombrefichero" id="nombrefichero" value="<?php echo $fichero;?>">
+ <input type="text" name="modificadescripcion" id="modificadescripcion" size="25" value="<?php echo $_POST["selecdescripcion"];?>">
+ </TD>
+
+ <TD width="500" valign="middle">
+ <SPAN align=center class=subcabeceras><?php echo " <- ".$TbMsg[12];?></SPAN>
+ </TD>
+</TR>
+<TR>
+ <TD width="500" height="100" valign="middle">
+ <SPAN align=center class=subcabeceras><?php echo $TbMsg[19]?></SPAN>
+ </TD>
+
+ <TD width="500" height="100" colspan="3" valign="middle">
+ <textarea name="parametrosmodifica" id="parametrosmodifica" cols="95" rows="17"><?php //Leyendo las lineas del Array parametros
+ for ($k=1;$k<count($parametros);$k++) {
+ echo $parametros[$k];
+ }?></textarea>
+ </TD>
+</TR>
+<TR>
+ <TD width="500" valign="middle">
+ <SPAN align=center class=subcabeceras></SPAN>
+
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="ultimonumero" value="<? echo $ultimonumero?>">
+ <input type="hidden" name="confirmado" value="1">
+ <input type="hidden" name="opcioncrear" value="2">
+ <input type="submit" value="<?php echo $TbMsg[13]?>" name="nuevoarran">
+
+ </TD></form>
+
+ <TD width="500" valign="middle"><br />
+ <form name="crearranque" method="post" action="./boot_grub4dos.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="confirmado" value="1">
+ <input type="hidden" name="opcioncrear" value="2">
+ <input type="hidden" name="modo" value="1">
+ <input type="submit" value="<?php echo $TbMsg[16]?>" name="nuevoarran">
+ </form>
+ </TD>
+ <TD width="500" valign="middle"><br />
+ </TD>
+ <TD width="500" valign="middle"><br />
+ </TD>
+
+</TR>
+<?php }?>
+</TABLE>
+<?php
+//#########################################################################
+// FIN MODO ADMINISTRADOR
+//#########################################################################
+//#### FIN SI USUARIO
+
+
+//#### FIN SINO USUARIO
+}
+//#### FIN SINO CONFIRMADO
+}
+//#### FIN SI OPCIONCREAR
+}
+//##################################################################################################################################
+//########### MODIFICAR COLUMNA ARRANQUE #########################################################################################
+//##################################################################################################################################
+?>
+
+
+<?php
+//##################################################################################################################################
+//########### ELIMINAR COLUMNA ARRANQUE ##########################################################################################
+//##################################################################################################################################
+
+if ($opcioncrear == 3)
+ {
+ $confirmado=$_POST["confirmado"];
+ if ($confirmado == 1)
+ {
+ $eliminafichero=$_POST["eliminafichero"];
+// 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,$eliminafichero,$seleccion)
+{//Buscando idordenador de los arranque eliminafichero
+global $cambia;
+$cmd->texto="SELECT * FROM ordenadores where arranque='" . $eliminafichero ."' " . $seleccion;
+$rs=new Recordset;
+$rs->Comando=&$cmd;
+if (!$rs->Abrir()) echo "error";
+$rs->Primero();
+while (!$rs->EOF)
+{
+ //$cmd->texto="UPDATE ordenadores SET arranque=unknown WHERE idordenador=60";
+ //$resul=$cmd->Ejecutar();
+ //echo $eliminafichero.' - '.$rs->campos["nombreordenador"].'<BR>';
+ $cambia[]=$rs->campos["idordenador"];
+ $rs->Siguiente();
+}
+$rs->Cerrar();
+
+for ($u=0;$u<count($cambia);$u++)
+{
+ $nombrefich="00unknown";
+ $cmd->CreaParametro("@arranque","00unknown","");
+ $cmd->ParamSetValor("@arranque","00unknown");
+$cmd->texto="UPDATE ordenadores SET arranque=@arranque WHERE idordenador=".$cambia[$u];
+
+$rs=new Recordset;
+$rs->Comando=&$cmd;
+if (!$rs->Abrir()) echo "error";
+$rs->Primero();
+$resul=$cmd->Ejecutar();
+$rs->Cerrar();
+}
+}
+
+
+ $listadopxe=listaequipos($cmd,$eliminafichero,$seleccion);
+ echo $listadopxe;
+ $fichero = "/var/lib/tftpboot/menu.lst/templates/".$eliminafichero;
+ unlink($fichero);
+
+ ?>
+ <TABLE width="500" align=center border=1 >
+ <TR><TD align="center"><br><?php if($eliminafichero != null) echo $TbMsg[8];?><br><br><SPAN align=center class=subcabeceras><?php echo substr($eliminafichero,2);?></span><br><br><br>
+ <form name="crearranque" method="post" action="./boot_grub4dos.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="submit" value="Continuar" name="nuevoarran">
+ </form>
+ </TR></TD>
+</TABLE>
+
+ <?php }else{
+?>
+<?php
+//#########################################################################
+// LEYENDO EL DIRECTORIO
+// /var/lib/tftboot/menu.lst/templates
+//#########################################################################
+$dirtemplates="/var/lib/tftpboot/menu.lst/templates/";
+$directorio=dir($dirtemplates);
+$pn= array();//pila de nombres
+//bucle para llenar las pilas :P
+while ($archivo = $directorio->read())
+{
+ //no mostrar ni "." ni ".." ni "pxe"
+ if(($archivo!="pxe")&&($archivo!=".")&&($archivo!=".."))
+ {
+ array_push($pn, $archivo);
+ }
+}
+$directorio->close();
+//ordenar las pilas segun la pila de nombres
+array_multisort($pn);
+
+
+?>
+<TABLE width="650" align=CENTER border=1 cellPadding=1 cellSpacing=1 class=tabla_datos >
+<form name="eliminaarranque" method="post" action="./boot_grub4dos_crear.php">
+<TR align=center>
+ <TD height="70" colspan="2" valign="middle">
+ <SPAN align=center class=cabeceras> <?php echo $TbMsg[5]?> </SPAN>
+ </TD>
+ </TR>
+<TR>
+ <TD width="150" height="10" valign="middle">
+ <SPAN align=center class=subcabeceras><?php echo $TbMsg[12]?></SPAN>
+ </TD>
+
+ <TD width="500" height="10" valign="middle">
+ <select name="eliminafichero" id="eliminafichero">
+ <?php
+ for ($z=0;$z<count($pn);$z++)
+ {
+ if((substr($pn[$z],0,2)) > 19)
+ {
+ $description=exec("cat ".$dirtemplates.$pn[$z]." | awk 'NR==1 {print $2}'");//$text=trim($text);
+ echo '<option value='.$pn[$z].'>'.$description.'</option>';
+ }
+ }
+ ?>
+ </select></TD>
+</TR>
+
+<TR>
+ <TD width="150" valign="middle">
+ <SPAN align=center class=subcabeceras></SPAN>
+
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="confirmado" value="1">
+ <input type="hidden" name="opcioncrear" value="3">
+ <input type="submit" value="<?php echo $TbMsg[13]?>" name="nuevoarra">
+
+ </TD></form>
+
+ <TD width="500" valign="middle"><br />
+ <form name="crearranque" method="post" action="./boot_grub4dos.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="modo" value="1">
+ <input type="submit" value="<?php echo $TbMsg[16]?>" name="nuevoarran">
+ </form>
+ </TD>
+</TR>
+</TABLE>
+<?php
+//##################################################################################################################################
+//########### ELIMINAR COLUMNA ARRANQUE ##########################################################################################
+//##################################################################################################################################
+}}?>
+
+</body>
+</html>
diff --git a/admin/WebConsole/principal/boot_grub4dos_tabla.php b/admin/WebConsole/principal/boot_grub4dos_tabla.php
new file mode 100644
index 00000000..d381e3e4
--- /dev/null
+++ b/admin/WebConsole/principal/boot_grub4dos_tabla.php
@@ -0,0 +1,56 @@
+<TABLE width="150" align=left border=1 cellPadding=1 cellSpacing=1 class=tabla_datos >
+<TR>
+ <TD width="150" height="45" valign="middle">
+ <form name="crearranque" method="post" action="./boot_grub4dos.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="opcioncrear" value="">
+ </form>
+ </TD>
+</TR>
+<TR>
+ <TD width="150" height="100" valign="middle"> <?php echo $TbMsg[3]?><br />
+ <form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="opcioncrear" value="1">
+ <input type="hidden" name="ultimonumero" value="<?php echo $ultimonumero?>">
+ <input type="submit" value=<?php echo $TbMsg[0]?> name="nuevoarran">
+ </form>
+ </TD>
+</TR>
+<TR>
+ <TD width="150" height="100" valign="middle"> <?php echo $TbMsg[4]?><br />
+ <form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="opcioncrear" value="2">
+ <input type="submit" value=<?php echo $TbMsg[1]?> name="nuevoarran">
+ </form>
+ </TD>
+</TR>
+<TR>
+ <TD width="150" height="100" valign="middle"> <?php echo $TbMsg[5]?><br />
+ <form name="crearranque" method="post" action="./boot_grub4dos_crear.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="opcioncrear" value="3">
+ <input type="submit" value=<?php echo $TbMsg[2]?> name="nuevoarran">
+ </form>
+ </TD>
+</TR>
+<TR>
+ <TD width="150" height="150" valign="middle">
+ <form name="crearranque" method="post" action="./boot_grub4dos.php">
+ <input type="hidden" name="litambito" value="<? echo $litambito?>">
+ <input type="hidden" name="idambito" value="<? echo $idambito?>">
+ <input type="hidden" name="nombreambito" value="<? echo $nombreambito?>">
+ <input type="hidden" name="opcion"crear value="">
+ </form>
+ </TD>
+</TR>
+</TABLE> \ No newline at end of file
diff --git a/admin/WebConsole/principal/colasacciones.php b/admin/WebConsole/principal/colasacciones.php
index 93f3e8a9..7e9a2c97 100644
--- a/admin/WebConsole/principal/colasacciones.php
+++ b/admin/WebConsole/principal/colasacciones.php
@@ -46,9 +46,11 @@
$resultados="";
$visupro="";
$visuprm="";
- $visucmd="";
- $sesion="";
-
+ $visucmd="";
+ $sesion="";
+ $urlimg="";
+ $textambito="";
+
if (isset($_GET["ambito"])) $ambito=$_GET["ambito"];
if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
if (isset($_GET["nombreambito"])) $nombreambito=$_GET["nombreambito"];
@@ -56,7 +58,7 @@
if (isset($_POST["ambito"])) $ambito=$_POST["ambito"];
if (isset($_POST["idambito"])) $idambito=$_POST["idambito"];
if (isset($_POST["nombreambito"])) $nombreambito=$_POST["nombreambito"];
-
+
if (isset($_POST["tipoaccion"])) $tipoaccion=$_POST["tipoaccion"];
if (isset($_POST["estado"])) $estado=$_POST["estado"];
if (isset($_POST["resultado"])) $resultado=$_POST["resultado"];
@@ -65,13 +67,12 @@
if (isset($_POST["fechafin"])) $fechafin=$_POST["fechafin"];
if (isset($_POST["horainicio"])) $horainicio=$_POST["horainicio"];
if (isset($_POST["horafin"])) $horafin=$_POST["horafin"];
-
+
if (isset($_POST["swPOST"])) $swPOST=$_POST["swPOST"];
if (isset($_POST["visuprm"])) $visuprm=$_POST["visuprm"];
if (isset($_POST["visupro"])) $visupro=$_POST["visupro"];
if (isset($_POST["visucmd"])) $visucmd=$_POST["visucmd"];
-
if (isset($_POST["sesion"])) $sesion=$_POST["sesion"];
if (function_exists('date_default_timezone_set')) {
@@ -100,8 +101,8 @@
$cmd=CreaComando($cadenaconexion);
if (!$cmd)
Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
-
- $tbParametros=CreaTablaParametros($cmd); // Crea tabla en memmoria para acceder a detalles de comandos
+
+ $tbParametros=CreaTablaParametros($cmd); // Crea tabla en mezmmoria para acceder a detalles de comandos
//________________________________________________________________________________________________________
//
@@ -299,7 +300,7 @@
?>
<BR>
<BR>
- <?
+ <?php
// _________________________________________________________________________
//
// Tabla de opciones que afectan a todas las acciones mostradas
@@ -1109,15 +1110,15 @@ function escribiendoParametros($comando,$descripcion,$valor,$oA)
$bgcolor="#cedcec";
$html.='<TR id="'.$oA->sesion.'" value="A">';
if($sw){
- $html.='<TD align=right style="BACKGROUND-COLOR: '.$bgcolor.';" colspan=2>'.$comando.'</TD>';
+ $html.='<TD align=right style="BACKGROUND-COLOR: '.$bgcolor.';" colspan=2>'.$comando.'&nbsp;&nbsp;&nbsp;</TD>';
$sw=false;
}
else
$html.='<TD style="BACKGROUND-COLOR: '.$bgcolor.';" colspan=2>&nbsp;</TD>';
$html.='<TD style="BACKGROUND-COLOR: '.$bgcolor.';">&nbsp;</TD>';
- $html.='<TD style="BACKGROUND-COLOR: '.$bgcolor.';" colspan=4><b>'.$descripcion.'</b>:
+ $html.='<TD style="BACKGROUND-COLOR: '.$bgcolor.';" colspan=8><b>'.$descripcion.'</b>:
'.$valor.'</TD>';
- $html.='<TD style="BACKGROUND-COLOR: '.$bgcolor.';" colspan=5 >&nbsp;</TD>';
+ $html.='<TD style="BACKGROUND-COLOR: '.$bgcolor.';" colspan=1 >&nbsp;</TD>';
$html.='</TR>';
return($html);
}
diff --git a/admin/WebConsole/principal/configuraciones.php b/admin/WebConsole/principal/configuraciones.php
index ec7c6f97..02d780e8 100644
--- a/admin/WebConsole/principal/configuraciones.php
+++ b/admin/WebConsole/principal/configuraciones.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -13,8 +13,9 @@ include_once("../clases/AdoPhp.php");
include_once("../includes/CreaComando.php");
include_once("../includes/comunes.php");
include_once("../includes/constantes.php");
-include_once("../includes/ConfiguracionesParticiones.php");
include_once("../idiomas/php/".$idioma."/configuraciones_".$idioma.".php");
+include_once("../includes/ConfiguracionesParticiones.php");
+
//________________________________________________________________________________________________________
//
// Captura parámetros
@@ -59,7 +60,7 @@ if (!$cmd)
<LINK rel="stylesheet" type="text/css" href="../estilos.css">
</HEAD>
<BODY>
-<?
+<?php
switch($ambito){
case $AMBITO_AULAS :
$urlimg='../images/iconos/aula.gif';
@@ -133,117 +134,15 @@ if (!$cmd)
</TR>
</TABLE>
</FORM>
-<?
+<?php
}
$sws=$fk_sysFi | $fk_nombreSO | $fk_tamano | $fk_imagen | $fk_perfil | $fk_cache;
- pintaConfiguraciones($cmd,$idambito,$ambito,8,$sws,false);
+ pintaConfiguraciones($cmd,$idambito,$ambito,9,$sws,false);
?>
</BODY>
</HTML>
-<?
-// *************************************************************************************************************************************************
-// Descripción:
-// Crea una taba html con las especificaciones de particiones de un ambito ya sea ordenador,
-// grupo de ordenadores o aula
-// Parametros:
-// $configuraciones: Cadena con las configuraciones de particioners del ámbito. El formato
-// sería una secuencia de cadenas del tipo "clave de configuración" separados por "@"
-// Ejemplo:1;7;30000000;3;3;0;@2;130;20000000;5;4;0;@3;131;1000000;0;0;0;0
-//________________________________________________________________________________________________________
-function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
-{
- global $tbKeys; // Tabla contenedora de claves de configuración
- global $conKeys; // Contador de claves de configuración
- global $TbMsg;
-
- $colums=8;
- echo '<tr height="16">';
- echo '<th align="center">&nbsp;'.$TbMsg[20].'&nbsp;</th>'; // Número de partición
- echo '<th align="center">&nbsp;'.$TbMsg[24].'&nbsp;</th>'; // Tipo de partición
- echo '<th align="center">&nbsp;'.$TbMsg[27].'&nbsp;</th>'; // Sistema de ficheros
- echo '<th align="center">&nbsp;'.$TbMsg[21].'&nbsp;</th>'; // Sistema Operativo Instalado
- echo '<th align="center">&nbsp;'.$TbMsg[22].'&nbsp;</th>'; // Tamaño
- echo '<th align="center">&nbsp;'.$TbMsg[25].'&nbsp;</th>'; // Imagen instalada
- echo '<th align="center">&nbsp;'.$TbMsg[26].'&nbsp;</th>'; // Perfil software
- echo '<th align="center">&nbsp;'.$TbMsg[495].'&nbsp;</th>';
- echo '</tr>';
-
- $auxCfg=split("@",$configuraciones); // Crea lista de particiones
- for($i=0;$i<sizeof($auxCfg);$i++){
- $auxKey=split(";",$auxCfg[$i]); // Toma clave de configuracion
- for($k=0;$k<$conKeys;$k++){ // Busca los literales para las claves de esa partición
- if($tbKeys[$k]["cfg"]==$auxCfg[$i]){ // Claves encontradas
- if ($tbKeys[$k]["numpar"] == 0) { // Info del disco (umpart=0)
- //$disksize = formatomiles ($tbKeys[$k]["tamano"]);
- $disksize = tomaTamano($tbKeys[$k]["numpar"],$idordenadores);
- if (empty ($disksize)) {
- $disksize = '<em>'.$TbMsg[42].'</em>';
- }
- }
- else { // Información de partición (numpart>0)
- echo'<tr height="16">'.chr(13);
- echo'<td align="center">'.$tbKeys[$k]["numpar"].'</td>'.chr(13);
- echo'<td align="center">'.$tbKeys[$k]["tipopar"].'</td>'.chr(13);
- echo'<td align="center">&nbsp;'.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</td>'.chr(13);
- echo '<td align="center">&nbsp;'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</td>'.chr(13);
-
- echo'<td align="right">&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</td>'.chr(13);
-
- echo'<td align="center">&nbsp;'.tomaImagenes($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</td>'.chr(13);
-
- echo'<td align="center">&nbsp;'.tomaPerfiles($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</td>'.chr(13);
-
- if ($tbKeys[$k]["numpar"] == "4") {
- $rs=new Recordset;
- $cmd->texto="SELECT * FROM ordenadores_particiones WHERE idordenador='".$idordenadores."' AND numpar=4";
- $rs->Comando=&$cmd;
- if (!$rs->Abrir()) return(false); // Error al abrir recordset
- $rs->Primero();
- if (!$rs->EOF){
- $campocache=$rs->campos["cache"];
- }
- $rs->Cerrar();
- echo '<td align="leght">&nbsp;';
- $ima=split(",",$campocache);
- $numero=1;
- for ($x=0;$x<count($ima); $x++) {
- if(substr($ima[$x],-3)==".MB") {
- echo '<strong>'.$TbMsg[4951].': '.$ima[$x].'</strong>';
- } else {
- if(substr($ima[$x],-4)==".img") {
- echo '<br />'.$numero++.'.-'.$ima[$x];
- } else {
- echo '<br />&nbsp;&nbsp;&nbsp;&nbsp;'.$ima[$x];
- }
- }
- }
- echo '&nbsp;</td>'.chr(13);
- } else {
- echo'<td align="center">&nbsp;&nbsp;</td>'.chr(13);
- }
-
- echo'</tr>'.chr(13);
- }
- break;
- }
- }
- }
- // Mostrar información del disco, si se ha obtenido.
- if (!empty ($disksize)) {
- echo'<tr height="16">'.chr(13);
- echo'<td align="center">&nbsp;'.$TbMsg[35].'&nbsp;</td>'.chr(13);
- echo'<td></td>'.chr(13);
- echo'<td></td>'.chr(13);
- echo'<td></td>'.chr(13);
- echo'<td align="right">&nbsp;'.$disksize.'&nbsp;</td>'.chr(13);
- echo'<td></td>'.chr(13);
- echo'<td></td>'.chr(13);
- echo'<td></td>'.chr(13);
- echo'</tr>'.chr(13);
- }
- echo '<tr height="5"><td colspan="'.$colums.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</td></tr>';
-}
+<?php
//________________________________________________________________________________________________________
function datosAulas($cmd,$idaula)
{
@@ -337,7 +236,11 @@ function datosOrdenadores($cmd,$idordenador)
<TR>
<TH align=center>&nbsp;<?php echo $TbMsg[14]?>&nbsp;</TD>
<TD><?php echo $nombreordenador;?></TD>
- <TD colspan=2 valign=top align=left rowspan=4><IMG border=2 style="border-color:#63676b" src="../images/fotos/<?php echo $fotoordenador;?>"></TD>
+ <TD colspan=2 valign=top align=left rowspan=4><IMG border=2 style="border-color:#63676b"
+src="<?php if ($fotoordenador==""){echo "../images/fotos/fotoordenador.gif";}
+ else{echo "../images/fotos/".$fotoordenador;}?>">
+ </TD>
+
</TR>
<TR>
<TH align=center>&nbsp;<?echo $TbMsg[15]?>&nbsp;</TD>
@@ -377,10 +280,29 @@ function datosGruposOrdenadores($cmd,$idgrupo)
}
$rs->Cerrar();
}
+ if ($numordenadores==0)
+ {
+ $cmd->texto="SELECT *, COUNT(*) AS numordenadores
+ FROM gruposordenadores
+ WHERE idgrupo=".$idgrupo;
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if ($rs->Abrir()){
+ $rs->Primero();
+ if (!$rs->EOF){
+ $nombregrupoordenador=$rs->campos["nombregrupoordenador"];
+ $ordenadores=$rs->campos["numordenadores"];
+ $idaula=$rs->campos["idaula"];
+ }
+ $rs->Cerrar();
+ }
+ }
//////////////////////////////////////
- $cmd->texto="SELECT DISTINCT * FROM aulas
- INNER JOIN grupoordenadores ON grupoordenadores.idaula=aulas.idaula
- WHERE aulas.idaula=.$idaula";
+ $cmd->texto="SELECT DISTINCT aulas.*,count(*) as numordenadores
+ FROM aulas
+ INNER JOIN ordenadores ON ordenadores.idaula=aulas.idaula
+ WHERE aulas.idaula=".$idaula;
+
$rs=new Recordset;
$rs->Comando=&$cmd;
if ($rs->Abrir()){
@@ -398,14 +320,14 @@ function datosGruposOrdenadores($cmd,$idgrupo)
<?
echo '<TD>'.$nombregrupoordenador.'</TD>
<TD colspan=2 valign=top align=center rowspan=2>
- <IMG border=3 style="border-color:#63676b" src="'.$urlfoto.'"><br>
+ <IMG border=3 style="border-color:#63676b" src="../images/fotos/'.$urlfoto.'"><br>
<center>&nbsp;'.$TbMsg[13].':&nbsp;'. $ordenadores.'</center>
</TD>';
?>
</TR>
</TABLE>
-<?
+<?php
}
?>
diff --git a/admin/WebConsole/principal/imagenes.php b/admin/WebConsole/principal/imagenes.php
index ff2f372c..047f1a8a 100644
--- a/admin/WebConsole/principal/imagenes.php
+++ b/admin/WebConsole/principal/imagenes.php
@@ -1,13 +1,13 @@
-<?
-// *************************************************************************************************************************************************
+<?php
+// *******************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
// Fecha Creación: Año 2009-2010
-// Fecha Última modificación: Agosto-2010
+// Fecha Última modificación: Noviembre-2012
// Nombre del fichero: imagenes.php
// Descripción :
// Administra imágenes de un determinado Centro
-// *************************************************************************************************************************************************
+// ********************************************************************************************************
include_once("../includes/ctrlacc.php");
include_once("../clases/AdoPhp.php");
include_once("../clases/XmlPhp.php");
@@ -17,15 +17,18 @@ include_once("../includes/constantes.php");
include_once("../includes/CreaComando.php");
include_once("../idiomas/php/".$idioma."/imagenes_".$idioma.".php");
//________________________________________________________________________________________________________
+
$cmd=CreaComando($cadenaconexion);
if (!$cmd)
Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
else
- $arbolXML=CreaArbol($cmd,$idcentro); // Crea el arbol XML con todos las acciones registradas en el Centro
-// Creación del árbol
+ $arbolXML=CreaArbol($cmd,$idcentro); // Crea el código XML del arbol
+
+// Genera vista del árbol usando como origen de datos el XML anterior
$baseurlimg="../images/signos"; // Url de las imágenes de signo
$clasedefault="texto_arbol"; // Hoja de estilo (Clase por defecto) del árbol
$arbol=new ArbolVistaXML($arbolXML,0,$baseurlimg,$clasedefault,1,0,5);
+
//________________________________________________________________________________________________________
?>
<HTML>
@@ -40,78 +43,205 @@ $arbol=new ArbolVistaXML($arbolXML,0,$baseurlimg,$clasedefault,1,0,5);
<SCRIPT language="javascript" src="../jscripts/constantes.js"></SCRIPT>
<SCRIPT language="javascript" src="../jscripts/comunes.js"></SCRIPT>
<SCRIPT language="javascript" src="../clases/jscripts/HttpLib.js"></SCRIPT>
- <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comunes_'.$idioma.'.js"></SCRIPT>'?>
- <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/imagenes_'.$idioma.'.js"></SCRIPT>'?>
+ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/comunes_'.$idioma.'.js"></SCRIPT>'?>
+ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/imagenes_'.$idioma.'.js"></SCRIPT>'?>
</HEAD>
<BODY OnContextMenu="return false">
<?
//________________________________________________________________________________________________________
-echo $arbol->CreaArbolVistaXML(); // Crea árbol (HTML) a partir del XML
-$flotante=new MenuContextual(); // Crea objeto MenuContextual
+
+echo $arbol->CreaArbolVistaXML(); // Muestra árbol en pantalla
// Crea contextual de las imágenes
- $XMLcontextual=CreacontextualXMLImagenes();
- echo $flotante->CreaMenuContextual($XMLcontextual);
- $XMLcontextual=ContextualXMLGruposImagenes(); // Grupos de imágenes
- echo $flotante->CreaMenuContextual($XMLcontextual);
- $XMLcontextual=CreacontextualXMLImagen(); // Imágenes
- echo $flotante->CreaMenuContextual($XMLcontextual);
+$flotante=new MenuContextual();
+
+$XMLcontextual=CreaContextualXMLTiposImagenes($AMBITO_GRUPOSIMAGENESMONOLITICAS,
+ $LITAMBITO_GRUPOSIMAGENESMONOLITICAS,
+ $AMBITO_IMAGENESMONOLITICAS,
+ $LITAMBITO_IMAGENESMONOLITICAS,
+ $IMAGENES_MONOLITICAS);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+
+$XMLcontextual=CreaContextualXMLTiposImagenes($AMBITO_GRUPOSIMAGENESBASICAS,
+ $LITAMBITO_GRUPOSIMAGENESBASICAS,
+ $AMBITO_IMAGENESBASICAS,
+ $LITAMBITO_IMAGENESBASICAS,
+ $IMAGENES_BASICAS);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+
+$XMLcontextual=CreaContextualXMLTiposImagenes($AMBITO_GRUPOSIMAGENESINCREMENTALES,
+ $LITAMBITO_GRUPOSIMAGENESINCREMENTALES,
+ $AMBITO_IMAGENESINCREMENTALES,
+ $LITAMBITO_IMAGENESINCREMENTALES,
+ $IMAGENES_INCREMENTALES);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+
+$XMLcontextual=CreaContextualXMLGruposImagenes($AMBITO_GRUPOSIMAGENESMONOLITICAS,
+ $LITAMBITO_GRUPOSIMAGENESMONOLITICAS,
+ $AMBITO_IMAGENESMONOLITICAS,
+ $LITAMBITO_IMAGENESMONOLITICAS,
+ $IMAGENES_MONOLITICAS);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+
+$XMLcontextual=CreaContextualXMLGruposImagenes($AMBITO_GRUPOSIMAGENESBASICAS,
+ $LITAMBITO_GRUPOSIMAGENESBASICAS,
+ $AMBITO_IMAGENESBASICAS,
+ $LITAMBITO_IMAGENESBASICAS,
+ $IMAGENES_BASICAS);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+
+$XMLcontextual=CreaContextualXMLGruposImagenes($AMBITO_GRUPOSIMAGENESINCREMENTALES,
+ $LITAMBITO_GRUPOSIMAGENESINCREMENTALES,
+ $AMBITO_IMAGENESINCREMENTALES,
+ $LITAMBITO_IMAGENESINCREMENTALES,
+ $IMAGENES_INCREMENTALES);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+
+$XMLcontextual=CreacontextualXMLImagen($AMBITO_IMAGENESMONOLITICAS,
+ $LITAMBITO_IMAGENESMONOLITICAS,
+ $IMAGENES_MONOLITICAS);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+
+$XMLcontextual=CreacontextualXMLImagen($AMBITO_IMAGENESBASICAS,
+ $LITAMBITO_IMAGENESBASICAS,
+ $IMAGENES_BASICAS);
+echo $flotante->CreaMenuContextual($XMLcontextual);
+
+$XMLcontextual=CreacontextualXMLImagen($AMBITO_IMAGENESINCREMENTALES,
+ $LITAMBITO_IMAGENESINCREMENTALES,
+ $IMAGENES_INCREMENTALES);
+echo $flotante->CreaMenuContextual($XMLcontextual);
?>
</BODY>
</HTML>
-<?
-// *************************************************************************************************************************************************
-// Devuelve una cadena con formato XML con toda la información de las imáges registradas en un Centro concreto
+<?php
+// ********************************************************************************************************
+// Devuelve una cadena con formato XML con toda la información de las imáges registradas en un Centro
+// concreto
// Parametros:
// - cmd:Una comando ya operativo ( con conexión abierta)
// - idcentro: El identificador del centro
//________________________________________________________________________________________________________
-function CreaArbol($cmd,$idcentro){
+
+function CreaArbol($cmd,$idcentro)
+{
+ // Variables globales.
global $TbMsg;
+
global $LITAMBITO_IMAGENES;
+ global $AMBITO_GRUPOSIMAGENESMONOLITICAS,
+ $LITAMBITO_GRUPOSIMAGENESMONOLITICAS,
+ $AMBITO_IMAGENESMONOLITICAS,
+ $LITAMBITO_IMAGENESMONOLITICAS,
+ $IMAGENES_MONOLITICAS;
+
+ global $AMBITO_GRUPOSIMAGENESBASICAS,
+ $LITAMBITO_GRUPOSIMAGENESBASICAS,
+ $AMBITO_IMAGENESBASICAS,
+ $LITAMBITO_IMAGENESBASICAS,
+ $IMAGENES_BASICAS;
+
+ global $AMBITO_GRUPOSIMAGENESINCREMENTALES,
+ $LITAMBITO_GRUPOSIMAGENESINCREMENTALES,
+ $AMBITO_IMAGENESINCREMENTALES,
+ $LITAMBITO_IMAGENESINCREMENTALES,
+ $IMAGENES_INCREMENTALES;
+
$cadenaXML='<RAIZ';
// Atributos
$cadenaXML.=' imagenodo="../images/iconos/imagenes.gif"';
$cadenaXML.=' nodoid=Raiz'.$LITAMBITO_IMAGENES;
$cadenaXML.=' infonodo="'.$TbMsg[9].'"';
- $cadenaXML.=' clickcontextualnodo="menu_contextual(this,' ."'flo_Raiz".$LITAMBITO_IMAGENES."'".')"';
$cadenaXML.='>';
- $cadenaXML.=SubarbolXML_grupos_imagenes($cmd,$idcentro,0);
+ $cadenaXML.=SubarbolXML_tiposimagenes($AMBITO_GRUPOSIMAGENESMONOLITICAS,
+ $LITAMBITO_GRUPOSIMAGENESMONOLITICAS,
+ $AMBITO_IMAGENESMONOLITICAS,
+ $LITAMBITO_IMAGENESMONOLITICAS,
+ $IMAGENES_MONOLITICAS,
+ $TbMsg[11]);
+
+ $cadenaXML.=SubarbolXML_tiposimagenes($AMBITO_GRUPOSIMAGENESBASICAS,
+ $LITAMBITO_GRUPOSIMAGENESBASICAS,
+ $AMBITO_IMAGENESBASICAS,
+ $LITAMBITO_IMAGENESBASICAS,
+ $IMAGENES_BASICAS,
+ $TbMsg[12]);
+
+ $cadenaXML.=SubarbolXML_tiposimagenes($AMBITO_GRUPOSIMAGENESINCREMENTALES,
+ $LITAMBITO_GRUPOSIMAGENESINCREMENTALES,
+ $AMBITO_IMAGENESINCREMENTALES,
+ $LITAMBITO_IMAGENESINCREMENTALES,
+ $IMAGENES_INCREMENTALES,
+ $TbMsg[13]);
$cadenaXML.='</RAIZ>';
return($cadenaXML);
}
//________________________________________________________________________________________________________
-function SubarbolXML_grupos_imagenes($cmd,$idcentro,$grupoid){
- global $LITAMBITO_GRUPOSIMAGENES;
- global $AMBITO_GRUPOSIMAGENES;
+
+function SubarbolXML_tiposimagenes($ambg,$litambg,$amb,$litamb,$tipo,$msg)
+{
+ $cadenaXML="";
+ $cadenaXML.='<TIPOSIMAGENES';
+ // Atributos
+ $cadenaXML.=' imagenodo="../images/iconos/carpeta.gif"';
+ $cadenaXML.=' nodoid=SubRaiz-0';
+ $cadenaXML.=' infonodo='.$msg;
+ $cadenaXML.=' clickcontextualnodo="menu_contextual(this,' ."'TipoImagen_".$tipo."'".')"';
+ $cadenaXML.='>';
+ $cadenaXML.=SubarbolXML_gruposimagenes(0,$ambg,$litambg,$amb,$litamb,$tipo);
+ $cadenaXML.='</TIPOSIMAGENES>';
+ return($cadenaXML);
+}
+//________________________________________________________________________________________________________
+
+function SubarbolXML_gruposimagenes($grupoid,$ambg,$litambg,$amb,$litamb,$tipo)
+{
+ global $cmd;
+ global $idcentro;
+
$cadenaXML="";
$rs=new Recordset;
- $cmd->texto="SELECT idgrupo,nombregrupo,grupoid FROM grupos WHERE grupoid=".$grupoid." AND idcentro=".$idcentro." AND tipo=".$AMBITO_GRUPOSIMAGENES." ORDER BY nombregrupo";
+ $cmd->texto="SELECT idgrupo,nombregrupo,grupoid
+ FROM grupos WHERE grupoid=".$grupoid."
+ AND idcentro=".$idcentro."
+ AND tipo=".$ambg."
+ ORDER BY nombregrupo";
$rs->Comando=&$cmd;
+ //echo $cmd->texto;
if (!$rs->Abrir()) return($cadenaXML); // Error al abrir recordset
$rs->Primero();
while (!$rs->EOF){
$cadenaXML.='<GRUPOSIMAGENES';
// Atributos
- $cadenaXML.=' clickcontextualnodo="menu_contextual(this,'. " 'flo_".$LITAMBITO_GRUPOSIMAGENES."'" .');"';
+ $cadenaXML.=' clickcontextualnodo="menu_contextual(this,'. " 'flo_".$litambg."'" .');"';
$cadenaXML.=' imagenodo="../images/iconos/carpeta.gif"';
$cadenaXML.=' infonodo="'.$rs->campos["nombregrupo"].'"';
- $cadenaXML.=' nodoid='.$LITAMBITO_GRUPOSIMAGENES.'-'.$rs->campos["idgrupo"];
+ $cadenaXML.=' nodoid="'.$litambg."-".$rs->campos["idgrupo"];
$cadenaXML.='>';
- $cadenaXML.=SubarbolXML_grupos_imagenes($cmd,$idcentro,$rs->campos["idgrupo"]);
+ $cadenaXML.=SubarbolXML_gruposimagenes($rs->campos["idgrupo"],$ambg,$litambg,$amb,$litamb,$tipo);
$cadenaXML.='</GRUPOSIMAGENES>';
$rs->Siguiente();
}
$rs->Cerrar();
- $cadenaXML.=SubarbolXML_Imagenes($cmd,$idcentro,$grupoid);
+ $cadenaXML.=SubarbolXML_Imagenes($grupoid,$amb,$litamb,$tipo);
return($cadenaXML);
}
//________________________________________________________________________________________________________
-function SubarbolXML_Imagenes($cmd,$idcentro,$grupoid){
- global $LITAMBITO_IMAGENES;
+
+function SubarbolXML_Imagenes($grupoid,$amb,$litamb,$tipo)
+{
+ global $cmd;
+ global $idcentro;
+
$cadenaXML="";
$rs=new Recordset;
- $cmd->texto="SELECT idimagen,descripcion FROM imagenes WHERE idcentro=".$idcentro." AND grupoid=".$grupoid." ORDER BY descripcion";
+ $cmd->texto="SELECT idimagen,descripcion
+ FROM imagenes
+ WHERE idcentro=".$idcentro."
+ AND grupoid=".$grupoid."
+ AND tipo=".$tipo."
+ ORDER BY descripcion";
+ //echo "<br>".$cmd->texto;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return($cadenaXML); // Error al abrir recordset
$rs->Primero();
@@ -120,8 +250,8 @@ function SubarbolXML_Imagenes($cmd,$idcentro,$grupoid){
// Atributos
$cadenaXML.=' imagenodo="../images/iconos/imagen.gif"';
$cadenaXML.=' infonodo="'.$rs->campos["descripcion"].'"';
- $cadenaXML.=' nodoid='.$LITAMBITO_IMAGENES.'-'.$rs->campos["idimagen"];
- $cadenaXML.=' clickcontextualnodo="menu_contextual(this,' ."'flo_".$LITAMBITO_IMAGENES."'" .')"';
+ $cadenaXML.=' nodoid='.$litamb.'-'.$rs->campos["idimagen"];
+ $cadenaXML.=' clickcontextualnodo="menu_contextual(this,' ."'flo_".$litamb."'" .')"';
$cadenaXML.='>';
$cadenaXML.='</IMAGEN>';
$rs->Siguiente();
@@ -132,36 +262,28 @@ function SubarbolXML_Imagenes($cmd,$idcentro,$grupoid){
//________________________________________________________________________________________________________
//
// Menús Contextuales
+
//________________________________________________________________________________________________________
-function CreacontextualXMLImagenes(){
- global $AMBITO_IMAGENES;
- global $AMBITO_GRUPOSIMAGENES;
- global $LITAMBITO_GRUPOSIMAGENES;
- global $LITAMBITO_IMAGENES;
- global $TbMsg;
+function CreaContextualXMLTiposImagenes($ambg,$litambg,$amb,$litamb,$tipo)
+{
+ global $TbMsg;
+
$layerXML='<MENUCONTEXTUAL';
- $layerXML.=' idctx="flo_Raiz'.$LITAMBITO_IMAGENES.'"';
- $layerXML.=' maxanchu=170';
+ $layerXML.=' idctx="TipoImagen_'.$tipo.'"';
+ $layerXML.=' maxanchu=175';
$layerXML.=' swimg=1';
$layerXML.=' clase="menu_contextual"';
$layerXML.='>';
$layerXML.='<ITEM';
- $layerXML.=' alpulsar="insertar_grupos('.$AMBITO_GRUPOSIMAGENES.',' ."'".$LITAMBITO_GRUPOSIMAGENES."'".')"';
+ $layerXML.=' alpulsar="insertar_grupos('.$ambg.',' ."'".$litambg."'". ')"';
$layerXML.=' imgitem="../images/iconos/carpeta.gif"';
$layerXML.=' textoitem='.$TbMsg[0];
$layerXML.='></ITEM>';
-
- $wLeft=140;
- $wTop=115;
- $wWidth=550;
- $wHeight=300;
- $wpages="../propiedades/propiedades_imagenes.php";
- $wParam=$wLeft .",".$wTop.",".$wWidth.",".$wHeight.",'". $wpages."'";
-
+
$layerXML.='<ITEM';
- $layerXML.=' alpulsar="insertar('.$wParam.')"';
+ $layerXML.=' alpulsar="insertar_imagen(\''.$litamb.'\','.$tipo.')"';
$layerXML.=' imgitem="../images/iconos/imagen.gif"';
$layerXML.=' textoitem='.$TbMsg[1];
$layerXML.='></ITEM>';
@@ -172,7 +294,7 @@ function CreacontextualXMLImagenes(){
$wParam="../gestores/gestor_imagenes.php";
$layerXML.='<ITEM';
- $layerXML.=' alpulsar="colocar('."'".$wParam."'".','.$AMBITO_IMAGENES.')"';
+ $layerXML.=' alpulsar="colocar('."'".$wParam."'".','.$tipo.')"';
$layerXML.=' imgitem="../images/iconos/colocar.gif"';
$layerXML.=' textoitem='.$TbMsg[2];
$layerXML.='></ITEM>';
@@ -180,35 +302,27 @@ function CreacontextualXMLImagenes(){
$layerXML.='</MENUCONTEXTUAL>';
return($layerXML);
}
-//__________________________________________________________________________________________
-function ContextualXMLGruposImagenes(){
- global $AMBITO_IMAGENES;
- global $AMBITO_GRUPOSIMAGENES;
- global $LITAMBITO_GRUPOSIMAGENES;
+//________________________________________________________________________________________________________
+
+function CreaContextualXMLGruposImagenes($ambg,$litambg,$amb,$litamb,$tipo)
+{
global $TbMsg;
$layerXML='<MENUCONTEXTUAL';
- $layerXML.=' idctx="flo_'.$LITAMBITO_GRUPOSIMAGENES.'"';
+ $layerXML.=' idctx="flo_'.$litambg.'"';
$layerXML.=' maxanchu=175';
$layerXML.=' swimg=1';
$layerXML.=' clase="menu_contextual"';
$layerXML.='>';
$layerXML.='<ITEM';
- $layerXML.=' alpulsar="insertar_grupos('.$AMBITO_GRUPOSIMAGENES.',' ."'".$LITAMBITO_GRUPOSIMAGENES."'". ')"';
+ $layerXML.=' alpulsar="insertar_grupos('.$ambg.',' ."'".$litambg."'". ')"';
$layerXML.=' imgitem="../images/iconos/carpeta.gif"';
$layerXML.=' textoitem='.$TbMsg[0];
$layerXML.='></ITEM>';
- $wLeft=140;
- $wTop=115;
- $wWidth=550;
- $wHeight=290;
- $wpages="../propiedades/propiedades_imagenes.php";
- $wParam=$wLeft .",".$wTop.",".$wWidth.",".$wHeight.",'". $wpages."'";
-
$layerXML.='<ITEM';
- $layerXML.=' alpulsar="insertar('.$wParam.')"';
+ $layerXML.=' alpulsar="insertar_imagen(\''.$litamb.'\','.$tipo.')"';
$layerXML.=' imgitem="../images/iconos/imagen.gif"';
$layerXML.=' textoitem='.$TbMsg[1];
$layerXML.='></ITEM>';
@@ -219,7 +333,7 @@ function ContextualXMLGruposImagenes(){
$wParam="../gestores/gestor_imagenes.php";
$layerXML.='<ITEM';
- $layerXML.=' alpulsar="colocar('."'".$wParam."'".','.$AMBITO_IMAGENES.')"';
+ $layerXML.=' alpulsar="colocar('."'".$wParam."'".','.$tipo.')"';
$layerXML.=' imgitem="../images/iconos/colocar.gif"';
$layerXML.=' textoitem='.$TbMsg[2];
$layerXML.='></ITEM>';
@@ -242,25 +356,18 @@ function ContextualXMLGruposImagenes(){
$layerXML.='</MENUCONTEXTUAL>';
return($layerXML);
}
-//---------------------------------------------------------------------------------------------------------------------------
-function CreacontextualXMLImagen(){
- global $AMBITO_IMAGENES;
- global $LITAMBITO_IMAGENES;
+//__________________________________________________________________________________________
+
+function CreacontextualXMLImagen($amb,$litamb,$tipo)
+{
global $TbMsg;
$layerXML='<MENUCONTEXTUAL';
- $layerXML.=' idctx="flo_'.$LITAMBITO_IMAGENES.'"';
+ $layerXML.=' idctx="flo_'.$litamb.'"';
$layerXML.=' maxanchu=150';
$layerXML.=' swimg=1';
$layerXML.='>';
-/*
- $layerXML.='<ITEM';
- $layerXML.=' alpulsar="insertar_imagenincremental()"';
- $layerXML.=' imgitem="../images/iconos/incremental.gif"';
- $layerXML.=' textoitem='.$TbMsg[10];
- $layerXML.='></ITEM>';
-*/
$layerXML.='<ITEM';
$layerXML.=' alpulsar="muestra_informacion()"';
$layerXML.=' textoitem='.$TbMsg[5];
@@ -271,7 +378,7 @@ function CreacontextualXMLImagen(){
$layerXML.='</SEPARADOR>';
$layerXML.='<ITEM';
- $layerXML.=' alpulsar="mover('.$AMBITO_IMAGENES.')"';
+ $layerXML.=' alpulsar="mover('.$tipo.')"';
$layerXML.=' imgitem="../images/iconos/mover.gif"';
$layerXML.=' textoitem='.$TbMsg[6];
$layerXML.='></ITEM>';
@@ -279,21 +386,14 @@ function CreacontextualXMLImagen(){
$layerXML.='<SEPARADOR>';
$layerXML.='</SEPARADOR>';
- $wLeft=140;
- $wTop=115;
- $wWidth=550;
- $wHeight=290;
- $wpages="../propiedades/propiedades_imagenes.php";
- $wParam=$wLeft .",".$wTop.",".$wWidth.",".$wHeight.",'". $wpages."'";
-
$layerXML.='<ITEM';
- $layerXML.=' alpulsar="modificar('.$wParam.')"';
+ $layerXML.=' alpulsar="modificar_imagen('.$tipo.')"';
$layerXML.=' textoitem='.$TbMsg[7];
$layerXML.=' imgitem="../images/iconos/propiedades.gif"';
$layerXML.='></ITEM>';
$layerXML.='<ITEM';
- $layerXML.=' alpulsar="eliminar('.$wParam.')"';
+ $layerXML.=' alpulsar="eliminar_imagen('.$tipo.')"';
$layerXML.=' imgitem="../images/iconos/eliminar.gif"';
$layerXML.=' textoitem='.$TbMsg[8];
$layerXML.='></ITEM>';
@@ -302,3 +402,4 @@ function CreacontextualXMLImagen(){
return($layerXML);
}
?>
+
diff --git a/admin/WebConsole/principal/repositorios.php b/admin/WebConsole/principal/repositorios.php
index 7ebcfd4a..d1d5497e 100644
--- a/admin/WebConsole/principal/repositorios.php
+++ b/admin/WebConsole/principal/repositorios.php
@@ -26,6 +26,11 @@ else
$baseurlimg="../images/signos"; // Url de las imágenes de signo
$clasedefault="texto_arbol"; // Hoja de estilo (Clase por defecto) del árbol
$arbol=new ArbolVistaXML($arbolXML,0,$baseurlimg,$clasedefault,1,0,5);
+
+$flotante=new MenuContextual(); // Crea objeto MenuContextual
+$XMLcontextual=ContextualXMLComandos($LITAMBITO_CENTROS,$AMBITO_CENTROS);
+//echo $flotante->CreaMenuContextual($XMLcontextual);
+
//________________________________________________________________________________________________________
?>
<HTML>
@@ -44,6 +49,15 @@ $arbol=new ArbolVistaXML($arbolXML,0,$baseurlimg,$clasedefault,1,0,5);
<? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/repositorios_'.$idioma.'.js"></SCRIPT>'?>
</HEAD>
<BODY OnContextMenu="return false">
+<FORM name="fcomandos" action="" method="post" target="frame_contenidos">
+ <INPUT type="hidden" name="idcomando" value="">
+ <INPUT type="hidden" name="descricomando" value="">
+ <INPUT type="hidden" name="ambito" value="">
+ <INPUT type="hidden" name="idambito" value="">
+ <INPUT type="hidden" name="nombreambito" value="">
+ <INPUT type="hidden" name="gestor" value="">
+ <INPUT type="hidden" name="funcion" value="">
+</FORM>
<?
//________________________________________________________________________________________________________
echo $arbol->CreaArbolVistaXML(); // Crea árbol (HTML) a partir del XML
@@ -271,6 +285,22 @@ function CreacontextualXMLRepositorio(){
$wTop=115;
$wWidth=550;
$wHeight=280;
+ $wpages="../comandos/EliminarImagenRepositorio.php";
+ $wParam=$wLeft .",".$wTop.",".$wWidth.",".$wHeight.",'". $wpages."'";
+
+ $layerXML.='<ITEM';
+ $layerXML.=' alpulsar="modificar('.$wParam.')"';
+ $layerXML.=' textoitem='.$TbMsg[10];
+ $layerXML.=' imgitem="../images/iconos/comandos.gif"';
+ $layerXML.='></ITEM>';
+
+ $layerXML.='<SEPARADOR>';
+ $layerXML.='</SEPARADOR>';
+
+ $wLeft=140;
+ $wTop=115;
+ $wWidth=550;
+ $wHeight=280;
$wpages="../propiedades/propiedades_repositorios.php";
$wParam=$wLeft .",".$wTop.",".$wWidth.",".$wHeight.",'". $wpages."'";
@@ -289,4 +319,44 @@ function CreacontextualXMLRepositorio(){
$layerXML.='</MENUCONTEXTUAL>';
return($layerXML);
}
-?>
+
+
+//________________________________________________________________________________________________________
+function ContextualXMLComandos($litambito,$ambito){
+ global $cmd;
+ global $TbMsg;
+ $maxlongdescri=0;
+ $rs=new Recordset;
+ $cmd->texto="SELECT idcomando,descripcion,pagina,gestor,funcion
+ FROM comandos
+ WHERE activo=1 AND aplicambito & ".$ambito.">0
+ ORDER BY descripcion";
+ $rs->Comando=&$cmd;
+ if ($rs->Abrir()){
+ $layerXML="";
+ $rs->Primero();
+ while (!$rs->EOF){
+ if (isset($TbMsg["COMMAND_".$rs->campos["funcion"]])) {$descrip=$TbMsg["COMMAND_".$rs->campos["funcion"]];}else{$descrip;}
+ //$descrip=$TbMsg["COMMAND_".$rs->campos["funcion"]];
+ if (empty ($descrip)) {
+ $descrip=$rs->campos["funcion"];
+ }
+ $layerXML.='<ITEM';
+ $layerXML.=' alpulsar="confirmarcomando('."'".$ambito."'".','.$rs->campos["idcomando"].',\''.$rs->campos["descripcion"].'\',\''.$rs->campos["pagina"]. '\',\''.$rs->campos["gestor"]. '\',\''.$rs->campos["funcion"]. '\')"';
+ $layerXML.=' textoitem="'.$descrip.'"';
+ $layerXML.='></ITEM>';
+ if ($maxlongdescri < strlen($descrip)) // Toma la Descripción de mayor longitud
+ $maxlongdescri=strlen($descrip);
+ $rs->Siguiente();
+ }
+ $layerXML.='</MENUCONTEXTUAL>';
+ $prelayerXML='<MENUCONTEXTUAL';
+ $prelayerXML.=' idctx="flo_comandos_'.$litambito.'"';
+ $prelayerXML.=' maxanchu='.$maxlongdescri*7;
+ $prelayerXML.=' clase="menu_contextual"';
+ $prelayerXML.='>';
+ $finallayerXML=$prelayerXML.$layerXML;
+ return($finallayerXML);
+ }
+}
+?> \ No newline at end of file
diff --git a/admin/WebConsole/principal/verlog.php b/admin/WebConsole/principal/verlog.php
index 7626171b..844685eb 100644
--- a/admin/WebConsole/principal/verlog.php
+++ b/admin/WebConsole/principal/verlog.php
@@ -45,8 +45,9 @@ else
<HTML>
-<TITLE>Log: <? echo $_GET["nombreordenador"] ?> </TITLE>
<HEAD>
+<TITLE>Log: <? echo $_GET["nombreordenador"] ?> </TITLE>
+<meta charset="utf-8">
<?
#echo "<meta http-equiv='Refresh' content='2;URL=./verlog.php?nombreordenador=". $_GET["nombreordenador"] ."&ip=".$ip ."'";
?>
@@ -85,4 +86,4 @@ else
</form>
</BODY>
-</HTML> \ No newline at end of file
+</HTML>
diff --git a/admin/WebConsole/principal/verlogseguimiento.php b/admin/WebConsole/principal/verlogseguimiento.php
index cc0fa3e7..051f6653 100644
--- a/admin/WebConsole/principal/verlogseguimiento.php
+++ b/admin/WebConsole/principal/verlogseguimiento.php
@@ -45,12 +45,12 @@ else
<HTML>
-<TITLE>Log: <? echo $_GET["nombreordenador"] ?> </TITLE>
<HEAD>
+<TITLE>Log: <? echo $_GET["nombreordenador"] ?> </TITLE>
<?
echo "<meta http-equiv='Refresh' content='2;URL=http://".$ip."/cgi-bin/httpd-log.sh'";
?>
-
+<meta charset="utf-8">
</HEAD>
@@ -88,4 +88,4 @@ pclose($handle);
</form>
</BODY>
-</HTML> \ No newline at end of file
+</HTML>
diff --git a/admin/WebConsole/propiedades/propiedades_aulas.php b/admin/WebConsole/propiedades/propiedades_aulas.php
index 76a8662d..a571209e 100644
--- a/admin/WebConsole/propiedades/propiedades_aulas.php
+++ b/admin/WebConsole/propiedades/propiedades_aulas.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -22,7 +22,34 @@ $opcion=0;
$opciones=array($TbMsg[0],$TbMsg[1],$TbMsg[2],$TbMsg[3]);
//________________________________________________________________________________________________________
$idaula=0;
+$nombreaula="";
$grupoid=0;
+$ordenadores=0;
+$ubicacion="";
+$cagnon="";
+$pizarra="";
+$puestos=0;
+$horaresevini="";
+$horaresevfin="";
+$comentarios="";
+$router="";
+$netmask="";
+$modp2p="peer";
+$timep2p="";
+$modomul=2;
+$ipmul="";
+$pormulmetodos="";
+$pormul=9000;
+$velmul="";
+$dns="";
+$proxy="";
+$idmenu="";
+$idrepositorio="";
+$idprocedimiento="";
+$idperfilhard="";
+$validacion="";
+$paginalogin="";
+$paginavalidacion="";
if (isset($_GET["opcion"])) $opcion=$_GET["opcion"]; // Recoge parametros
if (isset($_GET["idaula"])) $idaula=$_GET["idaula"];
@@ -50,8 +77,8 @@ else
<SCRIPT language="javascript" src="../jscripts/validators.js"></SCRIPT>
<SCRIPT language="javascript" src="../jscripts/propiedades_aulas.js"></SCRIPT>
<SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT>
- <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_aulas_'.$idioma.'.js"></SCRIPT>'?>
- <script language=javascript>
+ <?php echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_aulas_'.$idioma.'.js"></SCRIPT>'?>
+ <script language=javascript>
function abrir_ventana(URL){
window.open('../images/ver.php','Imagenes','scrollbars=yes,resizable=yes,width=950,height=640')
}
@@ -69,8 +96,6 @@ function abrir_ventana(URL){
<INPUT type=hidden name=gidprocedimiento value="<? echo $gidprocedimiento?>">
<INPUT type=hidden name=gidrepositorio value="<? echo $gidrepositorio?>">
<INPUT type=hidden name=gidperfilhard value="<? echo $gidperfilhard?>">
- <INPUT type=hidden name=gcache value="<? echo $gcache?>">
-
<P align=center class=cabeceras><?echo $TbMsg[4]?><BR>
<SPAN align=center class=subcabeceras><? echo $opciones[$opcion]?></SPAN></P>
@@ -78,73 +103,69 @@ function abrir_ventana(URL){
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<tr>
<th align="center"><?php echo $TbMsg[5]?></th>
- <?php
- if ($opcion==$op_eliminacion){
+ <?php if ($opcion==$op_eliminacion){
echo '<td>'. $nombreaula.'</td>';
- echo '<td colspan="2" valign="top" align=c"enter" rowspan="2">
+ echo '<td rowspan="5" colspan="2" valign="top" align=c"enter">
<img border="3" style="border-color:#63676b" src="../images/fotos/'.$urlfoto.'" />
<br />'.$TbMsg[21].': '. $ordenadores.'</td>';
}
else{
echo '<td><input class="formulariodatos" name=nombreaula style="width:215" type=text value="'. $nombreaula.'" /></td>';
- echo'<td colspan="2" valign="top" align="left" rowspan="2"><img border="3" style="border-color:#63676b" src="../images/fotos/'.$urlfoto.'" /><br />'.$TbMsg[21].': '. $ordenadores.'<br />(150X110)-(jpg - gif) ---- '.$TbMsg[5091].'<br /><input name="archivo" type="file" id="archivo" size="16" /></td>';
+ echo'<td rowspan="5" colspan="2" valign="top" align="left"><img border="3" style="border-color:#63676b" src="../images/fotos/'.$urlfoto.'" /><br />'.$TbMsg[21].': '. $ordenadores.'<br />(150X110)-(jpg - gif - png) ---- '.$TbMsg[5091].'<br /><input name="archivo" type="file" id="archivo" size="16" /></td>';
}
?>
</tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</TD>
- <?if ($opcion==$op_eliminacion)
- echo '<TD>'.$ubicacion.'&nbsp; </TD>';
+ <tr>
+ <th align=center>&nbsp;<?php echo $TbMsg[6]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td>'.$ubicacion.'&nbsp; </td>';
else
- echo '<TD><TEXTAREA class="formulariodatos" name=ubicacion rows=3 cols=42>'.$ubicacion.'</TEXTAREA></TD>';
+ echo '<td><textarea class="formulariodatos" name=ubicacion rows=3 cols=42>'.$ubicacion.'</textarea></td>';
?>
- </TR>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[7]?>&nbsp;</TD>
- <?
- if ($opcion==$op_eliminacion){
- echo '<TD colspan=3><INPUT class="formulariodatos" name=cagnon type=checkbox onclick="desabilita(this)" ';
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg[7]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion){
+ echo '<td><input class="formulariodatos" name=cagnon type=checkbox onclick="desabilita(this)" ';
if ($cagnon) echo ' checked ';
- echo '></TD>';
+ echo '></td>';
}
else{
- echo '<TD colspan=3><INPUT class="formulariodatos" name=cagnon type=checkbox value="1" ';
+ echo '<td><input class="formulariodatos" name=cagnon type=checkbox value="1" ';
if ($cagnon) echo ' checked ';
- echo '></TD>';
+ echo '></td>';
}
?>
- </TR>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[8]?>&nbsp;</TD>
- <?
- if ($opcion==$op_eliminacion){
- echo '<TD colspan=3><INPUT class="formulariodatos" name=pizarra type=checkbox onclick="desabilita(this)" ';
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg[8]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion){
+ echo '<td><input class="formulariodatos" name=pizarra type=checkbox onclick="desabilita(this)" ';
if ($pizarra) echo ' checked ';
- echo '></TD>';
- }
- else{
- echo '<TD colspan=3><INPUT class="formulariodatos" name=pizarra type=checkbox value="1" ';
+ echo '></td>';
+ } else {
+ echo '<td><input class="formulariodatos" name=pizarra type=checkbox value="1" ';
if ($pizarra) echo ' checked ';
- echo '></TD>';
- }
+ echo '></td>';
+ }
?>
- </TR >
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center&nbsp;><?echo $TbMsg[9]?>&nbsp;</TD>
- <?
- if ($opcion==$op_eliminacion)
- echo '<TD colspan=3>'.$puestos.'</TD>';
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg[9]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td>'.$puestos.'</td>';
else
- echo '<TD colspan=3><INPUT class="formulariodatos" name=puestos style="width:30" type=text value='.$puestos.'></TD>';
+ echo '<td><input class="formulariodatos" name=puestos style="width:30" type=text value='.$puestos.'></td>';
?>
- </TR>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+<!-- HORARIO DE SERVICIO TEMPORALMENTE DESHABILITADO.
<TR>
- <TH align=center&nbsp;><?echo $TbMsg[13]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[13]?>&nbsp;</TD>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.$TbMsg[14].$horaresevini.'&nbsp;&nbsp;&nbsp&nbsp;'.$TbMsg[15].$horaresevfin.'</TD>';
@@ -152,9 +173,10 @@ function abrir_ventana(URL){
echo '<TD colspan=3>'.$TbMsg[14].'&nbsp<INPUT class="formulariodatos" onclick="vertabla_horas(this)" name=horaresevini style="width:30" type=text value='.$horaresevini.'>&nbsp;&nbsp;&nbsp&nbsp;'.$TbMsg[15].'&nbsp<INPUT class="formulariodatos" onclick="vertabla_horas(this)" name=horaresevfin style="width:30" type=text value='.$horaresevfin.'></TD>';
?>
</TR>
+-->
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[10]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[10]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>../images/fotos/'.$urlfoto.'</TD>';
@@ -181,118 +203,129 @@ function abrir_ventana(URL){
<?
}
?>
- </TR>
+ </TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[12]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[12]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.$comentarios.'</TD>';
else
echo '<TD colspan=3><TEXTAREA class="formulariodatos" name=comentarios rows=3 cols=65>'.$comentarios.'</TEXTAREA></TD>';
?>
- </TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
-<!----ADV -------------------------------------router-------------------------------------------------------------------------------------------------------------------------------------------->
+ </TR>
+<!---- ADV ---------------------------router------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center&nbsp;><?echo $TbMsg[28]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[28]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.$router.'</TD>';
else
echo '<TD colspan=3><INPUT class="formulariodatos" name=router style="width:100" type=text value='.$router.'></TD>';
?>
- </TR>
-<!-----ADV -----------------------------netmask--------------------------------------------------------------------------------------------------------------------------------------------------->
+ </TR>
+<!---- ADV --------------------------netmask------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center&nbsp;><?echo $TbMsg[29]?>&nbsp;</TD>
+ <TH align=center&nbsp;><?echo $TbMsg[29]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.$netmask.'</TD>';
else
echo '<TD colspan=3><INPUT class="formulariodatos" name=netmask style="width:100" type=text value='.$netmask.'></TD>';
?>
- </TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
-
-<!-----ADV --------------------------p2pmodo------------------------------------------------------------------------------------------------------------------------------------------------------>
+ </TR>
+<!---- Ramón ------------------------dns------------------------------------------------->
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg['PROP_DNSIP'] ?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td colspan="3">'.$dns.'</td>';
+ else
+ echo '<td colspan="3"><input class="formulariodatos" name="dns" style="width:100" type="text" maxlength="15" value="'.$dns.'" /></td>';
+ ?>
+ </tr>
+<!---- Ramón ------------------------proxy------------------------------------------------->
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg['PROP_PROXYURL'] ?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td colspan="3">'.$proxy.'</td>';
+ else
+ echo '<td colspan="3"><input class="formulariodatos" name="proxy" style="width:200" type="text" maxlength="30" value="'.$proxy.'" /></td>';
+ ?>
+ </tr>
+<!---- ADV --------------------------p2pmodo------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center&nbsp;><?echo $TbMsg[26]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[26]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.$modp2p.'</TD>';
- else
+ else {
echo '<TD colspan=3>';
$p2pmetodos="peer=peer".chr(13);
$p2pmetodos.="leecher=leecher".chr(13);
$p2pmetodos.="seeder=seeder";
echo HTMLCTESELECT($p2pmetodos,"modp2p","estilodesple","",$modp2p,100).'</TD>';
+ }
?>
- </TR>
+ </TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<!----------------------------p2p tiempo semillero--------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center&nbsp;><?echo $TbMsg[27]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[27]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.$timep2p.'</TD>';
else
echo '<TD colspan=3><INPUT class="formulariodatos" name=timep2p style="width:100" type=text value='.$timep2p.'></TD>';
?>
- </TR>
+ </TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
-
-
-
-
-
-
- <TR>
- <TH align=center&nbsp;><?echo $TbMsg[22]?>&nbsp;</TD>
+ <TR>
+ <TH align=center>&nbsp;<?echo $TbMsg[22]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion){
$TBMetodos[0]="";
$TBMetodos[1]="Half-Duplex";
$TBMetodos[2]="Full-Duplex";
echo '<TD colspan=3>'.$TBMetodos[$modomul].'</TD>';
- }
- else
+ } else {
echo '<TD colspan=3>';
$metodos="0=".chr(13);
$metodos.="1=Half-Duplex".chr(13);
$metodos.="2=Full-Duplex";
echo HTMLCTESELECT($metodos,"modomul","estilodesple","",$modomul,100).'</TD>';
+ }
?>
- </TR>
+ </TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center&nbsp;><?echo $TbMsg[23]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[23]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.$ipmul.'</TD>';
else
echo '<TD colspan=3><INPUT class="formulariodatos" name=ipmul style="width:100" type=text value='.$ipmul.'></TD>';
?>
- </TR>
+ </TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center&nbsp;><?echo $TbMsg[24]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[24]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.$pormul.'</TD>';
- else
+ else {
echo '<td colspan="3">';
for ($i=9000; $i<9050; $i+=2) {
$pormulmetodos.="$i=$i".chr(13);
}
$pormulmetodos.="9050=9050";
echo HTMLCTESELECT($pormulmetodos,"pormul","estilodesple","",$pormul,100).'</td>';
+ }
?>
- </TR>
+ </TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center&nbsp;><?echo $TbMsg[25]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[25]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.$velmul.'</TD>';
@@ -306,7 +339,7 @@ function abrir_ventana(URL){
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[11]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[11]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.TomaDato($cmd,$idcentro,'menus',$idmenu,'idmenu','descripcion').'&nbsp;</TD>';
@@ -316,7 +349,7 @@ function abrir_ventana(URL){
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[16]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[16]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.TomaDato($cmd,$idcentro,'repositorios',$idrepositorio,'idrepositorio','nombrerepositorio').'&nbsp;</TD>';
@@ -326,7 +359,7 @@ function abrir_ventana(URL){
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[20]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[20]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.TomaDato($cmd,$idcentro,'procedimientos',$idprocedimiento,'idprocedimiento','descripcion').'&nbsp;</TD>';
@@ -336,7 +369,7 @@ function abrir_ventana(URL){
</TR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[17]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[17]?>&nbsp;</TH>
<?
if ($opcion==$op_eliminacion)
echo '<TD colspan=3>'.TomaDato($cmd,$idcentro,'perfileshard',$idperfilhard,'idperfilhard','descripcion').'&nbsp;</TD>';
@@ -344,28 +377,48 @@ function abrir_ventana(URL){
echo '<TD colspan=3>'.HTMLSELECT($cmd,$idcentro,'perfileshard',$idperfilhard,'idperfilhard','descripcion',330).'</TD>';
?>
</TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center&nbsp;><?echo $TbMsg[19]?>&nbsp;</TD>
- <?
- if ($opcion==$op_eliminacion)
- echo '<TD colspan=3>'.$cache.'</TD>';
+<!--------------------------------------------------------------UHU comprobar si se requiere validacion -------------------------------------------------------------------------->
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg[30]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td colspan="3">'.(($validacion == 1)?"Si":"No").'</td>';
+ else {
+ echo '<td colspan="3">';
+ $validaciones="0=No".chr(13);
+ $validaciones.="1=Si";
+ echo HTMLCTESELECT($validaciones,"validacion","estilodesple","",$validacion,100).'</td>';
+ }
+ ?>
+ </tr>
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg[31]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td colspan="3">'.$paginalogin.'</td>';
else
- echo '<TD colspan=3><INPUT class="formulariodatos" name=cache style="width:100" type=text readonly value=0></TD>';
+ echo '<td colspan="3"><input class="formulariodatos" name="paginalogin" style="width:200" type="text" value="'.$paginalogin.'"></td>';
?>
- </TR>
+ </tr>
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg[32]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td colspan="3">'.$paginavalidacion.'</td>';
+ else
+ echo '<td colspan="3"><input class="formulariodatos" name="paginavalidacion" style="width:200" type="text" value="'.$paginavalidacion.'"></td>';
+ ?>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+
</TABLE>
</FORM>
</DIV>
-<?
+<?php
//________________________________________________________________________________________________________
include_once("../includes/opcionesbotonesop.php");
//________________________________________________________________________________________________________
?>
</BODY>
</HTML>
-<?
+<?php
//________________________________________________________________________________________________________
// Recupera los datos de un aula
// Parametros:
@@ -387,19 +440,15 @@ function TomaPropiedades($cmd,$ida)
global $horaresevfin;
global $grupoid;
-
-
global $idmenu;
global $idprocedimiento;
global $idrepositorio;
global $idperfilhard;
- global $cache;
global $gidmenu;
global $gidprocedimiento;
global $gidrepositorio;
global $gidperfilhard;
- global $gcache;
###################### ADV
global $router;
global $netmask;
@@ -410,6 +459,14 @@ function TomaPropiedades($cmd,$ida)
global $ipmul;
global $pormul;
global $velmul;
+###################### Ramón
+ global $dns;
+ global $proxy;
+###################### UHU
+ global $validacion;
+ global $paginalogin;
+ global $paginavalidacion;
+###################### UHU
$idaula=0;
$nombreaula="";
@@ -426,46 +483,40 @@ function TomaPropiedades($cmd,$ida)
## ADV #########################################
$router=0;
$netmask=0;
- $modp2p=0;
+ $modp2p=0;
$timep2p=0;
-### ADV ########################################
+### ADV ########################################
$modomul=0;
$ipmul=0;
$pormul=0;
$velmul=0;
-
+### UHU ########################################
+ $validacion="";
+
$idmenu=0;
$idprocedimiento=0;
$idrepositorio=0;
$idperfilhard=0;
- $cache=0;
$gidmenu=0;
$gidprocedimiento=0;
$gidrepositorio=0;
$gidperfilhard=0;
- $gcache=0;
-
-
$rs=new Recordset;
- $cmd->texto="SELECT count( * ) AS numordenadores, aulas.* ,
- group_concat(DISTINCT cast( ordenadores.idmenu AS char( 11 ) )
+ $cmd->texto="SELECT aulas.*, COUNT(ordenadores.idordenador) AS numordenadores,
+ GROUP_CONCAT(DISTINCT CAST( ordenadores.idmenu AS char( 11 ) )
ORDER BY ordenadores.idmenu SEPARATOR ',' ) AS idmenus,
- group_concat(DISTINCT cast( ordenadores.idrepositorio AS char( 11 ) )
+ GROUP_CONCAT(DISTINCT CAST( ordenadores.idrepositorio AS char( 11 ) )
ORDER BY ordenadores.idrepositorio SEPARATOR ',' ) AS idrepositorios,
- group_concat(DISTINCT cast( ordenadores.idperfilhard AS char( 11 ) )
+ GROUP_CONCAT(DISTINCT CAST( ordenadores.idperfilhard AS char( 11 ) )
ORDER BY ordenadores.idperfilhard SEPARATOR ',' ) AS idperfileshard,
- group_concat(DISTINCT cast( ordenadores.cache AS char( 11 ) )
- ORDER BY ordenadores.cache SEPARATOR ',' ) AS caches,
- group_concat(DISTINCT cast( ordenadores.idproautoexec AS char( 11 ) )
- ORDER BY ordenadores.idproautoexec SEPARATOR ',' ) AS idprocedimientos
- FROM aulas
- LEFT OUTER JOIN ordenadores ON ordenadores.idaula = aulas.idaula
- WHERE aulas.idaula =".$ida."
- GROUP BY aulas.idaula";
-
- // echo $cmd->texto;
+ GROUP_CONCAT(DISTINCT CAST( ordenadores.idproautoexec AS char( 11 ) )
+ ORDER BY ordenadores.idproautoexec SEPARATOR ',' ) AS idprocedimientos
+ FROM aulas
+ LEFT OUTER JOIN ordenadores ON ordenadores.idaula = aulas.idaula
+ WHERE aulas.idaula =".$ida."
+ GROUP BY aulas.idaula";
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return(false); // Error al abrir recordset
@@ -491,7 +542,14 @@ function TomaPropiedades($cmd,$ida)
$netmask=$rs->campos["netmask"];
$modp2p=$rs->campos["modp2p"];
$timep2p=$rs->campos["timep2p"];
-###################### ADV
+#################### Ramón
+ $dns=$rs->campos["dns"];
+ $proxy=$rs->campos["proxy"];
+#################### UHU
+ $validacion=$rs->campos["validacion"];
+ $paginalogin=$rs->campos["paginalogin"];
+ $paginavalidacion=$rs->campos["paginavalidacion"];
+###################### UHU
$ordenadores=$rs->campos["numordenadores"];
$idmenu=$rs->campos["idmenus"];
@@ -500,8 +558,6 @@ function TomaPropiedades($cmd,$ida)
if(count(split(",",$idrepositorio))>1) $idrepositorio=0;
$idperfilhard=$rs->campos["idperfileshard"];
if(count(split(",",$idperfilhard))>1) $idperfilhard=0;
- $cache=$rs->campos["caches"];
- if(count(split(",",$cache))>1) $cache=0;
$idmenu=$rs->campos["idmenus"];
if(count(split(",",$idmenu))>1) $idmenu=0;
$idprocedimiento=$rs->campos["idprocedimientos"];
@@ -511,12 +567,11 @@ function TomaPropiedades($cmd,$ida)
$gidprocedimiento=$idprocedimiento;
$gidrepositorio=$idrepositorio;
$gidperfilhard=$idperfilhard;
- $gcache=$cache;
-
+
$rs->Cerrar();
-
return(true);
}
return(false);
}
?>
+
diff --git a/admin/WebConsole/propiedades/propiedades_grupos.php b/admin/WebConsole/propiedades/propiedades_grupos.php
index fa3aaf42..3c974daa 100644
--- a/admin/WebConsole/propiedades/propiedades_grupos.php
+++ b/admin/WebConsole/propiedades/propiedades_grupos.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -36,6 +36,7 @@ if (isset($_GET["iduniversidad"])) $iduniversidad=$_GET["iduniversidad"];
if (isset($_GET["idaula"])) $idaula=$_GET["idaula"];
if (isset($_GET["identificador"])) $idgrupo=$_GET["identificador"];
+
//________________________________________________________________________________________________________
$cmd=CreaComando($cadenaconexion); // Crea objeto comando
if (!$cmd)
@@ -70,10 +71,18 @@ switch($literaltipo){
$urlimg='../images/iconos/carpeta.gif';
$textambito=$TbMsg[10];
break;
- case $LITAMBITO_GRUPOSIMAGENES :
+ case $LITAMBITO_GRUPOSIMAGENESMONOLITICAS :
+ $urlimg='../images/iconos/carpeta.gif';
+ $textambito=$TbMsg[23];
+ break;
+ case $LITAMBITO_GRUPOSIMAGENESBASICAS :
$urlimg='../images/iconos/carpeta.gif';
- $textambito=$TbMsg[11];
+ $textambito=$TbMsg[24];
break;
+ case $LITAMBITO_GRUPOSIMAGENESINCREMENTALES :
+ $urlimg='../images/iconos/carpeta.gif';
+ $textambito=$TbMsg[25];
+ break;
case $LITAMBITO_GRUPOSCOMPONENTESHARD :
$urlimg='../images/iconos/carpeta.gif';
$textambito=$TbMsg[12];
@@ -145,7 +154,7 @@ switch($literaltipo){
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
<TH align=center>&nbsp;<?echo $TbMsg[5]?>&nbsp;</TD>
- <?if ($opcion==$op_eliminacion)
+ <?php if ($opcion==$op_eliminacion)
echo '<TD style="width:300">'.$nombregrupo.'</TD>';
else
echo '<TD><INPUT class="formulariodatos" name=nombregrupo style="width:320" type=text value="'.$nombregrupo.'"></TD>';?>
@@ -153,7 +162,7 @@ switch($literaltipo){
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<TR>
<TH align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</TD>
- <?if ($opcion==$op_eliminacion)
+ <?php if ($opcion==$op_eliminacion)
echo '<TD>'.$comentarios.'</TD>';
else
echo '<TD><TEXTAREA class="formulariodatos" name=comentarios rows=3 cols=60>'.$comentarios.'</TEXTAREA></TD>';
@@ -162,14 +171,14 @@ switch($literaltipo){
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
</TABLE>
</FORM>
-<?
+<?php
//________________________________________________________________________________________________________
include_once("../includes/opcionesbotonesop.php");
//________________________________________________________________________________________________________
?>
</BODY>
</HTML>
-<?
+<?php
//________________________________________________________________________________________________________
// Recupera los datos de una grupo
// Parametros:
@@ -203,3 +212,4 @@ function TomaPropiedades($cmd,$id){
return(false);
}
?>
+
diff --git a/admin/WebConsole/propiedades/propiedades_imagenes.php b/admin/WebConsole/propiedades/propiedades_imagenes.php
index 50a7ae5d..b622fb44 100644
--- a/admin/WebConsole/propiedades/propiedades_imagenes.php
+++ b/admin/WebConsole/propiedades/propiedades_imagenes.php
@@ -1,5 +1,5 @@
-<?
-// *************************************************************************************************************************************************
+<?php
+// ********************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
// Fecha Creación: Año 2009-2010
@@ -7,28 +7,44 @@
// Nombre del fichero: propiedades_imagenes.php
// Descripción :
// Presenta el formulario de captura de datos de una imagen para insertar,modificar y eliminar
-// *************************************************************************************************************************************************
+// *******************************************************************************************************
include_once("../includes/ctrlacc.php");
-include_once("../includes/opciones.php");
-include_once("../includes/CreaComando.php");
include_once("../clases/AdoPhp.php");
-include_once("../includes/HTMLSELECT.php");
+include_once("../includes/constantes.php");
+include_once("../includes/opciones.php");
+include_once("../includes/CreaComando.php");include_once("../includes/HTMLSELECT.php");
+include_once("../includes/TomaDato.php");
include_once("../idiomas/php/".$idioma."/propiedades_imagenes_".$idioma.".php");
//________________________________________________________________________________________________________
-$opcion=0;
+
+if (isset($_POST["opcion"])) {$opcion=$_POST["opcion"];}else{$opcion=0;} // Recoge parametros
$opciones=array($TbMsg[0],$TbMsg[1],$TbMsg[2],$TbMsg[3]);
//________________________________________________________________________________________________________
-$idimagen=0;
+
+// Valores iniciales para variables.
+$idimagen=0;
$nombreca="";
+$ruta="";
$descripcion="";
+$codpar=0;
+$numpar=0;
$idperfilsoft=0;
+$perfilsoft="";
$comentarios="";
$grupoid=0;
-
+$litamb="";
+$tipoimg=0;
+$idrepositorio=0;
+$imagenid=0;
+if (isset($_POST["validnombreca"])) {$opcion=$_POST["validnombreca"];}else{$validnombreca="";} // Recoge parametros
+if (isset($_POST["datospost"])) {$datospost=$_POST["datospost"];}else{$datospost=0;} // Recoge parametros
if (isset($_GET["opcion"])) $opcion=$_GET["opcion"]; // Recoge parametros
if (isset($_GET["idimagen"])) $idimagen=$_GET["idimagen"];
if (isset($_GET["grupoid"])) $grupoid=$_GET["grupoid"];
if (isset($_GET["identificador"])) $idimagen=$_GET["identificador"];
+if (isset($_GET["litamb"])) $litamb=$_GET["litamb"];
+if (isset($_GET["tipoimg"])) $tipoimg=$_GET["tipoimg"];
+//________________________________________________________________________________________________________
//________________________________________________________________________________________________________
$cmd=CreaComando($cadenaconexion); // Crea objeto comando
if (!$cmd)
@@ -38,6 +54,28 @@ if ($opcion!=$op_alta){
if (!$resul)
Header('Location: '.$pagerror.'?herror=3'); // Error de recuperación de datos.
}
+
+if ( $opcion == 1 && $datospost == 1)
+ {
+ if (isset($_POST["opcion"])) $opcion=$_POST["opcion"];// Recoge parametros
+ if (isset($_POST["idimagen"])) $idimagen=$_POST["idimagen"];
+ if (isset($_POST["nombreca"]))
+ {$nombreca=$_POST["nombreca"];ValidaNombre($cmd,$nombreca);}if ($validnombreca != 1 ) {$validnombreca=0;}
+ if (isset($_POST["ruta"])) $ruta=$_POST["ruta"];
+ if (isset($_POST["descripcion"])) $descripcion=$_POST["descripcion"];
+ if (isset($_POST["grupoid"])) $grupoid=$_POST["grupoid"];
+ if (isset($_POST["idperfilsoft"])) $idperfilsoft=$_POST["idperfilsoft"];
+ if (isset($_POST["comentarios"])) $comentarios=$_POST["comentarios"];
+ if (isset($_POST["identificador"])) $idimagen=$_POST["identificador"];
+ if (isset($_POST["numpar"])) $numpar=$_POST["numpar"];
+ if (isset($_POST["codpar"])) $codpar=$_POST["codpar"];
+ if (isset($_POST["idrepositorio"])) $idrepositorio=$_POST["idrepositorio"];
+ if (isset($_POST["imagenid"])) $imagenid=$_POST["imagenid"];
+ if (isset($_POST["tipoimg"])) $tipoimg=$_POST["tipoimg"];
+ if (isset($_POST["litamb"])) $litamb=$_POST["litamb"];
+
+
+ }
//________________________________________________________________________________________________________
?>
<HTML>
@@ -46,103 +84,183 @@ if ($opcion!=$op_alta){
<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/constantes.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>'?>
</HEAD>
<BODY>
-<DIV align=center>
-<FORM name="fdatos" action="../gestores/gestor_imagenes.php" method="post">
- <INPUT type=hidden name=opcion value=<?=$opcion?>>
- <INPUT type=hidden name=idimagen value=<?=$idimagen?>>
- <INPUT type=hidden name=grupoid value=<?=$grupoid?>>
- <P align=center class=cabeceras><?echo $TbMsg[4]?><BR>
- <SPAN align=center class=subcabeceras><? echo $opciones[$opcion]?></SPAN></P>
+<DIV align=center>
+<?php if ( $opcion == 1 && $datospost == 1 && $validnombreca == 0 || $opcion != 1) { ?>
+<FORM name="fdatos" action="../gestores/gestor_imagenes.php" method="post">
+<?php }else{ ?>
+<FORM name="fdatos" action="./propiedades_imagenes.php" method="post">
+<?php } ?>
+
+ <INPUT type="hidden" name="opcion" value="<?=$opcion?>">
+ <INPUT type="hidden" name="idimagen" value="<?=$idimagen?>">
+ <INPUT type="hidden" name="grupoid" value="<?=$grupoid?>">
+ <INPUT type="hidden" name="tipoimg" value="<?=$tipoimg?>">
+ <INPUT type="hidden" name="litamb" value="<?=$litamb?>">
+ <INPUT type="hidden" name="datospost" value="1">
+ <?
+ switch($tipoimg){
+ case $IMAGENES_MONOLITICAS:
+ $lit=$TbMsg[4];
+ break;
+ case
+ $IMAGENES_BASICAS:
+ $lit=$TbMsg[12];
+ break;
+ case $IMAGENES_INCREMENTALES:
+ $lit=$TbMsg[13];
+ }
+
+ ?>
+ <P align=center class=cabeceras><?echo $lit?><BR>
+ <SPAN align=center class=subcabeceras><? echo $opciones[$opcion]?></SPAN>
+ </P>
+
<TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos>
- <!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
+ <!-------------------------------------------------------------------------------------->
+ <TR>
<TH align=center>&nbsp;<?echo $TbMsg[11]?>&nbsp;</TD>
- <?if ($opcion==$op_eliminacion)
- echo '<TD style="width:150">'.$nombreca.'</TD>';
+ <?if ($opcion==$op_eliminacion || !empty($idperfilsoft) || $opcion == 2)
+ echo '<TD style="width:150">'.$nombreca.'
+ &nbsp;<INPUT type="hidden" name="nombreca" value="'.$nombreca.'"></TD>';
else
- echo '<TD><INPUT class="formulariodatos" name=nombreca style="width:150" type=text value="'.$nombreca.'"></TD>';?>
+ echo '<TD><INPUT class="formulariodatos" name=nombreca style="width:150" type=text value="'.$nombreca.'"></TH>';if ($validnombreca == 1){echo '<font color=red><strong>&nbsp;'.$TbMsg[18].'</strong>';}?>
</TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
+ <!-------------------------------------------------------------------------------------->
+ <TR>
<TH align=center>&nbsp;<?echo $TbMsg[5]?>&nbsp;</TD>
<?if ($opcion==$op_eliminacion)
echo '<TD style="width:300">'.$descripcion.'</TD>';
else
- echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:300" type=text value="'.$descripcion.'"></TD>';?>
+ echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:350" type=text value="'.$descripcion.'"></TH>';?>
</TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <!-------------------------------------------------------------------------------------->
+ <?if($tipoimg==$IMAGENES_INCREMENTALES){?>
<TR>
- <TH align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</TD>
+ <TH align=center>&nbsp;<?echo $TbMsg[14]?>&nbsp;</TD>
<?
- if ($opcion==$op_eliminacion)
- echo '<TD>'.$perfilsoft.'</TD>';
+ if ($opcion==$op_eliminacion || !empty($idperfilsoft))
+ echo '<TD>'.TomaDato($cmd,$idcentro,'imagenes',$imagenid,'imagenid','descripcion').'
+ &nbsp;<INPUT type="hidden" name="imagenid" value="'.$imagenid.'"></TD>';
else
- echo '<TD>'.HTMLSELECT($cmd,$idcentro,'perfilessoft',$idperfilsoft,'idperfilsoft','descripcion',300).'</TD>';
+ echo '<TD>'.HTMLSELECT($cmd,$idcentro,'imagenes',$imagenid,'idimagen','descripcion',300,"","","
+ tipo=".$IMAGENES_BASICAS,"imagenid").'</TD>';
?>
</TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <?}?>
+ <!-------------------------------------------------------------------------------------->
+ <?if($tipoimg!=$IMAGENES_INCREMENTALES){?>
<TR>
<TH align=center>&nbsp;<?echo $TbMsg[8]?>&nbsp;</TD>
<?
- if ($opcion==$op_eliminacion)
- echo '<TD>'.$numpar.'</TD>';
+ if ($opcion==$op_eliminacion || !empty($idperfilsoft))
+ echo '<TD>'.$numpar.'
+ &nbsp;<INPUT type="hidden" name="numpar" value="'.$numpar.'"></TD>';
else
- echo '<TD><INPUT class="formulariodatos" name=numpar style="width:30" type=text value="'.$numpar.'"></TD>';
+ echo '<TD><INPUT class="formulariodatos" name=numpar style="width:30" type=text value="'.$numpar.'"></TH>';
?>
</TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <!-------------------------------------------------------------------------------------->
<tr>
<th align="center">&nbsp;<?php echo $TbMsg[9]?>&nbsp;</th>
<?php
- if ($opcion==$op_eliminacion)
- echo '<td>'.$tipopar.'</td>';
+ if ($opcion==$op_eliminacion || !empty($idperfilsoft))
+ echo '<td>'.$tipopar.'
+ &nbsp;<INPUT type="hidden" name="codpar" value="'.$codpar.'"></TD>';
else
echo '<td>'.HTMLSELECT($cmd,0,'tipospar',$codpar,'codpar',"CONCAT(tipopar,' (',HEX(codpar),')')",170,"","","clonable=1").'</td>';
?>
</tr>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <!-------------------------------------------------------------------------------------->
<TR>
<TH align=center>&nbsp;<?echo $TbMsg[10]?>&nbsp;</TD>
<?
- if ($opcion==$op_eliminacion)
- echo '<TD>'.$nombrerepositorio.'</TD>';
+ if ($opcion==$op_eliminacion || !empty($idperfilsoft))
+ echo '<TD>'.$nombrerepositorio.'
+ &nbsp;<INPUT type="hidden" name="idrepositorio" value="'.$idrepositorio.'"></TD>';
else
echo '<TD>'.HTMLSELECT($cmd,$idcentro,'repositorios',$idrepositorio,'idrepositorio','nombrerepositorio',300).'</TD>';
?>
- </TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
+ </TR>
+ <!-------------------------------------------------------------------------------------->
+ <?if($tipoimg==$IMAGENES_BASICAS){?>
+ <TR>
+ <TH align=center>&nbsp;<?echo $TbMsg[16]?>&nbsp;</TD>
+ <?if ($opcion==$op_eliminacion || !empty($idperfilsoft))
+ echo '<TD>'.$ruta.'
+ &nbsp;<INPUT type="hidden" name="ruta" value="'.$ruta.'"></TD>';
+ else
+ echo '<TD><INPUT class="formulariodatos" name=ruta style="width:350" type=text value="'.$ruta.'"></TH>';?>
+ </TR>
+ <?}?>
+ <!-------------------------------------------------------------------------------------->
+ <TR>
<TH align=center>&nbsp;<?echo $TbMsg[7]?>&nbsp;</TD>
<?if ($opcion==$op_eliminacion)
echo '<TD>'.$comentarios.'</TD>';
else
- echo '<TD><TEXTAREA class="formulariodatos" name=comentarios rows=3 cols=55>'.$comentarios.'</TEXTAREA></TD>';
+ echo '<TD><TEXTAREA class="formulariodatos" name=comentarios rows=3 cols=55>'.$comentarios.'</TEXTAREA></TH>';
?>
- </TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ </TR>
+ <!-------------------------------------------------------------------------------------->
+
+ <TR>
+ <TH align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</TD>
+ <?
+ echo '<TD>'.$perfilsoft.'
+ &nbsp;<INPUT type="hidden" name="idperfilsoft" value="'.$idperfilsoft.'"></TH>';
+
+ ?>
+ </TR>
+ <?}?>
+ <!-------------------------------------------------------------------------------------->
</TABLE>
</FORM>
+
<?
+if (!empty($idperfilsoft)){ // Nota a pie de página indicando que cuando la imagen tiene perfilsoft no pueden modificarse ciertos campos
+ echo '
+ <DIV id="Layer_nota" align=center >
+ <SPAN align=center class=notas><I>'.$TbMsg[15].'</I></SPAN>
+ </DIV><br>';
+}
//________________________________________________________________________________________________________
+
+
+if ($validnombreca=="0"){
+echo '<script type="text/javascript">';
+echo 'confirmar('.$opcion.')';
+echo '</script>';
+ }
+if ($validnombreca=="1"){
+echo '<script type="text/javascript">';
+echo 'alert('.$TbMsg[17].')';
+echo '</script>';
+
+ }
include_once("../includes/opcionesbotonesop.php");
//________________________________________________________________________________________________________
+
?>
</BODY>
</HTML>
<?
//________________________________________________________________________________________________________
+
// Recupera los datos de una imagen
// Parametros:
// - cmd: Una comando ya operativo (con conexión abierta)
// - id: El identificador de la imagen
//________________________________________________________________________________________________________
+
function TomaPropiedades($cmd,$idmagen){
global $nombreca;
+ global $ruta;
global $descripcion;
global $comentarios;
global $idperfilsoft;
@@ -152,18 +270,21 @@ function TomaPropiedades($cmd,$idmagen){
global $nombrerepositorio;
global $idrepositorio;
global $perfilsoft;
+ global $imagenid;
$rs=new Recordset;
- $cmd->texto="SELECT imagenes.*,tipospar.tipopar,repositorios.nombrerepositorio,perfilessoft.descripcion as perfilsoft FROM imagenes
- LEFT OUTER JOIN tipospar ON tipospar.codpar=imagenes.codpar
- LEFT OUTER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio
- LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=imagenes.idperfilsoft
- WHERE imagenes.idimagen=".$idmagen;
+ $cmd->texto="SELECT imagenes.*,tipospar.tipopar,repositorios.nombrerepositorio,perfilessoft.descripcion as perfilsoft
+ FROM imagenes
+ LEFT OUTER JOIN tipospar ON tipospar.codpar=imagenes.codpar
+ LEFT OUTER JOIN repositorios ON repositorios.idrepositorio=imagenes.idrepositorio
+ LEFT OUTER JOIN perfilessoft ON perfilessoft.idperfilsoft=imagenes.idperfilsoft
+ WHERE imagenes.idimagen=".$idmagen;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return(0); // Error al abrir recordset
$rs->Primero();
if (!$rs->EOF){
$nombreca=$rs->campos["nombreca"];
+ $ruta=$rs->campos["ruta"];
$descripcion=$rs->campos["descripcion"];
$idperfilsoft=$rs->campos["idperfilsoft"];
$comentarios=$rs->campos["comentarios"];
@@ -173,10 +294,38 @@ function TomaPropiedades($cmd,$idmagen){
$idrepositorio=$rs->campos["idrepositorio"];
$nombrerepositorio=$rs->campos["nombrerepositorio"];
$perfilsoft=$rs->campos["perfilsoft"];
+ $imagenid=$rs->campos["imagenid"];
$rs->Cerrar();
return(true);
}
else
return(true);
}
+
+//________________________________________________________________________________________________________
+
+// Comprueba Nombre de la imagen
+// Parametros:
+// - cmd: Una comando ya operativo (con conexión abierta)
+// - id: El identificador de la imagen
+//________________________________________________________________________________________________________
+
+function ValidaNombre($cmd,$nombreca){
+ global $nombreca;
+ global $validnombreca;
+
+ $rs=new Recordset;
+ $cmd->texto="SELECT * from imagenes WHERE nombreca='$nombreca'";
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(0); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $nombrecabase=$rs->campos["nombreca"];
+ if ( $nombrecabase == $nombreca )
+ {$validnombreca="1";}else{$validnombreca="0";}
+ }
+ $rs->Cerrar();
+
+
+}
?>
diff --git a/admin/WebConsole/propiedades/propiedades_menus.php b/admin/WebConsole/propiedades/propiedades_menus.php
index 9a6730e0..ffc645d1 100644
--- a/admin/WebConsole/propiedades/propiedades_menus.php
+++ b/admin/WebConsole/propiedades/propiedades_menus.php
@@ -14,6 +14,7 @@ include_once("../includes/CreaComando.php");
include_once("../includes/TomaDato.php");
include_once("../includes/HTMLSELECT.php");
include_once("../includes/HTMLCTESELECT.php");
+include_once("../includes/tftputils.php");
include_once("../clases/AdoPhp.php");
include_once("../idiomas/php/".$idioma."/propiedades_menus_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/avisos_".$idioma.".php");
@@ -66,42 +67,40 @@ if ($opcion!=$op_alta){
<INPUT type=hidden name=opcion value=<?=$opcion?>>
<INPUT type=hidden name=idmenu value=<?=$idmenu?>>
<INPUT type=hidden name=grupoid value=<?=$grupoid?>>
- <P align=center class=cabeceras><?echo $TbMsg[4]?><BR>
- <SPAN align=center class=subcabeceras><? echo $opciones[$opcion]?></SPAN></P>
- <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos >
+ <P align=center class=cabeceras><?php echo $TbMsg[4]?><BR>
+ <SPAN align=center class=subcabeceras><?php echo $opciones[$opcion]?></SPAN></P>
+ <table align="center" border="0" cellPadding="1" cellSpacing="1" class="tabla_datos">
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <th align=center>&nbsp;<?echo $TbMsg[5]?>&nbsp;</th>
+ <tr>
+ <th align="center">&nbsp;<?echo $TbMsg[5]?>&nbsp;</th>
<?php if ($opcion==$op_eliminacion)
- echo '<TD style="width:300">'.$descripcion.'</TD>';
+ echo '<td style="width:300">'.$descripcion.'</td>';
else
- echo '<TD><INPUT class="formulariodatos" name=descripcion style="width:300" type=text value="'.$descripcion.'"></TD>';?>
- </TR>
+ echo '<td><input class="formulariodatos" name="descripcion" style="width:300" type="text" value="'.$descripcion.'" /></td>';?>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
+ <tr>
<th align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</th>
<?php if ($opcion==$op_eliminacion)
- echo '<TD style="width:300">'.$titulo.'</TD>';
+ echo '<td style="width:300">'.$titulo.'</td>';
else
- echo '<TD ><INPUT class="formulariodatos" name=titulo style="width:300" type=text value="'.$titulo.'"></TD>';?>
- </TR>
+ echo '<td ><input class="formulariodatos" name="titulo" style="width:300" type="text" value="'.$titulo.'" /></td>';?>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <th align=center>&nbsp;<?echo $TbMsg[18]?>&nbsp;</th>
- <?
- if ($opcion==$op_eliminacion)
- echo '<TD colspan=3>'.TomaDato($cmd,0,'iconos',$idurlimg,'idicono','descripcion').'&nbsp;</TD>';
+ <tr>
+ <th align="center">&nbsp;<?echo $TbMsg[18]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td colspan="3">'.TomaDato($cmd,0,'iconos',$idurlimg,'idicono','descripcion').'&nbsp;</td>';
else
- echo '<TD colspan=3>'.HTMLSELECT($cmd,0,'iconos',$idurlimg,'idicono','descripcion',160,"","","idtipoicono=3").'</TD>';
+ echo '<td colspan="3">'.HTMLSELECT($cmd,0,'iconos',$idurlimg,'idicono','descripcion',150,"","","idtipoicono=3").'</td>';
?>
- </TR>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<!--<php-->
- <TR>
- <th align="center">&nbsp;<?php echo $TbMsg[17]?> <sup>*</sup>&nbsp;</th>
- <?php
- if ($opcion==$op_eliminacion){
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg[17]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion){
$tbresolucion[788]="800x600 16bits";
$tbresolucion[791]="1024x768 16bits";
$tbresolucion[355]="1152x864 16bits";
@@ -111,38 +110,51 @@ if ($opcion!=$op_alta){
$tbresolucion[792]="1024x768 24bits";
$tbresolucion[795]="1280x1024 24bits";
$tbresolucion[799]="1600x1200 24bits";
- echo '<TD style="width:150">'.$tbresolucion[$resolucion].'</TD>';
+ if (empty ($tbresolucion[$resolucion])) {
+ $res = $resolucion;
+ } else {
+ $res = $tbresolucion[$resolucion];
+ }
+ echo '<td>'.$res.'</td>';
}
else{
- $parametros="788=800x600 16bits".chr(13);
- $parametros.="791=1024x768 16bits".chr(13);
- $parametros.="355=1152x864 16bits".chr(13);
- $parametros.="794=1280x1024 16bits".chr(13);
- $parametros.="798=1600x1200 16bits".chr(13);
- $parametros.="789=800x600 24bits".chr(13);
- $parametros.="792=1024x768 24bits".chr(13);
- $parametros.="795=1280x1024 24bits".chr(13);
- $parametros.="799=1600x1200 24bits";
-
- echo '<TD>'.HTMLCTESELECT($parametros,"resolucion","estilodesple","",$resolucion,100).'</TD>';
+ if (clientKernelVersion() < "3.07") {
+ // Kernel anterior a 3.7 usa parámetro "vga".
+ $parametros ="788=800x600 16bits".chr(13);
+ $parametros.="791=1024x768 16bits".chr(13);
+ $parametros.="355=1152x864 16bits".chr(13);
+ $parametros.="794=1280x1024 16bits".chr(13);
+ $parametros.="798=1600x1200 16bits".chr(13);
+ $parametros.="789=800x600 24bits".chr(13);
+ $parametros.="792=1024x768 24bits".chr(13);
+ $parametros.="795=1280x1024 24bits".chr(13);
+ $parametros.="799=1600x1200 24bits";
+ } else {
+ // Kernel 3.7 y superior usa parámetro "video".
+ $parametros ="uvesafb:800x600-16=800x600, 16bit".chr(13);
+ $parametros.="uvesafb:800x600-24=800x600, 24bit".chr(13);
+ $parametros.="uvesafb:1024x768-16=1024x768, 16bit".chr(13);
+ $parametros.="uvesafb:1024x768-24=1024x768, 24bit".chr(13);
+ $parametros.="uvesafb:1152x864-16=1152x864, 16bit".chr(13);
+ $parametros.="uvesafb:1280x1024,16=1280x1024, 16bit".chr(13);
+ $parametros.="uvesafb:1280x1024,24=1280x1024, 24bit".chr(13);
+ $parametros.="uvesafb:1600x1200,24=1600x1200, 24bit".chr(13);
+ $parametros.="uvesafb:1600x1200,24=1600x1200, 16bit";
+ }
+ echo '<td>'.HTMLCTESELECT($parametros,"resolucion","estilodesple","",$resolucion,150).'</td>';
}
?>
- </TR>
-
-<!--?> -->
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <th align=center>&nbsp;<?echo $TbMsg[7]?>&nbsp;</th>
+ <tr>
+ <th align="center">&nbsp;<?echo $TbMsg[7]?>&nbsp;</th>
<?php if ($opcion==$op_eliminacion)
- echo '<TD >'.$comentarios.'&nbsp</TD>';
+ echo '<td>'.$comentarios.'&nbsp</TD>';
else
- echo '<TD><TEXTAREA class="formulariodatos" name=comentarios rows=3 cols=55>'.$comentarios.'</TEXTAREA></TD>';
+ echo '<td><textarea class="formulariodatos" name="comentarios" rows="3" cols="55">'.$comentarios.'</textarea></td>';
?>
- </TR>
- <tr>
- <th colspan="2" align="center">&nbsp;<sup>*</sup> <?php echo $TbMsg["WARN_NETBOOT"]?>&nbsp;</th>
</tr>
-</TABLE>
+</table>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<BR>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
@@ -233,14 +245,14 @@ if ($opcion!=$op_alta){
</TABLE>
</FORM>
</DIV>
-<?
+<?php
//________________________________________________________________________________________________________
include_once("../includes/opcionesbotonesop.php");
//________________________________________________________________________________________________________
?>
</BODY>
</HTML>
-<?
+<?php
//________________________________________________________________________________________________________
// Recupera los datos de un menu
// Parametros:
@@ -249,13 +261,13 @@ include_once("../includes/opcionesbotonesop.php");
//________________________________________________________________________________________________________
function TomaPropiedades($cmd,$id){
global $descripcion;
- global $titulo;
- global $coorx;
- global $coory;
- global $modalidad;
- global $scoorx;
- global $scoory;
- global $smodalidad;
+ global $titulo;
+ global $coorx;
+ global $coory;
+ global $modalidad;
+ global $scoorx;
+ global $scoory;
+ global $smodalidad;
global $comentarios;
global $htmlmenupub;
global $htmlmenupri;
diff --git a/admin/WebConsole/propiedades/propiedades_ordenadores.php b/admin/WebConsole/propiedades/propiedades_ordenadores.php
index eccc54fa..cf9b55cb 100644
--- a/admin/WebConsole/propiedades/propiedades_ordenadores.php
+++ b/admin/WebConsole/propiedades/propiedades_ordenadores.php
@@ -1,4 +1,4 @@
-<?
+<?php
// ****************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -31,12 +31,16 @@ $idrepositorio=0;
$idmenu=0;
$idprocedimiento=0;
$idaula=0;
-$cache="";
$grupoid=0;
######################## ADV
$netiface="";
$netdriver="";
-########################### ADV
+######################## UHU
+$validacion=0;
+$paginalogin="";
+$paginavalidacion="";
+######################## Ramón
+$arranque="";
if (isset($_GET["opcion"])) $opcion=$_GET["opcion"]; // Recoge parametros
if (isset($_GET["idordenador"])) $idordenador=$_GET["idordenador"];
@@ -54,75 +58,74 @@ if ($opcion!=$op_alta){
}
//________________________________________________________________________________________________________
?>
-<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_ordenadores.js"></SCRIPT>
- <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT>
- <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_ordenadores_'.$idioma.'.js"></SCRIPT>'?>
+<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/validators.js"></SCRIPT>
+ <script language="javascript" src="../jscripts/propiedades_ordenadores.js"></script>
+ <script language="javascript" src="../jscripts/opciones.js"></script>
+ <?php echo '<script language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_ordenadores_'.$idioma.'.js"></script>'?>
<script language=javascript>
function abrir_ventana(URL){
window.open('../images/ver.php','Imagenes','scrollbars=yes,resizable=yes,width=950,height=640')
}
</script>
-
-</HEAD>
-<BODY>
-<FORM name="fdatos" action="../gestores/gestor_ordenadores.php" method="post" enctype="multipart/form-data">
- <INPUT type=hidden name=opcion value="<? echo $opcion?>">
- <INPUT type=hidden name=idordenador value="<? echo $idordenador?>">
- <INPUT type=hidden name=grupoid value="<? echo $grupoid?>">
- <INPUT type=hidden name=idaula value="<? echo $idaula?>">
- <P align=center class=cabeceras><?echo $TbMsg[4]?><BR>
- <SPAN align=center class=subcabeceras><? echo $opciones[$opcion]?></SPAN></P>
+
+</head>
+<body>
+<form name="fdatos" action="../gestores/gestor_ordenadores.php" method="post" enctype="multipart/form-data">
+ <input type="hidden" name="opcion" value="<?php echo $opcion?>" />
+ <input type="hidden" name="idordenador" value="<?php echo $idordenador?>" />
+ <input type="hidden" name="grupoid" value="<?php echo $grupoid?>" />
+ <input type="hidden" name="idaula" value="<?php echo $idaula?>" />
+ <input type="hidden" name="arranque" value="<?php echo $arranque?>" />
+ <p align="center" class="cabeceras"><?echo $TbMsg[4]?><br />
+ <span align="center" class="subcabeceras"><? echo $opciones[$opcion]?></span></p>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<table align="center" border="0" cellPadding="1" cellSpacing="1" class="tabla_datos">
<tr>
<th align="center">&nbsp;<?php echo $TbMsg[5]?> <sup>*</sup>&nbsp;</th>
- <?php $fotomenu=$fotoordenador;
- if ($opcion==$op_eliminacion)
- echo '<TD>'.$nombreordenador.'</TD>';
- else
- echo '<TD><INPUT class="formulariodatos" name=nombreordenador type=text value="'.$nombreordenador.'"></TD>';
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td>'.$nombreordenador.'</td>';
+ else
+ echo '<td><input class="formulariodatos" name=nombreordenador type=text value="'.$nombreordenador.'"></td>';
+ if (empty ($fotoordenador)) {
+ $fotoordenador="fotoordenador.gif";
+ }
+ $fotomenu=$fotoordenador;
+ $dirfotos="../images/fotos";
?>
-<td colspan="2" valign="top" align="left" rowspan="3">
-<img border="2" style="border-color:#63676b" src="<?php
-if ($fotoordenador=="")
-{
-$fotoordenador="../images/fotos/fotoordenador.gif";
-}else{
-$fotoordenador="../images/fotos/".$fotoordenador;
-}
-echo $fotoordenador?>">
-<br />(150X110)-(jpg - gif) ---- <?php echo $TbMsg[5091]?>
-<br />
-<input name="archivo" type="file" id="archivo" size="16" />
-</td>
+ <td colspan="2" valign="top" align="left" rowspan="3">
+ <img border="2" style="border-color:#63676b" src="<?php echo $dirfotos.'/'.$fotoordenador?>" />
+ <?php if ($opcion!=$op_eliminacion) {
+ echo '<br />(150X110)-(jpg - gif - png) ---- '.$TbMsg[5091].'><br />';
+ echo '<input name="archivo" type="file" id="archivo" size="16" />';
+ }
+ ?>
+ </td>
</tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <th align="center">&nbsp;<?php echo $TbMsg[6]?> <sup>*</sup>&nbsp;</th>
- <?php
- if ($opcion==$op_eliminacion)
- echo '<TD>'.$ip.'</TD>';
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg[6]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td>'.$ip.'</td>';
else
- echo '<TD><INPUT class="formulariodatos" name=ip type=text value="'.$ip.'"></TD>';
+ echo '<td><input class="formulariodatos" name=ip type=text value="'.$ip.'"></td>';
?>
- </TR>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <th align="center">&nbsp;<?php echo $TbMsg[7]?> <sup>*</sup>&nbsp;</th>
- <?php
- if ($opcion==$op_eliminacion)
- echo '<TD>'.$mac.'</TD>';
+ <tr>
+ <th align="center">&nbsp;<?php echo $TbMsg[7]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td><input type="hidden" name="mac" value="'.$mac.'" />'.$mac.'</td>';
else
- echo '<TD><INPUT class="formulariodatos" name=mac type=text value="'. $mac.'"></TD>';
+ echo '<td><input class="formulariodatos" name=mac type=text value="'. $mac.'"></td>';
?>
- </TR>
+ </tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
+ <TR>
<th align=center>&nbsp;<?echo $TbMsg[509]?>&nbsp;</th>
<?
if ($opcion==$op_eliminacion)
@@ -195,66 +198,96 @@ echo $fotoordenador?>">
echo '<TD colspan=3>'.HTMLSELECT($cmd,$idcentro,'procedimientos',$idprocedimiento,'idprocedimiento','descripcion',250).'</TD>';
?>
</TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <th align=center>&nbsp;<?echo $TbMsg[12]?>&nbsp;</th>
- <?
- if ($opcion==$op_eliminacion)
- echo '<TD colspan=3>'.$cache.'</TD>';
- else
- echo '<TD colspan=3><INPUT style="width=250" class="formulariodatos" name="cache" type="text" readonly value="'. $cache.'"></TD>';
- ?>
- </TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<!-----ADV -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<tr>
<th align=center&nbsp;>&nbsp;<?echo $TbMsg[13]?>&nbsp;</th>
- <?
- echo '<td colspan="3">';
- $iface="eth0=eth0".chr(13);
- $iface.="eth1=eth1".chr(13);
- $iface.="eth2=eth2";
- echo HTMLCTESELECT($iface,"netiface","estilodesple","",$netiface,100).'</td>';
+ <?php if ($opcion==$op_eliminacion) {
+ echo '<td colspan="3">'.$netiface.'</td>';
+ } else {
+ echo '<td colspan="3">';
+ $iface="eth0=eth0".chr(13);
+ $iface.="eth1=eth1".chr(13);
+ $iface.="eth2=eth2";
+ echo HTMLCTESELECT($iface,"netiface","estilodesple","",$netiface,100).'</td>';
+ }
?>
</tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<tr>
<th align="center">&nbsp;<?echo $TbMsg[14]?>&nbsp;</th>
- <?
- echo '<td colspan="3">';
- $driver="generic=generic";
- echo HTMLCTESELECT($driver,"netdriver","estilodesple","",$netdriver,100).'</td>';
+ <?php if ($opcion==$op_eliminacion) {
+ echo '<td colspan="3">'.$netdriver.'</td>';
+ } else {
+ echo '<td colspan="3">';
+ $driver="generic=generic";
+ echo HTMLCTESELECT($driver,"netdriver","estilodesple","",$netdriver,100).'</td>';
+ }
?>
</tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+<!--------------------------------------------------------------UHU comprobar si se requiere validacion ------------------------------------------------------------------------------->
+
+ <tr>
+ <th align=center&nbsp;><? echo $TbMsg[15]; ?> &nbsp;</th>
+ <?php if ($opcion==$op_eliminacion) {
+ echo '<td colspan="3">'.$validacion.'</td>';
+ } else {
+ echo '<TD colspan="3">';
+ $validaciones="1=Si".chr(13);
+ $validaciones.="0=No";
+ echo HTMLCTESELECT($validaciones,"validacion","estilodesple","",$validacion,100).'</TD>';
+ }
+ ?>
+ </tr>
+ <tr>
+ <th align=center>&nbsp;<?echo $TbMsg[16]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td colspan="3">'.$paginalogin.'</td>';
+ else
+ echo '<td colspan="3"><input class="formulariodatos" name=paginalogin type=text value="'.$paginalogin.'" /></td>';
+ ?>
+ </tr>
+ <tr>
+ <th align=center>&nbsp;<?echo $TbMsg[17]?>&nbsp;</th>
+ <?php if ($opcion==$op_eliminacion)
+ echo '<td colspan="3">'.$paginavalidacion.'</td>';
+ else
+ echo '<td colspan="3"><input class="formulariodatos" name=paginavalidacion type=text value="'.$paginavalidacion.'" /></td>';
+ ?>
+ </tr>
+
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+<?php if ($opcion!=$op_eliminacion) { ?>
<tr>
- <th colspan="4" align="center">&nbsp;<sup>*</sup> <?php echo $TbMsg["WARN_NETBOOT"]?>&nbsp;</th>
+ <th colspan="4" align="center">&nbsp;<sup>*</sup> <?php echo $TbMsg["WARN_NAMELENGTH"]?>&nbsp;</th>
</tr>
-
+<?php } ?>
</table>
-</FORM>
-</DIV>
-<?
+</form>
+<?php
//________________________________________________________________________________________________________
include_once("../includes/opcionesbotonesop.php");
//________________________________________________________________________________________________________
?>
-<BR>
-<?
+<br />
+<?php
//________________________________________________________________________________________________________
//
// Frame con la información de la configuración
-echo '<DIV align=center>';
-echo '<IFRAME scrolling=auto height=500 width=90% frameborder=0
- src="../principal/configuraciones.php?swp=1&idambito='.$idordenador.'&ambito='.$AMBITO_ORDENADORES.'"></IFRAME>';
-echo '</DIV>';
+// Si es la opcion insertar no muestra nada -> opcion=$op_alta
+if ($opcion!=$op_alta) {
+ echo '<div align="center">';
+ echo '<iframe scrolling="auto" height="500" width="90%" frameborder="0"
+ src="../principal/configuraciones.php?swp=1&idambito='.$idordenador.'&ambito='.$AMBITO_ORDENADORES.'"></iframe>';
+ echo '</div>';
+}
//________________________________________________________________________________________________________
?>
-</BODY>
-</HTML>
-<?
+</body>
+</html>
+<?php
//________________________________________________________________________________________________________
// Recupera los datos de un ordenador
// Parametros:
@@ -271,9 +304,15 @@ function TomaPropiedades($cmd,$id){
global $idrepositorio;
global $idmenu;
global $idprocedimiento;
- global $cache;
global $netiface;
global $netdriver;
+########################### UHU
+ global $validacion;
+ global $paginalogin;
+ global $paginavalidacion;
+########################### Ramón
+ global $arranque;
+
$rs=new Recordset;
$cmd->texto="SELECT * FROM ordenadores WHERE idordenador=".$id;
$rs->Comando=&$cmd;
@@ -287,10 +326,16 @@ function TomaPropiedades($cmd,$id){
$idrepositorio=$rs->campos["idrepositorio"];
$idmenu=$rs->campos["idmenu"];
$idprocedimiento=$rs->campos["idproautoexec"];
- $cache=$rs->campos["cache"];
$netiface=$rs->campos["netiface"];
$fotoordenador=$rs->campos["fotoord"]; //Creado para foto
$netdriver=$rs->campos["netdriver"];
+########################### UHU
+ $validacion=$rs->campos["validacion"];
+ $paginalogin=$rs->campos["paginalogin"];
+ $paginavalidacion=$rs->campos["paginavalidacion"];
+########################### Ramón
+ $arranque=$rs->campos["arranque"];
+
$rs->Cerrar();
return(true);
}
@@ -298,3 +343,4 @@ function TomaPropiedades($cmd,$id){
return(false);
}
?>
+
diff --git a/admin/WebConsole/propiedades/propiedades_perfilhardwares.php b/admin/WebConsole/propiedades/propiedades_perfilhardwares.php
index cd2fe23f..cd2b8c6a 100644
--- a/admin/WebConsole/propiedades/propiedades_perfilhardwares.php
+++ b/admin/WebConsole/propiedades/propiedades_perfilhardwares.php
@@ -91,9 +91,6 @@ if ($opcion!=$op_alta){
?>
</tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <tr>
- <th colspan="3" align="center">&nbsp;<sup>*</sup> <?php echo $TbMsg["WARN_NETBOOT"]?>&nbsp;</th>
- </tr>
</table>
</form>
</div>
diff --git a/admin/WebConsole/propiedades/propiedades_repositorios.php b/admin/WebConsole/propiedades/propiedades_repositorios.php
index 19d445e4..deee1367 100644
--- a/admin/WebConsole/propiedades/propiedades_repositorios.php
+++ b/admin/WebConsole/propiedades/propiedades_repositorios.php
@@ -1,181 +1,250 @@
-<?
-// *********************************************************************************************************
-// Aplicación WEB: ogAdmWebCon
-// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
-// Fecha Creaciónn: Año 2009-2010
-// Fecha Última modificación: Agosto-2010
-// Nombre del fichero: propiedades_repositorios.php
-// Descripción :
-// Presenta el formulario de captura de datos de un repositorio para insertar,modificar y eliminar
-// **********************************************************************************************************
-include_once("../includes/ctrlacc.php");
-include_once("../includes/opciones.php");
-include_once("../includes/CreaComando.php");
-include_once("../clases/AdoPhp.php");
-include_once("../idiomas/php/".$idioma."/propiedades_repositorios_".$idioma.".php");
-//________________________________________________________________________________________________________
-$opcion=0;
-$opciones=array($TbMsg[0],$TbMsg[1],$TbMsg[2],$TbMsg[3]);
-//________________________________________________________________________________________________________
-$idrepositorio=0;
-$nombrerepositorio="";
-$ip="";
-$puertorepo="2002";
-$pathrepod="/opt/opengnsys/admin";
-$pathpxe="/opt/opengnsys/tftpboot/pxelinux.cfg";
-$grupoid=0;
-$comentarios="";
-$ordenadores=0; // Número de ordenador a los que da servicio
-
-if (isset($_GET["opcion"])) $opcion=$_GET["opcion"]; // Recoge parametros
-if (isset($_GET["idrepositorio"])) $idrepositorio=$_GET["idrepositorio"];
-if (isset($_GET["grupoid"])) $grupoid=$_GET["grupoid"];
-if (isset($_GET["identificador"])) $idrepositorio=$_GET["identificador"];
-//________________________________________________________________________________________________________
-$cmd=CreaComando($cadenaconexion); // Crea objeto comando
-if (!$cmd)
- Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con repositorio B.D.
-if ($opcion!=$op_alta){
- $resul=TomaPropiedades($cmd,$idrepositorio);
- if (!$resul)
- Header('Location: '.$pagerror.'?herror=3'); // Error de recuperaci�n de datos.
-}
-//________________________________________________________________________________________________________
-?>
-<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_repositorios.js"></SCRIPT>
- <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT>
- <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_repositorios_'.$idioma.'.js"></SCRIPT>'?>
-</HEAD>
-<BODY>
-<DIV align=center>
-<FORM name="fdatos" action="../gestores/gestor_repositorios.php" method="post">
- <INPUT type=hidden name=opcion value="<? echo $opcion?>">
- <INPUT type=hidden name=idrepositorio value="<? echo $idrepositorio?>">
- <INPUT type=hidden name=grupoid value="<? echo $grupoid?>">
- <INPUT type=hidden name=ordenadores value="<? echo $ordenadores?>">
-
- <P align=center class=cabeceras><?echo $TbMsg[4]?><BR>
- <SPAN align=center class=subcabeceras><? echo $opciones[$opcion]?></SPAN></P>
- <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos >
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[5]?>&nbsp;</TD>
- <?
- if ($opcion==$op_eliminacion)
- echo '<TD>'.$nombrerepositorio.'</TD>';
- else
- echo '<TD><INPUT class="formulariodatos" name=nombrerepositorio style="width:200" type=text value="'.$nombrerepositorio.'"></TD>';
- ?>
- <TD valign=top align=left rowspan=3 ><CENTER>
- <IMG border=3 style="border-color:#63676b" src="../images/aula.jpg">
- <BR>&nbsp;Ordenadores:&nbsp;<? echo $ordenadores?></CENTER></TD>
- </TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</TD>
- <?
- if ($opcion==$op_eliminacion)
- echo '<TD>'.$ip.'</TD>';
- else
- echo'<TD><INPUT class="formulariodatos" name=ip type=text style="width:200" value="'.$ip.'"></TD>';
- ?>
- </TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[8]?>&nbsp;</TD>
- <?
- if ($opcion==$op_eliminacion)
- echo '<TD>'.$puertorepo.'</TD>';
- else
- echo'<TD><INPUT class="formulariodatos" name=puertorepo type=text style="width:200" value="'.$puertorepo.'"></TD>';
- ?>
- </TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[9]?>&nbsp;</TD>
- <?
- if ($opcion==$op_eliminacion)
- echo '<TD colspan=2>'.$pathrepod.'</TD>';
- else
- echo'<TD colspan=2><INPUT class="formulariodatos" name=pathrepod type=text style="width:330" value="'.$pathrepod.'"></TD>';
- ?>
- </TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[10]?>&nbsp;</TD>
- <?
- if ($opcion==$op_eliminacion)
- echo '<TD colspan=2>'.$pathpxe.'</TD>';
- else
- echo'<TD colspan=2><INPUT class="formulariodatos" name=pathpxe type=text style="width:330" value="'.$pathpxe.'"></TD>';
- ?>
- </TR>
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
- <TR>
- <TH align=center>&nbsp;<?echo $TbMsg[7]?>&nbsp;</TD>
- <?
- if ($opcion==$op_eliminacion)
- echo '<TD colspan=2>'.$comentarios.'</TD>';
- else
- echo '<TD colspan=2><TEXTAREA class="formulariodatos" name=comentarios rows=2 cols=50>'.$comentarios.'</TEXTAREA></TD>';
- ?>
- </TR>
-
-<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
-
- </TABLE>
-</FORM>
-</DIV>
-<?
-//________________________________________________________________________________________________________
-include_once("../includes/opcionesbotonesop.php");
-//________________________________________________________________________________________________________
-?>
-</BODY>
-</HTML>
-<?
-//________________________________________________________________________________________________________
-// Recupera los datos de un repositorio
-// Parametros:
-// - cmd: Una comando ya operativo (con conexión abierta)
-// - id: El identificador del repositorio
-//________________________________________________________________________________________________________
-function TomaPropiedades($cmd,$id){
- global $nombrerepositorio;
- global $ip;
- global $comentarios;
- global $puertorepo;
- global $pathrepod;
- global $pathpxe;
- global $ordenadores;
-
- // NOTA: el parámetro "numordenadores" no se está utilizando, por lo que se
- // simplifica la consulta, ignorando dicho valor.
-/*
- $cmd->texto="SELECT repositorios.*, count(*) as numordenadores FROM repositorios
- INNER JOIN ordenadores ON ordenadores.idrepositorio=repositorios.idrepositorio
- WHERE repositorios.idrepositorio=".$id;
-*/
- $cmd->texto="SELECT * FROM repositorios WHERE idrepositorio=$id";
- $rs=new Recordset;
- $rs->Comando=&$cmd;
- if (!$rs->Abrir()) return(true); // Error al abrir recordset
- $rs->Primero();
- if (!$rs->EOF){
- $nombrerepositorio=$rs->campos["nombrerepositorio"];
- $ip=$rs->campos["ip"];
- $comentarios=$rs->campos["comentarios"];
- $puertorepo=$rs->campos["puertorepo"];
- $pathrepod=$rs->campos["pathrepod"];
- $pathpxe=$rs->campos["pathpxe"];
- $ordenadores=$rs->campos["numordenadores"];
- }
- $rs->Cerrar();
- return(true);
-}
-?>
+<?php
+// *********************************************************************************************************
+// Aplicación WEB: ogAdmWebCon
+// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
+// Fecha Creaciónn: Año 2009-2010
+// Fecha Última modificación: Agosto-2010
+// Nombre del fichero: propiedades_repositorios.php
+// Descripción :
+// Presenta el formulario de captura de datos de un repositorio para insertar,modificar y eliminar
+// **********************************************************************************************************
+include_once("../includes/ctrlacc.php");
+include_once("../includes/opciones.php");
+include_once("../includes/CreaComando.php");
+include_once("../clases/AdoPhp.php");
+include_once("../idiomas/php/".$idioma."/propiedades_repositorios_".$idioma.".php");
+//________________________________________________________________________________________________________
+$opcion=0;
+$opciones=array($TbMsg[0],$TbMsg[1],$TbMsg[2],$TbMsg[3]);
+//________________________________________________________________________________________________________
+$idrepositorio=0;
+$nombrerepositorio="";
+$ip="";
+$puertorepo="2002";
+$pathrepod="/opt/opengnsys/admin";
+$pathpxe="/opt/opengnsys/tftpboot/pxelinux.cfg";
+$grupoid=0;
+$comentarios="";
+$ordenadores=0; // Número de ordenador a los que da servicio
+$numordenadores=0; // Número de ordenador a los que da servicio
+$repolocal="";
+
+if (isset($_GET["opcion"])) $opcion=$_GET["opcion"]; // Recoge parametros
+if (isset($_GET["idrepositorio"])) $idrepositorio=$_GET["idrepositorio"];
+if (isset($_GET["grupoid"])) $grupoid=$_GET["grupoid"];
+if (isset($_GET["identificador"])) $idrepositorio=$_GET["identificador"];
+//________________________________________________________________________________________________________
+$cmd=CreaComando($cadenaconexion); // Crea objeto comando
+if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con repositorio B.D.
+if ($opcion!=$op_alta){
+ $resul=TomaPropiedades($cmd,$idrepositorio);
+ if (!$resul)
+ Header('Location: '.$pagerror.'?herror=3'); // Error de recuperaci�n de datos.
+}
+//________________________________________________________________________________________________________
+//#########################################################################
+$iprepositorio="";
+$ipservidor=$_SERVER['SERVER_ADDR'];
+
+ $cmd->texto="SELECT * FROM repositorios WHERE idrepositorio=$idrepositorio";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(true); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $nombrerepositorio=$rs->campos["nombrerepositorio"];
+ $iprepositorio=$rs->campos["ip"];
+ }
+ $rs->Cerrar();
+
+if ($iprepositorio == $ipservidor)
+{
+ $repolocal="si";
+ $espaciorepo=exec("df -h /opt/opengnsys/images");
+ $espaciorepo=split(" ",$espaciorepo);
+ for ($j=0;$j<count($espaciorepo);$j++)
+ {
+ if ($espaciorepo[$j]!="")
+ {$espaciorepos[]=$espaciorepo[$j];}
+ }
+ for ($k=0;$k<count($espaciorepos);$k++)
+ {
+ $totalrepo=$espaciorepos[1];
+ $ocupadorepo=$espaciorepos[2];
+ $librerepo=$espaciorepos[3];
+ $porcentajerepo=$espaciorepos[4];
+ }
+}
+else{
+ $repolocaL="no";
+ }
+
+//#########################################################################
+?>
+<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_repositorios.js"></SCRIPT>
+ <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT>
+ <? echo '<SCRIPT language="javascript" src="../idiomas/javascripts/'.$idioma.'/propiedades_repositorios_'.$idioma.'.js"></SCRIPT>'?>
+</HEAD>
+<BODY>
+<DIV align=center>
+<FORM name="fdatos" action="../gestores/gestor_repositorios.php" method="post">
+ <INPUT type=hidden name=opcion value="<? echo $opcion?>">
+ <INPUT type=hidden name=idrepositorio value="<? echo $idrepositorio?>">
+ <INPUT type=hidden name=grupoid value="<? echo $grupoid?>">
+ <INPUT type=hidden name=ordenadores value="<? echo $ordenadores?>">
+
+ <P align=center class=cabeceras><?echo $TbMsg[4]?><BR>
+ <SPAN align=center class=subcabeceras><? echo $opciones[$opcion]?></SPAN></P>
+ <TABLE align=center border=0 cellPadding=1 cellSpacing=1 class=tabla_datos >
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <TR>
+ <TH align=center>&nbsp;<?echo $TbMsg[5]?>&nbsp;</TD>
+ <?
+ if ($opcion==$op_eliminacion)
+ echo '<TD>'.$nombrerepositorio.'</TD>';
+ else
+ echo '<TD><INPUT class="formulariodatos" name=nombrerepositorio style="width:200" type=text value="'.$nombrerepositorio.'"></TD>';
+ ?>
+ <TD valign=top align=left rowspan=3 ><CENTER>
+ <IMG border=3 style="border-color:#63676b" src="../images/aula.jpg">
+ <BR>&nbsp;Ordenadores:&nbsp;<? echo $ordenadores?></CENTER></TD>
+ </TR>
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <TR>
+ <TH align=center>&nbsp;<?echo $TbMsg[6]?>&nbsp;</TD>
+ <?
+ if ($opcion==$op_eliminacion)
+ echo '<TD>'.$ip.'</TD>';
+ else
+ echo'<TD><INPUT class="formulariodatos" name=ip type=text style="width:200" value="'.$ip.'"></TD>';
+ ?>
+ </TR>
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <TR>
+ <TH align=center>&nbsp;<?echo $TbMsg[8]?>&nbsp;</TD>
+ <?
+ if ($opcion==$op_eliminacion)
+ echo '<TD>'.$puertorepo.'</TD>';
+ else
+ echo'<TD><INPUT class="formulariodatos" name=puertorepo type=text style="width:200" value="'.$puertorepo.'"></TD>';
+ ?>
+ </TR>
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <TR>
+ <TH align=center>&nbsp;<?echo $TbMsg[9]?>&nbsp;</TD>
+ <?
+ if ($opcion==$op_eliminacion)
+ echo '<TD colspan=2>'.$pathrepod.'</TD>';
+ else
+ echo'<TD colspan=2><INPUT class="formulariodatos" name=pathrepod type=text style="width:330" value="'.$pathrepod.'"></TD>';
+ ?>
+ </TR>
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <TR>
+ <TH align=center>&nbsp;<?echo $TbMsg[10]?>&nbsp;</TD>
+ <?
+ if ($opcion==$op_eliminacion)
+ echo '<TD colspan=2>'.$pathpxe.'</TD>';
+ else
+ echo'<TD colspan=2><INPUT class="formulariodatos" name=pathpxe type=text style="width:330" value="'.$pathpxe.'"></TD>';
+ ?>
+ </TR>
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+ <TR>
+ <TH align=center>&nbsp;<?echo $TbMsg[7]?>&nbsp;</TD>
+ <?
+ if ($opcion==$op_eliminacion)
+ echo '<TD colspan=2>'.$comentarios.'</TD>';
+ else
+ echo '<TD colspan=2><TEXTAREA class="formulariodatos" name=comentarios rows=2 cols=50>'.$comentarios.'</TEXTAREA></TD>';
+ ?>
+ </TR>
+
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+
+ </TABLE>
+ <?php if ( $opcion == 1 ){} else { ?>
+
+ <TABLE align=center border=0 cellPadding=2 cellSpacing=2 class=tabla_datos >
+ <!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+
+ <?php if ($repolocal == "si" ) { ?>
+ <TR>
+ <TH align=center width=125>&nbsp;<?echo $TbMsg[11]?>&nbsp;</TD>
+ <TH align=center width=120>&nbsp;<?echo $TbMsg[12]?>&nbsp;</TD>
+ <TH align=center width=120>&nbsp;<?echo $TbMsg[13]?>&nbsp;</TD>
+ <TH align=center width=101>&nbsp;<?echo $TbMsg[14]?>&nbsp;</TD>
+ </TR>
+ <TR>
+ <TD align=center width=125>&nbsp;<?echo $totalrepo?>&nbsp;</TD>
+ <TD align=center width=120>&nbsp;<?echo $ocupadorepo?>&nbsp;</TD>
+ <TD align=center width=120>&nbsp;<?echo $librerepo?>&nbsp;</TD>
+ <TD align=center width=101>&nbsp;<?echo $porcentajerepo?>&nbsp;</TD>
+ </TR>
+ <?php }else { ?>
+ <tr>
+ <th align="center">&nbsp;<?php echo '<strong>'.$TbMsg[15].'</strong></br>'.$TbMsg[16] ?></th>
+ </tr>
+ <?php } ?>
+ <?php } ?>
+<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
+
+ </TABLE>
+
+</FORM>
+</DIV>
+<?
+//________________________________________________________________________________________________________
+include_once("../includes/opcionesbotonesop.php");
+//________________________________________________________________________________________________________
+?>
+</BODY>
+</HTML>
+<?
+//________________________________________________________________________________________________________
+// Recupera los datos de un repositorio
+// Parametros:
+// - cmd: Una comando ya operativo (con conexión abierta)
+// - id: El identificador del repositorio
+//________________________________________________________________________________________________________
+function TomaPropiedades($cmd,$id){
+ global $nombrerepositorio;
+ global $ip;
+ global $comentarios;
+ global $puertorepo;
+ global $pathrepod;
+ global $pathpxe;
+ global $ordenadores;
+
+
+ // NOTA: el parámetro "numordenadores" no se está utilizando, por lo que se
+ // simplifica la consulta, ignorando dicho valor.
+/*
+ $cmd->texto="SELECT repositorios.*, count(*) as numordenadores FROM repositorios
+ INNER JOIN ordenadores ON ordenadores.idrepositorio=repositorios.idrepositorio
+ WHERE repositorios.idrepositorio=".$id;
+*/
+ $cmd->texto="SELECT * FROM repositorios WHERE idrepositorio=$id";
+ $rs=new Recordset;
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(true); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $nombrerepositorio=$rs->campos["nombrerepositorio"];
+ $ip=$rs->campos["ip"];
+ $comentarios=$rs->campos["comentarios"];
+ $puertorepo=$rs->campos["puertorepo"];
+ $pathrepod=$rs->campos["pathrepod"];
+ $pathpxe=$rs->campos["pathpxe"];
+// $ordenadores=$rs->campos["numordenadores"];
+ }
+ $rs->Cerrar();
+ return(true);
+}
+?>
diff --git a/admin/WebConsole/validacion/access_controller.php b/admin/WebConsole/validacion/access_controller.php
new file mode 100644
index 00000000..f0babd8a
--- /dev/null
+++ b/admin/WebConsole/validacion/access_controller.php
@@ -0,0 +1,99 @@
+<?php
+/** Universidad de Huelva
+ Fichero para validacion de usuarios antes del menu
+ Es necesario crear la variable de sesion $validated y asignar true o false dependiendo del caso
+
+**/
+include_once("functions.php");
+
+
+$action=(isset($_POST["action"]))?$_POST["action"]:$action;
+
+
+
+if($action == "checkValidation"){
+ $idordenador;
+ $nombreordenador;
+ $ip = TomaIP();
+ $validacion;
+ $paginalogin;
+ $paginavalidacion;
+
+ // Carga la configuracion del ordenador
+ $cmd=CreaComando($cadenaconexion); // Crea objeto comando
+ if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
+
+ $resul=TomaPropiedades($cmd);
+ if (!$resul)
+ Header('Location: '.$pagerror.'?herror=3'); // Error de recuperación de datos.
+ // Registramos las variables en sesion
+ $_SESSION["validacion"] = $validacion;
+ $_SESSION["paginalogin"] = $paginalogin;
+ $_SESSION["paginavalidacion"] = $paginavalidacion;
+}
+else{
+ // Cogemos las variables de sesion
+ $validacion = $_SESSION["validacion"];
+ $paginalogin = $_SESSION["paginalogin"];
+ $paginavalidacion = $_SESSION["paginavalidacion"];
+
+}
+
+
+/**/
+// Solo se usa si se requiere validacion
+if($_SESSION["validacion"] == true && isset($paginavalidacion) && $paginavalidacion != "")
+ @include_once($paginavalidacion);
+
+
+switch($action){
+ case "checkValidation":
+ // Comprobamos si es necesaria la validacion
+ if($validacion == 1){
+ $action="Login";
+ // Comprobamos si es necesaria la validacion, y llamamos a synchronize
+ // La funcion synchronize se usa por si hace falta sincronizar alguna base de datos externa a opengnsys
+ // Es obligatoria en el fichero de validacion, pero puede no hacer nada
+ if (function_exists("synchronize")) {
+ synchronize($validacion);
+ }
+ else {
+ // Mostrar mensaje de error si no existe la función.
+ die ("Error: P&aacute;gina de validaci&oacute;n incorrecta.");
+ }
+ }
+ else{
+ $action="default";
+ }
+ include("access_controller.php");
+
+ break;
+ case "Login":
+ @include($paginalogin);
+ break;
+ case "validate":
+ if(!isset($_SESSION)){
+ session_start();
+ }
+ // en la pagina "paginavalidacion" debe existir la funcion validate($_POST) forzosamente
+ $_SESSION["validated"]=validate($_POST);
+ if($_SESSION["validated"] == true){
+ include("../varios/menucliente.php");
+ }
+ else{
+ $_error="Usuario no v&aacute;lido";
+ @include($paginalogin);
+ }
+ break;
+ default:
+ if(!isset($_SESSION)){
+ session_start();
+ }
+ $_SESSION["validated"]=true;
+ include("menucliente.php");
+}
+/**/
+
+?>
+
diff --git a/admin/WebConsole/validacion/functions.php b/admin/WebConsole/validacion/functions.php
new file mode 100644
index 00000000..c605c9eb
--- /dev/null
+++ b/admin/WebConsole/validacion/functions.php
@@ -0,0 +1,175 @@
+<?php
+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");
+//___________________________________________________________________________________________________
+//
+// Redupera la ip del cliente web
+//___________________________________________________________________________________________________
+function TomaIP(){
+ // Se asegura que la pagina se solicita desde la IP que viene
+ global $HTTP_SERVER_VARS;
+ if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"] != "")
+ $ipcliente = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
+ else
+ $ipcliente = $HTTP_SERVER_VARS["REMOTE_ADDR"];
+ if (empty ($ipcliente))
+ $ipcliente = $_SERVER["REMOTE_ADDR"];
+ return($ipcliente);
+}
+/**/
+
+function TomaPropiedades($cmd){
+ global $idordenador;
+ global $nombreordenador;
+ global $ip;
+ global $validacion;
+ global $paginalogin;
+ global $paginavalidacion;
+
+
+ $rs=new Recordset;
+ $cmd->texto="SELECT * FROM ordenadores WHERE ip='".$ip."'";
+ $rs->Comando=&$cmd;
+ if (!$rs->Abrir()) return(false); // Error al abrir recordset
+ $rs->Primero();
+ if (!$rs->EOF){
+ $nombreordenador=$rs->campos["nombreordenador"];
+ $ip=$rs->campos["ip"];
+ $validacion=$rs->campos["validacion"];
+ $paginalogin=$rs->campos["paginalogin"];
+ $paginavalidacion=$rs->campos["paginavalidacion"];
+ $rs->Cerrar();
+ return(true);
+ }
+ else
+ return(false);
+
+ return true;
+}
+
+//
+// Recupera Men
+//___________________________________________________________________________________________________
+function RecuperaMenu($cmd,$iph){
+ $rs=new Recordset;
+ $cmd->texto="SELECT menus.idcentro,menus.resolucion,menus.titulo,menus.idurlimg,menus.coorx,menus.coory,
+ menus.modalidad,menus.scoorx,menus.scoory,menus.smodalidad,menus.htmlmenupub,menus.htmlmenupri,
+ acciones_menus.tipoaccion,acciones_menus.idaccionmenu,acciones_menus.idtipoaccion,
+ acciones_menus.tipoitem,acciones_menus.descripitem,iconos.urlicono
+ FROM ordenadores
+ INNER JOIN menus ON menus.idmenu = ordenadores.idmenu
+ LEFT OUTER JOIN acciones_menus ON acciones_menus.idmenu = menus.idmenu
+ LEFT OUTER JOIN iconos ON iconos.idicono=acciones_menus.idurlimg
+ WHERE ordenadores.ip='".$iph."' ORDER by acciones_menus.orden";
+
+ $rs->Comando=&$cmd;
+ $resul=$rs->Abrir();
+ if (!$rs->Abrir()) return(false);
+ if ($rs->EOF) return(false);
+ return($rs);
+}
+//___________________________________________________________________________________________________
+//
+// Muestra el menu pblico
+//___________________________________________________________________________________________________
+function GeneraMenu($rs,$tipo,$iph){
+ global $ITEMS_PUBLICOS;
+ global $ITEMS_PRIVADOS;
+ global $UrlPaginaIconos;
+
+ $titulo=$rs->campos["titulo"];
+ $coorx=$rs->campos["coorx"];
+ $coory=$rs->campos["coory"];
+ $modalidad=$rs->campos["modalidad"];
+ $scoorx=$rs->campos["scoorx"];
+ $scoory=$rs->campos["scoory"];
+ $smodalidad=$rs->campos["smodalidad"];
+ $scoory=$rs->campos["scoory"];
+ $resolucion=$rs->campos["resolucion"];
+ $htmlmenupub=$rs->campos["htmlmenupub"];
+ $htmlmenupri=$rs->campos["htmlmenupri"];
+
+ if($tipo==$ITEMS_PRIVADOS)
+ $mod=$smodalidad;
+ else
+ $mod=$modalidad;
+ $codeHTML="";
+
+ // Genera HTML de la p�ina en funci� de las propiedades del Men del clioente
+ //$codeHTML.='<DIV style="POSITION:absolute;TOP:'.$coory."px;LEFT:".$coorx.'px">';
+ $codeHTML.='<P align=center>';
+ $codeHTML.='<SPAN style="COLOR: #999999;FONT-FAMILY: Arial, Helvetica, sans-serif;FONT-SIZE: 20px;"><U>'.$titulo.'</U></SPAN>';
+ $codeHTML.='</BR>';
+
+ $codeHTML.='<TABLE cellspacing=4 cellpadding=0 align="center" border=0 >';
+ $codeHTML.='<TR>';
+ $codeHTML.='<TD colspan="'.(($mod*2)+1).'" >&nbsp;</TD>';
+ $codeHTML.='</TR>';
+ $codeHTML.='<TR>';
+
+ $c=0; // Contador de columnas
+
+ while (!$rs->EOF){ // Recorre acciones del menu
+ $tipoitem=$rs->campos["tipoitem"];
+ if($tipoitem==$tipo){
+ $tipoaccion=$rs->campos["tipoaccion"];
+ $idtipoaccion=$rs->campos["idtipoaccion"];
+ $idaccionmenu=$rs->campos["idaccionmenu"];
+ $descripitem=$rs->campos["descripitem"];
+ $urlicono=$rs->campos["urlicono"];
+ if(empty($urlicono))
+ $urlicono="defaultitem.gif";
+
+ $codeHTML.='<TD align=center>
+ <A href="ejecutaritem.php?iph='.$iph.'&idt='.$idaccionmenu.'">
+ <IMG border=0 src="http://'.$UrlPaginaIconos.'/'.$urlicono.'" width=64></A></TD>';
+ $codeHTML.='<TD style="font-family:Arial;color: #a71026;FONT-SIZE:14">
+ <A style="text-decoration:none" href="ejecutaritem.php?iph='.$iph.'&idt='.$idaccionmenu.'">
+ <span style="FONT-FAMILY: Verdana,Arial, Helvetica, sans-serif;FONT-SIZE: 12px;COLOR:#999999">'.$descripitem.'</span></A></TD>';
+ if($mod>1){
+ //separación de columnas
+ $codeHTML.='<TD width=10>&nbsp;</TD>';
+ }
+ $c++;
+ if($c%$mod==0){
+ $codeHTML.='</TR>';
+ $codeHTML.='<TR>';
+ }
+ }
+ $rs->Siguiente();
+ }
+ $codeHTML.='</TR>';
+ $rs->Cerrar();
+ $codeHTML.='</TABLE>';
+ $codeHTML.='</P>';
+ $codeHTML.='<BR><BR>';
+ $codeHTML.='<P align=center>';
+
+ switch($tipo){
+ case $ITEMS_PUBLICOS:
+ $url.='acceso_operador.php';
+ $lit="Administrar";
+ break;
+ case $ITEMS_PRIVADOS:
+ $url.='menucliente.php';
+ $lit="Volver";
+ break;
+ }
+ $codeHTML.='<A style="text-decoration:none" href="'.$url.'?iph='.$iph.'">';
+ $codeHTML.='<SPAN style="
+ BORDER-BOTTOM: #999999 1px solid;
+ BORDER-LEFT: #999999 1px solid;
+ BORDER-RIGHT: #999999 1px solid;
+ BORDER-TOP: #999999 1px solid;
+ COLOR:#999999;FONT-FAMILY: Arial, Helvetica, sans-serif;FONT-SIZE:9px;">&nbsp;'.$lit.'&nbsp;</SPAN></A>';
+
+ $codeHTML.='</P>';
+ //$codeHTML.='</DIV>';
+ return($codeHTML);
+}
+
+?>
+
diff --git a/admin/WebConsole/validacion/html/close.php b/admin/WebConsole/validacion/html/close.php
new file mode 100644
index 00000000..11a3c2e8
--- /dev/null
+++ b/admin/WebConsole/validacion/html/close.php
@@ -0,0 +1,5 @@
+<?
+session_start();
+$_SESSION["validated"] = false;
+?>
+
diff --git a/admin/WebConsole/validacion/html/images/opengnsys.png b/admin/WebConsole/validacion/html/images/opengnsys.png
new file mode 100644
index 00000000..72e5df72
--- /dev/null
+++ b/admin/WebConsole/validacion/html/images/opengnsys.png
Binary files differ
diff --git a/admin/WebConsole/validacion/html/login_prueba.php b/admin/WebConsole/validacion/html/login_prueba.php
new file mode 100644
index 00000000..78b3c5ae
--- /dev/null
+++ b/admin/WebConsole/validacion/html/login_prueba.php
@@ -0,0 +1,102 @@
+<?
+$path_parts = pathinfo(__FILE__);
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>OpenGnSys :::: Inicio de equipo - Men de opciones</title>
+<style>
+ body {
+ margin:0;
+ padding:0;
+ background-color:#FFFFFF;
+}
+#contenedor{
+ position:absolute;
+ /*width:1270px;
+ height:1014px;
+ */
+ margin:0;
+ padding:0;
+/*
+ left: 50%;
+ top: 50%;
+ margin-top: -512px;
+ margin-left: -640px;
+*/
+ overflow:hidden;
+}
+.boton{
+ margin:0 0 0 40px;
+}
+#form1{
+ margin:120px 0 0 200px;
+}
+img {
+ vertical-align:middle;
+}
+a:link, a:visited { text-decoration: none; color:#ffffff; }
+a:hover, a:active { color:#ffff00; }
+/*#menu{
+ width:800px;
+ height:600px;
+
+}*/
+h1{
+ margin:120px auto 0px auto;
+ padding:0;
+ width:624px;
+ height:0px;
+ /*background:url(../menus/imagenes/titulo.png);*/
+}
+
+.tituloElementoLista {
+ padding:0 0 0 10px;
+}
+.descripcionElementoLista {
+ color:#acd6ff;
+ position:absolute;
+ left:360px;
+ padding-top:15px;
+}
+</style>
+
+</head>
+
+<body>
+ <div id="contenedor" style="margin: 10px 300px 15px 300px">
+ <div align="center">
+ <h1>
+ <div style="float:left">
+ <img src="../validacion/html/images/opengnsys.png" />
+ </div>
+ Validaci&oacute;n de usuario</h1>
+ </div>
+ <div id="menu" style="margin: 0px auto 0px auto">
+ <h1></h1>
+ <form id="form1" name="form1" method="post" action="../validacion/access_controller.php">
+ <div>
+ usuario:
+ </div>
+ <div>
+ <input type="text" name="login" id="login">
+ </div>
+ <br />
+ <div>
+ password:
+ </div>
+ <div>
+ <input type="password" name="password" id="password">
+ </div>
+ <br />
+ <p><span class="boton"><input type="submit" name="access_button" id="access_button" value="Acceder" /></span></p>
+ <input name="action" type="hidden" value="validate" />
+ </form>
+ <span class="descripcionElementoLista"><?php if(isset($_error)) echo $_error; ?></span>
+ </div>
+ </div>
+</body>
+</html>
+
diff --git a/admin/WebConsole/validacion/html/validacion_ldap.php b/admin/WebConsole/validacion/html/validacion_ldap.php
new file mode 100644
index 00000000..992bca05
--- /dev/null
+++ b/admin/WebConsole/validacion/html/validacion_ldap.php
@@ -0,0 +1,75 @@
+<?
+
+function connect_to_ldap(){
+ $server = "IP_SERVIDOR";
+ $port = '389';
+ $user = "USUARIO";
+ $pass = "PASSWORD";
+
+ $result = null;
+ $ds=ldap_connect($server,$port);
+ if ($ds){
+ if ($r=@ldap_bind($ds,$user,$pass))
+ $result = $ds;
+ }
+ return $result;
+}
+
+function validate_user($user,$password){
+ if (($user=='') || ($password=='')){
+ $result['validation'] = -1;
+ }else{
+ if($ds = connect_to_ldap()){
+ $dc = "dc=uhu, dc=es";
+ $search = "uid=".$user;
+ $sr=@ldap_search($ds,$dc,$search);
+ $info = @ldap_get_entries($ds, $sr);
+
+ if ($info["count"]==1){
+ $thedata = $info[0]["dn"];
+ if ($r=@ldap_bind($ds,$thedata,$password)){
+ $result['validation'] = 1;
+ // A parte de la validacion, se podran coger otros datos...
+ /*
+ $result['name'] = $info[0]["cn"][0];
+ $result['dni'] = $info[0]["uhuuserdni"][0];
+ $result['email'] = $info[0]["mail"][0];
+ */
+ }
+ else{
+ $result['validation'] = -1;
+ }
+ }
+ else{
+ $result['validation'] = -1;
+ }
+ }
+ ldap_close($ds);
+ }
+ return $result;
+}
+
+/**
+ * Sincroniza una base de datos externa con la de opengnsys.
+ * No es necesaria su implementacion, puede dejarse en blanco
+ */
+function synchronize($validation){
+
+}
+
+
+/**
+ * Funcion de validacion para el cliente opengnsys.
+ * Recibe como parametros la variable $_POST proveniente de la pagina de login
+ * debe devolver true o false
+ */
+function validate($VARS){
+ $result=false;
+ $validationInfo = validate_user($VARS["login"], $VARS["password"]);
+ if($validationInfo["validation"] == 1){
+ $result = true;
+ }
+ return $result;
+}
+
+?>
diff --git a/admin/WebConsole/validacion/html/validacion_prueba.php b/admin/WebConsole/validacion/html/validacion_prueba.php
new file mode 100644
index 00000000..35c6c033
--- /dev/null
+++ b/admin/WebConsole/validacion/html/validacion_prueba.php
@@ -0,0 +1,24 @@
+<?
+/**
+ * Sincroniza una base de datos externa con la de opengnsys.
+ * No es necesaria su implementacion, puede dejarse en blanco
+ */
+function synchronize($validation){
+
+}
+
+
+/**
+ * Funcion de validacion para el cliente opengnsys.
+ * Recibe como parametros la variable $_POST proveniente de la pagina de login
+ * debe devolver true o false
+ */
+function validate($VARS){
+ $result = false;
+ if($VARS["login"] == "usuprueba" && $VARS["password"] == "prueba"){
+ $result = true;
+ }
+ return $result;
+}
+
+?>
diff --git a/admin/WebConsole/validacion/html/validacion_template.php b/admin/WebConsole/validacion/html/validacion_template.php
new file mode 100644
index 00000000..77672a91
--- /dev/null
+++ b/admin/WebConsole/validacion/html/validacion_template.php
@@ -0,0 +1,20 @@
+<?
+/**
+ * Sincroniza una base de datos externa con la de opengnsys.
+ * No es necesaria su implementacion, puede dejarse en blanco
+ */
+function synchronize($validation){
+
+}
+
+
+/**
+ * Funcion de validacion para el cliente opengnsys.
+ * Recibe como parametros la variable $_POST proveniente de la pagina de login
+ * debe devolver true o false
+ */
+function validate($VARS){
+ return true;
+}
+
+?>
diff --git a/admin/WebConsole/varios/buscar.php b/admin/WebConsole/varios/buscar.php
index 46278e41..a0d90934 100644
--- a/admin/WebConsole/varios/buscar.php
+++ b/admin/WebConsole/varios/buscar.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *********************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: Ramón M. Gómez, ETSII - Universidad de Sevilla
@@ -15,8 +15,12 @@ include_once("../includes/CreaComando.php");
include_once("../includes/TomaDato.php");
include_once("../idiomas/php/".$idioma."/buscar_".$idioma.".php");
-session_start(); // Activa variables de sesión.
+# Inicializar variables.
+$criterio="";
+$valor="";
+
+# Tomar varlores de sesión.
if (isset($_POST["criterio"])) $criterio=htmlspecialchars($_POST["criterio"]);
if (isset($_POST["valor"])) $valor=htmlspecialchars($_POST["valor"]);
if (!empty ($valor) || $criterio == "duplic") {
diff --git a/admin/WebConsole/varios/incorporaordenadores.php b/admin/WebConsole/varios/incorporaordenadores.php
index b8e58bd5..b6fe7c4b 100644
--- a/admin/WebConsole/varios/incorporaordenadores.php
+++ b/admin/WebConsole/varios/incorporaordenadores.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -11,6 +11,7 @@
include_once("../includes/ctrlacc.php");
include_once("../clases/AdoPhp.php");
include_once("../includes/CreaComando.php");
+include_once("../includes/tftputils.php");
include_once("../idiomas/php/".$idioma."/incorporaordenadores_".$idioma.".php");
include_once("../idiomas/php/".$idioma."/avisos_".$idioma.".php");
//________________________________________________________________________________________________________
@@ -58,8 +59,8 @@ if(!empty($contenido)){ // Se ha introducido contenido en lugar de fichero
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
<tr>
<th>&nbsp;<?php echo $TbMsg[2]?>&nbsp;</th>
- <td><textarea class="cajatexto" name="contenido" cols="70" rows="18"></textarea></td></tr>
- <tr><th colspan="2">&nbsp;<?php echo $TbMsg["WARN_NETBOOT"]?>&nbsp;</th></tr>
+ <td><textarea class="cajatexto" name="contenido" cols="70" rows="18"></textarea></td></tr>
+ <tr><th colspan="2">&nbsp;<?php echo $TbMsg["WARN_NAMELENGTH"]?>&nbsp;</th></tr>
<!------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------->
</table>
</FORM>
@@ -70,7 +71,7 @@ if(!empty($contenido)){ // Se ha introducido contenido en lugar de fichero
<TD><IMG src="../images/boton_confirmar.gif" style="cursor:hand" onclick="javascript:document.fdatos.submit();"></TD>
</TR>
</TABLE>
-<?
+<?php
//________________________________________________________________________________________________________
// Mensaje con el resultado del proceso
echo '<SCRIPT LANGUAGE="javascript">';
@@ -83,7 +84,7 @@ echo '</SCRIPT>';
?>
</BODY>
</HTML>
-<?
+<?php
// *************************************************************************************************************************************************
function procesaLineas($cmd,$idaula,$buffer)
{
@@ -110,11 +111,13 @@ function procesaLineas($cmd,$idaula,$buffer)
if ('fixed-address'==substr($buffer,$posa,13)){
$posa=$posa+13;
$posb=$posa;
- while( substr($buffer,$posb,1)!=";") $posb++;
+ while( substr($buffer,$posb,1)!=";")
+ $posb++;
$IP=substr($buffer,$posa,$posb-$posa);
}
if(!empty($nombre) && !empty($MAC) && !empty($IP)){
- if(!Inserta($cmd,$idaula,$nombre,$MAC,$IP)) return(4);
+ if(!Inserta($cmd,$idaula,$nombre,$MAC,$IP))
+ return(4);
$sw=true;
$nombre="";
$MAC="";
@@ -133,6 +136,7 @@ function procesaLineas($cmd,$idaula,$buffer)
function Inserta($cmd,$idaula,$nombre,$lamac,$laip)
{
global $ordDup;
+ global $idioma;
$grupoid=0;
$nombreordenador=trim($nombre);
@@ -142,11 +146,11 @@ function Inserta($cmd,$idaula,$nombre,$lamac,$laip)
for($i=0;$i<strlen($auxmac);$i++)
if(substr($auxmac,$i,1)!=":")
$mac.=substr($auxmac,$i,1);
-
if(existeOrdenador($cmd,$nombreordenador,$mac,$ip)){
$ordDup.="Nombre=".$nombre.",Mac=".$mac.",Dirección ip=".$ip." \\n";
return(true);
- }
+ }
+
$idperfilhard=0;
## ADV: modificacion para asignar a los ordenadores, cuando se crean desde "incorpoar ordenadores" el repositorio "default"
$idrepositorio=1;
@@ -159,9 +163,20 @@ function Inserta($cmd,$idaula,$nombre,$lamac,$laip)
$cmd->CreaParametro("@idperfilhard",$idperfilhard,1);
$cmd->CreaParametro("@idrepositorio",$idrepositorio,1);
$cmd->CreaParametro("@idconfiguracion",$idconfiguracion,1);
-
- $cmd->texto="INSERT INTO ordenadores(nombreordenador,ip,mac,idperfilhard,idrepositorio,idaula,grupoid) VALUES (@nombreordenador,@ip,@mac,@idperfilhard,@idrepositorio,@idaula,@grupoid)";
+
+ $cmd->texto="INSERT INTO ordenadores (nombreordenador, ip, mac, idperfilhard,
+ idrepositorio, router, mascara, idaula, grupoid)
+ SELECT @nombreordenador, @ip, @mac, @idperfilhard,
+ @idrepositorio, router, netmask, @idaula, @grupoid
+ FROM aulas
+ WHERE idaula=".$idaula;
$resul=$cmd->Ejecutar();
+
+ // Crear fichero de arranque PXE con plantilla por defecto.
+ if ($resul) {
+ $idordenador=$cmd->Autonumerico();
+ createBootMode ($cmd, "", $idordenador, $idioma);
+ }
return($resul);
}
//________________________________________________________________________________________________________
diff --git a/admin/WebConsole/varios/informacion_acciones.php b/admin/WebConsole/varios/informacion_acciones.php
index 05cef9c0..b2223a00 100644
--- a/admin/WebConsole/varios/informacion_acciones.php
+++ b/admin/WebConsole/varios/informacion_acciones.php
@@ -1,4 +1,4 @@
-<?
+<?php
// *************************************************************************************************************************************************
// Aplicación WEB: ogAdmWebCon
// Autor: José Manuel Alonso (E.T.S.I.I.) Universidad de Sevilla
@@ -54,7 +54,7 @@ $arbol=new ArbolVistaXml($cadenaXML,0,$baseurlimg,$clasedefault,1,20,130,1,$titu
<SCRIPT language="javascript" src="../clases/jscripts/ArbolVistaXML.js"></SCRIPT>
</HEAD>
<BODY>
- <?
+ <?php
switch($tipoaccion){
case $AMBITO_PROCEDIMIENTOS:
$urlimg="../images/iconos/procedimiento.gif";
@@ -68,13 +68,13 @@ $arbol=new ArbolVistaXml($cadenaXML,0,$baseurlimg,$clasedefault,1,20,130,1,$titu
break;
}
?>
- <P align=center class=cabeceras><?echo $litcab?><BR>
- <SPAN align=center class=subcabeceras><?echo $litsub?></SPAN>&nbsp;<IMG src="../images/iconos/acciones.gif"><BR>
- <IMG src="<? echo $urlimg?>"><SPAN class=presentaciones>&nbsp;&nbsp;<?echo $descripcionaccion?></SPAN></P>
- <?echo urldecode($arbol->CreaArbolVistaXml()); // Crea arbol de configuraciones?>
+ <P align=center class=cabeceras><?php echo $litcab?><BR>
+ <SPAN align=center class=subcabeceras><?php echo $litsub?></SPAN>&nbsp;<IMG src="../images/iconos/acciones.gif"><BR>
+ <IMG src="<?php echo $urlimg?>"><SPAN class=presentaciones>&nbsp;&nbsp;<?echo $descripcionaccion?></SPAN></P>
+ <?php echo urldecode($arbol->CreaArbolVistaXml()); // Crea arbol de configuraciones?>
</BODY>
</HTML>
-<?
+<?php
/********************************************************************************************************
Devuelve una cadena con formato XML de toda la Información de los procedimientos o tareas
softwares
diff --git a/admin/WebConsole/varios/menucliente.php b/admin/WebConsole/varios/menucliente.php
index 1a8913f5..b7694993 100644
--- a/admin/WebConsole/varios/menucliente.php
+++ b/admin/WebConsole/varios/menucliente.php
@@ -14,236 +14,119 @@ include_once("../includes/TomaDato.php");
include_once("../includes/CreaComando.php");
include_once("../controlacceso.php");
include_once("../idiomas/php/".$idioma."/menucliente_".$idioma.".php");
-//________________________________________________________________________________________________________
-$cmd=CreaComando($cadenaconexion);
-if (!$cmd)
- Header('Location: '.$pagerror.'?herror=2'); // Error de conexión servidor B.D.
-//________________________________________________________________________________________________________
-$ITEMS_PUBLICOS=1;
-$ITEMS_PRIVADOS=2;
-
-$tip=$ITEMS_PUBLICOS; // Tipo de items 1=Públicos 2=privados
-if (isset($_GET["tip"])) $tip=$_GET["tip"];
-
-$iph=tomaIP();
-if(empty($iph))
- die($TbMsg[0].": ".$TbMsg[1]."=".$iph);
-
-$UrlPagina=$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; // Url página
-$UrlPagina=dirname($UrlPagina);
-$UrlPaginaIconos=dirname($UrlPagina)."/images/iconos";
-//________________________________________________________________________________________________________
-//agp
-$nombre_archivo = "/opt/opengnsys/log/clients/".$iph.".cache.txt";
-$gestor = fopen($nombre_archivo, 'r');
-$contenidofichero = fread($gestor, filesize($nombre_archivo));
-fclose($gestor);
-if (! empty ($contenidofichero)) {
- $cmd->texto="UPDATE ordenadores_particiones
- SET cache='".$contenidofichero."'
- WHERE idordenador=(SELECT idordenador FROM ordenadores
- WHERE ip='".$iph."') AND
- idsistemafichero=(SELECT idsistemafichero FROM sistemasficheros
- WHERE descripcion='CACHE')";
- $resul=$cmd->Ejecutar();
-}
-//agp
-//________________________________________________________________________________________________________
-$rsmenu=RecuperaMenu($cmd,$iph); // Recupera un recordset con los datos del m en
-$codeHtml="";
-if(!empty($rsmenu)){
- switch($tip){
- case $ITEMS_PUBLICOS:
- if(!empty($rsmenu->campos["htmlmenupub"])){
- $urlHtml=$rsmenu->campos["htmlmenupub"];
- if(strtoupper(substr($urlHtml,0,7))!="HTTP://") $urlHtml="http://".$urlHtml;
- Header('Location: '.$urlHtml); // Url del menu personalizado
- }
- else{
- $_SESSION["widcentro"]=$rsmenu->campos["idcentro"];
- $codeHtml=GeneraMenu($rsmenu,$ITEMS_PUBLICOS,$iph); // Genera men pblico
- }
- break;
-
- case $ITEMS_PRIVADOS:
- if(!empty($rsmenu->campos["htmlmenupri"])){
- $urlHtml=$rsmenu->campos["htmlmenupri"];
-
- if(strtoupper(substr($urlHtml,0,7))!="HTTP://") $urlHtml="http://".$urlHtml;
- Header('Location: '.$urlHtml); // Url del menu personalizado
- }
- else{
- $_SESSION["widcentro"]=$rsmenu->campos["idcentro"];
- $codeHtml=GeneraMenu($rsmenu,$ITEMS_PRIVADOS,$iph); // Genera men pblico
- }
- break;
- }
+/** Universidad de Huelva, comprueba si existe la variable de sesion validated
+ Si validated no es true, hay que comprobar si se requiere validacion, a partir de aqui se
+ encarga de todo access_controller.php
+*/
+if(!isset($_SESSION["validated"]) || $_SESSION["validated"] != true)
+{
+ $action="checkValidation";
+ include("../validacion/access_controller.php");
}
else{
- $codeHtml='<div align="center" style="font-family: Arial, Helvetica, sans-serif;">';
- $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">'.$TbMsg[3].'</a>';
- $codeHtml.='</p>';
- $codeHtml.='</div>';
-}
-?>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
-</head>
- <?php
- if(!empty($rsmenu->campos["idurlimg"])){ // Imagen de fondo
- $urlimg=TomaDato($cmd,0,'iconos',$rsmenu->campos["idurlimg"],'idicono','urlicono');
- $urlimgfondo="../images/iconos/".$urlimg;
- echo '<body bgcolor="white" background="'.$urlimgfondo.'">';
- }
- else{
- echo'<body bgcolor="white" background="../images/iconos/fondo800x600.png">';
- }
- include_once("/opt/opengnsys/log/clients/".$iph.".info.html");
- echo $codeHtml;
- ?>
-</body>
-</html>
-<?php
//___________________________________________________________________________________________________
-//
-// Recupera Men
-//___________________________________________________________________________________________________
-function RecuperaMenu($cmd,$iph){
- $rs=new Recordset;
- $cmd->texto="SELECT menus.idcentro,menus.resolucion,menus.titulo,menus.idurlimg,menus.coorx,menus.coory,
- menus.modalidad,menus.scoorx,menus.scoory,menus.smodalidad,menus.htmlmenupub,menus.htmlmenupri,
- acciones_menus.tipoaccion,acciones_menus.idaccionmenu,acciones_menus.idtipoaccion,
- acciones_menus.tipoitem,acciones_menus.descripitem,iconos.urlicono
- FROM ordenadores
- INNER JOIN menus ON menus.idmenu = ordenadores.idmenu
- LEFT OUTER JOIN acciones_menus ON acciones_menus.idmenu = menus.idmenu
- LEFT OUTER JOIN iconos ON iconos.idicono=acciones_menus.idurlimg
- WHERE ordenadores.ip='".$iph."' ORDER by acciones_menus.orden";
+ //________________________________________________________________________________________________________
+ $cmd=CreaComando($cadenaconexion);
+ if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexión servidor B.D.
+ //________________________________________________________________________________________________________
+ $ITEMS_PUBLICOS=1;
+ $ITEMS_PRIVADOS=2;
- $rs->Comando=&$cmd;
- $resul=$rs->Abrir();
- if (!$rs->Abrir()) return(false);
- if ($rs->EOF) return(false);
- return($rs);
-}
-//___________________________________________________________________________________________________
-//
-// Muestra el menu pblico
-//___________________________________________________________________________________________________
-function GeneraMenu($rs,$tipo,$iph){
- global $ITEMS_PUBLICOS;
- global $ITEMS_PRIVADOS;
- global $UrlPaginaIconos;
+ $tip=$ITEMS_PUBLICOS; // Tipo de items 1=Públicos 2=privados
+ if (isset($_GET["tip"])) $tip=$_GET["tip"];
- $titulo=$rs->campos["titulo"];
- $coorx=$rs->campos["coorx"];
- $coory=$rs->campos["coory"];
- $modalidad=$rs->campos["modalidad"];
- $scoorx=$rs->campos["scoorx"];
- $scoory=$rs->campos["scoory"];
- $smodalidad=$rs->campos["smodalidad"];
- $scoory=$rs->campos["scoory"];
- $resolucion=$rs->campos["resolucion"];
- $htmlmenupub=$rs->campos["htmlmenupub"];
- $htmlmenupri=$rs->campos["htmlmenupri"];
-
- if($tipo==$ITEMS_PRIVADOS)
- $mod=$smodalidad;
- else
- $mod=$modalidad;
- $codeHTML="";
+ $iph=tomaIP();
+ if(empty($iph))
+ die($TbMsg[0].": ".$TbMsg[1]."=".$iph);
- // Genera HTML de la p�ina en funci� de las propiedades del Men del clioente
- //$codeHTML.='<DIV style="POSITION:absolute;TOP:'.$coory."px;LEFT:".$coorx.'px">';
- $codeHTML.='<P align=center>';
- $codeHTML.='<SPAN style="COLOR: #999999;FONT-FAMILY: Arial, Helvetica, sans-serif;FONT-SIZE: 20px;"><U>'.$titulo.'</U></SPAN>';
- $codeHTML.='</BR>';
-
- $codeHTML.='<TABLE cellspacing=4 cellpadding=0 align="center" border=0 >';
- $codeHTML.='<TR>';
- $codeHTML.='<TD colspan="'.(($mod*2)+1).'" >&nbsp;</TD>';
- $codeHTML.='</TR>';
- $codeHTML.='<TR>';
-
- $c=0; // Contador de columnas
-
- while (!$rs->EOF){ // Recorre acciones del menu
- $tipoitem=$rs->campos["tipoitem"];
- if($tipoitem==$tipo){
- $tipoaccion=$rs->campos["tipoaccion"];
- $idtipoaccion=$rs->campos["idtipoaccion"];
- $idaccionmenu=$rs->campos["idaccionmenu"];
- $descripitem=$rs->campos["descripitem"];
- $urlicono=$rs->campos["urlicono"];
- if(empty($urlicono))
- $urlicono="defaultitem.gif";
-
- $codeHTML.='<TD align=center>
- <A href="ejecutaritem.php?iph='.$iph.'&idt='.$idaccionmenu.'">
- <IMG border=0 src="http://'.$UrlPaginaIconos.'/'.$urlicono.'" width=64></A></TD>';
- $codeHTML.='<TD style="font-family:Arial;color: #a71026;FONT-SIZE:14">
- <A style="text-decoration:none" href="ejecutaritem.php?iph='.$iph.'&idt='.$idaccionmenu.'">
- <span style="FONT-FAMILY: Verdana,Arial, Helvetica, sans-serif;FONT-SIZE: 12px;COLOR:#999999">'.$descripitem.'</span></A></TD>';
- if($mod>1){
- //separación de columnas
- $codeHTML.='<TD width=10>&nbsp;</TD>';
- }
- $c++;
- if($c%$mod==0){
- $codeHTML.='</TR>';
- $codeHTML.='<TR>';
- }
+ $UrlPagina=$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; // Url página
+ $UrlPagina=dirname($UrlPagina);
+ $UrlPaginaIconos=dirname($UrlPagina)."/images/iconos";
+ //________________________________________________________________________________________________________
+ //agp
+ $nombre_archivo = "/opt/opengnsys/log/clients/".$iph.".cache.txt";
+ $gestor = fopen($nombre_archivo, 'r');
+ $contenidofichero = fread($gestor, filesize($nombre_archivo));
+ fclose($gestor);
+ if (! empty ($contenidofichero)) {
+ $cmd->texto="UPDATE ordenadores_particiones
+ SET cache='".$contenidofichero."'
+ WHERE idordenador=(SELECT idordenador
+ FROM ordenadores
+ WHERE ip='".$iph."')
+ AND idsistemafichero=(SELECT idsistemafichero
+ FROM sistemasficheros
+ WHERE descripcion='CACHE')";
+ $resul=$cmd->Ejecutar();
+ }
+ //agp
+ //________________________________________________________________________________________________________
+ $rsmenu=RecuperaMenu($cmd,$iph); // Recupera un recordset con los datos del m en
+ if(!empty($rsmenu)){
+ switch($tip){
+ case $ITEMS_PUBLICOS:
+ if(!empty($rsmenu->campos["htmlmenupub"])){
+ $urlHtml=$rsmenu->campos["htmlmenupub"];
+ if(strtoupper(substr($urlHtml,0,7))!="HTTP://") $urlHtml="http://".$urlHtml;
+ Header('Location: '.$urlHtml); // Url del menu personalizado
+ }
+ else{
+ $_SESSION["widcentro"]=$rsmenu->campos["idcentro"];
+ $codeHtml=GeneraMenu($rsmenu,$ITEMS_PUBLICOS,$iph); // Genera men pblico
+ }
+ break;
+
+ case $ITEMS_PRIVADOS:
+ if(!empty($rsmenu->campos["htmlmenupri"])){
+ $urlHtml=$rsmenu->campos["htmlmenupri"];
+
+ if(strtoupper(substr($urlHtml,0,7))!="HTTP://") $urlHtml="http://".$urlHtml;
+ Header('Location: '.$urlHtml); // Url del menu personalizado
+ }
+ else{
+ $_SESSION["widcentro"]=$rsmenu->campos["idcentro"];
+ $codeHtml=GeneraMenu($rsmenu,$ITEMS_PRIVADOS,$iph); // Genera men pblico
+ }
+ break;
+ }
+ }
+ else{
+ // Si existe, incluir menú por defecto.
+ if (file_exists("/opt/opengnsys/log/clients/$iph.info.html")) {
+ $codeHtml=file_get_contents("/opt/opengnsys/log/clients/$iph.info.html");
+ }
+ else{
+ // Componer mensaje para cliente sin menú.
+ $codeHtml='<div align="center" style="font-family: Arial, Helvetica, sans-serif;">';
+ $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">'.$TbMsg[3].'</a>';
+ $codeHtml.='</p>';
+ $codeHtml.='</div>';
}
- $rs->Siguiente();
}
- $codeHTML.='</TR>';
- $rs->Cerrar();
- $codeHTML.='</TABLE>';
- $codeHTML.='</P>';
- $codeHTML.='<BR><BR>';
- $codeHTML.='<P align=center>';
-
- switch($tipo){
- case $ITEMS_PUBLICOS:
- $url.='acceso_operador.php';
- $lit="Administrar";
- break;
- case $ITEMS_PRIVADOS:
- $url.='menucliente.php';
- $lit="Volver";
- break;
- }
- $codeHTML.='<A style="text-decoration:none" href="'.$url.'?iph='.$iph.'">';
- $codeHTML.='<SPAN style="
- BORDER-BOTTOM: #999999 1px solid;
- BORDER-LEFT: #999999 1px solid;
- BORDER-RIGHT: #999999 1px solid;
- BORDER-TOP: #999999 1px solid;
- COLOR:#999999;FONT-FAMILY: Arial, Helvetica, sans-serif;FONT-SIZE:9px;">&nbsp;'.$lit.'&nbsp;</SPAN></A>';
-
- $codeHTML.='</P>';
- //$codeHTML.='</DIV>';
- return($codeHTML);
-}
-//___________________________________________________________________________________________________
-//
-// Redupera la ip del cliente web
-//___________________________________________________________________________________________________
-function tomaIP(){
- // Se asegura que la pagina se solicita desde la IP que viene
- global $HTTP_SERVER_VARS;
- if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"] != "")
- $ipcliente = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
- else
- $ipcliente = $HTTP_SERVER_VARS["REMOTE_ADDR"];
- if (empty ($ipcliente))
- $ipcliente = $_SERVER["REMOTE_ADDR"];
+ ?>
+ <html>
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+ </head>
- return($ipcliente);
+ <?php
+ if(!empty($rsmenu->campos["idurlimg"])){ // Imagen de fondo
+ $urlimg=TomaDato($cmd,0,'iconos',$rsmenu->campos["idurlimg"],'idicono','urlicono');
+ $urlimgfondo="../images/iconos/".$urlimg;
+ echo '<body bgcolor="white" background="'.$urlimgfondo.'">';
+ }
+ else{
+ echo'<body bgcolor="white" background="../images/iconos/fondo800x600.png">';
+ }
+ echo $codeHtml;
+ ?>
+ </body>
+ </html>
+<?php
}
?>
diff --git a/client/boot-tools/INSTALL.es.txt b/client/boot-tools/INSTALL.es.txt
index c65f5a27..2509a72d 100644
--- a/client/boot-tools/INSTALL.es.txt
+++ b/client/boot-tools/INSTALL.es.txt
@@ -4,8 +4,8 @@ OpenGnSys Client boot-tools INSTALL.es.txt
Advertencia previa:
-----------------------------
-- No usar este instalador en un sistema OpenGnNys en producción.
-- Se puede ejecutar este script desde un sistema Ubuntu 10.04, 11.04
+- No usar este instalador en un sistema OpenGnSys en producción.
+- Se puede ejecutar este script desde un sistema Ubuntu 10.04 o superior.
- Mas información http://www.opengnsys.es/wiki/ClienteInitrdDSGenerarloV1.0.2
@@ -23,13 +23,25 @@ mv /opt/opengnsys/tftpboot/ogclient /opt/opengnsys/tftpboot/ogclient-old;
#1. Descargar del Subversion las herramientas del cliente
apt-get install subversion wget
-svn checkout http://www.opengnsys.es/svn/branches/version1.0/client /tmp/opengnsys_installer/opengnsys/client/;
-svn checkout http://www.opengnsys.es/svn/branches/version2/ /tmp/opengnsys_installer/opengnsys2;
+svn checkout http://www.opengnsys.es/svn/trunk/client /tmp/opengnsys_installer/opengnsys/client/;
find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
#2. Ejecutar el instalador:
/tmp/opengnsys_installer/opengnsys/client/boot-tools/boottoolsgenerator.sh;
+Notas para ejecución del instalador en Ubuntu 12.10:
+- Configuración openssh-client:
+ - *** ssh_config (Y/I/N/O/D/Z) [default=N] ? [intro]
+- Mapa de caracteres:
+ - Pantalla "Configuring console-data": elegir "Select keymap from full list"
+ - Keymap: pc / qwerty / Spanish / Standard / Standard
+- Clave publica del servidor
+ - verwrite (y/n)? [intro]
+- Mapa de caracteres (repetición):
+ - Pantalla "Configuring console-data":
+ - Select keymap from full list
+ - pc / qwerty / Spanish / Standard / Standard, UTF-8, Combined - Latin; Slavic Cyrillic; Greek, Fixed, 16
+
@@ -47,3 +59,4 @@ NOTA:
boottollsfuncions.lib -> btogSetfsBase
bootsoftwareinstall ->
packages ->sw.testing
+
diff --git a/client/boot-tools/boottoolsfunctions.lib b/client/boot-tools/boottoolsfunctions.lib
index b1f00d05..d27aea3d 100755
--- a/client/boot-tools/boottoolsfunctions.lib
+++ b/client/boot-tools/boottoolsfunctions.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase Boot-Tools
#@class Boot-Tools
#@brief Funciones para generar un sistema operativo cliente para opengnsys
-#@version 0.9
+#@version 1.0.5
#@warning License: GNU GPLv3+
#*/
@@ -29,11 +29,7 @@ export BTROOTFSIMGLABEL=ogClient
export LOG_FILE=/tmp/boot-tools_installation.log
-NAMEISOCLIENT=`cat /tmp/opengnsys_info_rootfs`
-NAMEHOSTCLIENT=`cat /tmp/opengnsys_chroot`
-
-export NAMEISOCLIENT
-export NAMEHOSTCLIENT
+export VERSIONBOOTTOOLS="ogLive"
}
@@ -44,32 +40,79 @@ export NAMEHOSTCLIENT
#@version 1.0 - Compatibilidad OpengGnsys X.
#@author Antonio J. Doblas Viso. Universidad de Malaga.
#@date 2011/08/03
+#@version 1.0.5 - Fichero general de configuración, Kernel 3.7 para Ubuntu 12.10.
+#@author Ramón Gómez, ETSII Univ. Sevilla
+#@date 2013/02/06
function btogGetOsInfo ()
{
- case $1 in
- lenny|LENNY)
- export OSDISTRIB=debian
- export OSCODENAME=lenny
- export OSRELEASE="2.6.28-11-generic"
- export OSARCH=i386
- export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ "
+OGCLIENTCFG=/tmp/ogclient.cfg
+case "${1,,}" in
+ precise) # ogLive 1.0.4-rc2 basado en Ubuntu 12.04 LTS.
+ OSDISTRIB="ubuntu"
+ OSCODENAME="precise"
+ OSRELEASE="3.2.0-23-generic"
+ OSARCH="i386"
+ OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
+ ;;
+ quantal) # ogLive 1.0.5-rc2 basado en Ubuntu 12.10 con Kernel descargado.
+ OSDISTRIB="ubuntu"
+ OSCODENAME="quantal"
+ OSRELEASE="3.7.6-030706-generic"
+ OSARCH="i386"
+ OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
+ ;;
+ raring) # ogLive 1.0.5-rc3 basado en Ubuntu 13.04.
+ OSDISTRIB="ubuntu"
+ OSCODENAME="raring"
+ OSRELEASE="3.8.0-22-generic"
+ OSARCH="i386"
+ OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
;;
- lucid|LUCID)
- export OSDISTRIB=ubuntu
- export OSCODENAME=lucid
- export OSRELEASE="2.6.32-21-generic-pae"
- export OSARCH=i386
- export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ "
+ wheezy) # ogLive basado en Debian 7.3.
+ OSDISTRIB="debian"
+ OSCODENAME="wheezy"
+ OSRELEASE="3.2.0-4-i386"
+ OSARCH="i386"
+ OSHTTP="http://ftp.es.debian.org/debian/"
;;
- host | HOST | *)
- export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
- export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}')
- export OSRELEASE=$(uname -a | awk '{print $3}')
- uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386
- export OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
+ trusty) # ogLive 1.0.5-rc4 basado en Ubuntu 14.04.
+ OSDISTRIB="ubuntu"
+ OSCODENAME="trusty"
+ OSRELEASE="3.13.0-24-generic"
+ OSARCH="i386"
+ OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
;;
- esac
- echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP
+ host | *) # ogLive basado en la distribución del servidor.
+ OSDISTRIB=$(lsb_release -is)
+ OSCODENAME=$(lsb_release -cs)
+ OSRELEASE=$(uname -a | awk '{print $3}')
+ #uname -a | grep x86_64 > /dev/null && OSARCH="amd64" || OSARCH="i386"
+ OSARCH="i386"
+ export OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
+ ;;
+esac
+SVNURL="http://opengnsys.es/svn/trunk/client"
+VERSIONSVN=$(LANG=C svn info $SVNURL | awk '/Rev:/ {print "r"$4}')
+NAMEISOCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$OSRELEASE-$VERSIONSVN"
+NAMEHOSTCLIENT="$VERSIONBOOTTOOLS-$OSCODENAME-$VERSIONSVN"
+export OSDISTRIB OSCODENAME OSRELEASE OSARCH OSHTTP
+export TYPECLIENT VERSIONSVN NAMEISOCLIENT NAMEHOSTCLIENT
+### El fichero de configuración debe sustituir a estos 3 ficheros (borrar las 3 líneas siguientes).
+echo "$VERSIONSVN" > /tmp/versionsvn.txt
+echo "$NAMEISOCLIENT" > /tmp/opengnsys_info_rootfs
+echo "$NAMEHOSTCLIENT" > /tmp/opengnsys_chroot
+# Generar fichero de configuración.
+cat << EOT > $OGCLIENTCFG
+TYPECLIENT="$1"
+OSDISTRIB="$OSDISTRIB"
+OSCODENAME="$OSCODENAME"
+OSRELEASE="$OSRELEASE"
+OSARCH="$OSARCH"
+OSHTTP="$OSHTTP"
+VERSIONSVN="$VERSIONSVN"
+NAMEISOCLIENT="$NAMEISOCLIENT"
+NAMEHOSTCLIENT="$NAMEHOSTCLIENT"
+EOT
}
# btogSetFsVirtual: Crea y formatea el fichero - disco duro virtual
@@ -92,7 +135,7 @@ echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $BTVIRTUALDISKSI
#Desmontamos el dispositivo virtual
mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT
-mount | grep $BTROOTFSMNTT && umount $BTROOTFSMNT
+mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT
#echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $BTROOTFSMNT"
mkdir -p $BTROOTFSMNT
@@ -137,7 +180,7 @@ fi
PARTLOOP=$(losetup -f)
#echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP"
-losetup -o 32256 $PARTLOOP $BTROOTFSIMG && mkfs.ext3 -b 4096 -L $BTROOTFSIMGLABEL $PARTLOOP
+losetup -o 32256 $PARTLOOP $BTROOTFSIMG && mkfs.ext4 -b 4096 -L $BTROOTFSIMGLABEL $PARTLOOP
if [ $? -ne 0 ]
then
errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR"
@@ -168,7 +211,7 @@ function btogSetFsBase ()
{
# Dependencias
-[ -z "$OSCODENAME" ] && btogGetOsInfo
+[ -z "$OSCODENAME" ] && btogGetOsInfo $TYPECLIENT
echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos "
@@ -176,12 +219,12 @@ echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos "
mount | grep $BTROOTFSMNT || mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256
mount | grep $BTROOTFSMNT && echoAndLog "$FUNCNAME: mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256 OK " || errorAndLog "$FUNCNAME: mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256 : FAILURE "
-debootstrap --components=main,universe ${OSCODENAME} ${BTROOTFSMNT} ${OSHTTP}
+debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${BTROOTFSMNT} ${OSHTTP}
#debootstrap --arch=$OSARCH ${OSCODENAME} ${BTROOTFSMNT} http://archive.ubuntu.com/ubuntu/
if [ $? -ne 0 ]; then
- errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $BTROOTFSMNT $OSHTTP : ha fallado!"
+ errorAndLog "$FUNCNAME: debootstrap --arch=$OSARCH --components=main,universe $OSCODENAME $BTROOTFSMNT $OSHTTP : ha fallado!"
mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT
return 3
else
@@ -213,7 +256,7 @@ cat << EOF > /etc/schroot/schroot.conf
[IMGogclient]
type=loopback
file=/var/lib/tftpboot/ogclient/ogclient.img
-description=ogclient ubuntu luc IMGi
+description=ogclient Ubuntu image
#priority=1
users=root
groups=root
@@ -257,7 +300,7 @@ function btogFsInitrd ()
{
#DEPENDENCIAS
[ -z "$BTROOTFSIMG" ] && btogGetVar
-[ -z "$OSCODENAME" ] && btogGetOsInfo
+[ -z "$OSCODENAME" ] && btogGetOsInfo $TYPECLIENT
cd /
schroot -c IMGogclient -- /usr/bin/boot-tools/boottoolsInitrdGenerate.sh
@@ -292,7 +335,7 @@ function btogFsSqfs ()
{
#Dependencias.
[ -z "$BTROOTFSIMG" ] && btogGetVar
-[ -z "$OSCODENAME" ] && btogGetOsInfo
+[ -z "$OSCODENAME" ] && btogGetOsInfo $TYPECLIENT
echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs "
# si ya existe un sqfs lo renombramos
diff --git a/client/boot-tools/boottoolsgenerator.sh b/client/boot-tools/boottoolsgenerator.sh
index de289106..c6738e26 100755
--- a/client/boot-tools/boottoolsgenerator.sh
+++ b/client/boot-tools/boottoolsgenerator.sh
@@ -10,15 +10,12 @@
#@date 2011/08/03
#*/
- #mkdir -p /tmp/opengnsys_installer/opengnsys;
- #mkdir -p /tmp/opengnsys_installer/opengnsys2;
- #cp -prv /home/administrador/workspace/OpenGnsys/branches/version2/* /tmp/opengnsys_installer/opengnsys2/;
- #cp -prv /home/administrador/workspace/OpenGnsys/branches/version1.0/client/ /tmp/opengnsys_installer/opengnsys/;
-#find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
+ #mkdir -p /tmp/opengnsys_installer/opengnsys
+ #svn export http://opengnsys.es/svn/branches/version1.0/client /tmp/opengnsys_installer/opengnsys
#Variables
-TYPECLIENT=host
+TYPECLIENT="host"
WORKDIR=/tmp/opengnsys_installer
INSTALL_TARGET=/opt/opengnsys
PROGRAMDIR=$(readlink -e $(dirname "$0"))
@@ -30,6 +27,9 @@ then
exit 1
fi
+# Cambiar a directorio temporal.
+cd /tmp
+
for i in `mount | grep IMGogclient | grep /var | cut -f3 -d" "`; do echo $i; umount $i; done
for i in `mount | grep IMGogclient | grep /var | cut -f3 -d" "`; do echo $i; umount $i; done
for i in `mount | grep IMGogclient | grep /var | cut -f3 -d" "`; do echo $i; umount $i; done
@@ -38,25 +38,25 @@ for i in `mount | grep IMGogclient | grep /var | cut -f3 -d" "`; do echo $i; umo
#funciones especificas del cliente.
source $PROGRAMDIR/boottoolsfunctions.lib
+####################################################################3
+echo "FASE 1 - Asignación de variables"
+#obtenemos las variables necesarias y la información del host.
+btogGetVar
echoAndLog "OpenGnSys CLIENT installation begins at $(date)"
-
+btogGetOsInfo $TYPECLIENT
##########################################################################
-echo "FASE 1 - Instalación de software adicional."
+echo "FASE 2 - Instalación de software adicional."
cat /etc/apt/sources.list | grep "http://free.nchc.org.tw/drbl-core" || echo "deb http://free.nchc.org.tw/drbl-core drbl stable " >> /etc/apt/sources.list
-apt-get update; apt-get -y --force-yes install debootstrap subversion schroot squashfs-tools syslinux genisoimage gpxe qemu
-####################################################################3
-echo "FASE 2 - Asignación de variables"
-#obtenemos las variables necesarias y la información del host.
-btogGetVar && btogGetOsInfo
+apt-get update; apt-get -y --force-yes install debootstrap subversion schroot squashfs-tools syslinux genisoimage gpxe qemu lsof
###################################################################3
-echo " FASE 3: Creación del Sistema raiz RootFS (Segundo Sistema archivos (img)) "
-echo "Fase 3.1 Generar y Formatear el disco virtual. generamos el dispositivo loop."
+echo "FASE 3 - Creación del Sistema raiz RootFS (Segundo Sistema archivos (img)) "
+echo "Fase 3.1 Generar y formatear el disco virtual. Generar el dispositivo loop."
file $BTROOTFSIMG | grep "partition 1: ID=0x83"
if [ $? == 1 ]
then
btogSetFsVirtual || exit 2
fi
-echo "Fase 3.2 gener sistema de archivos con debootstrap"
+echo "Fase 3.2 Generar sistema de archivos con debootstrap"
schroot -p -c IMGogclient -- touch /tmp/ogclientOK
if [ -f /tmp/ogclientOK ]
then
@@ -65,34 +65,35 @@ else
btogSetFsBase || exit 3
fi
###################################################################3
-echo "FASE 4: Configurar acceso schroot al Segundo Sistema de archivos (img)"
+echo "FASE 4 - Configurar acceso schroot al Segundo Sistema de archivos (img)"
cat /etc/schroot/schroot.conf | grep $BTROOTFSIMG || btogSetFsAccess
###########################################################################
-echo "FASE 5: Incorporando con ficheros OpenGnsys el sistema raiz rootfs "
-cp -prv ${BTSVNBOOTTOOLS}/includes/usr/bin/* /tmp/
-chmod 777 /tmp/boot-tools/*.sh
+echo "FASE 5 - Incorporando ficheros OpenGnSys el sistema raiz rootfs "
+cp -a ${BTSVNBOOTTOOLS}/includes/usr/bin/* /tmp
+chmod +x /tmp/boot-tools/*.sh
+# En Ubuntu 13.04+ es necesario matar proceso de "udev" antes de desmontar.
+umount $BTROOTFSMNT 2>/dev/null || (kill -9 $(lsof -t $BTROOTFSMNT); umount $BTROOTFSMNT 2>/dev/null)
schroot -p -c IMGogclient -- /tmp/boot-tools/boottoolsFsOpengnsys.sh
############################################################################################
-echo "FASE6: Instalar software"
+echo "FASE 6 - Instalar software"
echo "Fase 6.1 instalar paquetes deb con apt-get"
schroot -p -c IMGogclient -- /usr/bin/boot-tools/boottoolsSoftwareInstall.sh
echo "Fase 6.2 compilar software."
cd /
schroot -p -c IMGogclient -- /usr/bin/boot-tools/boottoolsSoftwareCompile.sh
-schroot -p -c IMGogclient -- /usr/bin/boot-tools/boottoolsSoftwareCompile.sh
cd -
-echo "Fase 7. Personalizar el sistema creado"
-echo "Fase 7.1 incorporamos la clave publica del servidor"
+echo "FASE 7 - Personalizar el sistema creado"
+echo "Fase 7.1 Incorporar la clave publica del servidor"
cd /
ssh-keygen -q -f /root/.ssh/id_rsa -N ""
cp /root/.ssh/id_rsa.pub /tmp
schroot -p -c IMGogclient -- /usr/bin/boot-tools/boottoolsSshServer.sh
cd -
-echo "Fase 7.2. incorpoar la clave publica del propio cliente"
+echo "Fase 7.2. Incorpoar la clave publica del propio cliente"
schroot -p -c IMGogclient -- /usr/bin/boot-tools/boottoolsSshClient.sh
-echo "Fase 7.1. configurando las locales"
+echo "Fase 7.3. Configurando las locales"
schroot -p -c IMGogclient -- /usr/bin/boot-tools/boottoolsFsLocales.sh
@@ -101,18 +102,15 @@ for i in `mount | grep IMGogclient | grep /var | cut -f3 -d" "`; do echo $i; umo
for i in `mount | grep IMGogclient | grep /var | cut -f3 -d" "`; do echo $i; umount $i; done
#########################################################################
-echo "Fase 8 . Generar distribucion "
-echo "Fase 8.1 generar el initrd"
+echo "FASE 8 - Generar distribucion"
+echo "Fase 8.1 Generar el initrd"
btogFsInitrd
-echo "8.2. Generar fichero sqfs a partir del fichero img"
+echo "Fase 8.2 Generar fichero sqfs a partir del fichero img"
btogFsSqfs
-echo "8.3. Generar la ISO"
+umount $BTROOTFSMNT 2>/dev/null
+echo "Fase 8.3 Generar la ISO"
btogIsoGenerator
######################################################################3
########################################################################
-# Mostrar sumario de la instalación e instrucciones de post-instalación.
-installationSummary
echoAndLog "OpenGnSys installation finished at $(date)"
-
-
diff --git a/client/boot-tools/includes/etc/apt/sources.list.debian b/client/boot-tools/includes/etc/apt/sources.list.debian
index 495e48d4..71252e17 100644
--- a/client/boot-tools/includes/etc/apt/sources.list.debian
+++ b/client/boot-tools/includes/etc/apt/sources.list.debian
@@ -1,4 +1,8 @@
-deb http://ftp.us.debian.org/debian lenny main contrib non-free
+deb http://ftp.es.debian.org/debian/ OSCODENAME main contrib non-free
+
+deb http://security.debian.org/ OSCODENAME/updates main contrib non-free
+deb-src http://security.debian.org/ OSCODENAME/updates main contrib non-free
+
+# DRBL
+deb http://free.nchc.org.tw/drbl-core drbl stable
-deb http://security.debian.org/ lenny/updates main contrib non-free
-deb-src http://security.debian.org/ lenny/updates main contrib non-free
diff --git a/client/boot-tools/includes/etc/apt/sources.list.ubuntu b/client/boot-tools/includes/etc/apt/sources.list.ubuntu
index 1487573b..3cd91c34 100644
--- a/client/boot-tools/includes/etc/apt/sources.list.ubuntu
+++ b/client/boot-tools/includes/etc/apt/sources.list.ubuntu
@@ -54,3 +54,7 @@ deb http://free.nchc.org.tw/ubuntu OSCODENAME-security main restricted universe
deb http://ppa.launchpad.net/freenx-team/ubuntu/ OSCODENAME main
deb http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main
deb-src http://ppa.launchpad.net/randomaction/ppa/ubuntu OSCODENAME main
+# Ubuntu-ZFS
+deb http://ppa.launchpad.net/zfs-native/stable/ubuntu OSCODENAME main
+deb-src http://ppa.launchpad.net/zfs-native/stable/ubuntu OSCODENAME main
+
diff --git a/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks b/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
index e3c25677..6e58b79c 100755
--- a/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
+++ b/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
@@ -43,7 +43,7 @@ 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 /sbin/mount.smbfs
copy_exec /bin/lsmod
@@ -52,7 +52,7 @@ copy_exec /bin/lsmod
#cp -prv /opt/opengnsys/client/lib/engine ${DESTDIR}/opt/opengnsys/lib/engine
manual_add_modules cifs
-manual_add_modules smbfs
+#manual_add_modules smbfs
manual_add_modules atl1e
manual_add_modules squashfs
manual_add_modules md4
diff --git a/client/boot-tools/includes/etc/initramfs-tools/modules b/client/boot-tools/includes/etc/initramfs-tools/modules
index 8bac1d4b..4955ba4d 100644
--- a/client/boot-tools/includes/etc/initramfs-tools/modules
+++ b/client/boot-tools/includes/etc/initramfs-tools/modules
@@ -8,7 +8,18 @@
#
# raid1
# sd_mod
+
+# video Kernel 3.2 video.
vga16b
vesafb
fbcon
+# video Kernel 3.7 video.
+#uvesafb
+
+#generales
+usbcore
+uhci_hcd
+ehci_hcd
+usbhid
+mac-hid \ No newline at end of file
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
index 0fd4ddad..1870dcaf 100644
--- a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
@@ -1,9 +1,11 @@
+#/**
#@file ogfunctions.lib
-#@brief Librería o clase para la gestion del sistema operativo de los clientes OpenGnsys
+#@brief Librería o clase para la gestion del sistema operativo de los clientes OpenGnSys.
#@class client
-#@brief Librería o clase para la gestion del sistema operativo de los clientes OpenGnsys
-#@version 0.91
+#@version 1.0.5
#@warning License: GNU GPLv3+
+#*/ ##
+
#/**
# ogExportKernelParameters
@@ -25,6 +27,39 @@ ogExportKernelParameters ()
return 0
}
+
+#/**
+# ogChangeVideoResolution
+#@brief Cambia la resolución de vídeo utilizando el parámetro "video" del Kernel
+# (sustituye al parámetro "vga").
+#@note Formato del parámetro vídeo: video=DRIVER:RESXxRESY-BITS
+#@note El valor por defecto es: video=uvesafb:640x480-16
+#@todo Control de errores en el foramto de la variable "video".
+#@version 1.0.5 - Primera versión de la función.
+#@author Ramón Gómez, ETSII Universidad de Sevilla
+#@date 2013/02/18
+#*/ ##
+ogChangeVideoResolution ()
+{
+# Variables locales.
+local DRIVER MODE
+# Obtener driver y resolución.
+DRIVER="$(echo $video|cut -f1 -d:)"
+MODE="$(echo $video|cut -f2 -d:)"
+case "$DRIVER" in
+ # Cambiar resolución para driver "uvesafb".
+ uvesafb)
+ grep ":$(echo $MODE|cut -f1 -d-)p" /sys/class/graphics/fb0/modes | head -1 > /sys/class/graphics/fb0/mode 2>&1 || MODE="640x480-16"
+ echo "$(echo $MODE|cut -f2 -d-)" > /sys/class/graphics/fb0/bits_per_pixel 2>&1
+ echo "Screen mode: $(cat /sys/class/graphics/fb0/mode),$(cat /sys/class/graphics/fb0/bits_per_pixel)bpp."
+ ;;
+ # Resolución por defecto para el resto de casos.
+ *) echo "Unknown video driver, using default mode."
+ ;;
+esac
+}
+
+
#/**
# ogExportVarEnvironment
#@brief Exporta las variables usadas en el proceso de inicio OpenGnsys y las almacena en /tmp
@@ -127,8 +162,8 @@ ogLoadNetModule ()
{
if [ -n "$ognetmodule" ]
then
- echo "Cargando modulo de red $netmodule"
- insmod `find /lib/modules/ -name ${netmodule}*`
+ echo "Cargando modulo de red $ognetmodule"
+ modprobe ${ognetmodule}
fi
}
@@ -156,10 +191,14 @@ ogPostConfigureFS()
echo "order hosts,bind" > /etc/host.conf
echo "multi on" >> /etc/host.conf
- #configuramos el dns
- #echo "nameserver $ogdns" > /etc/resolv.conf
- echo "nameserver $ogdns" > /etc/resolvconf/resolv.conf.d/tail
+ #configuramos el dns anterior ubuntu 12.04 (parámetro del Kernel "ogdns=IP_DNS")
+ if [ -n "$ogdns" ]; then
+ mkdir -p /run/resolvconf
+ echo "nameserver $ogdns" > /run/resolvconf/resolv.conf
+ fi
+ #configuramos el uso del servicio http proxy (parámetro del Kernel "ogproxy=URL_Proxy")
+ [ -n "${ogproxy}" ] && export http_proxy="$ogproxy"
# configuramos el /etc/networks
#read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}')
@@ -173,15 +212,14 @@ ogPostConfigureFS()
#echo "ogLive1.0.2" > /etc/debian_chroot
#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
+ # 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 $DSTOGLIVE /opt/opengnsys/cache
[ "$ogprotocol" == "local" ] && ln -s ${OGLIVEROOTFS}/opt/opengnsys/* /opt/opengnsys/
- #Montamos un directorio temporal para el apt-get
- mount tmpfs /var/cache/apt/archives -t tmpfs -o size=15M
- mkdir -p /var/cache/apt/archives/partial
-
+ #Montamos un directorio temporal para el apt-get
+ mount tmpfs /var/cache/apt/archives -t tmpfs -o size=15M
+ mkdir -p /var/cache/apt/archives/partial
}
@@ -489,20 +527,20 @@ 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
+ 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:`
- ;;
+ 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
@@ -510,12 +548,12 @@ if [ -z "${DEVICE}" ]; then
ogConfigureNetworking
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"
+[ -n "${DEVICE}" ] && [ -e /run/net-"${DEVICE}".conf ] && return 0
+#if [ -n "${DEVICE}" ] && [ -e /run/net-"${DEVICE}".conf ]; then
+# echo "variable DEVICE con valor $DEVICE y fichero /run/net-$DEVICE encontrados"
# return 0
#else
-# echo "variable DEVICE con valor $DEVICE encontrada, procedemos a configurala y a crear el fichero /tmp/net-$DEVICE"
+# echo "variable DEVICE con valor $DEVICE encontrada, procedemos a configurala y a crear el fichero /run/net-$DEVICE"
#fi
# Activamos la interfaz antes de configurar.
@@ -536,10 +574,10 @@ 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
+ if [ -e /run/net-"${DEVICE}".conf ]; then
break;
fi
- case ${IP} in
+ case "$IP" in
none|off)
return 0
;;
@@ -572,16 +610,17 @@ done
# source ipconfig output
if [ -n "${DEVICE}" ]; then
- . /tmp/net-${DEVICE}.conf
- DEVICECFG="/tmp/net-${DEVICE}.conf"
- export DEVICECFG
export DEVICE
+ export DEVICECFG="/run/net-${DEVICE}.conf"
+ source $DEVICECFG
echo "DEVICE=$DEVICE" >> $CFGINITRD
echo "DEVICECFG=$DEVICECFG" >> $CFGINITRD
- echo "exportando variable DEVICE con valor = $DEVICE y el DEVICECFG con valor $DEVICECFG"
+ echo "exportando variable DEVICE con valor = $DEVICE y DEVICECFG con valor $DEVICECFG"
+ # Compatibilidad con versiones anteriores.
+ ln -fs $DEVICECFG /tmp
else
- # source any interface as not exaclty specified
- . /tmp/net-*.conf
+ # source any interface as not exaclty specified
+ source /run/net-*.conf
fi
}
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit b/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
index 61c68b96..6f8a30b8 100755
--- a/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
@@ -27,15 +27,19 @@
#@version 1.0.2 - RAMFS: instalación y actualización automatica en cache
#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
#@date 2011/08/4
+#@version 1.0.5 - Cambiar resolución de pantalla para Kernel con parámetro "video".
+#@author Ramón Gómez, ETSII Universidad de Sevilla
+#@date 2013/02/18
#*/
-
-
-
# Parameter: Where to mount the filesystem
mountroot ()
{
+ [ -f /scripts/VERSION.txt ] && OGVERSION=$(cat /scripts/VERSION.txt)
+ OGVERSION=${OGVERSION:-"OpenGnSys Client"}
+ echo; echo; echo "$OGVERSION"; echo; echo
+
[ "$quiet" != "y" ] && log_begin_msg "Running OpenGnsys /scripts/og-top"
run_scripts /scripts/og-top
[ "$quiet" != "y" ] && log_end_msg
@@ -53,7 +57,9 @@ mountroot ()
set -a
log_success_msg "Checking kernel parameters"
ogExportKernelParameters
- log_success_msg "Checking Opengnys Environmnet"
+ # Cambiar resolución de vídeo para kernels que usan el parámetro "video".
+ [ -n "$video" ] && ogChangeVideoResolution
+ log_success_msg "Checking OpenGnSys Environmnet"
ogExportVarEnvironment
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure ramfs structure for OG: y/N "
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh
index 13f4703e..8998de28 100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh
@@ -3,40 +3,42 @@
#svn checkout http://www.opengnsys.es/svn/branches/version1.0/client /tmp/opengnsys_installer/opengnsys/client/;
#svn checkout http://www.opengnsys.es/svn/branches/version2/ /tmp/opengnsys_installer/opengnsys2
-find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
-
-apt-get -y --force-yes install subversion
+#find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
+#apt-get -y --force-yes install subversion
#export SVNURL="http://opengnsys.es/svn/branches/version1.0/client/"
#VERSIONSVN=$(LANG=C svn info $SVNURL | awk '/Revision:/ {print "r"$2}')
-VERSIONSVN=$(cat /tmp/versionsvn.txt)
-VERSIONBOOTTOOLS=ogLive
+
+#VERSIONSVN=$(cat /tmp/versionsvn.txt)
+VERSIONBOOTTOOLS="ogLive"
NAMEISOCLIENTFILE="/tmp/opengnsys_info_rootfs"
NAMEHOSTCLIENTFILE="/tmp/opengnsys_chroot"
-
+
SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/client/boot-tools
SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared
SVNCLIENTENGINE=/tmp/opengnsys_installer/opengnsys/client/engine
-SVNOG2=/tmp/opengnsys_installer/opengnsys2
OGCLIENTMOUNT=""
+OGCLIENTCFG=${OGCLIENTCFG:-/tmp/ogclient.cfg}
+[ -f $OGCLIENTCFG ] && source $OGCLIENTCFG
+OSDISTRIB=${OSDISTRIB:-$(lsb_release -is)}
+OSCODENAME=${OSCODENAME:-$(lsb_release -cs)}
+OSRELEASE=${OSRELEASE:-$(uname -a | awk '{print $3}')}
+if [ -z "$OSARCH" ]; then
+ uname -a | grep x86_64 > /dev/null && OSARCH="amd64" || OSARCH="i386"
+fi
+OSHTTP=${OSHTTP:-"http://es.archive.ubuntu.com/ubuntu/"}
-OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
-OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}')
-OSRELEASE=$(uname -a | awk '{print $3}')
-uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386
-OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
-
-echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP
+echo "$OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP"
LERROR=TRUE
echo "$FUNCNAME: Iniciando la personalización con datos del SVN "
-# parseamos del apt.source
-sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/includes/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/includes/etc/apt/sources.list
+# parseamos el apt.source de la distribución
+sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/includes/etc/apt/sources.list.$OSDISTRIB > ${SVNCLIENTDIR}/includes/etc/apt/sources.list
if [ $? -ne 0 ]
then
echo "$FUNCNAME(): Parsing apt.sources : ERROR"
@@ -49,10 +51,10 @@ fi
chmod -R 775 ${SVNCLIENTDIR}/includes/usr/bin/*
# los copiamos
-cp -prv ${SVNCLIENTDIR}/includes/* /
+cp -av ${SVNCLIENTDIR}/includes/* ${OGCLIENTMOUNT}/
mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/
-cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/
-cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/
+cp -av ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/
+cp -av ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/
if [ $? -ne 0 ]
then
@@ -60,63 +62,34 @@ then
exit 1
fi
-# copiamos algunas cosas del nfsexport
-
-#### Tipos de letra para el Browser.
-cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/lib/fonts
-#### Crear enlaces para compatibilidad con las distintas versiones del Browser.
-mkdir -p $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/
-mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/
-mkdir -p $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/
-cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts
-cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.2/lib/fonts
-cp -pr ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/QtEmbedded-4.6.3/lib/fonts
-if [ $? -ne 0 ]
-then
- echo "$FUNCNAME(): Linking Browser fonts : ERROR"
- exit 1
-fi
-#########################################################
-cp -pr ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc
-if [ $? -ne 0 ]
-then
- echo "$FUNCNAME(): Copying pci.ids : ERROR"
- exit 1
-fi
-####### Browsser
-cp ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin
-if [ $? -ne 0 ]
-then
+# Si no existe, copiar pci.ids.
+[ -f $OGCLIENTMOUNT/etc/pci.ids ] || cp -va ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc
+
+# Dependencias Qt para el Browser.
+mkdir -p $OGCLIENTMOUNT/usr/local/{etc,lib,plugins}
+cp -av ${SVNCLIENTSTRUCTURE}/lib/qtlib/* $OGCLIENTMOUNT/usr/local/lib
+cp -av ${SVNCLIENTSTRUCTURE}/lib/fonts $OGCLIENTMOUNT/usr/local/lib
+cp -av ${SVNCLIENTSTRUCTURE}/lib/qtplugins/* $OGCLIENTMOUNT/usr/local/plugins
+cp -av ${SVNCLIENTSTRUCTURE}/etc/*.qmap $OGCLIENTMOUNT/usr/local/etc
+
+# Browser.
+cp -av ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin
+if [ $? -ne 0 ]; then
echo "$FUNCNAME(): Copying Browser : ERROR"
exit 1
fi
+# ogAdmClient.
+cp -av ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin
+if [ $? -ne 0 ]; then
+ echo "$FUNCNAME(): Copying ogAdmClient: ERROR"
+ exit 1
+fi
-#Compatiblidad con og2
-cp ${SVNCLIENTSTRUCTURE}/bin/browser2 $OGCLIENTMOUNT/bin
-
-cp -prv ${SVNOG2}/ogr/ogr $OGCLIENTMOUNT/opt/opengnsys/bin/
-
-cp -prv ${SVNOG2}/ogr/libogr.py $OGCLIENTMOUNT/usr/lib/python2.7/libogr.py
-cp -prv ${SVNOG2}/ogr/libogr.py $OGCLIENTMOUNT/usr/lib/python2.6/libogr.py
-cp -prv ${SVNOG2}/ogr/libogr.py $OGCLIENTMOUNT/opt/opengnsys/lib/python
-
-
-echo "mkdir -p /opt/opengnsys/lib/engine/"
-mkdir -p /opt/opengnsys/engine/
-echo "cp -prv ${SVNOG2}/engine/2.0/* $OGCLIENTMOUNT/opt/opengnsys/engine/"
-cp -prv ${SVNOG2}/engine/2.0/* $OGCLIENTMOUNT/opt/opengnsys/engine/
-
-
-cp -prv ${SVNOG2}/job_executer $OGCLIENTMOUNT/opt/opengnsys/bin/
-
-
-cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin
-
-
-echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${OSRELEASE}-${VERSIONSVN} > $NAMEISOCLIENTFILE
-echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > $NAMEHOSTCLIENTFILE
+# El fichero de configuración debe sustituir a los 2 ficheros (borrar las 2 líneas).
+echo "${VERSIONBOOTTOOLS}-${OSCODENAME}-${OSRELEASE}-${VERSIONSVN}" > /$NAMEISOCLIENTFILE
+echo "${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN}" > $NAMEHOSTCLIENTFILE
history -c
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsInitrdGenerate.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsInitrdGenerate.sh
index fe9fe4ff..6269f60a 100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsInitrdGenerate.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsInitrdGenerate.sh
@@ -1,18 +1,15 @@
#!/bin/bash
-export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
-#OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
-export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}')
-export OSRELEASE=$(uname -a | awk '{print $3}')
-uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386
-export OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
+OGCLIENTCFG=${OGCLIENTCFG:-/tmp/ogclient.cfg}
+[ -f $OGCLIENTCFG ] && source $OGCLIENTCFG
+OSRELEASE=${OSRELEASE:-$(uname -a | awk '{print $3}')}
-cd /usr/lib/initramfs-tools/bin/
-rm *
+rm -f /usr/lib/initramfs-tools/bin/*
cp /bin/busybox ./
cd /tmp/
mkinitramfs -o /tmp/initrd.img-$OSRELEASE -v $OSRELEASE
cp /boot/vmlinuz-$OSRELEASE /tmp
-history -c \ No newline at end of file
+history -c
+
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh
index ca721c22..637d2a66 100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh
@@ -2,13 +2,16 @@
################################################################
##################### SOFTWARE #####################
################################################################
+OLDLANGUAGE=$LANGUAGE
+OLDLC_ALL=$LC_ALL
+OLDLANG=$LANG
export LANGUAGE=C
export LC_ALL=C
export LANG=C
source /opt/opengnsys/lib/engine/bin/ToolsGNU.c &>/dev/null
-cd /tmp
+pushd /tmp
echo "ctorrent "
which ctorrent || ctorrent install &>/dev/null
@@ -23,14 +26,14 @@ which ms-sys || ms-sys install &>/dev/null
echo "spartlnx"
which spartlnx.run || $(wget http://damien.guibouret.free.fr/savepart.zip &>/dev/null; unzip -o savepart.zip -d /sbin/)
-echo "xvesa"
+#echo "xvesa"
gdebi -n /var/cache/apt/archivesOG/xvesa.deb
-echo "partclone"
-gdebi -n /var/cache/apt/archivesOG/partclone_0.2.38_i386.deb
+#echo "partclone"
+#gdebi -n /var/cache/apt/archivesOG/partclone_0.2.38_i386.deb
-echo "busybox-static 1.17.1 en rootfs"
-#echo "busybox-static 1.17.1 en ogLive rootfs permite reboot y poweroff
+#echo "comenzamos con el busybox"
+#echo "busybox-static 1.17.1 en rootfs"
apt-get remove -y busybox-static
gdebi -n /var/cache/apt/archivesOG/busybox-static_1.17.1-10ubuntu1_i386.deb
cp /bin/busybox /bin/busyboxOLD
@@ -39,22 +42,43 @@ echo "busybox-static 1.18.5 en initrd"
apt-get install -y busybox-static
cp /bin/busybox /bin/busyboxNEW
/bin/busyboxNEW
-# en scripts reboot y poweroff hacer llamada a busyboxOLD reboot|poweroff
-
+echo " en scripts reboot y poweroff hacer llamada a busyboxOLD reboot|poweroff "
#gpt
-apt-get install -y uuid-dev libicu-dev libpopt-dev libpopt0 ncurses-base libncurses5-dev
-wget -O download.tgz http://sourceforge.net/projects/gptfdisk/files/gptfdisk/0.8.2/gptfdisk-0.8.2.tar.gz/download
-mkdir download
-tar xzvf download.tgz -C download
-cd download/gptfdisk-0.8.2
-make
-cp sgdisk gdisk fixparts cgdisk /sbin
+#echo "gptfdisk"
+#apt-get install -y uuid-dev libicu-dev libpopt-dev libpopt0 ncurses-base libncurses5-dev
+#wget -O download.tgz http://sourceforge.net/projects/gptfdisk/files/gptfdisk/0.8.5/gptfdisk-0.8.5.tar.gz/download -O gptfdisk-0.8.5.tar.gz
+#tar xzvf gptfdisk-0.8.5.tar.gz
+#cd gptfdisk-0.8.5
+#make
+#cp -va sgdisk gdisk fixparts cgdisk /sbin
+#cd ..
+#rm -fr gptfdisk-0.8.5*
+
+# Mach-O loader for Linux
+echo "maloader"
+wget https://github.com/shinh/maloader/archive/master.zip
+unzip master.zip
+cd maloader-master
+perl -pi -le 'print "#include <unistd.h>" if $. == 45' ld-mac.cc
+if [ "$(arch)" == "x86_64" ]; then
+ ln -fs /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 /lib/libcrypto.so 2>/dev/null
+ make release
+else
+ ln -fs /lib/i386-linux-gnu/libcrypto.so.1.0.0 /lib/libcrypto.so 2>/dev/null
+ make clean
+ make all BITS=32
+fi
+cp -va ld-mac /usr/bin
+cp -va libmac.so /usr/lib
cd ..
-rm -fr download*
-
-
+rm -fr master.zip maloader-master
+popd
+export LANGUAGE=$OLDLANGUAGE
+export LC_ALL=$OLDLC_ALL
+export LANG=$OLDLANG
+
+history -c
-history -c \ No newline at end of file
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareInstall.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareInstall.sh
index 738c5368..17437b56 100755
--- a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareInstall.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareInstall.sh
@@ -1,4 +1,6 @@
#!/bin/bash
+# Script de instalación de paquetes de software.
+
export LANGUAGE=C
export LC_ALL=C
export LANG=C
@@ -15,28 +17,44 @@ ln -s /bin/true /sbin/initctl
#Limpiamos y actualizamos los repositorios apt
apt-get clean
apt-get update
+apt-get upgrade -y
#Desactivamos el hook del oginitrd.img para evitar problemas, al final de este escripts se activará
mv /etc/initramfs-tools/hooks/oghooks /etc/initramfs-tools/
# Preparamos el mtab necesario para la instalacion correcta de paquetes.
-echo " /dev/sda1 / ext4 rw,errors=remount-ro 0 0 " > /etc/mtab
-
-
-#Instalamos el kernel.
-#Deteccion de la versión y kernel a usar
-export OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
-export OSCODENAME=$(cat /etc/lsb-release | grep CODENAME | awk -F= '{print $NF}')
-export OSRELEASE=$(uname -a | awk '{print $3}')
-uname -a | grep x86_64 > /dev/null && export OSARCH=amd64 || export OSARCH=i386
-export OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
+echo "/dev/sda1 / ext4 rw,errors=remount-ro 0 0" > /etc/mtab
+
+# Instalamos el kernel.
+# Deteccion de la versión y kernel a usar
+OGCLIENTCFG=${OGCLIENTCFG:-/tmp/ogclient.cfg}
+[ -f $OGCLIENTCFG ] && source $OGCLIENTCFG
+OSRELEASE=${OSRELEASE:-$(uname -a | awk '{print $3}')}
+if [ -z "$OSARCH" ]; then
+ uname -a | grep x86_64 > /dev/null && OSARCH="amd64" || OSARCH="i386"
+fi
# inicio de la instalacion
-apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE
+if [ "$OSRELEASE" == "3.7.6-030706-generic" ]; then
+ # Descargar e instalar Kernel 3.7.
+ mkdir -p /tmp/kernel
+ pushd /tmp/kernel
+ apt-get -y --force-yes install wget crda libnl-3-200 libnl-genl-3-200 wireless-regdb
+ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.7.6-raring/linux-image-3.7.6-030706-generic_3.7.6-030706.201302040006_$OSARCH.deb
+ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.7.6-raring/linux-image-extra-3.7.6-030706-generic_3.7.6-030706.201302040006_$OSARCH.deb
+ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.7.6-raring/linux-headers-3.7.6-030706-generic_3.7.6-030706.201302040006_$OSARCH.deb
+ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.7.6-raring/linux-headers-3.7.6-030706_3.7.6-030706.201302040006_all.deb
+ dpkg -i *.deb
+ popd
+ rm -fr /tmp/kernel
+else
+ # Instalar Kernel del repositorio de paquetes.
+ apt-get -y --force-yes install linux-image-${OSRELEASE} linux-image-extra-${OSRELEASE} linux-headers-${OSRELEASE}
+fi
#Eliminamos cualquier busybox previo: antes del busybox
-apt-get -y --force-yes remove busybox
-apt-get -y --force-yes remove busybox-static
+#apt-get -y --force-yes remove busybox
+#apt-get -y --force-yes remove busybox-static
#estos paquetes ofrecen interaccion.
# si es actualización, ya existe el fichero /etc/ssh/ssh_config
@@ -80,6 +98,7 @@ echo " " > /etc/mtab
#localepurge
#rm /var/lib/dbus/machine-id; rm /sbin/initctl; dpkg-divert --rename --remove /sbin/initctl;
#FIN ADV
+
apt-get clean
apt-get autoclean
apt-get autoremove
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Xwindow b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Xwindow
index 68ea963d..85858cb1 100644
--- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Xwindow
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Xwindow
@@ -7,5 +7,7 @@
install roxterm
install gparted
#xvesa en compilacion
-install openbox
-install midori \ No newline at end of file
+#install openbox
+#install midori
+# VESA Kernel 3.7
+#install v86d
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Zinitrd b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Zinitrd
index 48438791..7569b9c5 100644
--- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Zinitrd
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Zinitrd
@@ -1,3 +1,3 @@
#sw.zinitrd
-install busybox-static
-install bash-static
+#install busybox-static
+#install bash-static
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic
index 358b76ed..1dd2ac6a 100644
--- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic
@@ -14,4 +14,5 @@ install subversion
install python-openssl
install python
install dmidecode
-install hwinfo \ No newline at end of file
+#install hwinfo
+install realpath
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning
index 2585f56f..b4c8c76d 100644
--- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning
@@ -3,15 +3,18 @@ install drbl-partimage
install fsarchiver
install pv
install kexec-tools
+install pxe-kexec
install mbuffer
install parted
+install gdisk
install drbl-chntpw
-install chntpw
+#install chntpw
install clonezilla
install registry-tools
install reglookup
install libparse-win32registry-perl
+install libwin-hivex-perl
install grokevt
install libhivex0
install libhivex-bin
-install rsync \ No newline at end of file
+install rsync
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.local b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.local
index 16d67da5..2978f409 100644
--- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.local
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.local
@@ -2,20 +2,29 @@
install squashfs-tools
install unionfs-fuse
install drbl-ntfsprogs
-install ntfsprogs
+#install ntfsprogs
install ntfs-3g
install dosfstools
+install fatresize
+install exfat-utils
install dmraid
install dmsetup
install lvm2
install e2fsprogs
+install btrfs-tools
install jfsutils
install reiserfsprogs
+install reiser4progs
install xfsprogs
install mhddfs
install hfsplus
install hfsprogs
install hfsutils
install nilfs-tools
-install reiser4progs
-install ufsutils \ No newline at end of file
+install ufsutils
+#install ubuntu-zfs
+install zfs-fuse
+install android-tools-adb
+install android-tools-fastboot
+install android-tools-fsutils
+install f2fs-tools
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.remote b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.remote
index 192a4017..f0890b6b 100644
--- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.remote
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.remote
@@ -1,9 +1,9 @@
#sw.filesystem.remote
install nfs-common
install sshfs
-install smbfs
+install cifs-utils
install smbclient
install davfs2
install open-iscsi
install openssh-server
-install bittornado \ No newline at end of file
+install bittornado
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.testing b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.testing
index 7414c4f4..c3d3b86f 100644
--- a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.testing
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.testing
@@ -1,11 +1,13 @@
#sw.other
install screen
install schroot
-#install grub
+#install grub
+install xmlstarlet
+install efibootmgr
##############
#install discover
#install laptop-detect
-#install os-prober
+install os-prober
#install casper
#install lupin-casper
#install xinit
@@ -52,7 +54,6 @@ install schroot
#install policykit-1-gnome
#install policykit-desktop-privileges
#install baobab
-#install gparted
#install lshw-gtk
#install testdisk
#install usb-creator-gtk
diff --git a/client/browser/src/mainwindow.cpp b/client/browser/src/mainwindow.cpp
index 40a02ab5..a1f9eaf2 100644
--- a/client/browser/src/mainwindow.cpp
+++ b/client/browser/src/mainwindow.cpp
@@ -14,6 +14,8 @@
#include <QTabWidget>
#include <QWebView>
#include <QLineEdit>
+#include <QNetworkReply>
+#include <QSslError>
#include "qtermwidget.h"
@@ -97,6 +99,10 @@ MainWindow::MainWindow(QWidget *parent)
connect(m_web,SIGNAL(loadProgress(int)),this,SLOT(slotWebLoadProgress(int)));
connect(m_web,SIGNAL(urlChanged(const QUrl&)),this,
SLOT(slotUrlChanged(const QUrl&)));
+ // Ignore SSL errors.
+ connect(m_web->page()->networkAccessManager(),
+ SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError> &)), this,
+ SLOT(slotSslErrors(QNetworkReply*)));
// Process signals
connect(m_process,SIGNAL(started()),this,SLOT(slotProcessStarted()));
@@ -234,6 +240,11 @@ void MainWindow::slotUrlChanged(const QUrl &url)
m_webBar->setText(url.toString());
}
+void MainWindow::slotSslErrors(QNetworkReply* reply)
+{
+ reply->ignoreSslErrors();
+}
+
void MainWindow::slotProcessStarted()
{
print(tr("Lanzado satisfactoriamente."));
diff --git a/client/browser/src/mainwindow.h b/client/browser/src/mainwindow.h
index 005e0e5f..1bcb0c57 100644
--- a/client/browser/src/mainwindow.h
+++ b/client/browser/src/mainwindow.h
@@ -10,6 +10,8 @@
#include <QProcess>
#include <QMap>
#include <QMainWindow>
+#include <QNetworkReply>
+#include <QSslError>
class QWebView;
class QTextEdit;
@@ -38,6 +40,7 @@ class MainWindow : public QMainWindow
void slotWebLoadStarted();
void slotWebLoadFinished(bool ok);
void slotWebLoadProgress(int progress);
+ void slotSslErrors(QNetworkReply* reply);
// Funciones que manejan cada vez que el proceso hace algo
void slotProcessStarted();
diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib
index 7a858fac..a32e7720 100755
--- a/client/engine/Boot.lib
+++ b/client/engine/Boot.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase Boot
#@class Boot
#@brief Funciones para arranque y post-configuración de sistemas de archivos.
-#@version 1.0.4
+#@version 1.0.5
#@warning License: GNU GPLv3+
#*/
@@ -47,8 +47,8 @@ fi
# Detectar tipo de sistema de archivos y montarlo.
PART=$(ogDiskToDev $1 $2) || return $?
TYPE=$(ogGetFsType $1 $2) || return $?
-MNTDIR=$(ogMount $1 $2) 2>/dev/null
-[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
+# Error si no puede montar sistema de archivos.
+MNTDIR=$(ogMount $1 $2) || return $?
case "$TYPE" in
EXT[234]|REISERFS|REISER4|JFS|XFS)
@@ -56,7 +56,7 @@ case "$TYPE" in
PARAMS=$(ogLinuxBootParameters $1 $2) || return $?
read -e KERNEL INITRD APPEND <<<"$PARAMS"
# Si no hay kernel, no hay sistema operativo.
- [ -z "$KERNEL" ] && ogRaiseError $OG_ERR_NOTOS && return $?
+ [ -n "$KERNEL" ] || ogRaiseError $OG_ERR_NOTOS || return $?
# Arrancar de partición distinta a la original.
[ -e "$MNTDIR/etc" ] && APPEND=$(echo $APPEND | awk -v P="$PART " '{sub (/root=[-+=_/a-zA-Z0-9]* /,"root="P);print}')
# Configurar kernel Linux con los parámetros leídos de su GRUB.
@@ -69,12 +69,7 @@ case "$TYPE" in
FILE="$(ogGetPath $1 $2 $f 2>/dev/null)"
[ -n "$FILE" ] && LOADER="$f"
done
- [ -z "$LOADER" ] && ogRaiseError $OG_ERR_NOTOS && return $?
- # Activar la partición.
- ogSetPartitionActive $1 $2
- ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet001\services\Cliente Opengnsys\Start' '2'
- ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet002\services\Cliente Opengnsys\Start' '2'
- ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet003\services\Cliente Opengnsys\Start' '2'
+ [ -n "$LOADER" ] || ogRaiseError $OG_ERR_NOTOS || return $?
if [ "$winboot" == "kexec" ]; then
# Modo de arranque en caliente (con kexec).
cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen)
@@ -85,9 +80,12 @@ case "$TYPE" in
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
+ if [ -z "$(ogGetRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows\CurrentVersion\Run\ogcleannboot')" ]; then
+ ogAddRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows\CurrentVersion\Run\ogcleanboot'
+ ogSetRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows\CurrentVersion\Run\ogcleanboot' "cmd /c del c:\ogboot.*"
+ fi
+ # Activar la partición.
+ ogSetPartitionActive $1 $2
reboot
fi
;;
@@ -95,9 +93,6 @@ case "$TYPE" in
return $?
;;
esac
-
-# Parar Browser para evitar cuelgues.
-pkill browser
}
@@ -129,8 +124,7 @@ fi
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Montar el sistema de archivos.
-MNTDIR=$(ogMount $1 $2) 2>/dev/null
-[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
+MNTDIR=$(ogMount $1 $2) || return $?
# Obtener dato del valor de registro.
ogGetRegistryValue $MNTDIR system '\ControlSet001\Control\ComputerName\ComputerName\ComputerName'
@@ -138,10 +132,10 @@ ogGetRegistryValue $MNTDIR system '\ControlSet001\Control\ComputerName\ComputerN
#/**
-# ogLinuxBootParameters int_ndisk int_npartition
+# ogLinuxBootParameters int_ndisk int_nfilesys
#@brief Muestra los parámetros de arranque de un sistema de archivos Linux.
#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
+#@param int_nfilesys nº de orden del sistema de archivos
#@return str_kernel str_initrd str_parameters ...
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
@@ -153,6 +147,9 @@ ogGetRegistryValue $MNTDIR system '\ControlSet001\Control\ComputerName\ComputerN
#@version 0.9.2 - Soporta partición /boot independiente.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-07-20
+#@version 1.0.5 - Mejoras en tratamiento de GRUB2.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2013-05-14
#*/ ##
function ogLinuxBootParameters ()
{
@@ -161,23 +158,24 @@ local MNTDIR CONFDIR CONFFILE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
- "$FUNCNAME 1 2 ==> ..."
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
+ "$FUNCNAME 1 2 ==> /vmlinuz-3.5.0-21-generic /initrd.img-3.5.0-21-generic root=/dev/sda2 ro splash"
return
fi
# Error si no se reciben 2 parámetros.
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Detectar id. de tipo de partición y codificar al mnemonico.
-MNTDIR=$(ogMount $1 $2) 2>/dev/null
-[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
+MNTDIR=$(ogMount $1 $2) || return $?
# Fichero de configuración de GRUB.
CONFDIR=$MNTDIR # Partición de arranque /boot.
[ -d $MNTDIR/boot ] && CONFDIR=$MNTDIR/boot # Partición raíz con directorio boot.
-CONFFILE="$CONFDIR/grub/menu.lst"
+CONFFILE="$CONFDIR/grubPARTITION/boot/grub/grub.cfg"
+[ ! -e $CONFFILE ] && CONFFILE="$CONFDIR/grub/menu.lst"
[ ! -e $CONFFILE ] && CONFFILE="$CONFDIR/grub/grub.cfg"
-[ ! -e $CONFFILE ] && ogRaiseError $OG_ERR_NOTFOUND "grub.cfg" && return $?
+[ ! -e $CONFFILE ] && CONFFILE="$CONFDIR/grub2/grub.cfg"
+[ -e $CONFFILE ] || ogRaiseError $OG_ERR_NOTFOUND "grub.cfg" || return $?
# Toma del fichero de configuracion los valores del kernel, initrd
# y parámetros de arranque usando las cláusulas por defecto
@@ -185,14 +183,16 @@ CONFFILE="$CONFDIR/grub/menu.lst"
# y los formatea para que sean compatibles con \c kexec . */
# /* (comentario Doxygen)
awk 'BEGIN {cont=-1;}
- $1~/^default/ {sub(/=/," "); def=$2;}
- $1~/^set/ && $2~/^default/ {gsub(/[="]/," "); def=$3;}
- $1~/^title|^menuentry/ {cont++}
- $1~/^kernel|^linux/ {if (def==cont) {
- kern=$2;
- sub($1,"");sub($1,"");sub(/^[ \t]*/,"");app=$0} # /* (comentario Doxygen)
- }
- $1~/^initrd/ {if (def==cont) init=$2}
+ $1~/^default$/ {sub(/=/," "); def=$2;}
+ $1~/^set$/ && $2~/^default$/ {gsub(/[="]/," "); def=$3;
+ if (def ~ /saved_entry/) def=0;
+ }
+ $1~/^(title|menuentry)$/ {cont++}
+ $1~/^(kernel|linux)$/ {if (def==cont) {
+ kern=$2;
+ sub($1,"");sub($1,"");sub(/^[ \t]*/,"");app=$0} # /* (comentario Doxygen)
+ }
+ $1~/^initrd$/ {if (def==cont) init=$2}
END {if (kern!="") printf("%s %s %s", kern,init,app)}
' $CONFFILE
# */ (comentario Doxygen)
@@ -200,18 +200,22 @@ awk 'BEGIN {cont=-1;}
#/**
-# ogSetWindowsName int_ndisk int_npartition str_name
+# ogSetWindowsName int_ndisk int_nfilesys str_name
#@brief Establece el nombre del equipo en el registro de Windows.
#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
+#@param int_nfilesys nº de orden del sistema de archivos
#@param str_name nombre asignado
#@return (nada)
-#@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.
+#@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.
+#@exception OG_ERR_OUTOFLIMIT Nombre Netbios con más de 15 caracteres.
#@version 0.9 - Adaptación a OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-24
+#@version 1.0.5 - Establecer restricción de tamaño de nombre Netbios.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2013-03-20
#*/ ##
function ogSetWindowsName ()
{
@@ -220,16 +224,19 @@ local PART MNTDIR NAME
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_name" \
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys str_name" \
"$FUNCNAME 1 1 PRACTICA-PC"
return
fi
# Error si no se reciben 3 parámetros.
[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Error si el nombre supera los 15 caracteres.
+[ ${#3} -le 15 ] || ogRaiseError $OG_ERR_OUTOFLIMIT "\"${3:0:15}...\"" || return $?
# Montar el sistema de archivos.
-MNTDIR=$(ogMount $1 $2) 2>/dev/null
-[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
+MNTDIR=$(ogMount $1 $2) || return $?
+
+# Asignar nombre.
NAME="$3"
# Modificar datos de los valores de registro.
@@ -270,8 +277,9 @@ fi
[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Montar el sistema de archivos.
-MNTDIR=$(ogMount $1 $2) 2>/dev/null
-[ -z "$MNTDIR" ] && ogRaiseError OG_ERR_PARTITION "$1, $2" && return $?
+MNTDIR=$(ogMount $1 $2) || return $?
+
+# Asignar nombre.
NAME="$3"
# Modificar datos en el registro.
@@ -294,20 +302,20 @@ ogSetRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows NT\CurrentVersion\Winlog
function ogBootMbrXP ()
{
# Variables locales.
-local PART
+local DISK
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk " \
- "$FUNCNAME 1 "
+ "$FUNCNAME 1"
return
fi
-# Error si no se reciben 1 parámetros.
+# Error si no se recibe 1 parámetro.
[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-PART="$(ogDiskToDev $1)" || return $?
-ms-sys -z -f $PART
-ms-sys -m -f $PART
+DISK="$(ogDiskToDev $1)" || return $?
+ms-sys -z -f $DISK
+ms-sys -m -f $DISK
}
@@ -326,7 +334,7 @@ ms-sys -m -f $PART
function ogBootMbrGeneric ()
{
# Variables locales.
-local PART
+local DISK
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -334,12 +342,12 @@ if [ "$*" == "help" ]; then
"$FUNCNAME 1 "
return
fi
-# Error si no se reciben 1 parámetros.
+# Error si no se recibe 1 parámetro.
[ $# == 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
+DISK="$(ogDiskToDev $1)" || return $?
+ms-sys -z -f $DISK
+ms-sys -s -f $DISK
}
@@ -377,7 +385,7 @@ fi
#TODO, solo si es ntfs o fat
PARTYPE=$(ogGetPartitionId $1 $2)
case "$PARTYPE" in
- 1|4|6|7|b|c|e|f)
+ 1|4|6|7|b|c|e|f|17|700)
;;
*)
return $(ogRaiseError $OG_ERR_PARTITION; echo $?)
@@ -418,17 +426,15 @@ rm -f $FILE
#@version 1.0.1 - Adapatacion para OpenGnsys.
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date 2011-05-20
+#@version 1.0.5 - Soporte para Windows 8 y Windows 8.1.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2014-01-28
#*/ ##
-
function ogWindowsBootParameters ()
{
# Variables locales.
local PART DISK FILE VERSION WINVER MOUNT
-#Preparando variables adaptadas a sintaxis windows.
-let DISK=$1-1
-PART=$2
-FILE=/tmp/temp$$
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -442,9 +448,20 @@ fi
ogDiskToDev $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?)
+#Preparando variables adaptadas a sintaxis windows.
+let DISK=$1-1
+PART=$2
+FILE=/tmp/temp$$
+
VERSION=$(ogGetOsVersion $1 $2)
-if echo "$VERSION" | grep "Windows 7"
+if echo "$VERSION" | grep "Windows 8.1"
+then
+ WINVER="Windows 8.1"
+elif echo "$VERSION" | grep "Windows 8"
+then
+ WINVER="Windows 8"
+elif echo "$VERSION" | grep "Windows 7"
then
WINVER="Windows 7"
elif echo "$VERSION" | grep "Windows Seven"
@@ -606,71 +623,346 @@ ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
}
-# ogGrubInstallPartition int_disk int_partition
-#@brief Instala/actualiza el gestro grub en el "boot sector" de la partición indicada
-#@param int_disk
-#@param indt_part
+# ogGrubInstallMbr int_disk_GRUBCFG int_partition_GRUBCFG #@param bolean_Check_Os_installed_and_Configure_2ndStage true | false[default]
+#@brief Instala y actualiza el gestor grub el el MBR del disco duro donde se encuentra el fichero grub.cfg. Admite sistemas Windows.
+#@param int_disk_SecondStage
+#@param int_part_SecondStage
+#@param bolean_Check_Os_installed_and_Configure_2ndStage true | false[default]
#@return
#@exception OG_ERR_FORMAT Formato incorrecto.
#@version 1.0.2 - Primeras pruebas.
#@author Antonio J. Doblas Viso. Universidad de Malaga.
#@date 2011-10-29
+#@version 1.0.3 - Soporte para linux de 32 y 64 bits
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2012-03-13
+#@version 1.0.3 - Ficheros de configuracion independientes segun ubicación de la primera etapa
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2012-03-13
#*/ ##
-function ogGrubInstallPartition {
+function ogGrubInstallMbr {
# Variables locales.
-local PART DISK DIRCONF SCHROOTDEVICE
+local PART DISK VERSION FIRSTAGE SECONSTAGE CHECKOS KERNELPARAM BACKUPNAME
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition" \
- "$FUNCNAME 1 1 "
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndiskSecondStage int_partitionSecondStage bolean_Configure_2ndStage \"param param \" " \
+ "$FUNCNAME 1 1 FALSE " \
+ "$FUNCNAME 1 1 TRUE \"nomodeset irqpoll pci=noacpi quiet splash \" "
return
-fi
+fi
# Error si no se reciben 2 parámetros.
-[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+[ $# -ge 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+
+
+DISK=$1; PART=$2;
+CHECKOS=${3:-"FALSE"}
+KERNELPARAM=$4
+BACKUPNAME=".backup.og"
+
+#Error si no es linux.
+#TODO: comprobar si se puede utilizar la particion windows como contenedor de grub.
+#VERSION=$(ogGetOsVersion $DISK $PART)
+#echo $VERSION | grep "Linux" || return $(ogRaiseError $OG_ERR_NOTOS "no es linux"; echo $?)
+
+#Localizar primera etapa del grub
+FIRSTSTAGE=$(ogDiskToDev $DISK)
+
+#localizar disco segunda etapa del grub
+SECONDSTAGE=$(ogMount $DISK $PART)
-DISK=$1; PART=$2; DIRCONF="/etc/schroot"
+# prepara el directorio principal de la segunda etapa
+[ -d ${SECONDSTAGE}/boot/grub/ ] || mkdir -p ${SECONDSTAGE}/boot/grub/
+#Localizar directorio segunda etapa del grub
+PREFIXSECONDSTAGE="/boot/grubMBR"
+# Si Reconfigurar segunda etapa (grub.cfg) == FALSE
+if [ -f ${SECONDSTAGE}/boot/grub/grub.cfg -o -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ]
+then
+ if [ "$CHECKOS" == "false" -o "$CHECKOS" == "FALSE" ]
+ then
+ # Si no se reconfigura se utiliza el grub.cfg orginal
+ [ -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ] && mv ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ${SECONDSTAGE}/boot/grub/grub.cfg
+ # Si no se reconfigure se borra los ficheros previos de configuración específicos de opengnsys.
+ [ -d ${SECONDSTAGE}${PREFIXSECONDSTAGE} ] && rm -fr ${SECONDSTAGE}${PREFIXSECONDSTAGE}
+ # Reactivamos el grub con el grub.cfg original.
+ grub-install --force --root-directory=${SECONDSTAGE} $FIRSTSTAGE
+ return $?
+ fi
+fi
+
+# SI Reconfigurar segunda etapa (grub.cfg) == TRUE
+#Configur la sintaxis grub para evitar menus de "recovery" en el OGLive
+echo "GRUB_DISABLE_RECOVERY=\"true\"" >> /etc/default/grub
+echo "GRUB_DISABLE_LINUX_UUID=\"true\"" >> /etc/default/grub
+
+#Evitar detectar modo recovery - mover grub.cfg original a grub.cfg.backup
+[ -f ${SECONDSTAGE}/boot/grub/grub.cfg ] && mv ${SECONDSTAGE}/boot/grub/grub.cfg ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME
+
+#Preparar configuración segunda etapa: crear ubicacion
+mkdir -p ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/
+#Preparar configuración segunda etapa: crear cabecera del fichero
+/etc/grub.d/00_header > ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg
+#Preparar configuración segunda etapa: crear entrada del sistema operativo
+grubSyntax "$KERNELPARAM" >> ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg
+
+#Instalar el grub
+grub-install --force --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE
+}
+
+
+
+# ogGrubInstallPartition int_disk_SECONDSTAGE int_partition_SECONDSTAGE bolean_Check_Os_installed_and_Configure_2ndStage
+#@brief Instala y actualiza el gestor grub en el bootsector de la particion indicada
+#@param int_disk_SecondStage
+#@param int_part_SecondStage
+#@param bolean_Check_Os_installed_and_Configure_2ndStage true | false[default]
+#@param str "kernel param "
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 1.0.2 - Primeras pruebas.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011-10-29
+#@version 1.0.3 - Soporte para linux de 32 y 64 bits
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2012-03-13
+#@version 1.0.3 - Ficheros de configuracion independientes segun ubicación de la priemra etapa
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2012-03-13
+#*/ ##
+
+function ogGrubInstallPartition {
+
+# Variables locales.
+local PART DISK VERSION FIRSTAGE SECONSTAGE CHECKOS KERNELPARAM BACKUPNAME
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndiskSecondStage int_partitionSecondStage bolean_Configure_2ndStage \"param param \" " \
+ "$FUNCNAME 1 1 FALSE " \
+ "$FUNCNAME 1 1 TRUE \"nomodeset irqpoll pci=noacpi quiet splash \" "
+ return
+fi
+
+# Error si no se reciben 2 parámetros.
+[ $# -ge 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+
+DISK=$1; PART=$2;
+CHECKOS=${3:-"FALSE"}
+KERNELPARAM=$4
+BACKUPNAME=".backup.og"
+
+#error si no es linux.
VERSION=$(ogGetOsVersion $DISK $PART)
echo $VERSION | grep "Linux" || return $(ogRaiseError $OG_ERR_NOTOS "no es linux"; echo $?)
-SCHROOTLOCATION=$(ogMount $DISK $PART)
-SCHROOTDEVICE=$(ogDiskToDev $DISK $PART)
+#Localizar primera etapa del grub
+FIRSTSTAGE=$(ogDiskToDev $DISK $PART)
-rm ${DIRCONF}/schroot.conf
+#localizar disco segunda etapa del grub
+SECONDSTAGE=$(ogMount $DISK $PART)
-cat >> ${DIRCONF}/schroot.conf << EOF
-[linux]
-description=$VERSION
-type=plain
-directory=$SCHROOTLOCATION
-EOF
+#Localizar directorio segunda etapa del grub
+PREFIXSECONDSTAGE="/boot/grubPARTITION"
-cat >> $SCHROOTLOCATION/root/installgrub.sh <<EOF
-#!/bin/bash
-grub-install --recheck --force $SCHROOTDEVICE
-update-grub2
-EOF
+# Si Reconfigurar segunda etapa (grub.cfg) == FALSE
+if [ -f ${SECONDSTAGE}/boot/grub/grub.cfg -o -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ]
+then
+ if [ "$CHECKOS" == "false" -o "$CHECKOS" == "FALSE" ]
+ then
+ # Si no se reconfigura se utiliza el grub.cfg orginal
+ [ -f ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ] && mv ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME ${SECONDSTAGE}/boot/grub/grub.cfg
+ # Si no se reconfigure se borra los ficheros previos de configuración específicos de opengnsys.
+ [ -d ${SECONDSTAGE}${PREFIXSECONDSTAGE} ] && rm -fr ${SECONDSTAGE}${PREFIXSECONDSTAGE}
+ # Reactivamos el grub con el grub.cfg original.
+ grub-install --force --root-directory=${SECONDSTAGE} $FIRSTSTAGE
+ return $?
+ fi
+fi
+
+# SI Reconfigurar segunda etapa (grub.cfg) == TRUE
+#Configur la sintaxis grub para evitar menus de "recovery" en el OGLive
+echo "GRUB_DISABLE_RECOVERY=\"true\"" >> /etc/default/grub
+echo "GRUB_DISABLE_LINUX_UUID=\"true\"" >> /etc/default/grub
+
+#Evitar detectar modo recovery - mover grub.cfg original a grub.cfg.backup.og
+[ -f ${SECONDSTAGE}/boot/grub/grub.cfg ] && mv ${SECONDSTAGE}/boot/grub/grub.cfg ${SECONDSTAGE}/boot/grub/grub.cfg$BACKUPNAME
+
+#Preparar configuración segunda etapa: crear ubicacion
+mkdir -p ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/
+#Preparar configuración segunda etapa: crear cabecera del fichero
+/etc/grub.d/00_header > ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg
+#Preparar configuración segunda etapa: crear entrada del sistema operativo
+grubSyntax $DISK $PART "$KERNELPARAM" >> ${SECONDSTAGE}${PREFIXSECONDSTAGE}/boot/grub/grub.cfg
+
+#Instalar el grub
+grub-install --force --root-directory=${SECONDSTAGE}${PREFIXSECONDSTAGE} $FIRSTSTAGE
+}
+
+###
+#En pruebas
+##
+#/**
+# ogConfigureFstab int_ndisk int_nfilesys
+#@brief Establece el nombre del equipo en los ficheros hostname y hosts.
+#@param int_ndisk nº de orden del disco
+#@param int_nfilesys nº de orden del sistema de archivos
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND No se encuentra el fichero fstab a procesar.
+#@warning Puede haber un error si hay más de 1 partición swap.
+#@version 1.0.5 - Primera versión para OpenGnSys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2013-03-21
+#*/ ##
+function ogConfigureFstab {
+# Variables locales.
+local FSTAB DEFROOT PARTROOT DEFSWAP PARTSWAP
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
+ "$FUNCNAME 1 1"
+ return
+fi
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Error si no se encuentra un fichero etc/fstab en el sistema de archivos.
+FSTAB=$(ogGetPath $1 $2 /etc/fstab) 2>/dev/null
+[ -n "$FSTAB" ] || ogRaiseError $OG_ERR_NOTFOUND "$1,$2,/etc/fstab" || return $?
+
+# Hacer copia de seguridad del fichero fstab original.
+cp -a ${FSTAB} ${FSTAB}.backup
+# Dispositivo del raíz en fichero fstab: 1er campo (si no tiene "#") con 2º campo = "/".
+DEFROOT=$(awk '$1!~/#/ && $2=="/" {print $1}' ${FSTAB})
+PARTROOT=$(ogDiskToDev $1 $2)
+# Configuración de swap (solo 1ª partición detectada).
+PARTSWAP=$(blkid -t TYPE=swap | awk -F: 'NR==1 {print $1}')
+if [ -n "$PARTSWAP" ]
+then
+ # Dispositivo de swap en fichero fstab: 1er campo (si no tiene "#") con 3er campo = "swap".
+ DEFSWAP=$(awk '$1!~/#/ && $3=="swap" {print $1}' ${FSTAB})
+ if [ -n "$DEFSWAP" ]
+ then
+ echo "Hay definicion de swap en el fstab $DEFSWAP -> modificamos fichero con nuevo valor $DEFSWAP->$PARTSWAP" # Mensaje temporal.
+ sed "s|$DEFSWAP|$PARTSWAP|g ; s|$DEFROOT|$PARTROOT|g" ${FSTAB}.backup > ${FSTAB}
+ else
+ echo "No hay definicion de swap y si hay partición swap -> moficamos fichero" # Mensaje temporal.
+ sed "s|$DEFROOT|$PARTROOT|g" ${FSTAB}.backup > ${FSTAB}
+ echo "$PARTSWAP none swap sw 0 0" >> ${FSTAB}
+ fi
+else
+ echo "No hay partición swap -> configuramos fstba" # Mensaje temporal.
+ sed "s|$DEFROOT|$PARTROOT|g" ${FSTAB}.backup > ${FSTAB}
+fi
+}
+
+
+###
+#En pruebas
+##
+#/**
+# ogSetLinuxName int_ndisk int_nfilesys [str_name]
+#@brief Establece el nombre del equipo en los ficheros hostname y hosts.
+#@param int_ndisk nº de orden del disco
+#@param int_nfilesys nº de orden del sistema de archivos
+#@param str_name nombre asignado (opcional)
+#@return (nada)
+#@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 Si no se indica nombre, se asigna un valor por defecto.
+#@version 1.0.5 - Primera versión para OpenGnSys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2013-03-21
+#*/ ##
+function ogSetLinuxName ()
+{
+# Variables locales.
+local MNTDIR ETC NAME
-chmod 777 $SCHROOTLOCATION/root/installgrub.sh
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys [str_name]" \
+ "$FUNCNAME 1 1" "$FUNCNAME 1 1 practica-pc"
+ return
+fi
+# Error si no se reciben 2 o 3 parámetros.
+case $# in
+ 2) # Asignar nombre automático (por defecto, "pc").
+ NAME="$(ogGetHostname)"
+ NAME=${NAME:-"pc"} ;;
+ 3) # Asignar nombre del 3er parámetro.
+ NAME="$3" ;;
+ *) # Formato de ejecución incorrecto.
+ ogRaiseError $OG_ERR_FORMAT
+ return $?
+esac
+
+# Montar el sistema de archivos.
+MNTDIR=$(ogMount $1 $2) || return $?
+
+ETC=$(ogGetPath $1 $2 /etc)
+
+if [ -d "$ETC" ]; then
+ #cambio de nombre en hostname
+ echo "$NAME" > $ETC/hostname
+ #Opcion A para cambio de nombre en hosts
+ #sed "/127.0.1.1/ c\127.0.1.1 \t $HOSTNAME" $ETC/hosts > /tmp/hosts && cp /tmp/hosts $ETC/ && rm /tmp/hosts
+ #Opcion B componer fichero de hosts
+ cat > $ETC/hosts <<EOF
+127.0.0.1 localhost
+127.0.1.1 $NAME
+
+# The following lines are desirable for IPv6 capable hosts
+::1 ip6-localhost ip6-loopback
+fe00::0 ip6-localnet
+ff00::0 ip6-mcastprefix
+ff02::1 ip6-allnodes
+ff02::2 ip6-allrouters
+EOF
+fi
+}
-mount --bind /dev $SCHROOTLOCATION/dev
-mount --bind /dev/pts $SCHROOTLOCATION/dev/pts
-mount --bind /proc $SCHROOTLOCATION/proc
-mount --bind /sys $SCHROOTLOCATION/sys
+###
+#En pruebas
+##
+#/**
+# ogCleanLinuxDevices int_ndisk int_nfilesys
+#@brief Limpia los dispositivos del equipo de referencia. Interfaz de red ...
+#@param int_ndisk nº de orden del disco
+#@param int_nfilesys nº de orden del sistema de archivos
+#@return (nada)
+#@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.
+#@version 1.0.5 - Primera versión para OpenGnSys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2013-03-21
+#*/ ##
+function ogCleanLinuxDevices ()
+{
+# Variables locales.
+local MNTDIR
-schroot -c linux -- /root/installgrub.sh
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
+ "$FUNCNAME 1 1"
+ return
+fi
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-rm $SCHROOTLOCATION/root/installgrub.sh
+# Montar el sistema de archivos.
+MNTDIR=$(ogMount $1 $2) || return $?
-umount $SCHROOTLOCATION/dev/pts
-umount $SCHROOTLOCATION/dev
-umount $SCHROOTLOCATION/proc
-umount $SCHROOTLOCATION/sys
+# Eliminar fichero de configuración de udev para dispositivos fijos de red.
+rm -f ${MNTDIR}/etc/udev/rules.d/70-persistent-net.rules
}
diff --git a/client/engine/Cache.lib b/client/engine/Cache.lib
index 118bc65b..ce1fc38b 100755
--- a/client/engine/Cache.lib
+++ b/client/engine/Cache.lib
@@ -4,14 +4,15 @@
#@brief Librería o clase Cache
#@class Cache
#@brief Funciones para gestión de la caché local de disco.
-#@version 1.0.4
+#@version 1.0.5
#@warning License: GNU GPLv3+
#*/
#/**
-# ogCreateCache int_partsize
+# ogCreateCache [int_ndisk] int_partsize
#@brief Define la caché local en la partición 4 del disco 1
+#@param int_ndisk numero de disco donde crear la cache, si no se indica es el 1 por defecto
#@param int_partsize tamaño de la partición (en KB)
#@return (nada, por determinar)
#@exception OG_ERR_FORMAT formato incorrecto.
@@ -27,37 +28,54 @@
#@version 1.0.4 - Soporte para discos GPT.
#@author Universidad de Huelva
#@date 2012/03/13
+#@version 1.0.5 - Posibilidad de crear la cache en cualquier disco duro
+#@author Universidad de Huelva
+#@date 2012/09/18
#*/ ##
function ogCreateCache ()
{
# Variables locales.
-local FINDCACHE NDSK PART DISK START END ENDPREVPART SIZE MINSIZE MAXSIZE PTTYPE ID
+local FINDCACHE NDSK SIZECACHE PART DISK START END ENDPREVPART SIZE MINSIZE MAXSIZE PTTYPE ID
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_partsize" "$FUNCNAME 10000000"
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partsize" "$FUNCNAME 1 10000000"
return
fi
-# Error si no se recibe 1 parámetro que sea un número entero.
-[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-[[ $1 =~ ([0-9]*) ]] || ogRaiseError $OG_ERR_FORMAT "$1" || return $?
+# Si se recibe un parametro, sera el tamano de la cache
+case $# in
+ 1) # Error, si no es un entero positivo
+ [[ $1 =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$1" || return $?
+ NDSK=1
+ SIZECACHE=$1
+ ;;
+ 2) # Error, si no son enteros positivos
+ [[ $1 =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$1" || return $?
+ [[ $2 =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$2" || return $?
+ NDSK=$1
+ SIZECACHE=$2
+ ;;
+ *) ogRaiseError $OG_ERR_FORMAT
+ return $?
+ ;;
+esac
+
+# De momento la cache sigue siendo siempre la cuarta particion
+PART=4
-FINDCACHE="1 4" # Partición de caché (ndisco npart).
-NDSK=${FINDCACHE% *}
-PART=${FINDCACHE#* }
DISK=$(ogDiskToDev $NDSK) || return $?
END=$[$(ogGetLastSector $NDSK 2>/dev/null)] # Sector final del disco.
-SIZE=$[$1*2] # Tamaño en sectores de 512 B.
+SIZE=$[$SIZECACHE*2] # Tamaño en sectores de 512 B.
START=$[END-SIZE+1]
ENDPREVPART=$[$(ogGetLastSector $NDSK $[PART-1] 2>/dev/null)]
# Error si tamaño no está entre límites permitidos o si se solapa con la partición anterior.
-MINSIZE=25000 # Error de formateo si tamaño < 50 MB.
-MAXSIZE=$[END/2] # No permitir tamaño > mitad del disco.
+MINSIZE=25000 # Error de formateo si tamaño < 50 MB.
+MAXSIZE=$END # Para restringir tamaño > mitad del disco: MAXSIZE=$[END/2]
if [ $SIZE -lt $MINSIZE -o $SIZE -gt $MAXSIZE -o $START -le $ENDPREVPART ]; then
ogRaiseError $OG_ERR_FORMAT "$1" || return $?
fi
# Desmontar todos los sistemas de archivos del disco.
-ogUnmountAll 1 2>/dev/null
+ogUnmountAll $NDSK 2>/dev/null
# Definir particiones y notificar al kernel.
# En el caso de ser disco GPT, de momento se borra la particion y se vuelve a crear,
# por lo que se pierden los datos.
@@ -71,7 +89,7 @@ case "$(ogGetPartitionTableType $NDSK)" in
# Si la tabla de particiones no es valida, volver a generarla.
[ ! $(sgdisk -p $DISK 2>&1 >/dev/null) ] || echo -e "2\nw\nY\n" | gdisk $DISK
# Si existe la cache se borra previamente
- [ -n $(ogFindCache) && ogDeleteCache
+ [ -n "$(ogFindCache)" ] && ogDeleteCache
# Capturamos el codigo de particion GPT para cache
ID=$(ogTypeToId CACHE GPT)
sgdisk $DISK -n$PART:$START:$END -c$PART:CACHE -t$PART:$ID 2>/dev/null && partprobe
@@ -148,23 +166,35 @@ rm -f /dev/disk/by-label/CACHE
#@version 0.91 - Adaptacion a la cache local de OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010/03/16
+#@version 1.0.5 - Obtener caché en discos GPT.
+#@author Alberto García, Universidad de Málaga y Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2014/05/28
#*/ ##
function ogFindCache ()
{
# Variables locales
-local PART
+local DISK PART
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 1 4"
return
fi
-# Obtener el sistema de archivos etiquetado con "CACHE".
-PART=$(realpath /dev/disk/by-label/CACHE 2>/dev/null)
-# Si no, obtener la 1ª partición marcada como de tipo caché.
+# Obtener el dispositivo del sistema de archivos etiquetado como "CACHE".
+PART=$(blkid -L "CACHE")
+
+# Si no se detecta, obtener particiones marcadas de tipo caché en discos MSDOS.
PART=${PART:-$(sfdisk -l 2>/dev/null | awk '$6~/ca|a7/ {print $1}')}
-PART=${PART%% *}
-ogDevToDisk $PART 2>/dev/null
+# Por último revisar todos los discos GPT y obtener las particiones etiquetadas como caché.
+if [ -z "$PART" ]; then
+ for DISK in $(ogDiskToDev); do
+ # Nota: se añade espacio separador solo si existe valor previo.
+ PART="${PART:+"$PART "}$(sgdisk -p $DISK 2>/dev/null | awk -v d=$DISK '$7~/CACHE/ {printf "%s%s",d,$1;}')"
+ done
+fi
+
+# Devolver número de disco y número de partición de la 1ª partición encontrada.
+ogDevToDisk ${PART%% *} 2>/dev/null
}
@@ -192,16 +222,17 @@ if [ "$*" == "help" ]; then
return
fi
-# Error si no hay definida partición de caché.
-DEV=$(ogFindCache) || ogRaiseError $OG_ERR_PARTITION "$MSG_NOCACHE" || return $?
-DEV=$(ogDiskToDev $DEV) || return $?
+# Error si no hay definida partición de caché.
+DEV=$(ogFindCache) || ogRaiseError $OG_ERR_PARTITION "$MSG_NOCACHE" || return $?
+DEV=$(ogDiskToDev $DEV) || return $?
-# Formatear sistema de ficheros.
-ogUnmountCache 2>/dev/null
-mkfs.ext4 -q -F $DEV -L "CACHE" -O extent,large_file 2>/dev/null || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
-# Crear estructura básica.
-MNTDIR=$(ogMountCache)
-mkdir -p $MNTDIR/$OGIMG
+# Formatear sistema de ficheros.
+ogUnmountCache 2>/dev/null
+mkfs.ext4 -q -F $DEV -L "CACHE" -O extent,large_file 2>/dev/null || ogRaiseError $OG_ERR_PARTITION "CACHE" || return $?
+
+# Crear estructura básica.
+MNTDIR=$(ogMountCache)
+mkdir -p $MNTDIR/$OGIMG
}
@@ -246,19 +277,25 @@ ogGetPartitionSize $PART
#@version 0.91 - Definicion de cache local.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010/03/09
+#@version 1.0.5 - Uso de ogFindCache para detectar disco y particion
+#@author Universidad de Huelva
+#@date 2012/09/18
#*/ ##
function ogGetCacheSpace ()
{
-
# Variables locales.
-local DISK SECTORS CYLS ENDPART3
+local NDISK DISK NPART SECTORS CYLS ENDPART3
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 23165386"
return
fi
+# Parche UHU para usar ogFindCache en lugar de 1
+# Error si no se encuentra partición de caché.
+read NDISK NPART <<<"$(ogFindCache)"
+[ -n "$NDISK" -a -n "$NPART" ] || ogRaiseError $OG_ERR_PARTITION "$MSG_NOCACHE" || return $?
+DISK=$(ogDiskToDev $NDISK) || return $?
-DISK=$(ogDiskToDev 1) || return $?
SECTORS=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3*2}}' /proc/partitions)
CYLS=$(sfdisk -g $DISK | cut -f2 -d" ")
SECTORS=$[SECTORS/CYLS*CYLS-1]
diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib
index f9031d55..88fb132b 100755
--- a/client/engine/Disk.lib
+++ b/client/engine/Disk.lib
@@ -4,11 +4,18 @@
#@brief Librería o clase Disk
#@class Disk
#@brief Funciones para gestión de discos y particiones.
-#@version 1.0.4
+#@version 1.0.5
#@warning License: GNU GPLv3+
#*/
+# Función ficticia para lanzar parted con timeout, evitando cuelgues del programa.
+function parted ()
+{
+timeout -k 5s -s KILL 3s $(which parted) "$@"
+}
+
+
#/**
# ogCreatePartitions int_ndisk str_parttype:int_partsize ...
#@brief Define el conjunto de particiones de un disco.
@@ -24,7 +31,7 @@
#@attention No puede definirse partición de cache y no se modifica si existe.
#@note Requisitos: sfdisk, parted, partprobe, awk
#@todo Definir atributos (arranque, oculta) y tamaños en MB, GB, etc.
-#@version 0.9 - Primera versión para OpenGNSys
+#@version 0.9 - Primera versión para OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009/09/09
#@version 0.9.1 - Corrección del redondeo del tamaño del disco.
@@ -44,7 +51,7 @@ if [ "$*" == "help" ]; then
"$FUNCNAME 1 NTFS:10000000 EXT3:5000000 LINUX-SWAP:1000000"
return
fi
-# Error si no se reciben menos de 2 parámetros.
+# Error si no se reciben al menos 2 parámetros.
[ $# -ge 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Nº total de sectores, para evitar desbordamiento (evitar redondeo).
@@ -94,13 +101,13 @@ while [ $# -gt 0 ]; do
SIZE=$[SIZE*2]
# Comprobar si la partición es extendida.
if [ $ID = 5 ]; then
- [ $PART -gt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $?
+ [ $PART -le 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
EXTSTART=$START
EXTSIZE=$SIZE
fi
# Incluir particiones lógicas dentro de la partición extendida.
if [ $PART = 5 ]; then
- [ -z "$EXTSTART" ] && ogRaiseError $OG_ERR_FORMAT && return $?
+ [ -n "$EXTSTART" ] || ogRaiseError $OG_ERR_FORMAT || return $?
START=$EXTSTART
SECTORS=$[EXTSTART+EXTSIZE]
fi
@@ -247,7 +254,7 @@ sgdisk $DELOPTIONS $OPTIONS $DISK 2>/dev/null && partprobe $DISK
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@note tabletype: { MSDOS, GPT }
#@note Requisitos: sfdisk, sgdisk
-#@version 1.0.4 - Primera versión compatible con OpenGNSys.
+#@version 1.0.4 - Primera versión compatible con OpenGnSys.
#@author Universidad de Huelva
#@date 2012/03/06
#*/ ##
@@ -355,7 +362,7 @@ esac
#@version 0.1 - Integracion para Opengnsys - EAC: DiskEAC() en ATA.lib
#@author Antonio J. Doblas Viso, Universidad de Malaga
#@date 2008/10/27
-#@version 0.9 - Primera version para OpenGNSys
+#@version 0.9 - Primera version para OpenGnSys
#@author Ramon Gomez, ETSII Universidad Sevilla
#@date 2009/07/20
#*/ ##
@@ -402,9 +409,12 @@ return $OG_ERR_NOTFOUND
#@Date 2008/06/19
#@author Antonio J. Doblas Viso, Universidad de Malaga
#@date 2008/10/27
-#@version 0.9 - Primera version para OpenGNSys
+#@version 0.9 - Primera version para OpenGnSys
#@author Ramon Gomez, ETSII Universidad Sevilla
#@date 2009-07-20
+#@version 1.0.5 - Comprobación correcta de parámetros para soportar valores > 9.
+#@author Ramon Gomez, ETSII Universidad Sevilla
+#@date 2013-05-07
#*/ ##
function ogDiskToDev ()
{
@@ -430,15 +440,15 @@ case $# in
0) # Muestra todos los discos, separados por espacios.
echo $ALLDISKS
;;
- 1) # Error si el parámetro no es un digito.
- [ -z "${1/[1-9]/}" ] || ogRaiseError $OG_ERR_FORMAT || return $?
+ 1) # Error si el parámetro no es un número positivo.
+ [[ "$1" =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$1" || return $?
DISK=$(echo "$ALLDISKS" | awk -v n=$1 '{print $n}')
# Error si el fichero no existe.
[ -e "$DISK" ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $?
echo "$DISK"
;;
- 2) # Error si los 2 parámetros no son digitos.
- [ -z "${1/[1-9]/}" -a -z "${2/[1-9]/}" ] || ogRaiseError $OG_ERR_FORMAT|| return $?
+ 2) # Error si los 2 parámetros no son números positivos.
+ [[ "$1" =~ ^[1-9][0-9]*$ ]] && [[ "$2" =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$1 $2" || return $?
DISK=$(echo "$ALLDISKS" | awk -v n=$1 '{print $n}')
[ -e "$DISK" ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $?
PART="$DISK$2"
@@ -464,118 +474,6 @@ esac
#/**
-# ogFsToId str_fstype
-#@see ogTypeToId
-#*/ ##
-function ogFsToId ()
-{
-ogTypeToId "$@"
-}
-
-
-#/**
-# ogTypeToId str_parttype str_tabletype
-#@brief Devuelve el identificador correspondiente a un tipo de partición.
-#@param str_parttype mnemónico de tipo de partición.
-#@param str_tabletype mnemónico de tipo de tabla de particiones (MSDOS por defecto).
-#@return int_idpart identificador de tipo de partición.
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@note tabletype = { MSDOS, GPT }
-#@version 0.1 - Integracion para Opengnsys - EAC: TypeFS () en ATA.lib
-#@author Antonio J. Doblas Viso, Universidad de Malaga
-#@date 2008/10/27
-#@version 0.9 - Primera version para OpenGNSys
-#@author Ramon Gomez, ETSII Universidad Sevilla
-#@date 2009-12-14
-#@version 1.0.4 - Soportar discos GPT (sustituye a ogFsToId).
-#@author Universidad de Huelva
-#@date 2012/03/30
-#*/ ##
-function ogTypeToId ()
-{
-# Variables locales
-local PTTYPE ID
-
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME str_parttype [str_tabletype]" \
- "$FUNCNAME LINUX => 83" \
- "$FUNCNAME LINUX MSDOS => 83"
- return
-fi
-# Error si no se reciben 2 parámetro.
-[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-
-# Asociar id. de partición para su mnemónico.
-PTTYPE=${2:-"MSDOS"}
-case "$PTTYPE" in
- GPT) # Se incluyen mnemónicos compatibles con tablas MSDOS.
- case "$1" in
- EMPTY) ID=0 ;;
- WINDOWS|NTFS|EXFAT|FAT32|FAT16|FAT12|HNTFS|HFAT32|HFAT16|HFAT12)
- ID=0700 ;;
- WIN-RESERV) ID=0C01 ;;
- CHROMEOS-KRN) ID=7F00 ;;
- CHROMEOS) ID=7F01 ;;
- CHROMEOS-RESERV) ID=7F02 ;;
- LINUX-SWAP) ID=8200 ;;
- LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
- ID=8300 ;;
- LINUX-RESERV) ID=8301 ;;
- LINUX-LVM) ID=8E00 ;;
- FREEBSD-DISK) ID=A500 ;;
- FREEBSD-BOOT) ID=A501 ;;
- FREEBSD-SWAP) ID=A502 ;;
- FREEBSD) ID=A503 ;;
- HFS|HFS+) ID=AF00 ;;
- HFS-RAID) ID=AF01 ;;
- SOLARIS-BOOT) ID=BE00 ;;
- SOLARIS) ID=BF00 ;;
- SOLARIS-SWAP) ID=BF02 ;;
- SOLARIS-DISK) ID=BF03 ;;
- CACHE) ID=CA00;;
- EFI) ID=EF00 ;;
- LINUX-RAID) ID=FD00 ;;
- *) ID="" ;;
- esac
- ;;
- MSDOS)
- case "$1" in
- EMPTY) ID=0 ;;
- FAT12) ID=1 ;;
- EXTENDED) ID=5 ;;
- FAT16) ID=6 ;;
- WINDOWS|NTFS|EXFAT)
- ID=7 ;;
- FAT32) ID=b ;;
- HFAT12) ID=11 ;;
- HFAT16) ID=16 ;;
- HNTFS) ID=17 ;;
- HFAT32) ID=1b ;;
- LINUX-SWAP) ID=82 ;;
- LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
- ID=83 ;;
- LINUX-LVM) ID=8e ;;
- FREEBSD) ID=a5 ;;
- OPENBSD) ID=a6 ;;
- HFS|HFS+) ID=af ;;
- SOLARIS-BOOT) ID=be ;;
- SOLARIS) ID=bf ;;
- CACHE) ID=ca ;;
- DATA) ID=da ;;
- GPT) ID=ee ;;
- EFI) ID=ef ;;
- VMFS) ID=fb ;;
- LINUX-RAID) ID=fd ;;
- *) ID="" ;;
- esac
- ;;
-esac
-echo $ID
-}
-
-
-#/**
# ogGetDiskSize int_ndisk
#@brief Muestra el tamaño en KB de un disco.
#@param int_ndisk nº de orden del disco
@@ -702,7 +600,7 @@ echo $LASTSECTOR
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@note Requisitos: parted
#@todo Queda definir formato para atributos (arranque, oculta, ...).
-#@version 0.9 - Primera version compatible con OpenGNSys.
+#@version 0.9 - Primera version compatible con OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009/09/17
#*/ ##
@@ -780,7 +678,7 @@ echo $ID
#@version 0.1 - Integracion para Opengnsys - EAC: SizePartition () en ATA.lib
#@author Antonio J. Doblas Viso, Universidad de Malaga
#@date 2008/10/27
-#@version 0.9 - Primera version para OpenGNSys
+#@version 0.9 - Primera version para OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009/07/24
#*/ ##
@@ -890,7 +788,7 @@ parted -sm $DISK print | awk -F: -v D=$DISK '{ if($1 == D) print toupper($6)}'
#@param int_ndisk nº de orden del disco
#@param int_npartition nº de orden de la partición
#@return Mnemonico
-#@note Mnemonico: { EXT2, EXT3, EXT4, REISERFS, XFS, JFS, LINUX-SWAP, LINUX-LVM, LINUX-RAID, SOLARIS, FAT16, HFAT16, FAT32, HFAT32, NTFS, HNTFS, WIN-DYNAMIC, CACHE, EMPTY, EXTENDED, UNKNOWN }
+#@note Mnemonico: valor devuelto por ogIdToType.
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@version 0.1 - Integracion para Opengnsys - EAC: TypeFS() en ATA.lib
@@ -902,6 +800,9 @@ parted -sm $DISK print | awk -F: -v D=$DISK '{ if($1 == D) print toupper($6)}'
#@version 1.0.3 - Código trasladado de antigua función ogGetFsType.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2011-12-01
+#@version 1.0.5 - Usar función ogIdToType para hacer la conversión id. a tipo.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2013-09-19
#*/ ##
function ogGetPartitionType ()
{
@@ -919,50 +820,7 @@ fi
# Detectar id. de tipo de partición y codificar al mnemonico.
ID=$(ogGetPartitionId "$1" "$2") || return $?
-case "$ID" in
- 0) TYPE="EMPTY" ;;
- 1) TYPE="FAT12" ;;
- 5|f) TYPE="EXTENDED" ;;
- 6|e) TYPE="FAT16" ;;
- 7) TYPE="NTFS" ;;
- 700|0700) TYPE="WINDOWS" ;;
- b|c) TYPE="FAT32" ;;
- C01|0C01) TYPE="WIN-RESERV" ;;
- 11) TYPE="HFAT12" ;;
- 12) TYPE="COMPAQDIAG" ;;
- 16|1e) TYPE="HFAT16" ;;
- 17) TYPE="HNTFS" ;;
- 1b|1c) TYPE="HFAT32" ;;
- 42) TYPE="WIN-DYNAMIC" ;;
- 7F00) TYPE="CHROMEOS-KRN" ;;
- 7F01) TYPE="CHROMEOS" ;;
- 7F02) TYPE="CHROMEOS-RESERV" ;;
- 82|8200) TYPE="LINUX-SWAP" ;;
- 83|8300) TYPE="LINUX" ;;
- 8301) TYPE="LINUX-RESERV" ;;
- 8e|8E00) TYPE="LINUX-LVM" ;;
- a5|A503) TYPE="FREEBSD" ;;
- A500) TYPE="FREEBSD-DISK" ;;
- A501) TYPE="FREEBSD-BOOT" ;;
- A502) TYPE="FREEBSD-SWAP" ;;
- a6) TYPE="OPENBSD" ;;
- a7) TYPE="CACHE" ;; # (compatibilidad con Brutalix)
- af|AF00) TYPE="HFS" ;;
- Af01) TYPE="HFS-RAID" ;;
- be|BE00) TYPE="SOLARIS-BOOT" ;;
- bf|BF0[0145]) TYPE="SOLARIS" ;;
- BF02) TYPE="SOLARIS-SWAP" ;;
- BF03) TYPE="SOLARIS-DISK" ;;
- ca|CA00) TYPE="CACHE" ;;
- da) TYPE="DATA" ;;
- ee) TYPE="GPT" ;;
- ef|EF00) TYPE="EFI" ;;
- EF01) TYPE="MBR" ;;
- EF02) TYPE="BIOS-BOOT" ;;
- fb) TYPE="VMFS" ;;
- fd|FD00) TYPE="LINUX-RAID" ;;
- *) TYPE="UNKNOWN" ;;
-esac
+TYPE=$(ogIdToType "$ID")
echo "$TYPE"
}
@@ -1005,7 +863,82 @@ case "$TYPE" in
return $? ;;
esac
# Cambiar tipo de partición.
-ogSetPartitionId $1 $2 $NEWTYPE
+ogSetPartitionType $1 $2 $NEWTYPE
+}
+
+
+#/**
+# ogIdToType int_idpart
+#@brief Devuelve el identificador correspondiente a un tipo de partición.
+#@param int_idpart identificador de tipo de partición.
+#@return str_parttype mnemónico de tipo de partición.
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 1.0.5 - Primera version para OpenGnSys
+#@author Ramon Gomez, ETSII Universidad Sevilla
+#@date 2013-02-07
+#*/ ##
+function ogIdToType ()
+{
+# Variables locales
+local ID TYPE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_idpart" \
+ "$FUNCNAME 83 => LINUX"
+ return
+fi
+# Error si no se recibe 1 parámetro.
+[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Obtener valor hexadecimal de 4 caracteres rellenado con 0 por delante.
+ID=$(printf "%4s" "$1" | tr ' ' '0')
+case "${ID,,}" in
+ 0000) TYPE="EMPTY" ;;
+ 0001) TYPE="FAT12" ;;
+ 0005|000f) TYPE="EXTENDED" ;;
+ 0006|000e) TYPE="FAT16" ;;
+ 0007) TYPE="NTFS" ;;
+ 000b|000c) TYPE="FAT32" ;;
+ 0011) TYPE="HFAT12" ;;
+ 0012) TYPE="COMPAQDIAG" ;;
+ 0016|001e) TYPE="HFAT16" ;;
+ 0017) TYPE="HNTFS" ;;
+ 001b|001c) TYPE="HFAT32" ;;
+ 0042) TYPE="WIN-DYNAMIC" ;;
+ 0082|8200) TYPE="LINUX-SWAP" ;;
+ 0083|8300) TYPE="LINUX" ;;
+ 008e|8E00) TYPE="LINUX-LVM" ;;
+ 00a5|a503) TYPE="FREEBSD" ;;
+ 00a6) TYPE="OPENBSD" ;;
+ 00a7) TYPE="CACHE" ;; # (compatibilidad con Brutalix)
+ 00af|af00) TYPE="HFS" ;;
+ 00be|be00) TYPE="SOLARIS-BOOT" ;;
+ 00bf|bf0[0145]) TYPE="SOLARIS" ;;
+ 00ca|ca00) TYPE="CACHE" ;;
+ 00da) TYPE="DATA" ;;
+ 00ee) TYPE="GPT" ;;
+ 00ef|ef00) TYPE="EFI" ;;
+ 00fb) TYPE="VMFS" ;;
+ 00fd|fd00) TYPE="LINUX-RAID" ;;
+ 0700) TYPE="WINDOWS" ;;
+ 0c01) TYPE="WIN-RESERV" ;;
+ 7f00) TYPE="CHROMEOS-KRN" ;;
+ 7f01) TYPE="CHROMEOS" ;;
+ 7f02) TYPE="CHROMEOS-RESERV" ;;
+ 8301) TYPE="LINUX-RESERV" ;;
+ a500) TYPE="FREEBSD-DISK" ;;
+ a501) TYPE="FREEBSD-BOOT" ;;
+ a502) TYPE="FREEBSD-SWAP" ;;
+ ab00) TYPE="HFS-BOOT" ;;
+ af01) TYPE="HFS-RAID" ;;
+ bf02) TYPE="SOLARIS-SWAP" ;;
+ bf03) TYPE="SOLARIS-DISK" ;;
+ ef01) TYPE="MBR" ;;
+ ef02) TYPE="BIOS-BOOT" ;;
+ *) TYPE="UNKNOWN" ;;
+esac
+echo "$TYPE"
}
@@ -1019,7 +952,7 @@ ogSetPartitionId $1 $2 $NEWTYPE
#@note Requisitos: \c parted \c awk
#@attention El nº de partición se indica por el orden de los párametros \c parttype:partsize
#@attention Las tuplas de valores están separadas por espacios.
-#@version 0.9 - Primera versión para OpenGNSys
+#@version 0.9 - Primera versión para OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009/07/24
#*/ ##
@@ -1103,7 +1036,7 @@ echo $PARTS | cut -sf5- -d" "
#@version 0.1 - Integracion para Opengnsys - EAC: SetPartitionActive() en ATA.lib
#@author Antonio J. Doblas Viso, Universidad de Malaga
#@date 2008/10/27
-#@version 0.9 - Primera version compatible con OpenGNSys.
+#@version 0.9 - Primera version compatible con OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009/09/17
#*/ ##
@@ -1129,12 +1062,16 @@ parted -s $DISK set $2 boot on 2>/dev/null
#/**
-# ogSetPartitionId int_ndisk int_npartition str_type
+# ogSetPartitionId int_ndisk int_npartition hex_partid
#@brief Cambia el identificador de la partición.
#@param int_ndisk nº de orden del disco
#@param int_npartition nº de orden de la partición
-#@param str_partid mnemónico de tipo de partición
+#@param hex_partid identificador de tipo de partición
#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositivo.
+#@exception OG_ERR_OUTOFLIMIT Valor no válido.
+#@exception OG_ERR_PARTITION Error al cambiar el id. de partición.
#@attention Requisitos: fdisk, sgdisk
#@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib
#@author Antonio J. Doblas Viso. Universidad de Malaga
@@ -1142,6 +1079,9 @@ parted -s $DISK set $2 boot on 2>/dev/null
#@version 1.0.4 - Soporte para discos GPT.
#@author Universidad de Huelva
#@date 2012/03/13
+#@version 1.0.5 - Utiliza el id. de tipo de partición (no el mnemónico)
+#@author Universidad de Huelva
+#@date 2012/05/14
#*/ ##
function ogSetPartitionId ()
{
@@ -1150,26 +1090,34 @@ local DISK PART PTTYPE ID
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_type" \
- "$FUNCNAME 1 1 NTFS"
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition hex_partid" \
+ "$FUNCNAME 1 1 7"
return
fi
# Error si no se reciben 3 parámetros.
[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Sustituye nº de disco por su dispositivo.
-DISK=`ogDiskToDev $1` || return $?
-PART=`ogDiskToDev $1 $2` || return $?
+# Sustituye nº de disco y nº partición por su dispositivo.
+DISK=$(ogDiskToDev $1) || return $?
+PART=$(ogDiskToDev $1 $2) || return $?
+# Error si el id. de partición no es hexadecimal.
+ID="${3^^}"
+[[ "$ID" =~ ^[0-9A-F]+$ ]] || ogRaiseError $OG_ERR_OUTOFLIMIT "$3" || return $?
# Elección del tipo de partición.
PTTYPE=$(ogGetPartitionTableType $1)
-ID=$(ogTypeToId "$3" "$PTTYPE")
-[ -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$3,$PTTYPE" || return $?
case "$PTTYPE" in
- GPT) sgdisk $DISK -t$PART:$ID 2>/dev/null ;;
+ GPT) sgdisk -t$2:$ID $DISK 2>/dev/null ;;
MSDOS) echo -ne "t\n$2\n${ID}\nw\n" | fdisk $DISK &>/dev/null ;;
+ *) ogRaiseError $OG_ERR_OUTOFLIMIT "$1,$PTTYPE"
+ return $? ;;
esac
-partprobe $DISK 2>/dev/null
+if [ $? == 0 ]; then
+ partprobe $DISK 2>/dev/null
+else
+ ogRaiseError $OG_ERR_PARTITION "$1,$2,$3"
+ return $?
+fi
}
@@ -1184,7 +1132,7 @@ partprobe $DISK 2>/dev/null
#@exception OG_ERR_NOTFOUND disco o particion no detectado (no es un dispositivo).
#@note Requisitos: sfdisk, awk
#@todo Compruebar que el tamaño sea numérico positivo y evitar que pueda solaparse con la siguiente partición.
-#@version 0.9 - Primera versión para OpenGNSys
+#@version 0.9 - Primera versión para OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009/07/24
#*/ ##
@@ -1214,6 +1162,154 @@ partprobe $DISK 2>/dev/null
#/**
+# ogSetPartitionType int_ndisk int_npartition str_type
+#@brief Cambia el identificador de la partición.
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_type mnemónico de tipo de partición
+#@return (nada)
+#@attention Requisitos: fdisk, sgdisk
+#@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib
+#@author Antonio J. Doblas Viso. Universidad de Malaga
+#@date 2008/10/27
+#@version 1.0.4 - Soporte para discos GPT.
+#@author Universidad de Huelva
+#@date 2012/03/13
+#@version 1.0.5 - Renombrada de ogSetPartitionId.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2013/03/07
+#*/ ##
+function ogSetPartitionType ()
+{
+# Variables locales
+local DISK PART PTTYPE ID
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_type" \
+ "$FUNCNAME 1 1 NTFS"
+ return
+fi
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+
+# Sustituye nº de disco por su dispositivo.
+DISK=`ogDiskToDev $1` || return $?
+PART=`ogDiskToDev $1 $2` || return $?
+
+# Elección del tipo de partición.
+PTTYPE=$(ogGetPartitionTableType $1)
+ID=$(ogTypeToId "$3" "$PTTYPE")
+[ -n "$ID" ] || ogRaiseError $OG_ERR_FORMAT "$3,$PTTYPE" || return $?
+ogSetPartitionId $1 $2 $ID
+}
+
+
+#/**
+# ogTypeToId str_parttype [str_tabletype]
+#@brief Devuelve el identificador correspondiente a un tipo de partición.
+#@param str_parttype mnemónico de tipo de partición.
+#@param str_tabletype mnemónico de tipo de tabla de particiones (MSDOS por defecto).
+#@return int_idpart identificador de tipo de partición.
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@note tabletype = { MSDOS, GPT }, (MSDOS, por defecto)
+#@version 0.1 - Integracion para Opengnsys - EAC: TypeFS () en ATA.lib
+#@author Antonio J. Doblas Viso, Universidad de Malaga
+#@date 2008/10/27
+#@version 0.9 - Primera version para OpenGnSys
+#@author Ramon Gomez, ETSII Universidad Sevilla
+#@date 2009-12-14
+#@version 1.0.4 - Soportar discos GPT (sustituye a ogFsToId).
+#@author Universidad de Huelva
+#@date 2012/03/30
+#*/ ##
+function ogTypeToId ()
+{
+# Variables locales
+local PTTYPE ID
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME str_parttype [str_tabletype]" \
+ "$FUNCNAME LINUX => 83" \
+ "$FUNCNAME LINUX MSDOS => 83"
+ return
+fi
+# Error si no se reciben 1 o 2 parámetros.
+[ $# -lt 1 -o $# -gt 2 ] && (ogRaiseError $OG_ERR_FORMAT; return $?)
+
+# Asociar id. de partición para su mnemónico.
+PTTYPE=${2:-"MSDOS"}
+case "$PTTYPE" in
+ GPT) # Se incluyen mnemónicos compatibles con tablas MSDOS.
+ case "$1" in
+ EMPTY) ID=0 ;;
+ WINDOWS|NTFS|EXFAT|FAT32|FAT16|FAT12|HNTFS|HFAT32|HFAT16|HFAT12)
+ ID=0700 ;;
+ WIN-RESERV) ID=0C01 ;;
+ CHROMEOS-KRN) ID=7F00 ;;
+ CHROMEOS) ID=7F01 ;;
+ CHROMEOS-RESERV) ID=7F02 ;;
+ LINUX-SWAP) ID=8200 ;;
+ LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
+ ID=8300 ;;
+ LINUX-RESERV) ID=8301 ;;
+ LINUX-LVM) ID=8E00 ;;
+ FREEBSD-DISK) ID=A500 ;;
+ FREEBSD-BOOT) ID=A501 ;;
+ FREEBSD-SWAP) ID=A502 ;;
+ FREEBSD) ID=A503 ;;
+ HFS-BOOT) ID=AB00 ;;
+ HFS|HFS+) ID=AF00 ;;
+ HFSPLUS) ID=AF00 ;;
+ HFS-RAID) ID=AF01 ;;
+ SOLARIS-BOOT) ID=BE00 ;;
+ SOLARIS) ID=BF00 ;;
+ SOLARIS-SWAP) ID=BF02 ;;
+ SOLARIS-DISK) ID=BF03 ;;
+ CACHE) ID=CA00;;
+ EFI) ID=EF00 ;;
+ LINUX-RAID) ID=FD00 ;;
+ *) ID="" ;;
+ esac
+ ;;
+ MSDOS)
+ case "$1" in
+ EMPTY) ID=0 ;;
+ FAT12) ID=1 ;;
+ EXTENDED) ID=5 ;;
+ FAT16) ID=6 ;;
+ WINDOWS|NTFS|EXFAT)
+ ID=7 ;;
+ FAT32) ID=b ;;
+ HFAT12) ID=11 ;;
+ HFAT16) ID=16 ;;
+ HNTFS) ID=17 ;;
+ HFAT32) ID=1b ;;
+ LINUX-SWAP) ID=82 ;;
+ LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS)
+ ID=83 ;;
+ LINUX-LVM) ID=8e ;;
+ FREEBSD) ID=a5 ;;
+ OPENBSD) ID=a6 ;;
+ HFS|HFS+) ID=af ;;
+ SOLARIS-BOOT) ID=be ;;
+ SOLARIS) ID=bf ;;
+ CACHE) ID=ca ;;
+ DATA) ID=da ;;
+ GPT) ID=ee ;;
+ EFI) ID=ef ;;
+ VMFS) ID=fb ;;
+ LINUX-RAID) ID=fd ;;
+ *) ID="" ;;
+ esac
+ ;;
+esac
+echo $ID
+}
+
+
+#/**
# ogUnhidePartition int_ndisk int_npartition
#@brief Hace visible una partición oculta.
#@param int_ndisk nº de orden del disco
@@ -1251,7 +1347,7 @@ case "$TYPE" in
return $? ;;
esac
# Cambiar tipo de partición.
-ogSetPartitionId $1 $2 $NEWTYPE
+ogSetPartitionType $1 $2 $NEWTYPE
}
diff --git a/client/engine/File.lib b/client/engine/File.lib
index ea3956e6..e602b64d 100755
--- a/client/engine/File.lib
+++ b/client/engine/File.lib
@@ -117,9 +117,9 @@ esac
# Comprobar fichero origen y directorio destino.
[ -n "$SOURCE" ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return $?
TARGET="$(ogGetPath "$@")"
-[ -n "$TARGET" ] || ogRaiseError $OG_ERR_NOTFOUND "$@" || return $?
+[ -n "$TARGET" ] || ogRaiseError $OG_ERR_NOTFOUND "$*" || return $?
# Copiar fichero (para evitar problemas de comunicaciones las copias se hacen con rsync en vez de cp).
-rsync --progress -avh "$SOURCE" "$TARGET"
+rsync --progress --inplace -avh "$SOURCE" "$TARGET"
}
@@ -213,19 +213,22 @@ fi
# Procesar camino según el número de parámetros.
case $# in
- 1) FILE="$1" ;;
- 2) case "$1" in
- REPO|repo)
+ 1) FILE="$1" ;;
+ 2) case "${1^^}" in
+ REPO)
FILE="$OGIMG/$2" ;;
- CACHE|cache)
- FILE="$(ogMountCache)/$OGIMG/$2" ;;
- CDROM|cdrom)
- FILE="$(ogMountCdrom)/$2" ;;
+ CACHE)
+ MNTDIR="$(ogMountCache)" || return $?
+ FILE="$MNTDIR/$OGIMG/$2" ;;
+ CDROM)
+ MNTDIR="$(ogMountCdrom)" || return $?
+ FILE="$MNTDIR/$2" ;;
*) ogRaiseError $OG_ERR_FORMAT
return $? ;;
esac ;;
- 3) FILE="$(ogMount $1 $2)/$3" ;;
- *) ogRaiseError $OG_ERR_FORMAT
+ 3) MNTDIR="$(ogMount $1 $2)" || return $?
+ FILE="$MNTDIR/$3" ;;
+ *) ogRaiseError $OG_ERR_FORMAT
return $? ;;
esac
@@ -237,8 +240,8 @@ PREVFILE=""
FILEPATH="/"
while [ "$FILE" != "$PREVFILE" ]; do
# Busca el nombre correcto en el directorio actual.
- cd "$FILEPATH"
- FILEPATH="${FILEPATH}/$(ls -A | grep -i -m1 "^${FILE%%/*}$")" || return $?
+ cd "$FILEPATH" 2>/dev/null || FILE=""
+ FILEPATH="${FILEPATH}/$(ls -A 2>/dev/null | grep -i -m1 "^${FILE%%/*}$")" || return $?
PREVFILE="$FILE"
FILE="${FILE#*/}"
done
@@ -318,7 +321,7 @@ esac
# Comprobar que existen los ficheros origen y destino.
[ -n "$SOURCE" ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return 1
TARGET=$(ogGetPath "$@")
-[ -n "$TARGET" ] || ogRaiseError $OG_ERR_NOTFOUND "$@" || return 1
+[ -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"
}
@@ -377,61 +380,3 @@ DIR="$(basename "${!#}")"
mkdir -p "$PARENT/$DIR" || ogRaiseError $OG_ERR_NOTFOUND "$*" || return $?
}
-
-#/**
-# ogNewPath [ str_repo | int_ndisk int_npartition ] path_filepath
-#@brief Crea el directorio especificado
-#@param path_filepath camino del fichero (independiente de mayúsculas)
-#@param str_repo repositorio de ficheros
-#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
-#@return file - camino completo real del directorio creado
-#@note repo = { REPO, CACHE }
-#@note Requisitos: \c grep \c sed
-#@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.
-#@warning Primeras pruebas.
-#@todo Terminar de definir parámetros para acceso a repositorios.
-#@version 0.1 - Primera adaptaci³n para OpenGNSys.
-#@author obtenido de ogGetPath de Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2009-09-15
-#*/
-function ogNewPath ()
-{
-# Variables locales.
-local MNTDIR FILE PREVFILE FILEPATH CURRENTDIR
-
-#/// Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
- "$FUNCNAME \"/mnt/sda1/windows/system32\" ==> /mnt/sda1/WINDOWS/System32" \
- "$FUNCNAME REPO /etc/fstab ==> /opt/opengnsys/images/etc/fstab" \
- "$FUNCNAME 1 1 \"/windows/system32\" ==> /mnt/sda1/WINDOWS/System32"
- return
-fi
-
-#/// Procesar camino según el número de parámetros.
-case $# in
- # si 1 parametro directorio-fichero completo.
- 1) FILE="$1" ;;
- # Si 2 parametros es REPOSITORIO DIRECTORIO-FICHERO
- 2) case "$1" in
- # consultando servidor repositorio base
- REPO | $IPREPOMAN ) FILE="$OGIMG/$2" || return $OG_ERR_NOTFOUND ;;
- # consultando particion auxiliar cache local
- CACHE | $IP )
- ogMountCache >> /dev/null && FILE="$OGCAC/$OGIMG/$2" || return $OG_ERR_NOTFOUND ;;
- # conectando con Servidor Axuliar.
- *) ogRaiseError $OG_ERR_FORMAT
- return $? ;;
- esac ;;
- # Si 3 parametros DISK PARTITION DIRECTORIO-FICHERO
- 3) FILE="$(ogMount $1 $2)/$3" || return $OG_ERR_NOTFOUND ;;
- *) return $OG_ERR_FORMAT ;;
-esac
-
-mkdir -p ${FILE}
-echo $FILE
-}
-
diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib
index dcfae129..2cdc1c0b 100755
--- a/client/engine/FileSystem.lib
+++ b/client/engine/FileSystem.lib
@@ -4,16 +4,16 @@
#@brief Librería o clase FileSystem
#@class FileSystem
#@brief Funciones para gestión de sistemas de archivos.
-#@version 1.0.4
+#@version 1.0.5
#@warning License: GNU GPLv3+
#*/
#/**
-# ogCheckFs int_ndisk int_npartition
+# ogCheckFs int_ndisk int_nfilesys
#@brief Comprueba el estado de un sistema de archivos.
#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
+#@param int_nfilesys nº de orden del sistema de archivos
#@return (nada)
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
@@ -30,6 +30,9 @@
#@version 1.0.4 - Soportar HFS/HFS+.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2012-05-21
+#@version 1.0.5 - Desmontar antes de comprobar, soportar Btrfs y ExFAT.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-09-05
#*/ ##
function ogCheckFs ()
{
@@ -37,7 +40,7 @@ function ogCheckFs ()
local PART TYPE PROG PARAMS CODES ERRCODE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
"$FUNCNAME 1 1"
return
fi
@@ -50,20 +53,24 @@ PART="$(ogDiskToDev $1 $2)" || return $?
TYPE=$(ogGetFsType $1 $2)
case "$TYPE" in
EXT[234]) PROG="e2fsck"; PARAMS="-y"; CODES=(1 2) ;;
+ BTRFS) PROG="btrfsck"; CODES=1 ;;
REISERFS) PROG="fsck.reiserfs"; PARAMS="<<<\"Yes\""; CODES=(1 2) ;;
REISER4) PROG="fsck.reiser4"; PARAMS="-ay" ;;
JFS) PROG="fsck.jfs"; CODES=(1 2) ;;
XFS) PROG="fsck.xfs" ;;
NTFS) PROG="ntfsfix" ;;
+ EXFAT) PROG="fsck.exfat" ;;
FAT32) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
FAT16) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
FAT12) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
- HFS) PROG="fsck.hfs" ;;
- HFS+) PROG="fsck.hfsplus" ;;
+ HFS) PROG="fsck.hfs"; PARAMS="-f" ;;
+ HFSPLUS) PROG="fsck.hfs"; PARAMS="-f" ;;
+ UFS) PROG="fsck.ufs" ;;
*) ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE"
return $? ;;
esac
# Error si el sistema de archivos esta montado o bloqueado.
+ogUnmount $1 $2
if ogIsMounted $1 $2; then
ogRaiseError $OG_ERR_PARTITION "$1 $2" # Indicar nuevo error
return $?
@@ -91,10 +98,10 @@ return $ERRCODE
#/**
-# ogExtendFs int_ndisk int_npartition
+# ogExtendFs int_ndisk int_nfilesys
#@brief Extiende un sistema de archivos al tamaño de su partición.
#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
+#@param int_nfilesys nº de orden del sistema de archivos
#@return (nada)
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
@@ -103,18 +110,21 @@ return $ERRCODE
#@version 0.1 - Integracion para Opengnsys - EAC: EnlargeFileSystem() en ATA.lib
#@author Antonio J. Doblas Viso. Universidad de Malaga
#@date 2008-10-27
-#@version 0.9 - Primera adaptacion para OpenGNSys.
+#@version 0.9 - Primera adaptacion para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-23
+#@version 1.0.5 - Soporte para BTRFS.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-06-28
#*/ ##
function ogExtendFs ()
{
# Variables locales.
-local PART TYPE PROG PARAMS ERRCODE
+local PART TYPE PROG PARAMS ERRCODE DOMOUNT
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
"$FUNCNAME 1 1"
return
fi
@@ -124,22 +134,38 @@ fi
# Obtener partición.
PART="$(ogDiskToDev $1 $2)" || return $?
-ogUnmount $1 $2 2>/dev/null
# Redimensionar al tamano máximo según el tipo de partición.
TYPE=$(ogGetFsType $1 $2)
case "$TYPE" in
EXT[234]) PROG="resize2fs"; PARAMS="-f" ;;
- REISERFS) PROG="resize_reiserfs"; PARAMS="-f" ;;
-# BTRFS) PROG="btrfs"; PARAMS="filesystem resize max" ;;
+ BTRFS) PROG="btrfs"; PARAMS="filesystem resize max"
+ DOMOUNT=1 # Debe estar montado.
+ ;;
+ REISERFS|REISER4)
+ PROG="resize_reiserfs"; PARAMS="-f" ;;
+ JFS) ;; # No se reduce (por el momento).
+ XFS) ;; # No se reduce (por el momento).
NTFS) PROG="ntfsresize"; PARAMS="<<<\"y\" -f" ;;
+ EXFAT) ;; # No se reduce (por el momento).
+ FAT32|FAT16) ;; # No se reduce (probar "fatresize").
+ HFS|HFSPLUS) ;; # No se reduce (por el momento).
+ UFS) ;; # No se reduce (por el momento).
*) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
return $? ;;
esac
-# Error si el sistema de archivos está montado o bloqueado.
-if ogIsMounted $1 $2; then
- ogRaiseError $OG_ERR_PARTITION "$1 $2" # Indicar nuevo error
- return $?
+# Salida normal si no se va a aplicar la operación.
+[ -z "$PROG" ] && return
+# Error si el sistema de archivos no se queda en el estado de montaje adecuado.
+if [ "$DOMOUNT" ]; then
+ PART=$(ogMount $1 $2) || return $? # Indicar nuevo error
+else
+ ogUnmount $1 $2 2>/dev/null
+ if ogIsMounted $1 $2; then
+ ogRaiseError $OG_ERR_PARTITION "$1 $2" # Indicar nuevo error
+ return $?
+ fi
fi
+# Error si el sistema de archivos está bloqueado.
if ogIsLocked $1 $2; then
ogRaiseError $OG_ERR_LOCKED "$1 $2"
return $?
@@ -162,7 +188,7 @@ return $ERRCODE
#/**
-# ogFormat int_ndisk int_npartition | CACHE
+# ogFormat int_ndisk int_nfilesys | CACHE
#@see ogFormatFs ogFormatCache
#*/ ##
function ogFormat ()
@@ -175,34 +201,37 @@ esac
#/**
-# ogFormatFs int_ndisk int_npartition [type_fstype] [str_label]
+# ogFormatFs int_ndisk int_nfilesys [type_fstype] [str_label]
#@brief Formatea un sistema de ficheros según el tipo de su partición.
#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
-#@param type_fstype mnemónico de sistema de ficheros a formatear
+#@param int_nfilesys nº de orden del sistema de archivos
+#@param type_fstype mnemónico de sistema de ficheros a formatear (opcional al reformatear)
#@param str_label etiqueta de volumen (opcional)
#@return (por determinar)
-#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_FORMAT Formato de ejecución incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@exception OG_ERR_PARTITION Partición no accesible o desconocida.
#@note Requisitos: mkfs*
#@warning No formatea particiones montadas ni bloqueadas.
#@todo Definir salidas.
-#@version 0.9 - Primera versión para OpenGNSys.
+#@version 0.9 - Primera versión para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-08
-#@version 1.0.4 - Solucionado error cuando no se detecta tipo de sistema de ficheros pero si se indica
+#@version 1.0.4 - Solucionado error cuando no se detecta tipo de sistema de ficheros pero si se indica.
#@author Universidad de Huelva
#@date 2012-04-11
+#@version 1.0.5 - Comprobar errores al inicio e independizar del tipo de tabla de particiones.
+#@author Universidad de Huelva
+#@date 2013-05-16
#*/ ##
function ogFormatFs ()
{
# Variables locales
-local PART ID TYPE LABEL PROG PARAMS ERRCODE
+local PART ID TYPE LABEL PROG PARAMS LABELPARAM ERRCODE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition [str_label]" \
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys [str_label]" \
"$FUNCNAME 1 1" \
"$FUNCNAME 1 1 EXT4" \
"$FUNCNAME 1 1 \"DATA\"" \
@@ -211,91 +240,57 @@ if [ "$*" == "help" ]; then
fi
# Error si no se reciben entre 2 y 4 parámetros.
[ $# -ge 2 -a $# -le 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Obtener dispositivo y tipo de sisitema de archivos.
+# Obtener fichero de dispositivo.
PART="$(ogDiskToDev $1 $2)" || return $?
-TYPE="$(ogGetFsType $1 $2)"
-# Si no se detecto el tipo de sistema de ficheros
-if [ -z "$TYPE" ]; then
- # Si no se indico ningun tipo de sistema de ficheros se retorna
- if [ -z "$3" ]; then
- return $?
- else
- # Si no se detecto, se asigna el indicado
- TYPE="$3"
- fi
+# Error si la partición está montada o bloqueada.
+if ogIsMounted $1 $2; then
+ ogRaiseError $OG_ERR_PARTITION "$1 $2" # Indicar nuevo error
+ return $?
fi
+if ogIsLocked $1 $2; then
+ ogRaiseError $OG_ERR_LOCKED "$1 $2"
+ return $?
+fi
+# Si no se indica el tipo de sisitema de archivos, intentar obtenerlo.
+TYPE="${3:-$(ogGetFsType $1 $2)}"
+# Error, si no especifica el tipo de sistema de archivos a formatear.
+[ -n "$TYPE" ] || ogRaiseError $OG_ERR_FORMAT "$1 $2 ..." || return $?
-# Elegir tipo de formato segun el tipo de particion.
-case "$3" in
- EXT2) ID=83; PROG="mkfs.ext2" ;;
- EXT3) ID=83; PROG="mkfs.ext3" ;;
- EXT4) ID=83; PROG="mkfs.ext4" ;;
- BTRFS) ID=83; PROG="mkfs.btrfs" ;;
- REISERFS) ID=83; PROG="mkfs.reiserfs"; PARAMS="-f" ;;
- REISER4) ID=83; PROG="mkfs.reiser4" ;;
- XFS) ID=83; PROG="mkfs.xfs"; PARAMS="-f" ;;
- JFS) ID=83; PROG="mkfs.jfs"; PARAMS="<<<\"y\"";;
- NTFS) ID=7; PROG="mkntfs"; PARAMS="-f" ;;
- HNTFS) ID=17; PROG="mkntfs"; PARAMS="-f" ;;
- FAT32) ID=b; PROG="mkdosfs"; PARAMS="-F 32" ;;
- HFAT32) ID=1b; PROG="mkdosfs"; PARAMS="-F 32" ;;
- FAT16) ID=6; PROG="mkdosfs"; PARAMS="-F 16" ;;
- HFAT16) ID=16; PROG="mkdosfs"; PARAMS="-F 16" ;;
- FAT12) ID=1; PROG="mkdosfs"; PARAMS="-F 12" ;;
- HFAT12) ID=11; PROG="mkdosfs"; PARAMS="-F 12" ;;
- HFS) ID=af; PROG="mkfs.hfs" ;;
- HFS+) ID=af; PROG="mkfs.hfsplus" ;;
- UFS) ID=bf; PROG="mkfs.ufs"; PARAMS="-O 2" ;;
- *) LABEL="$3" ;;
+# Elegir tipo de formato.
+case "$TYPE" in
+ EXT2) PROG="mkfs.ext2" ;;
+ EXT3) PROG="mkfs.ext3" ;;
+ EXT4) PROG="mkfs.ext4" ;;
+ BTRFS) PROG="mkfs.btrfs" ;;
+ REISERFS) PROG="mkfs.reiserfs"; PARAMS="-f"; LABELPARAM="-l" ;;
+ REISER4) PROG="mkfs.reiser4"; PARAMS="-fy" ;;
+ XFS) PROG="mkfs.xfs"; PARAMS="-f" ;;
+ JFS) PROG="mkfs.jfs"; PARAMS="<<<\"y\"" ;;
+ LINUX-SWAP) PROG="mkswap" ;;
+ NTFS) PROG="mkntfs"; PARAMS="-f" ;;
+ EXFAT) PROG="mkfs.exfat"; LABELPARAM="-n" ;;
+ FAT32) PROG="mkdosfs"; PARAMS="-F 32"; LABELPARAM="-n" ;;
+ FAT16) PROG="mkdosfs"; PARAMS="-F 16"; LABELPARAM="-n" ;;
+ FAT12) PROG="mkdosfs"; PARAMS="-F 12"; LABELPARAM="-n" ;;
+ HFS) PROG="mkfs.hfs" ;;
+ HFSPLUS) PROG="mkfs.hfsplus"; LABELPARAM="-v" ;;
+ UFS) PROG="mkfs.ufs"; PARAMS="-O 2" ;;
+ *) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
+ return $? ;;
esac
-# Si no se indica explícitamente, detectar el tipo de sistema de archivos.
-if [ -z "$PROG" ]; then
- case "$TYPE" in
- EXT2) PROG="mkfs.ext2" ;;
- EXT3) PROG="mkfs.ext3" ;;
- EXT4) PROG="mkfs.ext4" ;;
- BTRFS) PROG="mkfs.btrfs" ;;
- REISERFS) PROG="mkfs.reiserfs"; PARAMS="-f" ;;
- REISER4) PROG="mkfs.reiser4" ;;
- XFS) PROG="mkfs.xfs"; PARAMS="-f" ;;
- JFS) PROG="mkfs.jfs"; PARAMS="<<<\"y\"" ;;
- LINUX-SWAP) PROG="mkswap" ;;
- NTFS|HNTFS) PROG="mkntfs"; PARAMS="-f" ;;
- FAT32|HFAT32) PROG="mkdosfs"; PARAMS="-F 32" ;;
- FAT16|HFAT16) PROG="mkdosfs"; PARAMS="-F 16" ;;
- FAT12|HFAT12) PROG="mkdosfs"; PARAMS="-F 12" ;;
- HFS) PROG="mkfs.hfs" ;;
- HFS+) PROG="mkfs.hfsplus" ;;
- UFS) PROG="mkfs.ufs"; PARAMS="-O 2" ;;
- *) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
- return $? ;;
- esac
-else
- [ $TYPE == "$3" -o $ID == "$(ogGetPartitionId $1 $2)" ] || ogRaiseError $OG_ERR_PARTITION "$3 != $TYPE" || return $?
-fi
-# Comprobar consistencia entre id. de partición y tipo de sistema de archivos.
-[ -n "$PROG" ] || ogRaiseError $OG_ERR_PARTITION "$3 != $TYPE" || return $?
# Etiquetas de particion.
if [ -z "$LABEL" ]; then
[ "$4" != "CACHE" ] || ogRaiseError $OG_ERR_FORMAT "$MSG_RESERVEDVALUE: CACHE" || return $?
- [ -n "$4" ] && PARAMS="$PARAMS -L $4"
+ [ -n "$4" ] && PARAMS="$PARAMS ${LABELPARAM:-"-L"} $4"
else
- PARAMS="$PARAMS -L $LABEL"
+ PARAMS="$PARAMS ${LABELPARAM:-"-L"} $LABEL"
fi
-# Error si la particion esta montada o está bloqueada.
-if ogIsMounted $1 $2; then
- ogRaiseError $OG_ERR_PARTITION "$1 $2" # Indicar nuevo error
- return $?
-fi
-if ogIsLocked $1 $2; then
- ogRaiseError $OG_ERR_LOCKED "$1 $2"
- return $?
-fi
-# Formatear en modo uso exclusivo.
+# Formatear en modo uso exclusivo (desmontar siempre).
ogLock $1 $2
trap "ogUnlock $1 $2" 1 2 3 6 9
+umount $PART 2>/dev/null
eval $PROG $PARAMS $PART 2>/dev/null
ERRCODE=$?
case $ERRCODE in
@@ -365,12 +360,12 @@ echo ${SIZE%.0*}
#/**
-# ogGetFsType int_ndisk int_npartition
+# ogGetFsType int_ndisk int_nfilesys
#@brief Devuelve el mnemonico con el tipo de sistema de archivos.
#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
+#@param int_nfilesys nº de orden del sistema de archivos
#@return Mnemonico
-#@note Mnemonico: { EXT2, EXT3, EXT4, REISERFS, XFS, JFS, FAT16, FAT32, NTFS, CACHE }
+#@note Mnemonico: { EXT2, EXT3, EXT4, BTRFS, REISERFS, XFS, JFS, FAT12, FAT16, FAT32, NTFS, LINUX-SWAP, LINUX-LVM, LINUX-RAID, HFS, HFSPLUS, CACHE }
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@version 0.1 - Integracion para Opengnsys - EAC: TypeFS() en ATA.lib
@@ -382,38 +377,39 @@ echo ${SIZE%.0*}
#@version 1.0.2 - Obtención de datos reales de sistemas de ficheros.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2011-12-02
+#@version 1.0.5 - Usar "blkid" para detectar tipo de sistema de archivo.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2014-06-10
#*/ ##
function ogGetFsType ()
{
# Variables locales.
-local DISK ID TYPE
+local PART ID TYPE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
"$FUNCNAME 1 1 => NTFS"
return
fi
# Error si no se reciben 2 parámetros.
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Detectar id. de tipo de partición y codificar al mnemonico.
-DISK=$(ogDiskToDev "$1") || return $?
-ID=$(ogGetPartitionId "$1" "$2") || return $?
-[ "$ID" == "a7" ] && ID="ca" # Traducir antiguo id. de partición de caché.
-TYPE=""
-case "$ID" in
- ca|CA00) # Detectar caché local (revisar detección en tablas GPT).
- ogIsFormated $1 $2 2>/dev/null && TYPE="CACHE"
- ;;
- *) # Detectar sistema de ficheros.
- if ogIsFormated $1 $2 2>/dev/null; then
- TYPE=$(parted -ms $DISK print | \
- awk -F: -v p=$2 '{if ($1==p) {
- sub (/\(.*\)/, "");
- print toupper($5);
- } }')
+# Detectar tipo de sistema de archivo (independientemente del tipo de partición).
+PART=$(ogDiskToDev "$1" "$2") || return $?
+TYPE=$(blkid -o export $PART | awk -F= '$1~/^TYPE/ { print toupper($2) }')
+
+# Componer valores correctos.
+case "$TYPE" in
+ EXT4) # Comprobar si es caché o Ext4.
+ if [ "$1 $2" == "$(ogFindCache)" ]; then
+ ogIsFormated $1 $2 2>/dev/null && TYPE="CACHE"
fi
;;
+ VFAT) TYPE="$(blkid -po export $PART | awk -F= '$1~/^VERSION$/ { print toupper($2) }')" ;;
+ SWAP) TYPE="LINUX-SWAP" ;;
+ LVM*) TYPE="LINUX-LVM" ;;
+ *RAID*) TYPE="LINUX-RAID" ;;
+ *_MEMBER) TYPE="${TYPE/_MEMBER/}" ;;
esac
[ -n "$TYPE" ] && echo "$TYPE"
@@ -421,15 +417,15 @@ esac
#/**
-# ogGetMountPoint int_ndisk int_npartition
+# ogGetMountPoint int_ndisk int_nfilesys
#@brief Devuelve el punto de montaje de un sistema de archivos.
#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
+#@param int_nfilesys nº de orden del sistema de archivos
#@return Punto de montaje
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@note Requisitos: \c mount* \c awk
-#@version 0.9 - Primera versión para OpenGNSys.
+#@version 0.9 - Primera versión para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-15
#*/ ##
@@ -439,7 +435,7 @@ function ogGetMountPoint ()
local PART
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
"$FUNCNAME 1 1 => /mnt/sda1"
return
fi
@@ -453,10 +449,10 @@ mount | awk -v P=$PART '{if ($1==P) {print $3}}'
#/**
-# ogIsFormated int_ndisk int_npartition
+# ogIsFormated int_ndisk int_nfilesys
#@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.
+#@param int_nfilesys nº de orden del sistema de archivos
#@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
@@ -464,40 +460,45 @@ mount | awk -v P=$PART '{if ($1==P) {print $3}}'
#@version 1.0.1 - Devolver falso en caso de error.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2011-05-18
+#@version 1.0.5 - Dejar de usar "parted".
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-09-04
#*/ ##
function ogIsFormated ()
{
# Variables locales
local DISK
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
"if $FUNCNAME 1 1; then ... ; fi"
return
fi
# Falso, en caso de error.
[ $# == 2 ] || return 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}')"
+test -n "$(ogMount "$1" "$2" 2>/dev/null)"
}
#/**
-# ogIsMounted int_ndisk int_npartition
-#@brief Comprueba si un sistema de archivos está montado.
+# ogIsLocked int_ndisk int_npartition
+#@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 - montado, 1 - sin montar o error.
-#@version 0.9 - Primera versión para OpenGNSys.
+#@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-10-15
+#@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 ogIsMounted ()
+function ogIsLocked ()
{
+# Variables locales
+local PART LOCKFILE
+
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
@@ -507,32 +508,61 @@ fi
# Falso, en caso de error.
[ $# == 2 ] || return 1
-test -n "$(ogGetMountPoint $1 $2)"
+# Obtener partición.
+PART="$(ogDiskToDev $1 $2)" || return 1
+
+# Comprobar existencia del fichero de bloqueo.
+LOCKFILE="/var/lock/lock${PART//\//-}"
+test -f $LOCKFILE
}
#/**
-# ogIsLocked int_ndisk int_npartition
-#@brief Comprueba si una partición está bloqueada por una operación de uso exclusivo.
+# ogIsMounted int_ndisk int_nfilesys
+#@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 - 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.
+#@param int_nfilesys nº de orden del sistema de archivos
+#@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-09-03
+#@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 ogIsLocked ()
+function ogIsMounted ()
+{
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
+ "if $FUNCNAME 1 1; then ... ; fi"
+ return
+fi
+# Falso, en caso de error.
+[ $# == 2 ] || return 1
+
+test -n "$(ogGetMountPoint $1 $2)"
+}
+
+
+#/**
+# ogIsWritable int_ndisk int_nfilesys
+#@brief Comprueba si un sistema de archivos está montado de lectura y escritura.
+#@param int_ndisk nº de orden del disco
+#@param int_nfilesys nº de orden del sistema de archivos
+#@return Código de salida: 0 - lectura y escritura, 1 - solo lectura o no montado.
+#@version 1.0.5 - Primera versión para OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2013-10-09
+#/**
+function ogIsWritable ()
{
# Variables locales
-local PART LOCKFILE
+local PART
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
"if $FUNCNAME 1 1; then ... ; fi"
return
fi
@@ -542,9 +572,7 @@ fi
# Obtener partición.
PART="$(ogDiskToDev $1 $2)" || return 1
-# Comprobar existencia del fichero de bloqueo.
-LOCKFILE="/var/lock/lock${PART//\//-}"
-test -f $LOCKFILE
+test -n "$(findmnt -n -o OPTIONS $PART | awk 'BEGIN {RS=","} /^rw$/ {print}')"
}
@@ -566,7 +594,7 @@ ogLockPartition "$@"
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@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.
+#@version 0.9 - Primera versión para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-03
#*/ ##
@@ -594,7 +622,7 @@ touch $LOCKFILE
#/**
-# ogMount int_ndisk int_npartition
+# ogMount int_ndisk int_nfilesys
#@see ogMountFs ogMountCache ogMountCdrom
#*/ ##
function ogMount ()
@@ -610,10 +638,10 @@ esac
#/**
-# ogMountFs int_ndisk int_npartition
+# ogMountFs int_ndisk int_nfilesys
#@brief Monta un sistema de archivos.
#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
+#@param int_nfilesys nº de orden del sistema de archivos
#@return Punto de montaje
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
@@ -621,21 +649,21 @@ esac
#@version 0.1 - Integracion para Opengnsys - EAC: MountPartition() en FileSystem.lib
#@author Antonio J. Doblas Viso. Universidad de Malaga
#@date 2008-10-27
-#@version 0.9 - Primera version para OpenGNSys.
+#@version 0.9 - Primera version para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-28
-#@version 1.0.4 - Soportar HFS/HFS+.
+#@version 1.0.5 - Independiente del tipo de sistema de ficheros.
#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2012-05-21
+#@date 2012-09-04
#*/ ##
function ogMountFs ()
{
# Variables locales
-local PART TYPE MNTDIR MOUNT PARAMS
+local PART MNTDIR
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
"$FUNCNAME 1 1 => /mnt/sda1"
return
fi
@@ -643,48 +671,29 @@ fi
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Obtener partición.
-PART="$(ogDiskToDev $1 $2)" || return $?
+PART="$(ogDiskToDev "$1" "$2")" || return $?
# Comprobar si el sistema de archivos ya está montada.
MNTDIR="$(ogGetMountPoint $1 $2)"
-# Si no, montarla en un directorio de sistema
+# Si no, montarlo en un directorio de sistema.
if [ -z "$MNTDIR" ]; then
# Error si la particion esta bloqueada.
if ogIsLocked $1 $2; then
ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION, $1 $2"
return $?
fi
- # Crear punto de montaje o enlace símbolico para Caché local.
+ # Crear punto de montaje o enlace simbólico para caché local.
MNTDIR=${PART/dev/mnt}
- TYPE="$(ogGetFsType $1 $2)" || return $?
- if [ "$TYPE" == "CACHE" -a -n "$OGCAC" ]; then
+ if [ "$(ogFindCache)" == "$1 $2" -a -n "$OGCAC" ]; then
+ mkdir -p $OGCAC
ln -fs $OGCAC $MNTDIR
else
mkdir -p $MNTDIR
fi
- # Montar según el tipo de sitema de archivos.
- case "$TYPE" in
- CACHE) MOUNT=mount ;;
- EXT[234]) MOUNT=mount ;;
- REISERFS) insmod /lib/modules/$(uname -r)/kernel/fs/reiserfs/reiserfs.ko 2>/dev/null
- MOUNT=mount ;;
- JFS) insmod /lib/modules/$(uname -r)/kernel/fs/jfs/jfs.ko 2>/dev/null
- MOUNT=mount ;;
- XFS) insmod /lib/modules/$(uname -r)/kernel/fs/xfs/xfs.ko 2>/dev/null
- MOUNT=mount ;;
- NTFS|HNTFS) MOUNT=ntfs-3g ;;
- FAT16|FAT32|HFAT16|HFAT32)
- MOUNT=mount; PARAMS="-t vfat" ;;
- HFS|HFS+) MOUNT=mount; PARAMS="-o force" ;;
- *) #/// Error, si la partición no es montable.
- rmdir $MNTDIR
- ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE"
- return $OG_ERR_PARTITION
- ;;
- esac
- $MOUNT $PARAMS $PART $MNTDIR 2>/dev/null || \
- $MOUNT $PARAMS $PART $MNTDIR -o force,remove_hiberfile 2>/dev/null || \
- ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE" || return $?
+ # Montar sistema de archivos.
+ mount $PART $MNTDIR &>/dev/null || \
+ mount $PART $MNTDIR -o force,remove_hiberfile &>/dev/null || \
+ ogRaiseError $OG_ERR_PARTITION "$1, $2" || return $?
fi
echo "$MNTDIR"
}
@@ -707,21 +716,21 @@ echo $MNTDIR
#/**
-# ogReduceFs int_ndisk int_npartition
+# ogReduceFs int_ndisk int_nfilesys
#@brief Reduce el tamaño del sistema de archivos, sin tener en cuenta el espacio libre.
#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
+#@param int_nfilesys nº de orden del sistema de archivos
#@return int_tamañoKB - tamaño en KB
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@exception OG_ERR_PARTITION Partición desconocida o no accesible.
-#@warning En Windows, se borran los ficheros pagefile.sys e hiberfile.sys
+#@warning En Windows, se borran los ficheros de hiberanción y de paginación.
#@warning El sistema de archivos se amplía al mínimo + 10%.
#@note Requisitos: *resize*
#@version 0.1 - Integracion para Opengnsys - EAC: ReduceFileSystem() en ATA.lib
#@author Antonio J. Doblas Viso. Universidad de Malaga
#@date 2008-10-27
-#@version 0.9 - Primera version para OpenGNSys.
+#@version 0.9 - Primera version para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-23
#@version 0.9.2 - Añadir un 10% al tamaño mínimo requerido.
@@ -738,7 +747,7 @@ local PART BLKS SIZE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
"$FUNCNAME 1 1"
return
fi
@@ -759,12 +768,27 @@ case "$(ogGetFsType $1 $2)" in
# awk -v B=$BLKS '/minimum size/ {print int($7*1.1*B/2048)}')
#resize2fs -fp $PART "${SIZE}M" &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
resize2fs -fpM $PART &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
- ;;
-# REISERFS) # Usar "resize_reiserfs"
-# ;;
- NTFS|HNTFS)
- ogDeleteFile $1 $2 pagefile.sys
- ogDeleteFile $1 $2 hiberfil.sys
+ ;;
+ BTRFS)
+ MNTDIR=$(ogMount $1 $2)
+ # Calcular tamaño ocupado + 10%.
+ SIZE=$[ $(df -k $MNTDIR | awk '{getline;print $3}') * 110 / 100 ]
+ btrfs filesystem resize ${SIZE}k $MNTDIR
+ ;;
+ REISERFS|REISER4)
+ MNTDIR=$(ogMount $1 $2)
+ # Calcular tamaño ocupado + 10%.
+ SIZE=$[ $(df -k $MNTDIR | awk '{getline;print $3}') * 110 / 100 ]
+ ogUnmount $1 $2 2>/dev/null
+ resize_reiserfs -s${SIZE}K $PART
+ ;;
+ JFS) ;; # No se reduce (por el momento).
+ XFS) ;; # No se reduce (por el momento).
+ NTFS)
+ # Borrar ficheros de hibernación y paginación de Windows.
+ ogDeleteFile $1 $2 hiberfil.sys 2>/dev/null
+ ogDeleteFile $1 $2 pagefile.sys 2>/dev/null
+ ogDeleteFile $1 $2 swapfile.sys 2>/dev/null
ogUnmount $1 $2 2>/dev/null
## NTFS: Obtiene tamaño mínimo en MB.
#SIZE=$(ntfsresize -fi $PART | awk '/resize at/ {print int($8*1.1)}')
@@ -774,6 +798,10 @@ case "$(ogGetFsType $1 $2)" in
[ "$SIZE" == 0 ] && return 1
ntfsresize -fs "${SIZE}M" $PART <<<"y" || ogRaiseError $OG_ERR_PARTITION "error reduciendo $1,$2" || return $?
;;
+ EXFAT) ;; # No se reduce (por el momento).
+ FAT32|FAT16) ;; # No se reduce (probar "fatresize").
+ HFS|HFSPLUS) ;; # No se reduce (por el momento).
+ UFS) ;; # No se reduce (por el momento).
*) ogRaiseError $OG_ERR_PARTITION "$1,$2"
return $? ;;
esac
@@ -799,10 +827,13 @@ ogUnmount $1 $2 &>/dev/null
case $MODE in
STAGE1)
# echo "primera etapa $*"
- ntfsresize -fi $PART &>/dev/null
+ # Mostramos el error
+ #ntfsresize -fi $PART &>/dev/null
+ ntfsresize -fi $PART | grep -A 10 -e ERROR >&2
RC=`echo $?`
# echo "RC es" $RC
- if [ "$RC" -eq "1" ]
+ # if [ "$RC" -eq "1" ] # con error la salida del grep es 0
+ if [ "$RC" -eq "0" ]
then
echo "0"
return 1
@@ -855,7 +886,7 @@ ogUnlockPartition "$@"
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@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.
+#@version 0.9 - Primera versión para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-03
#*/ ##
@@ -892,10 +923,10 @@ ogUnmountFs "$@"
}
#/**
-# ogUnmountFs int_ndisk int_npartition
+# ogUnmountFs int_ndisk int_nfilesys
#@brief Desmonta un sistema de archivos.
#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
+#@param int_nfilesys nº de orden del sistema de archivos
#@return Nada
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
@@ -903,7 +934,7 @@ ogUnmountFs "$@"
#@version 0.1 - Integracion para Opengnsys - EAC: UmountPartition() en FileSystem.lib
#@author Antonio J. Doblas Viso. Universidad de Malaga
#@date 2008-10-27
-#@version 0.9 - Primera version para OpenGNSys.
+#@version 0.9 - Primera version para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-28
#*/ ##
@@ -948,7 +979,7 @@ fi
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@warning No se desmonta la partición marcada como caché local.
-#@version 0.9 - Versión para OpenGNSys.
+#@version 0.9 - Versión para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009/10/07
#*/ ##
@@ -975,7 +1006,9 @@ done
}
+# AVISO: Componer corretcamente esta función.
function ogGetFreeSize () {
+local particion unit factor valor
if [ $# = 0 ]
then
echo "sintaxis: ogGetFreeSize int_disco int_partition str_SizeOutput [ kB MB GB -default GB]-]" red
@@ -1009,9 +1042,7 @@ then
#echo $valor
#NumberRound $valor
#valor=`NumberRound $valor`;
- ogUnmount $1 $2 1>/dev/null 2>&1
echo $valor
-
fi
}
diff --git a/client/engine/Image.lib b/client/engine/Image.lib
index 6c53d5da..81014462 100755
--- a/client/engine/Image.lib
+++ b/client/engine/Image.lib
@@ -4,133 +4,109 @@
#@brief Librería o clase Image
#@class Image
#@brief Funciones para creación, restauración y clonación de imágenes de sistemas.
-#@version 1.0
+#@version 1.0.5
#@warning License: GNU GPLv3+
#*/
-function ogPartcloneSyntax ()
-{
-#TODO: comprobar como unico parametro particion /dev/sda1
-#COMPAR="partclone.$FS --clone --force --source $PART"
-COMPAR=" -d0 -F -c -s "
-TYPE="$(ogGetFsType `ogDevToDisk $1`)"
-case "$TYPE" in
- EXT[234])
- echo "partclone.extfs $COMPAR $1"
- ;;
- REISERFS|XFS|JFS)
- echo "partclone.dd $COMPAR $1"
- ;;
- NTFS|HNTFS)
- echo "partclone.ntfs $COMPAR $1"
- ;;
- FAT16|FAT32|HFAT16|HFAT32)
- echo "partclone.fat $COMPAR $1"
- ;;
- HFS|HFS+)
- echo "partclone.hfsp $COMPAR $1"
- ;;
- *) ogRaiseError $OG_ERR_PARTITION "$1 $TYPE"
- return $? ;;
-esac
-}
-
#/**
-# ogCreateImageSyntax partition filename [tools] [levelcompresor]
+# ogCreateImageSyntax path_device path_filename [str_tool] [str_compressionlevel]
#@brief Genera una cadena de texto con la instrucción para crear un fichero imagen
-#@param 1 partition identificador linux del dispositivo particion.
-#@param 2 filename path absoluto del fichero imagen
-#@param 3 [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone]
-#@param 4 [opcional] str_levelcompresor nivel de compresion. [0 -none-, 1-lzop-, 2-gzip]
-#@return cadena con el comando que se debe ejecutar.
-#@exception OG_ERR_FORMAT formato incorrecto.
-#@warning En pruebas iniciales
+#@param path_device dispositivo Linux del sistema de archivos
+#@param path_fileneme path absoluto del fichero imagen
+#@param [opcional] str_tool herrmaienta de clonacion [partimage, partclone, ntfsclone]
+#@param [opcional] str_compressionlevel nivel de compresion. [0 -none-, 1-lzop-, 2-gzip]
+#@return str_command - cadena con el comando que se debe ejecutar.
+#@warning Salida nula si se producen errores.
#@TODO introducir las herramientas fsarchiver, dd
-#@TODO introducir el nivel de compresion gzip
#@version 1.0 - Primeras pruebas
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date 2010/02/08
+#@version 1.0.5 - Incrustar códico de antigua función ogPartcloneSyntax
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012/09/14
#*/ ##
-
function ogCreateImageSyntax()
{
-local FS TOOL LEVEL PART IMGFILE BUFFER
+local FS TOOL LEVEL PART IMGFILE BUFFER PARAM1 PARAM2 PARAM3
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME partition filename [tool] [levelcompresor]" \
- "$FUNCNAME /dev/sda1 /opt/opengnsys/images/prueba.img partclone lzop"
+ ogHelp "$FUNCNAME" "$FUNCNAME path_device path_imagefile [str_tool] [str_compressionlevel]" \
+ "$FUNCNAME /dev/sda1 /opt/opengnsys/images/prueba.img partclone lzop" \
+ "$FUNCNAME /dev/sda1 /opt/opengnsys/images/prueba.img"
return
fi
-# Error si no se reciben al menos los 2 parámetros para obtener el valor default.
-[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $?
-
-
-PART=`echo $1`
-IMGFILE=`echo $2`
+# Error si no se reciben entre 2 y 4 parámetros.
+[ $# -ge 2 -a $# -le 4 ] || ogRaiseError $OG_ERR_FORMAT "$*" || return $?
+# Asignación de parámetros.
+PART="$1"
+IMGFILE="$2"
case "$#" in
- "2")
- # Sintaxis por defecto OG PART IMGFILE
- #echo "partimage -M -f3 -o -d -V0 -B gui=no -c -z1 save $PART $IMGFILE"
- # Se comenta la instruccion que debería ir aqui
- ogCreateImageSyntax $1 $2 partclone gzip
- ;;
- "4")
- # Sintaxis condicionada.
- # comprobamos parametro herramienta compresion.
- TOOL=$(echo $3 | tr [A-Z] [a-z])
- #ogCheckProgram $TOOL
- #comprobar parámetro compresor.
- LEVEL=$(echo $4 | tr [A-Z] [a-z])
- #ogCheckProgram $LEVEL
-
- # herramienta
- case "$TOOL" in
- "ntfsclone")
- PARAM1="ntfsclone --force --save-image -O - $PART"
- ;;
- "partimage"|DEFAULT)
- PARAM1="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $PART stdout"
- ;;
- "partclone")
- PARAM1=`ogPartcloneSyntax $PART` || ogRaiseError $OG_ERR_FORMAT || return $?
- ;;
- esac
- # mbuffer
- which mbuffer > /dev/null && PARAM2="| mbuffer -q -m 40M " || PARAM2=" "
+ 2) # Sintaxis por defecto OG PART IMGFILE
+ TOOL="partclone"
+ LEVEL="gzip"
+ ;;
+ 4) # Sintaxis condicionada.
+ TOOL="${3,,}"
+ LEVEL="${4,,}"
+ ;;
+esac
- # nivel de compresion
- case "$LEVEL" in
- "0"|"none")
- PARAM3=" > "
- ;;
- "1"|"lzop")
- PARAM3=" | lzop > "
- ;;
- "2"|"gzip")
- PARAM3=" | gzip -c > "
- ;;
- "3"|"bzip")
- PARAM3=" | bzip -c > "
- ;;
- esac
- #sintaxis final.
- echo "$PARAM1 $PARAM2 $PARAM3 $IMGFILE"
- ;;
+case "$TOOL" in
+ ntfsclone)
+ PARAM1="ntfsclone --force --save-image -O - $PART"
+ ;;
+ partimage|default)
+ PARAM1="partimage -M -f3 -o -d -B gui=no -c -z0 --volume=0 save $PART stdout"
+ ;;
+ partclone)
+ FS="$(ogGetFsType $(ogDevToDisk $PART 2>/dev/null) 2>/dev/null)"
+ umount $PART 2>/dev/null
+ case "$FS" in
+ EXT[234]) PARAM1="partclone.extfs" ;;
+ BTRFS) PARAM1="partclone.btrfs" ;;
+ REISERFS) PARAM1="partclone.reiserfs" ;;
+ REISER4) PARAM1="partclone.reiser4" ;;
+ JFS) PARAM1="partclone.jfs" ;;
+ XFS) PARAM1="partclone.xfs" ;;
+ NTFS) PARAM1="partclone.ntfs" ;;
+ EXFAT) PARAM1="partclone.exfat" ;;
+ FAT16|FAT32) PARAM1="partclone.fat" ;;
+ HFS|HFSPLUS) PARAM1="partclone.hfsp" ;;
+ UFS) PARAM1="partclone.ufs" ;;
+ *) PARAM1="partclone.dd" ;;
+ esac
+ # Por compatibilidad, si no existe el ejecutable usar por defecto "parclone.dd".
+ which $PARAM1 &>/dev/null || PARAM1="partclone.dd"
+ PARAM1="$PARAM1 -d0 -F -c -s $PART"
+ ;;
esac
+# Comprobar que existe mbuffer.
+which mbuffer &>/dev/null && PARAM2="| mbuffer -q -m 40M " || PARAM2=" "
+
+# Nivel de compresion.
+case "$LEVEL" in
+ 0|none) PARAM3=" > " ;;
+ 1|lzop) PARAM3=" | lzop > " ;;
+ 2|gzip) PARAM3=" | gzip -c > " ;;
+ 3|bzip) PARAM3=" | bzip -c > " ;;
+esac
+
+# Sintaxis final.
+[ -n "$PARAM1" ] && echo "$PARAM1 $PARAM2 $PARAM3 $IMGFILE"
}
#/**
-# ogRestoreImageSyntax filename partition [tools] [levelcompresor]
+# ogRestoreImageSyntax path_filename path_device [str_tools] [str_compressionlevel]
#@brief Genera una cadena de texto con la instrucción para crear un fichero imagen
-#@param 1 filename path absoluto del fichero imagen
-#@param 2 partition identificador linux del dispositivo particion.
-#@param 3 [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone]
-#@param 4 [opcional] str_levelcompresor nivel de compresion. [0 -none-, 1-lzop-, 2-gzip]
+#@param path_device dispositivo Linux del sistema de archivos
+#@param path_fileneme path absoluto del fichero imagen
+#@param [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone]
+#@param [opcional] str_compressionlevel nivel de compresion. [0 -none-, 1-lzop-, 2-gzip]
#@return cadena con el comando que se debe ejecutar.
#@exception OG_ERR_FORMAT formato incorrecto.
#@warning En pruebas iniciales
@@ -153,8 +129,8 @@ if [ "$*" == "help" ]; then
return
fi
-# Error si no se reciben al menos 2 parámetros.
-[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $?
+# Error si no se reciben entre 2 y 4 parámetros.
+[ $# -ge 2 -a $# -le 4 ] || ogRaiseError $OG_ERR_FORMAT "$*" || return $?
# controlamos que el parametro 1 (imagen) es tipo file.
[ -f $1 ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $?
@@ -226,12 +202,14 @@ fi
#/**
-# ogCreateImage int_ndisk int_npartition str_repo path_image
+# ogCreateImage int_ndisk int_npartition str_repo path_image [str_tools] [str_compressionlevel]
#@brief Crea una imagen a partir de una partición.
#@param int_ndisk nº de orden del disco
#@param int_npartition nº de orden de la partición
#@param str_repo repositorio de imágenes (remoto o caché local)
#@param path_image camino de la imagen (sin extensión)
+#@param [opcional] str_tools herrmaienta de clonacion [partimage, partclone, ntfsclone]
+#@param [opcional] str_compressionlevel nivel de compresion. [0 -none-, 1-lzop-, 2-gzip]
#@return (nada, por determinar)
#@note repo = { REPO, CACHE }
#@exception OG_ERR_FORMAT formato incorrecto.
@@ -242,13 +220,16 @@ fi
#@warning En pruebas iniciales
#@todo Comprobaciones, control de errores, definir parámetros, etc.
#@version 0.1 - Integracion para Opengnsys - HIDRA:CrearImagen{EXT3, NTFS}.sh; EAC: CreateImageFromPartition () en Deploy.lib
-#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@author Ramon Gomez, ETSII Universidad de Sevilla
#@Date 2008/05/13
#@author Antonio J. Doblas Viso. Universidad de Malaga
#@date 2008/10/27
#@version 0.9 - Versión en pruebas para OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009/10/07
+#@version 1.0 - Llama a función ogCreateImageSyntax para generar la llamada al comando.
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2010/02/08
#*/ ##
function ogCreateImage ()
{
@@ -261,8 +242,8 @@ if [ "$*" == "help" ]; then
"$FUNCNAME 1 1 REPO /aula1/winxp"
return
fi
-# Error si no se reciben 4 parámetros.
-[ $# -lt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $?
+# Error si no se reciben entre 4 y 6 parámetros.
+[ $# -ge 4 -a $# -le 6 ] || ogRaiseError $OG_ERR_FORMAT "$*" || return $?
# Comprobar que no está bloqueada ni la partición, ni la imagen.
PART="$(ogDiskToDev $1 $2)" || return $?
@@ -270,15 +251,18 @@ if ogIsLocked $1 $2; then
ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $1, $2"
return $?
fi
+
IMGTYPE="img" # Extensión genérica de imágenes.
IMGDIR=$(ogGetParentPath "$3" "$4")
-
[ -n "$IMGDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$3 $(dirname $4)" || return $?
+
IMGFILE="$IMGDIR/$(basename "$4").$IMGTYPE"
if ogIsImageLocked "$IMGFILE"; then
ogRaiseError $OG_ERR_LOCKED "$MSG_IMAGE $3, $4"
return $?
fi
+# Generar la instruccion a ejecutar antes de aplicar los bloqueos.
+PROGRAM=$(ogCreateImageSyntax $PART $IMGFILE $5 $6)
# Desmontar partición, bloquear partición e imagen.
ogUnmount $1 $2 2>/dev/null
ogLock $1 $2 || return $?
@@ -286,9 +270,6 @@ ogLockImage "$3" "$4.$IMGTYPE" || return $?
# Crear Imagen.
trap "ogUnlock $1 $2; ogUnlockImage "$3" "$4.$IMGTYPE"; rm -f $IMGFILE" 1 2 3 6 9
-#Solicitamos la generación de la instruccion a ejecutar
-PROGRAM=`ogCreateImageSyntax $PART $IMGFILE $5 $6`
-echo $PROGRAM
eval $PROGRAM
# Controlar salida de error y desbloquear partición.
@@ -333,7 +314,7 @@ if [ "$*" == "help" ]; then
return
fi
# Error si no se reciben 3 parámetros.
-[ $# -lt 3 ] && ogRaiseError $OG_ERR_FORMAT && return $?
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
DISK=$(ogDiskToDev "$1") || return $?
IMGDIR=$(ogGetParentPath "$2" "$3")
@@ -371,7 +352,7 @@ if [ "$*" == "help" ]; then
return
fi
# Error si no se reciben 3 parámetros.
-[ $# -lt 3 ] && ogRaiseError $OG_ERR_FORMAT && return $?
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
DISK=$(ogDiskToDev "$1") || return $?
IMGDIR=$(ogGetParentPath "$2" "$3")
@@ -441,11 +422,11 @@ 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 $?
+[ $# == 1 -o $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Comprobar que existe directorio de imagen
IMGDIR=$(ogGetParentPath $@) || return $?
# Crear fichero de bloqueo.
-touch $IMGDIR/$(basename "${!#}").lock
+touch $IMGDIR/$(basename "${!#}").lock 2>/dev/null || ogRaiseError $OG_ERR_NOTWRITE "$*" || return $?
}
@@ -491,7 +472,7 @@ if [ "$*" == "help" ]; then
return
fi
# Error si no se reciben 4 parámetros.
-[ $# -lt 4 ] && return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+[ $# == 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Procesar parámetros.
PART="$(ogDiskToDev $3 $4)" || return $(ogRaiseError $OG_ERR_NOTFOUND " $3 $4"; echo $?)
#IMGTYPE=$(ogGetImageType "$1" "$2")
@@ -506,8 +487,6 @@ IMGSIZE=$(ogGetImageSize "$1" "$2") || return $(ogRaiseError $OG_ERR_IMAGE " $1
#TODO:
#Si la particion no esta formateado o tiene problemas formateamos
ogMount $3 $4 || ogFormat $3 $4
-#PARTSIZE=$(parted -sm $DISK unit kB print | \
-# awk -F: -v np=$4 '{if ($1==np) {gsub(/kB/,""); print $4} } ')
PARTSIZE=$(ogGetPartitionSize $3 $4)
if [ $IMGSIZE -gt $PARTSIZE ]; then
ogRaiseError $OG_ERR_IMGSIZEPARTITION " $PARTSIZE < $IMGSIZE"
@@ -522,17 +501,18 @@ if ogIsLocked $3 $4; then
ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $3, $4"
return $?
fi
-# Desmontar y bloquear partición.
-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.
+# Solicitamos la generación de la instruccion a ejecutar
# Atención: no se comprueba el tipo de sistema de archivos.
# Atención: no se comprueba incongruencia entre partición e imagen.
-#Solicitamos la generación de la instruccion a ejecutar
PROGRAM=`ogRestoreImageSyntax $IMGFILE $PART`
-echo $PROGRAM
+
+# Desmontar y bloquear partición.
+ogUnmount $3 $4 2>/dev/null || return $(ogRaiseError $OG_ERR_PARTITION " $3 $4"; echo $?)
+ogLock $3 $4 || return $?
+trap "ogUnlock $3 $4" 1 2 3 6 9
+
+# Ejecutar restauración según el tipo de imagen.
eval $PROGRAM
ERRCODE=$?
@@ -572,7 +552,7 @@ if [ "$*" == "help" ]; then
return
fi
# Error si no se reciben 3 parámetros.
-[ $# -lt 3 ] && ogRaiseError $OG_ERR_FORMAT && return $?
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Procesar parámetros.
DISK=$(ogDiskToDev "$3") || return $?
IMGFILE=$(ogGetPath "$1" "$2.mbr") || return $?
@@ -608,7 +588,7 @@ if [ "$*" == "help" ]; then
return
fi
# Error si no se reciben 3 parámetros.
-[ $# -lt 3 ] && ogRaiseError $OG_ERR_FORMAT && return $?
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Procesar parámetros.
DISK=$(ogDiskToDev "$3") || return $?
IMGFILE=$(ogGetPath "$1" "$2.mbr") || return $?
@@ -641,7 +621,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 $?
+[ $# == 1 -o $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Borrar fichero de bloqueo para la imagen.
rm -f $(ogGetPath $@.lock)
@@ -680,7 +660,7 @@ fi
#comprobando que el parametro uno es un file.
[ -f $1 ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $?
-local TOOLS COMPRESSOR IMGFILE FILEHEAD FS SIZE SIZEFACTOR PARTIMAGEINFO PARTCLONEINFO NTFSCLONEINFO IMGDETECT
+local TOOLS COMPRESSOR IMGFILE FILEHEAD FS FSPLUS SIZE SIZEFACTOR PARTIMAGEINFO PARTCLONEINFO NTFSCLONEINFO IMGDETECT
IMGDETECT="FALSE"
IMGFILE=$1
@@ -692,13 +672,24 @@ $($COMPRESSOR -dc $IMGFILE 2>/dev/null | head > $FILEHEAD) || ogRaiseError $OG_E
## buscando Primera opción.
if [ "$IMGDETECT" == "FALSE" ]
then
- PARTCLONEINFO=$(partclone.info $FILEHEAD 2>&1)
+ PARTCLONEINFO=$(LC_ALL=C partclone.info $FILEHEAD 2>&1)
if `echo $PARTCLONEINFO | grep size > /dev/null`
then
TOOLS=PARTCLONE
FS=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); print toupper($8);}')
- echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1000000 || SIZEFACTOR=1024
- SIZE=$(echo $PARTCLONEINFO | awk -v FACTOR=$SIZEFACTOR '{gsub(/\: /,"\n"); printf "%d\n", $11*FACTOR;}')
+ if [[ "$FS" == "HFS" || "$FS" == "HFSPLUS" || "$FS" == "FAT32" ]]; then
+ FSPLUS=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); print toupper($9);}')
+ echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1000000 || SIZEFACTOR=1024
+ if [ "$FSPLUS" == "PLUS" ]; then
+ FS=$FS$FSPLUS
+ SIZE=$(echo $PARTCLONEINFO | awk -v FACTOR=$SIZEFACTOR '{printf "%d\n", $17*FACTOR;}')
+ else
+ SIZE=$(echo $PARTCLONEINFO | awk -v FACTOR=$SIZEFACTOR '{printf "%d\n", $16*FACTOR;}')
+ fi
+ else
+ echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1000000 || SIZEFACTOR=1024
+ SIZE=$(echo $PARTCLONEINFO | awk -v FACTOR=$SIZEFACTOR '{gsub(/\: /,"\n"); printf "%d\n", $11*FACTOR;}')
+ fi
IMGDETECT="TRUE"
fi
fi
@@ -775,8 +766,8 @@ if [ "$*" == "help" ]; then
"$FUNCNAME REPO /aula1/winxp ==> 5642158"
return
fi
-# Error si no se reciben menos de 2 parámetros.
-[ $# -lt 2 ] && ogRaiseError $OG_ERR_FORMAT && return $?
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Error si el fichero de imagen no es accesible.
IMGFILE=$(ogGetPath "$1" "$2.img") || return $?
[ -r "$IMGFILE" ] || ogRaiseError OG_ERR_NOTFOUND "$IMGFILE" || return $?
diff --git a/client/engine/Inventory.lib b/client/engine/Inventory.lib
index b1173dd7..60da936f 100755
--- a/client/engine/Inventory.lib
+++ b/client/engine/Inventory.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase Inventory
#@class Inventory
#@brief Funciones para recogida de datos de inventario de hardware y software de los clientes.
-#@version 0.9.2
+#@version 1.0.5
#@warning License: GNU GPLv3+
#*/
@@ -29,28 +29,34 @@ fi
#/**
-# ogGetOsVersion int_ndisk int_npartition
+# ogGetOsVersion int_ndisk int_nfilesys
#@brief Devuelve la versión del sistema operativo instalado en un sistema de archivos.
#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
-#@return OSType:OSVersion
-#@note TipoSistema = { Linux, Windows }
+#@param int_nfilesys nº de orden de la partición
+#@return OSType:OSVersion - tipo y versión del sistema operativo.
+#@note OSType = { Android, BSD, GrubLoader, Hurd, Linux, MacOS, Solaris, Windows, WinLoader }
#@note Requisitos: awk, head, chroot
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositiv
#@exception OG_ERR_PARTITION Fallo al montar el sistema de archivos.
-#@version 0.9 - Primera versión para OpenGNSys
+#@version 0.9 - Primera versión para OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-15
+#@version 1.0.4 - Incluir tipos BSD, MacOS y Solaris.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2012-06-29
+#@version 1.0.5 - Incluir tipos GrubLoader, Hurd y WinLoader, leer por defecto fichero /etc/os-release.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2013-10-07
#*/ ##
function ogGetOsVersion ()
{
# Variables locales.
-local MNTDIR TYPE DISTRIB VERSION FILE
+local MNTDIR TYPE DISTRIB VERSION IS64BIT FILE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
- "$FUNCNAME 1 2 => Linux:Ubuntu 11.04 64 bits"
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
+ "$FUNCNAME 1 2 => Linux:Ubuntu precise (12.04 LTS) 64 bits"
return
fi
# Error si no se reciben 2 parametros.
@@ -59,35 +65,108 @@ fi
# Montar la particion, si no lo estaba previamente.
MNTDIR=$(ogMount $1 $2) || return $?
-# Elección del tipo de sistema operativo.
-case "$(ogGetFsType $1 $2)" in
- EXT[234] | REISERFS | REISER4)
- TYPE="Linux"
- # Para Linux: leer descripción.
- VERSION=$(chroot $MNTDIR lsb_release -d 2>/dev/null| awk -F: '{gsub (/\t/,""); print $2}')
- # Si no se puede obtener, buscar en ficheros del sistema.
- if [ -z "$VERSION" ]; then
- FILE="$MNTDIR/etc/lsb-release"
- [ -r $FILE ] && VERSION="$(awk 'BEGIN {FS="="}; $1~/DESCRIPTION/ {gsub(/\"/,"",$2); print $2}' $FILE)"
- for DISTRIB in redhat SuSE mandrake; do
- FILE="$MNTDIR/etc/${DISTRIB}-release"
- [ -r $FILE ] && VERSION="$(head -1 $FILE)"
- done
- FILE="$MNTDIR/etc/arch-release"
- [ -r $FILE ] && VERSION="Arch Linux"
- fi
- [ -e $MNTDIR/lib64 ] && VERSION="$VERSION $MSG_64BIT"
- ;;
- NTFS | HNTFS | FAT32 | HFAT32)
- TYPE="Windows"
- # Para Windows: leer la version del registro.
- VERSION=$(ogGetRegistryValue $MNTDIR software '\Microsoft\Windows NT\CurrentVersion\ProductName')
- [ -n "$(ogGetRegistryValue $MNTDIR software '\Microsoft\Windows\CurrentVersion\ProgramW6432Dir' 2>/dev/null)" ] && VERSION="$VERSION $MSG_64BIT"
- ;;
-esac
+# Buscar tipo de sistema operativo.
+# Para GNU/Linux: leer descripción.
+TYPE="Linux"
+FILE="$MNTDIR/etc/os-release"
+[ -r $FILE ] && VERSION="$(awk -F= '$1~/PRETTY_NAME/ {gsub(/\"/,"",$2); print $2}' $FILE)"
+# Si no se puede obtener, buscar en ficheros del sistema.
+if [ -z "$VERSION" ]; then
+ FILE="$MNTDIR/etc/lsb-release"
+ [ -r $FILE ] && VERSION="$(awk -F= '$1~/DESCRIPTION/ {gsub(/\"/,"",$2); print $2}' $FILE)"
+ for DISTRIB in redhat SuSE mandrake gentoo; do
+ FILE="$MNTDIR/etc/${DISTRIB}-release"
+ [ -r $FILE ] && VERSION="$(head -1 $FILE)"
+ done
+ FILE="$MNTDIR/etc/arch-release"
+ [ -r $FILE ] && VERSION="Arch Linux"
+ FILE="$MNTDIR/etc/slackware-version"
+ [ -r $FILE ] && VERSION="Slackware $(cat $FILE)"
+fi
+# Si no se encuentra, intentar ejecutar "lsb_release".
+[ -z "$VERSION" ] && VERSION=$(chroot $MNTDIR lsb_release -d 2>/dev/null | awk -F":\t" '{print $2}')
+# Comprobar Linux de 64 bits.
+[ -n "$VERSION" ] && [ -e $MNTDIR/lib64 ] && IS64BIT="$MSG_64BIT"
+# Para cargador GRUB, comprobar fichero de configuración.
+if [ -z "$VERSION" ]; then
+ TYPE="GrubLoader"
+ for FILE in $MNTDIR/{,boot/}grub/menu.lst; do
+ [ -r $FILE ] && VERSION="GRUB Loader"
+ done
+ for FILE in $MNTDIR/{,boot/}{grub{,2},EFI/*}/grub.cfg; do
+ [ -r $FILE ] && VERSION="GRUB2 Loader"
+ done
+fi
+# Para Android, leer fichero de propiedades.
+if [ -z "$VERSION" ]; then
+ TYPE="Android"
+ FILE="$MNTDIR/android*/system/build.prop"
+ [ -r $FILE ] && VERSION="Android $(awk -F= '$1~/(product.brand|build.version.release)/ {print $2}' $FILE | tr '\n' ' ')"
+ [ -e $MNTDIR/lib64 ] && IS64BIT="$MSG_64BIT"
+fi
+# Para GNU/Hurd, comprobar fichero de inicio (basado en os-prober).
+if [ -z "$VERSION" ]; then
+ TYPE="Hurd"
+ FILE="$MNTDIR/hurd/init"
+ [ -r $FILE ] && VERSION="GNU/Hurd"
+fi
+# Para Windows: leer la version del registro.
+if [ -z "$VERSION" ]; then
+ TYPE="Windows"
+ VERSION=$(ogGetRegistryValue $MNTDIR software '\Microsoft\Windows NT\CurrentVersion\ProductName' 2>/dev/null)
+ [ -n "$(ogGetRegistryValue $MNTDIR software '\Microsoft\Windows\CurrentVersion\ProgramW6432Dir' 2>/dev/null)" ] && IS64BIT="$MSG_64BIT"
+fi
+# Para cargador Windows: buscar versión en fichero BCD (basado en os-prober).
+if [ -z "$VERSION" ]; then
+ TYPE="WinLoader"
+ FILE="$(ogGetPath $MNTDIR/boot/bcd)"
+ if [ -n "$FILE" ]; then
+ for DISTRIB in "Windows 8" "Windows 7" "Windows Vista" \
+ "Windwos Server 2008" "Windwos Server 2008 R2" \
+ "Windwos Recovery Environment"; do
+ if grep -qs "$(echo "$DISTRIB" | sed 's/./&./g')" $FILE; then
+ VERSION="$DISTRIB loader"
+ fi
+ done
+ fi
+fi
+# Para MacOS: detectar kernel y completar con fichero plist de información del sistema.
+if [ -z "$VERSION" ]; then
+ TYPE="MacOS"
+ # Kernel de Mac OS.
+ FILE="$MNTDIR/mach_kernel"
+ [ -n "$(file -b $FILE | grep 'Mach-O')" ] && VERSION="Mac OS"
+ [ -n "$(file -b $FILE | grep 'Mach-O 64-bit')" ] && IS64BIT="$MSG_64BIT"
+ # Datos de configuración de versión de Mac OS.
+ FILE="$MNTDIR/System/Library/CoreServices/SystemVersion.plist"
+ [ -r $FILE ] && VERSION=$(awk -F"[<>]" '
+ /ProductName/ {getline;s=$3}
+ /ProductVersion/ {getline;v=$3}
+ END {print s,v}' $FILE)
+ # Datos de recuperación de Mac OS.
+ FILE="$MNTDIR/com.apple.recovery.boot"
+ [ -r $FILE -a -n "$VERSION" ] && VERSION="$VERSION recovery"
+fi
+# Para FreeBSD: obtener datos del Kernel.
+### TODO Revisar solución.
+if [ -z "$VERSION" ]; then
+ TYPE="BSD"
+ FILE="$MNTDIR/boot/kernel/kernel"
+ if [ -r $FILE ]; then
+ VERSION="$(strings $FILE|awk '/@.*RELEASE/ {print $1,$2}')"
+ [ -n "$(file -b $FILE | grep 'x86-64')" ] && IS64BIT="$MSG_64BIT"
+ fi
+fi
+# Para Solaris: leer el fichero de versión.
+### TODO Revisar solución.
+if [ -z "$VERSION" ]; then
+ TYPE="Solaris"
+ FILE="$MNTDIR/etc/release"
+ [ -r $FILE ] && VERSION="$(head -1 $FILE)"
+fi
# Mostrar resultado y salir sin errores.
-[ -n "$VERSION" ] && echo "$TYPE:$VERSION"
+[ -n "$VERSION" ] && echo "$TYPE:$VERSION $IS64BIT"
return 0
}
@@ -97,8 +176,8 @@ return 0
#@brief Devuelve el tipo del sistema operativo instalado.
#@param int_ndisk nº de orden del disco
#@param int_npartition nº de orden de la partición
-#@return OSType
-#@note OSType = { Linux, Windows }
+#@return OSType - Tipo de sistema operativo.
+#@note OSType = { Android, BSD, Linux, MacOS, Windows }
#@see ogGetOsVersion
#*/ ##
function ogGetOsType ()
@@ -120,7 +199,7 @@ ogGetOsVersion "$@" | cut -sf1 -d:
#@warning Se ignoran los parámetros de entrada.
#@note TipoDispositivo = { ata, bio, boa, cdr, cpu, dis, fir, mem, mod, mul, net, ser, vga }
#@note Requisitos: lshw, awk
-#@version 0.1 - Primeras pruebas con OpenGNSys
+#@version 0.1 - Primeras pruebas con OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-07-28
#*/ ##
@@ -174,9 +253,12 @@ lshw | awk 'BEGIN {type="mod";}
#@warning Se ignoran los parámetros de entrada.
#@note Requisitos: ...
#@todo Detectar software en Linux
-#@version 0.1 - Primeras pruebas con OpenGNSys
+#@version 0.1 - Primeras pruebas con OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-23
+#@version 1.0.5 - Aproximación para inventario de software de Mac OS.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2013-10-08
#*/ ##
function ogListSoftware ()
{
@@ -196,7 +278,7 @@ TYPE=$(ogGetFsType $1 $2) || return $?
MNTDIR=$(ogMount $1 $2) || return $?
case "$TYPE" in
- EXT[234]|REISERFS|REISER4)
+ EXT[234]|REISERFS|REISER4) # Software de GNU/Linux.
# Procesar paquetes dpkg.
DPKGDIR="${MNTDIR}/var/lib/dpkg"
if [ -r $DPKGDIR ]; then
@@ -238,7 +320,7 @@ case "$TYPE" in
ls -A $PACMANDIR
fi
;;
- NTFS|HNTFS|FAT32|HFAT32)
+ NTFS|HNTFS|FAT32|HFAT32) # Software de Windows.
# Claves de registro para programas instalados: formato "{clave}".
KEYS=$(ogListRegistryKeys $MNTDIR software '\Microsoft\Windows\CurrentVersion\Uninstall')
KEYS32=$(ogListRegistryKeys $MNTDIR software '\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall')
@@ -258,6 +340,13 @@ case "$TYPE" in
fi
done) | sort | uniq
;;
+ HFS|HFSPLUS) # Software de Mac OS.
+ # Listar directorios de aplicaciones (falta buscar versiones en ficheros .plist).
+ find "${MNTDIR}/Applications" -type d -name "*.app" -prune -print | \
+ while read k; do
+ echo "$(basename "$k" .app)"
+ done | sort
+ ;;
*) ogRaiseError $OG_ERR_PARTITION "$1, $2"
return $? ;;
esac
diff --git a/client/engine/Net.lib b/client/engine/Net.lib
index b7534e20..10f55abd 100755
--- a/client/engine/Net.lib
+++ b/client/engine/Net.lib
@@ -92,25 +92,6 @@ HOST="$HOSTNAME"
#/**
-# ogGetNetInterface
-#@brief Muestra la interfaz de red del sistema
-#@return str_interface - interfaz de red
-#@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing
-#@note Usa las variables utilizadas por el initrd "/etc/net-ethX.conf
-#@author Antonio J. Doblas Viso. Universidad de Malaga.
-#@date 2011-02-24
-#*/ ##
-function ogGetNetInterface ()
-{
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => eth0"
- return
-fi
-[ -n "$DEVICE" ] && echo "$DEVICE"
-}
-
-
-#/**
# ogGetIpAddress
#@brief Muestra la dirección IP del sistema
#@return str_ip - Dirección IP
@@ -132,8 +113,8 @@ if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 192.168.0.10"
return
fi
-if [ -n $IPV4ADDR ]; then
- IP=$IPV4ADDR
+if [ -n "$IPV4ADDR" ]; then
+ IP="$IPV4ADDR"
else
# Obtener direcciones IP.
if [ -n "$DEVICE" ]; then
@@ -143,7 +124,7 @@ else
fi
fi
# Mostrar solo la primera.
-echo ${IP%%/*} # (comentario para Doxygen) */
+echo "${IP%%/*}" # (comentario para Doxygen) */
}
@@ -167,9 +148,9 @@ if [ "$*" == "help" ]; then
fi
# Obtener direcciones Ethernet.
if [ -n "$DEVICE" ]; then
- MAC=$(ip -o address show up dev "$DEVICE" 2>/dev/null | awk '{sub (/.*\\/, ""); if ($1~/ether/) printf ("%s ", toupper($2));}')
+ MAC=$(ip -o link show up dev "$DEVICE" 2>/dev/null | awk '{sub (/.*\\/, ""); if ($1~/ether/) printf ("%s ", toupper($2));}')
else
- MAC=$(ip -o address show up | awk '$2!~/lo/ {sub (/.*\\/, ""); if ($1~/ether/) printf ("%s ", toupper($2));}')
+ MAC=$(ip -o link show up | awk '$2!~/lo/ {sub (/.*\\/, ""); if ($1~/ether/) printf ("%s ", toupper($2));}')
fi
# Mostrar sólo la primera.
echo ${MAC%% *}
@@ -177,6 +158,25 @@ echo ${MAC%% *}
#/**
+# ogGetNetInterface
+#@brief Muestra la interfaz de red del sistema
+#@return str_interface - interfaz de red
+#@version 1.0 - Integración OpenGnSys 0.10 Opengnsys 0.10-testing
+#@note Usa las variables utilizadas por el initrd "/etc/net-ethX.conf
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011-02-24
+#*/ ##
+function ogGetNetInterface ()
+{
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => eth0"
+ return
+fi
+[ -n "$DEVICE" ] && echo "$DEVICE"
+}
+
+
+#/**
# ogGetRepoIp
#@brief Muestra la dirección IP del repositorio de datos.
#@return str_ip - Dirección IP
@@ -231,3 +231,39 @@ if [ -n "$OPENGNSYS" ]; then
fi
}
+
+#/**
+# ogMakeGroupDir [ str_repo ]
+#@brief Crea el directorio para el grupo del cliente.
+#@param str_repo repositorio de imágenes (opcional)
+#@return (nada)
+#@note repo = { REPO, CACHE } REPO por defecto
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@version 1.0.5 - Primera versión para OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2013-09-26
+#*/
+function ogMakeGroupDir ()
+{
+local REPO DIR GROUP
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME str_repo" \
+ "$FUNCNAME" "$FUNCNAME REPO"
+ return
+fi
+# Error si se recibe más de 1 parámetro.
+case $# in
+ 0) REPO="REPO" ;;
+ 1) REPO="$1" ;;
+ *) ogRaiseError $OG_ERR_FORMAT "$*"
+ return $? ;;
+esac
+# Comprobar tipo de repositorio.
+DIR=$(ogGetPath "$REPO" / 2>/dev/null)
+[ -n "$DIR" ] || ogRaiseError $OG_ERR_FORMAT "$1"
+GROUP="$(ogGetGroupName)"
+if [ -n "$GROUP" ]; then
+ mkdir -p "$DIR/groups/$GROUP" 2>/dev/null
+fi
+}
+
diff --git a/client/engine/PostConf.lib b/client/engine/PostConf.lib
index 647423a3..24fb00d8 100755
--- a/client/engine/PostConf.lib
+++ b/client/engine/PostConf.lib
@@ -4,10 +4,147 @@
#@brief Librería o clase PostConf
#@class PostConf
#@brief Funciones para la postconfiguración de sistemas operativos.
-#@version 1.0.4
+#@version 1.0.5
#@warning License: GNU GPLv3+
#*/
+#/**
+# ogInstallMiniSetup int_ndisk int_npartition str_filename [str_admuser str_admpassword bool_autologin [str_autouser str_autopassword] ]
+#@brief Metafunción para instalar archivo que se ejecutará en el arranque de Windows.
+#@see ogInstallFirstBoot ogInstallRunonce
+#*/ ##
+function ogInstallMiniSetup ()
+{
+case $# in
+ 3) # Ejecución en el primer arranque de la máquina.
+ ogInstallFirstBoot "$@" ;;
+ 6|8) # Ejecución en el "runonce".
+ ogInstallRunonce "$@" ;;
+ *) ogRaiseError $OG_ERR_FORMAT
+ exit $? ;;
+esac
+}
+
+
+#/**
+# ogInstallFirstBoot int_ndisk int_npartition str_filename
+#@brief Crea unas claves del registro y el archivo cmd que se ejecutara en el primer arranque estando la maquina en un estado bloqueado
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_filename nombre del archivo .cmd a ejecutar en el arranque
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@note El archivo estará en system32 y será visible por el sistema.
+#@version 1.0.2 - Nueva función
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2011-06-29
+#@version 1.0.4 - Heredada de antigua función ogInstallMiniSetup.
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2012-04-16
+#*/ ##
+function ogInstallFirstBoot ()
+{
+local MNTDIR DIR CMDDIR CMDFILE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename" \
+ "$FUNCNAME 1 1 filename.cmd"
+ return
+fi
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Comprobar que existe el directorio del fichero de comandos.
+MNTDIR=$(ogMount "$1" "$2") || return $?
+for i in winnt windows; do
+ DIR=$(ogGetPath $MNTDIR/$i/system32)
+ [ -n "$DIR" ] && CMDDIR=$DIR
+done
+[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MNTDIR/windows/system32" || return $?
+CMDFILE="$CMDDIR/$3"
+
+# Creamos el archivo cmd y creamos un par de comandos para que una vez acabe la
+# postconfiguracion resetee el mini setup, sino lo haria en cada arranque.
+cat > "$CMDFILE" << EOF
+REG ADD HKLM\System\Setup /v SystemSetupInProgress /t REG_DWORD /d 0 /f
+REG ADD HKLM\System\Setup /v CmdLine /t REG_SZ /d "" /f
+EOF
+
+# Crear los valores de registro necesarios para que se haga la ejecución del .cmd al aranque.
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SystemSetupInProgress" 1
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SetupType" 4
+#ogDeleteRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine"
+ogAddRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine"
+ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" "cmd.exe /c $(basename $CMDFILE)"
+}
+
+
+#/**
+# ogInstallRunonce int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]
+#@brief Crea el archivo cmd que se ejecutara en el runonce de un usuario administrador
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_filename nombre del archivo .cmd a ejecutar en el arranque (estara en system32 y sera visible por el sistema)
+#@param str_adm_user usuario administrador para hacer autologin y ejecutar el runonce
+#@param str_adm_password password del usuario administrador
+#@param bool_autologin si despues de la postconfiguracion queremos que la maquina haga autologin (0 o 1)
+#@param str_auto_user Usuario con el que queremos que haga autologin despues de la postconfiguracion
+#@param str_auto_password Password del usuario que hara autologin
+#@return (nada)
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 1.0.2 - Nueva función
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2011-06-29
+#@version 1.0.4 - Heredado de antigua función ogInstallMiniSetup
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2012-04-16
+#*/ ##
+function ogInstallRunonce ()
+{
+local MOUNTPOINT DIR CMDDIR CMDFILE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]" \
+ "$FUNCNAME 1 1 filename.cmd administrator passadmin 1 userauto passuserauto" \
+ "$FUNCNAME 1 1 filename.cmd administrator passadmin 0"
+ return
+fi
+# Error si no se reciben 6 u 8 parámetros.
+[ $# == 6 -o $# == 8 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Punto de montaje.
+MOUNTPOINT="$(ogGetPath "$1" "$2" /)"
+# Comprobar que existe el directorio del fichero de comandos.
+for i in winnt windows; do
+ DIR=$(ogGetPath $MOUNTPOINT/$i/system32)
+ [ -n "$DIR" ] && CMDDIR=$DIR
+done
+[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/Windows/System32" || return $?
+CMDFILE="$CMDDIR/$3"
+
+if [ $6 == 0 ]; then
+ # Si no queremos hacer autologin despues de la postconfiguracion lo indicamos en las claves de registro
+ cat > "$CMDFILE" << EOF
+DEL C:\ogboot.*
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "" /f
+REG DELETE "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f
+EOF
+else
+ # Si queremos hacer autologin despues de la postconfiguracion introducimos la informacion en las claves de registro
+ cat > "$CMDFILE" << EOF
+DEL C:\ogboot.*
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "$7" /f
+REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "$8" /f
+EOF
+fi
+#Creamos las claves de registro necesarias para que meter el cmd en el runonce del usuario y este haga autologin
+ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' "C:\windows\system32\\$3" 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 1 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$4" 2>/dev/null
+ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' 2>/dev/null
+ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' "$5" 2>/dev/null
+}
#/**
# ogAddCmd int_ndisk int_npartition str_filename str_commands
@@ -91,7 +228,7 @@ ogAddCmd $1 $2 "$3" "CSCRIPT joindomain.vbs"
# Eliminamos el script porque tiene el usuario de administrador de dominio en claro
ogAddCmd $1 $2 "$3" "DEL /Q C:\Windows\System32\joindomain.vbs"
# Metemos unas claves de registro para que el dominio salga seleccionado por defecto
-ogAddCmd $1 $2 "$3" "REG ADD \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v DefaultDomainName /t REG_SZ /d \"$3\" /f"
+ogAddCmd $1 $2 "$3" "REG ADD \"HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\" /v DefaultDomainName /t REG_SZ /d \"$4\" /f"
# Creamos el archivo joindomain.vbs que nos introduce la maquina en el dominio
cat > "$CMDDIR/joindomain.vbs" << EOF
@@ -123,7 +260,7 @@ EOF
#/**
# ogInstallLinuxClient int_ndisk int_filesys
-#@brief Instala el cliente OpenGnSys para sistemas operativos Linux.
+#@brief Instala el cliente OpenGnSys para sistemas operativos GNU/Linux.
#@param int_ndisk nº de orden del disco
#@param int_filesys nº de orden del sistema de archivos
#@return (nada)
@@ -134,11 +271,14 @@ EOF
#@version 1.0.4 - Primera adaptación para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2012-04-10
+#@version 1.0.5 - Evitar duplicidad de instalación del cliente.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2014-03-06
#*/ ##
function ogInstallLinuxClient ()
{
# Variables locales.
-local PART MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL
+local MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
@@ -149,10 +289,8 @@ fi
# Error si no se reciben 2 parámetros.
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Obtener sistema de archvios.
-PART="$(ogDiskToDev $1 $2)" || return $?
-# Comprobar si el sistema de archivos no está bloqueado.
-MNTDIR=$(ogMount $1 $2) 2>/dev/null
-[ -n "$MNTDIR" ] || ogRaiseError OG_ERR_PARTITION "$1, $2" || return $?
+MNTDIR=$(ogMount $1 $2) || return $?
+
# Comprobar si existe el cliente y los directorios y ficheros destino.
CLIENTFILE=$OGLIB/ogclient/ogAdmLnxClient
[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $?
@@ -185,7 +323,8 @@ awk -v sbin=$SBINDIR -v etc=$ETCDIR \
if (loc==0) {
printf "%s/ogAdmLnxClient -f %s/ogAdmLnxClient.cfg &\n",sbin,etc;
loc=1; }
- print; }
+ if (! /ogAdmLnxClient/)
+ print; }
}' /tmp/rclocal > $MNTDIR/$RCLOCAL
rm /tmp/rclocal
ogUnlock $1 $2
@@ -193,150 +332,11 @@ ogUnlock $1 $2
#/**
-# ogInstallMiniSetup int_ndisk int_npartition str_filename [str_admuser str_admpassword bool_autologin [str_autouser str_autopassword] ]
-#@brief Metafunción para instalar archivo que se ejecutará en el arranque de Windows.
-#@see ogInstallFirstBoot ogInstallRunonce
-#*/ ##
-function ogInstallMiniSetup ()
-{
-case $# in
- 3) # Ejecución en el primer arranque de la máquina.
- ogInstallFirstBoot "$@" ;;
- 6|8) # Ejecución en el "runonce".
- ogInstallRunonce "$@" ;;
- *) ogRaiseError $OG_ERR_FORMAT
- exit $? ;;
-esac
-}
-
-
-#/**
-# ogInstallFirstBoot int_ndisk int_npartition str_filename
-#@brief Crea unas claves del registro y el archivo cmd que se ejecutara en el primer arranque estando la maquina en un estado bloqueado
-#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
-#@param str_filename nombre del archivo .cmd a ejecutar en el arranque
-#@return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@note El archivo estará en system32 y será visible por el sistema.
-#@version 1.0.2 - Nueva función
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2011-06-29
-#@version 1.0.4 - Heredada de antigua función ogInstallMiniSetup.
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2012-04-16
-#*/ ##
-function ogInstallFirstBoot ()
-{
-local MNTDIR DIR CMDDIR CMDFILE
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename" \
- "$FUNCNAME 1 1 filename.cmd"
- return
-fi
-# Error si no se reciben 2 parámetros.
-[ $# == 3 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
-# Comprobar que existe el directorio del fichero de comandos.
-MNTDIR=$(ogMount "$1" "$2") || return $?
-for i in winnt windows; do
- DIR=$(ogGetPath $MNTDIR/$i/system32)
- [ -n "$DIR" ] && CMDDIR=$DIR
-done
-[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MNTDIR/windows/system32" || return $?
-CMDFILE="$CMDDIR/$3"
-
-# Creamos el archivo cmd y creamos un par de comandos para que una vez acabe la
-# postconfiguracion resetee el mini setup, sino lo haria en cada arranque.
-cat > "$CMDFILE" << EOF
-REG ADD HKLM\System\Setup /v SystemSetupInProgress /t REG_DWORD /d 0 /f
-REG ADD HKLM\System\Setup /v CmdLine /t REG_SZ /d "" /f
-EOF
-
-# Crear los valores de registro necesarios para que se haga la ejecución del .cmd al aranque.
-ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SystemSetupInProgress" 1
-ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\SetupType" 4
-# Borrar y crear el valor para compatibilidad con algunos sistmeas.
-ogDeleteRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine"
-ogAddRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine"
-ogSetRegistryValue "$MNTDIR" SYSTEM "\Setup\CmdLine" "cmd.exe /c $(basename $CMDFILE)"
-}
-
-
-#/**
-# ogInstallRunonce int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]
-#@brief Crea el archivo cmd que se ejecutara en el runonce de un usuario administrador
-#@param int_ndisk nº de orden del disco
-#@param int_npartition nº de orden de la partición
-#@param str_filename nombre del archivo .cmd a ejecutar en el arranque (estara en system32 y sera visible por el sistema)
-#@param str_adm_user usuario administrador para hacer autologin y ejecutar el runonce
-#@param str_adm_password password del usuario administrador
-#@param bool_autologin si despues de la postconfiguracion queremos que la maquina haga autologin (0 o 1)
-#@param str_auto_user Usuario con el que queremos que haga autologin despues de la postconfiguracion
-#@param str_auto_password Password del usuario que hara autologin
-#@return (nada)
-#@exception OG_ERR_FORMAT Formato incorrecto.
-#@version 1.0.2 - Nueva función
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2011-06-29
-#@version 1.0.4 - Heredado de antigua función ogInstallMiniSetup
-#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
-#@date 2012-04-16
-#*/ ##
-function ogInstallRunonce ()
-{
-local MOUNTPOINT DIR CMDDIR CMDFILE
-# Si se solicita, mostrar ayuda.
-if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_filename str_adm_user str_adm_password bool_autologin [str_auto_user str_auto_password]" \
- "$FUNCNAME 1 1 filename.cmd administrator passadmin 1 userauto passuserauto" \
- "$FUNCNAME 1 1 filename.cmd administrator passadmin 0"
- return
-fi
-# Error si no se reciben 6 u 8 parámetros.
-[ $# == 6 -o $# == 8 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
-# Punto de montaje.
-MOUNTPOINT="$(ogGetPath "$1" "$2" /)"
-# Comprobar que existe el directorio del fichero de comandos.
-for i in winnt windows; do
- DIR=$(ogGetPath $MOUNTPOINT/$i/system32)
- [ -n "$DIR" ] && CMDDIR=$DIR
-done
-[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$MOUNTPOINT/Windows/System32" || return $?
-CMDFILE="$CMDDIR/$3"
-
-if [ $6 == 0 ]; then
- # Si no volem fer autologin despres de la postconfiguracio o indiquem a las claus de registre
- cat > "$CMDFILE" << EOF
-DEL C:\ogboot.*
-REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 0 /f
-REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "" /f
-REG DELETE "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /f
-EOF
-else
- # Si volem fer autologin despres de la postconfiguracio introduim l'informacio a les claus de registre
- cat > "$CMDFILE" << EOF
-DEL C:\ogboot.*
-REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AutoAdminLogon /t REG_SZ /d 1 /f
-REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName /t REG_SZ /d "$7" /f
-REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword /t REG_SZ /d "$8" /f
-EOF
-fi
-#Creamos las claves de registro necesarias para que meter el cmd en el runonce del usuario y este haga autologin
-ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' 2>/dev/null
-ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows\CurrentVersion\RunOnce\PostConfiguracion' "C:\windows\system32\\$3" 2>/dev/null
-ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon' 1 2>/dev/null
-ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultUserName' "$4" 2>/dev/null
-ogAddRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' 2>/dev/null
-ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Winlogon\DefaultPassword' "$5" 2>/dev/null
-}
-
-
-#/**
# ogInstallWindowsClient int_ndisk int_filesys
#@brief Instala el cliente OpenGnSys para sistemas operativos Windows.
-#@param int_ndisk nº de orden del disco
-#@param int_filesys nº de orden del sistema de archivos
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
#@return (nada)
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Fichero o dispositivo no encontrado.
@@ -345,24 +345,26 @@ ogSetRegistryValue $MOUNTPOINT software '\Microsoft\Windows NT\CurrentVersion\Wi
#@version 1.0.4 - Primera adaptación para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2012-04-11
+#@version 1.0.5 - Cambios en los parametros de entrada y funcionamiento de la funcion
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2013-02-12
#*/ ##
+
function ogInstallWindowsClient ()
{
# Variables locales.
-local PART MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL
+local MNTDIR CLIENTFILE i SBINDIR ETCDIR RCLOCAL
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_filesys" \
return
fi
-# Error si no se reciben 2 parámetros.
-[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
# Obtener sistema de archvios.
-PART="$(ogDiskToDev $1 $2)" || return $?
-# Comprobar si el sistema de archivos no está bloqueado.
-MNTDIR=$(ogMount $1 $2) 2>/dev/null
-[ -n "$MNTDIR" ] || ogRaiseError OG_ERR_PARTITION "$1, $2" || return $?
+MNTDIR=$(ogMount $1 $2) || return $?
+
# Comprobar si existe el cliente y los directorios y ficheros destino.
CLIENTFILE=$OGLIB/ogclient/ogAdmWinClient.exe
[ -f $CLIENTFILE ] || ogRaiseError $OG_ERR_FOUND "$CLIENTFILE" || return $?
@@ -371,13 +373,9 @@ for i in winnt windows; do
[ -n "$DIR" ] && WINDIR=$DIR
done
[ -n "$WINDIR " ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2 windows" || return $?
-# Realizar la instalación en modo uso exclusivo.
-ogLock $1 $2
-trap "ogUnlock $1 $2" 1 2 3 6 9
-# Copiar cliente, generar fichero de configuración e incluir en el arranque.
+# Copiar cliente e incluir en el fichero de configuracion dado que instale el cliente en el arranque.
cp -a $CLIENTFILE "$WINDIR"
-ogInstallMiniSetup $1 $2 ogclient.cmd
-ogAddCmd $1 $2 ogclient.cmd "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)"
-ogUnlock $1 $2
+ogAddCmd $1 $2 $3 "ogAdmWinClient -remove"
+ogAddCmd $1 $2 $3 "ogAdmWinClient -install -s $(ogGetServerIp) -p 2008 -i $(ogGetIpAddress)"
}
diff --git a/client/engine/PostConfEAC.lib b/client/engine/PostConfEAC.lib
index d950319b..cb121081 100755
--- a/client/engine/PostConfEAC.lib
+++ b/client/engine/PostConfEAC.lib
@@ -296,7 +296,7 @@ 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
+#echo la pass es $4
export temporal=/tmp/tmpregistry
cat >> $temporal << EOF
hive 2
diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib
index 102ed1c7..603f6e1b 100755
--- a/client/engine/Protocol.lib
+++ b/client/engine/Protocol.lib
@@ -4,7 +4,7 @@
#@brief Librería o clase Protocol
#@class Protocol
#@brief Funciones para transmisión de datos
-#@version 1.0
+#@version 1.0.5
#@warning License: GNU GPLv3+
#*/
@@ -707,6 +707,46 @@ fi
}
+#/**
+# ogMcastRequest
+#@brief Función temporal para solicitar al ogRepoAux el envio de un fichero por multicast
+#@param 1 Fichero a enviar ubicado en el REPO. puede ser ruta absoluta o relatica a /opt/opengnsys/images
+#@param 2 PROTOOPT opciones protocolo multicast
+#@return
+#@exception
+#@note
+#@todo:
+#@version 1.0.5
+#@author Antonio Doblas Viso, Universidad de Málaga
+#@date 2012/05/29
+#*/ ##
+function ogMcastRequest {
+# Variables locales
+local FILE PROTOOPT PORT PORTAUX REPOIP REPOPORTAUX REPEAT
+FILE="$1"
+PROTOOPT="$2"
+
+#TODO AYUDA
+#TODO: CONTROL PARAMETROS
+
+PORT=$(echo $2 | cut -f1 -d":")
+let PORTAUX=$PORT+1
+REPOIP=$(ogGetRepoIp)
+REPOPORTAUX=2009
+REPEAT=0
+until nmap -n -sU -p $PORTAUX $REPOIP | grep open
+do
+ echo "$MSG_SCRIPTS_TASK_START : hose $REPOIP $REPOPORTAUX --out sh -c "echo -ne START_MULTICAST $1 $2""
+ #update-cache:
+ hose $REPOIP $REPOPORTAUX --out sh -c "echo -ne START_MULTICAST "$FILE" "$PROTOOPT""
+ #multicas-direct: hose $REPOIP 2009 --out sh -c "echo -ne START_MULTICAST /$IMAGE.img $OPTPROTOCOLO"
+ let REPEAT=$REPEAT+1
+ [ "$REPEAT" -eq 5 ] && return
+ sleep 10
+done
+}
+
+
##########################################
############## funciones torrent
#/**
@@ -845,8 +885,11 @@ if [ "$OPTION" == "DOWNLOAD" ]
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 $TIME; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf
+ echo "Donwloading Torrent as peer" ### echo "ctorrent -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100 $SOURCE -s $TARGET -b ${SOURCE}"
+ # Creamos el fichero de resumen por defecto
+ touch ${SOURCE}.bf
+ # ctorrent controla otro fichero -b ${SOURCE}.bfog
+ ctorrent -f -c -X "sleep $TIME; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bfog
;;
leecher|LEECHER)
echo "Donwloading Torrent as leecher" # echo "ctorrent ${SOURCE} -X 'sleep 30; kill -9 \$(pidof ctorrent)' -C 100 -U 0"
@@ -854,7 +897,10 @@ then
;;
seeder|SEEDER)
echo "MODE seeder ctorrent" #### ${SOURCE} -X 'sleep $TIME; kill -9 \$(pidof ctorrent)' -C 100"
- ctorrent -f -X "sleep $TIME; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bf
+ # Creamos el fichero de resumen por defecto
+ touch ${SOURCE}.bf
+ # ctorrent controla otro fichero -b ${SOURCE}.bfog
+ ctorrent -f -c -X "sleep $TIME; kill -2 \$(pidof ctorrent)" -C 100 ${SOURCE} -s ${TARGET} -b ${SOURCE}.bfog
;;
esac
fi
@@ -962,27 +1008,22 @@ 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 $?
-#ogCheckStringInGroup "$1" "REPO repo" || ogRaiseError $OG_ERR_FORMAT "El contendor $1 no es valido, solo se admite REPO" || return $?
+#Control de la cache
+ogFindCache || return $(ogRaiseError $OG_ERR_NOTCACHE; echo $?)
[ $# == "2" ] || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?)
ogCheckStringInGroup "$1" "REPO repo" || return $(ogRaiseError $OG_ERR_NOTFOUND " $1 $2"; echo $?)
-
-
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."
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 "TRUE=0, es necesario actualizar. Paso 1, la cache no contiene esa imagen "
- return 0
+ # 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 "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"
@@ -993,14 +1034,13 @@ then
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"
if [ -f $FILESOURCE.sum ]
then
- MD5SOURCE=$(cat $FILESOURCE.sum)
+ MD5SOURCE=$(cat $FILESOURCE.sum)
else
- MD5SOURCE=$(ogCalculateChecksum $FILESOURCE)
+ MD5SOURCE=$(ogCalculateChecksum $FILESOURCE)
fi
[ ! -f $FILETARGET.sum ] && ogCalculateChecksum $FILETARGET > $FILETARGET.sum
MD5TARGET=$(cat $FILETARGET.sum)
@@ -1009,15 +1049,12 @@ MD5TARGET=$(cat $FILETARGET.sum)
#TODO: que hacer cuando los md5 son distintos. Por defecto borrar.
if [ "$MD5SOURCE" == "$MD5TARGET" ]
then
- echo "FALSE=1, No es neceario actualizar. Paso5.A la imagen esta en cache"
- return 1
+ echo "FALSE=1, No es neceario actualizar. Paso5.A la imagen esta en cache"
+ return 1
else
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 -f $FILETARGET
- return 0
+ rm -f $FILETARGET $FILETARGET.sum $FILETARGET.torrent
+ return 0
fi
-
}
-
-
diff --git a/client/engine/Registry.lib b/client/engine/Registry.lib
index 6423f43a..1a6045f2 100755
--- a/client/engine/Registry.lib
+++ b/client/engine/Registry.lib
@@ -4,11 +4,21 @@
#@brief Librería o clase Registry
#@class Boot
#@brief Funciones para gestión del registro de Windows.
-#@version 1.0.1
+#@version 1.0.5
#@warning License: GNU GPLv3+
#*/
+# Función ficticia para lanzar chntpw con timeout de 5 s., evitando cuelgues del programa.
+function chntpw ()
+{
+local CHNTPW
+CHNTPW=$(which drbl-chntpw)
+CHNTPW=${CHNTPW:-$(which chntpw)}
+timeout --foreground 5s $CHNTPW "$@"
+}
+
+
#/**
# ogAddRegistryKey path_mountpoint str_hive str_keyname
#@brief Añade una nueva clave al registro de Windows.
@@ -219,12 +229,12 @@ 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.
+# Camino del fichero de registro en NT/2000 o en XP y posteriores.
FILENT=$(ogGetPath "/$1/winnt/system32/config/$2")
-[ -f $FILENT ] && FILE="$FILENT"
+[ -f "$FILENT" ] && FILE="$FILENT"
FILEXP=$(ogGetPath "/$1/windows/system32/config/$2")
-[ -f $FLEHXP ] && FILE="$FILEXP"
-[ ! -f $FILE ] && ogRaiseError OG_ERR_NOTFOUND "$1,$2" && return $?
+[ -f "$FILEXP" ] && FILE="$FILEXP"
+[ -f "$FILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2" || return $?
echo "$FILE"
}
diff --git a/client/engine/Rsync.lib b/client/engine/Rsync.lib
new file mode 100755
index 00000000..5b735c5e
--- /dev/null
+++ b/client/engine/Rsync.lib
@@ -0,0 +1,859 @@
+#!/bin/bash
+#/**
+# ogCreateFileImage [ REPO | CACHE ] image_name extension size
+#@brief Crear el archivo
+#@param 1 Repositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Tipo imagen [ img |diff ]
+#@param 4 Tamaño de la imagen
+#@return instrucción para ser ejecutada.
+#*/
+
+function ogCreateFileImage () {
+local SIZEREQUIRED IMGDIR IMGFILE DIRMOUNT LOOPDEVICE IMGSIZE IMGEXT KERNELVERSION
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" : "$MSG_HELP_ogCreateFileImage" \
+ "$FUNCNAME [ REPO|CACHE ] image_name extension size(K)" \
+ "$FUNCNAME REPO Ubuntu12 img 300000" \
+ "$FUNCNAME CACHE Windows7 diff 20000000"
+ return
+fi
+
+
+if [ $# -lt 4 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name extension size(k)"
+ return $?
+fi
+
+SIZEREQUIRED=$4
+[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
+KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
+
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ IMGDIR="$(ogGetParentPath "$1" "/$2")"
+ [ "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
+ IMGFILE="${IMGDIR}/$(basename "/$2").$IMGEXT"
+ ## Si no existe, crear subdirectorio de la imagen.
+ if [ $? != 0 ]; then
+ ogEcho log session " $MSG_HELP_ogMakeDir \"$1 $(dirname "$2")."
+ ogMakeDir "$1" "$(dirname "/$2")" || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
+ IMGDIR="$(ogGetParentPath "$1" "/$2")" || return $(ogRaiseError $OG_ERR_NOTWRITE "$3 /$4"; echo $?)
+ fi
+ DIRMOUNT="/tmp/$(ogGetMountImageDir "$2" "$3")"
+ mkdir -p "$DIRMOUNT"
+ LOOPDEVICE=$(losetup -f)
+ # Si existe el fichero de la imagen se hace copia de seguridad, si no existe se crea.
+ if [ -f "$IMGFILE" ]; then
+ # Si la imagen esta montada la desmonto
+ if [ -r "$DIRMOUNT/ogimg.info" ]; then
+ umount "$DIRMOUNT"
+ [ $? -ne 0 ] && return $(ogRaiseError $OG_ERR_DONTUNMOUNT_IMAGE "$1 $2.$IMGEXT"; echo $?)
+ fi
+
+ if [ "$BACKUP" == "true" -o "$BACKUP" == "TRUE" ]; then
+ # Copia seguridad
+ ogEcho log session " $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"."
+ cp -f "$IMGFILE" "$IMGFILE.ant"
+ mv -f "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
+ rm -f "$IMGFILE.sum"
+ fi
+
+ IMGSIZE=$(ls -l --block-size=1024 "$IMGFILE" | awk '{print $5}')
+ if [ $IMGSIZE -lt $SIZEREQUIRED ];then
+ ogEcho log session " $MSG_SYNC_RESIZE"
+ echo " truncate --size=>$SIZEREQUIRED k $IMGFILE"
+ truncate --size=">$SIZEREQUIRED"k "$IMGFILE" &> $OGLOGCOMMAND
+ # FS de la imagen segun la version del kernel: < 3.7 ext4, si >= btrfs
+ if [ $KERNELVERSION \< 3.07 ]; then
+ losetup $LOOPDEVICE "$IMGFILE"
+ echo " resize2fs -f $LOOPDEVICE"
+ resize2fs -f $LOOPDEVICE &> $OGLOGCOMMAND
+
+ else
+ echo " ogMountImage $1 "$2" $3"
+ ogMountImage $1 "$2" $3
+ echo " btrfs filesystem resize max $DIRMOUNT"
+ btrfs filesystem resize max "$DIRMOUNT" &> $OGLOGCOMMAND
+ fi
+ fi
+ else
+ echo " dd if=/dev/zero of=$IMGFILE bs=1024 count=$SIZEREQUIRED"
+ dd if=/dev/zero of="$IMGFILE" bs=1024 count=$SIZEREQUIRED 2>&1 | tee -a $OGLOGCOMMAND
+ #Formateamos imagen
+ losetup $LOOPDEVICE $IMGFILE
+ # FS de la imagen segun la version del kernel: < 3.7 ext4, si >= btrfs
+ if [ $KERNELVERSION \< 3.07 ]; then
+ echo " mkfs.ext4 -i 4096 -b 4096 -L "${2##*\/}" $LOOPDEVICE"
+ mkfs.ext4 -i 4096 -b 4096 -L "${2##*\/}" $LOOPDEVICE 2>&1 |tee -a $OGLOGCOMMAND
+ else
+ echo " mkfs.btrfs -L ${2##*\/} $LOOPDEVICE "
+ mkfs.btrfs -L "${2##*\/}" $LOOPDEVICE 2>&1 | tee -a $OGLOGCOMMAND
+ fi
+ fi
+ # Monto la imagen
+ ogMountImage $1 "$2" $3 &>/dev/null
+ [ $? -eq 0 ] || return $( ogRaiseError $OG_ERR_IMAGE "$3 $4"; echo $?)
+ #touch "$DIRMOUNT/ogimg.info"
+ echo "mounted"> $IMGFILE.lock
+
+ # Si existe dispositivo de loop lo borro.
+ [ $LOOPDEVICE ] && losetup -d $LOOPDEVICE 2>&1 &>/dev/null
+
+else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ echo " hose $REPOIP 2009 --out sh -c \"echo -ne CREATE_IMAGE $2 $3 $SIZEREQUIRED \""
+ hose $REPOIP 2009 --out sh -c "echo -ne CREATE_IMAGE \"$2\" $3 $SIZEREQUIRED"
+fi
+
+}
+
+function ogCreateInfoImage () {
+#/**
+# ogCreateInfoImage
+#@brief Crear listados con la informacion de la imagen, los situa en /tmp.
+#@param 1 num_disk
+#@param 2 num_part
+#@param 3 Repositorio [ REPO | CACHE ] (opcional en las completas)
+#@param 4 Nombre Imagen Basica (opcional en las completas)
+#@param 5 Tipo imagen [ img | diff ]
+#*/
+local IMGTYPE IMGDIRAUX DIRMOUNT DESTRSYNC PASSWORD OPTRSYNC USERRSYNC ORIG FSTYPE PART DIREMPTY IMGLIST IMGINFO IMGACL KERNELVERSION
+# Ayuda o menos de 5 parametros y la imagen no es basica
+if [ "$*" == "help" -o $# -lt 5 -a "$3" != "img" ]; then
+ ogHelp "$FUNCNAME" : "$MSG_HELP_ogCreateInfoImage" \
+ "$FUNCNAME num_disk num_part [ REPO|CACHE ] [ base_image_name ] extension " \
+ "base image -> $FUNCNAME 1 2 img" \
+ "diff image -> $FUNCNAME 1 1 CACHE Windows7 diff "
+ return
+fi
+
+if [ $# -lt 3 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part [ REPO|CACHE ] [ base_image_name] extension "
+ return $?
+fi
+
+# Comprobar errores.
+PART=$(ogDiskToDev "$1" "$2") || return $?
+ORIG=$(ogMount $1 $2) || return $?
+
+if [ $3 == "img" ]; then
+ IMGTYPE="img"
+else
+ # Comprobamos que las extension sea valida
+ ogCheckStringInGroup $5 "img diff" || return $( ogRaiseError $OG_ERR_FORMAT "$MSG_SYNC_EXTENSION"; echo $?)
+ IMGTYPE=$5
+ if [ "$IMGTYPE" == "diff" ]; then
+ # Imagen completa con la que comparo la particion.
+ IMGDIRAUX="$(ogGetMountImageDir "$4" "img")"
+ if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
+ DIRMOUNT="/tmp/$IMGDIRAUX"
+ DESTRSYNC="$DIRMOUNT"
+ else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ DIRMOUNT="$OGIMG/$IMGDIRAUX"
+ USERRSYNC="opengnsys"
+ PASSWORD="--password-file=/scripts/passrsync"
+ DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$IMGDIRAUX"
+ fi
+ fi
+fi
+
+
+FSTYPE=$(ogGetFsType $1 $2)
+
+# Creamos la lista del contenido y lo situamos en la particion a copiar.
+DIREMPTY="/tmp/empty$$"
+IMGLIST="/tmp/ogimg.list"
+IMGINFO="/tmp/ogimg.info"
+IMGACL="/tmp/ogimg.acl"
+
+# Borramos archivos antiguos.
+rm -f /tmp/ogimg.* 2>/dev/null
+rm -f $ORIG/ogimg.* 2>/dev/null
+
+# En las diferenciales no sabemos el tamaño -> ponemos una constante.
+SIZEDATA=${SIZEDATA:-"SIZEDATA"}
+
+# Incluimos información de la imagen. Segun el kernel sera ext4 o btrfs.
+KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
+if [ $KERNELVERSION \< 3.07 ]; then
+ echo "#EXT4:NO:$FSTYPE:$SIZEDATA" > $IMGINFO
+else
+ echo "#BTRFS:LZO:$FSTYPE:$SIZEDATA" > $IMGINFO
+fi
+
+if [ "$IMGTYPE" == "img" ]; then
+ # Imagen Basica
+ echo " rsync -aHAXvn --delete $ORIG/ $DIREMPTY >> $IMGINFO"
+ rsync -aHAXvn --delete $ORIG/ $DIREMPTY>> $IMGINFO
+ sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGINFO
+ sed -i '/^\.\//d' $IMGINFO
+
+else
+ # Imagen Diferencial
+ echo " rsync -aHAXvn$OPTRSYNC --delete $ORIG/ $DESTRSYNC a $IMGLIST"
+ rsync -aHAXvn$OPTRSYNC $PASSWORD --delete "$ORIG/" "$DESTRSYNC" >> $IMGLIST
+ sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGLIST
+ sed -i '/^\.\//d' $IMGLIST
+
+ # Creamos informacion de la imagen
+ grep -e '\->' -e '\=>' $IMGLIST > /tmp/ogimg.ln
+ grep -e ^deleting $IMGLIST | sed s/^deleting\ //g | grep -v ^ogimg > /tmp/ogimg.rm
+ #grep -v -e '\->' -e '\=>' -e ^deleting $IMGLIST >> $IMGINFO
+ grep -v -e '\->' -e '\=>' -e ^deleting -e ^created $IMGLIST >> $IMGINFO
+
+ rm -f $IMGLIST
+
+ # Comprobamos que los ficheros de diferencias no esten vacios o salimos con error.
+ if [ $(grep -v -e "^$" -e "^#" $IMGINFO /tmp/ogimg.ln /tmp/ogimg.rm |wc -l) -eq 0 ]; then
+ ogRaiseError $OG_ERR_NOTDIFFERENT "$1 $2 $3 $4 $5"
+ return $?
+ fi
+
+fi
+
+# Guardamos el contenido de las acl (Solo win) Necesario particion desmontada (esta asi)
+ogUnmount $1 $2
+if [ $FSTYPE == "NTFS" ]; then
+ echo " ntfs-3g.secaudit -b $PART /"
+ ntfs-3g.secaudit -b $PART / > $IMGACL
+fi
+
+
+}
+
+
+#/**
+# ogAclFilter
+#@brief Del fichero de acl de la partición extraemos las acl de los ficheros de la diferencial
+#@param No.
+#@return (nada)
+#*/
+function ogAclFilter () {
+local IMGACL IMGINFO FILES ACLTMP
+
+# Ayuda o menos de 5 parametros y la imagen no es basica
+if [ "$*" == "help" ]; then
+ ogHelp "$MSG_HELP_ogAclFilter" \
+ "$FUNCNAME [ no parameters ] "
+ return
+fi
+
+IMGACL="/tmp/ogimg.acl"
+IMGINFO="/tmp/ogimg.info"
+FILES="/tmp/files$$"
+ACLTMP="/tmp/acl$$.tmp"
+ACLFILES="/tmp/aclfiles$$"
+
+# comprobamos que existan los archivos de origen. Si no salimos sin error.
+[ -f $IMGACL -a -f $IMGINFO ] || return 0
+
+echo "" > $ACLTMP
+grep -n -e "File" -e "Directory" $IMGACL > $ACLFILES
+
+# Al fichero le quitamos las líneas sobrantes: comentarios y lineas vacias.
+sed -e s/"^#.*$"//g $IMGINFO > $FILES
+sed -i '/^$/d' $FILES
+
+
+# Recorremos el listado y extraemos la acl correspondiente al fichero o directorio.
+while read LINE; do
+ #read END INI <<< "$(grep -n -e "File" -e "Directory" $IMGACL| grep -A 1 "$LINE"| awk -F : '!(NR%2){print $1" "p}{p=$1}' )"
+ read END INI <<< "$(grep -A 1 "$LINE" $ACLFILES | awk -F : '!(NR%2){print $1" "p}{p=$1}' )"
+ let NUM=$END-$INI-1
+ # Si algún archivo no se encuentra, el error lo mandamos a /dev/null
+ sed -n -e $INI,+"$NUM"p $IMGACL 2>/dev/null >> $ACLTMP
+ echo "aclfilter: $LINE" >> $OGLOGCOMMAND
+done < $FILES
+
+cp $ACLTMP $IMGACL
+rm -f $FILES $ACLTMP $ACLFILES
+
+}
+
+#/**
+# ogRestoreInfoImage
+#@brief Crear o modificar enlaces y restaurar las ACL. La informacion esta ya copiada a la particion.
+#@param 1 num_disk
+#@param 2 num_part
+#*/
+function ogRestoreInfoImage () {
+local DEST PART IMGACL IMGLN OPTLN LINEA DESTLN ORIGLN TYPELN
+
+# Ayuda o menos de 5 parametros y la imagen no es basica
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME": "$MSG_HELP_ogRestoreInfoImage" \
+ "$FUNCNAME num_disk num_part" \
+ "base image -> $FUNCNAME 1 2 " \
+ "diff image -> $FUNCNAME 1 1 "
+ return
+fi
+
+if [ $# -lt 2 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part "
+ return $?
+fi
+
+# Control de errores.
+PART=$(ogDiskToDev "$1" "$2") || return $?
+DEST=$(ogMount $1 $2) || return $?
+
+IMGACL="ogimg.acl"
+IMGLN="ogimg.ln"
+
+#Creamos o modificamos los enlaces.
+# La imagen diferencial tiene ogimg.ln
+# para la completa lo generamos con los enlaces que contengan /mnt/
+[ -r "$DEST/$IMGLN" ] || grep -e "->" -e "=>" "$DEST/ogimg.info"|grep "/mnt/" > "$DEST/$IMGLN"
+if [ $(wc -l "$DEST/$IMGLN"|cut -f1 -d" ") -ne 0 ]; then
+ while read LINEA
+ do
+ ORIGLN="${LINEA#*> }"
+ # Si origen hace referencia a la particion lo modificamos
+ echo $ORIGLN|grep "/mnt/"> /dev/null && ORIGLN="$DEST/${ORIGLN#/mnt/*/}"
+ # rsync marca - los enlaces simbolicos y = enlaces "duros"
+ LINEA="${LINEA%>*}"
+ TYPELN="${LINEA##* }"
+ DESTLN="${LINEA% *}"
+
+ if [ "$TYPELN" == "-" ]
+ then
+ OPTLN='-s'
+ else
+ OPTLN=''
+ fi
+ cd "$DEST/$(dirname "$DESTLN")"
+ rm -f "$(basename "$DESTLN")"
+ ln $OPTLN "$ORIGLN" "$(basename "$DESTLN")"
+ echo -n "."
+ done < "$DEST/$IMGLN" 2>/dev/null
+ echo ""
+
+fi
+
+# Restauramos acl
+if [ "$(ogGetFsType $1 $2)" == "NTFS" -a -f "$DEST/$IMGACL" ] ; then
+ cd /
+ cp "$DEST/$IMGACL" /tmp
+ ogUnmount "$1" "$2"
+ echo "ntfs-3g.secaudit -se $PART /tmp/$IMGACL"
+ ntfs-3g.secaudit -se $PART /tmp/$IMGACL
+ # Para evitar que de falso error
+ echo ""
+fi
+
+}
+
+function ogSyncCreate () {
+#/**
+# ogSyncCreate
+#@brief sincroniza los datos de la partición a la imagen para crearla. La imagen esta montada en un directorio.
+#@param 1 num_disk
+#@param 2 num_part
+#@param 3 Repositorio [ REPO | CACHE ]
+#@param 4 Nombre Imagen
+#@param 5 Tipo imagen [ img | diff ]
+#*/
+local ORIG DIRAUX DIRMOUNT DESTRSYNC USERRSYNC PASSWORD OPTRSYNC RETVAL
+
+# Limpiamos los archivo de log
+echo "" >$OGLOGCOMMAND;
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME": "$MSG_HELP_ogSyncCreate" \
+ "$FUNCNAME num_disk num_part [ REPO|CACHE ] image_name extension " \
+ "$FUNCNAME 1 2 REPO Ubuntu12 img" \
+ "$FUNCNAME 1 1 CACHE Windows7 diff "
+ return
+fi
+
+
+if [ $# -lt 4 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME num_disk num_part [ REPO|CACHE ] image_name extension "
+ return $?
+fi
+
+ORIG=$(ogMount $1 $2) || return $?
+
+DIRMOUNT="$(ogGetMountImageDir "$4" $5)"
+# Si la imagen es diferencial la lista de ficheros a transferir esta dentro de la imagen.
+if [ "$5" == "diff" ]; then
+ FILESFROM=" --files-from=/tmp/ogimg.info"
+ # Borramos los directorios
+ sed -i '/\/$/d' /tmp/ogimg.info
+else
+ FILESFROM=""
+fi
+
+if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
+ DESTRSYNC="/tmp/$DIRMOUNT"
+else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ PASSWORD="--password-file=/scripts/passrsync"
+ [ "$ogrsyncz" == "true" ] && OPTRSYNC="z "
+ [ "$ogrsyncw" == "true" ] && OPTRSYNC="W$OPTRSYNC"
+ USERRSYNC="opengnsys"
+ DESTRSYNC="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
+fi
+# Sincronizamos los datos de la partición a la imagen
+echo " rsync -aHAX$OPTRSYNC --progress --inplace --delete $FILESFROM $ORIG/ $DESTRSYNC"
+rsync -aHAX$OPTRSYNC $PASSWORD --progress --inplace --delete $FILESFROM "$ORIG/" "$DESTRSYNC" 2>$OGLOGCOMMAND | egrep "^deleting|^sent|^sending|^total|%" |tee -a $OGLOGCOMMAND
+RETVAL=${PIPESTATUS[0]}
+echo " rsync -aHAX$OPTRSYNC --inplace /tmp/ogimg* $DESTRSYNC"
+rsync -aHAX$OPTRSYNC $PASSWORD --inplace /tmp/ogimg* "$DESTRSYNC"
+
+return $RETVAL
+}
+
+
+#/**
+# ogSyncRestore
+#@brief sincroniza los datos de la imagen a la partición para restaurarla.
+#@param 1 Repositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Tipo imagen [ img | diff ]
+#@param 4 num_disk
+#@param 5 num_part
+#*/
+function ogSyncRestore () {
+local DIRMOUNT ORIG DESTRSYNC PASSWORD OPTRSYNC USERRSYNC IMGINFO FILESFROM
+
+# Limpiamos los archivo de log
+echo "" >$OGLOGCOMMAND;
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME": "$MSG_HELP_ogSyncRestore" \
+ "$FUNCNAME [ REPO|CACHE ] image_name extension num_disk num_part " \
+ "$FUNCNAME REPO Ubuntu12 img 1 2" \
+ "$FUNCNAME CACHE Windows7 diff 1 1"
+ return
+fi
+
+
+if [ $# -lt 5 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name extension num_disk num_part "
+ return $?
+fi
+
+
+DIRMOUNT="$(ogGetMountImageDir "$2" "$3")"
+DESTRSYNC=$(ogGetMountPoint $4 $5)
+
+# Borramos ficheros de informacion de restauraciones antiguas
+rm -rf $DESTRSYNC/ogimg.*
+
+# Origen y destino de la sincronizacion y en REPO opciones rsync
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ ORIG="/tmp/$DIRMOUNT"
+else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ PASSWORD="--password-file=/scripts/passrsync"
+ [ "$ogrsyncz" == "true" ] && OPTRSYNC="z "
+ [ "$ogrsyncw" == "true" ] && OPTRSYNC="W$OPTRSYNC"
+ USERRSYNC="opengnsys"
+ ORIG="$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT"
+fi
+
+# Opciones rsync en cache y repo
+# Para la imagen basica, opcion de borrar archivos de la particion que no existen en la imagen
+[ "$3" == "img" ] && [ "$ogrsyncdel" != "false" ] && OPTRSYNC="$OPTRSYNC --delete"
+
+# Nos traemos listado ficheros y bajamos la imagen
+
+ogEcho log session " $MSG_SYNC_RESTORE"
+
+# Si la imagen es diferencial nos traemos los archivos de informacion de la imagen.
+if [ "$3" == "diff" ]; then
+ # Lista de archivos a copiar:
+ IMGINFO="ogimg.info"
+ FILESFROM=" --files-from=$DESTRSYNC/$IMGINFO"
+
+ echo " rsync -aHAX$OPTRSYNC --progress $ORIG/ogimg* $DESTRSYNC"
+ rsync -aHAX$OPTRSYNC $PASSWORD --progress "$ORIG"/ogimg* $DESTRSYNC
+ # Borramos linea de información de la imagen, sino busca un fichero con ese nombre
+ sed -i '/^\#/d' $DESTRSYNC/$IMGINFO
+
+ cd $DESTRSYNC
+ # Diferencial: Borramos archivos sobrantes.
+ ogEcho log session " $MSG_SYNC_DELETE"
+ cat "$DESTRSYNC/ogimg.rm" 2>/dev/null | xargs rm -rf
+
+fi
+
+echo " rsync -aHAX$OPTRSYNC --progress $FILESFROM $ORIG/ $DESTRSYNC"
+rsync -aHAX$OPTRSYNC $PASSWORD --progress $FILESFROM "$ORIG/" "$DESTRSYNC" 2>$OGLOGCOMMAND | egrep "^deleting|^sent|^sending|^total|%" |tee -a $OGLOGCOMMAND
+return ${PIPESTATUS[0]}
+
+}
+
+function ogMountImage () {
+#/**
+# ogMountImage
+#@brief Monta la imagen para sincronizar.
+#@param 1 Repositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Tipo imagen [ img |diff ]
+#@return punto de montaje
+#*/
+local IMGEXT IMGFILE DIRMOUNT KERNELVERSION
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME": "$MSG_HELP_ogMountImage" \
+ "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
+ "$FUNCNAME REPO Ubuntu12" \
+ "$FUNCNAME CACHE Windows7 diff"
+ return
+fi
+
+
+if [ $# -lt 2 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
+ return $?
+fi
+
+[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
+
+DIRMOUNT="$(ogGetMountImageDir "$2" ${IMGEXT#*\.})"
+
+if [ "$1" == "REPO" -o "$1" == "repo" ]; then
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ hose $REPOIP 2009 --out sh -c "echo -ne MOUNT_IMAGE \"$2\" ${IMGEXT#*\.}"
+ echo "$OGIMG/$DIRMOUNT"
+else
+ # Si está montado nada que hacer.
+ df | grep "$DIRMOUNT$" 2>&1 >/dev/null && echo "/tmp/$DIRMOUNT" && return 0
+
+ IMGFILE="$(ogGetPath "$1" /"$2.$IMGEXT")" \
+ || return $(ogRaiseError $OG_ERR_NOTFOUND "$1 $2.$IMGEXT"; echo $?)
+ mkdir -p "/tmp/$DIRMOUNT"
+
+ # FS de la imagen segun la version del kernel: < 3.7 ext4, si >= btrfs
+ KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
+ if [ $KERNELVERSION \< 3.07 ]; then
+ mount -t ext4 -o loop "$IMGFILE" "/tmp/$DIRMOUNT" 1>/dev/null
+ else
+ mount -o compress=lzo "$IMGFILE" "/tmp/$DIRMOUNT" 1>/dev/null
+ fi
+
+ # Comprobamos que se ha montado bien
+ [ $? -eq 0 ] || return $(ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$1 $2 $3"; echo $?)
+ echo "/tmp/$DIRMOUNT"
+fi
+
+}
+
+
+
+
+
+function ogUnmountImage () {
+#/**
+# ogUnmountImage [ REPO | CACHE ] Image_name [ extension ]
+#@brief Desmonta la imagen para sincronizar.
+#@param 1 Repositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Tipo imagen [ img |diff ]
+#*/
+local IMGTYPE DIRMOUNT
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME": "$MSG_HELP_ogUnmountImage" \
+ "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
+ "$FUNCNAME REPO Ubuntu12" \
+ "$FUNCNAME CACHE Windows7 diff"
+ return
+fi
+
+if [ $# -lt 2 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
+ return $?
+fi
+
+[ "$3" == "" ] && IMGTYPE="img" || IMGTYPE="$3"
+
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ DIRMOUNT="/tmp/$(ogGetMountImageDir "$2" $IMGTYPE)"
+ umount "$DIRMOUNT"
+ rmdir "$DIRMOUNT"
+ [ -f $IMGFILE.lock ] && sed -i s/"mounted"//g $IMGFILE.lock
+else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ echo " hose $REPOIP 2009 --out sh -c echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE"
+ hose $REPOIP 2009 --out sh -c "echo -ne UMOUNT_IMAGE \"$2\" $IMGTYPE"
+fi
+
+}
+
+function ogGetMountImageDir () {
+#/**
+# ogGetMountImageDir
+#@brief Devuelve el directorio de montaje de la imagen.
+#@param 1 Nombre Imagen
+#@param 2 Tipo imagen [ img |diff ]
+#*/
+local DIRMOUNT
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME": "$MSG_HELP_ogGetMountImageDir" \
+ "$FUNCNAME image_name [ extension ]" \
+ "$FUNCNAME Ubuntu12" \
+ "$FUNCNAME Windows7 diff"
+ return
+fi
+
+
+if [ $# -lt 1 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME image_name [ extension ]"
+ return $?
+fi
+
+
+DIRMOUNT="mount/$1"
+[ "$2" == "diff" ] && DIRMOUNT="$DIRMOUNT.diff"
+echo "$DIRMOUNT"
+
+
+}
+
+
+#/**
+# ogWaitSyncImage image_name extension stado imagen_size
+#@brief Se espera un tiempo a que se monte la imagen en el servidor.
+#@brief Cuando se esta creando la imagen hay que dar el tamaño, para que espere el tiempo de creación.
+#@param 1 Respositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Tipo imagen [ img | diff ]
+#@param 4 Estado [ mounted | reduced ]
+#@param 5 Tamaño imagen (opcional)
+#*/
+function ogWaitSyncImage () {
+local SIZE TIME DIRMOUNT TIMEOUT TIMEAUX LOCKFILE IMGDIR IMGEXT STATE
+
+TIME=$SECONDS
+
+# Ayuda o menos de 5 parametros y la imagen no es basica
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME": "$MSG_HELP_ogWaitMountImage" \
+ "$FUNCNAME [ REPO | CACHE ] image_name extension state [ image_size ] " \
+ "$FUNCNAME REPO Ubuntu12 img 30000000" \
+ "$FUNCNAME CACHE Windows7 diff "
+ return
+fi
+
+if [ $# -lt 4 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO | CACHE ] image_name extension state [ image_size ] "
+ return $?
+fi
+
+SIZE=${5:-"300000"}
+STATE="$4"
+ogCheckStringInGroup "$STATE" "mounted reduced" || \
+ return $(ogRaiseError command $OG_ERR_FORMAT "STATE = [ mounted | reduced ]" )
+
+IMGDIR="$(ogGetParentPath "$1" "/$2")"
+[ "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
+LOCKFILE="${IMGDIR}/$(basename "/$2").$IMGEXT.lock"
+
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ DIRMOUNT="/tmp/$(ogGetMountImageDir "$2" $3)"
+else
+ DIRMOUNT="$OGIMG/$(ogGetMountImageDir "$2" $3)"
+fi
+
+echo -n -e " $MSG_SYNC_SLEEP: $DIRMOUNT\n #" | tee -a $OGLOGSESSION $OGLOGFILE
+
+# Comprobamos: mounted -> que exista $DIRMOUNT/ogimg.info o que el fichero de lock contenga mounted
+# reduced -> que el fichero de lock contenga reduced.
+
+# time-out segun el tamaño de la imagen. por defecto: 100000k -> 3s
+let TIMEOUT=$SIZE/$CREATESPEED
+[ $TIMEOUT -lt 60 ] && TIMEOUT=60
+until $(grep -i $STATE $LOCKFILE &>/dev/null) ; do
+ [ $STATE = "mounted" -a -f "$DIRMOUNT/ogimg.info" ] && ogEcho session "" && return 0
+ TIMEAUX=$[SECONDS-TIME]
+ [ "$TIMEAUX" -lt "$TIMEOUT" ] || return $(ogRaiseError $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
+ echo -n "#" | tee -a $OGLOGSESSION $OGLOGFILE
+ sleep 5
+done
+echo "" | tee -a $OGLOGSESSION $OGLOGFILE
+
+}
+
+
+function ogReduceImage () {
+#/**
+# ogReduceImage
+#@brief Reduce el archivo de la imagen a tamaño datos + 500M
+#@param 1 Repositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Tipo Imagen [ img |diff ]
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado.
+#*/
+local IMGEXT DIRMOUNT AVAILABLE USED IMGDIR IMGFILE ENDSIZE LOOPDEVICE
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME": "$MSG_HELP_ogReduceImage" \
+ "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
+ "$FUNCNAME REPO Ubuntu12" \
+ "$FUNCNAME CACHE Windows7 diff"
+ return
+fi
+
+if [ $# -lt 2 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
+ return $?
+fi
+
+
+[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
+IMGDIR="$(ogGetParentPath "$1" "/$2")"
+IMGFILE="${IMGDIR}/$(basename "/$2").$IMGEXT"
+
+# Solo es posible para imagenes EXT4. Si no es EXT4 salimos sin error
+file "$IMGFILE" | grep -i " ext4 filesystem " 2>&1 > /dev/null || return 0
+
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ # Al montar se comprueba la existencia de la imagen
+ DIRMOUNT="$(ogMountImage $1 "$2" ${IMGEXT#*\.})"
+ AVAILABLE=$(df -k|grep "$DIRMOUNT$"|awk '{print $4}')
+ # Si el espacio libre menor que 500Mb nos salimos
+ if [ $AVAILABLE -lt 200000 ]; then
+ ogUnmountImage $1 "$2" ${IMGEXT#*\.}
+ echo "reduced" > "$IMGFILE.lock"
+ return 0
+ fi
+
+ # Calculamos la diferencia entre el tamaño interno y externo
+ EXTSIZE=$(ls -l --block-size=1024 "$IMGFILE" | cut -f5 -d" ")
+ INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
+ let EDGESIZE=$EXTSIZE-$INTSIZE
+ ogUnmountImage $1 "$2" ${IMGEXT#*\.}
+ LOOPDEVICE=$(losetup -f)
+ losetup $LOOPDEVICE "$IMGFILE"
+
+ # Redimensiono sistema de ficheros
+ echo " resize2fs -fpM $LOOPDEVICE"
+ resize2fs -fpM $LOOPDEVICE |tee -a $OGLOGCOMMAND
+ ogMountImage $1 "$2" ${IMGEXT#*\.} >/dev/null
+
+ # Calculamos el tamaño final del archivo
+ INTSIZE=$(df -k|grep "$DIRMOUNT"|awk '{print $2}')
+ let EXTSIZE=$INTSIZE+$EDGESIZE
+ umount "$DIRMOUNT"
+
+ # Si existe dispositivo de loop lo borro.
+ [ $LOOPDEVICE ] && losetup -d $LOOPDEVICE
+
+ # Corto el archivo al tamaño del sistema de ficheros.
+ echo " truncate --size=\"$EXTSIZE\"k $IMGFILE "
+ truncate --size="$EXTSIZE"k "$IMGFILE"
+
+ # Desmonto la imagen
+ echo "reduced" > "$IMGFILE.lock"
+ rmdir "$DIRMOUNT"
+
+else
+ [ -z $REPOIP ] && REPOIP=$(ogGetRepoIp)
+ echo " hose $REPOIP 2009 --out sh -c echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}"
+ hose $REPOIP 2009 --out sh -c "echo -ne REDUCE_IMAGE \"$2\" ${IMGEXT#*\.}"
+fi
+
+
+}
+
+
+
+function ogIsSyncImage () {
+#/**
+# ogIsSyncImage
+#@brief Comprueba si la imagen es sincronizable
+#@param 1 Repositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Tipo Imagen [ img |diff ]
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado.
+#*/
+local IMGEXT IMGDIR IMGFILE
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME": "$MSG_HELP_ogIsSyncImage" \
+ "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
+ "$FUNCNAME REPO Ubuntu12" \
+ "$FUNCNAME CACHE Windows7 diff"
+ return
+fi
+
+if [ $# -lt 2 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
+ return $?
+fi
+
+[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
+IMGDIR="$(ogGetParentPath "$1" "/$2")"
+IMGFILE="${IMGDIR}"/$(basename "/$2").$IMGEXT
+
+file "$IMGFILE" | grep -i -e " BTRFS Filesystem " -e " ext4 filesystem " >/dev/null
+[ $? -eq 0 ] && return 0 || return $OG_ERR_DONTSYNC_IMAGE
+
+
+}
+
+#/**
+# ogCheckSyncImage
+#@brief Muestra el contenido de la imagen para comprobarla.
+#@param 1 Repositorio [ REPO | CACHE ]
+#@param 2 Nombre Imagen
+#@param 3 Tipo Imagen [ img |diff ]
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado.
+#*/
+function ogCheckSyncImage () {
+local IMGEXT IMGDIR IMGFILE DIRMOUNT ISMOUNT RETVAL KERNELVERSION
+
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME": "$MSG_HELP_ogCheckSyncImage" \
+ "$FUNCNAME [ REPO|CACHE ] image_name [ extension ]" \
+ "$FUNCNAME REPO Ubuntu12" \
+ "$FUNCNAME CACHE Windows7 diff"
+ return
+fi
+
+if [ $# -lt 2 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $FUNCNAME [ REPO|CACHE ] image_name [ extension ]"
+ return $?
+fi
+
+[ "$3" == "" -o "$3" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
+IMGDIR="$(ogGetParentPath "$1" "/$2")"
+IMGFILE="${IMGDIR}/$(basename "/$2").$IMGEXT"
+
+ogIsSyncImage $1 "$2" "${IMGEXT#*\.}" || return $(ogRaiseError $OG_ERR_DONTSYNC_IMAGE "$3 $4"; echo $?)
+
+# Comprobamos que no esté montada (daria falso error)
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ $(df | grep "/tmp/mount/$2${IMGEXT#img}$" &>/dev/null) && ISMOUNT=TRUE
+else
+ [ -f "$OGIMG/mount/$2${IMGEXT#img}/ogimg.info" ] && ISMOUNT=TRUE
+fi
+[ "$ISMOUNT" == TRUE ] && ogEcho session warning "$MSG_SYNC_NOCHECK" && return 0
+
+DIRMOUNT="/tmp/ogCheckImage$$"
+mkdir "$DIRMOUNT"
+# FS de la imagen segun la version del kernel: < 3.7 ext4, si >= btrfs
+KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
+if [ $KERNELVERSION \< 3.07 ]; then
+ mount -t ext4 -o loop "$IMGFILE" "$DIRMOUNT" 2>&1 | tee -a $OGLOGCOMMAND
+ RETVAL=${PIPESTATUS[0]}
+else
+ mount -o compress=lzo "$IMGFILE" "$DIRMOUNT" 2>&1 | tee -a $OGLOGCOMMAND
+ RETVAL=${PIPESTATUS[0]}
+fi
+ls -C "$DIRMOUNT" | tee -a $OGLOGCOMMAND
+umount "$DIRMOUNT"
+
+rmdir "$DIRMOUNT"
+return $RETVAL
+}
diff --git a/client/engine/System.lib b/client/engine/System.lib
index ed6f24b6..51365902 100755
--- a/client/engine/System.lib
+++ b/client/engine/System.lib
@@ -4,67 +4,93 @@
#@brief Librería o clase System
#@class System
#@brief Funciones básicas del sistema.
-#@version 1.0.4
+#@version 1.0.5
#@warning License: GNU GPLv3+
#*/
#/**
-# ogEcho [str_loglevel] "str_message..."
+# ogEcho [str_logtype ...] [str_loglevel] "str_message" ...
#@brief Muestra mensajes en consola y lo registra en fichero de incidencias.
+#@param str_logtype tipo de registro de incidencias.
#@param str_loglevel nivel de registro de incidencias.
#@param str_message mensaje (puede recibir más de 1 parámetro.
#@return Mensaje mostrado.
#@warning Si no se indica nivel de registro, solo muestra mensaje en pantalla.
+#@note logfile = { log, command, session }; usa "log" si se indica nivel de registro.
+#@note loglevel = { help, info, warning, error }
#@note El nivel de ayuda \c (help) no se registra en el fichero de incidencias.
#@version 0.9 - Primera versión para OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-07-23
+#@version 1.0.5 - Elegir fichero de log.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2009-07-23
#*/
function ogEcho () {
# Variables locales
-local LOGLEVEL DATETIME
+local CONT=1 LOGS LOGLEVEL DATETIME
+
+# Selección de ficheros de rgistro de incidencias.
+while [ $CONT ]; do
+ case "${1,,}" in
+ log) LOGS="$LOGS $OGLOGFILE"; shift ;;
+ command) LOGS="$LOGS $OGLOGCOMMAND"; shift ;;
+ session) LOGS="$LOGS $OGLOGSESSION"; shift ;;
+ *) CONT= ;;
+ esac
+done
# Selección del nivel de registro (opcional).
-case "$1" in
+case "${1,,}" in
help) shift ;;
info) LOGLEVEL="$1"; shift ;;
warning) LOGLEVEL="$1"; shift ;;
error) LOGLEVEL="$1"; shift ;;
*) ;;
esac
-DATETIME=$(date +"%F %T")
if [ -n "$LOGLEVEL" ]; then
- logger -s -t "OpenGnSys $LOGLEVEL" -f $OGLOGFILE "$DATETIME $*"
- logger -t "OpenGnSys $LOGLEVEL" -f $OGLOGCOMMAND "$DATETIME $*"
- logger -t "OpenGnSys $LOGLEVEL" -f $OGLOGSESSION "$DATETIME $*"
+ DATETIME=$(date +"%F %T")
+ logger -s -t "OpenGnSys $LOGLEVEL" "$DATETIME $*" 2>&1 | tee -a $OGLOGFILE $LOGS
else
- echo "$*"
+ echo "$*" | tee -a $LOGS
fi
}
#/**
-# ogRaiseError int_errcode ["str_errmessage" ...]
+# ogRaiseError [str_logtype ...] int_errcode ["str_errmessage" ...]
#@brief Devuelve el mensaje y el código de error correspondiente.
+#@param str_logtype tipo de registro de incidencias.
#@param int_errcode código de error.
#@param str_errmessage mensajes complementarios de error.
-#@return str_message - Mensaje de error.
+#@return str_message - Mensaje de error, incluyendo las funciones relacionadas.
#@warning No definidas
#@note Mensajes internacionales del fichero de idiomas.
#@version 0.9 - Primera versión para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-07-21
+#@version 1.0.5 - Muestra en el mensaje todas las funciones relacionadas (separadas por <-).
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2014-03-17
#*/
function ogRaiseError () {
# Variables locales
-local MSG CODE
+local CONT=1 LOGS MSG CODE FUNCS
+
+# Selección de rgistros de incidencias.
+while [ $CONT ]; do
+ case "${1,,}" in
+ log|command|session) LOGS="$LOGS $1"; shift ;;
+ *) CONT= ;;
+ esac
+done
# Obtener código y mensaje de error.
-CODE=$1
+CODE="$1"
case "$CODE" in
$OG_ERR_FORMAT) MSG="$MSG_ERR_FORMAT \"$2\"" ;;
$OG_ERR_NOTFOUND) MSG="$MSG_ERR_NOTFOUND \"$2\"" ;;
@@ -83,6 +109,7 @@ case "$CODE" in
$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_UPDATECACHE) MSG="$MSG_ERR_UPDATECACHE \"$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\"" ;;
@@ -94,11 +121,20 @@ case "$CODE" in
$OG_ERR_MCASTSENDPARTITION) MSG="$MSG_ERR_MCASTSENDPARTITION \"$2\"" ;;
$OG_ERR_MCASTRECEIVERPARTITION) MSG="$MSG_ERR_MCASTRECEIVERPARTITION \"$2\"" ;;
$OG_ERR_PROTOCOLJOINMASTER) MSG="$MSG_ERR_PROTOCOLJOINMASTER \"$2\"" ;;
+ $OG_ERR_DONTMOUNT_IMAGE) MSG="$MSG_ERR_DONTMOUNT_IMAGE \"$2\"" ;;
+ $OG_ERR_DONTUNMOUNT_IMAGE) MSG="$MSG_ERR_DONTUNMOUNT_IMAGE \"$2\"" ;;
+ $OG_ERR_DONTSYNC_IMAGE) MSG="$MSG_ERR_DONTSYNC_IMAGE \"$2\"" ;;
+ $OG_ERR_NOTDIFFERENT) MSG="$MSG_ERR_NOTDIFFERENT \"$2\"" ;;
+ $OG_ERR_SYNCHRONIZING) MSG="$MSG_ERR_SYNCHRONIZING \"$2\"" ;;
*) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;;
esac
+# Obtener lista de funciones afectadas, incluyendo el script que las llama.
+FUNCS="${FUNCNAME[@]:1}"
+FUNCS="${FUNCS/main/$(basename $0 2>/dev/null)}"
+
# Mostrar mensaje de error y salir con el código indicado.
-ogEcho error "${FUNCNAME[1]}: $MSG" >&2
+ogEcho $LOGS error "${FUNCS// /<-}: $MSG" >&2
return $CODE
}
@@ -115,8 +151,8 @@ return $CODE
function ogGetCaller () {
# Obtener el nombre del programa o del script que ha llamado al proceso actual.
-basename $(ps hlp $PPID | awk '{if ($13~/bash/ && $14!="") print $14;
- else print $13;}')
+basename "$(ps hlp $PPID | awk '{if ($13~/bash/ && $14!="") print $14;
+ else { sub(/^-/,"",$13); print $13; } }')"
}
diff --git a/client/shared/README.es.txt b/client/shared/README.es.txt
index 4ad361cb..57dc7f85 100644
--- a/client/shared/README.es.txt
+++ b/client/shared/README.es.txt
@@ -1,25 +1,27 @@
-OpenGNSys Client (NFS root) README
-====================================
+OpenGsSys Client README
+==========================
-Este directorio contiene la estructura principal de datos que
-será importada por los cleintes OpenGNSys mediante NFS.
+Este directorio contiene la estructura principal de datos que será
+importada por los cleintes OpenGnSys mediante Samba (o NFS en las
+primeras versiones del Proyecto).
Los subdirectorios se copian íntegramente al servidor bajo
-/opt/opengnsys/client, y serán importados por los clientes en
+/opt/opengnsys/client y serán importados por los clientes en
/opt/opengnsys.
La estructura de datos es la siguiente:
-- bin binarios ejecutables por el cliente (compilados
+- bin scripts o binarios ejecutables por el cliente (compilados
estáticamente).
- cache directorio donde se montará la caché local del cliente.
- etc ficheros de configuración del cliente.
- lib librerías de funciones.
-- lib/engine/bin directorio donde se copiarán las funciones del
- motor de clonación.
+ - engine/bin ficheros con las funciones del motor de clonación.
+ - modules módulos extra para el Kernel del cliente.
+ - ogclient clientes para instalar en sistemas operativos.
- images repositorio de imágenes de sistemas operativos.
- log registro de incidencias de los clientes.
-- scripts funciones de alto nivel ejecutables por OpenGNSys Browser
- y OpenGNSys Admin.
+- scripts funciones de alto nivel ejecutables por OpenGnSys Browser
+ y OpenGnSys Admin.
diff --git a/client/shared/bin/browser b/client/shared/bin/browser
index def911e7..56fca2f0 100755
--- a/client/shared/bin/browser
+++ b/client/shared/bin/browser
Binary files differ
diff --git a/client/shared/bin/grub-probe1.99 b/client/shared/bin/grub-probe1.99
new file mode 100755
index 00000000..21659ef2
--- /dev/null
+++ b/client/shared/bin/grub-probe1.99
Binary files differ
diff --git a/client/shared/bin/ld-mac b/client/shared/bin/ld-mac
new file mode 100755
index 00000000..0152c7d5
--- /dev/null
+++ b/client/shared/bin/ld-mac
Binary files differ
diff --git a/client/shared/bin/poweroffconf b/client/shared/bin/poweroffconf
index c4813e34..f8c3a5d8 100755
--- a/client/shared/bin/poweroffconf
+++ b/client/shared/bin/poweroffconf
@@ -2,11 +2,14 @@
#/**
#@file poweroffconf
#@brief Control de parada tras tiempo de inactividad para ahorro de energía.
-#@param int_minutos Minutos de inactividad (opcional).
+#@param int_minutos Minutos de inactividad (opcional); "no" para deshabilitar..
#@note La comprobación periódica debe ejecutarse en el "cron" del sistema.
#@note Fichero de configuración: /etc/poweroff.conf
#@author Ramón Gómez - Univ. Sevilla
#@date 2011-10-25
+#@version 1.0.5: incluir opción para deshabilitar ahorro de energía.
+#@author Ramón Gómez - Univ. Sevilla
+#@date 2014-02-07
#@warning License: GNU GPLv3+
#*/
@@ -15,6 +18,13 @@
OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} # Instalación de OpenGnSys
OGETC=${OGETC:-$OPENGNSYS/etc} # Configuración de OpenGnSys
POWEROFFCONF=/etc/poweroff.conf # Configuración del script
+
+# Error si no existe el fichero de configuración de ahorro de energía.
+if [ ! -f $POWEROFFCONF ]; then
+ ogRaiseError $OG_ERR_NOTFOUND "$POWEROFFCONF"
+ exit $?
+fi
+# Obtener parámetros de configuración de ahorro de energía.
source $POWEROFFCONF
case $# in
@@ -24,18 +34,26 @@ case $# in
exit $?
fi
;;
- 1) #TODO Comprobar que el parámetro es entero positivo.
- # Nuevo timepo de espera.
- POWEROFFSLEEP=$1
+ 1) # Nuevo timepo de espera.
+ POWEROFFSLEEP="$1"
+ # Se deshabilita si se introduce la cadena "no" como tiempo de espera.
+ [ "$POWEROFFSLEEP" == "no" ] && POWEROFFSLEEP=
+ # Error si tiempo de espera no es nulo o entero positivo.
+ if [[ ! "$POWEROFFSLEEP" =~ ^[0-9]*$ ]]; then
+ ogRaiseError $OG_ERR_FORMAT "Parámetro debe ser núm. minutos o \"no\" para deshabilitar."
+ exit $?
+ fi
+ # Actualizar fichero de configuración con nuevo periodo de parada.
perl -pi -e "s/POWEROFFSLEEP=.*/POWEROFFSLEEP=$POWEROFFSLEEP/" $POWEROFFCONF
- # Si se necesita, recalcular tiempo de parada.
- if [ -n "POWEROFFTIME" ]; then
- POWEROFFTIME=$(date --date="$POWEROFFSLEEP min" +"%H%M")
+ # Si se necesita, recalcular tiempo de parada.
+ if [ -n "POWEROFFTIME" ]; then
+ # Asignar tiempo de apagado si no está deshabilitado y actualizar fichero.
+ POWEROFFTIME=${POWEROFFSLEEP:+$(date --date="$POWEROFFSLEEP min" +"%H%M")}
perl -pi -e "s/POWEROFFTIME=.*/POWEROFFTIME=$POWEROFFTIME/" $POWEROFFCONF
- fi
- exit 0 ;;
+ fi
+ exit 0 ;;
*) # Error de formato de ejecución.
- ogRaiseError $OG_ERR_FORMAT "Formato: $0 [int_minutos]"
+ ogRaiseError $OG_ERR_FORMAT "Formato: $0 [int_minutos | no]"
exit $? ;;
esac
# Comprobar si hay algún script en ejecución.
diff --git a/client/shared/etc/engine.cfg b/client/shared/etc/engine.cfg
index 59b4a5b6..103a0211 100644
--- a/client/shared/etc/engine.cfg
+++ b/client/shared/etc/engine.cfg
@@ -21,4 +21,15 @@ IMGREDUCE="TRUE"
#Configuracion del asistente de Clonacion remota usando master
#Al enviar particion reducir el sistema de archivos previamente.
-OGWINREDUCE=TRUE \ No newline at end of file
+OGWINREDUCE=TRUE
+
+# Imagenes sincronizadas
+# Factor para calcular el time-out al crear la imagen. 100000k -> 4s
+CREATESPEED=100000*4
+# Factor de compresion para las imagenes (windos en ext4).
+ZSYNC=120
+# Realizar copia de seguridad antes de crear la imagen.
+BACKUP="false"
+
+# Tiempo de sleep antes de realizar el reboot
+OGSLEEP="20"
diff --git a/client/shared/etc/es.qmap b/client/shared/etc/es.qmap
new file mode 100644
index 00000000..fa1fc5a3
--- /dev/null
+++ b/client/shared/etc/es.qmap
Binary files differ
diff --git a/client/shared/etc/init/default.sh b/client/shared/etc/init/default.sh
index 7b443e23..7d18def1 100755
--- a/client/shared/etc/init/default.sh
+++ b/client/shared/etc/init/default.sh
@@ -23,6 +23,9 @@ fi
if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then
echo "${MSG_LAUNCHCLIENT:-.}"
[ $ogactiveadmin == "true" ] && boot="admin"
+ # Indicar fichero de teclado de Qt para el idioma especificado (tipo "es.qmap").
+ [ -f /usr/local/etc/${LANG%_*}.qmap ] && export QWS_KEYBOARD="TTY:keymap=/usr/local/etc/${LANG%_*}.qmap"
+ # Ejecutar servicio cliente.
$OPENGNSYS/bin/ogAdmClient -f $OPENGNSYS/etc/ogAdmClient.cfg -l $OGLOGFILE -d $LOGLEVEL
fi
diff --git a/client/shared/etc/lang.ca_ES.conf b/client/shared/etc/lang.ca_ES.conf
index bcea34b4..6aa9fa2a 100644
--- a/client/shared/etc/lang.ca_ES.conf
+++ b/client/shared/etc/lang.ca_ES.conf
@@ -1,4 +1,4 @@
-# Idioma español.
+# Fichero de idioma: catalá.
# Mensajes de error.
MSG_ERR_GENERIC="Error imprevisto no definido"
@@ -8,6 +8,7 @@ MSG_ERR_NOTFOUND="Fichero o dispositivo no encontrado"
MSG_ERR_PARTITION="Partición errónea o desconocida"
MSG_ERR_LOCKED="Recurso bloqueado por operación de uso exclusivo"
MSG_ERR_CACHE="Error en partición de caché local"
+MSG_ERR_NOGPT="El disco indicado no contiene una particion GPT"
MSG_ERR_FILESYS="Sistema de archivos desconocido o no se puede montar"
MSG_ERR_NOTOS="Sistema operativo no instalado o no detectado"
MSG_ERR_IMAGE="No se puede crear o restaurar una image de sistema"
@@ -18,6 +19,7 @@ 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"
+MSG_ERR_UPDATECACHE="Error al realizar el comando updateCache"
MSG_ERR_UCASTSYNTAXT="Error en la generación de sintaxis de transferenica unicast"
MSG_ERR_UCASTSENDPARTITION="Error en envio UNICAST de una particion"
MSG_ERR_UCASTSENDFILE="Error en envio UNICAST de un fichero"
@@ -29,7 +31,11 @@ MSG_ERR_MCASTRECEIVERFILE="Error en la recepcion MULTICAST de un fichero"
MSG_ERR_MCASTSENDPARTITION="Error en envio MULTICAST de una particion"
MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepcion MULTICAST de un fichero"
MSG_ERR_PROTOCOLJOINMASTER="Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER"
-
+MSG_ERR_DONTMOUNT_IMAGE="Error al montar/reducir la imagen"
+MSG_ERR_DONTUNMOUNT_IMAGE="Error al desmontar la imagen"
+MSG_ERR_DONTSYNC_IMAGE="Imagen no sincronizable"
+MSG_ERR_NOTDIFFERENT="No se detectan diferencias entre la imagen basica y la particion."
+MSG_ERR_SYNCHRONIZING="Error al sincronizar, puede afectar la creacion|restauracion de la imagen"
# Mensajes de avisos.
MSG_DONTMOUNT="Sistema de archivos no montado"
@@ -38,19 +44,20 @@ MSG_DONTUNMOUNT="El sistema de archivos no se puede desmontar o no está montado
# Mensajes complementarios para las ayudas.
MSG_64BIT="64 bits"
MSG_ERROR="Error"
-MSG_EXAMPLE="Ejemplo"
-MSG_FORMAT="Formato"
-MSG_FUNCTION="Función"
+MSG_EXAMPLE="Exemple"
+MSG_FORMAT="Format"
+MSG_FUNCTION="Funció"
MSG_HARDWAREINVENTORY="Inventario de hardware de la máquina"
-MSG_IMAGE="imagen"
-MSG_INSTALLED="instalado"
+MSG_IMAGE="imatge"
+MSG_INSTALLED="instal-lat"
MSG_NOCACHE="sin caché local"
-MSG_NOEXTENDED="sin partición extendida"
-MSG_NOFORMAT="sin formato"
-MSG_PARTITION="partición"
-MSG_PROTOCOL="protocolo"
-MSG_RESERVEDVALUE="Valor reservado"
-MSG_UNKNOWN="Desconocido"
+MSG_NOEXTENDED="sense partició estensa"
+MSG_NOFORMAT="sense format"
+MSG_PARTITION="partició"
+MSG_PROTOCOL="protocol"
+MSG_RESERVEDVALUE="Valor reservat"
+MSG_UNKNOWN="Desconegut"
+MSG_WARNING="Avís"
# Mensajes del proceso de arranque.
MSG_DETECTLVMRAID="Detectar metadispositivos LVM y RAID."
@@ -63,22 +70,36 @@ MSG_MOUNTREPO="Montar repositorio por %s en modo %s."
MSG_OFFLINEMODE="Modo de arranque sin conexión."
MSG_OTHERSERVICES="Iniciar servicios complementarios del cliente."
MSG_POWEROFFCONF="Definir parámetros de ahorro de energía."
-# Mensajes en desuso
-MSG_ERRLOADUDEB="$MSG_ERROR: No se puede cargar el paquete udeb %s."
-MSG_LOADUDEBS="Cargar paquetes udeb."
+
+# Mensajes del menú por defecto.
+MSG_BOOT="Iniciar"
+MSG_DUPLEX="D&uacute;plex"
+MSG_HOSTNAME="Equipo"
+MSG_IPADDR="Direcci&oacute;n IP"
+MSG_MACADDR="Direcci&oacute;n MAC"
+MSG_MENUTITLE="Men&uacute; de opciones"
+MSG_POWEROFF="Apagar el equipo"
+MSG_SPEED="Velocidad"
# Mensajes de descripción breve de las funciones de la API.
+MSG_HELP_ogAclFilter="Extrae las acl de los ficheros de la diferencial"
+MSG_HELP_ogAddCmd="Añade comandos al fichero creado por la función ogInstalMiniSetup."
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."
+MSG_HELP_ogCheckSyncImage="Muestra el contenido de la imagen para comprobarla."
MSG_HELP_ogCompareChecksumFiles="Compara si coinciden las sumas de comprobación almacenadas de 2 ficheros."
MSG_HELP_ogCopyFile="Copia un fichero a otro almacenamiento."
MSG_HELP_ogCreateCache="Reserva espacio para la partición de caché al final del disco 1."
+MSG_HELP_ogCreateFileImage="Crea/Redimensiona el archivo de la imagen sincronizada"
MSG_HELP_ogCreateImage="Genera una imagen exacta de un sistema operativo instalado localmente."
+MSG_HELP_ogCreateInfoImage="Crea informacion del contenido de la imagen"
MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)."
MSG_HELP_ogCreatePartitions="Define la estructura de particiones de un disco."
+MSG_HELP_ogCreatePartitionTable="Genera una tabla de particiones en caso de que no sea valida."
+MSG_HELP_ogDeleteCache="Elimina la partición de caché local."
MSG_HELP_ogDeleteFile="Borra un fichero de un espacio de almacenamiento."
MSG_HELP_ogDeletePartitionTable="Elimina la tabla de particiones del disco"
MSG_HELP_ogDeleteRegistryKey="Borra una clave vacía del registro de Windows."
@@ -95,20 +116,26 @@ 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_ogGetDiskSize="Devuelve el tamaño del disco."
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_ogGetGroupDir="Devuelve el cmaino del directorio por defecto para el grupo del cliente."
+MSG_HELP_ogGetGroupName="Devuelve el nombre del grupo al que pertenece el cliente."
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."
+MSG_HELP_ogGetLastSector="Devuelve el último sector usable del disco o de una partición."
MSG_HELP_ogGetMacAddress="Devuelve la dirección Ethernet del cliente."
+MSG_HELP_ogGetMountImageDir="Devuelve el directorio de montaje de una imagen."
MSG_HELP_ogGetMountPoint="Devuelve el directorio donde está montado un sistema de archivos local."
MSG_HELP_ogGetOsType="Devuelve el tipo de un sistema operativo instalado."
MSG_HELP_ogGetOsVersion="Devuelve el tipo y la versión de un sistema operativo instalado."
-MSG_HELP_ogGetParentPath=$"Devuelve el camino completo del directorio padre de un fichero de sistema OpenGnSys."
+MSG_HELP_ogGetParentPath="Devuelve el camino completo del directorio padre de un fichero de sistema OpenGnSys."
MSG_HELP_ogGetPartitionActive="Indica cual es la partición marcada como activa en un disco."
MSG_HELP_ogGetPartitionId="Devuelve el identificador de tipo de una partición."
MSG_HELP_ogGetPartitionSize="Devuelve el tamaño de una partición."
+MSG_HELP_ogGetPartitionTableType="Devuelve el tipo de tabla de particiones del disco"
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."
@@ -118,13 +145,18 @@ MSG_HELP_ogGetWindowsName="Devuelve el nombre del cliente guardado en el registr
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_ogInstallLinuxClient="Instala el cliente OpenGnSys en un sistema operativo GNU/Linux."
+MSG_HELP_ogInstallMiniSetup="Instala un archivo que se ejecutará en el arranque de Windows."
+MSG_HELP_ogInstallWindowsClient="Instala el cliente OpenGnSys en un sistema operativo Windows."
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_ogIsLocked="Comprueba si una partición está bloqueada por una operación de uso exclusivo."
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_ogIsPartitionLocked=$MSG_HELP_ogIsLocked
+MSG_HELP_ogIsSyncImage="Comprueba si la imagen es sincronizable."
MSG_HELP_ogIsValidType="Comprueba si el tipo de sistema de archivos es válido para un identificador de partición."
+MSG_HELP_ogIsWritable="Comprueba si un sistema de archivos está montado con permiso de escritura."
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."
@@ -140,46 +172,67 @@ MSG_HELP_ogMount="Monta un sistema de archivos y devuelve el punto de montaje."
MSG_HELP_ogMountCache="Monta el sistema de archivos dedicado a caché local."
MSG_HELP_ogMountCdrom=""
MSG_HELP_ogMountFs=$MSG_HELP_ogMount
+MSG_HELP_ogMountImage="Monta una imagen sincronizable"
MSG_HELP_ogRaiseError="Muestra y registra mensajes de error y devuelve el código correspondiente."
MSG_HELP_ogReduceFs="Reduce el tamaño del sistema de archivos al mínimo ocupado por sus datos."
+MSG_HELP_ogReduceImage="Reduce el tamaño de la imagen"
MSG_HELP_ogRestoreImage="Restaura una imagen de sistema operativo."
+MSG_HELP_ogRestoreInfoImage="Restablece informacion del sistema: acl y enlaces simbolicos"
MSG_HELP_ogRestoreMbrImage="Restaura una imagen del sector de arranque (MBR)."
MSG_HELP_ogSetPartitionActive="Establece el número de partición activa de un disco."
-MSG_HELP_ogSetPartitionId="Modifica el identificador de tipo de una partición física."
+MSG_HELP_ogSetPartitionId="Modifica el tipo de una partición física usando el mnemónico del tipo."
MSG_HELP_ogSetPartitionSize="Establece el tamaño de una partición."
+MSG_HELP_ogSetPartitionType="Modifica el identificador de tipo de una partición física."
MSG_HELP_ogSetRegistryValue="Asigna un dato a un valor del registro de Windows."
MSG_HELP_ogSetWindowsName="Asigna el nombre del cliente en el registro de Windows."
MSG_HELP_ogSetWinlogonUser="Asigna el nombre de usuario por defecto para el gestor de entrada de Windows."
+MSG_HELP_ogSyncCreate="Sincroniza los datos de la particion a la imagen"
+MSG_HELP_ogSyncRestore="Sincroniza los datos de la imagen a la particion"
MSG_HELP_ogTypeToId="Devuelve el identificador asociado al mnemónico de tipo de partición."
MSG_HELP_ogUnhidePartition="Hace visible una partición de Windows."
MSG_HELP_ogUnlock="Desbloquea una partición tras finalizar una operación de uso exclusivo."
MSG_HELP_ogUnlockImage="Desbloquea una imagen tras finalizar una operación de uso exclusivo."
MSG_HELP_ogUnlockPartition=$MSG_HELP_ogUnlock
MSG_HELP_ogUnmount="Desmonta un sistema de archivos."
+MSG_HELP_ogUnmountAll="Desmonta todos los sistemas de archivos."
MSG_HELP_ogUnmountCache="Desmonta el sistema de archivos de caché local."
MSG_HELP_ogUnmountFs=$MSG_HELP_ogUnmount
-MSG_HELP_ogUnmountAll="Desmonta todos los sistemas de archivos."
+MSG_HELP_ogUnmountImage="Desmonta la imagen"
MSG_HELP_ogUpdatePartitionTable="Actualiza informacion tabla particiones del disco"
+MSG_HELP_ogWaitMountImage="Se espera un tiempo estimado a que se monte la imagen en el servidor."
+
+# scripts
+MSG_HELP_configureOs="Post-configura de arranque del sistema"
+MSG_HELP_createBaseImage="Genera imagen basica de la particion"
+MSG_HELP_createDiffImage="Genera imagen diferencial de la particion respecto a la imagen basica"
+MSG_HELP_partclone2sync="Convierte imagen de partclone en imagen sincronizable."
+MSG_HELP_restoreBaseImage="Restaura una imagen basica en una particion"
+MSG_HELP_restoreDiffImage="Restaura una imagen diferencial en una particion"
+MSG_HELP_updateCache="Realiza la actualizacion de la cache"
# Mensajes de descripción breve de la interfaz.
-MSG_INTERFACE_START="[START Interface ] Ejecutar comando: "
+MSG_INTERFACE_START="[START Interface] Ejecutar comando: "
MSG_INTERFACE_END="[END Interface] Comando terminado con este código: "
-# SCRIPTS messages.
+# Mensajes de scripts.
MSG_SCRIPTS_START=" INICIO scripts : "
MSG_SCRIPTS_END=" FIN scripts: "
+MSG_SCRIPTS_TASK_END="Fin de la tarea"
MSG_SCRIPTS_TASK_SLEEP="Esperando para iniciar"
MSG_SCRIPTS_TASK_START="Iniciando"
MSG_SCRIPTS_TASK_ERR="Error"
-# scripts createImage
+# Script createImage.
MSG_SCRIPTS_FILE_RENAME=" Renombrar fichero-imagen previo: "
MSG_SCRIPTS_CREATE_SIZE=" Calcular espacio (KB) requerido para almacenarlo y el disponible: "
-#scripts updateCache
+# Script updateCache.
MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Comprobamos si Actualizacion - existe una imagen con igual nombre pero distinto sum-"
MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE="Comprobar que el tamaño de la cache es mayor que el fichero a descargar."
+# Script updateCache: para las imágenes sincronizadas tipo dir.
+MSG_SCRIPTS_UPDATECACHE_CHECKSIZEDIR="Calculamos el tamaño de la imagen."
+MSG_SCRIPTS_UPDATECACHE_CHECKSIZEIMG="Comprobamos si hay que la imagen del repositorio es mayor que la de la cache."
MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO="Comprobar el espacio libre de la cache y actuar según engine.cfg"
MSG_SCRIPTS_UPDATECACHE_CHECKMCASTSESSION="Comprobando sesion multicast: ServidorMcast:PuertoSession:PuertoDatos"
@@ -195,5 +248,18 @@ MSG_SCRIPTS_OS_CONFIGURE="Iniciar la configuracion del sistema restaurado"
MSG_SCRIPTS_TIME_TOTAL="tiempo total del proceso"
MSG_SCRIPTS_TIME_PARTIAL="tiempo parcial del subproceso"
-#HTTPLOG
-MSG_HTTPLOG_NOUSE="No apague este ordenador por favor" \ No newline at end of file
+# HTTPLOG
+MSG_HTTPLOG_NOUSE="No apague este ordenador por favor"
+
+# mensajes syncronizadas
+MSG_SYNC_RESIZE="Redimensiona la imagen al tamaño necesario"
+MSG_SYNC_RESTORE="Trae el listado ficheros y baja la imagen"
+MSG_SYNC_DELETE="Diferencial: Borra archivos antiguos"
+MSG_SYNC_SLEEP="Espera que se monte/reduzca la imagen"
+# mensajes syncronizadas complementarios a errores
+MSG_SYNC_DIFFERENTFS="El sistema de ficheros de destino no coincide con el de la imagen"
+MSG_SYNC_EXTENSION="Las extensiones de la imagenes deben ser img o diff"
+MSG_SYNC_NOCHECK="La imagen esta montada por otro proceso, no podemos comprobarla"
+
+MSG_RESTORE="Restaura la imagen en"
+
diff --git a/client/shared/etc/lang.en_GB.conf b/client/shared/etc/lang.en_GB.conf
index e21e71ab..98dd7877 100644
--- a/client/shared/etc/lang.en_GB.conf
+++ b/client/shared/etc/lang.en_GB.conf
@@ -8,6 +8,7 @@ MSG_ERR_NOTFOUND="No such file or device"
MSG_ERR_PARTITION="Unknown or missing partition"
MSG_ERR_LOCKED="Resource locked by an operation"
MSG_ERR_CACHE="Local cache error"
+MSG_ERR_NOGPT="The current disc does not contain a GPT partition"
MSG_ERR_FILESYS="Unknown or unmounted filesystem"
MSG_ERR_NOTOS="Undetected operating system"
MSG_ERR_IMAGE="Cannot create or cannot restore an image"
@@ -18,18 +19,23 @@ MSG_ERR_CACHESIZE="Not enough space in cache"
MSG_ERR_REDUCEFS="Error reducing the filesystem"
MSG_ERR_EXTENDFS="Error expanding the filesystem"
MSG_ERR_IMGSIZEPARTITION="Restauration error: the partition is smaller than the image"
+MSG_ERR_UPDATECACHE="Error al realizar el comando updateCache"
MSG_ERR_UCASTSYNTAXT="Error in the generation of Unicast transfer syntax"
MSG_ERR_UCASTSENDPARTITION="Error in sending an Unicast partition"
MSG_ERR_UCASTSENDFILE="Error in sending an Unicast file"
MSG_ERR_UCASTRECEIVERPARTITION="Error in receiving an Unicast partition"
MSG_ERR_UCASTRECEIVERFILE="Error in receiving an Unicast file"
-MSG_ERR_MCASTSYNTAXT="Error en la generación de sintaxis de transferenica multicast"
+MSG_ERR_MCASTSYNTAXT="Error in generating Multicast transfer syntax"
MSG_ERR_MCASTSENDFILE="Error en envio MULTICAST de un fichero"
MSG_ERR_MCASTRECEIVERFILE="Error en la recepcion MULTICAST de un fichero"
MSG_ERR_MCASTSENDPARTITION="Error en envio MULTICAST de una particion"
MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepcion MULTICAST de un fichero"
-MSG_ERR_PROTOCOLJOINMASTER="Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER"
-
+MSG_ERR_PROTOCOLJOINMASTER="Error in connecting a Unicast|Multicast session to the master"
+MSG_ERR_DONTMOUNT_IMAGE="Failed to mount/reduce image"
+MSG_ERR_DONTUNMOUNT_IMAGE="Failed to unmount image"
+MSG_ERR_DONTSYNC_IMAGE="Not synchronized image"
+MSG_ERR_NOTDIFFERENT="No differences were detected between the basic image and partition"
+MSG_ERR_SYNCHRONIZING="Error al sincronizar, puede afectar la creacion|restauracion de la imagen"
# Warning messages.
MSG_DONTMOUNT="Unmounted filesystem"
@@ -51,6 +57,7 @@ MSG_PARTITION="partition"
MSG_PROTOCOL="protocol"
MSG_RESERVEDVALUE="Reserved value"
MSG_UNKNOWN="Unknown"
+MSG_WARNING="Warning"
# Mensajes del proceso de arranque.
MSG_DETECTLVMRAID="Detecting LVM and RAID meta-devices."
@@ -63,22 +70,36 @@ MSG_MOUNTREPO="Mounting repository using %s, %s mode."
MSG_OFFLINEMODE="Off-line boot mode."
MSG_OTHERSERVICES="Starting other services."
MSG_POWEROFFCONF="Setting power saving parameters."
-# Old messages.
-MSG_ERRLOADUDEB="$MSG_ERROR: No se puede cargar el paquete udeb %s."
-MSG_LOADUDEBS="Cargar paquetes udeb."
+
+# Default menu messages.
+MSG_BOOT="Boot"
+MSG_DUPLEX="Duplex"
+MSG_HOSTNAME="Hostname"
+MSG_IPADDR="IP Address"
+MSG_MACADDR="MAC Address"
+MSG_MENUTITLE="Options menu"
+MSG_POWEROFF="Shutdown computer"
+MSG_SPEED="Speed"
# API functions menssages.
+MSG_HELP_ogAclFilter="Extract the fileACLs of a differential image."
+MSG_HELP_ogAddCmd="Add commands to file created by ogInstalMiniSetup function."
MSG_HELP_ogAddRegistryKey="Add a new Windows registry key."
MSG_HELP_ogAddRegistryValue="Add a new Windows registry value."
MSG_HELP_ogBoot="Boot a installed operating system."
MSG_HELP_ogCalculateChecksum="Calculate file checksum."
MSG_HELP_ogCheckFs="Check a filesystem."
+MSG_HELP_ogCheckSyncImage="Displays the contents of the image to check it."
MSG_HELP_ogCompareChecksumFiles="Compare if the checksums match."
MSG_HELP_ogCopyFile="Copy a file to other storage."
MSG_HELP_ogCreateCache="Reserve space for the cache partition at the end of disc 1."
+MSG_HELP_ogCreateFileImage="Create/Resize the synchronized image file."
MSG_HELP_ogCreateImage="Create an exact image from a local filesystem."
+MSG_HELP_ogCreateInfoImage="Create information content of an image."
MSG_HELP_ogCreateMbrImage="Create an MBR image."
MSG_HELP_ogCreatePartitions="Create the disc partition table."
+MSG_HELP_ogCreatePartitionTable="Create a new disc partition table, if necesary."
+MSG_HELP_ogDeleteCache="Delete local cache partition."
MSG_HELP_ogDeleteFile="Delete a file."
MSG_HELP_ogDeletePartitionTable="Delete disk table partition"
MSG_HELP_ogDeleteRegistryKey="Delete an empty Windows registry key."
@@ -87,44 +108,55 @@ MSG_HELP_ogDeleteTree="Delete a directory tree."
MSG_HELP_ogDevToDisk="Display the order number of disk or partition for the device file path."
MSG_HELP_ogDiskToDev="Display the device file path for the order number of disk or partition."
MSG_HELP_ogEcho="Display and log messages."
-MSG_HELP_ogExtendFs="Extiende el tamaño de un sistema de archivo al máximo de su partición."
-MSG_HELP_ogFindCache="Indica la partición reservada para caché local."
+MSG_HELP_ogExtendFs="Extend the size of a filesystem to the maximum of its partition."
+MSG_HELP_ogFindCache="Indicates which partition is reserved for local cache."
MSG_HELP_ogFormat="Format a filesystem."
MSG_HELP_ogFormatCache="Format (purge) the local cache."
MSG_HELP_ogFormatFs=$MSG_HELP_ogFormat
MSG_HELP_ogGetArch="Return the client architecture."
MSG_HELP_ogGetCacheSize="Return the cache partition size."
-MSG_HELP_ogGetCacheSpace="Devuelve el espacio máximo disponible que puede ser reservado para la partición de caché local."
+MSG_HELP_ogGetCacheSpace="Returns the maximum available space that can be reserved for the local cache partition."
+MSG_HELP_ogGetDiskSize="Return the disc size."
MSG_HELP_ogGetFsSize="Return the filesystem size."
MSG_HELP_ogGetFsType="Return the filesystem type."
-MSG_HELP_ogGetHivePath="Devuelve el camino completo del fichero de una sección del registro de Windows."
+MSG_HELP_ogGetGroupDir="Return the group directory path for the client."
+MSG_HELP_ogGetGroupName="Return the group name for the client."
+MSG_HELP_ogGetHivePath="Return the full file path of a Windows Registry hive."
MSG_HELP_ogGetHostname="Return the client's hostname."
MSG_HELP_ogGetIpAddress="Return the client's IP address."
MSG_HELP_ogGetImageSize="Return the system image size."
+MSG_HELP_ogGetLastSector="Return the last available sector for a disc o partition."
MSG_HELP_ogGetMacAddress="Return the client Ethernet address."
+MSG_HELP_ogGetMountImageDir="Return the image mount directory."
MSG_HELP_ogGetMountPoint="Return the local filesystem mount point."
MSG_HELP_ogGetOsType="Return the operating system type."
MSG_HELP_ogGetOsVersion="Return the operating system version."
MSG_HELP_ogGetParentPath=$"Devuelve el camino completo del directorio padre de un fichero de sistema OpenGnSys."
MSG_HELP_ogGetPartitionActive="Return the active partitión of the disk."
-MSG_HELP_ogGetPartitionId="Devuelve el identificador de tipo de una partición."
-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_ogGetPartitionId="Return the partition type identifier."
+MSG_HELP_ogGetPartitionSize="Return the partition size."
+MSG_HELP_ogGetPartitionTableType="Return the disc partiton table type."
+MSG_HELP_ogGetPartitionType="Return the partition type."
+MSG_HELP_ogGetPath="Return the file full path."
+MSG_HELP_ogGetRegistryValue="Return a data value from the Windows registry."
+MSG_HELP_ogGetRepoIp="Return the IP address of an OpenGnsys Repository."
+MSG_HELP_ogGetServerIp="Return the main OpenGnSys Server IP address."
+MSG_HELP_ogGetWindowsName="Return the client name saved in the Windows registry."
MSG_HELP_ogHelp="Show the help menssages for functions."
-MSG_HELP_ogHidePartition="hide a Windows partition."
+MSG_HELP_ogHidePartition="Hide a Windows partition."
MSG_HELP_ogIdToType="Devuelve el mnemónico asociado al identificador de tipo de partición."
+MSG_HELP_ogInstallLinuxClient="Installs OpenGnSys agent in a GNU/Linux operating system."
+MSG_HELP_ogInstallMiniSetup="Instala un archivo que se ejecutará en el arranque de Windows."
+MSG_HELP_ogInstallWindowsClient="Installs OpenGnSys agent in a Windows operating system."
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_ogIsLocked="Comprueba si una partición está bloqueada por una operación de uso exclusivo."
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_ogIsPartitionLocked=$MSG_HELP_ogIsLocked
+MSG_HELP_ogIsSyncImage="Comprueba si la imagen es sincronizable."
MSG_HELP_ogIsValidType="Comprueba si el tipo de sistema de archivos es válido para un identificador de partición."
+MSG_HELP_ogIsWritable="Comprueba si un sistema de archivos está montado con permiso de escritura."
MSG_HELP_ogLinuxBootParameters="Devuelve los parámetros de arranque de un sistema operativo Linux instalado."
MSG_HELP_ogListHardwareInfo="List the cleint hardware inventory."
MSG_HELP_ogListPartitions="List the disk partitions table."
@@ -140,47 +172,67 @@ MSG_HELP_ogMount="Mount a filesystem and display its mount point."
MSG_HELP_ogMountCache="Mount the cache filesystem."
MSG_HELP_ogMountCdrom=""
MSG_HELP_ogMountFs=$MSG_HELP_ogMount
+MSG_HELP_ogMountImage="Monta una imagen sincronizable"
MSG_HELP_ogRaiseError="Muestra y registra mensajes de error y devuelve el código correspondiente."
MSG_HELP_ogReduceFs="Reduce el tamaño del sistema de archivos al mínimo ocupado por sus datos."
+MSG_HELP_ogReduceImage="Reduce el tamaño de la imagen"
MSG_HELP_ogRestoreImage="Restore a filesystem image."
+MSG_HELP_ogRestoreInfoImage="Restablece informacion del sistema: acl y enlaces simbolicos"
MSG_HELP_ogRestoreMbrImage="Restore the boot sector image (MBR)."
MSG_HELP_ogSetPartitionActive="Establece el número de partición activa de un disco."
-MSG_HELP_ogSetPartitionId="Change de partition identification."
+MSG_HELP_ogSetPartitionId="Change the partition identification using mnemonic."
MSG_HELP_ogSetPartitionSize="Set the partition size."
+MSG_HELP_ogSetPartitionType="Change the partition identification usign hexadecimal id."
MSG_HELP_ogSetRegistryValue="Asigna un dato a un valor del registro de Windows."
MSG_HELP_ogSetWindowsName="Asign the Windows hostname."
MSG_HELP_ogSetWinlogonUser="Asign the Windows default username."
+MSG_HELP_ogSyncCreate="Sincroniza los datos de la particion a la imagen"
+MSG_HELP_ogSyncRestore="Sincroniza los datos de la imagen a la particion"
MSG_HELP_ogTypeToId="Devuelve el identificador asociado al mnemónico de tipo de partición."
MSG_HELP_ogUnhidePartition="Unhide a Windows partition."
MSG_HELP_ogUnlock="Desbloquea una partición tras finalizar una operación de uso exclusivo."
MSG_HELP_ogUnlockImage="Desbloquea una imagen tras finalizar una operación de uso exclusivo."
MSG_HELP_ogUnlockPartition=$MSG_HELP_ogUnlock
MSG_HELP_ogUnmount="Unmount a filesystem."
+MSG_HELP_ogUnmountAll="Unmount all filesystems."
MSG_HELP_ogUnmountCache="Unmount the cache filesystem."
MSG_HELP_ogUnmountFs=$MSG_HELP_ogUnmount
-MSG_HELP_ogUnmountAll="Unmount all filesystems."
+MSG_HELP_ogUnmountImage="Desmonta la imagen"
MSG_HELP_ogUpdatePartitionTable="Update info about disk partition table "
+MSG_HELP_ogWaitMountImage="Se espera un tiempo estimado a que se monte la imagen en el servidor."
+
+# scripts
+MSG_HELP_configureOs="Post-configura de arranque del sistema"
+MSG_HELP_createBaseImage="Genera imagen basica de la particion"
+MSG_HELP_createDiffImage="Genera imagen diferencial de la particion respecto a la imagen basica"
+MSG_HELP_partclone2sync="Convierte imagen de partclone en imagen sincronizable."
+MSG_HELP_restoreBaseImage="Restaura una imagen basica en una particion"
+MSG_HELP_restoreDiffImage="Restaura una imagen diferencial en una particion"
+MSG_HELP_updateCache="Realiza la actualizacion de la cache"
# INTERFACE functions menssages.
MSG_INTERFACE_START="[START Interface] Run this command: "
MSG_INTERFACE_END="[END Interface] Command finished with this code: "
-
# SCRIPTS messages.
MSG_SCRIPTS_START=" START scripts: "
MSG_SCRIPTS_END=" END scripts: "
+MSG_SCRIPTS_TASK_END="Fin de la tarea"
MSG_SCRIPTS_TASK_SLEEP="Waiting for starting"
MSG_SCRIPTS_TASK_START="Starting"
MSG_SCRIPTS_TASK_ERR="Error"
-# scripts createImage
+# createImage script
MSG_SCRIPTS_FILE_RENAME=" Rename image-file previous: "
MSG_SCRIPTS_CREATE_SIZE=" Check size (KB) required to store and the size available: "
-#scripts updateCache
+# updateCache script
MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Checking if is necesary to do update image file"
MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE="Checking CACHE size is greater than image file."
+# Script updateCache: para las imágenes sincronizadas tipo dir.
+MSG_SCRIPTS_UPDATECACHE_CHECKSIZEDIR="Calculamos el tamaño de la imagen."
+MSG_SCRIPTS_UPDATECACHE_CHECKSIZEIMG="Comprobamos si hay que la imagen del repositorio es mayor que la de la cache."
MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO="Checking CACHE size free and get alternativae by engine.cfg"
MSG_SCRIPTS_UPDATECACHE_CHECKMCASTSESSION="Checking Multicast Session McastServer:SessionPort:DataPort"
@@ -196,5 +248,18 @@ MSG_SCRIPTS_OS_CONFIGURE="Sarting restores operating system restored"
MSG_SCRIPTS_TIME_TOTAL="Total process time"
MSG_SCRIPTS_TIME_PARTIAL="Part-time process"
-#HTTPLOG
-MSG_HTTPLOG_NOUSE="NOT POWEROFF THIS COMPUTER" \ No newline at end of file
+# HTTPLOG
+MSG_HTTPLOG_NOUSE="NOT POWEROFF THIS COMPUTER"
+
+# mensajes syncronizadas
+MSG_SYNC_RESIZE="Redimensiona la imagen al tamaño necesario"
+MSG_SYNC_RESTORE="Trae el listado ficheros y baja la imagen"
+MSG_SYNC_DELETE="Diferencial: Borra archivos antiguos"
+MSG_SYNC_SLEEP="Espera que se monte/reduzca la imagen"
+# mensajes syncronizadas complementarios a errores
+MSG_SYNC_DIFFERENTFS="El sistema de ficheros de destino no coincide con el de la imagen"
+MSG_SYNC_EXTENSION="Las extensiones de la imagenes deben ser img o diff"
+MSG_SYNC_NOCHECK="La imagen esta montada por otro proceso, no podemos comprobarla"
+
+MSG_RESTORE="Restaura la imagen en"
+
diff --git a/client/shared/etc/lang.es_ES.conf b/client/shared/etc/lang.es_ES.conf
index 8510381c..9b4afdfd 100644
--- a/client/shared/etc/lang.es_ES.conf
+++ b/client/shared/etc/lang.es_ES.conf
@@ -1,4 +1,4 @@
-# Idioma español.
+# Fichero de idioma: español.
# Mensajes de error.
MSG_ERR_GENERIC="Error imprevisto no definido"
@@ -8,29 +8,34 @@ MSG_ERR_NOTFOUND="Fichero o dispositivo no encontrado"
MSG_ERR_PARTITION="Partición errónea o desconocida"
MSG_ERR_LOCKED="Recurso bloqueado por operación de uso exclusivo"
MSG_ERR_CACHE="Error en partición de caché local"
-MSG_ERR_NOGPT="El disco indicado no contiene una particion GPT"
+MSG_ERR_NOGPT="El disco indicado no contiene una partición GPT"
MSG_ERR_FILESYS="Sistema de archivos desconocido o no se puede montar"
MSG_ERR_NOTOS="Sistema operativo no instalado o no detectado"
MSG_ERR_IMAGE="No se puede crear o restaurar una image de sistema"
MSG_ERR_NOTEXEC="Programa o función no ejecutable"
MSG_ERR_NOTWRITE="No hay acceso de escritura"
-MSG_ERR_NOTCACHE="No existe particion Cache en el cliente"
-MSG_ERR_CACHESIZE="El espacio de la cache local o remota no es suficiente"
+MSG_ERR_NOTCACHE="No existe partición caché en el cliente"
+MSG_ERR_CACHESIZE="El espacio de la caché 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"
-MSG_ERR_UCASTSYNTAXT="Error en la generación de sintaxis de transferenica unicast"
-MSG_ERR_UCASTSENDPARTITION="Error en envio UNICAST de una particion"
-MSG_ERR_UCASTSENDFILE="Error en envio UNICAST de un fichero"
-MSG_ERR_UCASTRECEIVERPARTITION="Error en la recepcion UNICAST de una particion"
-MSG_ERR_UCASTRECEIVERFILE="Error en la recepcion UNICAST de un fichero"
-MSG_ERR_MCASTSYNTAXT="Error en la generación de sintaxis de transferenica multicast"
-MSG_ERR_MCASTSENDFILE="Error en envio MULTICAST de un fichero"
-MSG_ERR_MCASTRECEIVERFILE="Error en la recepcion MULTICAST de un fichero"
-MSG_ERR_MCASTSENDPARTITION="Error en envio MULTICAST de una particion"
-MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepcion MULTICAST de un fichero"
-MSG_ERR_PROTOCOLJOINMASTER="Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER"
-
+MSG_ERR_IMGSIZEPARTITION="Error al restaurar: Partición mas pequeña que la imagen"
+MSG_ERR_UPDATECACHE="Error al realizar el comando updateCache"
+MSG_ERR_UCASTSYNTAXT="Error en la generación de sintaxis de transferenica Unicast"
+MSG_ERR_UCASTSENDPARTITION="Error en envío Unicast de una partición"
+MSG_ERR_UCASTSENDFILE="Error en envío Unicast de un fichero"
+MSG_ERR_UCASTRECEIVERPARTITION="Error en la recepción Unicast de una partición"
+MSG_ERR_UCASTRECEIVERFILE="Error en la recepción Unicast de un fichero"
+MSG_ERR_MCASTSYNTAXT="Error en la generación de sintaxis de transferenica Multicast"
+MSG_ERR_MCASTSENDFILE="Error en envío Multicast de un fichero"
+MSG_ERR_MCASTRECEIVERFILE="Error en la recepción Multicast de un fichero"
+MSG_ERR_MCASTSENDPARTITION="Error en envío Multicast de una partición"
+MSG_ERR_MCASTRECEIVERPARTITION="Error en la recepción Multicast de un fichero"
+MSG_ERR_PROTOCOLJOINMASTER="Error en la conexión de una sesión Unicast|Multicast con el Master"
+MSG_ERR_DONTMOUNT_IMAGE="Error al montar/reducir la imagen"
+MSG_ERR_DONTUNMOUNT_IMAGE="Error al desmontar la imagen"
+MSG_ERR_DONTSYNC_IMAGE="Imagen no sincronizable"
+MSG_ERR_NOTDIFFERENT="No se detectan diferencias entre la imagen básica y la partición"
+MSG_ERR_SYNCHRONIZING="Error al sincronizar, puede afectar la creacion|restauracion de la imagen"
# Mensajes de avisos.
MSG_DONTMOUNT="Sistema de archivos no montado"
@@ -52,6 +57,7 @@ MSG_PARTITION="partición"
MSG_PROTOCOL="protocolo"
MSG_RESERVEDVALUE="Valor reservado"
MSG_UNKNOWN="Desconocido"
+MSG_WARNING="Aviso"
# Mensajes del proceso de arranque.
MSG_DETECTLVMRAID="Detectar metadispositivos LVM y RAID."
@@ -64,21 +70,32 @@ MSG_MOUNTREPO="Montar repositorio por %s en modo %s."
MSG_OFFLINEMODE="Modo de arranque sin conexión."
MSG_OTHERSERVICES="Iniciar servicios complementarios del cliente."
MSG_POWEROFFCONF="Definir parámetros de ahorro de energía."
-# Mensajes en desuso
-MSG_ERRLOADUDEB="$MSG_ERROR: No se puede cargar el paquete udeb %s."
-MSG_LOADUDEBS="Cargar paquetes udeb."
+
+# Mensajes del menú por defecto.
+MSG_BOOT="Iniciar"
+MSG_DUPLEX="D&uacute;plex"
+MSG_HOSTNAME="Equipo"
+MSG_IPADDR="Direcci&oacute;n IP"
+MSG_MACADDR="Direcci&oacute;n MAC"
+MSG_MENUTITLE="Men&uacute; de opciones"
+MSG_POWEROFF="Apagar el equipo"
+MSG_SPEED="Velocidad"
# Mensajes de descripción breve de las funciones de la API.
+MSG_HELP_ogAclFilter="Extrae las acl de los ficheros de la diferencial"
MSG_HELP_ogAddCmd="Añade comandos al fichero creado por la función ogInstalMiniSetup."
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."
+MSG_HELP_ogCheckSyncImage="Muestra el contenido de la imagen para comprobarla."
MSG_HELP_ogCompareChecksumFiles="Compara si coinciden las sumas de comprobación almacenadas de 2 ficheros."
MSG_HELP_ogCopyFile="Copia un fichero a otro almacenamiento."
MSG_HELP_ogCreateCache="Reserva espacio para la partición de caché al final del disco 1."
+MSG_HELP_ogCreateFileImage="Crea/redimensiona el archivo de la imagen sincronizada"
MSG_HELP_ogCreateImage="Genera una imagen exacta de un sistema operativo instalado localmente."
+MSG_HELP_ogCreateInfoImage="Crea información del contenido de la imagen"
MSG_HELP_ogCreateMbrImage="Genera una imagen del sector de arranque (MBR)."
MSG_HELP_ogCreatePartitions="Define la estructura de particiones de un disco."
MSG_HELP_ogCreatePartitionTable="Genera una tabla de particiones en caso de que no sea valida."
@@ -110,6 +127,7 @@ MSG_HELP_ogGetIpAddress="Devuelve la dirección IP del cliente."
MSG_HELP_ogGetImageSize="Devuelve el tamaño de una imagen de sistema."
MSG_HELP_ogGetLastSector="Devuelve el último sector usable del disco o de una partición."
MSG_HELP_ogGetMacAddress="Devuelve la dirección Ethernet del cliente."
+MSG_HELP_ogGetMountImageDir="Devuelve el directorio de montaje de una imagen."
MSG_HELP_ogGetMountPoint="Devuelve el directorio donde está montado un sistema de archivos local."
MSG_HELP_ogGetOsType="Devuelve el tipo de un sistema operativo instalado."
MSG_HELP_ogGetOsVersion="Devuelve el tipo y la versión de un sistema operativo instalado."
@@ -129,14 +147,16 @@ 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_ogInstallLinuxClient="Instala el cliente OpenGnSys en un sistema operativo GNU/Linux."
MSG_HELP_ogInstallMiniSetup="Instala un archivo que se ejecutará en el arranque de Windows."
-MSG_HELP_ogInstallWindowsClient="Instala el cliente OpenGnSys en un sistema operativo Window."
+MSG_HELP_ogInstallWindowsClient="Instala el cliente OpenGnSys en un sistema operativo Windows."
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_ogIsLocked="Comprueba si una partición está bloqueada por una operación de uso exclusivo."
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_ogIsPartitionLocked=$MSG_HELP_ogIsLocked
+MSG_HELP_ogIsSyncImage="Comprueba si la imagen es sincronizable."
MSG_HELP_ogIsValidType="Comprueba si el tipo de sistema de archivos es válido para un identificador de partición."
+MSG_HELP_ogIsWritable="Comprueba si un sistema de archivos está montado con permiso de escritura."
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."
@@ -152,35 +172,52 @@ MSG_HELP_ogMount="Monta un sistema de archivos y devuelve el punto de montaje."
MSG_HELP_ogMountCache="Monta el sistema de archivos dedicado a caché local."
MSG_HELP_ogMountCdrom=""
MSG_HELP_ogMountFs=$MSG_HELP_ogMount
+MSG_HELP_ogMountImage="Monta una imagen sincronizable"
MSG_HELP_ogRaiseError="Muestra y registra mensajes de error y devuelve el código correspondiente."
MSG_HELP_ogReduceFs="Reduce el tamaño del sistema de archivos al mínimo ocupado por sus datos."
+MSG_HELP_ogReduceImage="Reduce el tamaño de la imagen"
MSG_HELP_ogRestoreImage="Restaura una imagen de sistema operativo."
+MSG_HELP_ogRestoreInfoImage="Restablece información del sistema: ACL y enlaces simbolicos"
MSG_HELP_ogRestoreMbrImage="Restaura una imagen del sector de arranque (MBR)."
MSG_HELP_ogSetPartitionActive="Establece el número de partición activa de un disco."
-MSG_HELP_ogSetPartitionId="Modifica el identificador de tipo de una partición física."
+MSG_HELP_ogSetPartitionId="Modifica el tipo de una partición física usando el mnemónico del tipo."
MSG_HELP_ogSetPartitionSize="Establece el tamaño de una partición."
+MSG_HELP_ogSetPartitionType="Modifica el identificador de tipo de una partición física."
MSG_HELP_ogSetRegistryValue="Asigna un dato a un valor del registro de Windows."
MSG_HELP_ogSetWindowsName="Asigna el nombre del cliente en el registro de Windows."
MSG_HELP_ogSetWinlogonUser="Asigna el nombre de usuario por defecto para el gestor de entrada de Windows."
+MSG_HELP_ogSyncCreate="Sincroniza los datos de la partición a la imagen"
+MSG_HELP_ogSyncRestore="Sincroniza los datos de la imagen a la partición"
MSG_HELP_ogTypeToId="Devuelve el identificador asociado al mnemónico de tipo de partición."
MSG_HELP_ogUnhidePartition="Hace visible una partición de Windows."
MSG_HELP_ogUnlock="Desbloquea una partición tras finalizar una operación de uso exclusivo."
MSG_HELP_ogUnlockImage="Desbloquea una imagen tras finalizar una operación de uso exclusivo."
MSG_HELP_ogUnlockPartition=$MSG_HELP_ogUnlock
MSG_HELP_ogUnmount="Desmonta un sistema de archivos."
+MSG_HELP_ogUnmountAll="Desmonta todos los sistemas de archivos."
MSG_HELP_ogUnmountCache="Desmonta el sistema de archivos de caché local."
MSG_HELP_ogUnmountFs=$MSG_HELP_ogUnmount
-MSG_HELP_ogUnmountAll="Desmonta todos los sistemas de archivos."
-MSG_HELP_ogUpdatePartitionTable="Actualiza informacion tabla particiones del disco"
+MSG_HELP_ogUnmountImage="Desmonta la imagen"
+MSG_HELP_ogUpdatePartitionTable="Actualiza información de la tabla de particiones del disco"
+MSG_HELP_ogWaitMountImage="Se espera un tiempo estimado a que se monte la imagen en el servidor."
+# Scripts
+MSG_HELP_configureOs="Post-configura de arranque del sistema"
+MSG_HELP_createBaseImage="Genera imagen básica de la partición"
+MSG_HELP_createDiffImage="Genera imagen diferencial de la partición respecto a la imagen básica"
+MSG_HELP_partclone2sync="Convierte imagen de partclone en imagen sincronizable."
+MSG_HELP_restoreBaseImage="Restaura una imagen básica en una partición"
+MSG_HELP_restoreDiffImage="Restaura una imagen diferencial en una partición"
+MSG_HELP_updateCache="Realiza la actualización de la caché"
# Mensajes de descripción breve de la interfaz.
MSG_INTERFACE_START="[START Interface] Ejecutar comando: "
MSG_INTERFACE_END="[END Interface] Comando terminado con este código: "
# Mensajes de scripts.
-MSG_SCRIPTS_START=" INICIO scripts : "
+MSG_SCRIPTS_START=" INICIO scripts: "
MSG_SCRIPTS_END=" FIN scripts: "
+MSG_SCRIPTS_TASK_END="Fin de la tarea"
MSG_SCRIPTS_TASK_SLEEP="Esperando para iniciar"
MSG_SCRIPTS_TASK_START="Iniciando"
@@ -191,18 +228,21 @@ MSG_SCRIPTS_FILE_RENAME=" Renombrar fichero-imagen previo: "
MSG_SCRIPTS_CREATE_SIZE=" Calcular espacio (KB) requerido para almacenarlo y el disponible: "
# Script updateCache.
-MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Comprobamos si Actualizacion - existe una imagen con igual nombre pero distinto sum-"
-MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE="Comprobar que el tamaño de la cache es mayor que el fichero a descargar."
-MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO="Comprobar el espacio libre de la cache y actuar según engine.cfg"
+MSG_SCRIPTS_UPDATECACHE_DOUPDATE="Comprobar si actualización -existe una imagen con igual nombre pero distinto sum-"
+MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE="Comprobar que el tamaño de la caché es mayor que el fichero a descargar."
+# Script updateCache: para las imágenes sincronizadas tipo dir.
+MSG_SCRIPTS_UPDATECACHE_CHECKSIZEDIR="Calcular el tamaño de la imagen."
+MSG_SCRIPTS_UPDATECACHE_CHECKSIZEIMG="Comprobar si la imagen del repositorio es mayor que la de la caché."
+MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO="Comprobar el espacio libre de la caché y actuar según engine.cfg"
-MSG_SCRIPTS_UPDATECACHE_CHECKMCASTSESSION="Comprobando sesion multicast: ServidorMcast:PuertoSession:PuertoDatos"
+MSG_SCRIPTS_UPDATECACHE_CHECKMCASTSESSION="Comprobando sesión Multicast: ServidorMcast:PuertoSession:PuertoDatos"
# interface sustituye temporalmente al scritp restore
MSG_SCRIPTS_CHECK_ENGINE="Analizar proceso a realizar según engine.cfg"
-MSG_SCRIPTS_MULTICAST_PRECHECK_PORT="Determinar puerto principal y auxiliar multicast."
-MSG_SCRIPTS_MULTICAST_CHECK_PORT="Comprobar puertos de sesion y datos"
+MSG_SCRIPTS_MULTICAST_PRECHECK_PORT="Determinar puerto principal y auxiliar Multicast."
+MSG_SCRIPTS_MULTICAST_CHECK_PORT="Comprobar puertos de sesión y datos"
MSG_SCRIPTS_MULTICAST_REQUEST_PORT="Solicitar la apertura: "
-MSG_SCRIPTS_OS_CONFIGURE="Iniciar la configuracion del sistema restaurado"
+MSG_SCRIPTS_OS_CONFIGURE="Iniciar la configuración del sistema restaurado"
# TIME MESSAGES
MSG_SCRIPTS_TIME_TOTAL="tiempo total del proceso"
@@ -211,3 +251,15 @@ MSG_SCRIPTS_TIME_PARTIAL="tiempo parcial del subproceso"
# HTTPLOG
MSG_HTTPLOG_NOUSE="No apague este ordenador por favor"
+# Mensajes syncronizadas
+MSG_SYNC_RESIZE="Redimensiona la imagen al tamaño necesario"
+MSG_SYNC_RESTORE="Trae el listado ficheros y baja la imagen"
+MSG_SYNC_DELETE="Diferencial: Borra archivos antiguos"
+MSG_SYNC_SLEEP="Espera que se monte/reduzca la imagen"
+# mensajes syncronizadas complementarios a errores
+MSG_SYNC_DIFFERENTFS="El sistema de ficheros de destino no coincide con el de la imagen"
+MSG_SYNC_EXTENSION="Las extensiones de la imagenes deben ser img o diff"
+MSG_SYNC_NOCHECK="La imagen esta montada por otro proceso, no podemos comprobarla"
+
+MSG_RESTORE="Restaura la imagen en"
+
diff --git a/client/shared/etc/preinit/fileslinks.sh b/client/shared/etc/preinit/fileslinks.sh
index ddea1198..2e71340d 100755
--- a/client/shared/etc/preinit/fileslinks.sh
+++ b/client/shared/etc/preinit/fileslinks.sh
@@ -6,9 +6,9 @@
#@version 0.9
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-10
-#@version 1.0
+#@version 1.0.5 - Enlace para librería libmac.
#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2011-03-21
+#@date 2012-06-28
#*/
@@ -17,7 +17,10 @@ if [ -n "$OPENGNSYS" ]; then
echo "${MSG_MAKELINKS:-.}"
# Shell BASH por defecto (para usar "runtest")
- ln -fs /bin/bash /bin/sh
+ ln -fs /bin/bash /bin/sh 2>/dev/null
+
+ # Enlace a la librería libmac para ld-mac.
+ [ -f /usr/lib/libmac.so ] || ln -fs $OGLIB/libmac.so /usr/lib 2>/dev/null
# Crear directorio de bloqueos
mkdir -p /var/lock 2>/dev/null || mkdir -p /run/lock
@@ -26,13 +29,21 @@ if [ -n "$OPENGNSYS" ]; then
touch $OGLOGCOMMAND $OGLOGCOMMAND.tmp $OGLOGSESSION /tmp/menu.tmp
chmod 777 $OGLOGCOMMAND $OGLOGCOMMAND.tmp $OGLOGSESSION /tmp/menu.tmp
-# # Directorio de tipos de letras para el browser.
+ # Enlaces para Qt Embeded.
QTDIR="/usr/local"
- # mkdir -p $QTDIR/lib
- # ln -fs $OGLIB/fonts $QTDIR/lib
+ mkdir -p $QTDIR/{etc,lib,plugins}
+ for i in $OGLIB/qtlib/*; do
+ [ -f $QTDIR/lib/$i ] || ln -fs $i $QTDIR/lib 2>/dev/null
+ done
+ for i in $OGLIB/qtplugins/*; do
+ [ -f $QTDIR/plugins/$i ] || ln -fs $i $QTDIR/plugins 2>/dev/null
+ done
+ for i in $OGETC/*.qmap; do
+ [ -f $QTDIR/etc/$i ] || ln -fs $i $QTDIR/etc 2>/dev/null
+ done
else
- # FIXME Error: entorno de OpenGNSys no configurado.
+ # FIXME Error: entorno de OpenGnSys no configurado.
echo "Error: OpenGnSys environment is not configured." # FIXME: definir mensaje.
exit 1
fi
diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh
index 1aa248d4..f5f45628 100755
--- a/client/shared/etc/preinit/loadenviron.sh
+++ b/client/shared/etc/preinit/loadenviron.sh
@@ -9,6 +9,9 @@
#@version 1.0.3 - Limpiar código y configuración modo off-line
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2012-01-12
+#@version 1.0.5 - Compatibilidad para usar proxy y servidor DNS.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2014-04-23
#*/
# Idioma por defecto.
@@ -86,6 +89,15 @@ if [ -d $OPENGNSYS ]; then
export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log"
fi
+# Compatibilidad para usar proxy en clientes ogLive.
+[ -z "$http_proxy" -a -n "$ogproxy" ] && export http_proxy="$ogproxy"
+
+# Compatibilidad para usar servidor DNS en clientes ogLive.
+if [ ! -f /run/resolvconf/resolv.conf -a -n "$ogdns" ]; then
+ mkdir -p /run/resolvconf
+ echo "nameserver $ogdns" > /run/resolvconf/resolv.conf
+fi
+
# Declaración de códigos de error.
export OG_ERR_FORMAT=1 # Formato de ejecución incorrecto.
export OG_ERR_NOTFOUND=2 # Fichero o dispositivo no encontrado.
@@ -100,9 +112,14 @@ export OG_ERR_NOTCACHE=15 # No hay particion cache en cliente
export OG_ERR_CACHESIZE=16 # No hay espacio en la cache para almacenar fichero-imagen
export OG_ERR_REDUCEFS=17 # Error al reducir sistema archivos
export OG_ERR_EXTENDFS=18 # Error al expandir el sistema de archivos
+export OG_ERR_OUTOFLIMIT=19 # Valor fuera de rango o no válido.
+export OG_ERR_FILESYS=20 # Sistema de archivos desconocido o no se puede montar
+export OG_ERR_CACHE=21 # Error en partición de caché local
+export OG_ERR_NOGPT=22 # El disco indicado no contiene una particion GPT
export OG_ERR_IMGSIZEPARTITION=30 # Error al restaurar partición más pequeña que la imagen
-
+export OG_ERR_UPDATECACHE=31 # Error al realizar el comando updateCache
+export OG_ERR_GENERIC=40 # Error imprevisto no definido
export OG_ERR_UCASTSYNTAXT=50 # Error en la generación de sintaxis de transferenica UNICAST
export OG_ERR_UCASTSENDPARTITION=51 # Error en envío UNICAST de partición
export OG_ERR_UCASTSENDFILE=52 # Error en envío UNICAST de un fichero
@@ -115,4 +132,8 @@ export OG_ERR_MCASTSENDPARTITION=58 # Error en envio MULTICAST de una particion
export OG_ERR_MCASTRECEIVERPARTITION=59 # Error en la recepcion MULTICAST de una particion
export OG_ERR_PROTOCOLJOINMASTER=60 # Error en la conexion de una sesion UNICAST|MULTICAST con el MASTER
-
+export OG_ERR_DONTMOUNT_IMAGE=70 # Error al montar una imagen sincronizada.
+export OG_ERR_DONTSYNC_IMAGE=71 # Imagen no sincronizable (es monolitica)
+export OG_ERR_DONTUNMOUNT_IMAGE=72 # Error al desmontar la imagen
+export OG_ERR_NOTDIFFERENT=73 # No se detectan diferencias entre la imagen basica y la particion.
+export OG_ERR_SYNCHRONIZING=74 # Error al sincronizar, puede afectar la creacion/restauracion de la imagen
diff --git a/client/shared/etc/preinit/otherservices.sh b/client/shared/etc/preinit/otherservices.sh
index 67b28f71..70210178 100755
--- a/client/shared/etc/preinit/otherservices.sh
+++ b/client/shared/etc/preinit/otherservices.sh
@@ -25,10 +25,8 @@ cp -a $OPENGNSYS/etc/preinit/loadenviron.sh /etc/profile.d/
#setterm -blank 0 -powersave off -powerdown 0 < /dev/console > /dev/console 2>&1
# Activado WOL en la interfaz usada en arranque PXE.
-ethtool -s $DEVICE wol g 2>/dev/null
+#ethtool -s $DEVICE wol g 2>/dev/null
-# Crear menú por defecto para el cliente y arrancar lighttpd.
-generateMenuDefault
# TODO Localizar correctamente el script de arranque.
[ -f /opt/opengnsys/scripts/runhttplog.sh ] && /opt/opengnsys/scripts/runhttplog.sh 2>/dev/null
diff --git a/client/shared/lib/engine/tests/NoModify/File1.shtest b/client/shared/lib/engine/tests/NoModify/File1.shtest
index c5ed051c..0bb4d69b 100644
--- a/client/shared/lib/engine/tests/NoModify/File1.shtest
+++ b/client/shared/lib/engine/tests/NoModify/File1.shtest
@@ -58,11 +58,6 @@ $ ogIsNewerFile CACHE prueba/fichero_prueba CACHE fichero_prueba2; echo $?
$ ogIsNewerFile CACHE fichero_prueba CACHE prueba/fichero_prueba; echo $?
1
-$ ogNewPath CACHE prueba2
-/opt/opengnsys/cache//opt/opengnsys/images/prueba2
-$ ls -d $OGCAC$OGIMG/prueba2
-/opt/opengnsys/cache/opt/opengnsys/images/prueba2
-
$ ogDeleteTree CACHE prueba
$ ls -d $OGCAC$OGIMG/prueba
ls: cannot access /opt/opengnsys/cache/opt/opengnsys/images/prueba: No such file or directory
diff --git a/client/shared/lib/engine/tests/crearTestDisk1 b/client/shared/lib/engine/tests/crearTestDisk1
index 95d51802..ab405221 100755
--- a/client/shared/lib/engine/tests/crearTestDisk1
+++ b/client/shared/lib/engine/tests/crearTestDisk1
@@ -99,12 +99,15 @@ $ ogDiskToDev 1
$ ogDiskToDev 1 1
/dev/sda1
-$ ogFsToId NTFS
+$ ogTypeToId NTFS
7
-$ ogFsToId EXT4
+$ ogTypeToId LINUX
83
+$ ogTypeToId LINUX GPT
+8300
+
# Tamaño de disco (cuando haya informacion en la base de datos)
diff --git a/client/shared/lib/grub4dos/example.menu.lst b/client/shared/lib/grub4dos/example.menu.lst
new file mode 100644
index 00000000..e4d1e988
--- /dev/null
+++ b/client/shared/lib/grub4dos/example.menu.lst
@@ -0,0 +1,108 @@
+# 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 blue/green yellow/red white/magenta white/magenta
+timeout 30
+default /default
+
+title find and load NTLDR of Windows NT/2K/XP
+fallback 1
+find --set-root --ignore-floppies --ignore-cd /ntldr
+map () (hd0)
+map (hd0) ()
+map --rehook
+find --set-root --ignore-floppies --ignore-cd /ntldr
+chainloader /ntldr
+savedefault --wait=2
+
+title find and load BOOTMGR of Windows VISTA
+fallback 2
+find --set-root --ignore-floppies --ignore-cd /bootmgr
+map () (hd0)
+map (hd0) ()
+map --rehook
+find --set-root --ignore-floppies --ignore-cd /bootmgr
+chainloader /bootmgr
+savedefault --wait=2
+
+title find and load CMLDR, the Recovery Console of Windows NT/2K/XP
+fallback 3
+find --set-root --ignore-floppies --ignore-cd /cmldr
+map () (hd0)
+map (hd0) ()
+map --rehook
+find --set-root --ignore-floppies --ignore-cd /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 4
+find --set-root /io.sys
+chainloader /io.sys
+savedefault --wait=2
+
+title find and boot 0PE.ISO
+fallback 5
+find --set-root /0PE/0PE.ISO
+map /0PE/0PE.ISO (0xff) || map --mem /0PE/0PE.ISO (0xff)
+map --hook
+chainloader (0xff)
+savedefault --wait=2
+
+title find and boot MicroPE.ISO
+fallback 6
+find --set-root /boot/MicroPE.ISO
+map /boot/MicroPE.ISO (0xff) || map --mem /boot/MicroPE.ISO (0xff)
+map --hook
+chainloader (0xff)
+savedefault --wait=2
+
+title Parted Magic ISO
+fallback 7
+find --set-root /pmagic.iso
+map /pmagic.iso (0xff) || map --mem /pmagic.iso (0xff)
+map --hook
+chainloader (0xff)
+savedefault --wait=2
+
+title Ultimate Boot CD ISO
+fallback 8
+find --set-root /ubcd.iso
+map /ubcd.iso (0xff) || map --mem /ubcd.iso (0xff)
+map --hook
+chainloader (0xff)
+savedefault --wait=2
+
+title commandline
+commandline
+
+title floppy (fd0)
+chainloader (fd0)+1
+rootnoverify (fd0)
+
+title back to dos
+quit
+
+title reboot
+reboot
+
+title halt
+halt
+
+title MAXDOS.IMG
+find --set-root --ignore-floppies /boot/MAXDOS.IMG
+map --mem /boot/MAXDOS.IMG (fd0)
+map --hook
+chainloader (fd0)+1
+rootnoverify (fd0)
+
+
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/COPYING b/client/shared/lib/grub4dos/grub4dos-0.4.5b/COPYING
new file mode 100644
index 00000000..eeb586b3
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/ChangeLog_GRUB4DOS.txt b/client/shared/lib/grub4dos/grub4dos-0.4.5b/ChangeLog_GRUB4DOS.txt
new file mode 100644
index 00000000..9d54b92d
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/ChangeLog_GRUB4DOS.txt
@@ -0,0 +1,704 @@
+2011-12-05 Issue 53: add new command 'iftitle' for menu.(thanks @Steve6375).
+2011-11-17 (tinybit)supported utf8 and unicode char printing.
+2011-11-04 (tinybit)added new argument of max_width for putchar; various fixes.
+2011-10-29 (tinybit)add new command 'font' for vesa fonts.(Not yet complete).
+2011-10-22 (tinybit)bug fix on failed loading multi-boot kernel(issue 44).
+2011-10-20 (tinybit)increased SYSTEM_RESERVED_MEMORY upto 0x2000000(i.e., 32M).
+2011-10-19 (tinybit)merged console/graphics setcolor functions.
+2011-10-18 (tinybit)rearranged memory usage and preparing for vbe support. merged console/graphics setcolor functions.
+2011-10-03 (tinybit)changed buf_addr from 0x20000 to 0x100000 to avoid possible conflict between dd_func and get_diskinfo.
+2011-10-01 (tinybit)resolved conflicts between gfxmenu and configfile.
+2011-09-28 (chenall)fixed partition enumeration problem(important!)(disk_io.c).
+2011-09-16 (tinybit)disabled ELCR code for ASUS eee PC 1215B.
+2011-09-06 (tinybit)fixed pxe_detect to handle long bootfile name.
+2011-08-05 (tinybit)added a map option --e820cycles for Dell Laptop N4030.
+2011-07-27 (tinybit)fixed a careless mistake in clean_entry().
+2011-07-21 (tinybit)added a map option --int15nolow. Some changes on handler.
+2011-07-10 (tinybit)re-enabled int13/ah=16h floppy detection in int13_handler.
+2011-07-27 (tinybit)fixed a careless mistake in clean_entry().
+2011-07-21 (tinybit)added a map option --int15nolow. Some changes on handler.
+2011-07-10 (tinybit)re-enabled int13/ah=16h floppy detection in int13_handler.
+2011-06-28 (tinybit)fixed a careless mistake in probe_mbr(missing evaluation on C/H/S). fixed a bug in clean_entry() which return the address of a local variable.
+2011-06-27 (tinybit)added wee_skip_to as a replacement for skip_to.
+2011-06-22 (tinybit)better probe_mbr handling abnormal partition tables.
+2011-06-19 (karyonix)int15 fix. (tinybit)remove code to save handler room.
+2011-06-10 (tinybit)trust CHS in floppy BPB for GRUB.EXE to run under DOS.
+2011-06-09 (tinybit)trust CHS in floppy BPB for GRUB.EXE to boot via NTLDR.
+2011-06-04 (namiltd)added exFAT filesystem accessibility.
+2011-06-02 (tinybit)better handling loading grub.exe from NTLDR in floppy
+2011-05-31 (tinybit)fix chainloading grub.exe from Grub4DOS
+2011-05-31 (tinybit)make grub.exe loadable by NTLDR
+2011-05-24 (tinybit)make grub.exe chainloadable
+2011-05-19 applied Roy's patch(Issue 27: adding PC-DOS/MS-DOS chainloading support).
+2011-05-14 (tinybit)use HLT command in key detection
+2011-05-09 applied steve6375's patch( Issue 23: Improve grub4dos menu item numbering).
+2011-05-07 applied Roy's patch(Issue 25: Add chainloading DELL DRMK DELLBIO.BIN support).
+2011-05-06 applied Roy's patch(issue 24: Add ReactOS freeldr chainloading support).
+2011-04-29 (tinybit)exclude ntfs short filename.allow space in fb_filename.
+2011-03-22 fixed a bug on case sensitivity in filename completion. added a new parameter "case_insensitive" to print_a_completion().
+2011-03-19 fixed a bug on NTFS unicode filename handling. let unicode_to_utf8() return string length after convertion.
+2011-03-05 fixed a bug on "cdrom --add-io-ports=...".
+2011-03-04 setup a byte at offset 0x1F0 of GRUB.EXE to indicate number of
+ sectors used by the DOSSTART.S; change boot_drive to -1 so that
+ external programs can set it up before transfer control to grub4dos;
+ when grub.exe is loaded as a kernel, the default boot device of
+ grub.exe will be set to the current root device of current grub4dos.
+2011-02-20 prevent IO.SYS from wiping out int32-3F.
+2011-02-17 fixed a bug of "0xEA not properly restored" in realmode_run(asm.S).
+2011-02-16 fixed a bug on stack checking in realmode_run(asm.S).
+2011-02-16 changed real_to_prot(asm.S) and related calls according to WEE.
+2011-01-22 fixed "map (hd1) (0xFF)" issue of failed cdrom emulation.
+2011-01-18 set "APM BIOS call" as default halt method(see http://reboot.pro/13632/).
+2011-01-16 clear preset_menu before enter_cmdline. uncomment the required "default entry number" resolving code(stage2.c).
+2011-01-15 trying to fix ELF executable loading problem(issue 14). (confirmed by the reporter).
+2011-01-07 applied karyonix's patch (issue 9: fix geometry_tune function)
+2011-01-07 applied Roy's patch(supported packed DR-DOS).
+2010-12-29 applied Roy's patch(fixed build issue).
+2010-12-25 applied Roy's patch(issue 13: fix autoconf and gcc issues in Linux).
+2010-12-11 (r73)applied karyonix's patch(issue 11: Wrong data read USB)
+2010-11-30 (r69)applied karyonix's patch(support lzma decompression).
+2010-12-07 (r68)applied karyonix's patch(issue 9).
+2010-11-15 improved ACPI halt code(patched by zw2312914,Thanks for MR.rockrock99 and MR.xianglang reports their different and special hardware response mechanism ).
+2010-11-04 finally fixed the ACPI halt failure on AMI netbook(by commenting out ACPI-enable code).
+2010-11-03 partially go back to ACPI halt code of 2010-10-29.
+2010-11-02 deleted a duplicate code snip which could cause halt failure.
+2010-10-31 fixed the find issue. changed ACPI halt code(based on zw2312914).
+2010-10-29 improved ACPI halt code(patched by zw2312914).
+2010-10-22 fixed AMI netbook gray-screen-of-death problem on halt.
+2010-10-19 allow BSD primary partitions to be made active.
+2010-10-12 fixed grub.exe issues when booting off Linux/kexec. Only comments added compared to 2010-10-11.
+2010-10-11 try to fix grub.exe issues when booting off Linux/kexec(enabled system timer 0 init).
+2010-10-09 try to fix grub.exe issues when booting off Linux/kexec(enabled writing ELCR port 4D0/4D1).
+2010-10-08 try to fix grub.exe issues when booting off Linux/kexec(enabled coprocessor init by writing port F0/F1).
+2010-10-07 try to fix grub.exe issues when booting off Linux/kexec(disabled writing ELCR port 4D0/4D1).
+2010-10-04 improved halt with ACPI. try to fix grub.exe issues when booting off Linux/kexec(by sending 100 EOIs to PICs).
+2010-09-22 let chainloader recognize isolinux.bin 4.02.
+2010-09-19 added support for 800x600 graphics mode(SVGA mode 6A).
+2010-08-09 improved CHS probing code of map command on ISO9660 images.
+2010-08-04 finally find out the missing-extended-partition problem is caused by a gcc bug, and workarounds are created.
+2010-07-25 re-enabled the extended partition with logical partitions in disorder.
+2010-07-24 patch by chenall: cat --length=0 will return the size of the compressed file if it is gzipped; fix memory-not-enough problem when mapping a gzipped memory-file with a high compression ratio.
+2010-07-23 improved next_pc_slice() to cope with the partition-loop problem.
+2010-07-22 try to solve the problem of missing Linux extended partitions in Tab-completion.
+2010-07-21 improved next_pc_slice() to cope with the partition-loop problem.
+2010-07-20 changed code about pxe_basemem to solve the problem that pxe_unload fail to release memory.
+2010-07-12 fixed a bug in guess_dos_versions(for DOS executable grub.exe).
+2010-06-21 applied bean's patch(supported new (ud) device created with fbinst1.6).
+2010-06-09 applied karyonix's patch(fixes on grub_read and blocklist).
+2010-06-07 adjusted probe_int(dosstart.S) to deal with HP DV3-2309TX on its garbage int76 vector.
+2010-06-03 adjusted restore_BDA_EBDA(dosstart.S) to deal with HP on its garbage EBDA size byte.
+2010-05-31 unhook int13 before hooking it in load_initrd() to avoid duplicate hooking.
+2010-05-29 resolved conflict between drives_addr and mmap_addr for multiboot kernels.
+2010-05-27 adjusted probe_int(dosstart.S) to deal with DELL on its garbage int05 vector.
+2010-05-23 change /main.lst back to /menu.lst, and the original /menu.lst dir to /menu for pxe booting.
+2010-05-21 changed initial config filename from /menu.lst to /main.lst for pxe booting.
+2010-05-19 fixed problem of mapping small file(<512B) to (rd).
+2010-05-15 added --keep-pxe option for grub.exe running under DOS.
+2010-05-14 (chenall)fixed ntfs small file(<4KB) access problem.
+2010-05-13 added --off option for hiddenmenu. added nokeep subcommand for pxe. let halt return on failure.
+2010-05-03 hopefully non-linux kernels could get loaded now. version number changed to 0.4.5b.
+2010-03-14 fixed problems in set_bootdev and others.
+2010-03-13 fixed a (possible)bug in init_pic(affect grub.exe as a linux kernel format). applied Icecube's patch(curr_part_start).
+2010-01-22 applied karyonix's patch(PAE).
+2010-01-07 fixed problem of "command-line length limited to 15" on external executables.
+2010-01-03 applied karyonix's patch(PAE paging).
+2010-01-02 applied karyonix's patch(map improvements).
+2009-12-30 fixed the failed find. note that the kernel command could hang while loading non-linux kernels, which is a known bug on newish 0.4.5 versions.
+2009-12-28 initial implementation of program execution. fixed a bug causing FAT16 search hang(grldrstart.S). version number changed to 0.4.5a.
+2009-12-12 moved up 32-bit grub kernel code at above physical addess 3M. moved down buffer for dd and geometry-tune at 0x20000. moved down raw disk buffer at 0x30000. version number changed to 0.4.5.
+2009-12-02 (chenall)fixed a bug in color_func(builtins.c).
+2009-12-01 (chenall)fixed a bug which caused dd/write to write onto the wrong sector of the disk(fsys_ntfs.c).
+2009-11-29 (chenall)fixed a bug when using (md) to access memory at 2G and above(bios.c). improved memmove64 to support overlap(asm.S).
+
+2009-11-25 Caution! Reports say build 2009-11-08 and later will write wrong data onto disk when using dd and/or write commands.
+
+2009-11-13 (chenall)added --replace option for cat. This will write to file. Caution!
+2009-11-11 let PXE_BUF use BUFFERADDR. cancelled (hd+) support. added (hd) and (hd-N) support.
+2009-11-09 moved FSYS_BUF and some other buffers up at 0x3E0000. (chenall)added (hd+) support for map.
+2009-11-08 map memdrive images at memory address above 4GB(only for 64-bit CPU). deleted SETUP, INSTALL and EMBED commands.
+
+2009-10-16 Turned off int13/AX=4B01/DL=7F cdrom query which may hang on some machines. Commented out DMA code related to running via KEXEC. Implemented 64-bit int13 memdrive block moving code.
+2009-06-20(r68) add (ud) device to access space created with fbinst.
+2009-06-11 fixed a bug of missing assignment of ES and BX registers in int13_handler(asm.S).
+2009-05-13 fixed size-wrap-to-0 infinite loop issue in grub_read()(disk_io.c).
+2009-05-07(r67) resolved conflict between int10 stack and BIOS Data Area(grldrstart.S).
+2009-05-03 fixed a bug in geometry_tune(grldrstart.S, asm.S). zw2312914 report.
+2009-04-30 triple mbr without bpb also bootable as a floppy(grldrstart.S).
+2009-04-26 added ending CHS calculation for partition entry in mbr of the triple mbr(bootlace.inc).
+2009-04-25 bug fix in dd about device length calculation(builtins.c).
+2009-04-24 save and restore GDTR in int13_handler(asm.S).
+2009-04-06 accept partitions starting in the mbr track(probe_mbr, builtins.c).
+2009-04-05 triple mbr floppy partition (fdX,Y) support for some USB BIOSes(disk_io.c).
+2009-04-04 fixed partition table entries in the 2nd and 3rd mbr of the triple mbr(bootlace.inc).
+2009-03-31(r66) 0.4.4 official release.
+2009-03-28 removed the problematic global variable "i"; reduced one open-file step for configfile on cdrom.
+2009-03-27 fixed memory overlap issue on "map --rehook".
+2009-03-25 disabled the search for DEFAULT file on cdrom(in cmain, stage2.c).
+2009-03-24 fixed problem of WRITE/DD on modifying internal variables. added dd options for user-defined buffer.
+2009-03-21 bug fix: turned errorcheck on in run_script and enter_cmdline.
+2009-03-20(r65) fixed `configfile not working in menu init command group'.
+2009-03-19 trying to fix problem of `configfile running slowly'.
+2009-03-18 fixed problem of `geometry-tune too slow' on vmware.
+2009-03-17 fixed endless loop problem while running "configfile (md)4+8".
+2009-03-15 added new option --sync for geometry command.
+2009-03-14 added new option --tune for geometry command.
+2009-03-12 rearranged preset-menu items.
+2009-03-11 changed geometry-tune code(aim to solve problem on vmware).
+2009-03-07 fixed a bug(in grldrstart.S) brought in since 2009-02-05.
+2009-03-03 fixed memory overflow issue with (rd). canceled restrictions on some disk write commands.
+2009-02-26 fixed geometry-tune issue(reportedly with Virtual PC).
+2009-02-21 changes made according to Simon's hiddenmenu patches.
+2009-02-20 documented the command line needed for chainloading stage2 of grub legacy.
+2009-02-19 now a range of drives can be unmapped.
+2009-02-18 possibility to run another menu.lst after gfxmenu.
+2009-02-17 fix graphics display issue generated last time.
+2009-02-15 improved color command to set color for help text and heading line.
+2009-02-13 fix problems booting Linux when there are mappings.
+2009-02-11 added ext4 support(in fsys_ext2fs.c).
+2009-02-09 isolinux.bin(version 3.73) gets chainloaded again.
+2009-02-08 Move some variables to a known address. The read command returns value at addess.
+2009-02-03 New initrd syntax loading multiple cpio files for Linux 2.6 kernels.
+2009-01-30 Supported per-menu-item help text.
+2009-01-28 Fixed printf issue. Allowed non-block files to be written with dd and write.
+2009-01-24 New syntax of WRITE support writing string to file.
+2009-01-16(r64) Added gfxmenu support
+2009-01-09 New commands dd and uuid. fixed a bug in disk emulation.
+2008-12-30 Work around for BIOSes lacking INT15/E820 support.
+2008-12-29(r63) Now the preset menu holds the highest priority. MSYS/MinGW support.
+2008-12-24 Added "detect" sub-command for the "pxe" command.
+2008-12-21 Fixed several bootlace bugs when running under DOS.
+2008-12-20 bootlace is now able to create triple MBR.
+2008-12-19 fixed problem of Disk Read Error on the last track.
+2008-12-16 under DOS bootlace can use a parameter file for its command-line arguments.
+2008-12-12 added a new option --chs-no-tune for bootlace.com.
+2008-12-07 workaround for buggy no-emulation-mode cdrom BIOSes.
+2008-12-04 fixed ext3 inode size issue on bootlace. fixed partition table check issue on bootlace.
+2008-12-03 cut off the MENU_BUF. removed the TESTLOAD command. added TITLES array.
+2008-12-01 added new program badgrub.exe. changed syntax of the find command.
+2008-11-19(r62) enable interrupt when DELAY. avoid disabling CPU cache in a20_test(a20.inc).
+2008-11-18p added STIs to better respond hardware interrupt(a20.inc, asm.S).
+2008-11-18 changed DELAY code(a20.inc). added JMPs in unreal mode for RAM disk emulation(asm.S).
+2008-11-15 loosened the check of the first FAT entry(fsys_fat.c). avoid using OUT instruction in DELAY(a20.inc).
+2008-11-11(r61) added --ignore-cd option for the find command.
+2008-11-08 read the boot file to determin the pxe block size. avoid running pxe_detect for non-pxe booting.
+2008-11-02 added a new option --mbr-no-bpb for bootlace.com.
+2008-11-01 changed PXE_MIN_BLKSIZE and PXE_MAX_BLKSIZE. allowed FAT cluster size larger than 32K.
+2008-10-26 fixed pxe block size issue.
+2008-10-21 fixed cylinder issue in int13/ah=8. Fixed stack conflict in bootlace.
+2008-10-17 added command line options --serial-number=SN and --restore-mbr to bootlace.
+2008-10-12 fixed a bug in fsys_fat.c causing FAT32 mount failure.
+2008-10-03 cancelled unnecessary initialisations for the root device.
+2008-10-02 improved int15 probing in probe_int.
+2008-10-01 before booting GRLDR, give the user a chance to boot previous mbr.
+2008-09-30 fixed a big bug in set_bootdev causing extra rawread executed and the geometry messed up.
+2008-09-29 fixed a big bug in get_diskinfo causing duplicate geometry calculation for each IO request on floppy.
+2008-09-27 fixed a new bug intrduced recently in get_diskinfo.
+2008-09-25 fixed an issue of uninitialised current_term in boot.c, causing the failure of the kernel command in graphics mode.
+2008-09-24 fixed the issue of "$BITMAP should be non-resident when in attribute list" in fsys_ntfs.c.
+2008-09-23 fixed virtual cdrom sector read issue(64K at a time) for a non-mem mapping.
+2008-09-21 added a new command "tpm --init".
+2008-09-21 fixed memory conflicts between graphics mode and linux kernel.
+2008-09-20 fixed a serious problem in grldrstart causing boot failure on FAT.
+2008-09-19 fixed a new bug intrduced last in get_diskinfo.
+2008-09-15 fixed a problem when different action occurs on a drive between chs and lba.
+2008-09-13 fixed a problem of reentering int13 handler from a virtual device on a real cdrom device driven by the builtin cdrom driver.
+2008-09-12 fixed an issue of whole cdrom mapping.
+2008-09-09 fixed virtual cdrom sector read issue when it is not a mem-mapping.
+2008-09-07 title delimitors(or comments) can be used in menu now.
+2008-08-27 save stack space occupation by the int13_handler.
+2008-08-26 fixed a bug relevant to iso emulation, causing disk read error.
+2008-08-24 save stack space occupation by the int13_handler.
+2008-08-14 enlarged stage2 stack space.
+2008-08-13 fixed again the bug on the root command.
+2008-08-12 fixed int5 in probe_int.
+2008-08-10 added a new command checkrange; fixed a bug on the root command.
+2008-08-08 added builtin stack for int13_handler to avoid stack overflow.
+2008-08-06 fixed a suspicious problem on the SCRATCH buffer in get_diskinfo.
+2008-08-04 fixed again error handling problem about operator && and ||; added STIs to better respond hardware interrupt.
+2008-08-03 fixed error handling problem about operator && and ||; grldr.mbr structure change; other small alterations.
+2008-07-28 added STIs to better respond hardware interrupt or to feed watchdog.
+2008-07-10(r60) let KEY_UP(KEY_DOWN) loop to the last(first) menu entry.
+2008-07-06 added backup_int13 and restore_int13 for a buggy usb bios f24a ver 1.00parttbl on compaq v5235tu(reporter: uleak). turn a20 debug on for memdrives.
+2008-06-28 fixed ext3-inode-size issue in grldr boot sector and bootlace.inc.
+2008-06-26 fixed int4C-4F in probe_int for Lenovo A6900.
+2008-06-24 fixed "256-byte ext3 inode size" issue in fsys_ext2fs.c.
+2008-06-23 added command ls.
+2008-06-22 disabled safe_int13 code for a buggy usb bios f24a ver 1.00parttbl on compaq v5235tu(reporter: uleak).
+2008-06-21 add A20 debug code to help locate a20 failure.
+2008-06-18 A20 test begins. Update version number to 0.4.4.
+2008-06-12 Let HIDE and UNHIDE respond with a message.
+2008-06-10 Let ROOT show correct filesystem info.
+2008-06-07 Let MAKEACTIVE and GEOMETRY show active partitions.
+2008-06-01 commented out the terminal-switching code in run_menu.
+2008-05-31 changed asm.S to avoid clearing out bss for the configfile command.
+2008-05-27 initialize saved_videomode/font8x16 for working across configfile.
+2008-05-25 fixed int76 in probe_int for a Tongfang.
+2008-05-22 fixed an issue of CPU cache wrongly disabled in GRUB.EXE for long.
+2008-05-21 fixed an issue of stack-overflow in real_get_cmdline.
+2008-05-17 enable the geometry_tune code for test only.
+2008-05-14 fix int5 and int8 in probe_int.
+2008-05-06 adjustment on probe_int for "pxe keep".
+2008-05-03 fixed problem on the commands setup and install.
+2008-05-02(r59) add new command checktime.
+2008-05-01 fixes on int vector probing, A20 control, configfile, find, etc.
+2008-03-14(r58) commented out the geometry-tune code. other fixes.
+2008-01-01(r57): mini build support
+2007-12-25(r56): created the test branch
+2007-12-25(r55) removed commands uppermem, ioprobe, impsprobe and displayapm.
+2007-12-14 test 3 of the geometry-tune.
+2007-12-10 cleanups on chainloader and errorcheck.
+2007-12-05 fixed a bug in ntfs file system module.
+2007-12-04 fixes on gzipped (rd) image support.
+2007-12-02 int13 emulation workaround for buggy BIOSes('Disk read error').
+2007-11-23 implemented cdrom emulation.
+2007-10-15(r54) version 0.4.3
+2007-10-08 implemented chainloading isolinux.
+2007-10-04 changed drive number of (md) to 0xffff.
+2007-10-02 reduced output messages for "debug off".
+2007-09-27 added a new map option of --a20-keep-on.
+2007-09-26 a workaround for buggy USB floppy BIOSes(hang at INT13/AH=48h).
+2007-08-27(r53) new notation () standing for the current root device.
+2007-08-26 new feature of root prefix for support of relative path.
+2007-08-25 fixed one more possible issue on A20.
+2007-08-24 fixed another possible issue on A20 for memdrives.
+2007-08-23 fixed a possible issue on A20 for memdrives.
+2007-08-21 expand memdrive size according to the probed CHS.
+2007-08-17 test A20 control for memory mapped disks.
+
+ Updated code for hmload.
+ Fixed a major problem of endless loop on enumeration of partitions.
+ Fixed an issue in probe_mbr.
+ Fixed a bug on compressed NTFS volume.
+ Fixed a problem in probe_int by capturing int10.
+
+2007-07-25 version 0.4.3pre2
+
+ Added a new command OUTLINE, and a new option --duce for GRUB.EXE.
+ Changed PARTNEW syntax. Fixed a problem of OPEN_PARTITION.
+ The arguments of PARTTYPE have changed to be optional.
+
+ A Fault-Recovery-Handler was imposed on probe_int to fight against
+ some very serious BIOS bugs(reportedly of DELL machines).
+
+ The DEBUG command syntax was changed for verbosity control.
+
+2007-06-22 version 0.4.3pre1
+
+ Fixed two problems on GRUB.EXE: preset_menu and FreeDOS related.
+ Added a new command `hiddenflag'; Added BPB in GRLDR.MBR; Ignored the
+ partition-ID check in filesystem modules; other fixes.
+
+ PXE and NTFS fixes.
+ Fixed a bug in probe_int for GRUB.EXE running in VM86 mode.
+ Rewrite fsys_ntfs.c
+ Fixed probe_int and init_pic in GRUB.EXE. Reduced warnings in bios.c.
+ Added PXE support.
+ NTFS code update for bootlace. Fixed timing functions.
+ fix a bug in get_diskinfo; protect the MBR of an in-situ-mapped drive.
+ Insert-key to debug on startup; polish graphics. NTFS boot record fix.
+ Bugfixes on STAGE2_SIZE, arrow keys, and handling `&&'/`||' in menu.
+ Move preset menu to the end/tail of pre_stage2.
+ Numeric keys to select menu entry; fixed a bug of int13 harddrives.
+ Code clean-ups on build script and keycode translation.
+ F11/F12 hotkey handling.
+ Added builtin NTFS boot sectors into GRLDR.
+ Added 3 commands is64bit, errnum and errorcheck.
+ Applied Robert Millan's patch of check_64bit.
+ Implemented two syntactic operators `&&' and `||'.
+ Added a new option --in-situ for the map command.
+
+ Fixed an auto-probe-int problem of GRUB.EXE under "EMM386 noems".
+
+ Workaround for buggy VirtualPC on a issue of floppy-emulation-mode
+ bootable CDROM.
+
+2006-12-28 version 0.4.2
+
+ Fixed a bug hidden deeply in memcheck.
+ Fixed a bug hidden deeply in get_diskinfo.
+ Fixed a bug in load_image.
+ GRLDR(as a no-emulation-mode bootable CDROM image) was adapted to
+ cope with some buggy BIOSes(e.g., VirtualPC).
+ Added LBA-to-CHS geometry translation(in int13_handler) to simulate
+ LBA(EBIOS)-enabled drives on CHS-only drives.
+ Added a new feature of Unconditional Command-line Entrance.
+ Applied Beverly Brown's patch to load_initrd.
+ Added two new options to the map command to better serve Win9x.
+ The default config file search path for GRUB.EXE was changed to
+ (DOS file) .\menu.lst and then (DOS file) \menu.lst and then
+ (GRUB file) /menu.lst.
+ Other bug fixes.
+
+2006-10-24 version 0.4.2pre11
+
+ Made a workaround for buggy USB-bootable board QDI 848E.
+ Made a workaround for buggy 965 board with SATA CDROM connected.
+
+2006-10-07 version 0.4.2pre10
+
+ Fixed a problem in GRUB shell which causes failure in grub-install.
+ Enabled GRUB.EXE to run under FreeDOS with memdrives in use.
+ Implemented an auto-probe mechanism to support all kinds of DOSes.
+
+2006-09-19 version 0.4.2pre9
+
+ Resolved several problems:
+ 1. (about kexec)Dropped the problematic kexec-tools-1.101-patch.
+ 2. (about stack)Adjusted code in C files to use less stack.
+ 3. (about cdrom)Fixed a few bugs in the cdrom driver.
+
+2006-08-29 version 0.4.2pre8
+
+ Added a new command `setvbe'.
+ Dropped the obsolete EZ-BIOS(with signature `AERMH') support.
+ Fixed a bug in parsing Rock-Ridge extension.
+ No-emulation-mode Bootable CD can be chainloaded now.
+ Some work was done to improve remote/diskless boot.
+ Fixed one more USB/Floppy EBIOS problem(in get_diskinfo).
+ Merged protected mode stack into real mode stack at 0x2000.
+ Code clean-up.
+
+2006-07-31 version 0.4.2pre7
+
+ Imported ATAPI CDROM driver from Smart Boot Manager.
+
+ Dropped the previous implementation of SCDROM/BIOSCDROM.
+
+ Fixed a USB/Floppy EBIOS problem that could cause media access failure
+ or even hang the machine when using USB storage devices.
+
+ Fixed a bug in BOOTLACE.COM that had improperly set the LBA indicator
+ byte(which is at offset 0x02 of the boot sector).
+
+ Fixed a bug in GRLDR that caused failure in finding the associated
+ MENU.LST config-file(which should be in the same directory as GRLDR).
+
+2006-06-18 version 0.4.2pre6
+
+ Dropped the obsolete EZD disk map support.
+ Fixed several bugs that may hang or slow the qemu virtual machine.
+ Fixed a bug that causes the pause command not to respond any key-press.
+ Fixed a bug that causes a command to accidentally fail if in a menu.
+ Fixed a bug that causes the menu not to work once a cdrom had booted.
+
+2006-06-05 version 0.4.2pre5
+
+ Added a static-linked binary executable file GRUB(a Linux utility).
+
+ Fixed a gateA20 problem related to memdrive emulation.
+
+ Boot GRUB.EXE directly off Windows9x/Me(experimental; might hang).
+
+2006-04-03 version 0.4.2pre4
+
+ Made GRUB.EXE run under EMM386.
+ Fixed a bug in splashimage_func().
+ Made `ignore error' constant and removed the `--ignore-error' option,
+ and renamed the option `--seconds=T' to `--wait=T' for savedefault.
+ The sample menu.lst was modified accordingly.
+
+2006-03-28 version 0.4.2pre3
+
+ New syntax for the `default' and `savedefault' commands was
+ implemented.
+
+ Changed `int' to `unsigned long' for filemax, filepos and fsmax, and
+ modified all fsys_*.c files in order to open large files(2GB or
+ longer).
+
+2006-03-09 version 0.4.2pre2
+
+ The directory `boot/grub/' was removed from the release tree(GRUB4DOS
+ does not use the stage files at boot time). The default config file for
+ GRUB.EXE was changed to (hd0,0)/menu.lst(but preset_menu still locates
+ (hd0,0)/boot/grub/menu.lst when (hd0,0)/menu.lst does not exist).
+
+ Added DOS command-line options --bypass, --time-out=T and --hot-key=K
+ for GRUB.EXE.
+
+2006-02-24 version 0.4.2pre1
+ gcc-4 support by VirusCamp.
+
+ Limited support for returning to DOS from GRUB.EXE.
+
+ Implemented a new feature that GRUB.EXE can be used as a DOS device
+ driver and be started in CONFIG.SYS with a DEVICE line.
+
+ Better IODELAY was made for initialization of PIC to fix the
+ keyboard-not-responding problem when running through KEXEC.
+
+ Better A20 gate control was made to help fix various problems on the
+ boot of grub.
+
+2005-12-14 version 0.4.1
+ Fixed a partition enumeration bug(in disk_io.c). Fixed a bug of mapping
+ partitions to harddrives(in builtins.c). Fixed a bug that causes
+ failure when `find --set-root' on a CD-ROM device(in builtins.c). Added
+ a new feature of directly chainloading ntldr and some dos kernels.
+
+2005-11-14 version 0.4.1pre32
+ Fixed more bugs.
+
+2005-11-02 version 0.4.1pre31
+ A few bugs were fixed.
+
+2005-10-23 version 0.4.1pre30
+ A bug about "bootlace.com --floppy" was fixed.
+
+2005-10-18 version 0.4.1pre29
+ Added ram disk device (rd) to access, typically, the initrd image.
+ Added many new command-line options for bootlace.com to install GRLDR
+ boot record onto the boot sector of a floppy. A few bugs about
+ "map --mem" were fixed. Another bug about finding grldr in NTFS was
+ also fixed. It may cause the machine to hang up when there is no ntfs
+ boot record in the boot area of the NTFS partition.
+
+2005-09-25 version 0.4.1pre28
+ Commandline option --config-file="FILENAME_OR_RAW_COMMANDS" was added
+ for GRUB.EXE where GRUB.EXE is treated as a Linux kernel.
+ Fixed a bug which causes installation failure when BOOTLACE.COM is
+ used for large disks.
+
+2005-09-21 version 0.4.1pre27
+ Added a patch to the kexec-tools-1.101. Kexec might fail to load
+ grub.exe without this patch.
+
+2005-09-14 version 0.4.1pre26
+ Fixed a bug for the DOS part of BOOTLACE.COM
+
+2005-09-11 version 0.4.1pre25
+ GRUB4LIN has merged into GRUB.EXE; A new command-line option
+ --read-only was added for BOOTLACE.COM; A few bug fixes.
+
+2005-09-01 version 0.4.1pre24
+ BOOTLACE.COM runs under both DOS and Linux.
+
+2005-08-27 version 0.4.1pre23
+ Added a utility BOOTLACE.COM for installing grldr bootstrap code to MBR
+
+2005-07-30 version 0.4.1pre22
+ Added bootstrap file GRLDR.MBR for launching grldr from MBR.
+
+2005-07-24 version 0.4.1pre21
+ Added Windows NT 4.0 support(actually fixed a bug reported by Stefan
+ Baur). For other new features, see README.txt.
+
+2005-07-20 version 0.4.1pre20
+ Added ext2/ext3 boot record code for loading grldr from the beginning
+ sector of a floppy or a partition.
+
+2005-05-25 version 0.4.1pre5
+ GRUB commands can be embedded into the command line of GRUB.EXE
+
+2005-05-20 version 0.4.1pre4
+ Bug fixes: When the system has no floppies, some operations,
+ e.g., the find command, will hang the machine.
+
+2005-05-17 version 0.4.1pre3
+ Search for cdrom_drive from drive 0x88 to drive 0xff
+
+2005-05-11 version 0.4.1pre2
+ Our base is now upgraded to GNU GRUB 0.97.
+
+2005-04-25 version 0.4.1pre
+ Fixed a bug reported by Gilles van Ruymbeke
+ <gvr_no_spam_123@ruymbeke.com> <gvr_grub4dos123@ruymbeke.ch>:
+
+ The map_func improperly opened the emulation image for 3 times, that
+ might slow down the load speed heavily, especially for gzipped files.
+
+2005-04-15 version 0.4.0
+ Add /boot/grub/menu.lst in preset menu. This is final.
+
+2005-04-07 version 0.4.0pre7
+ config_file takes precedence over preset_menu.
+
+2005-04-06 version 0.4.0pre6
+ GRLDR can be used with no-emulation-mode bootable CD-ROM.
+
+2005-03-09 version 0.4.0pre4
+ Now preset menu find /menu.lst, no longer support /boot/grub/menu.lst
+
+ Partition images can emulate a partition (hd?,0) with --mem option.
+
+2005-03-02 version 0.4.0pre3
+ GRLDR startup code search all partitions in all harddrives for GRLDR.
+
+ chainloader can boot images larger than 512 bytes, and can load image
+ to a different location than 0000:7C00.
+
+2005-02-06 version 0.4.0pre
+ Switched to GNU GRUB 0.96
+ The --mem option of MAP command was added for memdrive emulation.
+
+ Also announced 0.2.0 final.
+
+2004-10-23 version 0.2.0pre13
+ GRUB.EXE runs in DOSBOX.
+ GRUB4LIN is introduced to boot off LINUX.
+ Fixed a bug reported by windrv: NTFS check contiguity failure
+ Rearranged the patches.
+
+2004-08-31 version 0.2.0pre12
+ Fixed a bug reported by szwp: cannot load GRLDR on partition that is
+ not CHS-accessible.
+
+ Fixed a bug reported by windrv: take too much time to check contiguity
+
+2004-08-15 version 0.2.0pre11
+ Mark the scdrom module as experimental.
+
+2004-07-13 version 0.2.0pre9
+ Merged GNU GRUB 0.95
+
+ BOOTGRUB removed. Use BOOT.INI line C:\GRLDR="Start GRUB" instead.
+
+ Patches from Gandalf: NTFS and ATAPI CDROM support(also thanks to
+ Tobias Svensson <tobiassvensson@home.se>)
+
+ Patches from Chris Semler <csemler@mail.com>: findroot
+
+2004-04-12 version 0.2.0pre6
+ Now GRUB.EXE can be used in CONFIG.SYS this way:
+
+ shell=C:\some\where\grub.exe --config-file=(hd0,0)/boot/grub/menu.lst
+
+ or
+
+ shell=C:\some\where\grub.exe
+
+ No other changes.
+
+2004-04-09 version 0.2.0pre5
+ Now BOOTGRUB contains 4 sectors, i.e., 2048 bytes. Optionally, you may
+ copy the 2nd, 3rd and 4th sectors of BOOTGRUB to the three sectors that
+ immediately follow the MBR. Also Optionally, you may copy 446 bytes
+ from the very beginning of BOOTGRUB to the very beginning of MBR. In
+ this way, the GRLDR can be started out of MBR, without the presence of
+ NTLDR.
+
+ CAUTION: Don't copy 512 bytes to MBR. The partition table should not
+ be overwritten. The partition table is in the end of MBR. If you make
+ a mistake, you will lose your whole system!!
+
+2004-02-18 version 0.2.0pre4
+ Arbitrary-size floppy and hard disk emulation finally implemented.
+ GRUB for NTLDR is included. See README file.
+ Splash image version is available in the SPLASH directory.
+
+2003-09-23 version 0.1.4 -- development unstable release
+ Unfortunately 0.1.3 has an ugly bug. Fixed.
+
+2003-09-01 version 0.1.3 -- development unstable release
+ Rewrite the code for guessing FreeDOS int vectors. Hopefully it works
+ for all the future versions of FreeDOS :-)
+
+2003-08-25 version 0.1.2 -- development unstable release
+ Fixed a small bug that affects the read of the emulated floppy sectors.
+
+ Added some files (including the menu.lst file) for installing GRUB to
+ MBR from DOS. Usage:
+
+ Copy the boot directory to C:\ ; You must do this on Windows, NOT dos,
+ because DOS cannot deal with the long filenames.
+
+ Run grub to access the menu.lst file in C:\boot\grub ; Of cause on DOS.
+
+ When menu occurs, select a proper menu item for installing GRUB to MBR.
+
+ If the menu does not appear, you should get the "grub>" prompt. At the
+ prompt, type the following commands:
+
+ grub> configfile (hd0,1)/boot/grub/menu.lst
+ grub> configfile (hd0,2)/boot/grub/menu.lst
+ grub> configfile (hd0,3)/boot/grub/menu.lst
+
+ Then, the menu should occur.
+
+2003-06-29 version 0.1.0.1 -- development unstable release
+ Do some cleanups on 0.1.0, no important changes.
+ BTW, it seems that the 0.1.0 is quite stable :-)
+
+2003-06-29 version 0.0.8
+ Restore mapped int13 to the unmapped state while grub is invoked
+ after a previously performed drive map operation.
+
+2003-05-29 version 0.1.0 -- development unstable release
+ Floppy 1.44M drive emulation are OK. GOOD!!!! Usage:
+
+ # boot Windows 98 SE
+ map (hd1,0)/dos98se.img (fd0)
+ chainloader (hd1,0)/dos98se.img
+ rootnoverify (fd0)
+ boot
+
+ Another example:
+
+ # boot Mandrake hard disk installer
+ map (hd0,0)/hd.img (fd0)
+ chainloader (hd0,0)/hd.img
+ rootnoverify (fd0)
+ boot
+
+ Note that the floppy image file must size 1440KB, i.e., 1474560 bytes.
+ _AND_ also, the file must consist of one contiguous disk area, no
+ holes, no fragments. Use GRUB's blocklist command to determine whether
+ or not an image file is contiguous. It is known that a 1440KB-file is
+ always non-contiguous if it resides in an ext2 filesystem. But you may
+ get a 1440KB contiguous file with an FAT32 partition(vfat filesystem).
+
+ Floppy(and hard disk) with arbitrary sizes will be emulated in the
+ future.
+
+2003-05-06 version 0.0.7
+
+ Fixed a huge bug!! Read the following carefully!
+
+ Using the drive map command(just as many distributions currently do)
+
+ map TO_DRIVE FROM_DRIVE
+
+ to boot your system could seriously _damage_ your hard disk data,
+
+ totally and thoroughly!! This bug has just been fixed in 0.0.7 :-)
+
+ This bug is not specific to grub_for_dos, but caused by the original
+
+ grub-0.93 release. So do _NOT_ use map command any more until my fix is
+
+ accepted by GRUB maintainers or a similar fix is made by other
+
+ people. For now, do _NOT_ use map command in any kind of Linux
+
+ distributions such as Red Hat or Mandrake or any others.
+
+ Because GRUB_FOR_DOS-0.0.7 already applied the fix, so it
+
+ should be safe to use the map command.
+
+ Another small bug was also fixed in grub_for_dos-0.0.7 :-)
+
+2003-04-29 version 0.0.6
+ Runs also on MS-DOS 3.30. No other changes.
+
+2003-04-26 version 0.0.5
+ Runs on MS-DOS 4.0, 5.0, 6.0, 6.20, 6.21, 6.22, 7.0, 7.10, 8.0 and
+ FreeDOS(build 2029). GOOD!!
+
+2003-04-20 version 0.0.4
+ Running on FreeDOS(build 2029), GOOD!! (But currently GRUB.EXE only
+ has limited FreeDOS support, maybe unstable.)
+
+ Add a "Guess DOS Version" feature. The program now exit to DOS when
+ guess failed. The previous versions of GRUB.EXE always hang when
+ running on an unsupported DOS version.
+
+2003-04-13 version 0.0.3
+ The option "--config-file=FILE" was added.
+
+2003-04-11 version 0.0.2
+ Also runs on MS-DOS 8.0 (i.e., the DOS with WinMe/2000/XP), GOOD!!
+ The GRUB.PIF file included, so GRUB.EXE can be started from Windows 9x
+
+2003-04-10 version 0.0.1
+ Runs on MS-DOS 7.10(Win98)
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/ChangeLog_chenall.txt b/client/shared/lib/grub4dos/grub4dos-0.4.5b/ChangeLog_chenall.txt
new file mode 100644
index 00000000..cc498a49
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/ChangeLog_chenall.txt
@@ -0,0 +1,645 @@
+2011-12-11
+ 1.可以使用map --status=n来获取已经映射磁盘的状态。 use map --status=n to get status of hooked drive n.
+ 返回以下两个变量信息(return)
+ %?%=Start_Sector
+ %@retval%=Sector_Count
+ 如果该磁盘不存在返回0.
+
+2011-12-08
+ 1.支持菜单自动编号(使用动态菜单时比较有用)。 Support menu AutoNumber.this is useful when used iftitle.
+ usage:
+ write 0x8274 0x2001
+ or
+ write 0x8274 0x2D01
+ 0x20(space) or 0x2d ('-') is the delimiter char in ascii code.
+ 更多的用法介绍:
+ http://bbs.wuyou.com/viewthread.php?tid=180142&page=193#pid2351695
+
+2011-12-06
+ 1.bug修正。
+ 2.使用调试模式启动时可以显示条件菜单执行的命令。
+
+2011-12-05
+ 1.添加条件菜单功能 added iftitle.
+ 语法: iftitle [<command>] Actual Title displayed\nOptional help line
+ 只要条件不成立该菜单项目无效。
+ eg.如果(hd0,0)上有bootmgr文件才会显示第一个菜单,如果有NTLDR文件才会显示第二个菜单
+
+ iftitle [if exist (hd0,0)/bootmgr] Boot to NT6.X from (hd0,0)
+ chainloader (hd0,0)/bootmgr
+
+ iftitle [if exist (hd0,0)/ntldr] Boot to NT5.X from (hd0,0)
+ chainloader (hd0,0)/ntldr
+
+2011-12-01
+ 1.BUG修正。
+ BUG fixed.
+ 2.添加使用INT18启动功能。
+ Supported boot via INT 18.
+ 用法(usage):
+ boot -1
+ or
+ boot --int18
+ 3.一些代码精简
+
+2011-11-29
+ 1.BUG修正。
+ 2.新的color命令语法。
+ color color_state=color [..]
+ 其中color_state字符串可以如下。
+ normal 未选中菜单
+ highlight 选中菜单
+ helptext 菜单帮助信息
+ heading 菜单头(GRUB4DOS信息)
+ standard 默认色(控制台)
+ border 菜单边框VBE模式下有效果
+ 3.新的setcolor/setcolorstate函数
+
+2011-11-27
+ 1.修正fontfile命令在splashimage后面时导至背景图颜色错误的问题.
+ 2.VGA模式(0x12/0x6a)没有使用splashimage命令时可以指定字体颜色和console模式一样.
+
+2011-11-22
+ 1.新的COLOR命令允许设置控制台默认字体颜色和背景色(只限于文本模式或VBE模式)
+ 方法: 直接使用只带一个参数的color命令即可.
+ 注: 在命令行或批处理脚本中执行有效.
+
+2011-11-19
+ 1.cursor_state bit 0=1 show cursor,bit 1=1 show splashimage.
+ use setcursor(n) to change if need,can change from commandline e.g.
+ call Fn.70 0 disable cursor and splashimage.
+ 2.清理部份无用代码.
+
+2011-11-18
+ 1.支持BMP背景图片,只限于VBE模式 supported splashimage with BMP format(VBE mode only).
+ 2.使用BMP图片时,如果非处于VBE模式,则尝试自动匹配图片分辨率.
+
+2011-11-03
+ 1.修正一个map的bug. bug fixed in map_func.
+ 相关贴子:
+ http://bbs.wuyou.com/viewthread.php?tid=201887
+ http://bbs.wuyou.com/viewthread.php?tid=201647
+ 2.忽略ISO9660文件系统上文件名的大小写. Make name comparisoncase-insensitive on iso9660.
+ 可以使用以下命令禁用该功能. You can use below command to disable this feature.
+ write 0x4CA24 0
+ 3.cat命令添加--locatei参数, added --locatei option for cat.
+ 查找时忽略大小写 ignore case locate.
+ eg.
+ cat --locatei=Test (md)0x300+1
+
+2011-10-07
+ 1.新增?_BOOT变量,访问启动GRUB4DOS的Boot_drive
+ add new Variable ?_BOOT to access grub4dos Boot_drive.
+ 2.为了节省代码GRUB4DOS内部不再处理外部命令WENV的兼容性(WENV tuxw版)
+ 解决办法如下:
+ 如果需要使用该版本WENV则自己在菜单或批处理中添加以下命令
+ write --offset=0x1f8 (md)0x228+1 ?_WENV\0
+ 3.uuid 命令对于uuid字符的判断不区分大小写。
+
+2011-10-02
+ 1.取消对fb启动盘的修正,恢复原样.
+ 2.其它批处理相关代码微调.
+
+2011-09-28
+ 1.修正访问磁盘分区的BUG(disk_io.c),感谢Yonsm的报告和测试.
+ fixed a bug in disk_io.c
+ http://bbs.wuyou.com/viewthread.php?tid=200520&extra=page%3D1
+
+2011-09-13
+ 1.修正insmod的一个bug(不能直接insmod默认路径下的文件)
+ fixed a bug in insmod_func.
+
+2011-09-05
+ 1.insmod支持指定名字,比如insmod fat.gz fat.
+ Support specified name when insmod a module.
+
+2011-09-02
+ 1.fixed a bug in setloca/endlocal.
+2011-08-25
+ 1.修正cat命令的一个BUG,使用cat --locate-align参数时会出错.
+ fixed a bug in cat_func.
+2011-08-23
+ 1.添加echo/cat命令的帮助信息.(issue: 38,40)
+ add help text for command echo/cat.
+ 2.修复help --all显示的问题(issue: 39)
+ fixed "help --all" issue.
+2011-08-09
+ 1.批处理call/gotoBUG修复.
+ 2.新的call可以直接call一个命令.
+
+2011-08-08
+ 1.一些代码微调.
+ 2.修正Ctrl+C强制中止批处理脚本,有时会失败的问题(call和&&,||连用时可能会失败)
+ 3.使用管道符"|"时超过0xC00长度的之符将被丢弃.
+
+2011-08-01
+ 1.外部命令调用修改,优先使用当前目录下的命令(如果存在的话).
+ 2.修复在批处理中使用exit命令退出批处理,导致批处理返回值为0的问题.
+
+2011-07-30
+ 1.批处理执行时允许使用Ctrl+C强制中断运行.
+
+2011-07-19
+ 1.内置变量?_WENV=?_UUID=?
+ 注:1.将来会取消?_UUID,为了保持兼容性,暂时先放一段时间.
+ 请使用%?%或%?_WENV%代替%?_UUID%来获取UUID.
+ 2.%?%变量可以获取命令返回的字符串信息.
+ 目前可用的信息有两个.uuid dev(返回指定设备的UUID字符串),cat --locate= (返回最后一个找到的位置)
+ 2.@random算法修改.
+
+
+2011-07-13
+ 1.在执行cmain之前初始化变量内存空间。
+
+2011-07-12
+ 1.执行clear命令时同时设置count_lines为0。
+ 2.内置变量增加@retval,其实就是之前的0x4cb00
+ 3.增加setlocal @和endlocal @用法。
+ setlocal @可以在批处理中使用,把当前的环境保存起来
+ 除非使用endlocal @否则setlocal @之后的设置会一直保留(批处理退出也不影响).
+ 注:1.在批处理中出现setlocal @则在批处理中setlocal @之前的setlocal命令会全部失效。
+ 所以setlocal @有必要的使用的话一般要放在批处理最前面。
+ 2.setlocal @后面如果还有出现setlocal,则setlocal之后的设置不会保留.
+
+2011-07-11
+ 1.添加SETLOCAL和ENDLOCAL命令,和WINDOWS下的批处理用法一样。
+
+2011-07-05
+ 1.尝试解决%~d0,%~f0路径提取的问题,现在%~f0应该可以提取到正确的路径。
+ 2.解决if命令输出转向失败的问题。
+ 3.其它代码调整。
+
+2011-05-27
+ 1.优化PXE_DIR代码。
+ 2.其它微调。
+
+2011-05-25@176
+ 1.调整cat命令的查找字符串代码。
+ 2.修改批处理的调试模式开启方法(改为debug 3才会进入调试模式)
+ 3.消除一些编译时的警告信息。
+
+2011-05-23@174
+ 1.修正一个TFTP相对路径的问题,感谢2011exuejiao@wuyou.
+ 2.在批处理中可以使用debug 3临时开启debug模式。
+
+2011-04-30@159
+ 1.取消前面版本对批处理参数的调整.恢复到04-16版.
+ 2.修正一个BUG.(函数print_root_device).
+ 3.批处理参数新增%~f 文件全路径,%~z文件大小.
+ 4.现在批处理脚本可以使用使用errorcheck命令控制是否检测错误(默认错误就退出).
+
+2011-04-29@157
+ 1.find 命令不再查找(hdx)设备.
+ 2.删除@root变量的前导空格.
+ 3.ls命令新增dev参数,用于显示设备列表.
+ 4.批处理代码调整,对于(bd)设备%~d0会使用实际的设备.
+
+2011-04-25@156
+ 1.新增两个内置变量@root,@path.
+ @root 当前的root.
+ @path 当前默认外部命令查找路径.
+ 2.修正一个可能导致程序出错的问题.(使用到了临时变量的内存).
+ 3.批处理代码功能增强.
+
+2011-04-16@153
+ 1.md5crypt 支持参数。后面直接跟一个字符串会直接计算这个字符串的md5。
+ 2.菜单支持以变量开头的命令。
+
+2011-03-30@151
+ 1.LZMA格式解压时暂时禁止显示进度(因为显示进度时解压大文件会失败)。
+ 2.添加内置变量?_UUID(使用uuid命令可以把获取到的磁盘uuid保存到变量中).
+
+2011-03-29@150
+ 1.insmod *.mod添加了检测模块文件头是否为GRUBEXEC签名.
+ 注:目前还是兼容旧版本的MOD模块,一段时间后会取消,请使用新的MAKEMOD重新制作模块。
+
+ 2.对批处理路径和文件名的空格进行自动处理。空格前面自动加转义符"\"
+ 注:使用p,n,x参数时有效。即%~1时不会处理,但%~p1时会处理。
+
+2011-03-26@150
+ 1.使用kernel (rd)+1启动时,默认的启动设备改为当前root.
+
+2011-03-25@149
+ 1.修改cat命令替换时显示的信息
+ cat --locate=S -replace=R 除非debug on否则不显示信息.
+ 2.批处理参数新增%*代表所有参数%1 %2 %3 ....
+
+2011-03-24
+ 1.set /p功能增强(可能会和之前的版本不兼容),新增参数set /p:N
+ 主要变动:
+ 1).如果未输入不会清除原来的变量.(之前的版本会清除).
+ 2).新增支持默认时间没有输入自动退出.
+ set /p:N variable=prompt
+ 如果在N秒之内没有任何输入,则返回,并且不改变variable的值.
+
+2011-03-23
+ 1.为了方便使用,修改shift命令为内部命令.并且shift支持参数
+ shift n 或 shift /n
+ 具体用法,可以参考CMD/linux下的shift命令帮助.
+
+2011-02-19
+ 1.修复kernel加载grub2 loader的问题.
+ fixed a bug when load multiboot-image(boot.c).
+ 2.现在可以运行16位程序,和wee的机制一样(直接移植了wee里面的代码)
+
+2011-02-15
+ 1.添加realmode_run函数
+ 2.修改GPT分区检测代码,更加严格的检测。
+
+2011-02-12
+ 1.增加GPT分区检测,检测不通过就使用MBR分区。
+ 2.一些代码微调。
+
+2011-02-10
+ 1.清理UTF8转换UNICODE的代码,不再需要(请同时更新UNIFONT).
+ 2.修复变量字符串截取BUG.Fixed Bug in envi_cmd func.(thanks sratlf@wuyou report).
+ http://bbs.wuyou.com/viewthread.php?tid=180142&page=52#pid2154655
+
+ 注意:从2011-02-10开始,必须使用最新版的UNIFONT才可以正常显示UNICODE字符.
+
+ Note: You must also update unifont to the latest version.new unifont can show unicode char anywhere.
+ Download the latest version of unifont:
+ http://code.google.com/p/grubutils/downloads/list
+
+2011-01-28
+ 1.支持读取GPT分区表。
+ 为了区别MBR分区表和方便编程,所有的GPT分区类型全部使用0xEE表示。
+
+ 2.修正一个bug,现在可以访问大于1T的硬盘.但还不能访问超过2T的内容。
+
+2011-01-26
+ 1.修复run_line的一个BUG,会导致返回值为假。
+ 2.添加IF/SET命令的帮助信息。
+ 3.IF命令增加以下语法,判读一个变量或文件是否存在。
+ if exist variable|filename command.
+ 4.控制pause的输出,debug小于0时不显示倒计时。debug小于1时不显示按键码.
+
+2011-01-22
+ 1.set /A 参数使用16进制数保存变量,set /a 十进制数保存变量。
+ 2.修复goto的一个bug.
+ 3.修复重定向操作符的bug.
+
+2011-01-19
+ 1.set命令不再接受回车换行符。
+ 2.修复获取批处理参数bug.
+ 3.修复fb文件系统bug(可能会导致访问文件出错)。
+
+2011-01-14
+ 1.set命令增强.添加了/l,/u参数
+ set /l a=Abcd
+ 把Abcd转为小写./u是转换大写。
+
+2011-01-13
+ 1.修复utf8菜单编码自动检测的BUG。
+
+2011-01-10
+ 1.修复SET命令的bug,添加/p参数
+ 2.修复启动linux时内存冲突的bug.
+
+2011-01-09
+ 1.菜单支持变量。
+ 2.支持变量截取(和CMD的方法一样),不支持替换。
+
+2011-01-08
+ 1.重写grub_sprintf函数,支持简易的宽度和精度控制符(m.n或*.*)。
+
+2011-01-07
+ 1.SET命令添加一个参数/a可以把=后面的计算结果赋值给变量.
+ 2.新的safe_parse_maxint函数支持一元运算符。"~!-"
+
+2011-01-06
+ 1.修改CAT命令的显示。现在的cat /filen.ext碰到字符结束符'\0'就停止。
+ 2.批处理内部添加一个命令shift(只能在批处理中使用).
+ 3.skip_to函数现在会可以跳过(‘\r’和‘\n’)。
+ 4.set *将清除所有变量。
+
+2011-01-05
+ 1.修正run_line的一个逻辑错误。
+ 2.外部命令command默认的目录改为(bd)/BOOT/GRUB/
+2011-01-03
+ 1.pager命令即实生效。
+ 2.添加简易的if判断命令类似的MSDOS.目前支持的判断如下:
+ added a new command if.
+ if [/I] [NOT] STRING1==STRING2 [COMMAND]
+ 注:判断符号==前后不允许有空格或制表符否则比较会失败。
+ 2.添加SET命令可以设置、修改、删除变量。
+ added a new command set to modify the variable.
+ 3.从现在开始支持变量。用法和MS-DOS一样。
+ From now supports variable.
+ 注:使用了和WENV同样的方案。所以这个功能可以看成是简化版的WENV
+
+2011-01-02
+ 1.pause命令添加一个参数--test-key,可以显示按键扫描码。
+ added --test-key option for pause to display the key scan code.
+ 2.grub_sprintf函数支持字符串精度控制符。
+
+
+2011-01-01
+ 1.修复find命令的bug。当然使用条件查询时可能会出错。
+ 2.批处理参数修改,为了方便使用,%9改成剩余的所有参数。
+ 比如参数: 1 2 3 4 5 6 7 8 9 0 a b c
+ 那%9就是9 0 a b c.
+
+2010-12-31
+ 1.pause命令增强,增加了显示按键码的功能。
+ 2.hiddenmenu命令增强。增加一个--chkpass参数
+ 具体用法请参考: README_GRUB4DOS.TXT对应的更新
+
+2010-12-28
+ 1.一些BUG修复.
+ 2.PAUSE命令增加倒计时显示.
+ 3.fsys_fb.sys代码微调.
+
+2010-12-25
+ 1.现在delmod也是一个内部命令.
+ 2.重写insmod/delmod相关的代码.把加载的模块固定在内存18MB开始的位置.
+
+2010-12-21
+ 1.从command_func中分离出insmod作为一个内部命令存在.
+ 现在允许insmod加载一个命令合集.(扩展名.mod)
+ 例子:
+ insmod grub4dos.mod
+ 这个命令合集使用MAKEMOD程序生成.
+
+2010-12-18
+ 1.代码调整.
+ cat添加一个参数--number=N 在查找替换的时候指定查找次数.
+2010-12-17
+ 1.fixed a bug in checkrange_func.
+
+2010-12-16
+ 1.修正使用批处理运行时可能会出现ERROR 25的错误.
+ 2.重写批处理运行函数.
+
+2010-12-15
+ 1.还原2010-12-10对0000:82A4的改变.
+ 2.为了方便使用当使用fbinst启动时有如下调整
+ boot_drive (bd) 为FB_DRIVE(ud)
+ 默认root(saved_drive) 为可见分区.
+ 3.为了减小压缩包的大小,改成用7z压缩发布.
+
+2010-12-14
+ 1.完善对ud(fbinst创建的分区)支持.现在不需要从fbinst启动也可以随意访问fbinst创建的分区.
+ 2.允许在批处理中执行的外部命令调用goto/call标签.
+
+2010-12-12
+ 1.批处理添加exit命令.直接退出批处理.如果后面有数值则设置为errnum.
+ 如exit 1,退出,并返回一个错误的值.
+ 2.一些代码优化调整.
+ 3.修改pause命令,现在的pause直接返回按键的ascii码值.
+
+2010-12-11
+ 1.完善批处理脚本参数的支持(同CMD下的批处理用法一样).
+ 2.可以在菜单中使用goto命令(即跳到某个菜单项目).
+ 3.delmod 添加参数-l用于显示已经加载的模块.如果-l后面还有参数则是判断该模块是否加载.
+
+2010-12-10
+ 1.改变了以下内存地址的定义(和之前的版本相反)
+ 0000:82A4 4 (DWORD) no_decompression (no auto gunzip)
+ 改成了
+ 0000:82A4 4 (DWORD) do_decompression (do auto gunzip)
+ 2.0x8284的值的bit2如果为1则显示解压进度,否则不显示,默认不显示.
+ 3.完善了goto/call的功能
+
+2010-12-09
+ 1.批处理脚本支持标签(类拟BAT批处理).
+ support goto/call and :label in batch script.
+ CALL :label arguments
+ goto label
+
+2010-12-07
+ 1.添加两个命令用于加载外部命令到内存中,加快运行速度.
+ insmod path-to-program
+ delmod program
+
+2010-12-06
+ 1.批处理脚本支持参数%0 - %9同cmd批处理用法一样。%~n 可以去掉前后的引号
+
+2010-11-24
+ 1.修正一个skip_to函数的bug。
+ fixed a bug in skip_to func,thanks tuxw.
+
+2010-11-21
+ 1.解决在(ud)上使用自动补全功能问题.
+ http://bbs.znpc.net/viewthread.php?tid=5976
+
+2010-11-19 supported pxe_dir list.
+ 1.添加PXE(pd)文件列表的支持.TFTP ROOT 上的每个目录下都需要有dir.txt才支持.
+ 可以使用以下命令生成dir.txt文件
+ for /r %i in (.) do (dir /a/b %i >%i\dir.txt)
+
+2010-11-18
+ 1.Fixed a bug in batch file,thanks Mr.zhaohj.
+ http://bbs.wuyou.com/viewthread.php?tid=180142&page=9#pid2087407
+ 2.Add a new variable at 0000:8278 for grub4dos version by date.
+ e.g. read 0x8278 return 0x132B7FE (20101118)
+ 3.Fixed a bug in find_func,thanks Mr.pseudo.
+2010-11-17
+ 1.重写command_func函数大部份代码。
+ 为了方便外命命令的编写,修改主函数调用为以下格式。
+ int main (char *arg, int flags)
+ 新的版本可以直接使用arg和flags参数,不需要再进行计算了。
+
+2010-11-16
+ 1.改进malloc/free函数。
+ 2.允许执行多个外部命令(之前只允许一个),现在可以在外部命令里面调用其它外部命令。
+ 外部命令调用方法使用builtin_cmd函数:builtin_cmd(char *cmd,char *arg,chat *flags);
+ builtin_cmd(NULL,Command and parameters,flags);
+
+2010-11-15
+ 1.内置echo命令自动回车符改为"\r\n"
+ 2.添加malloc/free函数.
+
+2010-11-04
+ 1.重写run_line(执行一行命令函数)。
+ 支持操作符连用。例:
+  echo a | echo b | echo c | echo
+ echo abcd > (md)0x300+1 && echo def
+ 2.支持新的操作符">>"和">"一样,但这个会附加(附加在输出文件中的第一个字符串结束符'\0'后面)
+  注:目前这个操作符不会改变文件大小。
+
+ 2.内置ECHO函数添加两个参数(默认回车不转义)
+ -n 不自动添加回车符
+     -e 允许转义符
+2010-10-28
+ 1.some bug fixed.
+ 2.find支持查找使用cdrom --init生成的光驱(只找第一个)
+
+2010-10-27
+ 1.修改printf函数,支持显示"%",和C语言的语法一样,使用"%%"来显示一个"%"
+ 2.重写find的查询代码.
+ 3.find新增参数--devices=[DEVICES],指定要查找的设备.
+
+ 说明:DEVICES可以是以下字符的组合:
+ u,p,n,h,c,f -->分别对应 ud,pd,nd,hd,cd,fd,
+
+ 例子:--devices=hcf //只查找hd,cd,fd,从hd开始.
+ 注:优先current root.然后再按上面的顺序.(current root必须在列表中,否则跳过)
+
+ 可以使用这个参数来重新设定查找顺序,默认(find order):ud->pd->nd->hd->cd->fd
+
+ 4.保留--ignore-cd和--ignore-floppies参数(会自动转换).
+
+2010-10-26
+ 1.find支持(fdx,y)的格式.
+ 2.优先查找当前root.
+2010-10-03
+ 1.使用操作符"|"时默认自动添加空格,并解决使用"|"时可能导致死机或重启的问题。
+
+2010-09-30
+ 1.修正操作符号!失效的问题。
+ 2.恢复内置菜单的大写MENU.LST为小写(保持兼容性)。
+ 3.内置echo命令。
+ 用法:
+ echo [-P:[-]XX[-]YY] MESSAGE
+ XX: Line number.
+ YY: Column number.
+
+ XXYY指定后面MESSAGE要显示的位置。
+ XX指定行号,YY指定列号。前导“-”,即倒数.
+
+2010-09-25
+ 1.修正calc计算的一个逻辑错误。
+ 2.使用fbinst启动默认root设为ud
+ set boot_drive to fb_drive(ud) if boot from fbinst.
+ 3.添加一个新的命令initscript,只能用于菜单中。
+ initscript用于初始化菜单,每次返回菜单时在显示完菜单后执行。
+ 有时候会需要这样的功能,比如执行某个菜单失败后返回菜单时重新执行一次初始化。
+ initscript /initscript.g4d
+
+2010-09-25
+ 1.简易计算器调整.如果没有"="则不保存计算结果,但++和--除外.
+ 例子:
+ calc *0x60000 + 4 不保存计算结果,所以内存指向*0x60000的值不会被改变.
+ calc *0x60000++ 会保存计算结果到*0x60000中.
+ calc *0x60000 = 1+2 同上.
+ 2.如果当前已经是图形模式允许graphicsmode直接切换,而不用经过terminal console中转.
+
+2010-09-16
+ 1.修正一个产生Error 27的错误。
+
+2010-09-06
+ 1.添加操作符号"|" ">",输出重定向(有点类似DOS)
+ Implemented two syntactic operators "|" and ">".Like Dos Output redirection.
+ note: 1.use with "&&" and "||" ,the "|" and ">" must be at last.
+ 2."|" and ">" can not use at same time.
+ 例子:
+ 1. pause abcd | pause efg
+ output: efgabcd
+ 2. pause 0x60000 | read #There is a space after the read.
+ run read 0x60000
+ 3.help > (hd0,0)/help.txt or help > (md)0x3000+2
+ help.txt must already exist,grub4dos cann't create file or change file size.
+2010-09-05
+ 1.修改TAB的显示方式,现在使用8个字节对齐显示。
+
+2010-08-10
+ 1.fixed a bug in disk_io.c,it may return error 25 when set root to a cd drive.
+ 修正一个BUG,当设置root为cd设备时可能会提示Error 25的错误.
+ 2.加快colinux下源码在cofs设备时编译的速度.
+
+2010-06-21
+ 1.打上支持新版FB的补丁
+ 来源:http://www.burgloader.com/bbs/index.php?topic=37.30
+2010-05-02
+ 1.PXE启动时首先尝试加载root目录下的menu.lst。
+
+2010-04-17
+ 1.命令行自动完成调整.现在可以直接输入/+TAB显示当前目录下的文件或(hd0,0)/+TAB显示(hd0,0)/下面的文件列表
+ 以前的版本必需要像以下命令才可以。
+ root /+TAB
+ 2.get_cmdline函数调整,以方便外部命令直接调用。
+
+2010-03-29
+ 1.外部命令执行过程调整。
+
+ 例子:默认path (bd)/grub/
+ echo abcd ## 优先使用(bd)/grub/echo 文件,如果没有再找 /echo 文件
+ /echo abcd ## 只查找/echo 文件。
+ (fd0)/echo abcd ## 只找 (fd0)/echo abcd 文件。
+ 2.find 命令添加一个 --ignore-oem 参数。
+ http://code.google.com/p/grub4dos-ireneuszp/
+
+2010-03-10
+ 1.边框位置自动调整。
+
+2010-03-09
+ 1.注释掉karyonix 4G GZIP MAP的部份代码。
+ 2.添加UNIFONT外部命令,可以加载UNIFONT字库。当菜单文件是UTF8格式时可以显示多国语言。
+ Support multi-language menu with UNIFONT.
+
+2010-03-01
+ 1.打上了karyonix的4G map 补丁
+ http://bbs.znpc.net/viewthread.php?tid=5844
+ http://www.boot-land.net/forums/index.php?s=&showtopic=10096&view=findpost&p=91378
+
+ 2.添加fontfile外部命令.
+ 3.添加menuset外部命令.
+
+2010-02-09
+ 1.重写cmp部份代码(注:比较时可能会比较慢,因为只使用了1MB的缓存,之前的版本是完全缓存).
+ 顺便添加了新参数 --skip=
+ 可以指定在比较时跳过几个字节,用于cmp --hex时方便查看差异.
+
+2010-02-05
+ 1.添加calc简单计算器功能.
+ calc [*INTEGER=] [*]INTEGER OPERATOR [[*]INTEGER]
+
+ 具体使用方法参考这里的外部命令calc的用法,是一样的,只是内置了.
+ http://www.chenall.com/blog/2010/02/grub4dos_calc.html
+
+
+2010-01-13
+ 修改设置默认可执行文件搜索路径参数为
+ --set-path=PATH
+ 例子
+ command --set-path=(bd)/grub/
+
+2010-01-09
+ 1.为command参数添加一个参数--set-root用于设置默认可执行文件的搜索路径。
+ add option --set-root for command
+ sets a search PATH for executable files,default is (bd)/grub
+
+2009-12-03 g@chenall.cn
+ 1.修改了cat --hex代码,现在cat --hex会显示ascii>127的字符。
+ 2.修改了cmp --hex代码,现在cmp --hex后面显示的字符同样可以显示中文。
+ 并且添加了颜色控制,不同的地方使用了菜单的高亮色显示。
+
+2009-12-01 g@chenall.cn
+ 1.同步源码到2009-12-01版(修正了NTFS上DD或WRITE的问题)
+ 2.修改调整了cat --replace,当使用--replace=*addr时允许使用--hex来指定读取长度。具体
+ http://bbs.znpc.net/viewthread.php?tid=5784&page=10&fromuid=29#pid42939
+
+2009-11-29 g@chenall.cn
+ 1.调整了chainloader功能,如果chainloader (rd)+1,并且没有指定edx设备,那将把当前设备设为EDX。
+ Changed chainloader_func,if use chainloader (rd)+1 then will set current_root to EDX
+ 从光盘上的BOOTMGR启动硬盘上的VISTA/WIN7系统。
+ Boot VISTA/WIN7 from cdrom or any other device
+ chainloader (cd)/BOOTMGR
+ rootnoverify (hd0,0)
+ dd if=(hd0,0)+1 of=(md)0x3E+1
+ 现在可以直接使用以下方法来启动; You can now use the following commands..
+ map --mem=0xF000 /BOOTMGR
+ find --set-root --ignore-cd --ignore-floppies /BOOT/BCD
+ chainloader (rd)+1
+ http://bbs.znpc.net/viewthread.php?tid=5784&page=7&fromuid=29#pid42684
+ Tips:about EDX,please read README_GRUB4DOS.txt
+ 2.源码同步到官方2009-11-29版。
+2009-11-28 g@chenall.cn
+ 1.修正了当内存>2G时访问可能会出错的问题.
+ fixed a bug when access memory>2G problems.
+ eg.
+ cat --hex (md)0x40002F+1
+ map --mem (md)0x600000+0x19020
+2009-11-26 g@chenall.cn
+ 1.修改cmp_func代码,使用之使用十六进制显示差异偏移(为了方便对比使用)。
+ change cmp_func to show Differ at the offset with HEX
+ 2.为cmp添加了一个参数--hex(直接显示十六进制)
+ add --hex option for cmp
+2009-11-24 g@chenall.cn
+ 1.添加(bd)设备,即启动设备,注:使用configfile命令会改变启动设备。
+ added (bd) support.(bd):the boot drive. note:use configfile to change boot drive
+ eg. boot from (hd0,0)
+ now boot drive is (hd0,0)
+ configfile (hd0,1)/menu.lst
+ now boot drive is (hd0,1) \ No newline at end of file
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/README_GRUB4DOS.txt b/client/shared/lib/grub4dos/grub4dos-0.4.5b/README_GRUB4DOS.txt
new file mode 100644
index 00000000..03b13d47
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/README_GRUB4DOS.txt
@@ -0,0 +1,4138 @@
+Please refer to http://grub4dos.sourceforge.net/wiki/ for DOCs on GRUB4DOS.
+
+Main project page: http://grub4dos-chenall.googlecode.com/
+
+Download site: http://code.google.com/p/grub4dos-chenall/downloads/list
+
+Unused:
+Download site: http://grub4dos.sourceforge.net/
+Download site: http://sarovar.org/projects/grub4dos/
+Download site: http://grub4dos.nufans.net/
+Download site: http://sites.google.com/site/grubdos/
+Download site: ftp://grub4dos.sarovar.org/pub/grub4dos/
+
+Get the latest source code by using anonymous svn in this way:
+
+ svn co http://grub4dos-chenall.googlecode.com/svn/trunk/ grub4dos
+
+or in this way:
+
+ git clone git://github.com/chenall/GRUB4DOS.git
+
+View the source code online with your web browser at:
+
+ http://code.google.com/p/grub4dos-chenall/source/browse/
+
+GRUB4DOS mailing list:
+
+ grub4dos-devel@gna.org
+
+Subscription page:
+
+ https://mail.gna.org/listinfo/grub4dos-devel/
+
+Discussion forum(Official technical support site):
+
+ Chinese:
+ http://bbs.wuyou.com/forumdisplay.php?fid=60
+ http://bbs.znpc.net/forumdisplay.php?fid=4
+ English:
+ http://reboot.pro/forum/66/
+
+------------------------------------------------------------------------------
+
+Usage:
+ GRUB [--bypass] [--time-out=T] [--hot-key=K] [--config-file=FILE]
+
+ The FILE, for example, can be (hd0,0)/menu.lst
+
+ In CONFIG.SYS, the line looks like:
+
+ install=c:\some\where\grub.exe --config-file=FILE
+
+ If no options present, GRUB.EXE simply uses
+
+ (hd0,0)/menu.lst
+
+ as the configure file, if it exists. (Notice! We finally
+ changed the default file from (hd0,0)/boot/grub/menu.lst to
+ (hd0,0)/menu.lst) (Changed 2006-12-23. See Update 3 below.)
+
+ The partition (hd0,0) can be of a Windows partition or a Linux
+ partition, or any other partition type supported by GRUB.
+
+ Only GRUB-style filename is acceptable here for FILE. A DOS
+ filename won't work(it is certain we should use GRUB-style
+ filenames because DOS-filenames won't access a file in a
+ Linux ext2 partition for example).(See Update 2 below)
+
+ Update: FILE can be the contents of a menu. Use semi-colon
+ to delimitate the embedded commands here in FILE. The FILE
+ can be enclosed with a pair of double-quotes. For example:
+
+ GRUB --config-file="root (hd0,0);chainloader +1"
+
+ This command will boot the system in (hd0,0).
+
+ Another example:
+
+ GRUB --config-file="reboot"
+
+ This command will reboot the machine.
+
+ One more example:
+
+ GRUB --config-file="halt"
+
+ This command will halt the machine.
+
+ if --bypass is specified, GRUB will exit to DOS when
+ timeout reached.
+
+ The option `--time-out=T' specifies the timeout value in
+ seconds. T defaults to 5 if --bypass is specified and defaults
+ to 0 if --bypass is not specified.
+
+ The default hot key value is 0x3920(for space bar). If this
+ key is pressed, GRUB will boot normally. If another key is
+ pressed, GRUB will terminate immediately and return back to
+ DOS. See "int 16 keyboard scan codes" below.
+
+ Each option can be specified only once at most.
+
+ Update 2: DOS filenames have been supported(patched by John
+ Cobb). If the beginning two characters of FILE are "#@", then
+ the rest of FILE is taken as a DOS filename. Example:
+
+ GRUB --config-file="#@c:\menu.lst"
+
+ Only the beginning 4KB of the DOS file will be used. The file
+ should be an uncompressed text file.
+
+ Note: You may also use the `direct DOS file access' with the
+ SHELL or INSTALL line in CONFIG.SYS, but should not use it
+ with the DEVICE line. The DOS document said that a DOS device
+ driver should not call the `open file' DOS call.
+
+ Update 3(2006-12-23): By default, GRUB.EXE will locate its
+ config file in the following order:
+
+ (DOS file) .\menu.lst, the MENU.LST in the current dir.
+
+ (DOS file) \menu.lst, the MENU.LST in the root dir of
+ the current drive.
+ (GRUB file) /menu.lst, the MENU.LST in the root dir of
+ the boot device.
+
+ The default boot device is still (hd0,0).
+
+
+--------------------------------------------------------
+
+Update 1: Version 0.2.0 also brings out a new thing, GRUB for NTLDR,
+ which could be used to boot into GRUB from the boot menu
+ of Windows NT/2000/XP. Copy GRLDR to the root directory of
+ drive C: of Windows NT/2000/XP and append to C:\BOOT.INI
+ this line:
+
+ C:\GRLDR="Start GRUB"
+
+ That will be done. The GRLDR should be in the same directory
+ as BOOT.INI and NTLDR. Note that BOOT.INI is usually hidden
+ and you must unhide it before you can see it. The filename
+ GRLDR shouldn't be changed. If GRLDR is in a NTFS partition,
+ it should be copied to the root directory of another non-NTFS
+ partition(and likewise should the menu.lst file be). If GRLDR
+ is compressed, e.g., in a NTFS partition, it will not work.
+
+ Even if the drive letter of this disk has been changed to
+ other than C by the Windows device manager, it seems you still
+ have to use the letter C here in BOOT.INI, otherwise, NTLDR
+ will fail to locate the GRLDR file.
+
+ And what's more, if you are booting NTLDR from a floppy, you
+ will have to write the GRLDR line in A:\BOOT.INI like this:
+
+ C:\GRLDR="Start GRUB"
+
+ and shouldn't use the letter A like this:
+
+ A:\GRLDR="Start GRUB"
+
+ (Note that in the case when BOOT.INI is on floppy A, the
+ notation "C:\GRLDR" actually refer to the file A:\GRLDR).
+
+
+Update 2: GRUB for Linux is also introduced along with 0.2.0. You can
+ boot grub using a linux loader KEXEC, LILO, SYSLINUX or another
+ GRUB. (GRUB4LIN has merged into GRUB.EXE)
+
+ To boot GRUB off Linux, use this pair of commands:
+
+ kexec -l grub.exe
+ kexec -e
+
+ To boot GRUB via GRUB, use commands like the following:
+
+ kernel (hd0,0)/grub.exe
+ boot
+
+ To boot GRUB via LILO, use these lines in lilo.conf:
+
+ image=/boot/grub.exe
+ label=grub.exe
+
+ To boot GRUB via SYSLINUX, use these lines in syslinux.cfg:
+
+ label grub.exe
+ kernel grub.exe
+
+ LOADLIN may encounter problems when loading grub.exe, because
+ grub.exe requires some unchanged original BIOS interrupt
+ vectors, but DOS has destroyed them, and loadlin does not
+ recover them before it transfers control to grub.exe.
+
+Update 3: Beginning at version 0.4.0, GRUB for DOS supports memdrives.
+ Example:
+
+ # boot into a floppy image
+ map --mem (hd0,0)/floppy.img (fd0)
+ map --hook
+ chainloader (fd0)+1
+ rootnoverify (fd0)
+ map --floppies=1
+ boot
+
+ Because the image will be copied to a memory area, the image
+ itself can be non-contiguous and even gzipped.
+
+ Another Example:
+
+ map --mem=-2880 (hd0,0)/floppy.img (fd0)
+
+ This memdrive (fd0) will occupy at least 1440 KB of memory.
+ This is useful when the size of a 1.44M-floppy image is less
+ than 1440 KB.
+
+ One more example:
+
+ map --mem --read-only (hd0,0)/hd.img (hd1)
+
+ This memdrive is a hard drive, and read-only. That means you
+ will not be able to write data to the memdrive (hd1).
+
+ You can use many memdrives and many ordinary virtual emulated
+ disk-based drives at the same time.
+
+ If the BIOS does not support int15/EAX=e820h, you will not be
+ able to use any memdrives.
+
+Update 4: For memdrive emulation, a single-partition image can be used
+ instead of a whole-harddrive image. Example:
+
+ map --mem (hd0,7)/win98.img (hd0)
+ map --hook
+ chainloader (hd0)+1
+ rootnoverify (hd0)
+ map --harddrives=1
+ boot
+
+ Here win98.img is a partition image without the leading MBR
+ and partition table in it. Surely GRUB for DOS will build an
+ MBR and partition table for the memdrive (hd0).
+
+Update 5: Now GRLDR can be used as a no-emulation-mode bootable CD-ROM
+ boot image. Example for Linux users:
+
+ mkdir iso_root
+ cp grldr iso_root
+ mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root
+
+ As an alternative, grldr can also be used the same way as
+ stage2_eltorito. The -boot-info-table option is allowed but you
+ can omit it:
+
+ mkdir iso_root
+ cp grldr iso_root
+ mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root
+
+ Also note that the bootable.iso above must be created with the
+ -boot-load-seg 0xHHHH option where HHHH is greater than or
+ equal to 1000(hex). If HHHH < 1000(hex), QEMU will hang. This
+ is a bug in QEMU. The grldr.iso can be created with or without
+ -boot-load-seg 0xHHHH option.
+
+ The menu.lst file should be placed in the root dir of the CD.
+
+Update 6: The Chinese special build is in the "chinese" subdirectory.
+ (patched by Gandalf, 2005-06-27)
+
+ The Chinese special build also has scdrom builtin.
+ (update: scdrom has been dropped since 2006-07-20)
+
+Update 7: Added memory drive (md). Like (nd) for network drive and (cd)
+ for CD-ROM drive, a new drive (md) is implemented for accessing
+ the whole memory as a disk drive. (md) only works for systems
+ with BIOS int15/EAX=E820h support.
+
+ The cat command now has a few new options: --hex for hexdump,
+ and --locate=STRING for string search in file.
+
+ Typical examples:
+
+ cat --hex (hd0)+1
+
+ It will display the MBR sector in hex form.
+
+ cat --hex (md)+2
+
+ It will display 1KB of your memory(in fact, it is the real-mode
+ IDT table), also in hexdump form.
+
+ cat --hex (md)0x800+1
+
+ It will display 1 sector of your extended memory.
+
+ cat --hex (hd0,0)+1
+
+ It will display the first sector of partition (hd0,0). Usually
+ this sector contains the boot record of an operating system.
+
+Update 8: Added ram drive (rd). The (md) device accesses the memory
+ starting at physical address 0. But (rd) accesses memory
+ starting at any base address. The base and length of the ram
+ drive can be specified through the map command. "help map" for
+ details. You can even specify the BIOS drive number used for
+ the (rd) drive, e.g., map --ram-drive=0xf0. The default drive
+ number for (rd) is 0x7F which is a floppy. If (rd) is a hard
+ drive image, you should change the drive number to a value
+ greater than or equal to 0x80(but should avoid using 0xffff,
+ because 0xffff is for the (md) device).
+
+ The notation (rd)+1 always represents the file which contains
+ all the bytes stored in (rd).
+
+Update 9: Directly boot NTLDR of WinNT/2K/XP and IO.SYS of Win9x/ME and
+ KERNEL.SYS of FreeDOS. Examples:
+
+ chainloader --edx=0xPPYY (hd0,0)/ntldr
+ boot
+
+ chainloader --edx=0xYY (hd0,0)/io.sys
+ boot
+
+ chainloader --ebx=0xYY (hd0,0)/kernel.sys
+ boot
+
+ Hex YY specifies the boot drive number, and hex PP specifies
+ the boot partition number of NTLDR. If the boot drive is
+ floppy, PP should be the hex value ff, i.e., decimal 255.
+
+ For KERNEL.SYS of FreeDOS, the --edx won't work,
+ use --ebx please.
+
+ The option --edx ( --ebx ) can be omitted if the file is in
+ its normal place. But in some cases, those options are needed.
+
+ If, e.g., the ntldr file is in an ext2 partition called
+ (hd2,8) while you want it to think of the Windows partition
+ (hd0,7) as the boot partition, then --edx is required:
+
+ chainloader --edx=0x0780 (hd2,8)/ntldr
+
+ For DOS kernels(i.e., IO.SYS and KERNEL.SYS), the boot
+ partition number is meaningless, so you only need to specify
+ the correct boot drive number YY(but specifying the boot
+ partition number is harmless).
+
+ The above PPYY can also be specified by using a root or
+ rootnoverify command after the chainloader command. Examples:
+
+ chainloader (hd2,6)/kernel.sys
+ rootnoverify (hd0) <-------- YY=80
+ boot
+
+ chainloader (hd0,0)/ntldr
+ rootnoverify (hd0,5) <-------- YY=80, PP=05
+ boot
+
+ Tip: CMLDR (the ComMand LoaDeR, which is used to load the
+ Windows Fault Recovery Console) can be chainloaded as well
+ as NTLDR.
+
+ Bean has successfully decompressed and booted IO.SYS of WinME.
+ Thanks for the great job!
+
+Update 10: isolinux.bin (version 3.73) can be chainloaded as with build
+ 2009-02-09.
+
+ chainloader (cd)/isolinux.bin
+
+ isolinux.bin must reside in a real or virtual cdrom.
+
+Update 11: stage2 of Grub Legacy can be chainloaded in this way:
+
+ chainloader --force --load-segment=0 --load-offset=0x8000 --boot-cs=0 --boot-ip=0x8200 (...)/.../stage2
+
+--------------------------------------------------------
+
+ There is no full documentation in English at present. Here are some
+ examples showing the usage of disk emulation commands:
+
+1. Emulates HD partition C: as floppy drive A: and boot win98 from C:
+
+ map --read-only (hd0,0)+1 (fd0)
+ chainloader (hd0,0)+1
+ rootnoverify (hd0)
+ boot
+
+ In the above example, (hd0,0) is drive C: with win98 on it. After win98
+ boot complete, you will find that A: contains all files of C:, and if
+ you delete files in A:, the files in C: will also disappear.
+
+ At the map command line, the notation (hdm,n)+1 is interpreted to
+ represent the whole partition (hdm,n), not just the first sector of the
+ partition.
+
+2. Emulates HD partition C: as floppy drive A: and boot win98 from A:
+
+ map --read-only (hd0,0)+1 (fd0)
+ map --hook
+ chainloader (fd0)+1
+ rootnoverify (fd0)
+ map --floppies=1
+ boot
+
+ After the "map --hook" command, the emulation takes effect instantly
+ even in the GRUB command line.
+
+ Note that the (fd0) in "chainloader (fd0)+1" is the emulated virtual
+ floppy A:, not the real floppy diskette(because map is hooked now).
+
+
+3. Emulates an image file as floppy drive A: and boot win98 from C:
+
+ map --read-only (hd0,0)/floppy.img (fd0)
+ chainloader (hd0,0)+1
+ rootnoverify (hd0)
+ map --floppies=1
+ map --harddrives=1
+ boot
+
+4. Emulates an HD partition as the first hard disk and boot DOS from it:
+
+ map --read-only (hd2,6)+1 (hd0)
+ map --hook
+ chainloader (hd0,0)+1
+ rootnoverify (hd0)
+ map --harddrives=1
+ boot
+
+ In this example, (hd2,6)+1 represents an extended logical DOS partition
+ of the third BIOS hard disk (hd2).
+
+ If a DOS partition is used to emulate a hard disk, GRUB for DOS will
+ first try to locate the partition table, usually 63 sectors ahead of
+ the DOS partition. GRUB for DOS will refuse the emulation if the
+ partition table is not there.
+
+5. Emulates an image file as the first hard disk and boot DOS from it:
+
+ map --read-only (hd0,0)/harddisk.img (hd0)
+ chainloader --load-length=512 (hd0,0)/harddisk.img
+ rootnoverify (hd0)
+ map --harddrives=1
+ boot
+
+ If an image file is used to emulate a hard disk, the image file must
+ contain an MBR. In other word, the first sector of HARDDISK.IMG must
+ contain the partition table of the emulated virtual hard disk.
+
+Note: Counters for floppies and harddrives in the BIOS Data Area remain
+ unchanged during the mapping. You should manually set them to proper
+ values with `map --floppies=' and/or `map --harddrives=', especially,
+ e.g., when there is no real floppy drive attached to the mother board.
+ If not doing so, DOS might fail to start.
+
+ `map --status' can report the values. Note also that `map --floppies='
+ and `map --harddrives=' can be used independently without the
+ appearance of mappings.
+
+ 0.4.2 has introduced a new variable, memdisk_raw, to simulate the
+ memdisk-like raw mode. If the BIOS has no int15/87h, or if it has
+ buggy int15/87h support, you should set this variable before any
+ memdrives are used. Here is an example:
+
+ map --memdisk-raw=1
+ map --mem (hd0,0)/floppy.img (fd0)
+ map --hook
+ chainloader (fd0)+1
+ rootnoverify (fd0)
+ boot
+
+ If you encountered a memdrive failure without using
+ map --memdisk-raw=1, you should have a try with `map --memdisk-raw=1'.
+
+ If you `map --memdisk-raw=0' later, you should afterwards do a
+ `map --unhook'(and followed by a `map --hook' if needed).
+
+ Update: memdisk_raw now defaults to 1. You should `map --memdisk-raw=0'
+ if you want to use int15/87h to access memdrives.
+
+--------------------------------------------------------
+
+ Floppies/harddisks of any size can be emulated with GRUB for DOS 0.2.0.
+
+ Image file must be contiguous, or else GRUB for DOS will refuse it.
+
+ The `blocklist' command can list fragments or pieces of a file.
+
+ Type "help map" at the GRUB prompt to get a brief description of the
+ command.
+
+ The form
+
+ map ... (fd?)
+
+ is a floppy emulation, and the form
+
+ map ... (hd?)
+
+ is a hard disk emulation.
+
+ When a HARD DISK emulation is used, better not start Windows for
+ security reasons. Windows may even destroy all data and all information
+ on all your real hard disks!!!!!!!!
+
+ Update for --mem: when --mem is used, it seems rather safe even after
+ entering Windows. Win98 can operate the memdrive normally.
+
+ Windows NT/2000/XP does not recognize the emulated drives no matter
+ whether the --mem option is present.
+
+
+
+******************************************************************************
+*** Explanation of the grldr-bootable floppies or harddisk partitions ***
+******************************************************************************
+
+1. Ext2 Boot Sector/Boot Record Layout (for loading grldr)
+------------------------------------------------------------------------------
+An EXT2/EXT3 volume can be GRUB-bootable. Copy grldr and an optional menu.lst
+to the root dir of the EXT2/EXT3 volume, and build the boot sector based on the
+fifth sector of grldr(some fields need to be changed as detailed in the
+following table). And then the EXT2/EXT3 volume is GRUB-bootable.
+
+Update: bootlace.com is a DOS/Linux utility that can install the GRLDR boot
+record onto the first sector of an EXT2/EXT3 volume.
+
+Offset Length Description
+====== ====== ==============================================================
+00h 2 Machine code for short jump over the data.
+
+02h 1 LBA indicator. Valid values are 0x02 for CHS mode, or 0x42 for
+ LBA mode.
+
+ If the BIOS int13 supports LBA, this byte can be safely set to
+ 0x42.
+
+ Some USB BIOSes might have bugs when using CHS mode, so the
+ format program should set this byte to 0x42. It seems that
+ (generally) all USB BIOSes have LBA support.
+
+ If the format program does not know whether the BIOS has LBA
+ support, it may operate this way:
+
+ if (partition_start + total_sectors_in_partition) exceeds the
+ CHS addressing ability(especially when it is greater than
+ 1024*256*63), the caller should set this byte to 0x42,
+ otherwise, set to 0x02.
+
+ Note that Windows98 uses the value 0x0e as the LBA indicator.
+
+ Update: this byte of LBA indicator is ignored. The boot
+ record can probe the LBA support of BIOS.
+
+03h 10 OEM name string (of OS which formatted the disk).
+ Update: this field is now used for error message of "I/O error"
+
+0Dh 1 Sectors per block. Valid values are 2, 4, 8, 16 and 32.
+
+0Eh 2 Bytes per block. Valid values are 0x400, 0x800, 0x1000, 0x2000
+ and 0x4000.
+
+10h 4 Pointers in pointers-per-block blocks, that is, number of
+ blocks covered by a double-indirect block.
+
+ Valid values are 0x10000, 0x40000, 0x100000, 0x400000 and
+ 0x1000000.
+
+14h 4 Pointers per block, that is, number of blocks covered by an
+ indirect block.
+
+ Valid values are 0x100, 0x200, 0x400, 0x800, 0x1000.
+
+18h 2 Sectors per track.
+
+1Ah 2 Number of heads/sides.
+
+1Ch 4 Number of hidden sectors (those preceding the boot sector).
+
+ Also referred to as the starting sector of the partition.
+
+ For floppies, it should be 0.
+
+20h 4 Total number of sectors in the filesystem(or in the partition).
+
+24h 1 BIOS drive number of the boot device.
+
+ Actually this byte is ignored for read. The boot code will
+ write DL onto this byte. The BIOS or the caller should set
+ drive number in DL.
+
+ We assume all BIOSes pass correct drive number in DL.
+ Buggy BIOSes are not supported!!
+
+25h 1 Partition number of this partition on the boot drive.
+
+ 0, 1, 2, 3 are primary partitions.
+ 4, 5, 6, ... are logical partitions in the extended partition.
+
+ 0xff is for whole drive. So for floppies, it should be 0xff.
+
+26h 2 inode size in bytes. (Notice! We use the formerly reserved
+ word here for inode size!)
+
+28h 4 Number of inodes per group.
+
+ Normally a 1.44M floppy has only one group, and the total
+ number of inodes is 184. So the value should be 184 or
+ greater.
+
+2Ch 4 The block number for group descriptors.
+
+ Valid values are 2 for 1024-byte blocks, and 1 otherwise.
+
+ The value here is equal to (s_first_data_block + 1).
+
+30h 1 code for "cld"(0xFC).
+
+31h 2 code for "xor ax,ax"(0x31, 0xC0).
+
+33h 1 code for "nop"(0x90) or "cwd"(0x99)
+
+34h 458 The rest of the machine code.
+
+1FEh 2 Boot Signature AA55h.
+
+
+2. FAT12/FAT16 Boot Sector/Boot Record Layout (for loading grldr)
+------------------------------------------------------------------------------
+A FAT12/16 volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
+the root dir of the FAT12/16 volume, and build the boot sector based on the
+fourth sector of grldr(some fields need to be changed as detailed in the
+following table). And then the FAT12/16 volume is GRUB-bootable.
+
+Update: bootlace.com is a DOS/Linux utility that can install the GRLDR boot
+record onto the boot sector of an FAT12/16 volume.
+
+Offset Length Description
+====== ====== ==============================================================
+00h 2 Machine code for short jump over the data.
+
+02h 1 LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
+ LBA mode.
+
+ If the BIOS int13 supports LBA, this byte can be safely set to
+ 0x0e.
+
+ Some USB BIOSes might have bugs when using CHS mode, so the
+ format program should set this byte to 0x0e. It seems that
+ (generally) all USB BIOSes have LBA support.
+
+ If the format program does not know whether the BIOS has LBA
+ support, it may operate this way:
+
+ if (partition_start + total_sectors_in_partition) exceeds the
+ CHS addressing ability(especially when it is greater than
+ 1024*256*63), the caller should set this byte to 0x0e,
+ otherwise, set to 0x90.
+
+ Update: this byte of LBA indicator is ignored. The boot
+ record can probe the LBA support of BIOS.
+
+ Update(2006-07-31): Though GRLDR won't use this LBA-indicator
+ byte, Windows 98 uses it. Usually this byte should be 0x90 for
+ CHS mode(especially for floppies). If this byte is not set
+ properly, Windows 98 will not recognize the floppy or
+ partition. This problem was reported by neiljoy. Many thanks!
+
+03h 8 OEM name string (of OS which formatted the disk).
+
+0Bh 2 Bytes per sector. Must be 512.
+
+0Dh 1 Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
+ and 128. But a cluster size larger than 32K should not occur.
+
+0Eh 2 Reserved sectors(number of sectors before the first FAT,
+ including the boot sector), usually 1.
+
+10h 1 Number of FATs(nearly always 2).
+
+11h 2 Maximum number of root directory entries.
+
+13h 2 Total number of sectors (for small disks only, if the disk is
+ too big this is set to 0 and offset 20h is used instead).
+
+15h 1 Media descriptor byte, pretty meaningless now (see below).
+
+16h 2 Sectors per FAT.
+
+18h 2 Sectors per track.
+
+1Ah 2 Total number of heads/sides.
+
+1Ch 4 Number of hidden sectors (those preceding the boot sector).
+
+ Also referred to as the starting sector of the partition.
+
+ For floppies, it should be 0.
+
+20h 4 Total number of sectors for large disks.
+
+24h 1 BIOS drive number of the boot device.
+
+ Actually this byte is ignored for read. The boot code will
+ write DL onto this byte. The BIOS or the caller should set
+ drive number in DL.
+
+ We assume all BIOSes pass correct drive number in DL.
+ Buggy BIOSes are not supported!!
+
+25h 1 Partition number of this filesystem in the boot drive.
+
+ This byte is ignored for read. The boot code will write
+ partition number onto this byte. See offset 41h below.
+
+26h 1 Signature (must be 28h or 29h to be recognised by NT).
+
+27h 4 Volume serial number.
+
+2Bh 11 Volume label.
+
+36h 8 File system ID. "FAT12 ", "FAT16 " or "FAT ".
+
+3Eh 1 code for "cli".
+
+3Fh 1 code for "cld".
+
+40h 1 code for "mov dh, imm8".
+
+41h 1 Partition number of this partition on the boot drive.
+
+ 0, 1, 2, 3 are primary partitions.
+ 4, 5, 6, ... are logical partitions in the extended partition.
+
+ 0xff is for whole drive. So for floppies, it should be 0xff.
+
+42h 442 The rest of the machine code.
+
+1FCh 4 Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)
+
+
+3. FAT32 Boot Sector/Boot Record Layout (for loading grldr)
+------------------------------------------------------------------------------
+A FAT32 volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
+the root dir of the FAT32 volume, and build the boot sector based on the
+third sector of grldr(some fields need to be changed as detailed in the
+following table). And then the FAT32 volume is GRUB-bootable.
+
+Update: bootlace.com is a DOS/Linux utility that can install the GRLDR boot
+record onto the boot sector of an FAT32 volume.
+
+Offset Length Description
+====== ====== ==============================================================
+00h 2 Machine code for short jump over the data.
+
+02h 1 LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
+ LBA mode.
+
+ If the BIOS int13 supports LBA, this byte can be safely set to
+ 0x0e.
+
+ Some USB BIOSes might have bugs when using CHS mode, so the
+ format program should set this byte to 0x0e. It seems that
+ (generally) all USB BIOSes have LBA support.
+
+ If the format program does not know whether the BIOS has LBA
+ support, it may operate this way:
+
+ if (partition_start + total_sectors_in_partition) exceeds the
+ CHS addressing ability(especially when it is greater than
+ 1024*256*63), the caller should set this byte to 0x0e,
+ otherwise, set to 0x90.
+
+ Update: this byte of LBA indicator is ignored. The boot
+ record can probe the LBA support of BIOS.
+
+ Update(2006-07-31): Though GRLDR won't use this LBA-indicator
+ byte, Windows 98 uses it. Usually this byte should be 0x90 for
+ CHS mode(especially for floppies). If this byte is not set
+ properly, Windows 98 will not recognize the floppy or
+ partition. This problem was reported by neiljoy. Many thanks!
+
+03h 8 OEM name string (of OS which formatted the disk).
+
+0Bh 2 Bytes per sector. Must be 512.
+
+0Dh 1 Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
+ and 128. But a cluster size larger than 32K should not occur.
+
+0Eh 2 Reserved sectors(number of sectors before the first FAT,
+ including the boot sector), usually 1.
+
+10h 1 Number of FATs(nearly always 2).
+
+11h 2 (Maximum number of root directory entries)Must be 0.
+
+13h 2 (Total number of sectors for small disks only)Must be 0.
+
+15h 1 Media descriptor byte, pretty meaningless now (see below).
+
+16h 2 (Sectors per FAT)Must be 0.
+
+18h 2 Sectors per track.
+
+1Ah 2 Total number of heads/sides.
+
+1Ch 4 Number of hidden sectors (those preceding the boot sector).
+
+ Also referred to as the starting sector of the partition.
+
+ For floppies, it should be 0.
+
+20h 4 Total number of sectors for large disks.
+
+24h 4 FAT32 sectors per FAT.
+
+28h 2 If bit 7 is clear then all FATs are updated, otherwise bits
+ 0-3 give the current active FAT, all other bits are reserved.
+
+2Ah 2 High byte is major revision number, low byte is minor revision
+ number, currently both are 0.
+
+2Ch 4 Root directory starting cluster.
+
+30h 2 File system information sector.
+
+32h 2 If non-zero this gives the sector which holds a copy of the
+ boot record, usually 6.
+
+34h 12 Reserved, set to 0.
+
+40h 1 BIOS drive number of the boot device.
+
+ 80h is first HDD, 00h is first FDD.
+
+ Actually this byte is ignored for read. The boot code will
+ write DL onto this byte. The BIOS or the caller should set
+ drive number in DL.
+
+ We assume all BIOSes pass correct drive number in DL.
+ Buggy BIOSes are not supported!!
+
+41h 1 Partition number of this filesystem in the boot drive.
+
+ This byte is ignored for read. The boot code will write
+ partition number onto this byte. See offset 5Dh below.
+
+42h 1 Signature (must be 28h or 29h to be recognised by NT).
+
+43h 4 Volume serial number.
+
+47h 11 Volume label.
+
+52h 8 File system ID. "FAT32 ".
+
+5Ah 1 opcode for "cli".
+
+5Bh 1 opcode for "cld".
+
+5Ch 1 opcode for "mov dh, imm8".
+
+5Dh 1 Partition number of this partition on the boot drive.
+
+ 0, 1, 2, 3 are primary partitions.
+ 4, 5, 6, ... are logical partitions in the extended partition.
+
+ 0xff is for whole drive. So for floppies, it should be 0xff.
+
+5Eh 414 The rest of the machine code.
+
+1FCh 4 Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)
+
+
+4. NTFS Boot Sector/Boot Record Layout (for loading grldr)
+------------------------------------------------------------------------------
+An NTFS volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
+the root dir of the NTFS volume, and build the boot sector based on the
+6th-9th sectors of grldr(some fields need to be changed as detailed in the
+following table). And then the NTFS volume is GRUB-bootable.
+
+Update: bootlace.com is a DOS/Linux utility that can install the GRLDR boot
+record onto the leading 4 sectors of an NTFS volume.
+
+Offset Length Description
+====== ====== ==============================================================
+00h 2 Machine code for short jump over the data.
+
+02h 1 LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
+ LBA mode.
+
+ If the BIOS int13 supports LBA, this byte can be safely set to
+ 0x0e.
+
+ Some USB BIOSes might have bugs when using CHS mode, so the
+ format program should set this byte to 0x0e. It seems that
+ (generally) all USB BIOSes have LBA support.
+
+ If the format program does not know whether the BIOS has LBA
+ support, it may operate this way:
+
+ if (partition_start + total_sectors_in_partition) exceeds the
+ CHS addressing ability(especially when it is greater than
+ 1024*256*63), the caller should set this byte to 0x0e,
+ otherwise, set to 0x90.
+
+ Update: this byte of LBA indicator is ignored. The boot
+ record can probe the LBA support of BIOS.
+
+ Update(2006-07-31): Though GRLDR won't use this LBA-indicator
+ byte, Windows 98 uses it. Usually this byte should be 0x90 for
+ CHS mode(especially for floppies). If this byte is not set
+ properly, Windows 98 will not recognize the floppy or
+ partition. This problem was reported by neiljoy. Many thanks!
+
+03h 8 OEM name string (of OS which formatted the disk).
+
+0Bh 2 Bytes per sector. Must be 512.
+
+0Dh 1 Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
+ and 128. But a cluster size larger than 32K should not occur.
+
+0Eh 2 (Reserved sectors)Unused.
+
+10h 1 (Number of FATs)Must be 0.
+
+11h 2 (Maximum number of root directory entries)Must be 0.
+
+13h 2 (Total number of sectors for small disks only)Must be 0.
+
+15h 1 Media descriptor byte, pretty meaningless now (see below).
+
+16h 2 (Sectors per FAT)Must be 0.
+
+18h 2 Sectors per track.
+
+1Ah 2 Total number of heads/sides.
+
+1Ch 4 Number of hidden sectors (those preceding the boot sector).
+
+ Also referred to as the starting sector of the partition.
+
+ For floppies, it should be 0.
+
+20h 4 (Total number of sectors for large disks)Must be 0.
+
+24h 4 (FAT32 sectors per FAT) - Usually 80 00 80 00, A value of
+ 80 00 00 00 has been seen on a USB thumb drive which is
+ formatted with NTFS under Windows XP. Note this is removable
+ media and is not partitioned, the drive as a whole is NTFS
+ formatted.
+
+28h 8 Number of sectors in the volume.
+
+30h 8 LCN of VCN 0 of the $MFT.
+
+38h 8 LCN of VCN 0 of the $MFTMirr.
+
+40h 4 Clusters per MFT Record.
+
+44h 4 Clusters per Index Record.
+
+48h 8 Volume serial number.
+
+50h 4 Checksum, usually 0.
+
+54h 1 opcode for "cli".
+
+55h 1 opcode for "cld".
+
+56h 1 opcode for "mov dh, imm8".
+
+57h 1 Partition number of this partition on the boot drive.
+
+ 0, 1, 2, 3 are primary partitions.
+ 4, 5, 6, ... are logical partitions in the extended partition.
+
+ 0xff is for whole drive. So for floppies, it should be 0xff.
+
+58h 420 The rest of the machine code in the first sector.
+
+1FCh 4 Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)
+
+200h 1536 The rest of the machine code in the last 3 sectors.
+
+------------------------------------------------------------------------------
+
+Appendix A: File System Information Sector of FAT32(not used by grldr)
+
+Offset Length Description
+====== ====== ==============================================================
+0h 4 Leading Signature 41615252h.
+
+4h 480 Reserved, set to 0.
+
+1E4h 4 FSI structure signature 61417272h.
+
+1E8h 4 Contains the last known count of free clusters, if this is
+ equal to FFFFFFFFh, then the count is unknown.
+
+1ECh 4 Cluster number at which you should begin a search for a free
+ cluster, if this is equal to FFFFFFFFh then the field has not
+ been set.
+
+1F0h 12 Reserved, set to 0.
+
+1FCh 4 Trailing Signature AA550000h.
+
+------------------------------------------------------------------------------
+
+Appendix B: Media Descriptor Byte(not used by grldr)
+
+The Media descriptor byte is meaningless because of the duplications, F0h for
+example.
+
+Byte Type of disk Sectors Heads Tracks Capacity
+---- ------------ ------- ----- ------ --------
+FFh 5 1/4" 8 2 40 320KB
+FEh 5 1/4" 8 1 40 160KB
+FDh 5 1/4" 9 2 40 360KB
+FCh 5 1/4" 9 1 40 180KB
+FBh both 9 2 80 640KB
+FAh both 9 1 80 320KB
+F9h 5 1/4" 15 2 80 1200KB
+F9h 3 1/2" 9 2 80 720KB
+F0h 3 1/2" 18 2 80 1440KB
+F0h 3 1/2" 36 2 80 2880KB
+F8h hard disk NA NA NA NA
+
+******************************************************************************
+*** grldr.mbr - How to write it to Master Boot Track of the hard disk ***
+******************************************************************************
+
+grldr.mbr contains code that can be used as Master Boot Record. The code is
+responsible for searching all partitions for grldr and when found, loading it.
+Currently supported partition types are: FAT12/FAT16/FAT32, NTFS, EXT2/EXT3.
+Logical partitions in the extended partition are supported, provided that the
+extended partition type is Microsoft-compatible. In fact, the Linux extended
+partition type(0x85) is not fully tested for the search mechanism.
+
+How to write GRLDR.MBR to the Master Boot Track of a hard disk?
+
+First, read the Windows disk signature and partition information bytes
+(72 bytes in total, from offset 0x01b8 to 0x01ff of the MBR sector), and put
+them on the same range from offset 0x01b8 to 0x01ff of the beginning sector of
+GRLDR.MBR.
+
+Optionally, if the MBR in the hard disk is a single sector MBR created by
+Microsoft FDISK, it may be copied onto the second sector of GRLDR.MBR.
+
+The second sector of GRLDR.MBR is called "previous MBR". When GRLDR not found,
+"previous MBR" will be started.
+
+No other steps needed, after all necessary changes stated above have been made,
+now simply write GRLDR.MBR on to the Master Boot Track. That's all.
+
+Note: The Master Boot Track means the first track of the hard drive.
+
+Note: The bootstrap code of GRLDR.MBR only finds GRLDR file in the root dir of
+a partition. You'd better place menu.lst file accompanying with GRLDR(i.e., in
+the same root dir of the same partition as GRLDR).
+
+The filename "grldr" in an ext2 partition must be in lower case letters, and
+the file type of grldr must be plain regular. Other types, e.g., a symbolic
+link, won't work.
+
+Update: bootlace.com is a DOS/Linux utility for installing grldr.mbr to MBR.
+The whole grldr.mbr is embedded in the body of the bootlace.com utility, so
+bootlace.com can be used independently. See below.
+
+******************************************************************************
+*** grldr.mbr - Details about the control bytes ***
+******************************************************************************
+
+Six bytes can be used to control the boot process of GRLDR.MBR.
+
+Offset Length Description
+====== ====== ==============================================================
+02h 1 bit0=1: disable the search for GRLDR on floppy
+ bit0=0: enable the search for GRLDR on floppy
+
+ bit1=1: disable the boot of PREVIOUS MBR with invalid
+ partition table(usually an OS boot sector)
+ bit1=0: enable the boot of PREVIOUS MBR with invalid
+ partition table(usually an OS boot sector)
+
+ bit2=1: disable the feature of unconditional entrance to
+ the command-line(See below `--duce')
+ bit2=0: enable the feature of unconditional entrance to
+ the command-line(See below `--duce')
+
+ bit3=1: disable geometry tune(See below `--chs-no-tune')
+ bit3=0: enable geometry tune(See below `--chs-no-tune')
+
+ bit4 - bit6: reserved
+
+ bit7=1: try to boot PREVIOUS MBR after the search for GRLDR
+ bit7=0: try to boot PREVIOUS MBR before the search for GRLDR
+
+03h 1 timeout in seconds to wait for a key press. 0xff stands for
+ waiting all the time(endless).
+
+04h 2 hot-key code. high byte is scan code, low byte is ASCII code.
+ the default value is 0x3920, which stands for the space bar.
+ if this key is pressed, GRUB will be started prior to the boot
+ of previous MBR. See "int 16 keyboard scan codes" below.
+
+06h 1 preferred boot drive number, 0xff for no-drive
+07h 1 preferred partition number, 0xff for whole drive
+
+ if the preferred boot drive number is 0xff, the order of the
+ search for GRLDR will be:
+
+ (hd0,0), (hd0,1), ..., (hd0,L),(L=max partition number)
+ (hd1,0), (hd1,1), ..., (hd1,M),(M=max partition number)
+ ... ... ... ... ... ... ... ...
+ (hdX,0), (hdX,1), ..., (hdX,N),(N=max partition number)
+ (X=max harddrive number)
+ (fd0)
+
+ otherwise, if the preferred boot drive number is Y(not equal to
+ 0xff) and the preferred partition number is K, then the order of
+ the search for GRLDR will be:
+
+ (Y) if K=0xff; or (Y,K) otherwise
+ (hd0,0), (hd0,1), ..., (hd0,L),(L=max partition number)
+ (hd1,0), (hd1,1), ..., (hd1,M),(M=max partition number)
+ ... ... ... ... ... ... ... ...
+ (hdX,0), (hdX,1), ..., (hdX,N),(N=max partition number)
+ (X=max harddrive number)
+ (fd0)
+
+ Note: if Y < 0x80, then (Y) is floppy, else (Y) is harddrive,
+ and (Y,K) is partition number K on harddrive (Y).
+
+
+******************************************************************************
+*** bootlace.com - Install GRLDR.MBR bootstrap code to MBR ***
+******************************************************************************
+
+BOOTLACE.COM installs GRLDR.MBR boot record to the MBR of a harddrive or of a
+harddrive image file, or to the boot sector of a floppy or a floppy image.
+
+Usage:
+
+ bootlace.com [OPTIONS] DEVICE_OR_FILE
+
+OPTIONS:
+
+ --read-only do everything except the actual write to the
+ specified DEVICE_OR_FILE.
+
+ --restore-mbr restore the previous mbr.
+
+ --mbr-no-bpb do not copy BPB in the boot sector of the
+ leading FAT partition to MBR.
+
+ --no-backup-mbr do not copy the old MBR to the second sector of
+ DEVICE_OR_FILE.
+
+ --force-backup-mbr force the copy of old MBR to the second sector
+ of DEVICE_OR_FILE.
+
+ --mbr-enable-floppy enable the search for GRLDR on floppy.
+
+ --mbr-disable-floppy disable the search for GRLDR on floppy.
+
+ --mbr-enable-osbr enable the boot of PREVIOUS MBR with invalid
+ partition table(usually an OS boot sector).
+
+ --mbr-disable-osbr disable the boot of PREVIOUS MBR with invalid
+ partition table(usually an OS boot sector).
+
+ --duce disable the feature of unconditional entrance
+ to the command-line.
+
+ Normally one can unconditionally get the
+ command-line console by a keypress of `C',
+ bypassing all config-files(including the
+ preset-menu). This is a security hole. So we
+ need this option to disable the feature.
+
+ DUCE is for Disable Unconditional Command-line
+ Entrance.
+
+ --chs-no-tune disable the feature of geometry tune.
+
+ --boot-prevmbr-first try to boot PREVIOUS MBR before the search for
+ GRLDR.
+
+ --boot-prevmbr-last try to boot PREVIOUS MBR after the search for
+ GRLDR.
+
+ --preferred-drive=D preferred boot drive number, 0 <= D < 255.
+
+ --preferred-partition=P preferred partition number, 0 <= P < 255.
+
+ --serial-number=SN setup a new serial number for the hard drive.
+ SN must be non-zero.
+
+ --time-out=T wait T seconds before booting PREVIOUS MBR. if
+ T is 0xff, wait forever. The default is 5.
+
+ --hot-key=K if the desired key K is pressed, start GRUB
+ before booting PREVIOUS MBR. K is a word
+ value, just as the value in AX register
+ returned from int16/AH=1. The high byte is the
+ scan code and the low byte is ASCII code. The
+ default is 0x3920 for space bar. See "int 16
+ keyboard scan codes" below.
+
+ --floppy if DEVICE_OR_FILE is floppy, use this option.
+
+ --floppy=N if DEVICE_OR_FILE is a partition on a hard
+ drive, use this option. N is used to specify
+ the partition number: 0,1,2 and 3 for the
+ primary partitions, and 4,5,6,... for the
+ logical partitions.
+
+ --sectors-per-track=S specifies sectors per track for --floppy.
+ 1 <= S <= 63, default is 63.
+
+ --heads=H specifies number of heads for --floppy.
+ 1 <= H <= 256, default is 255.
+
+ --start-sector=B specifies hidden sectors for --floppy=N.
+
+ --total-sectors=C specifies total sectors for --floppy.
+ default is 0.
+
+ --lba use lba mode for --floppy. If the floppy BIOS
+ has LBA support, you can specify --lba here.
+ It is assumed that all floppy BIOSes have CHS
+ support. So you would rather specify --chs.
+ If neither --chs nor --lba is specified, then
+ the LBA indicator(i.e., the third byte of the
+ boot sector) will not be touched.
+
+ --chs use chs mode for --floppy. You should specify
+ --chs if the floppy BIOS does not support LBA.
+ We assume all floppy BIOSes have CHS support.
+ So it is likely you want to specify --chs.
+ If neither --chs nor --lba is specified, then
+ the LBA indicator(i.e., the third byte of the
+ boot sector) will not be touched.
+
+ --fat12 FAT12 is allowed to be installed for --floppy.
+
+ --fat16 FAT16 is allowed to be installed for --floppy.
+
+ --fat32 FAT32 is allowed to be installed for --floppy.
+
+ --vfat FAT12/16/32 are allowed to be installed for
+ --floppy.
+
+ --ntfs NTFS is allowed to be installed for --floppy.
+
+ --ext2 EXT2 is allowed to be installed for --floppy.
+
+ --install-partition=I Install the boot record onto the boot area of
+ partition number I of the specified hard drive
+ or harddrive image DEVICE_OR_FILE.
+
+DEVICE_OR_FILE: Filename of the device or the image file. For DOS, a BIOS drive
+number(hex 0xHH or decimal DDD) can be used to access the drive. BIOS drive
+number 0 is for the first floppy, 1 is for the second floppy; 0x80 is for the
+first hard drive, 0x81 is for the second hard drive, etc.
+
+Note: BOOTLACE.COM writes only the boot code to MBR. The boot code needs to
+load GRLDR as the second(and last) stage of the GRUB boot process. Therefore
+GRLDR should be copied to the root directory of one of the supported
+partitions, either before or after a successful execution of BOOTLACE.COM.
+Currently only partitions with filesystem type of FAT12, FAT16, FAT32, NTFS,
+EXT2 or EXT3 are supported.
+
+Note 2: If DEVICE_OR_FILE is a harddisk device or a harddisk image file, it
+must contain a valid partition table, otherwise, BOOTLACE.COM will fail. If
+DEVICE_OR_FILE is a floppy device or a floppy image file, then it must contain
+a supported filesystem(i.e., either of FAT12/FAT16/FAT32/NTFS/EXT2/EXT3).
+
+Note 3: If DEVICE_OR_FILE is a floppy device or a floppy image file, and it
+was formated EXT2/EXT3, then you should specify --sectors-per-track and
+--heads explicitly.
+
+
+Important!! If you install GRLDR Boot Record to a floppy or a partition, the
+floppy or partition will boot solely grldr, and your original
+IO.SYS(DOS/Win9x/Me) and NTLDR(WinNT/2K/XP) will become unbootable. This is
+because the original boot record of the floppy or partition was overwritten.
+There is no such problem when installing GRLDR Boot Record onto the MBR.
+Update: Some NTLDR/IO.SYS/KERNEL.SYS files can be directly chainloaded in the
+latest GRUB4DOS.
+
+Tip: If the filename begins in a dash(-) or a digit, you may prefix a dirname
+(./) or (.\) to it.
+
+Examples:
+
+ Installing GRLDR boot code to MBR under Linux:
+
+ bootlace.com /dev/hda
+
+ Installing GRLDR boot code to MBR under DOS:
+
+ bootlace.com 0x80
+
+ Installing GRLDR boot code to a harddisk image under DOS or Linux:
+
+ bootlace.com hd.img
+
+ Installing GRLDR boot code to floppy under Linux:
+
+ bootlace.com --floppy --chs /dev/fd0
+
+ Installing GRLDR boot code to floppy under DOS:
+
+ bootlace.com --floppy --chs 0x00
+
+ Installing GRLDR boot code to a floppy image under DOS or Linux:
+
+ bootlace.com --floppy --chs floppy.img
+
+BOOTLACE.COM cannot function well under Windows NT/2000/XP/2003. It is expected
+(and designed) to run under DOS/Win9x and Linux. Update: For image FILES,
+bootlace.com function well under Windows NT/2000/XP/2003. For devices,
+bootlace.com will not work under Windows NT/2000/XP/2003 because bootlace.com
+is a DOS utility and Windows NT/2000/XP/2003 does not allow bootlace.com to
+access devices.
+
+******************************************************************************
+*** kexec-tools should be patched for the 1.101 release ***
+******************************************************************************
+
+The file kexec-tools-1.101-patch is a patch to the kexec-tools-1.101 release.
+Kexec might fail to load grub.exe without this patch.
+
+The home page of kexec-tools is:
+
+ http://www.xmission.com/~ebiederm/files/kexec/
+
+Note: The Linux kernel should be KEXEC enabled before kexec can be run.
+
+ !! Important Update !!
+
+The patch `kexec-tools-1.101-patch' is not needed now and has been deleted.
+Even worse, it fails in `kexec -l grub.exe --initrd=imgfile'. So please
+do not use it any more.
+
+******************************************************************************
+*** Direct transition to DOS/Win9x from within Linux ***
+******************************************************************************
+
+By using kexec, we can easily boot into DOS/Win9x from a running Linux system.
+
+If WIN98.IMG is a bootable hard-disk image, do as follows:
+
+kexec -l grub.exe --initrd=WIN98.IMG --command-line="--config-file=map (rd) (hd0); map --hook; chainloader (hd0)+1; rootnoverify (hd0)"
+
+kexec -e
+
+If DOS.IMG is a bootable floppy image, do this way:
+
+kexec -l grub.exe --initrd=DOS.IMG --command-line="--config-file=map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"
+
+kexec -e
+
+Note that in this manner, we can boot DOS/Win9x without using a real DOS/Win9x
+disk. We need no FAT partition but an image file.
+
+We have noticed that Linux itself can act as a big boot manager by using kexec
+and grub.exe. This may be convenient to developers who write installation or
+bootstrap or initialization programs.
+
+Certainly, grub.exe and the bootable disk image can also be loaded by a running
+GRUB or LILO or syslinux. Examples:
+
+1. Loaded by GRUB:
+
+ kernel (hd0,0)/grub.exe --config-file="map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"
+ initrd (hd0,0)/DOS.IMG
+ boot
+
+2. Loaded by LILO:
+
+ image=/boot/grub.exe
+ label=grub.exe
+ initrd=/boot/DOS.IMG
+ append="--config-file=map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"
+
+3. Loaded by SYSLINUX:
+
+ label grub.exe
+ kernel grub.exe
+ append initrd=DOS.IMG --config-file="map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"
+
+Note: If the above `map (rd) (...)' failed, you may use `map (rd)+1 (...)'
+instead and try again.
+
+******************************************************************************
+*** Keyboard BIOS Scan Code/ASCII code tables ***
+******************************************************************************
+
+Keyboard bios scan code and ascii character code tables can be obtained from
+the web by, for example, googling for "3920 372A 4A2D 4E2B 352F". Here are 2
+main results:
+
+1. From "http://heim.ifi.uio.no/~stanisls/helppc/scan_codes.html":
+
+INT 16 - Keyboard Scan Codes
+
+ Key Normal Shifted w/Ctrl w/Alt
+
+ A 1E61 1E41 1E01 1E00
+ B 3062 3042 3002 3000
+ C 2E63 2E43 2E03 2E00
+ D 2064 2044 2004 2000
+ E 1265 1245 1205 1200
+ F 2166 2146 2106 2100
+ G 2267 2247 2207 2200
+ H 2368 2348 2308 2300
+ I 1769 1749 1709 1700
+ J 246A 244A 240A 2400
+ K 256B 254B 250B 2500
+ L 266C 264C 260C 2600
+ M 326D 324D 320D 3200
+ N 316E 314E 310E 3100
+ O 186F 184F 180F 1800
+ P 1970 1950 1910 1900
+ Q 1071 1051 1011 1000
+ R 1372 1352 1312 1300
+ S 1F73 1F53 1F13 1F00
+ T 1474 1454 1414 1400
+ U 1675 1655 1615 1600
+ V 2F76 2F56 2F16 2F00
+ W 1177 1157 1117 1100
+ X 2D78 2D58 2D18 2D00
+ Y 1579 1559 1519 1500
+ Z 2C7A 2C5A 2C1A 2C00
+
+ Key Normal Shifted w/Ctrl w/Alt
+
+ 1 0231 0221 7800
+ 2 0332 0340 0300 7900
+ 3 0433 0423 7A00
+ 4 0534 0524 7B00
+ 5 0635 0625 7C00
+ 6 0736 075E 071E 7D00
+ 7 0837 0826 7E00
+ 8 0938 092A 7F00
+ 9 0A39 0A28 8000
+ 0 0B30 0B29 8100
+
+ Key Normal Shifted w/Ctrl w/Alt
+
+ - 0C2D 0C5F 0C1F 8200
+ = 0D3D 0D2B 8300
+ [ 1A5B 1A7B 1A1B 1A00
+ ] 1B5D 1B7D 1B1D 1B00
+ ; 273B 273A 2700
+ ' 2827 2822
+ ` 2960 297E
+ \ 2B5C 2B7C 2B1C 2600 (same as Alt L)
+ , 332C 333C
+ . 342E 343E
+ / 352F 353F
+
+ Key Normal Shifted w/Ctrl w/Alt
+
+ F1 3B00 5400 5E00 6800
+ F2 3C00 5500 5F00 6900
+ F3 3D00 5600 6000 6A00
+ F4 3E00 5700 6100 6B00
+ F5 3F00 5800 6200 6C00
+ F6 4000 5900 6300 6D00
+ F7 4100 5A00 6400 6E00
+ F8 4200 5B00 6500 6F00
+ F9 4300 5C00 6600 7000
+ F10 4400 5D00 6700 7100
+ F11 8500 8700 8900 8B00
+ F12 8600 8800 8A00 8C00
+
+ Key Normal Shifted w/Ctrl w/Alt
+
+ BackSpace 0E08 0E08 0E7F 0E00
+ Del 5300 532E 9300 A300
+ Down Arrow 5000 5032 9100 A000
+ End 4F00 4F31 7500 9F00
+ Enter 1C0D 1C0D 1C0A A600
+ Esc 011B 011B 011B 0100
+ Home 4700 4737 7700 9700
+ Ins 5200 5230 9200 A200
+ Keypad 5 4C35 8F00
+ Keypad * 372A 9600 3700
+ Keypad - 4A2D 4A2D 8E00 4A00
+ Keypad + 4E2B 4E2B 4E00
+ Keypad / 352F 352F 9500 A400
+ Left Arrow 4B00 4B34 7300 9B00
+ PgDn 5100 5133 7600 A100
+ PgUp 4900 4939 8400 9900
+ PrtSc 7200
+ Right Arrow 4D00 4D36 7400 9D00
+ SpaceBar 3920 3920 3920 3920
+ Tab 0F09 0F00 9400 A500
+ Up Arrow 4800 4838 8D00 9800
+
+
+- Some key combinations are not available on all systems. The PS/2
+ includes many that aren't available on the PC, XT and AT.
+- To retrieve the character from a scan code logical AND the word
+ with 0x00FF.
+- see INT 16 MAKE CODES
+
+
+
+2. From "http://www.hoppie.nl/ivan/keycodes.txt":
+
+
+
+ Keystroke Keypress code
+--------------------------------------------------
+ Esc 011B
+ 1 0231
+ 2 0332
+ 3 0433
+ 4 0534
+ 5 0635
+ 6 0736
+ 7 0837
+ 8 0938
+ 9 0A39
+ 0 0B30
+ - 0C2D
+ = 0D3D
+ Backspace 0E08
+ Tab 0F09
+ q 1071
+ w 1177
+ e 1265
+ r 1372
+ t 1474
+ y 1579
+ u 1675
+ i 1769
+ o 186F
+ p 1970
+ [ 1A5B
+ ] 1B5D
+ Enter 1C0D
+ Ctrl **
+ a 1E61
+ s 1F73
+ d 2064
+ f 2166
+ g 2267
+ h 2368
+ j 246A
+ k 256B
+ l 266C
+ ; 273B
+ ' 2827
+ ` 2960
+ Shift **
+ \ 2B5C
+ z 2C7A
+ x 2D78
+ c 2E63
+ v 2F76
+ b 3062
+ n 316E
+ m 326D
+ , 332C
+ . 342E
+ / 352F
+ Gray * 372A
+ Alt **
+ Space 3920
+ Caps Lock **
+ F1 3B00
+ F2 3C00
+ F3 3D00
+ F4 3E00
+ F5 3F00
+ F6 4000
+ F7 4100
+ F8 4200
+ F9 4300
+ F10 4400
+ F11 8500
+ F12 8600
+ Num Lock **
+ Scroll Lock **
+ White Home 4700
+ White Up Arrow 4800
+ White PgUp 4900
+ Gray - 4A2D
+ White Left Arrow 4B00
+ Center Key 4C00
+ White Right Arrow 4D00
+ Gray + 4E2B
+ White End 4F00
+ White Down Arrow 5000
+ White PgDn 5100
+ White Ins 5200
+ White Del 5300
+ SysReq **
+ Key 45 [1] 565C
+ Enter (number keypad) 1C0D
+ Gray / 352F
+ PrtSc **
+ Pause **
+ Gray Home 4700
+ Gray Up Arrow 4800
+ Gray Page Up 4900
+ Gray Left Arrow 4B00
+ Gray Right Arrow 4D00
+ Gray End 4F00
+ Gray Down Arrow 5000
+ Gray Page Down 5100
+ Gray Insert 5200
+ Gray Delete 5300
+
+ Shift Esc 011B
+ ! 0221
+ @ 0340
+ # 0423
+ $ 0524
+ % 0625
+ ^ 075E
+ & 0826
+ * (white) 092A
+ ( 0A28
+ ) 0B29
+ _ 0C5F
+ + (white) 0D2B
+ Shift Backspace 0E08
+ Shift Tab (Backtab) 0F00
+ Q 1051
+ W 1157
+ E 1245
+ R 1352
+ T 1454
+ Y 1559
+ U 1655
+ I 1749
+ O 184F
+ P 1950
+ { 1A7B
+ } 1B7D
+ Shift Enter 1C0D
+ Shift Ctrl **
+ A 1E41
+ S 1F53
+ D 2044
+ F 2146
+ G 2247
+ H 2348
+ J 244A
+ K 254B
+ L 264C
+ : 273A
+ " 2822
+ ~ 297E
+ | 2B7C
+ Z 2C5A
+ X 2D58
+ C 2E43
+ V 2F56
+ B 3042
+ N 314E
+ M 324D
+ < 333C
+ > 343E
+ ? 353F
+ Shift Gray * 372A
+ Shift Alt **
+ Shift Space 3920
+ Shift Caps Lock **
+ Shift F1 5400
+ Shift F2 5500
+ Shift F3 5600
+ Shift F4 5700
+ Shift F5 5800
+ Shift F6 5900
+ Shift F7 5A00
+ Shift F8 5B00
+ Shift F9 5C00
+ Shift F10 5D00
+ Shift F11 8700
+ Shift F12 8800
+ Shift Num Lock **
+ Shift Scroll Lock **
+ Shift 7 (number pad) 4737
+ Shift 8 (number pad) 4838
+ Shift 9 (number pad) 4939
+ Shift Gray - 4A2D
+ Shift 4 (number pad) 4B34
+ Shift 5 (number pad) 4C35
+ Shift 6 (number pad) 4D36
+ Shift Gray + 4E2B
+ Shift 1 (number pad) 4F31
+ Shift 2 (number pad) 5032
+ Shift 3 (number pad) 5133
+ Shift 0 (number pad) 5230
+ Shift . (number pad) 532E
+ Shift SysReq **
+ Shift Key 45 [1] 567C
+ Shift Enter (number pad) 1C0D
+ Shift Gray / 352F
+ Shift PrtSc **
+ Shift Pause **
+ Shift Gray Home 4700
+ Shift Gray Up Arrow 4800
+ Shift Gray Page Up 4900
+ Shift Gray Left Arrow 4B00
+ Shift Gray Right Arrow 4D00
+ Shift Gray End 4F00
+ Shift Gray Down Arrow 5000
+ Shift Gray Page Down 5100
+ Shift Gray Insert 5200
+ Shift Gray Delete 5300
+
+ Ctrl Esc 011B
+ Ctrl 1 --
+ Ctrl 2 (NUL) 0300
+ Ctrl 3 --
+ Ctrl 4 --
+ Ctrl 5 --
+ Ctrl 6 (RS) 071E
+ Ctrl 7 --
+ Ctrl 8 --
+ Ctrl 9 --
+ Ctrl 0 --
+ Ctrl - 0C1F
+ Ctrl = --
+ Ctrl Backspace (DEL) 0E7F
+ Ctrl Tab 9400
+ Ctrl q (DC1) 1011
+ Ctrl w (ETB) 1117
+ Ctrl e (ENQ) 1205
+ Ctrl r (DC2) 1312
+ Ctrl t (DC4) 1414
+ Ctrl y (EM) 1519
+ Ctrl u (NAK) 1615
+ Ctrl i (HT) 1709
+ Ctrl o (SI) 180F
+ Ctrl p (DEL) 1910
+ Ctrl [ (ESC) 1A1B
+ Ctrl ] (GS) 1B1D
+ Ctrl Enter (LF) 1C0A
+ Ctrl a (SOH) 1E01
+ Ctrl s (DC3) 1F13
+ Ctrl d (EOT) 2004
+ Ctrl f (ACK) 2106
+ Ctrl g (BEL) 2207
+ Ctrl h (Backspace) 2308
+ Ctrl j (LF) 240A
+ Ctrl k (VT) 250B
+ Ctrl l (FF) 260C
+ Ctrl ; --
+ Ctrl ' --
+ Ctrl ` --
+ Ctrl Shift **
+ Ctrl \ (FS) 2B1C
+ Ctrl z (SUB) 2C1A
+ Ctrl x (CAN) 2D18
+ Ctrl c (ETX) 2E03
+ Ctrl v (SYN) 2F16
+ Ctrl b (STX) 3002
+ Ctrl n (SO) 310E
+ Ctrl m (CR) 320D
+ Ctrl , --
+ Ctrl . --
+ Ctrl / --
+ Ctrl Gray * 9600
+ Ctrl Alt **
+ Ctrl Space 3920
+ Ctrl Caps Lock --
+ Ctrl F1 5E00
+ Ctrl F2 5F00
+ Ctrl F3 6000
+ Ctrl F4 6100
+ Ctrl F5 6200
+ Ctrl F6 6300
+ Ctrl F7 6400
+ Ctrl F8 6500
+ Ctrl F9 6600
+ Ctrl F10 6700
+ Ctrl F11 8900
+ Ctrl F12 8A00
+ Ctrl Num Lock --
+ Ctrl Scroll Lock --
+ Ctrl White Home 7700
+ Ctrl White Up Arrow 8D00
+ Ctrl White PgUp 8400
+ Ctrl Gray - 8E00
+ Ctrl White Left Arrow 7300
+ Ctrl 5 (number pad) 8F00
+ Ctrl White Right Arrow 7400
+ Ctrl Gray + 9000
+ Ctrl White End 7500
+ Ctrl White Down Arrow 9100
+ Ctrl White PgDn 7600
+ Ctrl White Ins 9200
+ Ctrl White Del 9300
+ Ctrl SysReq **
+ Ctrl Key 45 [1] --
+ Ctrl Enter (number pad) 1C0A
+ Ctrl / (number pad) 9500
+ Ctrl PrtSc 7200
+ Ctrl Break 0000
+ Ctrl Gray Home 7700
+ Ctrl Gray Up Arrow 8DE0
+ Ctrl Gray Page Up 8400
+ Ctrl Gray Left Arrow 7300
+ Ctrl Gray Right Arrow 7400
+ Ctrl Gray End 7500
+ Ctrl Gray Down Arrow 91E0
+ Ctrl Gray Page Down 7600
+ Ctrl Gray Insert 92E0
+ Ctrl Gray Delete 93E0
+
+ Alt Esc 0100
+ Alt 1 7800
+ Alt 2 7900
+ Alt 3 7A00
+ Alt 4 7B00
+ Alt 5 7C00
+ Alt 6 7D00
+ Alt 7 7E00
+ Alt 8 7F00
+ Alt 9 8000
+ Alt 0 8100
+ Alt - 8200
+ Alt = 8300
+ Alt Backspace 0E00
+ Alt Tab A500
+ Alt q 1000
+ Alt w 1100
+ Alt e 1200
+ Alt r 1300
+ Alt t 1400
+ Alt y 1500
+ Alt u 1600
+ Alt i 1700
+ Alt o 1800
+ Alt p 1900
+ Alt [ 1A00
+ Alt ] 1B00
+ Alt Enter 1C00
+ Alt Ctrl **
+ Alt a 1E00
+ Alt s 1F00
+ Alt d 2000
+ Alt f 2100
+ Alt g 2200
+ Alt h 2300
+ Alt j 2400
+ Alt k 2500
+ Alt l 2600
+ Alt ; 2700
+ Alt ' 2800
+ Alt ` 2900
+ Alt Shift **
+ Alt \ 2B00
+ Alt z 2C00
+ Alt x 2D00
+ Alt c 2E00
+ Alt v 2F00
+ Alt b 3000
+ Alt n 3100
+ Alt m 3200
+ Alt , 3300
+ Alt . 3400
+ Alt / 3500
+ Alt Gray * 3700
+ Alt Space 3920
+ Alt Caps Lock **
+ Alt F1 6800
+ Alt F2 6900
+ Alt F3 6A00
+ Alt F4 6B00
+ Alt F5 6C00
+ Alt F6 6D00
+ Alt F7 6E00
+ Alt F8 6F00
+ Alt F9 7000
+ Alt F10 7100
+ Alt F11 8B00
+ Alt F12 8C00
+ Alt Num Lock **
+ Alt Scroll Lock **
+ Alt Gray - 4A00
+ Alt Gray + 4E00
+ Alt 7 (number pad) #
+ Alt 8 (number pad) #
+ Alt 9 (number pad) #
+ Alt 4 (number pad) #
+ Alt 5 (number pad) #
+ Alt 6 (number pad) #
+ Alt 1 (number pad) #
+ Alt 2 (number pad) #
+ Alt 3 (number pad) #
+ Alt Del --
+ Alt SysReq **
+ Alt Key 45 [1] --
+ Alt Enter (number pad) A600
+ Alt / (number pad) A400
+ Alt PrtSc **
+ Alt Pause **
+ Alt Gray Home 9700
+ Alt Gray Up Arrow 9800
+ Alt Gray Page Up 9900
+ Alt Gray Left Arrow 9B00
+ Alt Gray Right Arrow 9D00
+ Alt Gray End 9F00
+ Alt Gray Down Arrow A000
+ Alt Gray Page Down A100
+ Alt Gray Insert A200
+ Alt Gray Delete A300
+
+ -------------------------------------------------------------------------
+
+Footnotes
+
+ [1] In the United States, the 101/102-key keyboard is shipped
+ with 101 keys. Overseas versions have an additional key
+ sandwiched between the left Shift key and the Z key. This
+ additional key is identified by IBM (and in this table) as
+ "Key 45."
+
+ [**] Keys and key combinations marked ** are used by the ROM BIOS
+ but do not put values into the keyboard buffer.
+
+ [--] Keys and key combinations marked -- are ignored by the ROM
+ BIOS.
+
+
+
+
+3. From "http://heim.ifi.uio.no/~stanisls/helppc/make_codes.html":
+
+
+INT 9 - Hardware Keyboard Make/Break Codes
+
+ Key Make Break Key Make Break
+
+ Backspace 0E 8E F1 3B BB
+ Caps Lock 3A BA F2 3C BC
+ Enter 1C 9C F3 3D BD
+ Esc 01 81 F4 3E BE
+ Left Alt 38 B8 F7 41 C1
+ Left Ctrl 1D 9D F5 3F BF
+ Left Shift 2A AA F6 40 C0
+ Num Lock 45 C5 F8 42 C2
+ Right Shift 36 B6 F9 43 C3
+ Scroll Lock 46 C6 F10 44 C4
+ Space 39 B9 F11 57 D7
+ Sys Req (AT) 54 D4 F12 58 D8
+ Tab 0F 8F
+
+ Keypad Keys Make Break
+
+ Keypad 0 (Ins) 52 D2
+ Keypad 1 (End) 4F CF
+ Keypad 2 (Down arrow) 50 D0
+ Keypad 3 (PgDn) 51 D1
+ Keypad 4 (Left arrow) 4B CB
+ Keypad 5 4C CC
+ Keypad 6 (Right arrow) 4D CD
+ Keypad 7 (Home) 47 C7
+ Keypad 8 (Up arrow) 48 C8
+ Keypad 9 (PgUp) 49 C9
+ Keypad . (Del) 53 D3
+ Keypad * (PrtSc) 37 B7
+ Keypad - 4A CA
+ Keypad + 4E CE
+
+ Key Make Break Key Make Break
+
+ A 1E 9E N 31 B1
+ B 30 B0 O 18 98
+ C 2E AE P 19 99
+ D 20 A0 Q 10 90
+ E 12 92 R 13 93
+ F 21 A1 S 1F 9F
+ G 22 A2 T 14 94
+ H 23 A3 U 16 96
+ I 17 97 V 2F AF
+ J 24 A4 W 11 91
+ K 25 A5 X 2D AD
+ L 26 A6 Y 15 95
+ M 32 B2 Z 2C AC
+
+ Key Make Break Key Make Break
+
+ 1 02 82 - 0C 8C
+ 2 03 83 = 0D 8D
+ 3 04 84 [ 1A 9A
+ 4 05 85 ] 1B 9B
+ 5 06 86 ; 27 A7
+ 6 07 87 ' 28 A8
+ 7 08 88 ` 29 A9
+ 8 09 89 \ 2B AB
+ 9 0A 8A , 33 B3
+ 0 0B 8B . 34 B4
+ / 35 B5
+
+
+Enhanced Keyboard Keys (101/102 keys)
+
+ Control Keys Make Break
+
+ Alt-PrtSc (SysReq) 54 D4
+ Ctrl-PrtSc E0 37 E0 B7
+ Enter E0 1C E0 9C
+ PrtSc E0 2A E0 37 E0 B7 E0 AA
+ Right Alt E0 38 E0 B8
+ Right Ctrl E0 1D E0 9D
+ Shift-PrtSc E0 37 E0 B7
+ / E0 35 E0 B5
+ Pause E1 1D 45 E1 9D C5 (not typematic)
+ Ctrl-Pause (Ctrl-Break) E0 46 E0 C6 (not typematic)
+
+ - Keys marked as "not typematic" generate one stream of bytes
+ without corresponding break scan code bytes (actually the
+ break codes are part of the make code).
+
+
+ Normal Mode or
+ Shift w/Numlock
+ Key Make Break |----- Numlock on ------.
+ Make Break
+ Del E0 53 E0 D3 E0 2A E0 53 E0 D3 E0 AA
+ Down arrow E0 50 E0 D0 E0 2A E0 50 E0 D0 E0 AA
+ End E0 4F E0 CF E0 2A E0 4F E0 CF E0 AA
+ Home E0 47 E0 C7 E0 2A E0 47 E0 C7 E0 AA
+ Ins E0 52 E0 D2 E0 2A E0 52 E0 D2 E0 AA
+ Left arrow E0 4B E0 CB E0 2A E0 4B E0 CB E0 AA
+ PgDn E0 51 E0 D1 E0 2A E0 51 E0 D1 E0 AA
+ PgUp E0 49 E0 C9 E0 2A E0 49 E0 C9 E0 AA
+ Right arrow E0 4D E0 CD E0 2A E0 4D E0 CD E0 AA
+ Up arrow E0 48 E0 C8 E0 2A E0 48 E0 C8 E0 AA
+
+ Key |--Left Shift Pressed--. |--Right Shift Pressed--.
+ Make Break Make Break
+ Del E0 AA E0 53 E0 D3 E0 2A E0 B6 E0 53 E0 D3 E0 36
+ Down arrow E0 AA E0 50 E0 D0 E0 2A E0 B6 E0 50 E0 D0 E0 36
+ End E0 AA E0 4F E0 CF E0 2A E0 B6 E0 4F E0 CF E0 36
+ Home E0 AA E0 47 E0 C7 E0 2A E0 B6 E0 47 E0 C7 E0 36
+ Ins E0 AA E0 52 E0 D2 E0 2A E0 B6 E0 52 E0 D2 E0 36
+ Left arrow E0 AA E0 4B E0 CB E0 2A E0 B6 E0 4B E0 CB E0 36
+ PgDn E0 AA E0 51 E0 D1 E0 2A E0 B6 E0 51 E0 D1 E0 36
+ PgUp E0 AA E0 49 E0 C9 E0 2A E0 B6 E0 49 E0 C9 E0 36
+ Right arrow E0 AA E0 4D E0 CD E0 2A E0 B6 E0 4D E0 CD E0 36
+ Up arrow E0 AA E0 48 E0 C8 E0 2A E0 B6 E0 48 E0 C8 E0 36
+ / E0 AA E0 35 E0 B5 E0 2A E0 B6 E0 35 E0 B5 E0 36
+
+
+ - The PS/2 models have three make/break scan code sets. The first
+ set matches the PC & XT make/break scan code set and is the one
+ listed here. Scan code sets are selected by writing the value F0
+ to the keyboard via the 8042 (port 60h). The following is a brief
+ description of the scan code sets (see the PS/2 Technical Reference
+ manuals for more information on scan code sets 2 and 3):
+
+ / set 1, each key has a base scan code. Some keys generate
+ extra scan codes to generate artificial shift states. This
+ is similar to the standard scan code set used on the PC and XT.
+ / set 2, each key sends one make scan code and two break scan
+ codes bytes (F0 followed by the make code). This scan code
+ set is available on the IBM AT also.
+ / set 3, each key sends one make scan code and two break scan
+ codes bytes (F0 followed by the make code) and no keys are
+ altered by Shift/Alt/Ctrl keys.
+ / typematic scan codes are the same as the make scan code
+
+ - Some Tandy 1000's do not handle Alt key combinations when multiple
+ shift keys are pressed. The Alt-Shift-H combination loses the Alt.
+ - extended keys like (F11, F12) can only be read with systems that
+ have extended keyboard BIOS support (or INT 9 extensions); to
+ read these special keys on these systems INT 16,10 must be used
+
+
+******************************************************************************
+*** GRLDR Error messages ***
+******************************************************************************
+
+1. Missing MBR-helper.
+
+ The helper function in the sectors that immediately follow the MBR is
+ not present, or it has been erased by a virus or by Windows XP/Vista.
+
+ Run the bootlace.com utility to fix the problem.
+
+2. Buggy BIOS!
+
+ Your BIOS is too buggy. It even has no support for INT13/AH=8.
+
+ No solution except flashing your BIOS. Buggy BIOSes will encounter
+ more and more problems with grub4dos in the future.
+
+3. This partition is NTFS but with unknown boot record. Please install
+Microsoft NTFS boot sectors to this partition correctly, or create an
+FAT12/16/32 partition and place the same copy of GRLDR and MENU.LST there.
+
+ The boot record was changed or erased by Microsoft Windows XP Service
+ Pack 2.
+
+ You may install the old boot record introduced with the original clean
+ Windows 2K/XP. As another solution, you may create an FAT partition
+ for your system, and copy GRLDR and your MENU.LST to its root dir.
+
+ While the startup code of grldr might fail to load GRLDR in NTFS
+ partitions, it always successfully loads GRLDR in FAT partitions(and
+ even in ext2/ext3 partitions).
+
+ Note that NTLDR only loads the startup code of grldr(i.e., the leading
+ 16 sectors of grldr), not the whole grldr file.
+
+ Thus, C:\GRLDR must exist(here C: can be NTFS), since it is used for
+ BOOT.INI and NTLDR. If C: is NTFS, X:\GRLDR should exist as well,
+ where X: stands for a certain FAT partition.
+
+
+******************************************************************************
+*** Known BIOS bugs ***
+******************************************************************************
+
+1. Some newer Dell machines have no int13/AH=43h support. You may encounter
+ failure when trying to write-access an emulated disk.
+
+ Note: This bug is serious! The old "root+setup" installation method
+ (in real mode grub environment) uses INT13 to write the first sector
+ of stage2. It will fail for the buggy DELL machine when stage2 is
+ accessed with LBA mode.
+
+2. Some buggy BIOSes won't boot bootable.iso(See above).(qemu can boot it fine)
+
+3. Some newer Dell machines violently destroyed the interrupt vectors for
+ hardware IRQs and will hang the machine when running GRUB.EXE
+ from DOS. You may try again with BADGRUB.EXE.
+
+4. Reports say some BIOSes will function abnormally after GRUB.EXE is started
+ by kexec of Linux. Some machines reportedly hang. Some others
+ reportedly cannot access USB drives.
+
+
+******************************************************************************
+*** Known Problems ***
+******************************************************************************
+
+1. Running GRUB.EXE from a DOS box of Windows 9x/Me could hang the
+ machine, especially for some systems with USB support. You may
+ encounter the same problem when running GRUB.EXE through KEXEC under
+ Linux.
+
+Note: You don't have to run GRUB.EXE from protected mode of Win9x, which
+ could hang the machine; Instead, you usually want to run GRUB.EXE
+ after you have done a "Restart the computer in MS-DOS mode", which
+ is safe enough.
+
+2. The default chainloader action will keep A20 on. Some buggy DOS XMS
+ memory managers could hang the machine. You may use the --disable-a20
+ option in the chainloader line and try again. Anyway, you should avoid
+ using those buggy memory managers.
+
+3. THTF BIOS L4S5M Ver 1.1a(dated 2002-1-10) has a buggy int15 which
+ causes hang at the boot of a multi boot kernel(memdisk for example).
+
+4. A Chinese DOS system software, the TechWay SCS, will not work with
+ newer versions of GRUB.EXE. In general, TSRs that take antitracking
+ measures will not work with GRUB.EXE any more.
+
+
+******************************************************************************
+*** List of binary files and their corresponding source files ***
+******************************************************************************
+
+binary file main source file other included source or binary files
+------------- ---------------- -------------------------------------
+
+bootlace.com bootlacestart.S bootlace.inc, grldrstart.S
+
+grldr grldrstart.S pre_stage2(binary, See note below)
+
+grldr.mbr mbrstart.S grldrstart.S
+
+grub.exe dosstart.S pre_stage2(binary, See note below)
+
+hmload.com hmloadstart.S
+
+-----------------------------------------------------------------------------
+
+Note: pre_stage2 is the main body of GNU GRUB and it is simply appended to
+grldrstart/dosstart in binary format to form our grldr/grub.exe.
+
+Note: The GRUB file(WITHOUT .EXE suffix) is a static-linked ELF executable
+program for Linux, normally called the GRUB Shell. The GRUB Shell is a boot-
+manager, but not a boot-loader(the "boot" command won't work in GRUB Shell).
+GRUB.EXE(with KEXEC) can be used as a bootloader running directly under Linux.
+
+******************************************************************************
+*** Memory Layout for Quiting to DOS from GRUB.EXE ***
+******************************************************************************
+
+The quit command is implemented to return to DOS in the instance that GRUB.EXE
+is started off DOS.
+
+1. Before GRUB.EXE transfers control to pre_stage2, it will copy 640KB of
+conventional memory to physical address 0x200000(i.e., 2MB), and write 4 long
+integers immediately follows the backup copy of the conventional memory:
+ At 0x2A0000: 0x50554B42, it is the "BKUP" signature.
+
+ At 0x2A0004: Gate A20 status under DOS: non-zero means A20 on;
+ zero means A20 off. Update: A20 always on, see below.
+
+ At 0x2A0008: high word is boot-CS, low word is boot-IP. The quit
+ command uses this entry point to return to DOS.
+
+ At 0x2A000C: CheckSum: the sum of all long integers in the memory
+ range from 0x200000 to 0x2A000F is 0.
+
+2. If the above memory structure is corrupted by a grub command, the quit
+command will issue an error message and refuse to exit from grub.
+
+3. Because GRUB may corrupt extended memory, you should better avoid using
+extended memory under DOS before running GRUB.EXE.
+
+4. Gate A20 will be enabled by GRUB.EXE. Hopefully this would hurt nothing.
+
+
+******************************************************************************
+*** Memory usage in conventional/low memory area ***
+******************************************************************************
+
+1. boot.c, fsys_reiserfs.c: 8K below 0x68000.
+
+2. fsys_ext2fs.c, fsys_minix.c: 1K below 0x68000.
+
+3. fsys_jfs.c: 4K + 256 bytes below 0x68000.
+
+4. fsys_reiserfs.c: 202 bytes at 0x600.
+
+5. fsys_xfs.c: 188 bytes at 0x600.
+
+6. fsys_xfs.c: (logical block size) bytes below 0x68000.
+
+7. geometry tune: 0x50000 - 0x5ffff.
+
+******************************************************************************
+*** Command-line Length about GRUB.EXE ***
+******************************************************************************
+
+GRUB.EXE now can be started in CONFIG.SYS with the **DEVICE** command:
+
+ DEVICE=grub.exe [--config-file="FILENAME_OR_COMMANDS"]
+
+1. If GRUB.EXE is invoked with DEVICE command and FILENAME_OR_COMMANDS is a
+collection of some GRUB commands separated by semi-colon, then the length of
+FILENAME_OR_COMMANDS can be nearly 4KB ----Supprise? But true! MS-DOS 7+
+even allows a much longer line, but 4KB seems enough for our use of GRUB.EXE.
+This is very useful when we want to embed a big menu into the command line.
+Note that GRLDR hasn't yet supported any command-line arguments.
+
+2. If GRUB.EXE is invoked with INSTALL command, the option length has a limit
+of 80 characters(including the leading "--config-file=" part). An overflow may
+hang up MS-DOS immediately.
+
+3. If GRUB.EXE is invoked with SHELL command, the option length has a limit of
+126 characters(including the leading "--config-file=" part). Overflow won't
+hang up MS-DOS, but the line will be cut short. This limit is the same as that
+in the console-DOS-prompt or in a BAT file.
+
+4. The DOS editor EDIT does not allow to create a line of 4KB long. So use
+another editor, for example, vi for Linux, please.
+
+5. The DEVICE=GRUB.EXE line can be used together with other DEVICE commands
+such as DEVICE=HIMEM.SYS and DEVICE=EMM386.EXE. The GRUB.EXE line should
+occur before the EMM386.EXE line in order to avoid the rejection by EMM386.
+Update: Since 0.4.2, GRUB.EXE works well even after EMM386.EXE is loaded.
+
+6. In any case mentioned above, you can return back to DOS by quit command.
+
+7. Memory usage about command-line menu: The 4KB command-line menu starts at
+physical address 0x0800 and ends at 0x17FF.
+
+******************************************************************************
+*** New Syntax for the DEFAULT/SAVEDEFAULT Commands ***
+******************************************************************************
+
+In addition to the original usage of "default NUM" and "default saved", now
+there is a new usage of "default FILE", like this:
+
+ default (hd0,0)/default
+
+Note that FILE must have a valid DEFAULT file format. A sample DEFAULT file
+is included in the release. You may copy it to wherever you like, but you
+should avoid modifying its content manually. The DEFAULT file may be used
+in this way:
+
+(1) First, you should copy a default file with valid format to somewhere in
+your operating system.
+
+(2) Secondly, you should use the "default FILE" command of GRUB to announce
+the use of FILE as our new default file for being written by "savedefault".
+
+(3) Then, you may use "savedefault" command to save the desired entry number
+into this new default file.
+
+(4) OK, at next boot, you may read the saved entry number by using the same
+"default FILE" command as mentioned in above (2).
+
+And the SAVEDEFAULT command now accept an options `--wait=T', like this:
+
+ savedefault --wait=5
+
+If `--wait=T' is specified and T is non-zero, savedefault will prompt
+the user with a message just before it writes to disk. The write operation
+will be cancelled in T seconds if the `Y' key was not pressed.
+
+Here is a sample menu.lst file:
+
+#--------------------begin menu.lst---------------------------------------
+color black/cyan yellow/cyan
+timeout 30
+default /default
+
+title find and load NTLDR of Windows NT/2K/XP
+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
+find --set-root /io.sys
+chainloader /io.sys
+savedefault --wait=2
+
+title floppy (fd0)
+chainloader (fd0)+1
+rootnoverify (fd0)
+savedefault --wait=2
+
+title find and boot Linux with menu.lst already installed
+find --set-root /sbin/init
+savedefault --wait=2
+configfile /boot/grub/menu.lst
+
+title find and boot Mandriva with menu.lst already installed
+find --set-root /etc/mandriva-release
+savedefault --wait=2
+configfile /boot/grub/menu.lst
+
+title back to dos
+savedefault --wait=2
+quit
+
+title commandline
+savedefault --wait=2
+commandline
+
+title reboot
+savedefault --wait=2
+reboot
+
+title halt
+savedefault --wait=2
+halt
+#--------------------end menu.lst---------------------------------------
+
+Note 1: The file DEFAULT must exist and have a proper format as stated above.
+ Or else, the default/savedefault commands won't function well.
+
+Note 2: The file DEFAULT which is in the same dir as a certain MENU.LST file
+ is called associated with the MENU.LST file.
+
+Note 3: The associated DEFAULT file will take effect automatically if there
+ are no `default' commands present.
+
+Note 4: Just before a menu file gains control(e.g., it is the associated
+ MENU.LST of a GRLDR file, or it was specified via
+ `grub.exe --config-file=(DEVICE)/PATH/YOUR_MENU_FILE', or it was
+ specified by the `configfile' command of grub), its associated
+ DEFAULT file will be used if present, until an explicit `default'
+ command is encountered.
+
+******************************************************************************
+*** The New `cdrom' Command Syntax ***
+******************************************************************************
+
+1. Initialize the ATAPI CDROM devices:
+
+ grub> cdrom --init
+
+ This will display the number of atapi cdroms found: atapi_dev_count
+
+2. Stop the ATAPI CDROM devices:
+
+ grub> cdrom --stop
+
+ This will set atapi_dev_count to 0.
+
+3. Add IO ports for searching the atapi cdrom devices. For example:
+
+ grub> cdrom --add-io-ports=0x03F601F0
+
+After running `cdrom --init' and `map --hook', the cdroms can be accessed
+through devices (cd0), (cd1), ...
+
+Note 1: If the system does not fully support the ATAPI CD-ROM specifications,
+ you will encounter failure when trying to access the (cdX) devices.
+
+Note 2: After doing a `cdrom --stop', you should do a `map --unhook'. Of
+ course you may `map --hook' again if there are mapped drives.
+
+Note 3: After adding IO ports, you should do a `map --unhook' followed by a
+ `cdrom --init' and then followed by a `map --hook'.
+
+ By default, these ports are used for searching cdroms(so they needn't
+ be added):
+
+ 0x03F601F0, 0x03760170, 0x02F600F0,
+ 0x03860180, 0x6F006B00, 0x77007300.
+
+Note 4: The BIOS might have offered a cdrom interface. It would be (cd). After
+ `cdrom --init' and `map --hook', we might have our (cd0), (cd1), ...
+ available. It is likely that one of them could access the same media
+ as the BIOS-offered (cd).
+
+Note 5: You may access the (cd) and (cdX)'es in the blocklist way. Example:
+
+ cat --hex (cd0)16+2
+
+ The cdrom sectors are big sectors with a size of 2048 bytes.
+
+Note 6: The iso9660 filesystem driver has Rock-Ridge extension support, but
+ has no Joliet extension support. So you may encounter failure when
+ you attempt to read files on a Joliet CD.
+
+Note 7: The (cd) or (cdX)'es can be booted now. Examples:
+
+ chainloader (cd)
+ boot
+
+ chainloader (cd0)
+ boot
+
+ chainloader (cd1)
+ boot
+
+ You should already have access to the CD sectors before you can
+ chainload it.
+
+******************************************************************************
+*** About the New `setvbe' Command ***
+******************************************************************************
+
+Gerardo Richarte contributed the `setvbe' code and the following comment:
+
+ New command is `setvbe', and can be used to change the video mode
+ before executing the kernel.
+
+ For example, you can do
+
+ setvbe 1024x768x32
+
+ this will scan the list of available modes and set it, and
+ automatically append a `video=' option to each subsequent kernel
+ command-line. The appended `video=' option is like this:
+
+ video=1024x768x32@0xf0000000,4096
+
+ where 0xf0000000 is the video framebuffer address as reported by vbe,
+ and 4096 is the size of a scanline in bytes (also as reported by vbe).
+
+ This is really useful if you want to give some graphics support to your
+ OS, but you don't want to implement any video functionality other than
+ writing a pixel to video memory.
+
+
+******************************************************************************
+*** About the DOS utility `hmload' ***
+******************************************************************************
+
+This program was written by John Cobb (Queen Mary, University of London).
+
+John Cobb's note:
+
+ To make use of the ram drive feature I wrote a program `hmload' to load
+ an arbitrary file to an arbitrary address in high memory. The program
+ is not very sophisticated and relies on XMS to turn on the A20 line.
+ (Also one must be very careful to steer clear of any areas of memory
+ already in use).
+
+ Under Linux we generated a disk image `dskimg' (with the kernel and
+ Initrd and a partition table).
+
+ Using this our boot procedure looked something like this:
+
+ hmload -fdskimg -a128
+ fixrb
+ <unload network drivers>
+ grub
+
+ map --ram-drive=0x81
+ map --rd-base=0x8000000
+ map --rd-size=0x400000
+ root (rd,0)
+ kernel /kernel root=/dev/ram0 rw ip=bootp ramdisk_size=32768 ...
+ initrd /initrd
+ boot
+
+See http://sysdocs.stu.qmul.ac.uk/sysdocs/Comment/GrubForDOS/ for details.
+
+Update 2007-12-05:
+
+ Now the MAP command can handle gzipped (rd) image. One can use this
+ feature with the hmload utility. For example,
+
+ step 1. Load the gzipped image under DOS at a relatively low address:
+
+ hmload -fdskimg.gz -a16
+
+ step 2. Unload network drivers.
+
+ step 3. Run GRUB.EXE.
+
+ step 4. At the grub prompt, run these commands:
+
+ map --rd-base=0x1000000 # set rd-base address to be 16M
+ map --rd-size=<the accurate size of dskimg.gz in bytes>
+ map (rd)+1 (hd0) # This will decompress (rd) and place
+ # the decompressed image at the top end
+ # of the extended memory. The (rd)+1
+ # here has special meaning and stands
+ # for the whole (rd) device. You must
+ # use (rd)+1 instead of (rd).
+ map --hook
+ root (hd0,0)
+ kernel /kernel root=/dev/ram0 rw ip=bootp ramdisk_size=32768 ...
+ initrd /initrd
+ map --unhook
+ map (hd0) (hd0) # Delete the map; this is needed.
+ boot
+
+
+******************************************************************************
+*** Notes on the use of stack ***
+******************************************************************************
+
+The protected-mode and real-mode stack are merged at physical address 0x2000.
+
+All functions should use at most 2K stack space(0x1800-0x2000). So each
+subfunction should use as little stack as possible to avoid stack-overflow.
+
+Don't use recursive functions because they could expend too much stack space.
+
+The original protected mode stack at 0x68000(expand-down) is free now and can
+be reused for any purposes.
+
+
+******************************************************************************
+*** A bug was found in the CDROM driver ***
+******************************************************************************
+
+It seems the cdrom must be connected as the master device of an IDE controller.
+
+If cdrom is slave, the driver will fail to read the cdrom sectors. Hope someone
+
+could fix this problem.
+
+
+******************************************************************************
+*** BIOS and the (cd) drive ***
+******************************************************************************
+
+When BIOS boots a no-emulation-mode bootable CD-ROM, it allocates a BIOS drive
+number to the CD. If the boot image of the CD-ROM is grldr or stage2_eltorito,
+then GRUB can access the CD-ROM media through the drive number allocated by
+BIOS. The device name of the CD-ROM is (cd).
+
+BIOS can allocate a BIOS drive number to a no-emulation-mode CDROM even when
+the CDROM is not bootable. QEMU has done so. At boot time, GRUB4DOS will
+search drives 0x80-0xFF for a possible no-emulation-mode CDROM drive allocated
+by BIOS. So if BIOS offered a CDROM interface of int13 EBIOS functions 41h-4Eh,
+then the (cd) device will be automatically available in GRUB4DOS.
+
+
+******************************************************************************
+*** The way of disk emulation changed greatly ***
+******************************************************************************
+
+The way of disk emulation has changed greatly since 0.4.2 final. Please don't
+mix newer versions with older versions when disk emulation features are used.
+
+The newer versions won't automatically unhook emulations established in a
+previous grub4dos environment. The GRUB.EXE of an older version will
+automatically dismiss emulations established earlier, before transferring
+control to the main grub program(i.e., pre_stage2).
+
+
+******************************************************************************
+*** FreeDOS EMM386 v2.26 (2006-08-27) VCPI problem ***
+******************************************************************************
+
+The VCPI function "AX=DE0Ch - Switch From Protected Mode to V86 Mode" of
+FreeDOS EMM386 v2.26 was not implemented properly(it always hangs). As an
+alternative, you can use Microsoft's EMM386 instead.
+
+Even while emm386 is running, grub.exe can be started. But if you try to quit
+to DOS from grub4dos by using the `quit' command, the VCPI function DE0C will
+be called. If EMM386 is of Microsoft, everything goes ok. If EMM386 is of
+FreeDOS, the machine will hang.
+
+
+******************************************************************************
+*** New options for map were added ***
+******************************************************************************
+
+Along with 0.4.2 final, there are two new options for the map command. They
+are --safe-mbr-hook=SMH and --int13-scheme=SCH. Both are related with disk
+emulation for use(as smoothly as possible) in the Win9x environment.
+
+SMH can take either of the two values 0 and 1. By default, SMH is 1. If you
+encountered problems of disk emulation under Win9x, you may insert a line of
+
+ map --safe-mbr-hook=0
+
+before the `boot' command and try again.
+
+Also SCH may take either 0 or 1 at present. By default, SCH is 1. If you
+encountered disk emulation problems under Win9x, you may insert a line of
+
+ map --int13-scheme=0
+
+before the `boot' command and try again.
+
+Note by the way. Like --safe-mbr-hook and --int13-scheme, the MAP command has
+a few other options that are used for setting global variables. They are here:
+
+ map --floppies=M
+
+M can be 0, 1, or 2. MAP will set a proper value at 0040:0010 by using M.
+
+ map --harddrives=N
+
+N can be between 0 and 127(inclusive). MAP will set 0040:0075 to N.
+
+ map --memdisk-raw=RAW
+
+RAW default to 1. If RAW=0, `int15/ah=87h' will be used to access memdrives.
+
+ map --ram-drive=RD
+
+RD default to 0x7F which is a floppy. If the RAM DRIVE is a hard drive image
+(with partition table in the first sector), you should set RD >= 0x80 and RD
+< 0xA0.If the RAM DRIVE is a cdrom image, you should set 0xA0<= RD <= 0xff.
+
+ map --rd-base=ADDR
+
+ map --rd-size=SIZE
+
+ADDR specifies the physical base address of the ramdisk image. SIZE specifies
+the size in bytes of the ramdisk image. ADDR default to 0. SIZE is also default
+to 0, but a size of 0 means 4GB, not a zero-long disk. The RAM DRIVE can be
+accessed in the GRUB environment using the (rd) device.
+
+
+******************************************************************************
+*** About the new map option --in-situ ***
+******************************************************************************
+
+--in-situ is used with hard drive images or hardrive partitions. With an
+in-situ map, we can typically use a logical partition as a primary partition.
+
+In-situ map is a whole drive map. It only virtualize the partition table and
+the number of hidden sectors in the BPB of the DOS Boot Record.
+
+While disk emulation may encounter various problems with win9x, the in-situ map
+works fine with win9x.
+
+Note that --in-situ will not change the real partition table.
+
+Example:
+
+ map --in-situ (hd0,4)+1 (hd0)
+
+
+******************************************************************************
+*** The PARTNEW Command Syntax ***
+******************************************************************************
+
+Besides the mappings in the above section, you may instead choose to create a
+new primary partition with the PARTNEW command. PARTNEW can generate a primary
+partition entry (in the partition table) for a logical partition.
+
+For example,
+
+ partnew (hd0,3) 0x07 (hd0,4)+1
+
+where the file (hd0,4)+1 stands for the whole partition (hd0,4). This command
+will create a new primary partition (hd0,3) whose type is 0x07 and whose
+contents/data is the same as that of the logical partition (hd0,4).
+
+Just like a whole logical partition, a contiguous partition image file can
+also be used with PARTNEW:
+
+ partnew (hd0,3) 0x00 (hd0,0)/my_partition.img
+
+The type 0x00 indicates a type-auto-detection of the image MY_PARTITION.IMG.
+The above command will create a new primary partition (hd0,3) with a proper
+type and with contents/data being exactly that of the contiguous file
+(hd0,0)/my_partition.img.
+
+PARTNEW will automatically correct the "hidden sectors" in the BPB and the
+modification will be permanent. And PARTNEW modifies the partition table
+permanently.
+
+In addition to creating new partition entries, PARTNEW can also be used to
+delete(erase, or wipe) a primary partition entry. For example,
+
+ partnew (hd0,3) 0 0 0
+
+which will empty the last entry in the partition table in MBR. Generally,
+you should use the form of "partnew PARTITION 0 0 0" to erase the entry.
+Note that only the entry would be erased, and the data stored in the partition
+will not be touched.
+
+******************************************************************************
+*** Newly implemented operators `&&' and `||' ***
+******************************************************************************
+
+This implementation is very simple. It does not handle operator nesting.
+
+Usage of `&&':
+
+ command1 && command2
+
+Description:
+
+ If command1 returns true, then command2 will be executed.
+
+Usage of `||':
+
+ command1 || command2
+
+Description:
+
+ If command1 returns false, then command2 will be executed.
+
+Examples:
+
+ is64bit && default 0
+ is64bit || default 1
+
+2010-11-04
+ Add new operators "|", ">" , ">>"
+Usage:
+ command1 | command2
+
+ command > file
+ or
+ command >> file
+
+Node: The file must already exist, GRUB4DOS can not create file or change the file size.
+Examples:
+ cat /test.txt > /abcd.txt
+
+
+******************************************************************************
+*** Three new commands is64bit, errnum and errorcheck ***
+******************************************************************************
+
+is64bit and errnum retrieve the value of is64bit and errnum respectively.
+
+errorcheck controls whether or not the error will be handled. By default,
+errorcheck is on, and menu script execution will stop on error. If errorcheck
+is off, the script will continue to execute upto a boot command. A boot command
+will turn the errorcheck on.
+
+
+******************************************************************************
+*** Use numeric keys to select a menu entry ***
+******************************************************************************
+
+If, for example, you intend to goto entry #25, you may press 2 followed by 5.
+
+
+******************************************************************************
+*** Use the INSERT key to debug step by step at startup ***
+******************************************************************************
+
+Some buggy machines could fail to enter grub4dos environment. They might hang
+or reboot unexpectedly. Press INSERT as quickly as possible on startup, and
+you can get a chance to single-step the boot process and see how far it can
+go, and then report bugs.
+
+
+******************************************************************************
+*** The debug command syntax has been changed ***
+******************************************************************************
+
+The DEBUG command now can be used to control the verbosity of command output:
+
+ debug [ on | off | normal | status | INTEGER ]
+
+0 or off for silent
+1 or normal for normal
+2 to 0x7FFFFFFF or on for verbose
+
+
+******************************************************************************
+*** GRUB4DOS and Windows Vista ***
+******************************************************************************
+
+First, use the following command to create a boot entry:
+
+ bcdedit /create /d "GRUB for DOS" /application bootsector
+
+The result will look like this:
+
+The entry {05d33150-3fde-11dc-a457-00021cf82fb0} was successfully created.
+
+The long string {05d33150-3fde-11dc-a457-00021cf82fb0} is the id for this
+entry.
+
+Then, use the following commands to set boot parameters:
+
+ bcdedit /set {id} device boot
+ bcdedit /set {id} path \grldr.mbr
+ bcdedit /displayorder {id} /addlast
+
+Please replace {id} with the actual id returned from the previous command.
+
+Finally, copy GRLDR.MBR to C:\ or wherever your boot drive is, and copy GRLDR
+and menu.lst to the root directory of any FAT16/FAT32/EXT2/NTFS partition.
+
+Note: A boot partition should be the active primary partition with BOOTMGR
+ inside. The `device boot' indicates grldr.mbr should be in the boot
+ partition.
+
+Lianjiang has written down a script to automate the tasks:
+
+ @echo off
+ rem by lianjiang
+ cls
+ echo.
+ echo Please run as administrator
+ echo.
+ pause
+ set gname=GRUB for DOS
+ set vid=
+ set timeout=5
+ bcdedit >bcdtemp.txt
+ type bcdtemp.txt | find "\grldr.mbr" >nul && echo. && echo BCD entry existing, no need to install. && pause && goto exit
+ bcdedit /export "Bcd_Backup" >nul
+ bcdedit /create /d "%gname%" /application bootsector >vid.ini
+ for,/f,"tokens=2 delims={",%%i,In (vid.ini) Do (
+ set vida=%%i
+ )
+ for,/f,"tokens=1 delims=}",%%i,In ("%vida%") Do (
+ set vid={%%i}
+ )
+ echo %vid%>vid.ini
+ bcdedit /set %vid% device boot >nul
+ bcdedit /set %vid% path \grldr.mbr >nul
+ bcdedit /displayorder %vid% /addlast >nul
+ bcdedit /timeout %timeout% >nul
+ if exist grldr.mbr copy grldr.mbr %systemdrive%\ /y && goto exit
+ echo.
+ echo Please copy grldr.mbr to %systemdrive%\
+ echo.
+ pause
+ :exit
+ del bcdtemp.txt >nul
+-------------------------------------------------------------------
+Update: Fujianabc pointed out that
+
+ bcdedit /set %vid% device boot >nul
+
+should be changed to
+
+ bcdedit /set %vid% device partition=%SystemDrive% >nul
+-------------------------------------------------------------------
+
+You still need to copy grldr yourself.
+
+Notice: It's possible to modify the BCD entry from a different OS, you just
+need to specify the location of BCD:
+
+ bcdedit /store D:\boot\BCD ...
+
+Notice: These commands need elevated privileges, they should be used inside
+cmd.exe which is started with "Run as administrator".
+
+Notice: People has reported that some version of Vista doesn't support
+creating file in C:\ with no extension, even with administrator privileges.
+This means grldr can't be placed in C:\. You can solve this by either copy
+grldr to another partition, or rename grldr to something like grub.bin. Please
+see the following section on how to do this.
+
+
+******************************************************************************
+*** How to rename grldr ***
+******************************************************************************
+
+grldr and grldr.mbr use internal boot file name to decide which file to load,
+so if you want to change the name, you must also change the embeded setting.
+You can do this with the help of grubinst, which can be downloaded at:
+
+http://download.gna.org/grubutil/
+
+grubinst can generate customized grldr.mbr:
+
+ grubinst -o -b=mygrldr C:\mygrldr.mbr
+
+grubinst can also edit existing grldr/grldr.mbr:
+
+ grubinst -e -b=mygrldr C:\mygrldr
+
+ grubinst -e -b=mygrldr C:\mygrldr.mbr
+
+In this case, you must use a grubinst that is compatible with the version of
+grub4dos, otherwise the edit will fail.
+
+So, in order to load mygrldr instead of grldr, you can use one of the
+following methods:
+
+1. Use customized grldr.mbr to load mygrldr. In this case, you need to change
+the embeded boot file name in grldr.mbr. The name of grldr.mbr can be changed
+at will.
+
+2. Use mygrldr directly. In this case, you need to change the embeded boot
+file name in mygrldr to match its new name.
+
+Notice: The boot file name must conform to the 8.3 naming convention.
+
+
+******************************************************************************
+*** PXE device ***
+******************************************************************************
+
+If PXE service is found at startup, GRUB4DOS will create a virtual device
+(pd), through which files from the tftp server can be accessed. You can setup
+a diskless boot environment using the following steps:
+
+Client side
+
+You need to boot from PXE ROM.
+
+Server side
+
+You need to configure a dhcp server and a tftp server. In the dhcp server, use
+grldr as boot file.
+
+You may also want to load a different menu.lst for different client. GRUB4DOS
+will scan the following location for configuration file:
+
+ [/mybootdir]/menu.lst
+ [/mybootdir]/menu.lst/01-88-99-AA-BB-CC-DD
+ [/mybootdir]/menu.lst/C000025B
+ [/mybootdir]/menu.lst/C000025
+ [/mybootdir]/menu.lst/C00002
+ [/mybootdir]/menu.lst/C0000
+ [/mybootdir]/menu.lst/C000
+ [/mybootdir]/menu.lst/C00
+ [/mybootdir]/menu.lst/C0
+ [/mybootdir]/menu.lst/C
+ [/mybootdir]/menu.lst/default
+
+Here, we assume the network card mac for the client machine is
+88:99:AA:BB:CC:DD, and the ip address is 192.0.2.91 (C000025B). /mybootdir is
+the directory of the boot file, for example, if boot file is /tftp/grldr, then
+mybootdir=tftp.
+
+If none of the above files is present, grldr will use its embeded menu.lst.
+
+This is a menu.lst to illustrate how to use files from the tftp server.
+
+ title Create ramdisk using map
+ map --mem (pd)/floppy.img (fd0)
+ map --hook
+ rootnoverify (fd0)
+ chainloader (fd0)+1
+
+ title Create ramdisk using memdisk
+ kernel (pd)/memdisk
+ initrd (pd)/floppy.img
+
+You can see that the menu.lst is very similar to normal disk boot, you just
+need to replace device like (hd0,0) with (pd).
+
+There are some differences between disk device and pxe device:
+
+1. You can't list files in the pxe device.
+
+2. The blocklist command will not work with a file in the pxe device.
+
+3. You must use --mem option if you want to map a file in the pxe device.
+
+When you use chainloader to load file from the pxe device, there is a option
+you can use:
+
+ chainloader --raw (pd)/BOOT_FILE
+
+Option --raw works just like --force, but it load file in one go. This can
+improve performance in some situation.
+
+You can use the pxe command to control the pxe device.
+
+1. pxe
+
+ If used without any parameter, pxe command will display current
+ settings.
+
+2. pxe blksize N
+
+ Set the packet size for tftp transmission. Minimum value is 512,
+ maximum value is 1432. This parameter is used primarily for very old
+ tftp server where packet larger than 512 byte is not supported.
+
+3. pxe basedir /dir
+
+ Set the base directory for files in the tftp server. If
+
+ pxe basedir /tftp
+
+ then all files in the pxe device is related to directory /tftp, for
+ example, (pd)/aa.img correspond to /tftp/aa.img in the server.
+
+ The default value of base directory is the directory of the boot file,
+ for example, if boot file is /tftp/grldr, then default base directory
+ is /tftp.
+
+4. pxe keep
+
+ Keep the PXE stack. The default behaviour of GRUB4DOS is to unload
+ the PXE stack just before it exits.
+
+5. pxe unload
+
+ Unload the PXE stack immediately.
+
+
+
+******************************************************************************
+*** New Feature of Relative Path Support ***
+******************************************************************************
+
+Use the `root' or `rootnoverify' command to specify the `working directory'.
+
+For example:
+
+ root (hd0,0)/boot/grub
+
+This specifies that the working dir is (hd0,0)/boot/grub. So all subsequent
+filenames of the form "/..." will actually refer to (hd0,0)/boot/grub/...
+
+That is to say:
+
+ cat /menu.lst
+
+will be equivalent to
+
+ cat (hd0,0)/boot/grub/menu.lst
+
+
+
+******************************************************************************
+*** Notation For The Current Root Device ***
+******************************************************************************
+
+
+The notation `()' can be used to access the current root device. You may use
+`find --set-root ...' to set the current root device, but the find command
+does not set the `working dir' of the root device. In this case you should
+use `()' to set the working dir after the find command:
+
+ root ()/boot/grub
+
+Update 2008-05-01:
+
+ FIND can also set the `working directory' now. For example:
+
+ find --set-root=/tmp /boot/grub/menu.lst
+
+ It is equivalent to this pair of commands:
+
+ find --set-root /boot/grub/menu.lst
+ root ()/tmp
+
+
+******************************************************************************
+*** The new map option --a20-keep-on ***
+******************************************************************************
+
+
+Along with 0.4.3 final, map has a new option --a20-keep-on which is related to
+A20 control after a memdrive sector access. Usage:
+
+ map --a20-keep-on=0
+
+It should be used before the "map --hook" command.
+
+By default, A20 will be always on after an RAM INT13 sector access. If
+"map --a20-keep-on=0" is used, the A20 status after the INT13 call will be the
+same as that before the INT13 call.
+
+
+******************************************************************************
+*** The CDROM emulation (virtualization) ***
+******************************************************************************
+
+The CDROM emulation is sometimes called ISO emulation. Here is an example:
+
+ map (hd0,0)/myiso.iso (hd32)
+ map --hook
+ chainloader (hd32)
+ boot
+
+if myiso.iso is not contiguous and you have enough memory, add a --mem option:
+
+ map --mem (hd0,0)/myiso.iso (hd32)
+ map --hook
+ chainloader (hd32)
+ boot
+
+Note: (hd32) is a grub drive number equivalent to (0xA0). If a virtual drive is
+specified with a drive number greater than or equal to 0xA0, then it will be
+treated as a cdrom (i.e., with 2048-byte big sectors).
+
+Like normal disk emulations, the CDROM emulation also (mainly) works with
+real-mode OSes. After a protected-mode OS kernel (such as
+WinNT/2K/XP/VISTA/LINUX) gains control, the OS would have no ability to access
+the virtual CDROM through BIOS int13.
+
+DOS/Win9x users may google for ELTORITO.SYS and use it in CONFIG.SYS as a
+device driver for the virtual cdrom.
+
+Example usage of eltorito.sys in CONFIG.SYS:
+
+ device=eltorito.sys /D:oemcd001
+
+Corresponding MSCDEX command which can be placed in AUTOEXEC.BAT:
+
+ MSCDEX /D:oemcd001 /L:D
+
+
+Due to some bugs found in eltorito.sys, the driver could fail to load. If you
+encounter such problems, then you may replace (hd32) with (0xFF) for the
+virtual cdrom drive number and try again.
+
+
+******************************************************************************
+*** The New Command CHECKRANGE ***
+******************************************************************************
+
+Checkrange checks whether or not the return value of a command is in the
+specified range or ranges.
+
+Usage: checkrange RANGE COMMAND
+
+Here are some examples for RANGE:
+
+ 3 is a range containing only the number 3
+ 3:3 is equivalent to 3
+ 3:8 is a range containing the numbers 3, 4, 5, 6, 7, 8
+ 3,4,5,6,7,8 is equivalent to 3:8
+ 3:5,6:8 is also equivalent to 3:8
+ 3,4:7,8 is also equivalent to 3:8
+
+Note: You should not insert spaces into a range.
+
+Here is an example showing where the checkrange can be used:
+
+ checkrange 0x05,0x0F,0x85 parttype (hd0,1) || hide (hd0,1)
+
+which means: if (hd0,1) is not an extended partition, then hide it.
+
+
+******************************************************************************
+*** The New Command TPM ***
+******************************************************************************
+
+The "tpm --init" uses 512-byte data at 0000:7C00 as buffer to initialise TPM.
+
+Before you boot VISTA's BOOTMGR, you might have to use the "tpm --init"
+command on some machines. Normally you want to issue the "tpm --init" command
+after a CHAINLOADER command.
+
+
+******************************************************************************
+*** Delimitors or comments between titles ***
+******************************************************************************
+
+It is possible to use titles as delimitors or comments. A title(or menu item)
+is called unbootable if all of its menu commands are not boot-sensitive.
+
+The following commands are boot-sensitive(and others are not boot-sensitive):
+
+ boot
+ bootp
+ chainloader
+ configfile
+ embed
+ commandline
+ halt
+ install
+ kernel
+ pxe
+ quit
+ reboot
+ setup
+
+An unbootable title will be skipped when the user presses the Up Arrow or Down
+Arrow keys. Even the unbootable menu item can get accessed(and executed) by
+using the Left Arrow and/or Right Arrow keys. Examples:
+
+ title This is an UNBOOTABLE entry(so this line is also a comment)
+ pause --wait=0 This title is a comment. Nothing to do.
+ pause --wait=0 You can use non-boot-sensitive commands here
+ pause --wait=0 of any kind and as many as you would like.
+ help
+ help root
+ help chainloader
+ help parttype
+ clear
+ title ------------------------------------------------------------
+ pause --wait=0 This title is a delimitor. Nothing to do.
+ pause --wait=0 You can use non-boot-sensitive commands here
+ pause --wait=0 of any kind and as many as you would like.
+ clear
+ help
+ help boot
+ title ============================================================
+ pause --wait=0 This title is a delimitor. Nothing to do.
+ pause --wait=0 You can use non-boot-sensitive commands here
+ pause --wait=0 of any kind and as many as you would like.
+ help
+ clear
+ help pause
+ title ************************************************************
+ pause --wait=0 This title is a delimitor. Nothing to do.
+ pause --wait=0 You can use non-boot-sensitive commands here
+ pause --wait=0 of any kind and as many as you would like.
+ help kernel
+ help
+ clear
+
+Note: An unbootable menu item must contain at least one command. If there
+are no commands for a title, the title will be simply discarded and disappear.
+
+
+******************************************************************************
+*** Bifurcate drives ***
+******************************************************************************
+
+Some machines apply different actions to a drive between CHS and LBA mode.
+When you read sectors using standard BIOS call int13/AH=02h, you might find
+out the drive is a floppy. But when you read sectors using extended BIOS
+call(EBIOS) int13/AH=42h, you could know the drive is a cdrom. Such a drive
+is called bifurcate.
+
+A bifurcate drive can have two drive numbers: one is the normal BIOS drive
+number between 00 and FF in hexa, and this drive uses only CHS mode disk
+access(standard BIOS int13/AH=02h); the other is the normal BIOS drive number
+(Bitwise) OR'ed by 0x100(i.e., 256 in decimal), and this drive uses only
+LBA mode disk access(EBIOS int13/AH=42h). For example, if the drive 0x00
+(i.e., the first floppy) is bifurcate, then the drive (0x00) uses CHS mode
+to access its sectors, and the drive (0x100) uses LBA (meaning EBIOS) mode
+to access its sectors.
+
+The geometry command can report the disk access mode for bifurcate drives as
+BIF instead of the conventional CHS or LBA.
+
+Known bifurcate drives. Virtual PC and some real machines are found to create
+a bifurcate floppy drive when they boot from a floppy-emulation mode bootable
+cdrom. The "geometry (fd0)" will show
+
+ drive 0x00(BIF): C/H/S=...Sector Count/Size=.../512
+
+and "geometry (0x100)" will show
+
+ drive 0x100(BIF): C/H/S=...Sector Count/Size=.../2048
+
+Actually (0x100) can access the whole cdrom, you may "ls (0x100)/" and find
+your files on the cdrom(not the files inside the booted floppy image). Of
+course "ls (fd0)/" will list the files inside the booted floppy image.
+
+Note that only some (real or virtual) machines have this action, others
+will not produce bifurcate drives.
+
+
+******************************************************************************
+*** GRLDR as PXE boot file ***
+******************************************************************************
+
+GRLDR can be used as the PXE boot file on a remote/network server. The (pd)
+device is used to access files on the server. When GRLDR is booted through
+network, it will use its preset menu as the config file. However, you may use
+a "pxe detect" command, which acts this way:
+
+ * First, it will search for the config file "menu.lst" in the same dir as
+ grldr.
+
+ * Second, it will search for the config file using the hardware type (using
+ its ARP type code) and address, all in hexadecimal with dash separators;
+ for example, for an Ethernet (ARP type 1) with address 88:99:AA:BB:CC:DD
+ it would search for the filename 01-88-99-AA-BB-CC-DD.
+
+ * Next, it will search for the config file using its own IP address in
+ upper case hexadecimal, e.g. 192.0.2.91 -> C000025B. If that file is not
+ found, it will remove one hex digit and try again. At last, it will try
+ looking for a file named default (in lower case). As an example, if the
+ boot file name is /mybootdir/grldr, the Ethernet MAC address is
+ 88:99:AA:BB:CC:DD and the IP address 192.0.2.91, it will try following
+ files (in that order):
+
+ /mybootdir/menu.lst
+ /mybootdir/menu/01-88-99-AA-BB-CC-DD
+ /mybootdir/menu/C000025B
+ /mybootdir/menu/C000025
+ /mybootdir/menu/C00002
+ /mybootdir/menu/C0000
+ /mybootdir/menu/C000
+ /mybootdir/menu/C00
+ /mybootdir/menu/C0
+ /mybootdir/menu/C
+ /mybootdir/menu/default
+
+You cannot directly map an image file on (pd). You must map it in memory using
+the --mem option. For example,
+
+ map --mem (pd)/images/floppy.img (fd0)
+ map --hook
+ chainloader (fd0)+1
+ rootnoverify (fd0)
+ boot
+
+One more example,
+
+ map --mem (pd)/images/cdimage.iso (0xff)
+ map --hook
+ chainloader (0xff)
+ boot
+
+
+******************************************************************************
+*** New program badgrub.exe ***
+******************************************************************************
+
+The new program badgrub.exe is intended to serve 'bad' machines(typically some
+DELL models) that cannot run the normal grub.exe.
+
+
+******************************************************************************
+*** Conditional find ***
+******************************************************************************
+
+The new find syntax allows to find a device conditionally.
+
+ find [OPTIONS] [FILENAME] [CONDITION]
+
+CONDITION is a normal grub command which returns TRUE or FALSE.
+
+OPTIONS:
+ --set-root set the current root device.
+ --set-root=DIR set current root device and working directory to DIR.
+ please also see "Notation For The Current Root Device".
+ --ignore-cd skip search on (cd).
+ --ignore-floppies bypass all floppies.
+ --devices=DEVLIST specify the search devices and order.
+ DEVLIST u->(ud)
+ n->(nd)
+ p->(pd)
+ h->(hdx)
+ c->(cd)
+ f->(fdx)
+ default: upnhcf
+
+ Example 1:
+
+ find
+
+ This will list all partitions, all floppies and the (cd).
+
+ Example 2:
+
+ find +1
+
+ This will list all devices with a known filesystem.
+
+ Example 3:
+
+ find checkrange 0xAF parttype
+
+ This will list all partitions with ID=0xAF.
+
+ Example 4:
+
+ find /ntldr checkrange 0x07 parttype
+
+ This will list all partitions with ID=0x07 and existing /ntldr.
+
+ Example 5:
+ find --set-root /ntldr
+ This will set the first device it finds to current root device.
+
+ Example 6:
+ find --set-root --devices=h /bootmgr
+ Same of Example 5.but search on hard disk only.
+
+ Example 7:
+ find --set-root --devices=h makeactive --status
+ This will set current root device to first active partition.
+
+******************************************************************************
+*** How to build grldr boot images ***
+******************************************************************************
+
+1. build 1.44M floppy image ext2grldr.img
+
+ dd if=/dev/zero of=ext2grldr.img bs=512 count=2880
+ mke2fs ext2grldr.img
+ mkdir ext2tmp
+ mount -o loop ext2grldr.img ext2tmp
+ cp default ext2tmp
+ cp menu.lst ext2tmp
+ cp grldr ext2tmp
+ umount ext2tmp
+ bootlace.com --floppy --chs --sectors-per-track=18 --heads=2 --start-sector=0 --total-sectors=2880 ext2grldr.img
+
+2. build 1.44M floppy image fat12grldr.img
+
+ dd if=/dev/zero of=fat12grldr.img bs=512 count=2880
+ mkdosfs fat12grldr.img
+ mkdir fat12tmp
+ mount -o loop fat12grldr.img fat12tmp
+ cp default fat12tmp
+ cp menu.lst fat12tmp
+ cp grldr fat12tmp
+ umount fat12tmp
+ bootlace.com --floppy --chs fat12grldr.img
+
+3. build iso9660 CDROM image grldr.iso
+
+ mkdir iso_root
+ cp grldr iso_root
+ cp menu.lst iso_root
+ mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root
+
+
+******************************************************************************
+*** Use bootlace.com to install partition boot record ***
+******************************************************************************
+
+Since bootlace.com has not implemented the --install-partition option, you
+need to use the already implemented --floppy=PartitionNumber option instead.
+
+Hear is a way you might want to follow:
+
+Step 1. Get the boot sectors of the partition and save to a file MYPART.TMP.
+ For NTFS, you need to get the beginning 16 sectors. For other type of
+ filesystems, you only need to get one sector, but getting more sectors
+ is also ok.
+
+Step 2. Run this:
+
+ bootlace.com --floppy=Y --sectors-per-track=S --heads=H --start-sector=B --total-sectors=C --vfat --ext2 --ntfs MYPART.TMP
+
+ where we suppose MYPART.TMP is for (hdX,Y) and the partition number Y
+ should be specified as in the --floppy=Y option.
+
+ Note that for FAT12/16/32/NTFS partitions, you can omit these options:
+
+ --sectors-per-track, --heads, --start-sector, --total-sectors,
+ --vfat and --ext2.
+
+ For NTFS partitions, you must specify --ntfs option.
+
+ For ext2 partitions, you can omit --vfat, --ntfs and --ext2 options,
+ but other options should be specified.
+
+Step 3. Put MYPART.TMP back on to the boot sector(s) of your original partition
+ (hdX,Y).
+
+
+Note: Only a few file systems(FAT12/16/32/NTFS/ext2/ext3) are supported by now.
+
+Note2: Under Linux you may directly write the partition. That is to say, Step
+ 1 and Step 3 are not needed. Simply use its device name instead of
+ MYPART.TMP.
+
+Note3: grubinst has the feature of installing grldr boot code onto a
+ partition boot area.
+
+******************************************************************************
+*** Use a single key to select menu item ***
+******************************************************************************
+
+Some machines have a simplified keyboard. The keyborad might have only the
+number keys 0 .. 9 plus a few other keys. When the menu displayed, the user
+can strike a key for 8 times. When the menu handler detects the continuous
+single keypress, it will assume the user want to use this key to select a menu
+item and boot. This single key will act as the RIGHT-ARROW key for the user to
+select a menu item. And 5 seconds later after the user stops the keypress,
+the selected menu item will automatically boot. Any normal keys can be used as
+a single key for this purpose, except for a few functional keys like b, e,
+Enter, etc. Once another key is pressed, the feature of Single-Key-Selection
+will disappear immediately.
+
+
+******************************************************************************
+*** Parameter file for bootlace running under DOS ***
+******************************************************************************
+
+You may move all or part of the command-line arguments into a file. The file
+can have multi lines. Just like SPACEs and TABs, the CRs and LFs can also
+delimit the commandline arguments in the parameter file.
+
+Example:
+
+ bootlace < my_parafile
+ bootlace --read-only my_mbr < my_other_options
+
+Note: Pipes do not work. You have to use the input-redirection operator(<).
+
+
+******************************************************************************
+*** Use bootlace to create a triple MBR ***
+******************************************************************************
+
+This is typically used for USB drives, though it also works with hard drives.
+
+Steps to create triple MBR:
+
+1. Do a fresh FDISK to create a FAT12/16/32 partition starting at sector 95
+(in LBA, that is, the begginning sector(MBR) is sector 0).
+
+2. Install grldr boot sector onto the boot sector of this partition. See
+section "Use bootlace.com to install partition boot record" above.
+
+3. Get 96 sectors of the drive starting at sector 0(MBR), and save to file
+MYMBR96.TMP.
+
+4. Run bootlace.com:
+
+ bootlace.com MYMBR96.TMP
+
+5. Put MYMBR96.TMP back onto the drive starting at MBR(sector 0).
+
+Note: If the drive already has a triple MBR, then bootlace will cancel it
+and restore the original partition layout.
+
+
+******************************************************************************
+*** Use 'pxe detect' in preset-menu ***
+******************************************************************************
+
+Now the "pxe" command has a new subcommand "detect":
+
+ pxe detect [BLOCK_SIZE] [MENU_FILE]
+
+BLOCK_SIZE specifies the block size for PXE. If it is not specified or it is
+0, then grub4dos will go through a probing process and get a proper value
+for data transfer.
+
+MENU_FILE specifies the config file on the PXE server. If omitted, a standard
+config file in the menu.lst sub-dir will gain control. For a description on
+the config files in the menu.lst sub-dir, please refer to the section
+"GRLDR as PXE boot file" above.
+If MENU_FILE starts in a "/", then the MENU_FILE on the PXE server will gain
+control, else(if MENU_FILE does not start in a "/") no menu will be executed.
+
+Normally you want to use a "pxe blksize ..." or a "pxe detect ..." command
+before you access the (pd) device, since the default blocksize of 512 might
+not work on your system.
+
+
+******************************************************************************
+*** Use 'configfile' in preset-menu ***
+******************************************************************************
+
+Now the preset menu holds the highest priority. It will gain control prior to
+the menu.lst on the boot device. If a 'configfile' command(without specifying
+any file as the parameter) occurs in the menu init command group of the preset
+menu, then control will go to the menu.lst on the boot device.
+
+Note: You should better not use "configfile ANOTHER_MENU" frequently in your
+menu.lst file, because it could create infinite loop and thus hang your
+computer.
+
+
+******************************************************************************
+*** New command 'dd' to copy files ***
+******************************************************************************
+
+Usage:
+
+dd if=IF of=OF [bs=BS] [count=C] [skip=IN] [seek=OUT] [buf=ADDR] [buflen=SIZE]
+
+Copy file IF to OF. BS is blocksize in bytes, default to 512. C is blocks to
+copy, default is total blocks in IF. IN specifies number of blocks to skip
+when read, default is 0. OUT specifies number of blocks to skip when write,
+default is 0. Skipped blocks are not touched. Both IF and OF must exist.
+
+Both IF and OF must have a leading device name, i.e., of the form `(...)'.
+You may use `()' for the current root device.
+
+dd can neither enlarge nor reduce the size of OF, the leftover tail of IF
+will be discarded. OF cannot be a gzipped file. If IF is a gzipped file,
+it will be decompressed automatically when copying.
+
+dd is dangerous, use at your own risk. To be on the safe side, you should
+only use dd to write a file in memory.
+
+In some cases when writing a file in a NTFS volume, dd might fail.
+
+If you attempt to write a device or a block file that is not in memory by
+starting dd in a menu, you will safely be refused :-) (Update: no restrictions
+now)
+
+Update: New options are implemented for user defined buffer. By default,
+the buffer is at address 0x50000, and length is 0x10000(=64KB). You cannot
+specify ADDR to be lower than 0x100000(=1MB). Besides, you must specify SIZE
+larger than 0x10000(=64KB). Normally you want ADDR >= 0x1000000(=16MB), and
+SIZE also >= 16MB. A large SIZE could speed up the progression of dd.
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
+!!!! Caution! Both IF and OF can be a device name which stands for !!!!
+!!!! all the sectors on the device. Take utmost care! !!!!
+!!!!______________________________________________________________________!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+
+******************************************************************************
+*** New command 'uuid' to identify partitions ***
+******************************************************************************
+
+Usage:
+
+ uuid [DEVICE] [UUID]
+
+If DEVICE is not specified, search for filesystem with UUID in all partitions
+and set the partition containing the filesystem as new root (if UUID is
+specified), or just list uuid's of all filesystems on all devices (if UUID is
+not specified). If DEVICE is specified, return true or false according to
+whether or not the DEVICE matches the specified UUID (if UUID is specified),
+or just list the uuid of DEVICE (if UUID is not specified).
+
+Example 1:
+
+ find --set-root uuid () 7f95820f-5e33-4e6c-8f50-0760bf06d79c
+
+which will find a partition with uuid=7f95820f-5e33-4e6c-8f50-0760bf06d79c
+and set the partition as root if found.
+
+Example 2:
+
+ uuid ()
+
+which will print the uuid of the current root device.
+
+
+******************************************************************************
+*** gfxmenu support in grub4dos ***
+******************************************************************************
+
+Gfxmenu support has been added to grub4dos. To use it, you must first find the
+message file you need, then load it in menu.lst with command like this:
+
+ gfxmenu /message
+
+This should be a gloabl command, that is, not inside any menu item. Also, it
+can only be used in configure file, running it in console mode does not work.
+
+gfxmenu does not work in conjunction with the password feature.
+
+There are two major format of message file. Old format is created with gfxboot
+3.2.* or older (size of message file is normally about 150K), while new format
+is created with gfxboot 3.3.* and later (size of message file is normally above
+300K). Both format are supported in grub4dos.
+
+
+******************************************************************************
+*** Use 'write' to write a string into a device or file ***
+******************************************************************************
+
+Usage:
+
+ write [--offset=SKIP] ADDR_OR_FILE INTEGER_OR_STRING
+
+SKIP is an integer and defaults to 0.
+
+If ADDR_OR_FILE is an integer, then it is treated as a memory address, and
+INTEGER_OR_STRING must be an integer value. The integer INTEGER_OR_STRING
+will be written to address (ADDR_OR_FILE + SKIP).
+
+If ADDR_OR_FILE is a device or a file, then INTEGER_OR_STRING is treated as
+a string which will be written to ADDR_OR_FILE at offset SKIP (in bytes).
+
+The string is quoted with nothing, that is, neither with the single quote
+char(') nor with the double quote char(").
+
+Space char must be quoted with back slash(\). (Update: need not now)
+
+Single quote char(') and double quote char(") are not interpreted specially
+and can be used directly in the string.
+
+Some C-style quote sequences are interpreted as follows:
+
+ \NNN character with octal value NNN (1 to 3 digits)
+
+ \\ backslash
+
+ \a alert (BEL)
+
+ \b backspace
+
+ \f form feed
+
+ \n new line
+
+ \r carriage return
+
+ \t horizontal tab
+
+ \v vertical tab
+
+ \xHH byte with hexadecimal value HH (1 to 2 digits)
+
+Just like dd, the write can neither enlarge nor reduce the size of the
+destination file, the leftover tail of the string will be discarded.
+The destination file cannot be a gzipped file.
+
+Again like dd, the write command is also dangerous, use at your own risk.
+And to be on the safe side, you should only write to memory files.
+
+In some cases when writing a file in a NTFS volume, the write might fail.
+
+If you attempt to write a device or a block file that is not in memory by
+using write in a menu, you will safely be refused :-) (Update: no restrictions
+now)
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
+!!!! Caution! The file to write can be a device name which stands !!!!
+!!!! for all the sectors on the device. Take utmost care! !!!!
+!!!!______________________________________________________________________!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+
+******************************************************************************
+*** Item-by-item help text for menu entries ***
+******************************************************************************
+
+
+The help message at the bottom of the screen will vary as you choose the menu.
+
+You may append your help text to the title line. The help text must begin
+with "\n", for example:
+
+ title This is the title\nThis is the help text.\nAnd this is the 2nd line of the help text.
+
+Some C-style quote sequences are interpreted as stated in the section above.
+
+
+******************************************************************************
+*** initrd can load multiple cpio files for Linux 2.6 kernels ***
+******************************************************************************
+
+Usage:
+
+ initrd FILE [FILE ...]
+
+Note 1: You should not load more than one oldstyle disk images in this way,
+because this is not supported by Linux kernel.
+
+Note 2: The FILEs should be specified in the same order as with syslinux.
+
+******************************************************************************
+*** access some internel variables at a fixed location ***
+******************************************************************************
+
+Address Length Description
+========= ======== ==============================================
+0000:8208 4 (DWORD) install_partition (the boot partition)
+0000:8280 4 (DWORD) boot_drive (the boot drive)
+0000:8284 4 (DWORD) pxe_yip (your ip)
+0000:8288 4 (DWORD) pxe_sip (server ip)
+0000:828C 4 (DWORD) pxe_gip (gateway ip)
+0000:8290 8 (QWORD) filesize (file size by last "cat --length=0")
+0000:8298 4 (DWORD) saved_mem_upper (extended memory size in KB)
+0000:829C 4 (DWORD) saved_partition (current root partition)
+0000:82A0 4 (DWORD) saved_drive (current root drive)
+0000:82A4 4 (DWORD) no_decompression (no auto gunzip)
+0000:82A8 8 (QWORD) part_start (start sector of last partition)
+0000:82B0 8 (QWORD) part_length (total sectors of last partition)
+
+Note 1: Filesize can be initialised/modified by using "cat --length=0 FILE".
+Note 2: You should not write these variables by hand(should read only).
+Note 3: You may use 1K at 6000:0000 for your own varibles(See note 4).
+Note 4: The read command now returns the integer value at the given address.
+Note 5: Grub4dos does not have the variable expansion feature. You can only
+ use integer variables. You need not declare them, but use the memory
+ address directly. Usually you want to use variables as a logical
+ value or in a command for conditional test, e.g., of this form:
+ "checkrange RANGE read ADDR"
+Note 6: no_decompression, saved_drive and saved_partition are writable.
+
+
+******************************************************************************
+*** possibility to run another menu.lst after gfxmenu ***
+******************************************************************************
+
+Notice the use of CONFIGFILE after GFXMENU in the following example:
+
+ # The menu.lst file for gfxmenu
+ default=0
+ timeout=5
+ gfxmenu /message
+ configfile /another.lst
+ title 0..........
+ ................
+ title 1..........
+ ................
+ title 2..........
+ ................
+ # End of menu.lst
+
+ # Begin another.lst
+ default=0
+ timeout=5
+ title 0..........
+ ................
+ title 1..........
+ ................
+ title 2..........
+ ................
+ # End of another.lst
+
+This will try gfxmenu command first. On exit(or on failure) control will go
+to another.lst file.
+
+
+******************************************************************************
+*** a range of drives can be unmapped ***
+******************************************************************************
+
+Usage:
+
+ map --unmap=RANGE
+
+RANGE is a range of BIOS drive numbers to be unmapped. BIOS drive number 0
+is for the first floppy, 1 is for the second floppy; 0x80 is for the first
+hard drive, 0x81 is for the second hard drive, etc; virtual cdrom (hd32)
+corresponds to BIOS drive number 0xA0, (hd33) corresponds to 0xA1, etc.
+
+For description on RANGE, please refer to section `The New Command CHECKRANGE'
+above.
+
+Example 1:
+
+ map --unmap=0,0x80,0xff
+
+This will unmap virtual floppy (fd0), virtual hard drive (hd0) and virtual
+cdrom (0xff).
+
+Example 2:
+
+ map --unmap=0:0xff
+
+This will unmap all virtual floppies, all virtual hard drives and all virtual
+cdroms.
+
+Note 1: Normally a `map' command will add an item in the drive map table for
+ a virtual drive. But `--unmap' means items in the drive map table
+ (for the specified virtual drives) will be deleted.
+Note 2: The --unhook option only breaks the INT13 hook(to the inerrupt
+ vector table). It will not affect the drive map table. And later on
+ execution of a `boot' command, the INT13 disk emulation routine will
+ automatically get hooked(to the interrupt vector table) when needed
+ (e.g., the drive map table is non-empty) even if it has been unhooked.
+Note 3: Usually you want to do a `map --rehook' after you have changed the
+ drive map table.
+
+
+******************************************************************************
+*** geometry tune and sync ***
+******************************************************************************
+
+When a USB storage device is connected to a (or another) machine, the geometry
+in the partition table or in the BPB of the volume could be invalid, and the
+machine could hang at boot time. So you need to find out the correct geometry
+for the drive (use `geometry --tune'), and then update the geometry in
+partition table and BPB of the drive(use `geometry --sync').
+
+The above steps are required if you are going to boot DOS, because DOS
+requires the right geometry in the partition table and BPB. Windows/Linux may
+also require it, since the boot process could run in real-mode.
+
+
+******************************************************************************
+*** Version numbering ***
+******************************************************************************
+
+Now we append a letter 'a', 'b', 'c' or 'p' to the version number(e.g., 0.4.5).
+So the version will become 0.4.5a, 0.4.5b, 0.4.5c, 0.4.5 or 0.4.5p.
+
+'a' - alpha test. unstable, especially when there are known bugs.
+'b' - beta test. the developers think it has no bugs and want a widely testing.
+'c' - release candidate.
+''(nothing) - official release.
+'p' - patched versions to the official release.
+
+
+******************************************************************************
+*** Running User Programs ***
+******************************************************************************
+
+From 0.4.5 on, user programs can be developed for running under grub4dos. The
+executable program file must end with the 8-byte grub4dos EXEC signature:
+
+ 0x05, 0x18, 0x05, 0x03, 0xBA, 0xA7, 0xBA, 0xBC
+
+The executable must have no relocations, and the entry point is at the very
+beginning of the file, just like a DOS .com file(but the grub4dos executable
+is 32-bit).
+
+Here is a sample file echo.c:
+
+/*================ begin echo.c ================*/
+
+/*
+ * compile:
+
+gcc -nostdlib -fno-zero-initialized-in-bss -fno-function-cse -fno-jump-tables -Wl,-N -fPIE echo.c
+
+ * disassemble: objdump -d a.out
+ * confirm no relocation: readelf -r a.out
+ * generate executable: objcopy -O binary a.out b.out
+ *
+ * and then the resultant b.out will be grub4dos executable.
+ */
+
+/*
+ * This is a simple ECHO command, running under grub4dos.
+ */
+
+int i = 0x66666666; /* this is needed, see the following comment. */
+
+/* gcc treat the following as data only if a global initialization like the
+ * above line occurs.
+ */
+
+/* a valid executable file for grub4dos must end with these 8 bytes */
+asm(".long 0x03051805");
+asm(".long 0xBCBAA7BA");
+/* thank goodness gcc will place the above 8 bytes at the end of the b.out
+ * file. Do not insert any other asm lines here.
+ */
+
+int
+main()
+{
+ void *p = &main;
+
+ return
+ /* the following line is calling the grub_sprintf function. */
+ ((int (*)(char *, const char *, ...))((*(int **)0x8300)[0]))
+ /* the following line includes arguments passed to grub_sprintf. */
+ (0, p - (*(int *)(p - 8)));
+}
+
+/*================ end echo.c ================*/
+
+0x8300 is a pointer to the grub4dos system funtions(API). The system_functions
+variable is defined in asm.S.
+
+More function can use in user programs:
+ http://grubutils.googlecode.com/svn/trunk/src/include/grub4dos.h
+note: After 2010-11-16 version of grub4dos,you can use like below.
+/////////////////echo.c start///////////////////////////////////////////////
+#define sprintf ((int (*)(char *, const char *, ...))((*(int **)0x8300)[0]))
+
+#define printf(...) sprintf(NULL, __VA_ARGS__)
+int i = 0x66666666;
+asm(".long 0x03051805");
+asm(".long 0xBCBAA7BA");
+int main(char *arg,int flags)
+{
+
+ return printf("%s\n",arg);
+}
+/////////////////echo.c end/////////////////////////////////////////////////
+
+******************************************************************************
+*** Map options added by Karyonix ***
+******************************************************************************
+
+(from boot-land.net) Karyonix's note:
+
+map --add-mbt= option to be used with --mem. If =0 master boot track will not
+ be added automatically.
+map --top option to be used with --mem. map --mem will try to allocate memory
+ at highest available address.
+map --mem-max=, map --mem-min options to be used before map --mem. Allow user
+ to manually limit range of address that map --mem can use.
+
+safe_parse_maxint_with_suffix function parses K,M,G,T suffix after number.
+
+
+******************************************************************************
+*** Graphics mode 6A: 800x600 with 16 colors ***
+******************************************************************************
+
+Graphics mode now has 2 possibilities, one is the default 640x480 mode, and the
+other is 800x600 mode.
+
+To enter 800x600 mode, follow this way:
+
+1. Be sure you are in console text mode. You may execute "terminal console".
+2. Set graphics mode to 0x6A by using command "graphicsmode 0x6A".
+3. Enter graphics mode. You may execute command "terminal graphics".
+
+To return to 640x480 mode, follow this way:
+
+1. Be sure you are in console text mode. You may execute "terminal console".
+2. Set graphics mode to 0x12 by using command: "graphicsmode 0x12".
+3. Enter graphics mode. You may execute command "terminal graphics".
+
+******************************************************************************
+***** GRUB4DOS variable support *****
+******************************************************************************
+
+From now we supports variables, the same usage of MSDOS.
+
+commands:
+ set [/p] [/a|/A] [/l|/u] [VARIABLE=[STRING]]
+ variable specifies the variable name (up to 8 characters).
+ string Specifies a string assigned to the variable (up to 512 characters.)
+
+SET command without parameters will display the current variables.
+
+with "=",if the string is empty.
+ set myvar=
+Will delete the variable myvar
+
+Show the name has been used for all variable. For example:
+ set ex_
+Will display all variables beginning with ex_, returns 0 if no match.
+
+Note: 1. the same of MSDOS.
+ a full line of command will be conducted before the implementation of variable substitution.
+ 2. Variable names must beginning with letter or "_".
+ Otherwise you will not be able to access your variables.
+ 3. See the previous description for length limit.
+ 3. To reset all used variable enter command "set *"
+
+the new command if
+ if [/I] [NOT] STRING1==STRING2 [COMMAND]
+ if [NOT] exist VARIABLE|FILENAME [COMMAND]
+
+ STRING1==STRING2
+ Specifies a true condition if the specified text strings match.
+ COMMAND
+ Specifies the command to carry out if the condition is met.
+ /I
+ if specified, says to do case insensitive string compares.
+ NOT
+ Specifies that should carry out the command only if the condition is false.
+
+Example:
+ 1. To determine whether strings are equal, and not case sensitive.
+ if /i test==%myvar% echo this is a test
+ 2. To determine the character is empty.
+ if %myvar%#==# echo variable myvar not defined.
+Usage example:
+ 1. Displays a string including the variable.
+ echo myvar=%myvar%
+ 2. Using a variable instead of command.
+ set print = echo
+ %print% This a test.
+ 3. You can use a "^" to stop extended, example
+ echo %myvar^%
+ Or
+ echo %my^var%
+ Will be displayed %myvar% rather than the extended character after myvar.
+Note: We only deal the ^ between the symbols %%.
+
+******************************************************************************
+***** GRUB4DOS batch scripting support *****
+******************************************************************************
+
+The new version supports running a batch script,It very like MS-DOS batch.
+Yes!you needn't to learn a new language.
+
+Example of a simple script:
+ ========= GRUB4DOS BATCH SCRIPT START ===============================
+ !BAT #Note: The file header !BAT is necessary to identify this is a batch
+ echo %0
+ echo Your type:%1 %2 %3 %4 %5 %6 %7 %8 %9
+ call :Label1 This is a test string
+ goto :label2
+ :Label1
+ echo %1 %2 %3 %4 %5 %6 %7 %8 %9
+ goto :eof
+ :Label2
+ echo end of batch script.
+ ========= GRUB4DOS BATCH SCRIPT END ===============================
+
+Some differences:
+ 1. Batch will stop when an error occurs.
+ 2. Use command "exit 1",if you need to stop a running batch script.
+ 3. %9 refers to all the remaining parameters.
+ 5. extensions
+ %~d0 expands %0 to a drive letter.e.g: (hd0,0) ,()
+ %~p0 expands %0 to a path only
+ %~n0 expands %0 to a file name only
+ %~x0 expands %0 to a file extension only
+ %~f0 expands %0 to a fully qualified path name
+ %~z0 expands %0 to size of file
+ 6.You can find some script in below site.
+ http://chenall.net/post/tag/grub4dos/
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/README_GRUB4DOS_CN.txt b/client/shared/lib/grub4dos/grub4dos-0.4.5b/README_GRUB4DOS_CN.txt
new file mode 100644
index 00000000..33bcf43e
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/README_GRUB4DOS_CN.txt
@@ -0,0 +1,4314 @@
+本文档来源:http://bbs.znpc.net/viewthread.php?tid=5587
+感谢zw2312914提供
+原版是中英文对照的版本,这里已经经过删改。
+需要看原版的可以从上面的贴子下载.
+
+一些旧的网址已经删除,只保留目前在用的.
+
+注:本文仅供参考,可能有一些更新没有在这里说明.如果有发现错误可以到论坛发贴或email联系我(grub4dos@chenall.net)
+
+其它命令用法请参考
+ http://grub4dos.sourceforge.net/wiki/ 处的 GRUB4DOS 有关文档。
+
+外部命令的用法请参考
+ http://chenall.net/post/tag/grub4dos/
+
+项目主页
+ http://code.google.com/p/grub4dos-chenall/
+
+下载网址:
+ http://code.google.com/p/grub4dos-chenall/downloads/list
+ http://nufans.net/grub4dos/
+
+工具和外部命令:
+ http://code.google.com/p/grubutils/downloads/list
+
+通过匿名 svn 服务器获取最新源代码的方法:
+
+ svn co http://grub4dos-chenall.googlecode.com/svn/trunk/ grub4dos
+
+通过你的 web 浏览器在线查看源代码:
+ http://code.google.com/p/grub4dos-chenall/source/browse/
+
+GRUB4DOS 邮件列表(未用):
+ grub4dos-devel@gna.org
+
+订阅页面:
+ https://mail.gna.org/listinfo/grub4dos-devel/
+
+论坛(官方技术支持站点):
+ http://bbs.znpc.net/forumdisplay.php?fid=4
+ http://reboot.pro/forum/66/
+
+---------------------近期更新记录-----------------------------------------------
+最新更新记录请查看,ChangeLog_chenall.txt
+2011-01-03
+ 添加了GRUB4DOS的变量用法及相关介绍。
+
+2011-01-02
+ 1.为了方便pause命令添加--test-key参数,显示按键扫描码.
+
+
+2010-12-31 更新:
+ 1.pause命令增强,增加了显示按键扫描码的功能。需要debug 为-1.
+ 例子:显示一个按键扫描码
+ debug -1 && pause && debug 1
+ 注:此功能已为被参数--test-key代替。
+
+ 2.hiddenmenu命令增强。增加一个--chkpass参数
+ 功能: 在隐藏菜单的时候按Esc键要输入正确的密码才可以显示菜单。
+ 注意: 1.该功能启用之后,如果按了其它按键则直接启动默认菜单。
+ 默认的Esc按键可以自由设置。使用--chkpass=KEY
+ 2.菜单初始化有password命令时才需要输入密码。
+ 3.按键代码如果不清楚可以使用上面的功能来获取。
+ 例子: hiddenmenu --chkpass=0x8500 按F11键才可以显示菜单。
+ hiddenmenu --chkpass 按Esc键才可以显示菜单。
+ hiddenmenu --chkpass=0x2200 按Alt+G显示菜单。
+
+------------------------------------------------------------------------------
+GRUB.EXE 用法:
+ GRUB [--bypass] [--time-out=T] [--hot-key=K] [--config-file=FILE]
+ 旁路 暂停时间 热键 配置文件
+
+ 这里的 FILE ,例如,可以是 (hd0,0)/menu.lst
+
+ 在 CONFIG.SYS 中,其配置行类似于:
+
+ install=c:\some\where\grub.exe --config-file=FILE
+
+ 如果没有使用选项,GRUB.EXE简单的使用(hd0,0)/menu.lst
+ 来作为配置文件,只要它存在的话。(注意!我们最终将默认的配
+ 置文件从 (hd0,0)/boot/grub/menu.lst 变更为 (hd0,0)/menu.lst)
+ (更新于2006-12-23。参见更新3)
+
+ 这里的分区(hd0,0)可以是一个Windows分区或者是一个linux分区,
+ 或者是被 GRUB 支持的其他任意分区。
+
+
+ 这里的FILE只接受GRUB风格的文件名。DOS风格的文件名不被调用
+ (很明显,我们应该使用GRUB风格的文件名,原因是比如在Linux
+ ext2分区中不能使用DOS风格的文件名来访问文件 )。
+ (参见更新2)
+
+ 更新:FILE 可以是菜单的内容。使用分号来分隔嵌入 FILE 中的命
+ 令。FILE 可以被一对双引号括起来,示例:
+
+ GRUB --config-file="root (hd0,0);chainloader +1"
+ 这条命令将启动(hd0,0)上的系统。
+
+ 另一个例子:
+ GRUB --config-file="reboot"
+ 这条命令将令机器重启。
+
+ 再例如:
+ GRUB --config-file="halt"
+ 这条命令将令机器关闭。
+
+ 如果选项--bypass 被指定,GRUB将在暂停时间截止后从DOS退出。
+ 选项'--time-out=T' 指定了以秒计时的暂停值。如果指定了--bypass
+ 则T的默认值为5 ,而--bypass选项没有被指定时默认值为0 。
+
+ 默认的热键值是 0x3920 (即空格键)。如果此键被按下,GRUB将正常
+ 启动。如果其他键被按下,GRUB 将立即终止并返回到DOS。参见下面
+ 的“int16 键盘扫描码”
+
+ 每个选项最多只能被指定一次。
+
+ 更新 2:DOS风格的文件名已经被支持(由John Cobb先生提供此补丁)。
+ 如果 FILE 的起始两个字符是“ #@ ”,那么 FILE 中其余的部分将被视
+ 为一个DOS风格的文件名。例如:
+
+ GRUB --config-file="#@c:\menu.lst"
+
+ DOS风格的文件只有起始的4kB被使用。此文件应当是一个未被压缩的文
+ 本文件。
+
+ 注意:你也可以在SHELL或者在CONFIG.SYS的INSTALL配置行使用‘DOS
+ 风格文件直接访问’。但不要在DEVICE 配置行使用它。DOS文档中表述
+ 了DOS设备驱动不能使用'打开文件'的DOS调用。
+
+
+ 更新 3(2006-12-23): 作为默认,GRUB.EXE将按以下顺序查找它的配置文件:
+
+ (DOS风格文件) .\menu.lst, 当前目录下的MENU.LST。
+ (DOS风格文件) \menu.lst, 当前驱动器根目录下的MENU.LST
+ (GRUB风格文件) /menu.lst, 启动设备根目录下的MENU.LST
+
+ 默认的启动设备还是(hd0,0)。
+
+
+--------------------------------------------------------
+
+更新 1 : 版本0.2.0 同时带来一个新的东西。GRUB for NTLDR ,它能够从
+ Windows NT/2000/XP的启动菜单启动到GRUB。复制GRLDR到Windows
+ NT/2000/XP的C盘根目录,并在C:\BOOT.INI中加入这样一行:
+
+ C:\GRLDR="Start GRUB"
+
+ 这样就完成了安装。GRLDR应该与 BOOT.INI及NTLDR 位于相同的目录。
+ 注意 BOOT.INI 通常是隐藏的因而你要看见它必须取消隐藏。如果GRLDR
+ 在一个NTFS分区,应该将它复制到一个非NTFS分区的根目录(并且menu.lst
+ 文件应当同样这样做)。假如GRLDR被压缩了,比如在NTFS分区中对它启
+ 用了压缩的情况下,它将不能运行。
+
+ 即使这个磁盘的驱动器号已经被Windows设备管理器改变为另外的不同
+ 于 C 的盘号 ,你仍然需要在 BOOT.INI 中使用盘符 C ,否则,NTLDR
+ 将查找不到 GRLDR 文件。
+
+ 也就表示,如果你从一个软盘上启动NTLDR,你也需要把A:\BOOT.INI
+ 中的 GRLDR 的所在行这样写:
+
+ C:\GRLDR="Start GRUB"
+
+ 而不能象下面这样使用盘符 A :
+
+ A:\GRLDR="Start GRUB"
+
+ (注意在 BOOT.INI 位于软盘 A 的这个例子中,标记“C:\GRLDR”
+ 实际将访问 A:\GRLDR )
+
+
+更新 2: GRUB for linux 也一起被引入到版本0.2.0。
+ 你可以使用使用linux的引导程序 KEXEC,LILO,SYSLINUX 或者别的
+ GRUB来启动它。(GRUB4LIN 已经合并到 GRUB.EXE 中)
+
+ 从Linux中直接启动到GRUB ,使用这样一组命令:
+
+ kexec -l grub.exe
+ kexec -e
+
+ 经由GRUB启动到GRUB,使用如下的命令:
+
+ kernel (hd0,0)/grub.exe
+ boot
+
+ 经由LILO启动到GRUB,在lilo.conf中加入这样几行:
+
+ image=/boot/grub.exe
+ label=grub.exe
+
+ 经由syslinux启动到GRUB,在syslinux.cfg中加入这样几行:
+
+ label grub.exe
+ kernel grub.exe
+
+ LOADLIN在引导GRUB.EXE时可能会遇到问题,原因是grub.exe需要一些
+ 未更改的原始的BIOS中断向量,但是DOS破坏了这些中断向量,而loadlin
+ 在将控制权交给grub.exe前并没有恢复它们。
+
+
+更新 3: 从版本0.4.0开始,DOS下的GRUB支持内存驱动器。示例:
+
+ # boot into a floppy image
+ map --mem (hd0,0)/floppy.img (fd0)
+ map --hook
+ chainloader (fd0)+1
+ rootnoverify (fd0)
+ map --floppies=1
+ boot
+
+ 由于镜像将被拷贝到一个内存区域,所以镜像本身可以是非连续的,
+ 甚至可以是被gzip压缩过的。
+
+ 另一个例子:
+ map --mem=-2880 (hd0,0)/floppy.img (fd0)
+
+ 这个内存驱动器(fd0)将占用至少1440 KB的内存。
+ 这也对那些小于1440 KB的1.44M 软盘镜像有用。
+
+ 再例如:
+ map --mem --read-only (hd0,0)/hd.img (hd1)
+
+ 这个内存驱动器成为了一个硬盘驱动器,并且只读。
+ 这表示你不能向这个(hd1)中写入数据。
+
+ 你可以同时使用多个内存驱动器和多个原来的基于磁盘虚拟的仿真驱动器。
+
+ 如果BIOS不支持中断int15/EAX=e820h,你将不能使用任何内存驱动器。
+
+更新 4: 对于内存驱动器仿真,一个单一的分区镜像可以被转换为整个硬盘镜像来
+
+
+ map --mem (hd0,7)/win98.img (hd0)
+ map --hook
+ chainloader (hd0)+1
+ rootnoverify (hd0)
+ map --harddrives=1
+ boot
+
+ 这里的win98.img是一个头部不含主引导记录和分区表的分区镜像。
+ GRUB for DOS 确实会为这个内存驱动器(hd0)建立一个MBR和分区表。
+
+更新 5: 现在GRLDR可以作为一个非模拟模式的可启动光盘的启动映像文件来使
+ 用。Linux用户使用示例:
+
+ mkdir iso_root
+ cp grldr iso_root
+ mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o bootable.iso iso_root
+
+ 另一种选择是,grldr也可以用同样的方法作为stage2_eltorito来使用。
+ -boot-info-table选项是被允许使用的,但你可以省略它:
+
+ mkdir iso_root
+ cp grldr iso_root
+ mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root
+
+ 也要注意上面的可启动iso镜像是使用-boot-load-seg 0xHHHH选项来建立的话,
+ 就必须令HHHH大于或者等于1000(十六进制)
+ 如果HHHH小于1000(十六进制),虚拟机 QEMU 会死机。这是QEMU的一个缺陷。一
+ 个grldr.iso镜像可以使用也可以不使用-boot-load-seg 0xHHHH选项来创建。
+
+ menu.lst文件应该被放置在光盘的根目录。
+
+更新 6: 中文专用版被建立在"chinese"子目录中。
+ ( 由Gandalf先生提供此补丁,2005-06-27)
+
+ 中文专用版同时内附了scdrom 功能。
+ (更新:scdrom 从2006-07-20起已被删除)
+
+更新 7: 增加了内存驱动器(md) 。就像(nd)代表网络驱动器 (cd) 代表光驱一样,
+ 新的驱动器(md)实现了将整个内存作为一个磁盘驱动器来访问。
+ (md)只工作在支持BIOS中断int15/EAX=E820h的系统上。
+
+ 现在,cat命令已经有了一个十六进制转储的新选项:--hex
+ 以及通过--locate=STRING 在文件中找查找字符串。
+
+ 典型示例:
+
+ cat --hex (hd0)+1
+
+ 这将用十六进制的表格显示 MBR 扇区。
+
+ cat --hex (md)+2
+
+ 这将显示你内存起始处的1 KB内容(实际,这就是实模式的IDT表),也是
+ 使用十六进制的转储表。
+
+ cat --hex (md)0x800+1
+
+ 这将显示你的扩展内存的第一个扇区。
+
+ cat --hex (hd0,0)+1
+ 这将显示(hd0,0)分区的第一扇区。通常这个扇区包含操作系统的引导记录。
+
+更新 8: 增加了随机存贮驱动器 (rd) 。(md) 设备访问内存是从物理地址 0
+ 开始,而 (rd) 可以访问起始于任何基地址的内存。随机存贮器的基
+ 址与长度可以通过 map 命令指定。详情请使用 "help map" 命令。
+ 你甚至能够为(rd)驱动器指定一个BIOS驱动器号。比如:
+ map --ram-drive=0xf0。默认的 (rd) 驱动器号是使用0x7F的软驱号。
+ 如果 (rd) 是硬盘驱动器镜像,你应该用大于或等于0x80的值来改变
+ 它的驱动器号。(但应防止使用0xffff,因为0xffff是预留给(md)设
+ 备的。)
+
+ (rd)+1这个标志始终代表文件,它包含存储在(rd)中的所有字节。
+
+更新 9: 直接启动 WinNT/2K/XP 的 NTLDR 和 Win9x/ME 的 IO.SYS, 以及
+ FreeDOS 的 KERNEL.SYS. 例如:
+
+ chainloader --edx=0xPPYY (hd0,0)/ntldr
+ boot
+
+ chainloader --edx=0xYY (hd0,0)/io.sys
+ boot
+
+ chainloader --ebx=0xYY (hd0,0)/kernel.sys
+ boot
+
+ 十六进制的YY 指定了启动驱动器号,十六进制的PP指定了 NTLDR 的
+ 启动分区号。如果启动驱动器是软驱,PP应该是一个十六进制的值ff,
+ 即十进制的255.
+
+ 对于 Freedos 的 KERNEL.SYS , 选项--edx不能执行,请使用--ebx 。
+
+ 当文件位于它们平常的位置时,选项 --edx (--ebx)可以省略。但某些
+ 情况下,这些选项是必需的。
+ 例如,假设被调用的ntldr文件在ext2分区(hd2,8)中,而你又希望它认
+ 为(hd0,7)的 windows 分区是启动分区,那么--edx就是必需的:
+
+ chainloader --edx=0x0780 (hd2,8)/ntldr
+
+ 对于DOS核心(即,IO.SYS和KERNEL.SYS),启动分区号是没有意义的,
+ 因此你只需指定恰当的启动驱动器号YY(不过指定了启动分区号也是
+ 无害的)。
+
+ 上面的PPYY也可以在chainloader命令之后通过root和rootnoverify命
+ 令来指定。例如:
+
+ chainloader (hd2,6)/kernel.sys
+ rootnoverify (hd0) <-------- YY=80
+ boot
+
+ chainloader (hd0,0)/ntldr
+ rootnoverify (hd0,5) <-------- YY=80, PP=05
+ boot
+
+ 提示:CMLDR (the ComMan LoaDeR,它被用于加载Windows的故障
+ 恢复控制台)可以像NTLDR一样被良好的加载。
+
+ Bean 成功地解压和启动了WinME的IO.SYS,感谢这个出色的工作。
+
+更新 10: isolinux.bin (版本 3.73) 可以被自2009-02-09 起建立的版本加载。
+
+ chainloader (cd)/isolinux.bin
+
+ isolinux.bin必须是存在于在真实或虚拟的光驱之中的。
+
+更新 11: Grub 传统版的 stage2 文件可以通过下面的方法加载:
+
+ chainloader --force --load-segment=0 --load-offset=0x8000 --boot-cs=0 --boot-ip=0x8200 (...)/.../stage2
+
+--------------------------------------------------------
+这里用一些示例来演示磁盘仿真命令的用法:
+
+1. 仿真硬盘分区C:为软驱A:并从C:中启动win98:
+
+ map --read-only (hd0,0)+1 (fd0)
+ chainloader (hd0,0)+1
+ rootnoverify (hd0)
+ boot
+
+ 在上面的示例中,(hd0,0)是一个装有win98的C:盘 。当win98启动完成后,你会发
+ 现A:中包含了C:的所有文件,而且如果你删除A:中的文件,C:上的相应文件也会消
+ 失。
+
+ 在map命令行中,(hdm,n)+1式的写法被解释成代表整个(hdm,n)分区,而不仅仅是
+ 此分区的第一扇区。
+
+2. 将硬盘分区C:仿真为软驱A:并从A:中启动win98:
+
+ map --read-only (hd0,0)+1 (fd0)
+ map --hook
+ chainloader (fd0)+1
+ rootnoverify (fd0)
+ map --floppies=1
+ boot
+
+ 在“map --hook”命令之后,仿真立即生效,即使是在GRUB的命令行模式中。
+
+ Note that the (fd0) in "chainloader (fd0)+1" is the emulated virtual
+ floppy A:, not the real floppy diskette(because map is hooked now).
+ 注意“chainloader (fd0)+1” 中的(fd0)是仿真后的虚拟软驱 A:,而不是真
+ 实的软盘(因为映射现在已经被挂载了)。
+
+
+3. 仿真镜像文件为软驱A:并从C:盘中启动win98:
+
+ map --read-only (hd0,0)/floppy.img (fd0)
+ chainloader (hd0,0)+1
+ rootnoverify (hd0)
+ map --floppies=1
+ map --harddrives=1
+ boot
+
+4. 仿真硬盘分区为第一硬盘并从中启动DOS:
+
+ map --read-only (hd2,6)+1 (hd0)
+ map --hook
+ chainloader (hd0,0)+1
+ rootnoverify (hd0)
+ map --harddrives=1
+ boot
+
+ 在这个示例中,(hd2,6)+1代表BIOS序号为3的(hd2)硬盘中的,扩展的DOS逻辑分区。
+
+ 如果一个DOS分区被仿真为一个硬盘,GRUB for DOS将首先定位分区表,通常,
+ 是在DOS分区的开头63个扇区中。如果那里没有分区表,GRUB for DOS将拒绝仿真。
+
+5. 仿真一个镜像文件为第一硬盘然后从中启动DOS:
+
+ map --read-only (hd0,0)/harddisk.img (hd0)
+ chainloader --load-length=512 (hd0,0)/harddisk.img
+ rootnoverify (hd0)
+ map --harddrives=1
+ boot
+
+ 如果一个镜像文件被仿真为硬盘,此镜像文件必须包含MBR。也就是说,
+ HARDDISK.IMG的第一扇区必须包含被仿真的虚拟硬盘的分区表。
+
+注意: BIOS数据区中的软盘和硬盘的总数在映射期间没有被改变。当主板上没有配置真
+ 实的软驱时,你通常应该专门使用诸如‘map --floppioes=’以及
+ map --harddrives=’来设置它们。如果不这样做,DOS可能会启动失败。
+
+ ‘map --status’可以报告出一些有价值的东西。同时要注意‘map --floppies=’
+ 和‘map --harddrives=’需要在没有执行映射前单独使用。
+
+ 版本0.4.2引入了一个新参数,memdisk_raw,用以模拟和内存驱动器类似的原生模式。
+ 如果BIOS不支持中断int15/87h,或者int18/87h的支持有缺陷,你应该在任何内
+ 存盘被使用前设置这个变量。这里是一个示例:
+
+ map --memdisk-raw=1
+ map --mem (hd0,0)/floppy.img (fd0)
+ map --hook
+ chainloader (fd0)+1
+ rootnoverify (fd0)
+ boot
+
+ 如果你碰到内存驱动器故障而又没有使用map --memdisk-raw=1时,你应当用
+ ‘map --memdisk-raw=1’来尝试一次。
+
+ 你一执行‘map --memdisk-raw=0’之后,就应该执行一次‘map --unhook’
+ (如果需要的话在这之后再执行‘map --hook’)。
+
+ 更新:memdisk_raw 现在默认值为1 。如果你希望使用中断int15/87h来访问内存
+ 驱动器,你应当令‘map --memdisk-raw=0 ’。
+
+--------------------------------------------------------
+
+ 任意大小的软盘或硬盘可以被 GRUB for DOS 0.2.0 版仿真。
+ 镜像文件必须是连续的,否则GRUB for DOS 将拒绝执行。
+ ‘blocklist’命令可以列举一个文件的碎片或者分块。
+ 在GRUB提示符下输入“help map”可以获得简要的命令说明。
+
+ 这样的形式
+ map ... (fd?)
+ 是一个软盘仿真,而下面的形式
+ map ... (hd?)
+ 是一个硬盘仿真。
+
+ 使用硬盘仿真时,基于安全因素最好不要去启动Windows 。
+ Windows甚至可能会破坏掉所有的数据和你硬盘上的所有资料!!!!!!!!
+
+ 关于--mem的更新 :当使用--mem时,甚至是在进入Windows的时候,它看
+ 来都相当安全。Win98可以正常运行内存驱动器。
+ Windows NT/2000/XP不能识别仿真的驱动器,不管是否使用了--mem选项。
+
+******************************************************************************
+*** grldr可启动的软盘或硬盘分区的说明 ***
+******************************************************************************
+1. Ext2 引导扇区/引导记录的布局 (用于载入grldr)
+
+------------------------------------------------------------------------------
+一个EXT2/EXT3的卷可以是GRUB可启动的。复制grldr和可选的menu.lst文件到这个EXT2/EXT3
+卷的根目录,并按照grldr的第五扇区建立它的引导扇区(一些需要更改的字段在下面的表
+中做了详细注释)。那么,这个EXT2/EXT3的卷就是GRUB可启动的。
+
+更新: bootlace.com是一个dos/linux下的工具,它可以把GRLDR的引导记录安装到一个
+ EXT2/EXT3卷的第一扇区。
+
+偏移 长度 说明
+====== ====== ==============================================================
+00h 2 Machine code for short jump over the data.
+ 近转移指令的机器码
+
+02h 1 LBA indicator. Valid values are 0x02 for CHS mode, or 0x42 for
+ LBA mode.
+ LBA指示码。CHS模式时,有效值是0x02;LBA模式时有效值为0x42。
+
+ If the BIOS int13 supports LBA, this byte can be safely set to
+ 0x42.
+ 如果BIOS的int13支持LBA,此字节可以安全地设置为0x42。
+
+ Some USB BIOSes might have bugs when using CHS mode, so the
+ format program should set this byte to 0x42. It seems that
+ (generally) all USB BIOSes have LBA support.
+ 某些 USB 设备的BIOS在使用CHS寻址模式时可能有缺陷,所以格式化程
+ 序应当设置这个字节为0X42 。似乎所有(多数)的USB BIOS都能支持LBA 。
+
+ If the format program does not know whether the BIOS has LBA
+ support, it may operate this way:
+ 如果格式化程序不知道BIOS是否具有LBA支持,它可以采用以下方法:
+
+ if (partition_start + total_sectors_in_partition) exceeds the
+ CHS addressing ability(especially when it is greater than
+ 1024*256*63), the caller should set this byte to 0x42,
+ otherwise, set to 0x02.
+ 如果(分区的起始地址加上分区的总扇区)超过了CHS的寻址能力。
+ (特别是当它大于1024*256*63时),调用程序应当设置此字节为0x42,
+ 否则,要设为0x02。
+
+ Note that Windows98 uses the value 0x0e as the LBA indicator.
+ 注意 Windows98 使用0x0e作为LBA指示码。
+
+ Update: this byte of LBA indicator is ignored. The boot
+ record can probe the LBA support of BIOS.
+ 更新:LBA指示码这个字节已被忽略。引导记录能够探测BIOS的LBA支持。
+
+03h 10 OEM name string (of OS which formatted the disk).
+ Update: this field is now used for error message of "I/O error"
+ OEM 名称字符串(对该磁盘进行格式化的操作系统的名字)。
+ 更新:此字段现在被用于错误提示信息“I/O error”
+
+0Dh 1 Sectors per block. Valid values are 2, 4, 8, 16 and 32.
+ 每块扇区数。有效值是2, 4, 8, 16 和 32。
+
+0Eh 2 Bytes per block. Valid values are 0x400, 0x800, 0x1000, 0x2000
+ and 0x4000.
+ 每块字节数。有效值是0x400, 0x800, 0x1000, 0x2000 和 0x4000。
+
+10h 4 Pointers in pointers-per-block blocks, that is, number of
+ blocks covered by a double-indirect block.
+ 在pointers-per-block块中的指针数,即一个二级间接块包含的块数。
+
+ Valid values are 0x10000, 0x40000, 0x100000, 0x400000 and
+ 0x1000000.
+ 有效值是0x10000, 0x40000, 0x100000, 0x400000 和 0x1000000。
+
+14h 4 Pointers per block, that is, number of blocks covered by an
+ indirect block.
+ 每块指针数,即一个间接块包含的块数。
+
+ Valid values are 0x100, 0x200, 0x400, 0x800, 0x1000.
+ 有效值是0x100, 0x200, 0x400, 0x800, 0x1000 。
+
+18h 2 Sectors per track.
+ 每磁道的扇区数。
+
+1Ah 2 Number of heads/sides.
+ 磁头数/面数
+
+1Ch 4 Number of hidden sectors (those preceding the boot sector).
+ 隐藏扇区数(它们位于引导扇区之前)
+
+ Also referred to as the starting sector of the partition.
+ 也被成为是分区的起始扇区。
+
+ For floppies, it should be 0.
+ 对于软盘,它应当为0 。
+
+20h 4 Total number of sectors in the filesystem(or in the partition).
+ 文件系统中的扇区总数(或者是分区的扇区总数)。
+
+24h 1 BIOS drive number of the boot device.
+ 启动设备的 BIOS 驱动器号码。
+
+ Actually this byte is ignored for read. The boot code will
+ write DL onto this byte. The BIOS or the caller should set
+ drive number in DL.
+ 实际此字节在读入时被忽略。引导代码将把DL的值写入到此字节中。
+ BIOS或者调用程序应当在DL中设置磁盘号码。
+
+ We assume all BIOSes pass correct drive number in DL.
+ Buggy BIOSes are not supported!!
+ 我们假定所有的BIOS在DL中能传递正确的磁盘号码。
+ 糟糕的BIOS不被支持!!
+
+25h 1 Partition number of this partition on the boot drive.
+ 此分区在启动驱动器上的分区号
+
+ 0, 1, 2, 3 are primary partitions.
+ 4, 5, 6, ... are logical partitions in the extended partition.
+ 0, 1, 2, 3 是主分区 。4, 5, 6, ... 等等是扩展分区中的逻辑分区。
+
+ 0xff is for whole drive. So for floppies, it should be 0xff.
+ 0xff代表整个磁盘。所以对于软盘,其分区号码应当是0xff 。
+
+26h 2 inode size in bytes. (Notice! We use the formerly reserved
+ word here for inode size!)
+ 字节计数的索引节点大小。(注意!我们在此处为索引节点大小使用
+ 了以前被保留的一个字,即两个字节)
+
+28h 4 Number of inodes per group.
+ 每组的i节点数
+
+ Normally a 1.44M floppy has only one group, and the total
+ number of inodes is 184. So the value should be 184 or
+ greater.
+ 通常,1.44M软盘只有一个组,并且总的i节点数是184。所以此值
+ 应为184或者更大。
+
+2Ch 4 The block number for group descriptors.
+ 组描述符的块号码。
+
+ Valid values are 2 for 1024-byte blocks, and 1 otherwise.
+ 对于1024字节的块有效值是2 ,否则是1 。
+
+ The value here is equal to (s_first_data_block + 1).
+ 这里的值等于(s_first_data_block + 1)。
+
+30h 1 code for "cld"(0xFC).
+ 指令“cld”(即0xFC)。
+
+31h 2 code for "xor ax,ax"(0x31, 0xC0).
+ 指令“xor ax,ax”(即0x31,0xC0)
+
+33h 1 code for "nop"(0x90) or "cwd"(0x99)
+ 指令“nop”(即0x90)或“cwd”(即0x99)
+
+34h 458 The rest of the machine code.
+ 机器码部分。
+
+1FEh 2 Boot Signature AA55h.
+ 引导签名AA55h 。
+
+
+2. FAT12/FAT16 Boot Sector/Boot Record Layout (for loading grldr)
+2. FAT12/FAT16 引导扇区/引导记录的布局 (用于载入grldr)
+
+------------------------------------------------------------------------------
+A FAT12/16 volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
+the root dir of the FAT12/16 volume, and build the boot sector based on the
+fourth sector of grldr(some fields need to be changed as detailed in the
+following table). And then the FAT12/16 volume is GRUB-bootable.
+一个FAT12/16的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个FAT12/16 卷
+的根目录,并按照grldr的第四扇区建立它的引导扇区(一些需要更改的字段在下面的表中
+做了详细注释)。然后这个FAT12/16的卷就是GRUB可启动的。
+
+Update: bootlace.com is a DOS/Linux utility that can install the GRLDR boot
+record onto the boot sector of an FAT12/16 volume.
+更新: bootlace.com 是一个dos/linux下的工具,而它能把GRLDR的引导记录安装到一个
+ FAT12/16卷的引导扇区。
+
+Offset Length Description
+偏移 长度 说明
+
+====== ====== ==============================================================
+00h 2 Machine code for short jump over the data.
+ 近转移指令的机器码
+
+02h 1 LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
+ LBA mode.
+ LBA指示码。CHS模式时,有效值为0x90;LBA模式时,有效值为0x0e 。
+
+ If the BIOS int13 supports LBA, this byte can be safely set to
+ 0x0e.
+ 如果BIOS int13支持LBA,此字节可以安全地设置为0x0e 。
+
+ Some USB BIOSes might have bugs when using CHS mode, so the
+ format program should set this byte to 0x0e. It seems that
+ (generally) all USB BIOSes have LBA support.
+ 某些USB设备的BIOS在使用CHS寻址模式时可能有缺陷,所以格式化程序
+ 应当设置这个字节为0X0e 。似乎所有的(多数)USB BIOS都能支持 LBA 。
+
+ If the format program does not know whether the BIOS has LBA
+ support, it may operate this way:
+ 如果格式化程序不知道BIOS是否具有LBA支持,它可以采用以下方法:
+
+ if (partition_start + total_sectors_in_partition) exceeds the
+ CHS addressing ability(especially when it is greater than
+ 1024*256*63), the caller should set this byte to 0x0e,
+ otherwise, set to 0x90.
+ 如果(分区的起始地址加上分区的总扇区)超过了CHS 的寻址能力。
+ (特别是当它大于1024*256*63),调用程序应当设置此字节为0x0e,
+ 否则,要设为0x90。
+
+ Update: this byte of LBA indicator is ignored. The boot
+ record can probe the LBA support of BIOS.
+ 更新:LBA 指示码这个字节已被忽略。引导记录能探测BIOS的LBA支持。
+
+ Update(2006-07-31): Though GRLDR won't use this LBA-indicator
+ byte, Windows 98 uses it. Usually this byte should be 0x90 for
+ CHS mode(especially for floppies). If this byte is not set
+ properly, Windows 98 will not recognize the floppy or
+ partition. This problem was reported by neiljoy. Many thanks!
+ 更新 (2006-07-31):尽管GRLDR不再使用LBA指示码这个字节,
+ 但Windows 98会使用它。通常这个字节在 CHS 模式中应当设置为0x90
+ (软盘尤其如此)。如果此字节未被正确设置,Windows 98将不能识别
+ 软盘或分区。这一问题由neiljoy先生报告。非常感谢!
+
+03h 8 OEM name string (of OS which formatted the disk).
+ OEM名称字符串 (对该磁盘进行格式化的操作系统的名称)
+
+0Bh 2 Bytes per sector. Must be 512.
+ 每扇区字节数。必须为512 。
+
+0Dh 1 Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
+ and 128. But a cluster size larger than 32K should not occur.
+ 每簇的扇区数。有效值是1, 2, 4, 8, 16, 32, 64和128 。但是簇大小
+ 大于32K的情况不应发生。
+
+0Eh 2 Reserved sectors(number of sectors before the first FAT,
+ including the boot sector), usually 1.
+ 保留的扇区数(第一文件分配表之前的扇区数,包括引导扇区),通常是1。
+
+10h 1 Number of FATs(nearly always 2).
+ 文件分配表数(几乎总是2)。
+
+11h 2 Maximum number of root directory entries.
+ 根目录项的最大个数。
+
+13h 2 Total number of sectors (for small disks only, if the disk is
+ too big this is set to 0 and offset 20h is used instead).
+ 扇区总数(仅用于小磁盘,如果磁盘太大此处被设置为0,而偏移 20h 处
+ 则替代它使用)。
+
+15h 1 Media descriptor byte, pretty meaningless now (see below).
+ 媒体描述符字节,现在该此节已经没有太大意义了(参见后面)。
+
+16h 2 Sectors per FAT.
+ 每个文件分配表的扇区数。
+
+18h 2 Sectors per track.
+ 每个磁道的扇区数
+
+1Ah 2 Total number of heads/sides.
+ 磁头或面的总数。
+
+1Ch 4 Number of hidden sectors (those preceding the boot sector).
+ 隐藏扇区数(位于引导扇区之前)。
+
+ Also referred to as the starting sector of the partition.
+ 也被称为是分区的开始扇区。
+
+ For floppies, it should be 0.
+ 对于软盘,它应当为0 。
+
+20h 4 Total number of sectors for large disks.
+ 大磁盘的扇区总数。
+
+24h 1 BIOS drive number of the boot device.
+ 引导设备的BIOS磁盘号。
+
+ Actually this byte is ignored for read. The boot code will
+ write DL onto this byte. The BIOS or the caller should set
+ drive number in DL.
+ 实际此字节在读入时被忽略。引导代码将把DL中的值写入此字节。
+ BIOS或者调用程序应当在DL中设置磁盘号码。
+
+ We assume all BIOSes pass correct drive number in DL.
+ Buggy BIOSes are not supported!!
+ 我们假定所有的BIOS在DL中能传递正确的磁盘号码。
+ 糟糕的BIOS不被支持!!
+
+25h 1 Partition number of this filesystem in the boot drive.
+ 启动驱动器上此文件系统的分区号码。
+
+ This byte is ignored for read. The boot code will write
+ partition number onto this byte. See offset 41h below.
+ 此字节在读入时被忽略。引导代码将分区号码写到此字节。
+ 见下述偏移41h 。
+
+26h 1 Signature (must be 28h or 29h to be recognised by NT).
+ 签名(必须是28h或者29h以便能被 NT 识别)
+
+27h 4 Volume serial number.
+ 卷的序列号。
+
+2Bh 11 Volume label.
+ 卷标签。
+
+36h 8 File system ID. "FAT12 ", "FAT16 " or "FAT ".
+ 文件系统ID。“FAT12”, “FAT16”或 “FAT”。
+
+3Eh 1 code for "cli".
+ 指令“cli”。
+
+3Fh 1 code for "cld".
+ 指令“cld”。
+
+40h 1 code for "mov dh, imm8".
+ 指令“mov dh, imm8”。
+
+41h 1 Partition number of this partition on the boot drive.
+ 此分区在启动驱动器的分区号。
+
+ 0, 1, 2, 3 are primary partitions.
+ 4, 5, 6, ... are logical partitions in the extended partition.
+ 0, 1, 2, 3 是主分区。4, 5, 6, ... 等等是扩展分区中的逻辑分区。
+
+ 0xff is for whole drive. So for floppies, it should be 0xff.
+ 0xff代表整个磁盘。所以对于软盘,其分区号码应当是0xff 。
+
+42h 442 The rest of the machine code.
+ 机器码部分。
+
+1FCh 4 Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)
+ 引导签名AA550000h 。(Win9x 使用4字节作为魔数值。)
+
+
+3. FAT32 Boot Sector/Boot Record Layout (for loading grldr)
+3. FAT32 引导扇区/引导记录的布局 (用于载入grldr)
+
+------------------------------------------------------------------------------
+A FAT32 volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
+the root dir of the FAT32 volume, and build the boot sector based on the
+third sector of grldr(some fields need to be changed as detailed in the
+following table). And then the FAT32 volume is GRUB-bootable.
+一个FAT32的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个FAT32卷的根
+目录,并按照grldr的第三扇区建立它的引导扇区(一些需要更改的字段在下面的表中
+做了详细注释)。然后这个FAT32的卷就是GRUB可启动的。
+
+Update: bootlace.com is a DOS/Linux utility that can install the GRLDR boot
+record onto the boot sector of an FAT32 volume.
+更新: bootlace.com 是一个dos及linux下的工具而它能把 GRLDR 的引导记录安装
+ 到一个FAT32卷的引导扇区。
+
+
+Offset Length Description
+偏移 长度 说明
+
+====== ====== ==============================================================
+00h 2 Machine code for short jump over the data.
+ 近转移指令的机器码。
+
+02h 1 LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
+ LBA mode.
+ LBA指示码。CHS模式时,有效值为0x90,而LBA模式时,有效值为0x0e。
+
+ If the BIOS int13 supports LBA, this byte can be safely set to
+ 0x0e.
+ 如果BIOS的int13支持LBA,此字节可以安全地设置为0x0e。
+
+ Some USB BIOSes might have bugs when using CHS mode, so the
+ format program should set this byte to 0x0e. It seems that
+ (generally) all USB BIOSes have LBA support.
+ 某些USB设备的BIOS在使用CHS寻址模式时可能有缺陷,所以格式化程
+ 序应当设置这个字节为0X0e。似乎所有(多数)的USB BIOS都能支持LBA 。
+
+ If the format program does not know whether the BIOS has LBA
+ support, it may operate this way:
+ 如果格式化程序不知道BIOS是否具有LBA支持,它可以采用以下方法:
+
+ if (partition_start + total_sectors_in_partition) exceeds the
+ CHS addressing ability(especially when it is greater than
+ 1024*256*63), the caller should set this byte to 0x0e,
+ otherwise, set to 0x90.
+ 如果(分区的起始地址加上分区的总扇区)超过了CHS 的寻址能力。
+ (特别是当它大于1024*256*63),调用程序应当设置此字节为0x0e,
+ 否则,要设为0x90。
+
+ Update: this byte of LBA indicator is ignored. The boot
+ record can probe the LBA support of BIOS.
+ 更新: LBA 指示码这个字节已被忽略。引导记录能探测BIO的LBA支持。
+
+ Update(2006-07-31): Though GRLDR won't use this LBA-indicator
+ byte, Windows 98 uses it. Usually this byte should be 0x90 for
+ CHS mode(especially for floppies). If this byte is not set
+ properly, Windows 98 will not recognize the floppy or
+ partition. This problem was reported by neiljoy. Many thanks!
+ 更新 (2006-07-31):尽管GRLDR不再使用 LBA 指示码这个字节,
+ 但Windows 98会使用它。通常这个字节在 CHS 模式中应当设置为0x90
+ (软盘尤其如此)。如果此字节未被正确设置,Windows 98 将不能识别
+ 软盘或分区。这一问题由neiljoy先生报告。非常感谢!
+
+03h 8 OEM name string (of OS which formatted the disk).
+ OEM名称字符串 (对该磁盘进行格式化的操作系统的名称)
+
+0Bh 2 Bytes per sector. Must be 512.
+ 每扇区字节数。必须为512 。
+
+0Dh 1 Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
+ and 128. But a cluster size larger than 32K should not occur.
+ 每簇的扇区数。有效值是1, 2, 4, 8, 16, 32, 64 和 128 。
+ 但是簇大小大于32K的情况不应发生。
+
+0Eh 2 Reserved sectors(number of sectors before the first FAT,
+ including the boot sector), usually 1.
+ 保留的扇区数(第一文件分配表之前的扇区数,包括引导扇区),
+ 通常是1 。
+
+10h 1 Number of FATs(nearly always 2).
+ 文件分配表数(几乎总是2)。
+
+11h 2 (Maximum number of root directory entries)Must be 0.
+ (根目录项的最大个数)必须为0 。
+
+13h 2 (Total number of sectors for small disks only)Must be 0.
+ (仅用于小磁盘的扇区总数)必须为0 。
+
+15h 1 Media descriptor byte, pretty meaningless now (see below).
+ 媒体描述符字节,现在该此节已经没有太大意义了(参见后面)。
+
+16h 2 (Sectors per FAT)Must be 0.
+ (每个文件分配表的扇区数)必须为0 。
+
+18h 2 Sectors per track.
+ 每个磁道的扇区数
+
+1Ah 2 Total number of heads/sides.
+ 磁头或面的总数。
+
+1Ch 4 Number of hidden sectors (those preceding the boot sector).
+ 隐藏扇区数(它们位于引导扇区之前)。
+
+ Also referred to as the starting sector of the partition.
+ 也被称作是分区的起始扇区。
+
+ For floppies, it should be 0.
+ 对于软盘,它应当为0 。
+
+20h 4 Total number of sectors for large disks.
+ 大磁盘的扇区总数。
+
+24h 4 FAT32 sectors per FAT.
+ 每个文件分配表的 FAT32 扇区数。
+
+28h 2 If bit 7 is clear then all FATs are updated, otherwise bits
+ 0-3 give the current active FAT, all other bits are reserved.
+ 如果第7位被清零,所有文件分配表将被更新,否则0-3位给出当前活
+ 动的文件分配表,所有其它位被保留。
+
+2Ah 2 High byte is major revision number, low byte is minor revision
+ number, currently both are 0.
+ 高字节是主修订号码,低字节是小修订号码,现在都是0 。
+
+2Ch 4 Root directory starting cluster.
+ 根目录起始簇。
+
+30h 2 File system information sector.
+ 文件系统信息扇区。
+
+32h 2 If non-zero this gives the sector which holds a copy of the
+ boot record, usually 6.
+ 如果非零它给出具有引导记录的备份扇区,通常是6。
+
+34h 12 Reserved, set to 0.
+ 保留,设为0 。
+
+40h 1 BIOS drive number of the boot device.
+ 启动设备的 BIOS 驱动器号码。
+
+ 80h is first HDD, 00h is first FDD.
+ 第一硬盘是80h,第一软盘是00h。
+
+ Actually this byte is ignored for read. The boot code will
+ write DL onto this byte. The BIOS or the caller should set
+ drive number in DL.
+ 实际此字节在读入时被忽略。引导代码将把DL中的值写入此字节。
+ BIOS或者调用程序应当在DL中设置磁盘号码。
+
+ We assume all BIOSes pass correct drive number in DL.
+ Buggy BIOSes are not supported!!
+ 我们假定所有的 BIOS 在DL中能传递正确的磁盘号码。
+ 糟糕的BIOS不被支持!!
+
+41h 1 Partition number of this filesystem in the boot drive.
+ 启动驱动器上此文件系统的分区号码。
+
+ This byte is ignored for read. The boot code will write
+ partition number onto this byte. See offset 5Dh below.
+ 此字节在读入时被忽略。引导代码将分区号码写到此字节。
+ 见下述的偏移5Dh 。
+
+42h 1 Signature (must be 28h or 29h to be recognised by NT).
+ 签名(必须是 28h 或者 29h 以便能被 NT 识别)
+
+43h 4 Volume serial number.
+ 卷的序列号。
+
+47h 11 Volume label.
+ 卷标签。
+
+52h 8 File system ID. "FAT32 ".
+ 文件系统标识。“FAT32 ”。
+
+5Ah 1 opcode for "cli".
+ 指令 “cli”。
+
+5Bh 1 opcode for "cld".
+ 指令 “cld” 。
+
+5Ch 1 opcode for "mov dh, imm8".
+ 指令 “mov dh, imm8”。
+
+5Dh 1 Partition number of this partition on the boot drive.
+ 此分区在启动驱动器上的分区号。
+
+ 0, 1, 2, 3 are primary partitions.
+ 4, 5, 6, ... are logical partitions in the extended partition.
+ 0, 1, 2, 3 是主分区。4, 5, 6, ...等等是扩展分区中的逻辑分区。
+
+ 0xff is for whole drive. So for floppies, it should be 0xff.
+ 0xff 代表整个磁盘。所以对于软盘,其分区号码应当是0xff 。
+
+5Eh 414 The rest of the machine code.
+ 机器码部分。
+
+1FCh 4 Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)
+ 引导签名AA550000h 。(Win9x 使用4字节作为魔数值。)
+
+
+4. NTFS Boot Sector/Boot Record Layout (for loading grldr)
+ NTFS 引导扇区/引导记录的布局 (用于载入grldr)
+
+------------------------------------------------------------------------------
+An NTFS volume can be GRUB-bootable. Copy grldr and an optional menu.lst to
+the root dir of the NTFS volume, and build the boot sector based on the
+6th-9th sectors of grldr(some fields need to be changed as detailed in the
+following table). And then the NTFS volume is GRUB-bootable.
+一个FAT32的卷是GRUB可启动的。复制grldr和可选的menu.lst文件到这个FAT32卷的根
+目录,并按照grldr的第6至9扇区建立它的引导扇区(一些需要更改的字段在下面的表
+中做了详细注释)。然后这个FAT32的卷就是GRUB可启动的。
+
+Update: bootlace.com is a DOS/Linux utility that can install the GRLDR boot
+record onto the leading 4 sectors of an NTFS volume.
+更新: bootlace.com是一个在dos/linux下的工具,而它能把GRLDR的引导记录安装到
+ 一个NTFS卷的开头4个扇区。
+
+Offset Length Description
+偏移 长度 说明
+
+====== ====== ==============================================================
+00h 2 Machine code for short jump over the data.
+ 近转移指令的机器码。
+
+02h 1 LBA indicator. Valid values are 0x90 for CHS mode, or 0x0e for
+ LBA mode.
+ LBA指示码。CHS模式时,有效值为0x90;LAB模式时,有效值为0x0e。
+
+ If the BIOS int13 supports LBA, this byte can be safely set to
+ 0x0e.
+ 如果BIOS的int13支持LBA,此字节可以安全地设置为0x0e 。
+
+ Some USB BIOSes might have bugs when using CHS mode, so the
+ format program should set this byte to 0x0e. It seems that
+ (generally) all USB BIOSes have LBA support.
+ 某些USB设备的BIOS在使用CHS寻址模式时可能有缺陷,所以格式化程
+ 序应当设置这个字节为0X0e 。似乎所有(多数)的USB BIOS 都能支持LBA。
+
+ If the format program does not know whether the BIOS has LBA
+ support, it may operate this way:
+ 如果格式化程序不知道BIOS是否具有LBA支持,它可以采用以下方法:
+
+ if (partition_start + total_sectors_in_partition) exceeds the
+ CHS addressing ability(especially when it is greater than
+ 1024*256*63), the caller should set this byte to 0x0e,
+ otherwise, set to 0x90.
+ 如果(分区的起始地址加上分区的总扇区)超过了CHS 的寻址能力。
+ (特别是当它大于1024*256*63),调用程序应当设置此字节为0x0e,
+ 否则,要设为0x90。
+
+ Update: this byte of LBA indicator is ignored. The boot
+ record can probe the LBA support of BIOS.
+ 更新: LBA 指示码这个字节已被忽略。引导记录能探测BIOS的LBA支持。
+
+ Update(2006-07-31): Though GRLDR won't use this LBA-indicator
+ byte, Windows 98 uses it. Usually this byte should be 0x90 for
+ CHS mode(especially for floppies). If this byte is not set
+ properly, Windows 98 will not recognize the floppy or
+ partition. This problem was reported by neiljoy. Many thanks!
+ 更新 (2006-07-31):尽管GRLDR不再使用 LBA 指示码这个字节,但
+ Windows 98会使用它。通常这个字节在 CHS 模式中应当设置为0x90
+ (软盘尤其如此)。如果此字节未被正确设置,Windows 98 将不能识别
+ 软盘或分区。这一问题由neiljoy先生报告。非常感谢!
+
+03h 8 OEM name string (of OS which formatted the disk).
+ OEM名称字符串 (对该磁盘进行格式化的操作系统的名称)
+
+0Bh 2 Bytes per sector. Must be 512.
+ 每扇区字节数。必须为512 。
+
+0Dh 1 Sectors per cluster. Valid values are 1, 2, 4, 8, 16, 32, 64
+ and 128. But a cluster size larger than 32K should not occur.
+ 每簇的扇区数。有效值是1, 2, 4, 8, 16, 32, 64 和 128 。
+ 但是簇大小大于32K的情况不应发生。
+
+0Eh 2 (Reserved sectors)Unused.
+ (保留的扇区数)未被使用。
+
+10h 1 (Number of FATs)Must be 0.
+ (文件分配表数)必须为 0 。
+
+11h 2 (Maximum number of root directory entries)Must be 0.
+ (根目录项的最大个数)必须为0 。
+
+13h 2 (Total number of sectors for small disks only)Must be 0.
+ (仅用于小磁盘的扇区总数)必须为0 。
+
+15h 1 Media descriptor byte, pretty meaningless now (see below).
+ 媒体描述符字节,现在该此节已经没有太大意义了(参见后面)。
+
+16h 2 (Sectors per FAT)Must be 0.
+ (每个文件分配表的扇区数)必须为0 。
+
+18h 2 Sectors per track.
+ 每个磁道的扇区数。
+
+1Ah 2 Total number of heads/sides.
+ 磁头/面的总数。
+
+1Ch 4 Number of hidden sectors (those preceding the boot sector).
+ 隐藏扇区数(它们位于引导扇区之前)。
+
+ Also referred to as the starting sector of the partition.
+ 也被称作是分区的起始扇区。
+
+ For floppies, it should be 0.
+ 对于软盘,它应当为0 。
+
+20h 4 (Total number of sectors for large disks)Must be 0.
+ (大磁盘的扇区总数)必须为 0 。
+
+24h 4 (FAT32 sectors per FAT) - Usually 80 00 80 00, A value of
+ 80 00 00 00 has been seen on a USB thumb drive which is
+ formatted with NTFS under Windows XP. Note this is removable
+ media and is not partitioned, the drive as a whole is NTFS
+ formatted.
+ (每个文件分配表的 FAT32 扇区数)- 通常是 80 00 80 00 ,值
+ 为80 00 00 00将被看作是由Windows XP格式化为NTFS的USB拇指碟
+
+28h 8 Number of sectors in the volume.
+ 此卷的扇区号。
+
+30h 8 LCN of VCN 0 of the $MFT.
+ $MFT的逻辑簇号。
+
+38h 8 LCN of VCN 0 of the $MFTMirr.
+ $MFTMirr的逻辑簇号。
+
+40h 4 Clusters per MFT Record.
+ 每个MFT记录的簇数。
+
+44h 4 Clusters per Index Record.
+ 每个索引的簇数。
+
+48h 8 Volume serial number.
+ 卷序列号
+
+50h 4 Checksum, usually 0.
+ 校验和,通常为 0 。
+
+54h 1 opcode for "cli".
+ 指令 “cli”。
+
+55h 1 opcode for "cld".
+ 指令 “cld”。
+
+56h 1 opcode for "mov dh, imm8".
+ 指令 “mov dh, imm8”。
+
+57h 1 Partition number of this partition on the boot drive.
+ 此分区在启动驱动器上的分区号。
+
+ 0, 1, 2, 3 are primary partitions.
+ 4, 5, 6, ... are logical partitions in the extended partition.
+ 0, 1, 2, 3 是主分区。4, 5, 6, ...等等是扩展分区中的逻辑分区。
+
+ 0xff is for whole drive. So for floppies, it should be 0xff.
+ 0xff 代表整个磁盘。所以对于软盘,其分区号码应当是0xff 。
+
+58h 420 The rest of the machine code in the first sector.
+ 机器码部分。
+
+1FCh 4 Boot Signature AA550000h. (Win9x uses 4 bytes as magic value)
+ 引导签名AA550000h 。(Win9x 使用4字节作为魔数值。)
+
+200h 1536 The rest of the machine code in the last 3 sectors.
+ 末尾 3 个扇区为机器码部分。
+
+------------------------------------------------------------------------------
+
+附录A:FAT32 的文件系统信息扇区(不用于引导grldr)
+
+Offset Length Description
+偏移 长度 说明
+====== ====== ==============================================================
+0h 4 Leading Signature 41615252h.
+ 起始处签名 41615252h 。
+
+4h 480 Reserved, set to 0.
+ 被保留,设为 0 。
+
+1E4h 4 FSI structure signature 61417272h.
+ 故障征兆指数结构签名 61417272h
+
+1E8h 4 Contains the last known count of free clusters, if this is
+ equal to FFFFFFFFh, then the count is unknown.
+ 最后已知的空闲簇数,如果它等于FFFFFFFFh,簇数是未知的。
+
+1ECh 4 Cluster number at which you should begin a search for a free
+ cluster, if this is equal to FFFFFFFFh then the field has not
+ been set.
+ 假如它等于FFFFFFFFh的话,你应当去寻找一个空闲簇的簇号码 。
+ 此字段没有被设置。
+
+1F0h 12 Reserved, set to 0.
+ 被保留,设为 0 。
+
+1FCh 4 Trailing Signature AA550000h.
+ 结尾签名AA550000h 。
+
+------------------------------------------------------------------------------
+
+Appendix B: Media Descriptor Byte(not used by grldr)
+附录B:媒体描述字节(非用于grldr)
+
+The Media descriptor byte is meaningless because of the duplications, F0h for
+example.
+此媒体描述字节没有意义,因为有些字节具有多重意义,例如 F0h 。
+
+Byte Type of disk Sectors Heads Tracks Capacity
+字节 磁盘种类 扇区 头 磁道 容量
+---- ------------ ------- ----- ------ --------
+FFh 5 1/4" 8 2 40 320KB
+FEh 5 1/4" 8 1 40 160KB
+FDh 5 1/4" 9 2 40 360KB
+FCh 5 1/4" 9 1 40 180KB
+FBh both 9 2 80 640KB
+FAh both 9 1 80 320KB
+F9h 5 1/4" 15 2 80 1200KB
+F9h 3 1/2" 9 2 80 720KB
+F0h 3 1/2" 18 2 80 1440KB
+F0h 3 1/2" 36 2 80 2880KB
+F8h hard disk NA NA NA NA
+
+******************************************************************************
+*** grldr.mbr - 怎样将grldr.mbr写到硬盘的主引导磁道 ***
+******************************************************************************
+ grldr.mbr包含能够用作主引导记录的代码。此代码负责搜索所有分区的grldr,并且在发现
+ 它后装载它。现在被支持的分区种类是:FAT12/FAT16/FAT32,NTFS,EXT2/EXT3。在扩展分区
+ 上的逻辑分区也被支持,条件是此扩展分区与微软兼容。实际上,搜索机制没有充分地测试
+ 分区类型(0x85 )的Linux 的扩展分区。
+
+怎样将 GRLDR.MBR 写到硬盘的主引导磁道?
+
+ 首先,读入 Windows 磁盘签名及分区信息字节(总共72字节,从主引导记录的偏移
+ 0x01b8到0x01ff处),并且放置到GRLDR.MBR的开始扇区的相同范围的偏移0x01b8
+ 到0x01ff处。
+
+ 如果硬盘上的主引导记录是由微软的FDISK产生的单一的扇区主引导记录,
+ 可以选择把它复制到GRLDR.MBR的第二扇区。
+
+ GRLDR.MBR的第二扇区叫作“原先的主引导记录”。当找不到GRLDR后,将从“原先的主引
+ 导记录”开始引导。
+
+ 不需要其它的步骤,当所有的上述的必要的改变已经完成后,现在只要将GRLDR.MBR写到
+ 主引导磁道。这就全部完成了。
+
+注意:主引导磁道表示的是硬盘的第一条磁道。
+
+注意:GRLDR.MBR 的自举代码只在分区的根目录寻找GRLDR。你最好把menu.lst文件和GRLDR
+放置在一起。(就是说放在和 GRLDR 相同分区的相同根目录下。)
+
+“grldr” 文件名在ext2分区中必须是小写字母,而且grldr的文件种类必须是纯普通文件。
+其它种类,例如,符号链接文件也是不行的。
+
+ 更新: bootlace.com 是一个在 DOS/LINUX 下的能把 grldr.mbr 安装到主引导记录
+ 的工具。整个grldr.mbr被嵌入到bootlace.com工具内部,因此 bootlace.com可以独
+ 立使用。参见后面。
+
+以下内容供开发人员参考.....
+******************************************************************************
+*** grldr.mbr - Details about the control bytes ***
+******************************************************************************
+ grldr.mbr - 其控制字节的详述
+
+Six bytes can be used to control the boot process of GRLDR.MBR.
+有六个字节可以控制GRLDR.MBR引导过程。
+
+Offset Length Description
+偏移量 长度 说明
+
+====== ====== ==============================================================
+02h 1 bit0=1: disable the search for GRLDR on floppy
+ bit0=0: enable the search for GRLDR on floppy
+ 第 0 位=1 :允许搜索软盘上的GRLDR 。
+ 第 0 位=0 :禁止搜索软盘上的GRLDR 。
+
+ bit1=1: disable the boot of PREVIOUS MBR with invalid
+ partition table(usually an OS boot sector)
+ bit1=0: enable the boot of PREVIOUS MBR with invalid
+ partition table(usually an OS boot sector)
+ 第 1 位=1 :禁止引导分区表无效的原主引导记录
+ (通常是一个操作系统的引导扇区)
+ 第 1 位=0 :允许引导分区表无效的原主引导记录
+ (通常是一个操作系统的引导扇区)
+
+ bit2=1: disable the feature of unconditional entrance to
+ the command-line(See below `--duce')
+ bit2=0: enable the feature of unconditional entrance to
+ the command-line(See below `--duce')
+ 第 2 位 = 1 :禁止无条件进入命令行 (见下面的`--duce')
+ 第 2 位 = 0 :允许无条件进入命令行(见下面的`--duce')
+
+ bit3=1: disable geometry tune(See below `--chs-no-tune')
+ bit3=0: enable geometry tune(See below `--chs-no-tune')
+ 第 3 位= 1 :禁止改变磁盘几何参数(见下面的 `--chs-no-tune')
+ 第 3 位= 0 :允许改变磁盘几何参数(见下面的 `--chs-no-tune')
+
+ bit4 - bit6: reserved
+ 第 4 位到第 6 位:被保留
+
+ bit7=1: try to boot PREVIOUS MBR after the search for GRLDR
+ bit7=0: try to boot PREVIOUS MBR before the search for GRLDR
+ 第 7 位=1:在搜索 GRLDR 之后尝试引导原先的主引导记录
+ 第 7 位=0:在搜索 GRLDR 之前尝试引导原先的主引导记录
+
+03h 1 timeout in seconds to wait for a key press. 0xff stands for
+ waiting all the time(endless).
+ 等待键被按下时的暂停秒数。0xff代表始终暂停(即无休止的)。
+
+
+04h 2 hot-key code. high byte is scan code, low byte is ASCII code.
+ the default value is 0x3920, which stands for the space bar.
+ if this key is pressed, GRUB will be started prior to the boot
+ of previous MBR. See "int 16 keyboard scan codes" below.
+ 热键代码。高字节是扫描码,低字节是ASCII码。默认值是0x3920,代
+ 表的是空格键。如果此键被按下,GRUB将在引导原先的主引导记录之前
+ 启动。见“ int16 键盘扫描码”。
+
+06h 1 preferred boot drive number, 0xff for no-drive
+ 优先引导的驱动器号,0xff 代表没有。
+
+07h 1 preferred partition number, 0xff for whole drive
+ 优先引导的分区号,0xff 代表整个驱动器。
+
+ if the preferred boot drive number is 0xff, the order of the
+ search for GRLDR will be:
+ 如果优先引导的驱动器号是0xff,搜索 GRLDR 的顺序是:
+
+ (hd0,0), (hd0,1), ..., (hd0,L),(L=max partition number)
+ (hd1,0), (hd1,1), ..., (hd1,M),(M=max partition number)
+ ... ... ... ... ... ... ... ...
+ (hdX,0), (hdX,1), ..., (hdX,N),(N=max partition number)
+ (X=max harddrive number)
+ (fd0)
+
+ otherwise, if the preferred boot drive number is Y(not equal to
+ 0xff) and the preferred partition number is K, then the order of
+ the search for GRLDR will be:
+ 否则,如果优先引导的驱动器号假定为Y (且不等于0xff),而优先引导
+ 的分区号为K,那么搜索 GRLDR 的顺序是:
+
+ (Y) if K=0xff; or (Y,K) otherwise
+ (hd0,0), (hd0,1), ..., (hd0,L),(L=max partition number)
+ (hd1,0), (hd1,1), ..., (hd1,M),(M=max partition number)
+ ... ... ... ... ... ... ... ...
+ (hdX,0), (hdX,1), ..., (hdX,N),(N=max partition number)
+ (X=max harddrive number)
+ (fd0)
+
+ Note: if Y < 0x80, then (Y) is floppy, else (Y) is harddrive,
+ and (Y,K) is partition number K on harddrive (Y).
+ 注意:如果Y小于0x80 ,那么这个(Y)驱动器代表软驱,否则就是硬盘驱动器。
+ 而(Y,K)代表Y号硬盘驱动器上的 k 号分区。
+
+
+******************************************************************************
+*** bootlace.com - 安装GRLDR.MBR自举代码到MBR ***
+******************************************************************************
+
+BOOTLACE.COM 能将GRLDR的引导记录安装到硬盘驱动器或硬盘映像文件的主引导记录中,
+或者安装到软盘或者软盘映像的引导扇区。
+
+用法:
+ bootlace.com [OPTIONS] DEVICE_OR_FILE
+ 选项 设备或文件
+选项:
+ --read-only 对指定的设备或文件执行所有操作,但是并不不真正地写入。
+
+ --restore-mbr 恢复原先的主引导记录。
+
+ --mbr-no-bpb 即使最靠前的是一个FAT分区,也不复制BPB表到主引导记录。
+
+ --no-backup-mbr 不复制旧的主引导记录到设备或文件的第二扇区。
+
+ --force-backup-mbr 强行复制主引导记录到设备或文件的第二扇区。
+
+ --mbr-enable-floppy 允许搜索软盘上的GRLDR 。
+
+ --mbr-disable-floppy 禁止搜索软盘上的GRLDR 。
+
+ --mbr-enable-osbr 允许引导分区表无效的原先的主引导记录(通常是
+ 操作系统的引导扇区)
+
+ --mbr-disable-osbr 禁止引导分区表无效的原先的主引导记录(通常是
+ 操作系统的引导扇区)
+
+ --duce 禁止无条件进入命令行功能。
+
+ 任何人按‘C’键都可以正常取得命令行控制台,绕
+ 过了所有的配置文件。(包括预置的配置文件)。
+ 这是一种安全漏洞。所以我们需要这一选项来禁止这
+ 种情况。
+
+ DUCE 即 Disable Unconditional Command-line Entrance
+ 的缩写,意为无条件的(或不受控的)命令行入口。
+
+ --chs-no-tune 禁止磁盘几何参数修正功能。
+
+ --boot-prevmbr-first 在搜索GRLDR之前,先尝试引导原先的主引导记录。
+
+ --boot-prevmbr-last 在搜索GRLDR之后,再尝试引导原先的主引导记录。
+
+ --preferred-drive=D 优先引导的驱动器号,驱动器号D应大于0而小于255 。
+
+ --preferred-partition=P 优先引导的分区号,分区号P应大于0 而小于255 。
+
+ --serial-number=SN 为硬盘驱动器设置一个新的序列号码。SN必须是非零的数。
+
+ --time-out=T 在引导原先的主引导记录前等待 T 秒钟。如果T是0xff,
+ 则始终等待。默认值是 5 。
+
+ --hot-key=K 如果热键被按下,在引导原先的主引导记录之前启动
+ GRUB 。K 是一个双字节的值,如同 int16/AH=1 返回
+ 到AX寄存器的值一样。高字节是扫描码,低字节是ASCII
+ 码。默认值是 0x3920,即空格键。参见“int16键盘扫描码”。
+
+ --floppy 如果设备或文件是软盘,使用这一选项。
+
+ --floppy=N 如果设备或文件是一个硬盘驱动器上的分区,使用此选项。
+ N用于指定分区号码:0 ,1,2 和 3 为主分区,而 4,5,
+ 6,...等等为逻辑分区。
+
+ --sectors-per-track=S 为--floppy 选项指定每磁道扇区数。S 应大于1且小于63,
+ 默认值是63 。
+
+ --heads=H 为--floppy选项指定磁头数,H应大于1且小于256 。默认值是255 。
+
+ --start-sector=B 为--floppy=N 选项指定隐藏扇区。
+
+ --total-sectors=C 为--floppy 选项指定总扇区数。默认值是 0 。
+
+ --lba 对--floppy 选项使用 lba 模式。如果软盘BIOS支持LBA,
+ 你可以在这里指定--lba选项。理论上所有的软盘BIOS 都
+ 支持CHS。因此你指定--chs选项更适当。如果--chs和--lba
+ 选项都未被指定,那么LBA指示码(即引导扇区的第三字节)
+ 将不被修改。
+
+ --chs 为--floppy选项使用chs模式。如果软盘BIOS不支持
+ LBA,你应当指定--chs选项。我们假定所有的软盘BIOS
+ 都能支持CHS。所以你需要指定--chs 选项更为恰当。
+ 如果既不指定--chs选项又不指定--lba选项,那么LBA
+ 指示码(即,引导扇区的第三字节)将不被改变。
+
+ --fat12 --floppy选项使用时,确认安装到FAT12系统。
+
+ --fat16 --floppy选项使用时,确认安装到FAT16系统。
+
+ --fat32 --floppy选项使用时,确认安装到FAT32系统。
+
+ --vfat --floppy选项使用时,确认安装到FAT12/16/32等系统。
+
+ --ntfs --floppy选项使用时,确认安装到NTFS系统。
+
+ --ext2 --floppy选项使用时,确认安装到EXT2系统。
+
+ --install-partition=I 将引导记录安装到指定的硬盘驱动器或硬盘映像(设备或文件)
+ 的第 I 号分区的引导区中。
+
+DEVICE_OR_FILE: 设备或者映像文件的文件名。对于DOS,BIOS驱动器号(两位的十六进制
+或三位的十进制数)可以被用来访问驱动器。BIOS驱动器号0表示第一软盘,1表示第二硬盘;
+0x80 表示第一硬盘驱动器,0x81表示第二硬盘驱动器,等等。
+
+注意:BOOTLACE.COM 仅仅是把引导代码写到MBR中。引导代码需要加载GRLDR作为GRUB启动
+过程的第二(最后)阶段。因而在BOOTLACE.COM成功执行前或者是执行后,GRLDR应当被复
+制到任一受支持分区的根目录下,当前受支持分区的文件系统类型仅有FAT12,FAT16,FAT32,
+NTFS,EXT2以及EXT3 。
+
+注意 2:如果DEVICE_OR_FILE是硬盘设备或是硬盘映像文件,它必须包含有效的分区表,
+否则,BOOTLACE.COM 将安装失败。如果设备或文件是指向软驱或者软盘映像文件,那么
+他必须包含一个受支持的文件系统(FAT12/FAT16/FAT32/NTFS/EXT2/EXT3 等之一)。
+
+注意 3:如果DEVICE_OR_FILE是软驱或软盘映像文件,而它又被格式化为EXT2或EXT3,
+那么你必须明确指定--sectors-per-track 和 --heads 选项。
+
+重要!! 如果你安装grldr的引导代码到一个软盘或者一个分区,此软盘或分区将只能从
+grldr引导 ,而你原本的IO.SYS(DOS/Win9x/Me)和NTLDR(WinNT/2K/XP)将变为不能
+引导。这是由于软盘或分区的原始引导记录被覆盖了。而把GRLDR的引导记录安装到MBR
+则没有这个问题。
+更新:在最新版本的GRUB4DOS中NTLDR,IO.SYS或KERNEL.SYS等文件,可以被直接加载。
+
+提示:如果文件名的开始是短划线(-)或数字,你可以在它前面加上目录名(./) 或 (.\)。
+
+示例:
+ 在Linux下安装GRLDR的引导代码到MBR:
+ bootlace.com /dev/hda
+
+ 在DOS下安装GRLDR的引导代码到MBR:
+ bootlace.com 0x80
+
+ 在DOS或Linux下安装GRLDR的引导代码到硬盘映像:
+ bootlace.com hd.img
+
+ 在Linux下安装GRLDR的引导代码到软盘:
+ bootlace.com --floppy --chs /dev/fd0
+
+ 在DOS下安装GRLDR的引导代码到软盘:
+ bootlace.com --floppy --chs 0x00
+
+ 在DOS或Linux下安装GRLDR的引导代码到软盘映像:
+ bootlace.com --floppy --chs floppy.img
+
+BOOTLACE.COM 无法在Windows NT/2000/XP/2003下正常运行。它被希望(和设计)用于
+DOS/Win9x和Linux中。
+
+更新:对于映像文件,在Windows NT/2000/XP/2003下,bootlace.com 可以正常使用。
+
+bootlace.com不能在 Windows NT/2000/XP/2003 中运行的原因是,bootlace.com是一个DOS工具而 Windows NT/2000/XP/2003
+不认可它对设备的访问,你可以通过WINHEX/DISKRW之类的工具来间接的完全这个操作.
+一个DISKRW的例子在这里:
+ http://bbs.znpc.net/viewthread.php?tid=5447
+
+******************************************************************************
+*** kexec-tools should be patched for the 1.101 release ***
+******************************************************************************
+ kexec-tools 应当打上1.101发布的补丁
+
+The file kexec-tools-1.101-patch is a patch to the kexec-tools-1.101 release.
+Kexec might fail to load grub.exe without this patch.
+kexec-tools-1.101-patch 是为kexec-tools-1.101发布的补丁。没有这个补丁Kexec 加载
+grub.exe 会失败。
+
+The home page of kexec-tools is:
+kexec-tools 的主页是:
+
+ http://www.xmission.com/~ebiederm/files/kexec/
+
+Note: The Linux kernel should be KEXEC enabled before kexec can be run.
+注意: 在使用 kexec 前应该使 Linux 核心支持 KEXEC 系统调用。
+
+ !! Important Update !!
+ 重要更新
+
+The patch `kexec-tools-1.101-patch' is not needed now and has been deleted.
+Even worse, it fails in `kexec -l grub.exe --initrd=imgfile'. So please
+do not use it any more.
+现在不再需要`kexec-tools-1.101-patch'补丁而且它已经被删除了。很糟糕的是,执行
+`kexec -l grub.exe --initrd=imgfile'竟会失败。所以请不要再使用它。
+
+******************************************************************************
+*** Direct transition to DOS/Win9x from within Linux ***
+******************************************************************************
+ 从Linux直接转换到DOS/Win9x
+
+使用kexec,我们能够轻易地从运行中的 Linux 系统启动到 DOS/Win9x 。
+
+假如 WIN98.IMG 是一个可引导的硬盘映像,按照如下操作:
+
+kexec -l grub.exe --initrd=WIN98.IMG --command-line="--config-file=map (rd) (hd0); map --hook; chainloader (hd0)+1; rootnoverify (hd0)"
+
+kexec -e
+
+如果DOS.IMG是一个可引导的软盘映像,按照以下方法:
+
+kexec -l grub.exe --initrd=DOS.IMG --command-line="--config-file=map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"
+
+kexec -e
+
+注意,按照这种方式,我们可以不用使用真实的 DOS/Win9x 磁盘就启动到 DOS/Win9x 。
+我们不需要FAT分区而只需要一个映像文件。
+
+我们已经注意到通过使用 kexec 和 grub.exe,Linux本身就能够成为一个大的引导管理器。
+这给安装程序或者引导程序或者初始化程序的开发者带来了方便。
+
+当然,grub.exe和可引导的磁盘映像也能够被运行中的GRUB 或LILO 或syslinux 加载。例如:
+
+1.通过 GRUB 加载:
+
+ kernel (hd0,0)/grub.exe --config-file="map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"
+ initrd (hd0,0)/DOS.IMG
+ boot
+
+2.通过 LILO 加载:
+
+ image=/boot/grub.exe
+ label=grub.exe
+ initrd=/boot/DOS.IMG
+ append="--config-file=map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"
+
+3.通过 SYSLINUX 加载:
+
+ label grub.exe
+ kernel grub.exe
+ append initrd=DOS.IMG --config-file="map (rd) (fd0); map --hook; chainloader (fd0)+1; rootnoverify (fd0)"
+
+注意:如果使用上面的‘map (rd) (...)’失败,你可以使用‘map (rd)+1 (...)’代替,
+然后再试一次。
+
+******************************************************************************
+*** Keyboard BIOS Scan Code/ASCII code tables ***
+******************************************************************************
+ 键盘 BIOS 扫描码和 ASCII 码表
+
+Keyboard bios scan code and ascii character code tables can be obtained from
+the web by, for example, googling for "3920 372A 4A2D 4E2B 352F". Here are 2
+main results:
+键盘 bios 扫描码和 ASCII 字符码表能够通过 web 网获取,例如,使用 google 查找
+"3920 372A 4A2D 4E2B 352F"。这里有两项主要的结果:
+
+1. From "http://heim.ifi.uio.no/~stanisls/helppc/scan_codes.html":
+ 转自“http://heim.ifi.uio.no/~stanisls/helppc/scan_codes.html”:
+
+INT 16 - Keyboard Scan Codes
+INT 16 - 键盘扫描码
+
+ Key Normal Shifted w/Ctrl w/Alt
+ 键位 常态 上档态 控制态 变更态
+
+ A 1E61 1E41 1E01 1E00
+ B 3062 3042 3002 3000
+ C 2E63 2E43 2E03 2E00
+ D 2064 2044 2004 2000
+ E 1265 1245 1205 1200
+ F 2166 2146 2106 2100
+ G 2267 2247 2207 2200
+ H 2368 2348 2308 2300
+ I 1769 1749 1709 1700
+ J 246A 244A 240A 2400
+ K 256B 254B 250B 2500
+ L 266C 264C 260C 2600
+ M 326D 324D 320D 3200
+ N 316E 314E 310E 3100
+ O 186F 184F 180F 1800
+ P 1970 1950 1910 1900
+ Q 1071 1051 1011 1000
+ R 1372 1352 1312 1300
+ S 1F73 1F53 1F13 1F00
+ T 1474 1454 1414 1400
+ U 1675 1655 1615 1600
+ V 2F76 2F56 2F16 2F00
+ W 1177 1157 1117 1100
+ X 2D78 2D58 2D18 2D00
+ Y 1579 1559 1519 1500
+ Z 2C7A 2C5A 2C1A 2C00
+
+ Key Normal Shifted w/Ctrl w/Alt
+ 键位 常态 上档态 控制态 变更态
+
+ 1 0231 0221 7800
+ 2 0332 0340 0300 7900
+ 3 0433 0423 7A00
+ 4 0534 0524 7B00
+ 5 0635 0625 7C00
+ 6 0736 075E 071E 7D00
+ 7 0837 0826 7E00
+ 8 0938 092A 7F00
+ 9 0A39 0A28 8000
+ 0 0B30 0B29 8100
+
+ Key Normal Shifted w/Ctrl w/Alt
+ 键位 常态 上档态 控制态 变更态
+
+ - 0C2D 0C5F 0C1F 8200
+ = 0D3D 0D2B 8300
+ [ 1A5B 1A7B 1A1B 1A00
+ ] 1B5D 1B7D 1B1D 1B00
+ ; 273B 273A 2700
+ ' 2827 2822
+ ` 2960 297E
+ \ 2B5C 2B7C 2B1C 2600 (same as Alt L)
+ , 332C 333C
+ . 342E 343E
+ / 352F 353F
+
+ Key Normal Shifted w/Ctrl w/Alt
+ 键位 常态 上档态 控制态 变更态
+
+ F1 3B00 5400 5E00 6800
+ F2 3C00 5500 5F00 6900
+ F3 3D00 5600 6000 6A00
+ F4 3E00 5700 6100 6B00
+ F5 3F00 5800 6200 6C00
+ F6 4000 5900 6300 6D00
+ F7 4100 5A00 6400 6E00
+ F8 4200 5B00 6500 6F00
+ F9 4300 5C00 6600 7000
+ F10 4400 5D00 6700 7100
+ F11 8500 8700 8900 8B00
+ F12 8600 8800 8A00 8C00
+
+ Key Normal Shifted w/Ctrl w/Alt
+ 键位 常态 上档态 控制态 变更态
+
+ BackSpace 0E08 0E08 0E7F 0E00
+ Del 5300 532E 9300 A300
+ Down Arrow 5000 5032 9100 A000
+ End 4F00 4F31 7500 9F00
+ Enter 1C0D 1C0D 1C0A A600
+ Esc 011B 011B 011B 0100
+ Home 4700 4737 7700 9700
+ Ins 5200 5230 9200 A200
+ Keypad 5 4C35 8F00
+ Keypad * 372A 9600 3700
+ Keypad - 4A2D 4A2D 8E00 4A00
+ Keypad + 4E2B 4E2B 4E00
+ Keypad / 352F 352F 9500 A400
+ Left Arrow 4B00 4B34 7300 9B00
+ PgDn 5100 5133 7600 A100
+ PgUp 4900 4939 8400 9900
+ PrtSc 7200
+ Right Arrow 4D00 4D36 7400 9D00
+ SpaceBar 3920 3920 3920 3920
+ Tab 0F09 0F00 9400 A500
+ Up Arrow 4800 4838 8D00 9800
+
+
+ 一些组合键不是在所有系统中都能获取。PS/2 包括了很多不能在PC, XT和
+ AT上获取的组合键。
+
+- To retrieve the character from a scan code logical AND the word
+ with 0x00FF.
+ 由扫描码检索出字符可以用 0x00FF 和该字符进行逻辑与操作。
+
+- see INT 16 MAKE CODES
+ 参见INT16 通码
+
+
+
+2. From "http://www.hoppie.nl/ivan/keycodes.txt":
+ 转自“http://www.hoppie.nl/ivan/keycodes.txt”:
+
+
+ Keystroke Keypress code
+--------------------------------------------------
+ Esc 011B
+ 1 0231
+ 2 0332
+ 3 0433
+ 4 0534
+ 5 0635
+ 6 0736
+ 7 0837
+ 8 0938
+ 9 0A39
+ 0 0B30
+ - 0C2D
+ = 0D3D
+ Backspace 0E08
+ Tab 0F09
+ q 1071
+ w 1177
+ e 1265
+ r 1372
+ t 1474
+ y 1579
+ u 1675
+ i 1769
+ o 186F
+ p 1970
+ [ 1A5B
+ ] 1B5D
+ Enter 1C0D
+ Ctrl **
+ a 1E61
+ s 1F73
+ d 2064
+ f 2166
+ g 2267
+ h 2368
+ j 246A
+ k 256B
+ l 266C
+ ; 273B
+ ' 2827
+ ` 2960
+ Shift **
+ \ 2B5C
+ z 2C7A
+ x 2D78
+ c 2E63
+ v 2F76
+ b 3062
+ n 316E
+ m 326D
+ , 332C
+ . 342E
+ / 352F
+ Gray * 372A
+ Alt **
+ Space 3920
+ Caps Lock **
+ F1 3B00
+ F2 3C00
+ F3 3D00
+ F4 3E00
+ F5 3F00
+ F6 4000
+ F7 4100
+ F8 4200
+ F9 4300
+ F10 4400
+ F11 8500
+ F12 8600
+ Num Lock **
+ Scroll Lock **
+ White Home 4700
+ White Up Arrow 4800
+ White PgUp 4900
+ Gray - 4A2D
+ White Left Arrow 4B00
+ Center Key 4C00
+ White Right Arrow 4D00
+ Gray + 4E2B
+ White End 4F00
+ White Down Arrow 5000
+ White PgDn 5100
+ White Ins 5200
+ White Del 5300
+ SysReq **
+ Key 45 [1] 565C
+ Enter (number keypad) 1C0D
+ Gray / 352F
+ PrtSc **
+ Pause **
+ Gray Home 4700
+ Gray Up Arrow 4800
+ Gray Page Up 4900
+ Gray Left Arrow 4B00
+ Gray Right Arrow 4D00
+ Gray End 4F00
+ Gray Down Arrow 5000
+ Gray Page Down 5100
+ Gray Insert 5200
+ Gray Delete 5300
+
+ Shift Esc 011B
+ ! 0221
+ @ 0340
+ # 0423
+ $ 0524
+ % 0625
+ ^ 075E
+ & 0826
+ * (white) 092A
+ ( 0A28
+ ) 0B29
+ _ 0C5F
+ + (white) 0D2B
+ Shift Backspace 0E08
+ Shift Tab (Backtab) 0F00
+ Q 1051
+ W 1157
+ E 1245
+ R 1352
+ T 1454
+ Y 1559
+ U 1655
+ I 1749
+ O 184F
+ P 1950
+ { 1A7B
+ } 1B7D
+ Shift Enter 1C0D
+ Shift Ctrl **
+ A 1E41
+ S 1F53
+ D 2044
+ F 2146
+ G 2247
+ H 2348
+ J 244A
+ K 254B
+ L 264C
+ : 273A
+ " 2822
+ ~ 297E
+ | 2B7C
+ Z 2C5A
+ X 2D58
+ C 2E43
+ V 2F56
+ B 3042
+ N 314E
+ M 324D
+ < 333C
+ > 343E
+ ? 353F
+ Shift Gray * 372A
+ Shift Alt **
+ Shift Space 3920
+ Shift Caps Lock **
+ Shift F1 5400
+ Shift F2 5500
+ Shift F3 5600
+ Shift F4 5700
+ Shift F5 5800
+ Shift F6 5900
+ Shift F7 5A00
+ Shift F8 5B00
+ Shift F9 5C00
+ Shift F10 5D00
+ Shift F11 8700
+ Shift F12 8800
+ Shift Num Lock **
+ Shift Scroll Lock **
+ Shift 7 (number pad) 4737
+ Shift 8 (number pad) 4838
+ Shift 9 (number pad) 4939
+ Shift Gray - 4A2D
+ Shift 4 (number pad) 4B34
+ Shift 5 (number pad) 4C35
+ Shift 6 (number pad) 4D36
+ Shift Gray + 4E2B
+ Shift 1 (number pad) 4F31
+ Shift 2 (number pad) 5032
+ Shift 3 (number pad) 5133
+ Shift 0 (number pad) 5230
+ Shift . (number pad) 532E
+ Shift SysReq **
+ Shift Key 45 [1] 567C
+ Shift Enter (number pad) 1C0D
+ Shift Gray / 352F
+ Shift PrtSc **
+ Shift Pause **
+ Shift Gray Home 4700
+ Shift Gray Up Arrow 4800
+ Shift Gray Page Up 4900
+ Shift Gray Left Arrow 4B00
+ Shift Gray Right Arrow 4D00
+ Shift Gray End 4F00
+ Shift Gray Down Arrow 5000
+ Shift Gray Page Down 5100
+ Shift Gray Insert 5200
+ Shift Gray Delete 5300
+
+ Ctrl Esc 011B
+ Ctrl 1 --
+ Ctrl 2 (NUL) 0300
+ Ctrl 3 --
+ Ctrl 4 --
+ Ctrl 5 --
+ Ctrl 6 (RS) 071E
+ Ctrl 7 --
+ Ctrl 8 --
+ Ctrl 9 --
+ Ctrl 0 --
+ Ctrl - 0C1F
+ Ctrl = --
+ Ctrl Backspace (DEL) 0E7F
+ Ctrl Tab 9400
+ Ctrl q (DC1) 1011
+ Ctrl w (ETB) 1117
+ Ctrl e (ENQ) 1205
+ Ctrl r (DC2) 1312
+ Ctrl t (DC4) 1414
+ Ctrl y (EM) 1519
+ Ctrl u (NAK) 1615
+ Ctrl i (HT) 1709
+ Ctrl o (SI) 180F
+ Ctrl p (DEL) 1910
+ Ctrl [ (ESC) 1A1B
+ Ctrl ] (GS) 1B1D
+ Ctrl Enter (LF) 1C0A
+ Ctrl a (SOH) 1E01
+ Ctrl s (DC3) 1F13
+ Ctrl d (EOT) 2004
+ Ctrl f (ACK) 2106
+ Ctrl g (BEL) 2207
+ Ctrl h (Backspace) 2308
+ Ctrl j (LF) 240A
+ Ctrl k (VT) 250B
+ Ctrl l (FF) 260C
+ Ctrl ; --
+ Ctrl ' --
+ Ctrl ` --
+ Ctrl Shift **
+ Ctrl \ (FS) 2B1C
+ Ctrl z (SUB) 2C1A
+ Ctrl x (CAN) 2D18
+ Ctrl c (ETX) 2E03
+ Ctrl v (SYN) 2F16
+ Ctrl b (STX) 3002
+ Ctrl n (SO) 310E
+ Ctrl m (CR) 320D
+ Ctrl , --
+ Ctrl . --
+ Ctrl / --
+ Ctrl Gray * 9600
+ Ctrl Alt **
+ Ctrl Space 3920
+ Ctrl Caps Lock --
+ Ctrl F1 5E00
+ Ctrl F2 5F00
+ Ctrl F3 6000
+ Ctrl F4 6100
+ Ctrl F5 6200
+ Ctrl F6 6300
+ Ctrl F7 6400
+ Ctrl F8 6500
+ Ctrl F9 6600
+ Ctrl F10 6700
+ Ctrl F11 8900
+ Ctrl F12 8A00
+ Ctrl Num Lock --
+ Ctrl Scroll Lock --
+ Ctrl White Home 7700
+ Ctrl White Up Arrow 8D00
+ Ctrl White PgUp 8400
+ Ctrl Gray - 8E00
+ Ctrl White Left Arrow 7300
+ Ctrl 5 (number pad) 8F00
+ Ctrl White Right Arrow 7400
+ Ctrl Gray + 9000
+ Ctrl White End 7500
+ Ctrl White Down Arrow 9100
+ Ctrl White PgDn 7600
+ Ctrl White Ins 9200
+ Ctrl White Del 9300
+ Ctrl SysReq **
+ Ctrl Key 45 [1] --
+ Ctrl Enter (number pad) 1C0A
+ Ctrl / (number pad) 9500
+ Ctrl PrtSc 7200
+ Ctrl Break 0000
+ Ctrl Gray Home 7700
+ Ctrl Gray Up Arrow 8DE0
+ Ctrl Gray Page Up 8400
+ Ctrl Gray Left Arrow 7300
+ Ctrl Gray Right Arrow 7400
+ Ctrl Gray End 7500
+ Ctrl Gray Down Arrow 91E0
+ Ctrl Gray Page Down 7600
+ Ctrl Gray Insert 92E0
+ Ctrl Gray Delete 93E0
+
+ Alt Esc 0100
+ Alt 1 7800
+ Alt 2 7900
+ Alt 3 7A00
+ Alt 4 7B00
+ Alt 5 7C00
+ Alt 6 7D00
+ Alt 7 7E00
+ Alt 8 7F00
+ Alt 9 8000
+ Alt 0 8100
+ Alt - 8200
+ Alt = 8300
+ Alt Backspace 0E00
+ Alt Tab A500
+ Alt q 1000
+ Alt w 1100
+ Alt e 1200
+ Alt r 1300
+ Alt t 1400
+ Alt y 1500
+ Alt u 1600
+ Alt i 1700
+ Alt o 1800
+ Alt p 1900
+ Alt [ 1A00
+ Alt ] 1B00
+ Alt Enter 1C00
+ Alt Ctrl **
+ Alt a 1E00
+ Alt s 1F00
+ Alt d 2000
+ Alt f 2100
+ Alt g 2200
+ Alt h 2300
+ Alt j 2400
+ Alt k 2500
+ Alt l 2600
+ Alt ; 2700
+ Alt ' 2800
+ Alt ` 2900
+ Alt Shift **
+ Alt \ 2B00
+ Alt z 2C00
+ Alt x 2D00
+ Alt c 2E00
+ Alt v 2F00
+ Alt b 3000
+ Alt n 3100
+ Alt m 3200
+ Alt , 3300
+ Alt . 3400
+ Alt / 3500
+ Alt Gray * 3700
+ Alt Space 3920
+ Alt Caps Lock **
+ Alt F1 6800
+ Alt F2 6900
+ Alt F3 6A00
+ Alt F4 6B00
+ Alt F5 6C00
+ Alt F6 6D00
+ Alt F7 6E00
+ Alt F8 6F00
+ Alt F9 7000
+ Alt F10 7100
+ Alt F11 8B00
+ Alt F12 8C00
+ Alt Num Lock **
+ Alt Scroll Lock **
+ Alt Gray - 4A00
+ Alt Gray + 4E00
+ Alt 7 (number pad) #
+ Alt 8 (number pad) #
+ Alt 9 (number pad) #
+ Alt 4 (number pad) #
+ Alt 5 (number pad) #
+ Alt 6 (number pad) #
+ Alt 1 (number pad) #
+ Alt 2 (number pad) #
+ Alt 3 (number pad) #
+ Alt Del --
+ Alt SysReq **
+ Alt Key 45 [1] --
+ Alt Enter (number pad) A600
+ Alt / (number pad) A400
+ Alt PrtSc **
+ Alt Pause **
+ Alt Gray Home 9700
+ Alt Gray Up Arrow 9800
+ Alt Gray Page Up 9900
+ Alt Gray Left Arrow 9B00
+ Alt Gray Right Arrow 9D00
+ Alt Gray End 9F00
+ Alt Gray Down Arrow A000
+ Alt Gray Page Down A100
+ Alt Gray Insert A200
+ Alt Gray Delete A300
+
+ -------------------------------------------------------------------------
+
+Footnotes
+脚注
+ [1] In the United States, the 101/102-key keyboard is shipped
+ with 101 keys. Overseas versions have an additional key
+ sandwiched between the left Shift key and the Z key. This
+ additional key is identified by IBM (and in this table) as
+ "Key 45."
+ 在美国,101/102键键盘有101 个键。海外版本有一个附加的键,夹在
+ 左上档键和Z 键之间。此附加键是由IBM 确定的(在本表中是 45 键)。
+
+ [**] Keys and key combinations marked ** are used by the ROM BIOS
+ but do not put values into the keyboard buffer.
+ 键及键组合若有 ** 标记,则被ROM BIOS所使用,但不会将键值放入键盘
+ 缓冲区。
+
+ [--] Keys and key combinations marked -- are ignored by the ROM
+ BIOS.
+ 键及键组合若有 -- 标记,则被ROM BIOS所忽略。
+
+
+
+3. From "http://heim.ifi.uio.no/~stanisls/helppc/make_codes.html":
+ 转自“http://heim.ifi.uio.no/~stanisls/helppc/make_codes.html”:
+
+INT 9 - Hardware Keyboard Make/Break Codes
+INT 9 - 硬件键盘的通/断码
+
+ Key Make Break Key Make Break
+ 键位 通码 断码 键位 通码 断码
+
+ Backspace 0E 8E F1 3B BB
+ Caps Lock 3A BA F2 3C BC
+ Enter 1C 9C F3 3D BD
+ Esc 01 81 F4 3E BE
+ Left Alt 38 B8 F7 41 C1
+ Left Ctrl 1D 9D F5 3F BF
+ Left Shift 2A AA F6 40 C0
+ Num Lock 45 C5 F8 42 C2
+ Right Shift 36 B6 F9 43 C3
+ Scroll Lock 46 C6 F10 44 C4
+ Space 39 B9 F11 57 D7
+ Sys Req (AT) 54 D4 F12 58 D8
+ Tab 0F 8F
+
+ Keypad Keys Make Break
+ 数字小键盘键位 通码 断码
+
+ Keypad 0 (Ins) 52 D2
+ Keypad 1 (End) 4F CF
+ Keypad 2 (Down arrow) 50 D0
+ Keypad 3 (PgDn) 51 D1
+ Keypad 4 (Left arrow) 4B CB
+ Keypad 5 4C CC
+ Keypad 6 (Right arrow) 4D CD
+ Keypad 7 (Home) 47 C7
+ Keypad 8 (Up arrow) 48 C8
+ Keypad 9 (PgUp) 49 C9
+ Keypad . (Del) 53 D3
+ Keypad * (PrtSc) 37 B7
+ Keypad - 4A CA
+ Keypad + 4E CE
+
+ Key Make Break Key Make Break
+ 键位 通码 断码 键位 通码 断码
+
+ A 1E 9E N 31 B1
+ B 30 B0 O 18 98
+ C 2E AE P 19 99
+ D 20 A0 Q 10 90
+ E 12 92 R 13 93
+ F 21 A1 S 1F 9F
+ G 22 A2 T 14 94
+ H 23 A3 U 16 96
+ I 17 97 V 2F AF
+ J 24 A4 W 11 91
+ K 25 A5 X 2D AD
+ L 26 A6 Y 15 95
+ M 32 B2 Z 2C AC
+
+ Key Make Break Key Make Break
+ 键位 通码 断码 键位 通码 断码
+
+ 1 02 82 - 0C 8C
+ 2 03 83 = 0D 8D
+ 3 04 84 [ 1A 9A
+ 4 05 85 ] 1B 9B
+ 5 06 86 ; 27 A7
+ 6 07 87 ' 28 A8
+ 7 08 88 ` 29 A9
+ 8 09 89 \ 2B AB
+ 9 0A 8A , 33 B3
+ 0 0B 8B . 34 B4
+ / 35 B5
+
+
+Enhanced Keyboard Keys (101/102 keys)
+键盘扩展键 (101/102 键)
+
+ Control Keys Make Break
+ 控制键 通码 断码
+
+ Alt-PrtSc (SysReq) 54 D4
+ Ctrl-PrtSc E0 37 E0 B7
+ Enter E0 1C E0 9C
+ PrtSc E0 2A E0 37 E0 B7 E0 AA
+ Right Alt E0 38 E0 B8
+ Right Ctrl E0 1D E0 9D
+ Shift-PrtSc E0 37 E0 B7
+ / E0 35 E0 B5
+ Pause E1 1D 45 E1 9D C5 (not typematic)
+ Ctrl-Pause (Ctrl-Break) E0 46 E0 C6 (not typematic)
+
+ - Keys marked as "not typematic" generate one stream of bytes
+ without corresponding break scan code bytes (actually the
+ break codes are part of the make code).
+ 键位是以未使用断码扫描码字节信息的“非机器自动连续打印的"所
+ 生成的一种扫描码字节流来标记的。(实际上断码是通码的一部分)
+ (译注:typematic 有人翻译为‘机打’)
+
+
+ Normal Mode or
+ Shift w/Numlock
+ 常态或上档态及
+ 数字键盘锁定态模式
+
+ Key Make Break |----- Numlock on ------.
+ 数字键盘锁定
+ Make Break
+ 键位 通码 断码 通码 断码
+
+ Del E0 53 E0 D3 E0 2A E0 53 E0 D3 E0 AA
+ Down arrow E0 50 E0 D0 E0 2A E0 50 E0 D0 E0 AA
+ End E0 4F E0 CF E0 2A E0 4F E0 CF E0 AA
+ Home E0 47 E0 C7 E0 2A E0 47 E0 C7 E0 AA
+ Ins E0 52 E0 D2 E0 2A E0 52 E0 D2 E0 AA
+ Left arrow E0 4B E0 CB E0 2A E0 4B E0 CB E0 AA
+ PgDn E0 51 E0 D1 E0 2A E0 51 E0 D1 E0 AA
+ PgUp E0 49 E0 C9 E0 2A E0 49 E0 C9 E0 AA
+ Right arrow E0 4D E0 CD E0 2A E0 4D E0 CD E0 AA
+ Up arrow E0 48 E0 C8 E0 2A E0 48 E0 C8 E0 AA
+
+ Key |--Left Shift Pressed--. |--Right Shift Pressed--.
+ 键位 左上档键按下时 右上档键按下时
+
+ Make Break Make Break
+ 通码 断码 通码 断码
+
+ Del E0 AA E0 53 E0 D3 E0 2A E0 B6 E0 53 E0 D3 E0 36
+ Down arrow E0 AA E0 50 E0 D0 E0 2A E0 B6 E0 50 E0 D0 E0 36
+ End E0 AA E0 4F E0 CF E0 2A E0 B6 E0 4F E0 CF E0 36
+ Home E0 AA E0 47 E0 C7 E0 2A E0 B6 E0 47 E0 C7 E0 36
+ Ins E0 AA E0 52 E0 D2 E0 2A E0 B6 E0 52 E0 D2 E0 36
+ Left arrow E0 AA E0 4B E0 CB E0 2A E0 B6 E0 4B E0 CB E0 36
+ PgDn E0 AA E0 51 E0 D1 E0 2A E0 B6 E0 51 E0 D1 E0 36
+ PgUp E0 AA E0 49 E0 C9 E0 2A E0 B6 E0 49 E0 C9 E0 36
+ Right arrow E0 AA E0 4D E0 CD E0 2A E0 B6 E0 4D E0 CD E0 36
+ Up arrow E0 AA E0 48 E0 C8 E0 2A E0 B6 E0 48 E0 C8 E0 36
+ / E0 AA E0 35 E0 B5 E0 2A E0 B6 E0 35 E0 B5 E0 36
+
+
+ - The PS/2 models have three make/break scan code sets. The first
+ set matches the PC & XT make/break scan code set and is the one
+ listed here. Scan code sets are selected by writing the value F0
+ to the keyboard via the 8042 (port 60h). The following is a brief
+ description of the scan code sets (see the PS/2 Technical Reference
+ manuals for more information on scan code sets 2 and 3):
+ PS/2 类型有三套通断扫描码。其中第一套是适用于PC & XT 的通断码扫描码集,
+ 并列在了这里。扫描码集可以通过向8042 键盘控制器(端口60)写入值 F0 来
+ 选择。下面是扫描码集的简要介绍(更多第2,3套扫描码集的信息见PS/2 技术
+ 参考手册)
+
+ / set 1, each key has a base scan code. Some keys generate
+ extra scan codes to generate artificial shift states. This
+ is similar to the standard scan code set used on the PC and XT.
+ 第一套扫描码集,每个键具有一个基本的扫描码。一些键产生扩展扫
+ 描码以便人工生成上档状态。它与 PC 和 XT 机上的标准扫描码相似。
+
+ / set 2, each key sends one make scan code and two break scan
+ codes bytes (F0 followed by the make code). This scan code
+ set is available on the IBM AT also.
+ 第二套扫描码集,每个键发送一个通码扫描码和两个断码扫描码字节
+ (通码在F0之后)。这套扫描码集在 IBM AT 机上也有效。
+
+ / set 3, each key sends one make scan code and two break scan
+ codes bytes (F0 followed by the make code) and no keys are
+ altered by Shift/Alt/Ctrl keys.
+ 第三套扫描码集,每个键发送一个通码扫描码和两个断码扫描码字节
+ (通码在F0之后)并且键位不随 Shift/Alt/Ctrl 等键的使用而改变。
+
+ / typematic scan codes are the same as the make scan code
+ “非机器自动连续打印的”扫描码和通码扫描码是相同的。
+
+ - Some Tandy 1000's do not handle Alt key combinations when multiple
+ shift keys are pressed. The Alt-Shift-H combination loses the Alt.
+ 一些 Tandy 1000 机器在多重组合键的 shift 键被按下时不能处理 ALT 键。
+ 使用键组合 Alt-Shift-H 时会丢失 ALT 键。
+
+ - extended keys like (F11, F12) can only be read with systems that
+ have extended keyboard BIOS support (or INT 9 extensions); to
+ read these special keys on these systems INT 16,10 must be used
+ 扩展键比如(F11,F12)等只能在具有 BIOS 键盘扩展支持(或 INT 9 扩展)
+ 的系统上被读取。用INT16读取这些系统上的特别的键时,必须使用10号功能 。
+
+
+******************************************************************************
+*** GRLDR Error messages ***
+******************************************************************************
+ GRLDR 错误提示信息
+
+1. Missing MBR-helper.
+ 缺少主引导辅助记录。
+
+ 紧接在主引导记录后的辅助功能程序不见了,或者是它已经被病毒或 Windows
+ XP/Vista等删除了。
+
+ 运行 bootlace.com 工具来解决这个问题。
+
+2. Buggy BIOS!
+ 缺陷太多的BIOS!
+
+ 你的 BIOS 太糟糕了。它甚至不能支持 INT 13/AH=8 。
+
+ 除了升级你的 BIOS 没有办法解决。未来,缺陷多的 BIOS 将会很常见而且
+ 会对 grub4dos 造成很多问题。
+
+3. This partition is NTFS but with unknown boot record. Please install
+Microsoft NTFS boot sectors to this partition correctly, or create an
+FAT12/16/32 partition and place the same copy of GRLDR and MENU.LST there.
+此分区系统是 NTFS 但包含未知的引导记录。请安装正确的微软 NTFS 引导扇区到
+这个分区,或者建立一个FAT12/16/32的分区并将GRLDR 及MENU.LST 的相同的备份
+文件放到那里。
+
+ The boot record was changed or erased by Microsoft Windows XP Service
+ Pack 2.
+ 引导记录已经被微软 Windows XP Service Pack 2 改变或删除。
+
+ You may install the old boot record introduced with the original clean
+ Windows 2K/XP. As another solution, you may create an FAT partition
+ for your system, and copy GRLDR and your MENU.LST to its root dir.
+ 你可以用原来的引导记录来安装,以清理掉Windows 2K/XP的记录。另一个解决办
+ 法是,你可以在系统上建立一个FAT分区,并且将GRLDR 和你的MENU.LST复制到它
+ 的根目录。
+
+ While the startup code of grldr might fail to load GRLDR in NTFS
+ partitions, it always successfully loads GRLDR in FAT partitions(and
+ even in ext2/ext3 partitions).
+ 在NTFS分区grldr的自举代码在加载GRLDR时可能会失败,但在FAT分区(甚至在
+ ext2/ext3分区)它总能成功加载 GRLDR 。
+
+ Note that NTLDR only loads the startup code of grldr(i.e., the leading
+ 16 sectors of grldr), not the whole grldr file.
+ 注意 NTLDR只能加载grldr的自举代码(即,grldr开头的16个扇区),而不能将
+ 整个grldr载入。
+
+
+ Thus, C:\GRLDR must exist(here C: can be NTFS), since it is used for
+ BOOT.INI and NTLDR. If C: is NTFS, X:\GRLDR should exist as well,
+ where X: stands for a certain FAT partition.
+ 因此,自从它用于 BOOT.INI 和 NTLDR 以来 ,C 盘根目录下必须存在有GRLDR
+ (这里的C盘可以是 NTFS 文件系统)。
+
+
+
+******************************************************************************
+*** Known BIOS bugs ***
+******************************************************************************
+ 已知的BIOS 缺陷
+
+1. 一些较新的 Dell 机不能支持int13/AH=43h 。当你尝试对仿真磁盘进行写访问时,
+ 可能会遭遇失败。
+
+ 注意:这个缺陷非常严重!老的安装方法"root+setup" (在实模式的grub环
+ 境中)使用INT13将stage2文件写入第一扇区。在这些有缺陷的DELL机上通过
+ LBA 模式来访问 stage2 文件时将会失败。
+
+2.一些有缺陷的BIOS不能引导启动光盘映像文件(见前面)。(虚拟机qemu 能良好的引导)
+
+3.在DOS下运行GRUB.EXE时,一些较新的 Dell 机激烈地破坏那些硬件中断请求的中断向量,
+ 而使得机器会失去响应 。你可以尝试用BADGRUB.EXE来再试一次。
+
+4.有报告称,通过Linux中的kexec启动GRUB.EXE后,一些BIOS将功能异常。报告称一些
+ 机器会死机,而另一些不能访问USB驱动器。
+
+******************************************************************************
+*** Known Problems ***
+******************************************************************************
+ 已知问题
+1. 在 Windows 9x/Me的DOS窗口运行GRUB.EXE时可能会死机,特别是在这些系统
+ 使用USB的时候。在Linux下通过KEXEC运行GRUB.EXE时,你也可能碰到同样的
+ 问题。
+
+注意: 你不能在已进入保护模式的Win 9x 中运行GRUB.EXE,那可能会死机;作为变
+ 通,你可以执行“重启并进入MS-DOS模式”选项来达到运行 GRUB.EXE 的目
+ 的,这很安全。
+
+2. 默认的chainloader动作将保持 A20 的状态。一些有缺陷的 DOS 扩展内存管理软
+ 件可能会令机器死掉。你可以在chainloader命令行中使用--disable-a20选项
+ 然后再试一次。至少,你应当避免使用那些有缺陷的内存管理软件。
+
+3. THTF BIOS L4S5M Ver 1.1a(dated 2002-1-10) has a buggy int15 which
+ causes hang at the boot of a multi boot kernel(memdisk for example).
+ OEM签名为清华同方,主板为精英L4S5M, BIOS版本1.1a(日期 2002-1-10)
+ 的机器上,其 int15 含有缺陷,当它启动一个多重引导核心时,会失去响应。
+ (比如使用syslinux的memdisk时)
+
+4. 在天汇标准中文系统中,较新的GRUB.EXE不能运行。
+ 总之,在具有反跟踪措施的内存驻留程序的系统下GRUB.EXE不再运行。
+
+******************************************************************************
+*** List of binary files and their corresponding source files ***
+******************************************************************************
+ 二进制文件及对应的源代码文件列表
+
+binary file main source file other included source or binary files
+二进制文件 源代码主文件 包含的其他源代码或二进制文件
+------------- ---------------- -------------------------------------
+
+bootlace.com bootlacestart.S bootlace.inc, grldrstart.S
+
+grldr grldrstart.S pre_stage2(binary, See note below)
+
+grldr.mbr mbrstart.S grldrstart.S
+
+grub.exe dosstart.S pre_stage2(binary, See note below)
+
+hmload.com hmloadstart.S
+
+-----------------------------------------------------------------------------
+注意:pre_stage2 是GNU GRUB的主体程序,它以二进制格式被简单的添加到grldrstart
+ 及dosstart部分,形成我们的grldr和grub.exe 。
+
+注意:GRUB (无.exe后缀)在Linux下是一个静态链接的 ELF 格式的可执行文件,它
+可以被GRUB Shell正常调用。GRUB Shell 是一个启动管理软件,但并不是一个引导装
+载器(boot 命令在GRUB Shell里不能执行)。GRUB.EXE (通过KEXEC)能作为一个引
+导装载器直接在 Linux 下使用。
+
+******************************************************************************
+*** Memory Layout for Quiting to DOS from GRUB.EXE ***
+******************************************************************************
+ GRUB.EXE 返回 DOS 时的内存布局
+
+使用 quit 命令实现返回到DOS,是在GRUB.EXE是从DOS启动的情况下。
+
+1.在GRUB.EXE 将控制权移交给 pre_stage2 之前,它将复制 640 kb的常规内存到
+ 物理地址0x200000 (即,2 M)处,并将立即写入4 字节的长整数到常规内存备
+ 份区之后:
+ At 0x2A0000: 0x50554B42, it is the "BKUP" signature.
+ 0x50554b42, 它是“BKUP”的签名 。
+
+ At 0x2A0004: Gate A20 status under DOS: non-zero means A20 on;
+ zero means A20 off. Update: A20 always on, see below.
+ DOS下的A20地址线门状态:非零表示A20开启;零表示A20
+ 地址线关闭。更新:A20 始终开启,参见后面。
+
+ At 0x2A0008: high word is boot-CS, low word is boot-IP. The quit
+ command uses this entry point to return to DOS.
+ 高字节是引导的代码段段地址,低字节是引导的指令指针值。
+ 退出命令 quit 使用这个入口点返回DOS。
+
+ At 0x2A000C: CheckSum: the sum of all long integers in the memory
+ range from 0x200000 to 0x2A000F is 0.
+ 校验和:内存范围从0x200000 到 0x2A000F的所有长整数的
+ 和为 0 。
+
+2.如果上述内存结构被某个grub命令所破坏,quit命令将发出一条错误提示信息而拒绝从grub中返回DOS。
+
+3.由于GRUB可能破坏扩展内存,在DOS下你最好避免在GRUB.EXE运行前使用扩展内存。
+
+4. Gate A20 will be enabled by GRUB.EXE. Hopefully this would hurt nothing.
+ GRUB.EXE将开启A20 地址线。真希望这不会危及任何东西。
+
+******************************************************************************
+*** Memory usage in conventional/low memory area ***
+******************************************************************************
+ 常规内存/低端内存空间的内存使用
+
+1. boot.c, fsys_reiserfs.c: 8K below 0x68000.
+
+2. fsys_ext2fs.c, fsys_minix.c: 1K below 0x68000.
+
+3. fsys_jfs.c: 4K + 256 bytes below 0x68000.
+
+4. fsys_reiserfs.c: 202 bytes at 0x600.
+
+5. fsys_xfs.c: 188 bytes at 0x600.
+
+6. fsys_xfs.c: (logical block size) bytes below 0x68000.
+
+7. geometry tune: 0x50000 - 0x5ffff.
+
+******************************************************************************
+*** Command-line Length about GRUB.EXE ***
+******************************************************************************
+ 关于GRUB.EXE的命令行长度
+
+GRUB.EXE 可以通过CONFIG.SYS中的DEVICE命令来启动:
+
+ DEVICE=grub.exe [--config-file="FILENAME_OR_COMMANDS"]
+
+1. 如果GRUB.EXE是被DEVICE命令调用而且FILENAME_OR_COMMANDS 参数是一个由分号分
+ 隔的grub命令集合,那么FILENAME_OR_COMMANDS可以接近4 KB长 ----很吃惊?但这是
+ 事实!MS-DOS 7及以上版本即使允许更长的行,但看起来4 KB对GRUB.EXE足够了。
+ 当我们希望将一个大菜单嵌入到命令行时,这是非常有用的。注意 grldr 还不支持
+ 任何命令行参数。
+
+2. 如果GRUB.EXE是被INSTALL命令调用,那么选项长度的限制是80个字符(包括开头的
+ --config-file= 这部分)。超出的话可能会立即将MS-DOS挂起。
+
+3. 如果GRUB.EXE是被SHELL命令调用,那么选项长度的的限制是126个字符(包括开头的
+ --config-file= 这部分)。超出的话虽然不会将 MS-DOS 挂起,但命令行将被截短。
+ 这和 DOS 控制台或批处理文件中命令的限制是一样的。
+
+4. DOS编辑器EDIT不支持一行4KB的长度。所以请使用其他编辑器,例如,vi for Linux 。
+
+5. DEVICE=GRUB.EXE 这一行可以和其他的DEVICE命令同时使用,如DEVICE=HIMEM.SYS
+ 及DEVICE=EMM386.EXE等。配置命令里的GRUB.EXE所在行必须出现在EMM386.EXE所在
+ 行的前面,以避免因EMM386而冲突。
+ 更新 :从0.4.2版本起,GRUB.EXE在EMM386.EXE加载后,仍然可以运行。
+
+6. 在以上提到的任何情况下,你都可以通过quit命令返回到DOS 。
+
+7. 命令行菜单的内存占用:4KB的命令行菜单起始于物理地址0x0800而终止于0x17ff。
+
+******************************************************************************
+*** New Syntax for the DEFAULT/SAVEDEFAULT Commands ***
+******************************************************************************
+ DEFAULT 及 SAVEDEFAULT 命令的新语法
+
+相对于原来的用法"default NUM"及"default saved "增加的部分,现在有一个新用
+法"default FILE",象这样:
+
+ default (hd0,0)/default
+
+注意参数FILE必须是一个有效的DEFAULT文件格式。一个简单的DEFAULT文件就包含
+在发行版中。你可以复制它到你希望的地方,但是你应该避免手工修改它的大小。
+DEFAULT文件可以按以下方法使用:
+(1) 首先,你要复制一个格式有效的default文件到你运行的系统上。
+
+(2) 其次,你要使用GRUB中的"default FILE"命令来表明是使用这个FILE作为我们新
+ 的预设文件,以便"savedefault"命令执行时写入它。
+
+
+(3) 然后,你可以使用"savedefault"命令来把想要的入口数字保存到这个新的预设文
+ 件中。
+
+(4) 下次启动时,你可以通过使用类似上面第二步骤中的"default FILE"一样的
+ 命令来读取已保存的入口数字。
+
+同时,SAVEDEFAULT 命令增加了一个选项 --wait=T ,象这样:
+
+ savedefault --wait=5
+
+如果`--wait=T' 选项被指定而且 T 非零,savedefault 命令将在它就要写入磁盘
+前,给使用者一个提示信息。
+
+这里是一个简单的menu.lst文件:
+
+#--------------------begin menu.lst---------------------------------------
+color black/cyan yellow/cyan
+timeout 30
+default /default
+
+title find and load NTLDR of Windows NT/2K/XP
+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
+find --set-root /io.sys
+chainloader /io.sys
+savedefault --wait=2
+
+title floppy (fd0)
+chainloader (fd0)+1
+rootnoverify (fd0)
+savedefault --wait=2
+
+title find and boot Linux with menu.lst already installed
+find --set-root /sbin/init
+savedefault --wait=2
+configfile /boot/grub/menu.lst
+
+title find and boot Mandriva with menu.lst already installed
+find --set-root /etc/mandriva-release
+savedefault --wait=2
+configfile /boot/grub/menu.lst
+
+title back to dos
+savedefault --wait=2
+quit
+
+title commandline
+savedefault --wait=2
+commandline
+
+title reboot
+savedefault --wait=2
+reboot
+
+title halt
+savedefault --wait=2
+halt
+#--------------------end menu.lst---------------------------------------
+
+注意 1:预设文件 DEFAULT 必须是存在的而且具有和前面所述一样严格的格式。
+
+注意 2:在一个有 MENU.LST 文件的相同目录中的 DEFAULT 文件将和 MENU.LST 文
+ 件一起被联合调用
+
+注意 3:即使没有出现`default'命令,被关联的 DEFAULT 文件也将自动生效。
+
+注意 4:就在菜单文件(诸如,GRLDR 的关联文件MENU.LST,或是通过
+ `grub.exe --config-file=(DEVICE)/PATH/YOUR_MENU_FILE'来指定的,
+ 或是通过grub的`configfile'命令来指定的)取得控制权之前,它的
+ 关联文件DEFAULT只要出现就会被使用,直到遇见了一个明确的`default'命令。
+
+******************************************************************************
+*** The New `cdrom' Command Syntax ***
+******************************************************************************
+ 新的 `cdrom' 命令的语法
+
+1. 初始化ATAPI接口的CDROM设备:
+
+ grub> cdrom --init
+
+ 显示找到的atapi接口的cdrom光驱的数目:参数为 atapi_dev_count
+
+2. 停止ATAPI接口的CDROM设备:
+
+ grub> cdrom --stop
+
+ 这会设置参数atapi_dev_count为0 。
+
+3. 增加搜索atapi cdrom设备的IO端口。例如:
+
+ grub> cdrom --add-io-ports=0x03F601F0
+
+ 在执行`cdrom --init'以及`map --hook'命令后,cdrom光驱可以通过(cd0),
+ (cd1), ...等设备号来访问。
+
+注意 1:如果系统不完全支持ATAPI CD-ROM 规范,在你试图访问这些(cdX)设备时将
+ 遭遇失败。
+
+注意 2:在执行一条`cdrom --stop'命令后,你应当使用一条`map --unhook'命令。当然,
+ 你可以再次使用`map --hook'命令,假如还有驱动器被映射着的话。
+
+注意 3:在增加IO端口之后,你应当接着`cdrom --init'执行一条`map --unhook'命令然
+ 后再接着执行一条`map --hook'命令。
+
+ 默认将使用这些端口来搜索cdrom设备(因此不需要再添加了)
+ 0x03F601F0, 0x03760170, 0x02F600F0,
+ 0x03860180, 0x6F006B00, 0x77007300.
+
+注意 4:BIOS可能已经提供了cdrom 的接口。它的设备号总是(cd)。在 `cdrom --init'
+ 和 `map --hook' 执行后,我们可以有我们自己有效的(cd0), (cd1), ...等设备。
+
+注意 5:你可以用块列表的方式去访问(cd)和 (cdX) 等设备。例子:
+
+ cat --hex (cd0)16+2
+
+ cdrom 扇区是大小为 2048 字节的大扇区。
+
+注意 6:我们的iso9660文件系统驱动具有Rock-Ridge扩展支持,但没有Joliet扩展支持。
+ 因此当你试图在一个使用Joliet扩展的光盘上读取文件时,可能遭遇失败。
+
+注意 7:现在,(cd)及 (cdX)设备可以被引导了。示例:
+ chainloader (cd)
+ boot
+
+ chainloader (cd0)
+ boot
+
+ chainloader (cd1)
+ boot
+
+ 在chainloader (cd)之前,你必须保证已经可以访问该设备。
+
+******************************************************************************
+*** About the New `setvbe' Command ***
+******************************************************************************
+ 关于新命令 `setvbe'
+
+Gerardo Richarte contributed the `setvbe' code and the following comment:
+Gerardo Richarte 先生提供了`setvbe'的源码,下面是注释:
+
+ New command is `setvbe', and can be used to change the video mode
+ before executing the kernel.
+ `setvbe'是一个新的命令,它可以在系统核心运行前被用来改变视频模式。
+
+ For example, you can do
+ 例如,你可以执行
+
+ setvbe 1024x768x32
+
+ this will scan the list of available modes and set it, and
+ automatically append a `video=' option to each subsequent kernel
+ command-line. The appended `video=' option is like this:
+ 这会扫描出其可用模式的列表并设置它,并且自动在随后的每个kernel命令
+ 行中增加一个选项`video='。增加的选项`video='类似于:
+
+ video=1024x768x32@0xf0000000,4096
+
+ where 0xf0000000 is the video framebuffer address as reported by vbe,
+ and 4096 is the size of a scanline in bytes (also as reported by vbe).
+ 这里的0xf0000000是vbe报告的视频模式的帧缓存地址,而4096是扫描线的字节大小。
+
+ This is really useful if you want to give some graphics support to your
+ OS, but you don't want to implement any video functionality other than
+ writing a pixel to video memory.
+ 如果你想在你的操作系统上获得一些图形支持,但是除了只写一个像素点到视频内
+ 存而外,你却不想使用任何视频功能,这确实有用。
+
+
+******************************************************************************
+*** About the DOS utility `hmload' ***
+******************************************************************************
+ 关于DOS工具`hmload'
+
+此程序由 John Cobb 先生编写(伦敦玛丽皇后学院)。
+
+John Cobb先生的注释:
+
+ To make use of the ram drive feature I wrote a program `hmload' to load
+ an arbitrary file to an arbitrary address in high memory. The program
+ is not very sophisticated and relies on XMS to turn on the A20 line.
+ (Also one must be very careful to steer clear of any areas of memory
+ already in use).
+ 为了使用内存驱动器的特性,我写了一个程序“hmload”来将任意文件加载
+ 到高端内存的任意地址。这个程序不是十分深奥但依赖在XMS 里开启A20地址线。
+ (并且必须将那些已经使用了的任何内存空间精心的清理干净)
+
+ Under Linux we generated a disk image `dskimg' (with the kernel and
+ Initrd and a partition table).
+ 我们在linux下生成一个磁盘映象“dskimg”(包含kernel和initrd及一个分区表)。
+
+ Using this our boot procedure looked something like this:
+ 我们的引导过程看起来是下面这样:
+
+ hmload -fdskimg -a128
+ fixrb
+ <unload network drivers>
+ grub
+
+ map --ram-drive=0x81
+ map --rd-base=0x8000000
+ map --rd-size=0x400000
+ root (rd,0)
+ kernel /kernel root=/dev/ram0 rw ip=bootp ramdisk_size=32768 ...
+ initrd /initrd
+ boot
+
+See http://sysdocs.stu.qmul.ac.uk/sysdocs/Comment/GrubForDOS/ for details.
+详情参阅 http://sysdocs.stu.qmul.ac.uk/sysdocs/Comment/GrubForDOS/
+
+Update 2007-12-05:
+更新 2007-12-05 :
+
+ Now the MAP command can handle gzipped (rd) image. One can use this
+ feature with the hmload utility. For example,
+
+ step 1. Load the gzipped image under DOS at a relatively low address:
+ 步骤 1. 在DOS的相对较低的地址处加载gzip压缩映像:
+
+ hmload -fdskimg.gz -a16
+
+ step 2. Unload network drivers.
+ 步骤 2 卸载网络驱动器
+
+ step 3. Run GRUB.EXE.
+ 步骤 3. 运行 GRUB.EXE
+
+ step 4. At the grub prompt, run these commands:
+ 步骤 4. 在grub 命令提示符下,执行下列命令:
+
+ map --rd-base=0x1000000 # set rd-base address to be 16M
+ # 设置rd-base地址为16M
+
+ map --rd-size=<the accurate size of dskimg.gz in bytes>
+ < dsking.gz 精确的字节数 >
+
+ map (rd)+1 (hd0) # This will decompress (rd) and place
+ # the decompressed image at the top end
+ # of the extended memory. The (rd)+1
+ # here has special meaning and stands
+ # for the whole (rd) device. You must
+ # use (rd)+1 instead of (rd).
+ # 这会将(rd)解压并且把解压后的映像放到扩展内存的顶端。
+ # 这里的(rd)+1具有特定的含义而且将整个(rd)设备放到了顶端。
+ # 这里你必须使用 (rd)+1 来替代(rd)。
+ map --hook
+ root (hd0,0)
+ kernel /kernel root=/dev/ram0 rw ip=bootp ramdisk_size=32768 ...
+ initrd /initrd
+ map --unhook
+ map (hd0) (hd0) # Delete the map; this is needed.
+ # 删除map映射;这是需要的
+ boot
+
+
+******************************************************************************
+*** Notes on the use of stack ***
+******************************************************************************
+ 关于堆栈的注释
+The protected-mode and real-mode stack are merged at physical address 0x2000.
+保护模式与实模式的堆栈被合并到物理地址 0x2000 处。
+
+All functions should use at most 2K stack space(0x1800-0x2000). So each
+subfunction should use as little stack as possible to avoid stack-overflow.
+所有的功能应当最多使用 2K 的堆空间 (0x1800到0x2000)。因此各个子功能部分
+应当使用尽可能小的堆以避免堆栈溢出。
+
+Don't use recursive functions because they could expend too much stack space.
+不要使用递归功能,因为他们会消耗太多的堆空间。
+
+The original protected mode stack at 0x68000(expand-down) is free now and can
+be reused for any purposes.
+原来位于0x68000(向下延伸)的保护模式的堆现在不再使用,并且它可以被用于任何目的。
+
+
+******************************************************************************
+*** A bug was found in the CDROM driver ***
+******************************************************************************
+ CDROM 驱动器上发现的缺陷
+
+似乎 cdrom 应当连接在IDE控制器的主设备通道上。
+
+如果 cdrom 是从设备,读取cdrom扇区的驱动将失败。希望有人能解决这个问题。
+
+******************************************************************************
+*** BIOS and the (cd) drive ***
+******************************************************************************
+ BIOS 与 (cd)驱动器
+
+当BIOS启动一个非模拟模式的可启动的CD-ROM设备时,它会分配一个BIOS驱动器号给这个
+CD设备。如果这个CD-ROM使用grldr或stage2_eltorito作为启动映像文件,那么GRUB可以
+通过BIOS分配的驱动器号来访问这个CD-ROM 媒体。
+
+BIOS 会分配一个驱动器号给非模拟模式启动的CDROM 设备,即使这个CDROM 是不能启动的。
+虚拟机QEMU就是这样处理的。在引导的时候,GRUB4DOS将搜索那些由BIOS分配的,驱动器号
+从0x80至0xFF的,可能存在的非模拟模式的CDROM 驱动器。 所以,如果BIOS为CDROM提供了
+扩展int13(功能号41h-4eh)接口,那么这个(cd)设备自动在GRUB4DOS 中有效。
+
+
+******************************************************************************
+*** The way of disk emulation changed greatly ***
+******************************************************************************
+ 磁盘仿真方式发生了巨大变化
+
+磁盘仿真方式自从0.4.2正式版之后已经发生了巨大变化。在使用磁盘仿真功能时候,
+请不要将较新的版本和旧的版本混合使用。
+
+较新的版本不会自动卸载之前已经在grub4dos环境建立的仿真盘。GRUB.EXE 的一个
+很古老的版本,在将控制权移交给grub主程序(即,pre_stage2)前,将会自动释放
+先前建立的仿真盘。
+
+
+******************************************************************************
+*** FreeDOS EMM386 v2.26 (2006-08-27) VCPI problem ***
+******************************************************************************
+ FreeDOS EMM386 版本2.26 (2006-08-27) VCPI服务的问题
+
+The VCPI function "AX=DE0Ch - Switch From Protected Mode to V86 Mode" of
+FreeDOS EMM386 v2.26 was not implemented properly(it always hangs). As an
+alternative, you can use Microsoft's EMM386 instead.
+FreeDOS 的 EMM386 版本2.26 中的VCPI服务,“功能号 AX=DE0Ch-选择从
+保护模式到虚拟8086模式”,不能正确的执行(总是死机)。选择之一是,
+你用微软的 EMM386 来代替它。
+
+Even while emm386 is running, grub.exe can be started. But if you try to quit
+to DOS from grub4dos by using the `quit' command, the VCPI function DE0C will
+be called. If EMM386 is of Microsoft, everything goes ok. If EMM386 is of
+FreeDOS, the machine will hang.
+即使emm386已经运行,grub.exe也能够启动。但是如果你试图从grub4dos中通过`quit'
+命令来返回DOS,VCPI 服务的DE0C 号功能将被调用。如果是微软的 EMM386 ,接下来的
+一切都很正常 。而如果是FreeDOS 的 EMM386 ,那么将会死机。
+
+******************************************************************************
+*** New options for map were added ***
+******************************************************************************
+ map 命令的新增选项
+
+随着0.4.2 最终版的发布,map 命令有了两个新选项。它们是--safe-mbr-hook=SMH
+以及--int13-scheme=SCH 。它们都和Win9x环境下(尽可能稳定的)使用磁盘仿真有关。
+
+SMH参数可以是0或1这个两个值之一。作为默认,SMH参数为1 。如果你在Win9x中遇到
+磁盘仿真的问题,你可以插入这样一行到`boot'命令之前,
+
+ map --safe-mbr-hook=0
+
+然后再试一次。
+
+SCH在使用时,也可以取0或1之一的值。作为默认,SCH为1 。如果你在Win9x中遇到
+磁盘仿真的问题,你可以插入这样一行到`boot'命令之前,
+
+ map --int13-scheme=0
+
+然后再试一次。
+
+顺便提醒一下。类似于--safe-mbr-hook和--int13-scheme ,MAP命令中有几个其他
+选项可被用以设置全局变量。
+
+ map --floppies=M
+
+其中的M 可以是0 , 1 或者2 。MAP 将把一个恰当的M 值设置在地址0040:0010 处。
+
+ map --harddrives=N
+
+其中的N 可以是从0到127之间的值。MAP将把N 值设置在0040:0075处。
+
+ map --memdisk-raw=RAW
+
+其中的RAW默认为1 。如果RAW=0,将通过`int15/ah=87h'访问内存驱动器。
+
+ map --ram-drive=RD
+
+其中RD默认是0x7F的软驱号。如果随机内存驱动器是一个硬盘驱动器镜像(第一扇区
+含有分区表),那么你可以将 RD 设置为大于或等于0x80并且小于0xA0之间的值。
+如果是一个光盘镜像,那需要设置为大于或等0xA0并且小于0xFF之间的值。
+
+ map --rd-base=ADDR
+
+ map --rd-size=SIZE
+
+其中的 ADDR 指定出内存映像的物理基地址。SIZE指定出内存映像的字节数大小。ADDR
+默认为0 。SIZE的默认值也是0 ,但是值为0 表示4 GB ,而不是零字节长的磁盘。随机
+内存驱动器可以在 GRUB 环境中通过使用 (rd) 设备来访问。
+
+
+******************************************************************************
+*** About the new map option --in-situ ***
+******************************************************************************
+ 关于 map 的新选项 --in-situ
+
+--in-situ被使用于硬盘驱动器映像或者是硬盘驱动器分区。通过--in-situ ,我们可以把
+一个逻辑分区象征性的作为一个主分区来使用。
+
+--in-situ 的映射是整个驱动器的映射。它只虚拟出分区表和 DBR 上的BPB里的隐藏扇区数。
+
+尽管磁盘仿真在 win9x 中可能会遇到的各种问题,但在win9x中,in-situ的映射却运行得很好。
+
+注意 --in-situ 的映射不会改变真实的分区表。
+
+示例:
+ map --in-situ (hd0,4)+1 (hd0)
+
+******************************************************************************
+*** The PARTNEW Command Syntax ***
+******************************************************************************
+ PARTNEW 命令的语法
+
+除了上述章节的仿真方法而外,你也可以替代选择用 PARTNEW 来建立一个新的主分区。
+PARTNEW可以为逻辑分区生成一个新的主分区项(在分区表中)。
+
+例如,
+ partnew (hd0,3) 0x07 (hd0,4)+1
+
+这里的(hd0,4)+1 代表了整个(hd0,4)分区。这条命令将建立一个分区类型为 0x07
+的新的主分区(hd0,3),并且它的内容(即数据)和逻辑分区(hd0,4)一样。
+
+就像整个逻辑分区时的情况一样,一个连续的分区映像文件也可以用在PARTNEW 命令中:
+
+ partnew (hd0,3) 0x00 (hd0,0)/my_partition.img
+
+The type 0x00 indicates a type-auto-detection of the image MY_PARTITION.IMG.
+The above command will create a new primary partition (hd0,3) with a proper
+type and with contents/data being exactly that of the contiguous file
+(hd0,0)/my_partition.img.
+这个 0x00 类型表示这个 MY_PARTITION.IMG 映像文件的分区类型由自动检测确定。
+上面的命令将建立一个类型恰当的新的主分区(hd0,3),并且使用这个连续的
+ (hd0,0)/my_partition.img 文件中的全部内容(数据)作为它的内容(数据)。
+
+PARTNEW 将自动修正 BPB 中的“隐藏扇区数”并且这个修改是永久的。而且PARTNEW
+修改分区表也是永久的。
+
+除了建立分区表项外,PARTNEW也可以用来删除(抹掉,擦除)一个分区表项。例如,
+
+ partnew (hd0,3) 0 0 0
+
+这样,主引导记录中最后一个分区表项将被清空。通常,你可以用"partnew PARTITION 0 0 0"的格式来
+抹掉其分区表项,但是已经存储在这个分区中的数据不被影响。
+
+******************************************************************************
+*** Newly implemented operators `&&' and `||' ***
+******************************************************************************
+ 最近实现的运算符 `&&' and `||'
+
+它的实现非常简单。它不处理嵌套的运算符。
+
+`&&'的用法:
+ command1 && command2
+说明 :
+ 如果 command1 返回 真,那么 command2 将执行
+
+`||'的用法:
+
+ command1 || command2
+
+说明 :
+ 如果 command1 返回 假,那么 command2 将执行
+
+示例:
+ is64bit && default 0
+ is64bit || default 1
+
+注意:
+ 1.只要返回值非0都是真,否则是假.比如
+ read 0x60000 && command2
+ command2有可能会不被执行.因为内存地址0x60000的值有可能是0.
+ 一般情况下命令执行失败时总是返回0(假).所以可以用于判断命令执行的结果.
+ 2.在菜单中使用这些符号会忽略错误检测,这是一个很有用的功能.
+ 比如:
+ find --set-root /file.ext
+ 在菜单中使用时可能会返回文件未找到的错误并停止执行.必要的话我们可以使用
+ find --set-root /file.ext || echo file not found.
+ 这个命令在菜单中使用会显示find not found,但不停止执行.
+
+更新1: 最新版本可以使用嵌套,例子:
+ find --set-root /file1 || find --set-root /file2 || find --set-root /file3
+ 如果没有找到file1就继续找file2,还是没有找到就找file3,如果还是没有找到将会失败
+
+******************************************************************************
+*** Three new commands is64bit, errnum and errorcheck ***
+******************************************************************************
+ 三个新命令 is64bit, errnum 和 errorcheck
+
+is64bit 和 errnum 命令分别用来检索是否是 64 位的系统和错误值。
+
+errcheck off|on
+
+errorcheck(错误检查)命令控制着错误是否被处理。默认错误检查是开启的 ,即在
+错误发生时命令脚本将停止执行。而假如错误检查是关闭的,那么脚本将一直执行到 boot
+命令。一条 boot 命令可以把错误检查转变为开启。
+
+******************************************************************************
+*** Use numeric keys to select a menu entry ***
+******************************************************************************
+ 使用数字键来选择菜单项
+
+例如,如果你想要选择第25项菜单项,你可以先按下数字键2 之后再按下 5 。
+
+******************************************************************************
+*** Use the INSERT key to debug step by step at startup ***
+******************************************************************************
+ 启动时使用 INSERT 键逐步的调试
+
+在一些有缺陷机器上进入 grub4dos 环境时可能会失败。可能是意外的死机或者重启。
+在启动时尽可能快的按下 INSERT 键,你就可能获得进入单步启动进程的机会而看到它最
+多能运行到哪里,然后请上报这些bug截图 。
+
+******************************************************************************
+*** The debug command syntax has been changed ***
+******************************************************************************
+ debug 命令的语法已经改变
+
+DEBUG 命令现在可以用来控制冗余的命令输出:
+ debug [ on | off | normal | status | INTEGER ]
+
+0 或者 off 指定为静默模式
+
+1 或者 normal 指定为标准模式
+
+从 2 到 0x7fffffff 或者 on 指定为冗余模式
+(调试报告BUG时请使用该模式,可以获得更详细的信息)
+
+******************************************************************************
+*** GRUB4DOS and Windows Vista ***
+******************************************************************************
+ GRUB4DOS 与 Windows Vista
+
+首先,使用以下命令来建立一个启动项:
+
+ bcdedit /create /d "GRUB for DOS" /application bootsector
+
+执行结果看起来类似这样:
+The entry {05d33150-3fde-11dc-a457-00021cf82fb0} was successfully created.
+
+其中长字串{05d33150-3fde-11dc-a457-00021cf82fb0} 是这个项的数字标识{id}。
+
+然后,通过以下命令来设置启动参数:
+ bcdedit /set {id} device boot
+ bcdedit /set {id} path \grldr.mbr
+ bcdedit /displayorder {id} /addlast
+请用先前的命令所返回的实际的id 来替换掉 {id}。
+
+最后,复制 GRLDR.MBR 到 你引导分区的根目录下,并且将 GRLDR 和 menu.lst 复制到
+任意一个 FAT16/FAT32/EXT2/NTFS 的分区根目录下。
+
+注意:引导分区必须是含有 BOOTMGR 的激活的主分区。
+
+LianJiang 先生写出了一个脚本来自动化的完成这个麻烦的工作:
+
+ @echo off
+ rem by lianjiang
+ cls
+ echo.
+ echo Please run as administrator
+ echo.
+ pause
+ set gname=GRUB for DOS
+ set vid=
+ set timeout=5
+ bcdedit >bcdtemp.txt
+ type bcdtemp.txt | find "\grldr.mbr" >nul && echo. && echo BCD entry existing, no need to install. && pause && goto exit
+ bcdedit /export "Bcd_Backup" >nul
+ bcdedit /create /d "%gname%" /application bootsector >vid.ini
+ for,/f,"tokens=2 delims={",%%i,In (vid.ini) Do (
+ set vida=%%i
+ )
+ for,/f,"tokens=1 delims=}",%%i,In ("%vida%") Do (
+ set vid={%%i}
+ )
+ echo %vid%>vid.ini
+ bcdedit /set %vid% device boot >nul
+ bcdedit /set %vid% path \grldr.mbr >nul
+ bcdedit /displayorder %vid% /addlast >nul
+ bcdedit /timeout %timeout% >nul
+ if exist grldr.mbr copy grldr.mbr %systemdrive%\ /y && goto exit
+ echo.
+ echo Please copy grldr.mbr to %systemdrive%\
+ echo.
+ pause
+ :exit
+ del bcdtemp.txt >nul
+-------------------------------------------------------------------
+更新: Fujianabc 先生指出以下这行
+ bcdedit /set %vid% device boot >nul
+必须更改为
+ bcdedit /set %vid% device partition=%SystemDrive% >nul
+chenall注: 其实没有必要改,使用boot可以获得更好的兼容性.
+-------------------------------------------------------------------
+你还需要自行复制 grldr和menu.lst文件。
+
+注意: 你只需要指定BCD的位置就可以修改另一个操作系统的BCD 启动项:
+ bcdedit /store D:\boot\BCD ...
+
+注意: 执行这些命令需要提高权限,它们必须是“以管理员身份运行”于cmd.exe中。
+
+注意:已有人报告说,即使使用管理员身份,Vista的某些版本也不支持在C盘根目录下建立
+无扩展名的文件。你既可以复制grldr到另外的一个分区来解决这个问题,也可以将 grldr
+重命名,比如为 grub.bin 。如何改名,请参见下节。
+
+******************************************************************************
+*** How to rename grldr ***
+******************************************************************************
+ 怎样重命名 grldr
+
+ grldr 和 grldr.mbr引用引导文件内部的文件名来决定装载哪个文件,所以假如你
+ 想更换它们的名字,那么你也必须要修改那些内嵌在文件内部的设置。你可以使用
+ 辅助程序grubinst 来做到这些,grubinst 可以在以下网址下载到:
+
+http://download.gna.org/grubutil/
+
+ grubinst 能生成自定义的grldr.mbr:
+
+ grubinst -o -b=mygrldr C:\mygrldr.mbr
+
+ grubinst 也能编辑一个既有的 grldr 或 grldr.mbr:
+
+ grubinst -e -b=mygrldr C:\mygrldr
+
+ grubinst -e -b=mygrldr C:\mygrldr.mbr
+
+在这种情况中,你必须使用一个和 grub4dos 版本兼容的grubinst,否则修改将会失败。
+
+ 所以,在命令中通过加载mygrldr来代替grldr ,你可以使用下面的方法之一:
+
+1.使用已定制好的grldr.mbr 来加载 mygrldr 。在这种情况下,你需要修改内嵌在
+ grldr.mbr中的引导文件名。grldr.mbr的名字可以被任意的改变。
+
+2.直接使用mygrldr 。在这种情况下,你需要将 mygrldr 中内嵌的引导文件名改为
+ 一个合适的名字。
+
+注意: 引导文件名必须遵循 8.3 文件名规范。
+
+******************************************************************************
+*** GRLDR as PXE boot file ***
+******************************************************************************
+ GRLDR 作为 PXE 启动文件
+
+GRLDR 可以被用作远程或网络服务器的 PXE 启动文件。(pd) 设备被用于访问服务器上文件。
+当 GRLDR 已经通过网络启动后,它将使用预设菜单作为配置文件。不过,你可以使用
+一条"pxe detect"命令,它的表现是和pxelinux一样的方式。
+
+ * 首先,它将使用设备类型(使用它的 ARP 类型码)和地址来搜索配置文件,全部用
+ 破折号分割的十六进制;例如,对一个以太网(ARP 类型是1)的88:99:AA:BB:CC:DD
+ 地址,它会用文件名01-88-99-AA-BB-CC-DD 来搜索。
+
+ * 其次,它将使用它本地的IP 地址大写字母的十六进制格式(即192.0.2.91 转换为
+ C000025B。)来搜索配置文件。如果文件没有找到,它将去掉一个十六进制数字后再试一次。
+ 最后,它会尝试寻找一个名为 default (小写字母)的文件。
+
+******************************************************************************
+*** PXE device ***
+******************************************************************************
+ PXE 设备
+
+如果使用PXE启动,GRUB4DOS 将建立一个虚拟设备 (pd),可能通过它来访问tftp服务器
+上的文件。你可以使用下面的步骤来设置一个无盘启动环境:
+
+客户端
+你需要从 PXE ROM 上启动。
+
+服务器端
+你需要配置一个dhcp服务器和一个tftp服务器。在dhcp服务器上,使用grldr作为引导文件。
+
+你可能希望为不同的客户端加载一个不同的menu.lst 。GRUB4DOS将在以下位置查找配置文件:
+
+ [/mybootdir]/menu.lst/01-88-99-AA-BB-CC-DD
+ [/mybootdir]/menu.lst/C000025B
+ [/mybootdir]/menu.lst/C000025
+ [/mybootdir]/menu.lst/C00002
+ [/mybootdir]/menu.lst/C0000
+ [/mybootdir]/menu.lst/C000
+ [/mybootdir]/menu.lst/C00
+ [/mybootdir]/menu.lst/C0
+ [/mybootdir]/menu.lst/C
+ [/mybootdir]/menu.lst/default
+
+更新1: 如果/mybootdir/menu.lst 文件存在,将会优先使用,这样可以加快引导速度.
+
+这里,我们假设客户端的网卡mac地址是 88:99:AA:BB:CC:DD ,而ip地址是192.0.2.91 (C000025B)。
+/mybootdir 是引导文件所在目录,例如,如果引导文件是 /tftp/grldr ,那么mybootdir=tftp 。
+
+如果上面的文件都未出现,grldr将使用它的内置的menu.lst 。
+
+这是一个如何访问tftp服务器上文件的menu.lst文件。
+
+ title Create ramdisk using map
+ map --mem (pd)/floppy.img (fd0)
+ map --hook
+ rootnoverify (fd0)
+ chainloader (fd0)+1
+
+ title Create ramdisk using memdisk
+ kernel (pd)/memdisk
+ initrd (pd)/floppy.img
+
+chenall注: 1.你也可以省略(pd)/或者使用(bd)/或()/
+ 这样可以使得一个菜单可以不经过修改就可以用于其它地方的启动.
+
+你可以看到这个 menu.lst 和在普通磁盘上引导的是相似的,你只是需要把象(hd0,0)
+这样的设备用(pd) 来代替。
+
+磁盘设备和 pxe 设备有一些不同点:
+
+1. 你不能把pxe设备上的文件以列表显示。
+更新2: 现在可以列表,但要求服务器上有dir.txt文件,使用以下命令可以创建一个dir.txt文件
+ dir /b>dir.txt
+ 也可以直接使用TFTPD32的服务器,选择自动生成DIR.TXT文件.
+
+2.blocklist 命令不能用于 pxe 设备上的文件。
+
+3.如果你想映射一个pxe服务器上的文件,你必须使用--mem 选项 。
+
+当你使用 chainloader 命令装载一个pxe 设备上的文件时,有一个选项你可以使用:
+
+ chainloader --raw (pd)/BOOT_FILE
+
+选项 --raw 的执行就和--force一样,但是它是一次性将文件装载执行。这可以改善
+一些情况下的执行效率。
+
+你可以使用 pxe 命令来控制 pxe 设备。
+
+1. pxe
+ 如果没有使用任何参数,pxe 命令将显示当前设置。
+
+2. pxe blksize N
+ 设置tftp packet size (传输包)大小。最小值是 512 ,最大值是 1432 。这个参数主要使
+ 用在那些不支持远大于 512 字节包大小的tftp 服务器上。
+
+3. pxe basedir /dir
+ 为tftp 服务器上的文件设置基本目录。如
+ pxe basedir /tftp
+
+ 那么在pxe 设备上的所有文件都和目录 /tftp 相关。例如,(pd)/aa.img
+ 对应于服务器上的 /tftp/aa.img 。
+
+ 基本目录的默认值是引导文件所在目录,例如,如果引导文件是 /tftp/grldr ,
+ 那么默认的基本目录就是 /tftp 。
+
+4. pxe keep
+ 保持 pxe stack。GRUB4DOS的默认退出时自动卸载pxe strack。
+ 如果你希望在引导后继续使用PXE功能,比如用于RIS安装,这时必须使用这个选项.
+
+5. pxe unload
+ 立即卸载 PXE stack。pxe占用了大量的常规内存,某些引导程序可能会无法正常引导。
+ 这时你可以先卸载然后再引导。一个例子:
+ title Linux memtest
+ map --mem /memtest.bin (rd)
+ pxe unload
+ kernel (rd)+1
+ 如果在PXE启动时直接kernel /memtest.bin可能会失败。
+
+
+******************************************************************************
+*** New Feature of Relative Path Support ***
+******************************************************************************
+ 相对路径支持的新特性
+
+使用`root' 或 `rootnoverify'命令来指定`工作目录' 。
+
+例如:
+ root (hd0,0)/boot/grub
+
+这就指定了当前工作目录是(hd0,0)/boot/grub 。因此所有继"/..."之后的文件名将实际
+提交到(hd0,0)/boot/grub/...
+
+也就是说:
+
+ cat /menu.lst
+将等同于
+ cat (hd0,0)/boot/grub/menu.lst
+
+
+******************************************************************************
+*** Notation For The Current Root Device ***
+******************************************************************************
+ 当前根设备的符号
+
+符号`()'可以在访问当前根设备时使用。你可以使用`find --set-root ...'来设置当前根
+设备,但find 命令不能设置根设备的`工作目录'。这时你应该使用`()'在find命令后来设
+置工作目录。
+ root ()/boot/grub
+
+2008-05-01 更新:
+ 现在 FIND 命令也可以设置`工作目录'了。例如:
+
+ find --set-root=/tmp /boot/grub/menu.lst
+
+ 它等同于这一组命令:
+ find --set-root /boot/grub/menu.lst
+ root ()/tmp
+
+******************************************************************************
+*** The new map option --a20-keep-on ***
+******************************************************************************
+ map 新选项 --a20-keep-on
+
+随着0.4.3最终版的发布,map 有了一个新选项 --a20-keep-on ,它跟内存驱动器扇区访
+问后的A20 地址线控制有关
+
+ map --a20-keep-on=0
+
+它必须被使用于"map --hook"命令之前。
+
+作为默认,在INT13 对随机内存的扇区访问之后 A20 将一直开启。如果"map --a20-keep-on=0"
+被使用,那么在INT13 中断调用后的 A20 的状态将和在INT13中断调用前相同。
+
+******************************************************************************
+*** The CDROM emulation (virtualization) ***
+******************************************************************************
+ 光盘仿真(虚拟化)
+光盘仿真有时候又称为 ISO 仿真。这里是个示例:
+ map (hd0,0)/myiso.iso (hd32)
+ map --hook
+ chainloader (hd32)
+ boot
+
+如果myiso.iso 是不连续的并且你有足够的内存,那么要增加一个--mem选项:
+ map --mem (hd0,0)/myiso.iso (hd32)
+ map --hook
+ chainloader (hd32)
+ boot
+
+注意:(hd32) 是一个 grub 驱动器,驱动器号和 (0xA0) 等价。如果一个虚拟驱动器被指
+定为一个大于或等于0xA0 的驱动器号,那么它将被视为是一个光盘。(即,是 2048 字节
+的大扇区)
+
+就像标准的磁盘仿真一样,光盘仿真也(主要)工作于实模式操作系统中。在一个保护模式的
+操作系统核心(例如WinNT/2K/XP/VISTA/LINUX)获得控制后,操作系统一般没有能力通过BIOS
+的int13 来访问虚拟光盘。
+
+DOS/Win9x 的使用者可以用google搜索到 ELTORITO.SYS 然后将它作为虚拟光驱的设
+备驱动使用到CONFIG.SYS 中。
+
+CONFIG.SYS 中 eltorito.sys 的用法举例:
+ device=eltorito.sys /D:oemcd001
+
+对应的可能是放在 AUTOEXEC.BAT中的 MSCDEX 命令:
+ MSCDEX /D:oemcd001 /L:D
+
+由于在 eltorito.sys中发现了一些缺陷,驱动器可能会加载失败。假如你碰到这类问题,
+那么你可以将虚拟光盘的驱动器号从(hd32)更换为(0xFF)然后再试一次。
+
+******************************************************************************
+*** The New Command CHECKRANGE ***
+******************************************************************************
+ 新命令 CHECKRANGE
+
+Checkrang 命令检查一条命令的返回值是否是在指定的值域或排列中。
+
+Usage: checkrange RANGE COMMAND
+用法: checkrange 域 命令
+
+这里是参数 RANGE 的一些示例:
+ 3 是仅包含数字 3 的值
+
+ 3:3 等价于 3
+
+ 3:8 是一个包含数字3, 4, 5, 6, 7, 8的值域
+ 3,4,5,6,7,8 等同于3:8
+ 3:5,6:8 也等同于3:8
+ 3,4:7,8 也等同于3:8
+
+注意:你不能把空格放在值域中。比如:以下是错误的。
+ checkrange 1 2 COMMAND
+
+这里用一个示例来演示怎样使用 checkrange 命令:
+ checkrange 0x05,0x0F,0x85 parttype (hd0,1) || hide (hd0,1)
+这意谓着:如果 (hd0,1) 不是一个扩展分区,那么执行hide (hd0,1)命令隐藏它。
+
+******************************************************************************
+*** The New Command TPM ***
+******************************************************************************
+ 新命令 TPM
+
+"tpm --init"在地址0000:7c00处使用512字节数据作为初始化TPM(可信赖平台模块)的缓存。
+
+在你引导 VISTA 的 BOOTMGR 前,你可能需要在一些机器上使用"tpm --init"。通常你应该在
+一条 CHAINLOADR 命令后执行"tpm --init"指令。
+
+******************************************************************************
+*** Delimitors or comments between titles ***
+******************************************************************************
+ 标题间的限制或注释
+
+把标题用来做限制或注释是可能的。如果一个标题(或菜单项)下所有的菜单命令都是非启动敏感的,
+它被叫做是不可启动的。
+
+下面的命令是启动敏感的(而其他命令是非启动敏感的)
+ boot
+ bootp
+ chainloader
+ configfile
+ embed
+ commandline
+ halt
+ install
+ kernel
+ pxe
+ quit
+ reboot
+ setup
+
+一个不可启动的标题在使用者按向上方向键或向下方向键时将被跳过。
+不可启动的菜单项可以通过使用左方向键或右方向键来被访问(和执行)的。示例:
+
+ title This is an UNBOOTABLE entry(so this line is also a comment)
+ pause --wait=0 This title is a comment. Nothing to do.
+ pause --wait=0 You can use non-boot-sensitive commands here
+ pause --wait=0 of any kind and as many as you would like.
+ help
+ help root
+ help chainloader
+ help parttype
+ clear
+ title ------------------------------------------------------------
+ pause --wait=0 This title is a delimitor. Nothing to do.
+ pause --wait=0 You can use non-boot-sensitive commands here
+ pause --wait=0 of any kind and as many as you would like.
+ clear
+ help
+ help boot
+ title ============================================================
+ pause --wait=0 This title is a delimitor. Nothing to do.
+ pause --wait=0 You can use non-boot-sensitive commands here
+ pause --wait=0 of any kind and as many as you would like.
+ help
+ clear
+ help pause
+ title ************************************************************
+ pause --wait=0 This title is a delimitor. Nothing to do.
+ pause --wait=0 You can use non-boot-sensitive commands here
+ pause --wait=0 of any kind and as many as you would like.
+ help kernel
+ help
+ clear
+
+注意:一个不可启动菜单项必须至少包含一条命令。如果标题下没有命令,标题将被简单的
+丢弃并且不被显示。
+
+******************************************************************************
+*** Bifurcate drives ***
+******************************************************************************
+ 分支式驱动器
+
+一些机器在 CHS 和 LBA 模式之间对驱动器实施不同的动作。
+当你使用标准的BIOS调用int13/AH=02h来读取扇区时,你可能会发现这个驱动器是一个软盘
+但是当你用扩展的BIOS调用(EBIOS)int13/AH=42h来读取扇区时,你会发现是一个光盘。
+这样的驱动器被叫做分支式的。
+
+一个分支式的驱动器拥有两个驱动器号:一个是标准的 BIOS 驱动器号十六进制
+的 00或FF ,并且这个驱动器只使用 CHS 模式的磁盘访问(标准的BIOS int13/AH=02h);
+另一个是标准的 BIOS 驱动器号(按位与)0x100 (即十进制的256),并且这个驱动器只
+使用 LBA 模式的磁盘访问(EBIOS int13/AH=42h)。
+例如,驱动器0x00(即,第一软驱)是分支式的.
+ 那么驱动器(0x00)使用 CHS 模式来访问它的扇区
+ 而驱动器(0x100)则使用LBA 模式来访问它的扇区。
+
+geometry 命令会用 BIF 代替常见的 CHS 和 LBA 来报告分支式驱动器的磁盘访问模式。
+
+已知的分支式驱动器。发现虚拟机Virtual PC和一些真实机器当它们引导一个软盘模拟模式
+的可启动光盘时会建立一个分支式的软驱。命令"geometry (fd0)"将显示:
+ drive 0x00(BIF): C/H/S=...Sector Count/Size=.../512
+
+而"geometry (0x100)"将显示
+ drive 0x100(BIF): C/H/S=...Sector Count/Size=.../2048
+
+实际上(0x100) 可以访问整个光盘。
+你可以执行"ls (0x100)/" 显示光盘上文件(不是那个被引导的软盘映像中的文件)。
+当然 "ls (fd0)/"可以列举那些在被引导的软盘映像中的文件。
+
+注意:仅仅是某些(真实的或虚拟的)机器有这样的行为,其他的机器不会产生分支式驱动器。
+
+******************************************************************************
+*** New program badgrub.exe ***
+******************************************************************************
+ 新程序 badgrub.exe
+
+新程序 badgrub.exe 是特意供那些不能运行标准 grub.exe 的‘糟糕的’机器(一些典型
+的 DELL 原型机)使用的。
+
+
+******************************************************************************
+*** Conditional find ***
+******************************************************************************
+ 条件查找
+
+新的find 命令的语法允许带条件的查找设备。
+
+ find [OPTIONS] [FILENAME] [CONDITION]
+ 选项 文件名 条件
+
+OPTIONS:
+ --set-root set the current root device.
+ --set-root=DIR set current root device and working directory to DIR.
+ please also see "Notation For The Current Root Device".
+ --ignore-cd skip search on (cd).
+ --ignore-floppies bypass all floppies.
+ --devices=DEVLIST specify the search devices and order.
+ DEVLIST u->(ud)
+ n->(nd)
+ p->(pd)
+ h->(hdx)
+ c->(cd)
+ f->(fdx)
+ default: upnhcf
+
+
+其中的 CONDITION 是一个返回值是 TRUE 或者 FALSE 的标准 grub 命令。
+
+ 示例 1: 列举所有的分区,所有的软驱和 (cd) 。
+
+ find
+
+ 示例 2:列举文件系统已知的所有设备。
+
+ find +1
+
+ 示例 3: 列举分区类型为0xAF的所有分区。
+
+ find checkrange 0xAF parttype
+
+ 示例 4:列举分区类型为 0x07 且根目录存在 ntldr 的所有分区。
+
+ find /ntldr checkrange 0x07 parttype
+
+ 示例 5: 设置当前根设备到第一个根目录有存在ntldr的分区。
+
+ find --set-root /ntldr
+
+ 示例 6: 同例5,但是以下命令只查在硬盘上查找bootmgr
+
+ find --set-root --devices=h /bootmgr
+
+ 示例 7: 设置当前根设备为第一激活的主分区。
+
+ find --set-root --devices=h makeactive --status
+
+更新: 新的find 命令语法允许指定要查找和设备和查找的顺序。
+ 新的参数 --devices=DEVLIST,用于指定查找的设备和顺序。
+ DEVLIST可以下以下的字母组合。
+ u,p,n,h,c,f -->分别对应 ud,pd,nd,hd,cd,fd,
+ 查找时根据DEVLIST指定的设备顺序进行查找。默认是upnhcf.
+
+
+ 例子: 1.只查找硬盘上的文件
+ find --devices=h /file
+ 2.依次查找硬盘、光盘、软盘上的文件
+ find --devices=hcf /file
+
+ 注意:新的find命令有一个改变,查找的时候会优先查找当前设备(如果在列表中的话)。
+
+******************************************************************************
+*** How to build grldr boot images ***
+******************************************************************************
+ 如何创建 grldr 引导的映像文件
+
+1. 创建1.44M 软盘镜像文件 ext2grldr.img
+
+ dd if=/dev/zero of=ext2grldr.img bs=512 count=2880
+ mke2fs ext2grldr.img
+ mkdir ext2tmp
+ mount -o loop ext2grldr.img ext2tmp
+ cp default ext2tmp
+ cp menu.lst ext2tmp
+ cp grldr ext2tmp
+ umount ext2tmp
+ bootlace.com --floppy --chs --sectors-per-track=18 --heads=2 --start-sector=0 --total-sectors=2880 ext2grldr.img
+
+2. 创建1.44M 软盘镜像文件 fat12grldr.img
+
+ dd if=/dev/zero of=fat12grldr.img bs=512 count=2880
+ mkdosfs fat12grldr.img
+ mkdir fat12tmp
+ mount -o loop fat12grldr.img fat12tmp
+ cp default fat12tmp
+ cp menu.lst fat12tmp
+ cp grldr fat12tmp
+ umount fat12tmp
+ bootlace.com --floppy --chs fat12grldr.img
+
+3. 创建 iso9660 文件系统的光盘镜像文件 grldr.iso
+
+ mkdir iso_root
+ cp grldr iso_root
+ cp menu.lst iso_root
+ mkisofs -R -b grldr -no-emul-boot -boot-load-size 4 -o grldr.iso iso_root
+
+
+******************************************************************************
+*** Use bootlace.com to install partition boot record ***
+******************************************************************************
+ 使用 bootlace.com 来安装分区引导记录
+
+在 bootlace.com 没有实现 --install-partition 选项之前,你需要用已实现的
+--floppy=PartitionNumber 选项来替代。
+
+你必须按下面的方法执行:
+
+步骤 1. 获取分区的引导扇区然后保存为一个文件 MYPART.TMP 。对于 NTFS 文件系统,你需要获取
+ 起始的16 个扇区。对于其他类型的文件系统,你只需要获取一个扇区,但获取多个扇区
+ 也是没问题的。
+
+步骤 2. 执行这些命令:
+
+ bootlace.com --floppy=Y --sectors-per-track=S --heads=H --start-sector=B --total-sectors=C --vfat --ext2 --ntfs MYPART.TMP
+
+ 这里我们假定 MYPART.TMP 是从 (hdx,y) 获取的而且分区号 Y 必须在--floppy=Y 选项中被指定。
+
+ 注意:对于FAT12/16/32/NTFS等分区,你可以省略这些选项:
+ --sectors-per-track, --heads, --start-sector, --total-sectors,
+ --vfat and --ext2.
+
+ 对于 NTFS 分区,你必须指定 --ntfs 选项。
+
+ 对于 ext2 分区,你可以省略 --vfat, --ntfs he --ext2 选项,但是其他选项必须被指定。
+
+步骤 3. 将 MYPART.TMP 写回你原来分区(hdx,y)的引导扇区。
+
+注意:现在只有一些文件系统(FAT12/16/32/NTFS/ext2/ext3)被支持。
+
+注意2:在Linux 下你可以对分区直接写。也就是说,步骤1 和步骤3 是不需要的。简单使用
+ 它的设备名代替 MYPART.TMP 即可。
+
+注意3:grubinst 具有把 grldr 的自举代码安装到分区引导扇区的功能。
+
+******************************************************************************
+*** Use a single key to select menu item ***
+******************************************************************************
+ 使用一个单一的键来选择菜单项
+
+一些机器具有简化的键盘。这些键盘可能只有数字键 0 到 9 ,外加少数几个其他键。当
+菜单还未显示时,使用者可以按下某个键 8 次。当菜单控制模块发现一个连续的单一按
+键时,它将认为使用者希望使用这个键来选择菜单和启动。这个单一的键可以充当右方向
+键来为使用者选择菜单。然后在使用者停止按键的 5 秒之后,被选择的菜单项将自动启
+动。任何的标准键可以被作为单一的键来达到这个目的,除了少数功能键,比如 b ,e ,
+回车键,等等。一旦另外的键被按下,单键选择特性将立即消失。
+
+
+******************************************************************************
+*** Parameter file for bootlace running under DOS ***
+******************************************************************************
+
+你可以把所有或部分的命令行参数放到一个文件中。这个文件可以有多行。就像空格
+和制表符一样,回车符和换行符也可以在参数文件中分割命令行参数。
+
+示例:
+ bootlace < my_parafile
+ bootlace --read-only my_mbr < my_other_options
+
+注意: 不能使用管道符"|"。你必须使用输入重定向符 (<) 。
+
+******************************************************************************
+*** Use bootlace to create a triple MBR ***
+******************************************************************************
+ 使用 bootlace 来建立一个三重的 MBR
+
+虽然这也能用于硬盘,但是它典型的使用是被用于 USB 设备。
+创建三重的 MBR 的步骤:
+
+1. 使用一个新版的 FDISK 分区软件来建立一个从第 95 扇区开始的FAT12或16或32 的分区
+(这里是 LBA 扇区表示法,起始扇区(MBR)是 0 扇区。)
+
+2. 安装 grldr 的引导扇区到这个分区的引导扇区。参见上面的“使用 bootlace.com 来安装分区引导记录”
+
+3. 获取从起始扇区 0 扇区(MBR)开始的96个扇区,然后保存到一个文件 MYMBR96.TMP 中。
+
+4. 运行 bootlace.com:
+ bootlace.com MYMBR96.TMP
+5. 将 MYMBR96.TMP 从MBR (0 扇区)开始回写到驱动器上。
+
+注意: 如果驱动器已经是一个三重的 MBR ,那么 bootlace 会删除它并且恢复为原本的分区布局。
+
+******************************************************************************
+*** Use 'pxe detect' in preset-menu ***
+******************************************************************************
+ 在预置菜单中使用 'pxe detect' 命令
+
+现在“pxe”命令有了个新的子命令“detect”:
+ pxe detect [BLOCK_SIZE] [MENU_FILE]
+ 包大小选项 菜单文件选项
+
+BLOCK_SIZE 选项指定出 pxe 包的大小。如果它没有被指定或者是被指定为 0 ,那么
+grub4dos将通过一个侦测过程来获取数据传送包的一个恰当的的值。
+
+MENU_FILE 选项指定出 PXE 服务器上的配置文件。如果它被省略,在 menu.lst 子目录
+中的标准配置文件将获得控制。关于menu.lst 子目录中的配置文件的描述,请查阅上面
+的“GRLDR 作为 PXE 启动文件”一节。
+
+如果MENU_FILE 是以"/"开始的,那么PXE 服务器上的 MENU_FILE 将获得控制,否则
+(如果MENU_FILE不是以"/"开始)将没有菜单被执行。
+
+在你的系统用 512 字节的默认包大小不能运行时,通常你应该在访问(pd)设备之前
+使用一条 "pxe blksize ..." 或 一条 "pxe detect ..."命令。
+
+******************************************************************************
+*** Use 'configfile' in preset-menu ***
+******************************************************************************
+ 在预置菜单中使用 'configfile'命令
+
+现在预置菜单具有最高控制权。它将在启动设备上的 menu.lst 之前获得控制。如果
+'configfile' 命令在初始化命令组中出现,那么控制将转到启动设备上的menu.lst文件。
+
+******************************************************************************
+*** New command 'dd' to copy files ***
+******************************************************************************
+ 复制文件的新命令 'dd'
+
+用法:
+
+dd if=IF of=OF [bs=BS] [count=C] [skip=IN] [seek=OUT] [buf=ADDR] [buflen=SIZE]
+
+将 IF(源文件)复制到OF (目标文件)中。BS 是以字节计数的一个块的大小,默认
+值是512 。C 是复制的块数,默认值是源文件中的总块数。IN 指定在读取时跳过的块
+数,默认值是 0 。OUT 指定在写入时跳过的块数,默认值是0 。已跳过的块不会被改
+变。源文件和目标文件必须是存在的。
+译注:新增参数buf表示dd所用的读写缓存的起始地址,buflen表示缓存的长度,即大小。
+
+源文件和目标文件必须以设备名开头,即,`(...)'的格式。对于当前根设备你应该使用`()'。
+
+dd 命令既不扩大也不减小目标文件的大小,源文件尾部剩余的部分将被丢弃。目标
+文件不能是gzip压缩过的文件。如果源文件是gzip 压缩过的文件,它将在复制时被
+自动解压。
+
+dd 具有危险性,使用风险由你自己的承担。作为一种安全方面的考虑,你应当只使
+用 dd 来写入一个内存中的文件。
+
+某些情况下在写入NTFS 中的文件的时,dd 可能会失败。
+
+假如你尝试在菜单中执行dd命令来写入一个不是内存中的设备或者块文件时,你会被安全的拒绝:-)
+(更新:现在不再限制)
+
+更新: 新选项实现了让使用者自定义dd 命令的读写缓存。默认读写缓存起始于地
+址0x50000,长度为0x10000 (即64KB)。你不能指定起始地址ADDR 低于0x100000
+(即 1 MB)的缓存位置。此外,你必须指定参数SIZE 大于0x10000(即64K)。
+通常,你需要令ADDR大于或等于0x1000000 (16MB),并且 SIZE 也要大于或等于16MB 。
+增大 SIZE 的值能够加快 dd 的读写速度。
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
+!!!! Caution! Both IF and OF can be a device name which stands for !!!!
+!!!! all the sectors on the device. Take utmost care! !!!!
+!!!!______________________________________________________________________!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ 警告!IF 和 OF 都可以是一个设备名,即它代表了设备上全部的扇区。慎之又慎!
+
+******************************************************************************
+*** New command 'uuid' to identify partitions ***
+******************************************************************************
+ 确认分区的新命令 'uuid'
+
+用法:
+
+ uuid [DEVICE] [UUID]
+
+如果 DEVICE 选项未被指定,将在所有分区中搜索指定的 UUID 号的文件系统,
+然后把包含这个文件系统的分区设置为新的根 (如果 uuid 被指定时),或者只列举所
+有设备上的文件系统的 uuid 号(如果 uuid 未被指定时)。
+如果 DEVICE 选项被指定了,将返回 真 或 假 ,对应于指定的设备是否与指定的 UUID
+号相符(如果uuid被指定时),或者仅仅列举指定设备的uuid 号(uuid 未被指定时)。
+
+示例 1:
+ find --set-root uuid () 7f95820f-5e33-4e6c-8f50-0760bf06d79c
+
+这将查找 uuid 等于 7f95820f-5e33-4e6c-8f50-0760bf06d79c的分区,然后将这个找到的分区设置为根。
+
+示例 2:
+ uuid ()
+这将显示当前根设备的 uuid 号。
+
+******************************************************************************
+*** gfxmenu support in grub4dos ***
+******************************************************************************
+ grub4dos 的 gfxmenu 支持
+
+gfxmenu 支持已经被增加到 grub4dos 当中。使用它,你首先需要找到一个你需要的mesage
+文件,然后在menu.lst中用类似这样的命令来装载它:
+
+ gfxmenu /message
+
+这是一个全局命令,也就是说,不能放入任何的菜单项中。同时,它只能被使用于配置文件
+中,而在控制台模式中执行它是无效的。
+
+gfxmenu 不能与全局密码保护功能同时使用。
+
+message 文件有两个主要的格式。老的格式是通过gfxboot 3.2版或更旧的版本创建的
+(message文件的大小通常只能是150 k),当采用 gfxboot 3.3 版或更新的版本创建
+新格式时,(message文件的大小通常可以超过 300K)。这两种格式在grub4dos 中都
+已被支持。
+
+******************************************************************************
+*** Use 'write' to write a string into a device or file ***
+******************************************************************************
+ 使用 'write' 命令将字符串写入设备或文件中
+
+用法:
+
+ write [--offset=SKIP] ADDR_OR_FILE INTEGER_OR_STRING
+
+SKIP 是一个整数默认值是 0 。
+
+如果 ADDR_OR_FILE选项 被指定为一个整数,那么它被作为一个内存地址对待,并且
+INTEGER_OR_STRING选项也必须是一个整数值。整数 INTEGER_OR_STRING 将被写
+入(ADDR_OR_FILE 加上 SKIP 值)的地址处。
+
+如果 ADDR_OR_FILE选项 指定的是一个设备或一个文件,那么INTEGER_OR_STRING 选
+项将被作为一个字符串对待,它将被写入跳过 SKIP 个字节(字节计数)的指定的设
+备或文件当中。
+
+字符串不需要被引用,也就是说,不需要单引号(') 也不用 双引号(") 来引用它。
+
+空格符必须被反斜杠(\)引用。(更新:现在不需要了)
+(译注:如果字符串以空格开头,开头的这个空格符还是需要反斜杠引用)
+
+单引号(')和双引号(")不用特别说明并且可以直接使用到字符串中。
+
+下面是一些 C 语言风格的引用序列说明:
+
+ \NNN (1到3位)八进制值 NNN 表示的字符
+ \\ 反斜杠
+ \a 警报 (声音)
+ \b 退格符
+ \f 换页符
+ \n 换行符
+ \r 回车符
+ \t 水平制表符
+ \v 垂直制表符
+ \xHH (1到2位)十六进制值为 HH 的字节
+
+就像 dd 命令一样,write 命令既不扩大也不缩小目标文件的文件大小,字符串的
+剩余部分将被丢弃。目标文件也不能是一个压缩过的文件。
+
+还是和 dd 类似,write 命令也具有危险性,使用风险你自己承担。作为一种安全
+方面的考虑,你应当只向内存中的文件写入。
+
+某些情况下当写入 NTFS 中的文件时,write命令可能失败。
+
+假如你尝试在菜单中执行 write 命令来写入一个不是内存中的设备或者块文件时,
+你会被安全的拒绝:-) (更新:现在不再限制)
+
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!!
+!!!! Caution! The file to write can be a device name which stands !!!!
+!!!! for all the sectors on the device. Take utmost care! !!!!
+!!!!______________________________________________________________________!!!!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ 警告!被write 命令写入的文件可以是一个设备名,即它代表了设备上的所有
+ 扇区。慎之又慎!
+
+
+******************************************************************************
+*** Item-by-item help text for menu entries ***
+******************************************************************************
+ 为菜单项添加提示信息
+
+当你选择一个菜单项时,屏幕底部的提示信息将发生变化。
+
+你可以在标题行中添加你的提示信息。必须用"\n" 开头,示例:
+ title This is the title\nThis is the help text.\nAnd this is the 2nd line of the help text.
+
+一些 C 语言风格的引用符号在请看前面章节的说明。
+
+******************************************************************************
+*** initrd can load multiple cpio files for Linux 2.6 kernels ***
+******************************************************************************
+ inird 命令可以为Linux 2.6 核心装载多个cpio 格式的文件
+
+用法:
+ initrd FILE [FILE ...]
+
+注意 1:你不能用这种方法装载多于一个的老式磁盘镜像,因为Linux 核心不支持。
+注意 2:其中的 FILE 必须和在syslinux中使用的顺序一样。
+
+******************************************************************************
+*** access some internel variables at a fixed location ***
+******************************************************************************
+ 在固定位置访问一些内部变量
+地址 长度 说明
+========= ======== ==============================================
+0000:8208 4字节(即双字) 启动分区号 install_partition (the boot partition)
+0000:8280 4字节(即双字) 启动驱动器号(boot_drive)
+0000:8284 4字节(即双字) pxe 客户端 ip (即本地ip)
+0000:8288 4字节(即双字) pxe 服务器 ip
+0000:828C 4字节(即双字) pxe 网关 ip
+0000:8290 8字节(即四字) 最后访问的文件的大小(是执行"cat --length=0"后的文件大小)
+0000:8298 4字节(即双字) 可用的扩展内存大小(以 KB 为单位)
+0000:829C 4字节(即双字) 当前根分区号(current root partition)
+0000:82A0 4字节(即双字) 当前根所在的驱动器(current root drive)
+0000:82A4 4字节(即双字) 解压标志 (gzip非自动解压),非0时不自动解压
+0000:82A8 8字节(即四字) 最后访问的分区的起始扇区号
+0000:82B0 8字节(即四字) 最后访问的分区的扇区总数
+0000:8278 4字节(即双字) GRUB4DOS编译的日期十进制数.
+ 以下命令用于判断当前使用的GRUB是否在2010-12-30日编译的。
+ checkrange 20101230 read 0x8278
+
+注意 1:Filesize 通过执行 "cat --length=0 FILE" 来初始化和修改。
+注意 2:尽量不要改写这些变量(应该只是读取)。
+注意 3:你可以使用内存地址6000:0000开始的 1K空间作为你自己的变量区(参见注意4)。
+注意 4:read 命令现在从指定的地址处返回32位整数值。
+注意 5:grub4dos 还没有变量扩展的功能。你只能使用整数变量。你不需要申明它们,就
+ 可以直接使用这些内存地址。通常你需要通过一个逻辑值或者一个条件测试命令
+ 来使用这些变量,即,类似这种格式:"checkrange RANGE read ADDR"
+注意 6:内部变量no_decompression, saved_drive and saved_partition 是可写的。
+
+******************************************************************************
+*** possibility to run another menu.lst after gfxmenu ***
+******************************************************************************
+ 在 gfxmenu 之后后运行其它 menu.lst
+
+注意下面是在 GFXMENU 之后使用 CONFIGILE 的示例:
+
+ # The menu.lst file for gfxmenu
+ default=0
+ timeout=5
+ gfxmenu /message
+ configfile /another.lst
+ title 0..........
+ ................
+ title 1..........
+ ................
+ title 2..........
+ ................
+ # End of menu.lst
+
+ # Begin another.lst
+ default=0
+ timeout=5
+ title 0..........
+ ................
+ title 1..........
+ ................
+ title 2..........
+ ................
+ # End of another.lst
+
+会首先尝试执行 gfxmenu 命令。当它退出时(或者失败时)控制会转到 another.lst 菜单。
+
+******************************************************************************
+*** a range of drives can be unmapped ***
+******************************************************************************
+
+用法:
+ map --unmap=RANGE
+
+其中的 RANGE 是一个已被映射的 BIOS 驱动器域。BIOS 驱动器号 0 表示第一软驱,1 表示
+第二软驱;0x80 表示第一硬盘,0x81 表示第二硬盘,等等;虚拟光盘(hd32) 对应于
+BIOS 驱动器号 0xA0 ,(hd33) 对应于0xA1 ,等等。
+
+关于RANGE 的说明,请参阅前述的“新命令 CHECKRANGE ”这节。
+
+示例 1:
+ map --unmap=0,0x80,0xff
+
+这将反映射虚拟软驱 (fd0),虚拟硬盘(hd0)和虚拟光盘(0xff)。
+
+示例 2:
+ map --unmap=0:0xff
+
+这将反映射所有的虚拟软驱,所有的虚拟硬盘和所有的虚拟光盘。
+
+注意 1:通常,一条‘map’命令将在驱动器映射表中为虚拟驱动器增加一个表项。而
+ ‘--unmap’意味着在驱动器映射表中(具体是指虚拟驱动器)的表项会被删除。
+
+Note 2: The --unhook option only breaks the INT13 hook(to the inerrupt
+ vector table). It will not affect the drive map table. And later on
+ execution of a `boot' command, the INT13 disk emulation routine will
+ automatically get hooked(to the interrupt vector table) when needed
+ (e.g., the drive map table is non-empty) even if it has been unhooked.
+注意 2:--unhook 选项仅仅是断开 INT13 的挂钩(在中断矢量表中)。它不会影响到驱
+ 动器映射表。而且在执行了一个‘boot’命令之后,即使是它已经被反映射了的
+ 时候,INT13磁盘仿真程序也会在需要的时候(即,驱动器映射表非空时)自动建立挂钩。
+
+注意 3:通常你需要在已经改变了驱动器映射表之后执行一条`map --rehook'命令。
+
+******************************************************************************
+*** geometry tune and sync ***
+******************************************************************************
+ 磁盘几何参数的修正和同步
+
+当一个USB 存储设备被连接到一台(或者是不同的)机器上时,分区表中或 BPB 中的磁盘
+几何参数值可能是无效的,并且这个机器可能在启动时死机。因此你需要为驱动器找到一个
+正确的磁盘几何参数(使用 `geometry --tune'),然后更新分区表或 BPB 中的磁盘
+几何参数(使用`geometry --sync')。
+
+假如你想启动到DOS,那上面的步骤是必要的,因为 DOS 要求有正确的磁盘几何参数在分区
+表和BPB 中。Windows 及 Linux 应该也需要,因为引导程序运行在实模式中。
+
+******************************************************************************
+*** 版本编号 ***
+******************************************************************************
+
+我们添加了一个字符 'a', 'b', 'c' or 'p' 到版本编号(e.g., 0.4.5).
+所以现在版本编号是 0.4.5a, 0.4.5b, 0.4.5c, 0.4.5 or 0.4.5p.
+
+'a' - alpha test. 不稳定, 尤其是在有已知BUG的情况下。
+'b' - beta test. 测试版,开发人员觉得这个版本没有bug,希望有一个长期的测试。
+'c' - 候选发布版,相对比较稳定。
+''(nothing) - 正式版,比较稳定。
+'p' - 修补版,对于在正式版中发现的一些问题进行修正.
+
+******************************************************************************
+*** Running User Programs(外部命令,供开发人员参考) ***
+******************************************************************************
+
+从0.4.5起,用户可以自行编写程序以在GRUB4DOS中运行。
+该可执行程序文件必须以8字节grub4dos EXEC签名结尾。
+ 0x05, 0x18, 0x05, 0x03, 0xBA, 0xA7, 0xBA, 0xBC
+
+The executable must have no relocations, and the entry point is at the very
+beginning of the file, just like a DOS .com file(but the grub4dos executable
+is 32-bit).
+程序的入口点在文件头,和DOS的.com文件很像(但我们是32位的程序)。
+
+注:因为使用了linux gcc的特性,所以程序只能在linux下使用gcc进行编译。
+
+附上一个简单的echo.c源码,供参考。
+/*================ begin echo.c ================*/
+
+/*
+ * 编译:
+gcc -nostdlib -fno-zero-initialized-in-bss -fno-function-cse -fno-jump-tables -Wl,-N -fPIE echo.c
+
+ * disassemble: objdump -d a.out
+ * confirm no relocation: readelf -r a.out
+ * generate executable: objcopy -O binary a.out echo
+ * 经过这一步之后生成的echo文件就是可以在grub4dos中运行的程序。
+ * and then the resultant echo will be grub4dos executable.
+ */
+
+/*
+ * This is a simple ECHO command, running under grub4dos.
+ */
+#define sprintf ((int (*)(char *, const char *, ...))((*(int **)0x8300)[0]))
+#define printf(...) sprintf(NULL, __VA_ARGS__)
+
+int i = 0x66666666; /* 这是必要的,看下面的注释。*/
+/* gcc treat the following as data only if a global initialization like the
+ * above line occurs.
+ */
+
+/* GRUB4DOS可执行程序结尾必须有以下8个字节(EXEC签名) */
+asm(".long 0x03051805");
+asm(".long 0xBCBAA7BA");
+/* 感谢上帝, gcc 会把上面的8个字按兵不动放在最终程序的最后面。
+ * 不要在这里插入其它任何代码.
+ */
+
+int main(char *arg,int flags)
+{
+ return printf("%s\n",arg);
+}
+/*================ end echo.c ================*/
+
+0x8300 是 grub4dos 系统函数(API)的入口点. 你可以在 asm.S 源码中找到它的定义.
+
+目前可以使用的函数和变量:
+ http://grubutils.googlecode.com/svn/trunk/src/include/grub4dos.h
+
+******************************************************************************
+*** Map options added by Karyonix ***
+******************************************************************************
+
+(from boot-land.net) Karyonix's note:
+注:boot-land.net网站已经改成 reboot.pro
+map --add-mbt= option to be used with --mem. If =0 master boot track will not
+ be added automatically.
+ 配合--mem 使用. 如果=0 则不会自动添加主引导磁道.
+ 说明:默认情况下把一个分区镜像map为一个硬盘时会自动添加一个主引导磁道.
+ 使用该参数可以禁止GRUB4DOS自动添加。一般不需要使用这个参数。
+
+map --top option to be used with --mem. map --mem will try to allocate memory
+ at highest available address.
+ 配合--mem 使用. 如果=0 则不会自动添加主引导磁道.
+ 说明:默认情况下把一个分区镜像map为一个硬盘时会自动添加一个主引导磁道.
+ 使用该参数可以禁止GRUB4DOS自动添加。一般不需要使用这个参数。
+map --mem-max=, map --mem-min options to be used before map --mem. Allow user
+ to manually limit range of address that map --mem can use.
+
+safe_parse_maxint_with_suffix function parses K,M,G,T suffix after number.
+注:更新的GRUB4DOS版本中已经使用这个参数替换了默认的safe_parse_maxint函数。
+所以只要支持数值的命令行都可以使用以上特性。比如:
+read 0x100000 //读取内存1MB处的数值
+可以写成如下方式,方便使用。
+read 1m
+其它的命令只要支持数值输入的都可以使用这个特性。
+
+******************************************************************************
+*** Graphics mode 6A: 800x600 with 16 colors ***
+******************************************************************************
+
+现在有两2种可选的图形模式,默认的是640x480模式.
+新的是800x600模式(对一些机子支持不是很好,有可能会死机)。
+
+使用以下方法可以切换图形显示模式。
+
+1. 确定目前是在控制台模式,你可以执行命令 "terminal console" 进行切换。
+2. 使用命令"graphicsmode 0x6a" 设置图形模式为0x6A。
+3. 进入图形模式,你可以使用命令"terminal graphics".
+ 如果在切换之前不是图形模式,那该命令无效,你可以使用splashimg或fontfile命令。
+
+注: 1. 如果想换回默认的640x480,把上面的第2步改成"graphicsmode 0x12".
+ 2. 经过改进,更新的版本,可以直接改变,只要上面第2步一条命令就可以搞定。
+ 例子:
+ 在默认图形模式中(使用splashimage或fontfile命令都会进入图形模式).
+ 输入以下命令可以直接切换到800x600.
+ graphicsmode 0x6a
+
+*****************************************************************************
+***** GRUB4DOS的变量支持 *****
+*****************************************************************************
+
+新的版本支持变量,用法和MSDOS一样。
+关键命令:
+ set [/p] [/a|/A] [/l|/u] [VARIABLE=[STRING]]
+
+ variable 指定环境变量名(最长8个字符)。
+ string 指定要指派给变量的一系列字符串(最长512个字符)。
+
+ 不带参数的 SET命令会显示当前变量。
+
+ 要删除某个变量,只需要让=后面为空就可以
+ set myvar=
+ 将会删除变量myvar
+
+ 显示已使用的名称的所有变量的值。例如:
+ set ex_
+ 会显示所有以ex_开头的变量,如果没有任何匹配返回0.
+
+注:1.使用和MSDOS一样的处理方用户法,一整行的命令会在执行前先进行变量替换。
+ 2.变量名必须使用字母或_开头。否则你将无法访问你的变量。
+ 3.长度限制请看前面说明。
+ 4.输入"set *"可以清除所有已设置的变量。
+ 5./a 后面的STRING是一个表达式,将调用CALC进行计算,保存结果为10进制数。
+ 6./A 同上,但保存结果为16进制数。
+ 7./l|/u 大小写转换。
+ 8./p 显示一个提示STRING并获取用户的输入内容并设置为变量VARIABLE的值。
+
+
+新增的命令if
+ if [/I] [NOT] STRING1==STRING2 [COMMAND]
+ if [NOT] exist VARIABLE|FILENAME [COMMAND]
+ 1.如果STRING1==STRING2 字符串匹配,执行后面的COMMAND(如果有指定的话)。
+ 否则返回TRUE。
+ 2./I 参数指写不区分大小写匹配。
+ 3.[NOT] 相反,如果STRING1==STRING2不匹配。
+ 4.exist 用于判断变量VARIABLE或文件FILENAME是否存在(filename必须以"/"或"("开头).
+
+ 例子:
+ 1.判断字符串是否相等,并且不区分大小写。
+ if /i test==%myvar% echo this is a test
+ 2.判断字符是否为空。
+ if %myvar%#==# echo variable myvar not defined.
+ 注:我们使用了一个#不防止空操作,当然也可以使用其它字符,如
+ if "%myvar%"=="" echo variable myvar not defined.
+
+使用方法举例:
+ 1.显示一个包括变量的串。
+ echo myvar = %myvar%
+ 2.使用一个变量代替命令。
+ set print=echo
+ %print% This a test.
+ 3.你可以使用一个“^”来阻此被变被扩展,例子
+ echo %myvar^%
+ 或
+ echo %my^var%
+ 将会显示 %myvar%而不是扩展myvar之后的字符。
+ 总之,只要出现了^那就不会扩展这个变量。
+
+注:我们只处理在%%之间的^符号。
+
+*****************************************************************************
+***** GRUB4DOS的批处理脚本支持 *****
+*****************************************************************************
+
+新的版本支持运行一个批处理脚本,语法和MS-DOS的批处理几乎一模一样。
+你不需要学习新的知识就可以应用GRUB4DOS的批处理,唯一要做的就是学习GRUB4DOS命令。
+
+例子一个简单的脚本(看一下是不是和MS-DOS一样):
+ =========GRUB4DOS BATCH SCRIPT START===============================
+ !BAT #注:文件头!BAT是必须的用于识别这是一个GRUB4DOS批处理脚本
+ echo %0
+ echo Your type: %1 %2 %3 %4 %5 %6 %7 %8 %9
+ call :label1 This is a test string
+ goto :label2
+ :label1
+ echo %1 %2 %3 %4 %5 %6 %7 %8 %9
+ goto :eof
+ :label2
+ echo end of batch script.
+ =========GRUB4DOS BATCH SCRIPT END===============================
+
+一些区别说明:
+ 1.出现错误时将停止执行。
+ 2.如果需要中途停止批处理脚本的运行可以用exit 1
+ 3.%9是指剩下的所有参数。
+ 4.支持shift命令。
+ 5.可扩展参数
+ %~d0 扩展%0到磁盘号.例如:(hd0,0),默认是()。
+ %~p0 扩展%0到一个路径。
+ %~n0 扩展%0到一个文件名.
+ %~x0 扩展%0到一个文件扩展名。
+ %~f0 扩展%0到一个完整的文件路径名(相当于%~dpnx0).
+ %~z0 扩展%0到文件大小.
+ 6.其它用法请参考CMD的批处理。
+在这里可以找到一些脚本
+http://chenall.net/post/tag/grub4dos/
+
+********************************************************************************
+ 条件菜单(iftitle)
+********************************************************************************
+自2011-12-04的版本开始支持条件菜单,可以根据某个特定的条件来决定是否显示某个菜单。
+为了区别之前的普通菜单,使用新的参数iftitle。
+语法如下:
+ iftitle [<command>] Actual Title displayed\nOptional help line
+ iftitle [<command>] 菜单标题\n菜单帮助
+
+注意:
+ 1.command必须是一个合法的GRUB4DOS命令,支持调用外部命令。
+ 注:像echo/pause之类的命令在条件菜单命令中被禁用。
+ 大部份的命令都可以使用,如果碰到不能使用的不要奇怪,非要使用可以提交BUG。
+ 2.菜单标题前至少要保留一个空格.
+ 3.[]是必须的,不可少。
+ 4.如果[]里面的内容为空相当于title即不判断。
+ 5.你可以使用该功能来快速注释整个菜单的内容(不显示菜单),只需要使用一个非法的命令即可。 \ No newline at end of file
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/badgrub.exe b/client/shared/lib/grub4dos/grub4dos-0.4.5b/badgrub.exe
new file mode 100644
index 00000000..213d401b
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/badgrub.exe
Binary files differ
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/bootlace.com b/client/shared/lib/grub4dos/grub4dos-0.4.5b/bootlace.com
new file mode 100755
index 00000000..1e514853
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/bootlace.com
Binary files differ
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/config.sys b/client/shared/lib/grub4dos/grub4dos-0.4.5b/config.sys
new file mode 100644
index 00000000..9aa253ef
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/config.sys
@@ -0,0 +1,6 @@
+rem load grub.exe before emm386.exe
+device=grub.exe --bypass --time-out=5 --config-file="color black/cyan yellow/cyan;timeout 60;default 0;title find and load NTLDR of Windows NT/2K/XP;find --set-root /ntldr;chainloader /ntldr;title find and load CMLDR, the Recovery Console of Windows NT/2K/XP;find --set-root /cmldr;chainloader /cmldr;write 0x7C03 0x63646D63;write 0x7C07 0x00736E6F;title find and load IO.SYS of Windows 9x/Me;find --set-root /io.sys;chainloader /io.sys;title floppy (fd0);chainloader (fd0)+1;rootnoverify (fd0);title find and boot Linux with menu.lst already installed;find --set-root /sbin/init;configfile /boot/grub/menu.lst;title find and boot Mandriva with menu.lst already installed;find --set-root /etc/mandriva-release;configfile /boot/grub/menu.lst;title back to dos;quit;title commandline;commandline;title reboot;reboot;title halt;halt;"
+
+device=c:\windows\himem.sys
+device=c:\windows\emm386.exe
+
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/default b/client/shared/lib/grub4dos/grub4dos-0.4.5b/default
new file mode 100644
index 00000000..689c3c8b
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/default
@@ -0,0 +1,46 @@
+
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+# !!!!!!! The file size is 2048 bytes. Don't change the file size !!!!!!!
+# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+# XXXXXXXXXXXXXXXXXXXXX
+# WARNING: If you want to edit this file directly, do not remove any line
+# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX
+# XXXXXXXXXXXXXXXXXXXXX
+# WARNING: If you want to edit this file directly, do not remove any line
+# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX
+# XXXXXXXXXXXXXXXXXXXXX
+# WARNING: If you want to edit this file directly, do not remove any line
+# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX
+# XXXXXXXXXXXXXXXXXXXXX
+# WARNING: If you want to edit this file directly, do not remove any line
+# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX
+# XXXXXXXXXXXXXXXXXXXXX
+# WARNING: If you want to edit this file directly, do not remove any line
+# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX
+# XXXXXXXXXXXXXXXXXXXXX
+# WARNING: If you want to edit this file directly, do not remove any line
+# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX
+# XXXXXXXXXXXXXXXXXXXXX
+# WARNING: If you want to edit this file directly, do not remove any line
+# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX
+# XXXXXXXXXXXXXXXXXXXXX
+# WARNING: If you want to edit this file directly, do not remove any line
+# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX
+# XXXXXXXXXXXXXXXXXXXXX
+# WARNING: If you want to edit this file directly, do not remove any line
+# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX
+# XXXXXXXXXXXXXXXXXXXXX
+# WARNING: If you want to edit this file directly, do not remove any line
+# from this file, including this warning. XXXXXXXXXXXXXXXXXXXXXXXXXXX
+# XXXXXXXXXXXXXXXXXXXXX
+# !!!!!!! The file size is 2048 bytes. Don't change the file size !!!!!!!
+# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/grldr b/client/shared/lib/grub4dos/grub4dos-0.4.5b/grldr
new file mode 100644
index 00000000..50e25d53
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/grldr
Binary files differ
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/grldr.mbr b/client/shared/lib/grub4dos/grub4dos-0.4.5b/grldr.mbr
new file mode 100644
index 00000000..69c013ab
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/grldr.mbr
Binary files differ
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/grub.exe b/client/shared/lib/grub4dos/grub4dos-0.4.5b/grub.exe
new file mode 100644
index 00000000..4f23b566
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/grub.exe
Binary files differ
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/grub.pif b/client/shared/lib/grub4dos/grub4dos-0.4.5b/grub.pif
new file mode 100644
index 00000000..28b43805
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/grub.pif
Binary files differ
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/hmload.com b/client/shared/lib/grub4dos/grub4dos-0.4.5b/hmload.com
new file mode 100644
index 00000000..04c794c3
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/hmload.com
Binary files differ
diff --git a/client/shared/lib/grub4dos/grub4dos-0.4.5b/menu.lst b/client/shared/lib/grub4dos/grub4dos-0.4.5b/menu.lst
new file mode 100644
index 00000000..12436167
--- /dev/null
+++ b/client/shared/lib/grub4dos/grub4dos-0.4.5b/menu.lst
@@ -0,0 +1,132 @@
+# 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 blue/green yellow/red white/magenta white/magenta
+timeout 30
+## menu border color
+color border=0xEEFFEE
+## set vbe mode
+graphicsmode -1 640 480:800
+## loading splashimage
+splashimage /boot/grub/splashimage.xpm || splashimage /boot/grub/splashimage.bmp
+default /default
+## Menu AutoNumber
+write 0x8274 0x2001
+
+title find and load NTLDR of Windows NT/2K/XP\n find and load NTLDR of Windows NT/2K/XP
+fallback 1
+find --set-root --ignore-floppies --ignore-cd /ntldr
+map () (hd0)
+map (hd0) ()
+map --rehook
+find --set-root --ignore-floppies --ignore-cd /ntldr
+chainloader /ntldr
+savedefault --wait=2
+
+#iftitle only show when command in [] returns true
+# set a variable named bootmgr where /bootmgr is found.
+iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%] load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr%
+chainloader %bootmgr%/bootmgr
+savedefault --wait=2
+
+title find and load CMLDR, the Recovery Console of Windows NT/2K/XP
+fallback 3
+find --set-root --ignore-floppies --ignore-cd /cmldr
+map () (hd0)
+map (hd0) ()
+map --rehook
+find --set-root --ignore-floppies --ignore-cd /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
+
+# or.
+#write --offset=3 (md)0x3e+1 cmdcons
+# or
+calc *0x7c03=0x00736E6F63646D63
+
+savedefault --wait=2
+
+title find and load IO.SYS of Windows 9x/Me
+fallback 4
+find --set-root /io.sys
+chainloader /io.sys
+savedefault --wait=2
+# you can also use below commands.
+# find --set-root chainloader /io.sys
+# boot
+# the boot is necessary,
+# please see "Delimitors or comments between titles" in grub4dos_readme.txt.
+
+title find and boot 0PE.ISO
+fallback 5
+find --set-root /0PE/0PE.ISO
+map /0PE/0PE.ISO (0xff) || map --mem /0PE/0PE.ISO (0xff)
+map --hook
+chainloader (0xff)
+savedefault --wait=2
+
+title find and boot MicroPE.ISO
+fallback 6
+find --set-root /boot/MicroPE.ISO
+map /boot/MicroPE.ISO (0xff) || map --mem /boot/MicroPE.ISO (0xff)
+map --hook
+chainloader (0xff)
+savedefault --wait=2
+
+title Parted Magic ISO
+fallback 7
+find --set-root /pmagic.iso
+map /pmagic.iso (0xff) || map --mem /pmagic.iso (0xff)
+map --hook
+chainloader (0xff)
+savedefault --wait=2
+
+title Ultimate Boot CD ISO
+fallback 8
+find --set-root /ubcd.iso
+map /ubcd.iso (0xff) || map --mem /ubcd.iso (0xff)
+map --hook
+chainloader (0xff)
+savedefault --wait=2
+
+title SliTaz ISO
+find --set-root /slitaz.iso
+map /slitaz.iso (0xff) || map --mem /slitaz.iso (0xff)
+map --hook
+chainloader (0xff)
+
+title commandline
+commandline
+
+title floppy (fd0)
+chainloader (fd0)+1
+rootnoverify (fd0)
+# or use below commands.
+# rootnoverify (fd0)
+# chainloader +1
+
+title back to dos
+quit
+
+title reboot
+reboot
+
+title halt
+halt
+
+title MAXDOS.IMG
+find --set-root --ignore-floppies /boot/MAXDOS.IMG
+map --mem /boot/MAXDOS.IMG (fd0)
+map --hook
+chainloader (fd0)+1
+rootnoverify (fd0)
+
+
diff --git a/client/shared/lib/httpd/LogCommand.sh b/client/shared/lib/httpd/LogCommand.sh
index 9a116f7c..09656fc1 100755
--- a/client/shared/lib/httpd/LogCommand.sh
+++ b/client/shared/lib/httpd/LogCommand.sh
@@ -1,10 +1,14 @@
#!/bin/bash
+OGLOGCOMMAND=${OGLOGCOMMAND:-"/tmp/command.log"}
+OGLOGCOMMANDTMP=$OGLOGCOMMAND.tmp
echo "Content-type: text/html"
echo ""
-echo "<html><head><meta http-equiv='Refresh' content='5,URL=./LogCommand.sh'> <link rel='stylesheet' type='text/css' href='oglive.css' /> <title>Bash as CGI"
-echo "</title></head><body>"
+echo "<html><head>"
+echo "<meta charset='utf-8'>"
+echo "<meta http-equiv='Refresh' content='5,URL=./LogCommand.sh'> <link rel='stylesheet' type='text/css' href='oglive.css' />"
+echo "<title>Bash as CGI</title></head><body>"
-$(strings /tmp/command.log > /tmp/command.log.tmp)
+strings -e S $OGLOGCOMMAND > $OGLOGCOMMANDTMP
echo "<table>"
@@ -13,7 +17,8 @@ echo "<tr>"
echo "<TEXTAREA NAME='trackloghead' ROWS='13' COLS='175'>"
#echo "$(head -n 10 /tmp/command.log.tmp | uniq)"
-echo "$(grep -v '^Elapsed:\|^Total [Tt]ime:\|^-\|^|\|^bytes\|^\[' /tmp/command.log.tmp | uniq | head -n 10)"
+# UHU - 2013/07/05 - Se incluye el simbolo % y la palabra sent para que se muestre la salida de rsync
+egrep -v '^aclfilter|^deleting|^bytes|%|sent|^Elapsed:|^Total [Tt]ime:|^-|^\\|^\/' $OGLOGCOMMANDTMP | uniq | head -n 15
echo "</TEXTAREA>"
echo "</tr>"
@@ -23,7 +28,8 @@ echo "<tr>"
echo "<TEXTAREA NAME='tracklogtail' ROWS='2' COLS='175'>"
#echo "$(tail -n 5 /tmp/command.log.tmp | uniq)"
-echo "$(grep '^Elapsed:\|^Total [Tt]ime:\|^-\|^|\|^bytes' /tmp/command.log.tmp | uniq | tail -n 2)"
+# UHU - 2013/07/05 - Se incluye el simbolo % y la palabra sent para que se muestre la salida de rsync
+egrep '^aclfilter|^deleting|^bytes|%|sent|^Elapsed:|^Total [Tt]ime:|^-|^\\|^\/' $OGLOGCOMMANDTMP | uniq | tail -n 2
echo "</TEXTAREA>"
@@ -32,4 +38,4 @@ echo "</tr>"
echo "</table>"
-echo "</body></html>" \ No newline at end of file
+echo "</body></html>"
diff --git a/client/shared/lib/httpd/LogSession.sh b/client/shared/lib/httpd/LogSession.sh
index a5d18e68..7e390925 100755
--- a/client/shared/lib/httpd/LogSession.sh
+++ b/client/shared/lib/httpd/LogSession.sh
@@ -1,8 +1,11 @@
#!/bin/bash
+OGLOGSESSION=${OGLOGSESSION:-"/tmp/session.log"}
echo "Content-type: text/html"
echo ""
-echo "<html><head> <meta http-equiv='Refresh' content='5,URL=./LogSession.sh'> <title>Bash as CGI"
-echo "</title>"
+echo "<html><head>"
+echo " <meta charset='utf-8'>"
+echo " <meta http-equiv='Refresh' content='5,URL=./LogSession.sh'>"
+echo " <title>Bash as CGI</title>"
echo "<style type='text/css'>"
echo "<!--"
@@ -17,15 +20,11 @@ echo "} "
echo "-->"
echo "</style>"
-
-
echo "</head><body>"
echo "<TEXTAREA NAME='contenido' ROWS='115' COLS='175' >"
-echo "$(cat /tmp/session.log | uniq )"
+uniq $OGLOGSESSION
echo "</TEXTAREA>"
-
-
echo "</body></html>"
diff --git a/client/shared/lib/httpd/httpd-log.sh b/client/shared/lib/httpd/httpd-log.sh
index 58ee6ec6..d357a6ed 100755
--- a/client/shared/lib/httpd/httpd-log.sh
+++ b/client/shared/lib/httpd/httpd-log.sh
@@ -3,14 +3,16 @@
echo "Content-type: text/html"
echo ""
#echo "<html><head><meta http-equiv='Refresh' content='2,URL=./example3.sh'><title>Bash as CGI"
-echo "<html><head><title>OpenGnsys Client</title></head><body>"
+echo "<html><head><title>OpenGnsys Client</title>"
+echo " <meta charset='utf-8'>"
+echo "</head><body>"
-echo "<h1> $(./httpd-runengine.sh 'ogEcho $MSG_HTTPLOG_NOUSE' ) . host $(hostname -s)</h1> "
+echo "<h1> $(./httpd-runengine.sh 'ogEcho $MSG_HTTPLOG_NOUSE' ) .</br>host $(hostname -s)</h1> "
-echo "<IFRAME SRC='bandwidth.sh' WIDTH=250 HEIGHT=80> <A HREF="bandwidth.sh">link</A> </IFRAME> "
+echo "<IFRAME SRC='bandwidth.sh' WIDTH=250 HEIGHT=90> <A HREF="bandwidth.sh">link</A> </IFRAME> "
echo "<IFRAME SRC='cache.sh' WIDTH=590 HEIGHT=90><A HREF="cache.sh">link</a> </IFRAME><br>"
echo "<IFRAME SRC='LogSession.sh' WIDTH=850 HEIGHT=230> <A HREF="LogSession.sh">link</A> </IFRAME>"
-echo "<IFRAME SRC='LogCommand.sh' WIDTH=850 HEIGHT=250> <A HREF="LogCommand.sh">link</A> </IFRAME>"
+echo "<IFRAME SRC='LogCommand.sh' WIDTH=850 HEIGHT=280> <A HREF="LogCommand.sh">link</A> </IFRAME>"
-echo "</body> \ No newline at end of file
+echo "</body>
diff --git a/client/shared/lib/ogclient/ogAdmLnxClient b/client/shared/lib/ogclient/ogAdmLnxClient
index cd34d121..df8aa2cc 100755
--- a/client/shared/lib/ogclient/ogAdmLnxClient
+++ b/client/shared/lib/ogclient/ogAdmLnxClient
Binary files differ
diff --git a/client/shared/lib/qtlib/libQtCore.so.4 b/client/shared/lib/qtlib/libQtCore.so.4
new file mode 100755
index 00000000..9a06a432
--- /dev/null
+++ b/client/shared/lib/qtlib/libQtCore.so.4
Binary files differ
diff --git a/client/shared/lib/qtlib/libQtGui.so.4 b/client/shared/lib/qtlib/libQtGui.so.4
new file mode 100755
index 00000000..3e244a10
--- /dev/null
+++ b/client/shared/lib/qtlib/libQtGui.so.4
Binary files differ
diff --git a/client/shared/lib/qtlib/libQtNetwork.so.4 b/client/shared/lib/qtlib/libQtNetwork.so.4
new file mode 100755
index 00000000..3b98fbb7
--- /dev/null
+++ b/client/shared/lib/qtlib/libQtNetwork.so.4
Binary files differ
diff --git a/client/shared/lib/qtlib/libQtWebKit.so.4 b/client/shared/lib/qtlib/libQtWebKit.so.4
new file mode 100755
index 00000000..7ca33d77
--- /dev/null
+++ b/client/shared/lib/qtlib/libQtWebKit.so.4
Binary files differ
diff --git a/client/shared/lib/qtplugins/imageformats/libqjpeg.so b/client/shared/lib/qtplugins/imageformats/libqjpeg.so
new file mode 100755
index 00000000..dc4a9daa
--- /dev/null
+++ b/client/shared/lib/qtplugins/imageformats/libqjpeg.so
Binary files differ
diff --git a/client/shared/scripts/ImagenesSincronizadas.lib b/client/shared/scripts/ImagenesSincronizadas.lib
new file mode 100755
index 00000000..d28cb9b7
--- /dev/null
+++ b/client/shared/scripts/ImagenesSincronizadas.lib
@@ -0,0 +1,368 @@
+#!/bin/bash
+#___________________________________________________________________
+#
+#@file ImagenesSincronizadas.lib
+#@brief Librería o clase ImagenesSincronizadas
+#@class ImagenesSincronizadas
+#@brief Funciones para la creación y restauración de imagenes por sincronización.
+#@version 1.0.4
+#@warning License: GNU GPLv3+
+#___________________________________________________________________
+
+ #Load engine configurator from engine.cfg file.
+ #Carga el configurador del engine desde el fichero engine.cfg
+ [ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+ # Clear temporary file used as log track by httpdlog
+ # Limpia los ficheros temporales usados como log de seguimieincludento para httpdlog
+ echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
+
+ # Registro de inicio de ejecución
+ #echo "[START Interface ] Run this command: $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
+ echo "$MSG_INTERFACE_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
+
+ # Solo ejecutable por OpenGnSys Client.
+ PATH=$PATH:$(dirname $0)
+ PROG=$(basename $0)
+
+ #___________________________________________________________________
+ #
+ # Variables globales
+ #___________________________________________________________________
+
+ TIPOPARTICION="$(ogGetPartitionId $DISCO $NPART)"; # Tipo de particion
+ if [ -z $TIPOPARTICION ]; then
+ echo "No existe la partición $NPART, debe crearla" | tee -a $OGLOGSESSION $OGLOGFILE
+ exit $OG_ERR_PARTITION
+ fi
+
+ PARTICION=$(ogMount $DISCO $NPART); # Monta partición
+ if [ -z $PARTICION ]; then
+ echo "No existe la unidad /dev/sda$NPART o no está formateada" | tee -a $OGLOGSESSION $OGLOGFILE
+ exit $OG_ERR_PARTITION
+ fi
+
+ SISTEMAFICHERO="$(ogGetFsType $DISCO $NPART)" # Sistema de ficheros
+ if [ -z $SISTEMAFICHERO ]; then
+ echo "No se ha definido un sistema de fichero en la unidad /dev/sda$NPART. Debe formatearla previamente." | tee -a $OGLOGSESSION $OGLOGFILE
+ exit $OG_ERR_PARTITION
+ fi
+
+ REPOSITORIO="opengnsys@$IPREPOSITORIO::ogimages" # Ruta de las imagenes en el repositorio
+
+ FILE_ACL="ogwinimage.acl"
+
+
+ # Envío de archivo completo
+ OP_WHOLE="--whole"
+ if [ $WHLFILE -eq 0 ]; then
+ OP_WHOLE=""
+ fi
+
+ # Borrar archivos en destino
+ OP_DELETE="--delete"
+ if [ $NOBORRACHIVOS -eq 1 ]; then
+ OP_DELETE=""
+ fi
+ if [ $RMVFILE -eq 0 ]; then
+ OP_DELETE=""
+ fi
+
+ # Opción de compresión
+ OP_COMPRESS="-z"
+ if [ $CMPFILE -eq 0 ]; then
+ OP_COMPRESS=""
+ fi
+
+ #___________________________________________________________________
+ #
+ # Fichero con la clave remota del rsync para el parámetro
+ # "--password-file" para que no se pida ésta en el proceso.
+ #___________________________________________________________________
+ #
+ FILE_PASSWD="--password-file=/scripts/passrsync"
+
+
+ #___________________________________________________________________
+ #
+ # Función: montaCache
+ #
+ # Descripción:
+ #
+ # Monta la cache y devuelve la ruta hacía ella
+ #
+ # Parámetros:
+ #
+ # Ninguno
+ #___________________________________________________________________
+ #
+ function montaCache()
+ {
+ # Error si no existe caché
+ if ! $(ogFindCache >/dev/null); then
+ echo ""
+ return
+ fi
+ cache=$(ogMountCache)
+ echo $cache
+ }
+ #___________________________________________________________________
+ #
+ # Función: editarLista
+ #
+ # Descripción:
+ #
+ # Edita lista de archivos a transferir para depurar lineas
+ #
+ # Parámetros:
+ #
+ # $1 Lista de entrada
+ # $2 Lista de salida
+ #___________________________________________________________________
+ #
+ function editarLista()
+ {
+ # Edición:
+ # a) Quitarle lineas que contengan './'
+ # b) La primera linea (reporter del rsync)
+ # c) Las dos últimas lineas del final (reporter del rsync)
+
+ echo "Editando lista de archivos Entrada:$1 Salida:$2" | tee -a $OGLOGSESSION $OGLOGFILE
+ cat $1 | sed '/\.\//d' | sed '1d' | sed -n -e :a -e '1,2!{P;N;D;};N;ba'>$2
+
+ # Otra forma
+ #sed -i -e s/"^sent.*.bytes\/sec"//g -e s/^total.*.speedup.*.$//g -e s/"sending.*.list"//g $IMGINFO
+ #sed -i '/^\.\//d' $IMGINFO
+
+ }
+
+ #___________________________________________________________________
+ #
+ # Función: crearImagen
+ #
+ # Descripción:
+ #
+ # Sincroniza archivos entre origen y destino. Al final del
+ # proceso el contenido de destino será igual al de origen.
+ # La creación de imagen siempre tiene lugar entre una partición
+ # y un repositorio como origen y destino respectivamente.
+ #
+ # Parámetros:
+ #
+ # $1: Origen
+ # $2: Destino
+ # $3: Sistema de ficheros de la partición
+ # $4: Indica si la sincronización es local o remota
+ # 1: El origen o el destino es remoto
+ # 2: Tanto el origen como el destino son locales
+ # $5: Vale
+ # 1=Para crear la lista de archivos a transferir
+ # 2= Cuando se quiere sincronizar usando la lista
+ # $6: Path a la lista de archivos
+ #___________________________________________________________________
+ #
+ function crearImagen()
+ {
+ case "$3" in
+ NTFS)
+ OP_ARCHIVO="-aH"
+ rm "$1pagefile.sys"
+ #OP_EXCLUDE="--exclude 'pagefile.sys'"
+ ;;
+ EXT2 | EXT3 | EXT4 )
+ OP_ARCHIVO="-alH"
+ OP_EXCLUDE="--exclude 'tmp' --exclude 'proc' --exclude 'sys'"
+ ;;
+ esac
+
+
+ case "$4" in
+ 1)
+ OP_PASSWD=$FILE_PASSWD
+ ;;
+ 2)
+ OP_PASSWD=""
+ ;;
+ esac
+
+ FREG=$OGLOGCOMMAND # Por defecto se redirecciona al archivo de log de comandos
+ case "$5" in
+ 1)
+ OP_ARCHIVO=$OP_ARCHIVO"nv" # Simulación para crear lista
+ FREG=$6
+ ;;
+ 2)
+ OP_FILELIST="--files-from=$6"
+ OP_ARCHIVO="$OP_ARCHIVO $OP_FILELIST"
+ ;;
+ esac
+
+ echo "rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_EXCLUDE $OP_PASSWD $1 $2 " | tee -a $OGLOGSESSION $OGLOGFILE
+ rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_EXCLUDE $OP_PASSWD $1 $2>$FREG;
+ }
+
+ #___________________________________________________________________
+ #
+ # Función: restaurarImagen
+ #
+ # Descripción:
+ #
+ # Sincroniza archivos entre origen y destino. Al final del
+ # proceso el contenido de destino será igual al de origen.
+ # La restauración de imagen siempre tiene lugar entre la caché
+ # o un repositorio y una partición o carpeta como origen y destino
+ # respectivamente.
+ #
+ # Parámetros:
+ #
+ # $1: Origen
+ # $2: Destino
+ # $3: Sistema de ficheros de la partición
+ # $4: Indica si la sincronización es local o remota
+ # 1: El origen o el destino es remoto
+ # 2: Tanto el origen como el destino son locales
+ #___________________________________________________________________
+ #
+ function restaurarImagen()
+ {
+ case "$3" in
+ NTFS)
+ OP_ARCHIVO="-aH"
+ ;;
+ EXT2 | EXT3 | EXT4)
+ OP_ARCHIVO="-alH"
+ ;;
+ esac
+
+ case "$4" in
+ 1)
+ OP_PASSWD=$FILE_PASSWD
+ ;;
+ 2)
+ OP_PASSWD=""
+ ;;
+ esac
+
+ echo "rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_PASSWD $1 $2" | tee -a $OGLOGSESSION $OGLOGFILE
+ rsync $OP_ARCHIVO $OP_COMPRESS $OP_DELETE $OP_PASSWD $1 $2>$OGLOGCOMMAND;
+ }
+
+ #___________________________________________________________________
+ #
+ # Función: crearListaAcl
+ #
+ # Descripción:
+ #
+ # Crea la lista de control de archivos para el sistema operativo
+ # que ocupa la partición que se quiere clonar
+ #
+ # Parámetros:
+ #
+ # $1: Origen
+ # $2: Destino
+ # $3: Sistema de ficheros de la partición
+ # $4: disco
+ # $5: partición
+ #___________________________________________________________________
+ #
+ function crearListaAcl()
+ {
+ case "$3" in
+ NTFS)
+ echo "Creando lista de control de acceso a ficheros para el sistema windows de la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
+ echo "Desmontando la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogUnmount $4 $5 | tee -a $OGLOGSESSION $OGLOGFILE
+ echo "Ejecutando comando ntfs-3g.secaudit -b /dev/sda$5 /" | tee -a $OGLOGSESSION $OGLOGFILE
+ ntfs-3g.secaudit -b /dev/sda$5 / > /tmp/$FILE_ACL
+ echo "Montando de nuevo la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogMount $4 $5
+ echo "Copiando archivo de listas de control (ACL) desde /tmp/$FILE_ACL a $1." | tee -a $OGLOGSESSION $OGLOGFILE
+ cp /tmp/$FILE_ACL $1.
+ ;;
+ esac
+ }
+ #___________________________________________________________________
+ #
+ # Función: restauraListaAcl
+ #
+ # Descripción:
+ #
+ # Restaura la lista de control de archivos para el sistema operativo
+ # que ocupa la partición que se quiere restaurar
+ #
+ # Parámetros:
+ #
+ # $1: Origen
+ # $2: Destino
+ # $3: Sistema de ficheros de la partición
+ # $4: disco
+ # $5: partición
+ #___________________________________________________________________
+ #
+ function restauraListaAcl()
+ {
+ case "$3" in
+ NTFS)
+ echo "Restaurando lista de control de acceso a ficheros para el sistema windows de la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
+ echo "Copiando archivo de listas de control (ACL) desde $2$FILE_ACL a /tmp/." | tee -a $OGLOGSESSION $OGLOGFILE
+ cp $2$FILE_ACL /tmp/.
+ echo "Desmontando la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogUnmount $4 $5 | tee -a $OGLOGSESSION $OGLOGFILE
+ echo "Ejecutando comando ntfs-3g.secaudit -se /dev/sda$5 /" | tee -a $OGLOGSESSION $OGLOGFILE
+ ntfs-3g.secaudit -se /dev/sda$5 /tmp/$FILE_ACL
+ echo "Montando de nuevo la particion $5" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogMount $4 $5
+ echo "Borrando archivo de listas de control (ACL) de $2$FILE_ACL" | tee -a $OGLOGSESSION $OGLOGFILE
+ rm $2$FILE_ACL
+ ;;
+ esac
+ }
+ #___________________________________________________________________
+ #
+ # Función: eliminaListaAcl
+ #
+ # Descripción:
+ #
+ # Elimina la lista de control de archivos creada temporalmente
+ # para el proceso de creación e imagen
+ #
+ # Parámetros:
+ #
+ # $1: Origen
+ # $2: Sistema de ficheros de la partición
+ #___________________________________________________________________
+ #
+ function eliminaListaAcl()
+ {
+ case "$2" in
+ NTFS)
+ echo "Borrando archivo de listas de control (ACL) de $1$FILE_ACL" | tee -a $OGLOGSESSION $OGLOGFILE
+ rm $1$FILE_ACL
+ ;;
+ esac
+ }
+ #___________________________________________________________________
+ #
+ # Función: comprimeImagen
+ #
+ # Descripción:
+ #
+ # Comprimer la carpeta donde está se ha almacenado la imagen
+ # recientemente creada
+ #
+ # Parámetros:
+ #
+ # $1: Nombre de la imagen (Es el mismo que la carpeta que la alberga)
+ #___________________________________________________________________
+ #
+ function comprimeImagen()
+ {
+ TIME1=$SECONDS
+ RUTAIMG="/opt/opengnsys/images"
+ CARPETAIMAGEN=$RUTAIMG/$1
+ echo "Comprimiendo la imagen $1. Ruta de la imagen: $RUTAIMG" | tee -a $OGLOGSESSION $OGLOGFILE
+ echo "find $CARPETAIMAGEN | cpio -H newc -oa | gzip -9c en $CARPETAIMAGEN.IMG" | tee -a $OGLOGSESSION $OGLOGFILE
+ find $CARPETAIMAGEN | cpio -H newc -oa | gzip -9c > $CARPETAIMAGEN.IMG
+ TIME=$[SECONDS-TIME1]
+ echo "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
+ }
diff --git a/client/shared/scripts/bootOs b/client/shared/scripts/bootOs
index 78d779be..90e5006c 100755
--- a/client/shared/scripts/bootOs
+++ b/client/shared/scripts/bootOs
@@ -8,8 +8,11 @@ if [ $# -ne 2 ]; then
exit $?
fi
-echo "[0] Inicio del proceso de arranque."
+# Comprobar errores.
PART=$(ogDiskToDev "$1" "$2") || exit $?
+ogMount $1 $2 || exit $?
+
+echo "[0] Inicio del proceso de arranque."
NAME="$(ogGetHostname)"
NAME=${NAME:-"pc"}
OSTYPE=$(ogGetOsType $1 $2)
@@ -22,26 +25,24 @@ if [ "$OSTYPE" == "Windows" ]; then
fi
echo "[10] Desmontar todos los sistemas de archivos."
-sync
+sync
for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do
- ogUnmountAll $i 2>/dev/null
+ ogUnmountAll $i &>/dev/null
done
case "$OSTYPE" in
Windows)
echo "[30] Mostrar y activar particion de Windows $PART."
[ $(ogGetPartitionType $1 $2) == "HNTFS" ] && ogUnhidePartition $1 $2
- ogSetPartitionActive $1 $2
- echo "[50] Asignar nombre Windows \"$NAME\" y usuario por defecto."
- ogSetWindowsName $1 $2 "$NAME"
;;
Linux)
echo "[30] Asignar nombre Linux \"$NAME\"."
ETC=$(ogGetPath $1 $2 /etc)
[ -d "$ETC" ] && echo "$NAME" >$ETC/hostname 2>/dev/null
if [ -f "$ETC/fstab" ]; then
+ # Sustituir UUID o LABEL por su dispositivo en definición de sistema de archivo raíz.
echo "[50] Actaualizar fstab con particion raiz \"$PART\"."
- awk -v P="$PART " '{ if ($2=="/") {sub(/^.*$/, P, $1)}
- print } ' $ETC/fstab >/tmp/fstab
+ awk -v P="$PART " '{ if ($2=="/" && $1!~/^#/) {sub(/^.*$/, P, $1)}
+ print }' $ETC/fstab >/tmp/fstab
mv /tmp/fstab $ETC/fstab
fi
;;
diff --git a/client/shared/scripts/buildToOrder b/client/shared/scripts/buildToOrder
new file mode 100755
index 00000000..ef682abf
--- /dev/null
+++ b/client/shared/scripts/buildToOrder
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+#/**
+# BuildToOrder
+#@brief Script de ejemplo para realizar una configuracion del sistema operativo antes de generar imagen o de restaurado.
+#@brief Activa el uso de los contralodres de disco más usados en windows 7.
+#@brief (puede usarse como complemento para el programa de creación de imágenes o de restauración).
+#@param 1 disco
+#@param 2 particion
+#@return
+#@TODO
+#@exception
+#@version 1.0.4 - Discos ide + SATA.
+#@author
+#@date 2012-10-05
+
+
+#Control de parametros.
+PROG="$(basename $0)"
+if [ $# -ne 2 ]; then
+ ogRaiseError $OG_ERR_FORMAT "Formato: $PROG ndisco nparticion"
+ exit $?
+fi
+
+
+MNTDIR=$(ogMount $1 $2)
+
+# filtro Tipo de sistema operativo.
+OSTYPE="$(ogGetOsType $1 $2)"
+
+
+case "$OSTYPE" in
+ Windows)
+ echo "Filtro versión de sistema operativo windows."
+ TYPE=$(ogGetOsVersion $1 $2)
+ case "$TYPE" in
+ *Windows\ XP)
+ echo "Versión de sistema operativo Windows XP no soportado"
+ ;;
+ *Windows\ 7*)
+ echo "Windows 7"
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet001\services\intelide\Start' '0' && echo "activado intelide"
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet002\services\intelide\Start' '0'
+
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet001\services\pciide\Start' '0' && echo "activado pciide"
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet002\services\pciide\Start' '0'
+
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet001\services\msahci\Start' '0' && echo "activado msahci"
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet002\services\msahci\Start' '0'
+
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet001\services\iaStorV\Start' '0' && echo "activado iaStorV"
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet002\services\iaStorV\Start' '0'
+
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet001\services\iaStor\Start' '0' && echo "activado iaStor"
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet002\services\iaStor\Start' '0'
+
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet001\services\LSI_SAS\Start' '0' && echo "activado iaStor"
+ ogSetRegistryValue $MNTDIR SYSTEM '\ControlSet002\services\LSI_SAS\Start' '0'
+
+ ;;
+ esac
+ ;;
+ Linux)
+ echo "Versión de Sistema Operativo GNU/Linux no soportado"
+ ;;
+ *)
+ echo "Sistema Operativo no soportado"
+ ;;
+esac
diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster
index ee7a82da..64f511d6 100755
--- a/client/shared/scripts/cloneRemoteFromMaster
+++ b/client/shared/scripts/cloneRemoteFromMaster
@@ -54,7 +54,6 @@
#@version 1.0.3 - Habilita el uso de la variable OGWINREDUCE=TRUE|TRUE para reducir el sistema de archivos a enviar
#@author Antonio J. Doblas Viso. Universidad de Malaga.
#@date 2011/12/22
-
#*/ ##
#test 1. cliente sin particiones. Detectado TODO: crear estrucutras de particiones
@@ -89,27 +88,27 @@ then
source /tmp/net-eth*
HOSTIP=`ogGetIpAddress`
fi
-MASTERIP=$1
-PROTOCOL=$4
-case $PROTOCOL in
- MULTICAST|multicast)
+MASTERIP="$1"
+PROTOCOL="$4"
+case "${PROTOCOL^^}" in
+ MULTICAST)
SESSIONMCASTSERVER=$5
SESSIONMCASTCLIENT=`echo $5 | awk -F: '{print $1}'`
;;
- UNICAST|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 $?)
- ;;
+ 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
-PARTTARGET=$7
+DISKTARGET="$6"
+PARTTARGET="$7"
#herramienta de compresión.
-TOOLCLONE=$8
-COMPRESOR=$9
+TOOLCLONE="$8"
+COMPRESOR="$9"
pkill faucet
@@ -131,35 +130,35 @@ case $MASTERIP in
# 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" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[5] Master en modo $MODEMASTER: informacion inicial a los clientes-slaves"
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" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[10]: Desmontando DISK:$DISKSOURCE PARTITION:$PARTSOURCE"
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) || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar tamaño partcion $2 $3 l127"; echo $?)
- if [ "$OGWINREDUCE" == "TRUE" ]
+ if [ "$OGWINREDUCE" == "TRUE" ]
then
- echo "[15]: Calculando la reduccion del sistema de archivos DISK:$DISKSOURCE PARTITION:$PARTSOURCE SIZE:$SIZE" | tee -a $OGLOGSESSION $OGLOGFILE
- ogReduceFs $2 $3 || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al reducir el FS $2 $3 l129"; echo $?)
+ ogEcho log session "[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 $?)
fi
REDSIZE=$(ogGetFsSize $2 $3) || exit $(ogRaiseError $OG_ERR_REDUCEFS "Error al detectar el nuevo FS $2 $3 l130"; echo $?)
TIMEAUX=$[SECONDS-TIME1]
- echo "[20]: Preparada para enviar el sistema de archivos: Tamaño datos: $REDSIZE origne: $DISKSOURCE $PARTSOURCE" | tee -a $OGLOGSESSION $OGLOGFILE
- echo " tiempo de reducción del sistema de archivos: $[TIMEAUX/60]m $[TIMEAUX%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[20]: Preparada para enviar el sistema de archivos: Tamaño datos: $REDSIZE origne: $DISKSOURCE $PARTSOURCE"
+ ogEcho log session " tiempo de reducción del sistema de archivos: $[TIMEAUX/60]m $[TIMEAUX%60]s"
#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" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[25] Master en Modo $MODEMASTER: informacion de transferencia a los clientes-slaves $PROTOCOL $TOOLCLONE $COMPRESOR $REDSIZE"
pkill faucet
if ps aux | grep -v grep | grep "faucet 4000"
then
@@ -167,22 +166,24 @@ case $MASTERIP in
else
faucet 4000 --out echo "READY $TOOLCLONE $COMPRESOR $REDSIZE" &
fi
- case $PROTOCOL in
- MULTICAST|multicast)
- echo "[29] ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR" | tee -a $OGLOGSESSION $OGLOGFILE
+ case "${PROTOCOL^^}" in
+ MULTICAST)
+ ogEcho log session "[29] Transferencia Multicast"
+ ogEcho log "ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR"
ogMcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONMCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
;;
- UNICAST|unicast)
+ UNICAST)
sleep 60
- echo "[29] ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[29] Transferencia Unicast"
+ ogEcho log "ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR"
ogUcastSendPartition $DISKSOURCE $PARTSOURCE $SESSIONUCASTSERVER $TOOLCLONE $COMPRESOR || RETVAL=$?
;;
- esac
+ esac
#if [ $REDSIZE -lt $SIZE ]; then
# echo "[85] Redimensionar partición a $SIZE KB."
# ogSetPartitionSize $2 $3 $SIZE
- echo "[90] Extender sistema de archivos." | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[90] Extender sistema de archivos."
ogExtendFs $2 $3
#fi
pkill faucet
@@ -192,27 +193,28 @@ case $MASTERIP in
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"
+ ogEcho log session "[5] Master en modo $MODEMASTER: informacion inicial a los clientes-slaves"
+ ogEcho log session "[10]: Preparando Imagen: $IMG"
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"
+ ogEcho log session "[25] Master en Modo $MODEMASTER"
+ ogEcho log "Informacion de transferencia a los clientes-slaves $PROTOCOL $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)
+ fi
+ case "${PROTOCOL^^}" in
+ MULTICAST)
echo "[29] ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER "
ogMcastSendFile $2 $3.img $SESSIONMCASTSERVER || RETVAL=$?
;;
- UNICAST|unicast)
+ UNICAST)
sleep 60
echo "[29] ogUcastSendFile $2 $3.img $SESSIONUCASTSERVER"
ogUcastSendFile $2 $3.img $SESSIONUCASTSERVER || RETVAL=$?
@@ -223,24 +225,24 @@ case $MASTERIP in
then
exit 0
else
- exit $(ogRaiseError $OG_ERR_MCASTSENDFILE "Error al enviar la image $2 $3.img con protocolo $PROTOCOL l200"; echo $?)
+ exit $(ogRaiseError $OG_ERR_MCASTSENDFILE "Error al enviar la image $2 $3.img con protocolo $PROTOCOL l200"; echo $?)
fi
;;
esac
# FIN Preparando instrucción del Master segun $MODEMASTER{SENDPARTITION SENDFILE}
;;
*)
- echo "[1] Equipo -Client- preparando para recibir datos $PROTOCOL" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[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)
+ case "${PROTOCOL^^}" in
+ 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" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[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: " | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[25] Buscando informacion extra sobre la clonacion con el master $MASTERIP: "
sleep 10
TIMEWAITMASTER=120
TIMEWAITING=0
@@ -254,33 +256,32 @@ case $MASTERIP in
[ "$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
+ [ "$GETINFO" == "READY" ] && GETINFO="OK"
done
echo $INFOEXTRA
TOOLCLONE=$(echo $INFOEXTRA | awk '{print $2}')
COMPRESOR=$(echo $INFOEXTRA | awk '{print $3}')
SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $4}')
- echo "[26] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE " | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log "$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)
SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | grep Disk | awk -F" " '{print $3}' | tr -d kB);
- echo "[28] comprobando que el tamaño de la imagen $SIZEIMAGE es menor que el de la particion destino $SIZEPARTTARGET" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[28] comprobando que el tamaño de la imagen $SIZEIMAGE es menor que el de la particion destino $SIZEPARTTARGET"
# comprobamos que el tamaño de a imagen es menor que la del cliente.
if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ]
then
- echo "[30] Iniciando Cliente $PROTOCOL " | tee -a $OGLOGSESSION $OGLOGFILE
- case $PROTOCOL in
- MULTICAST|multicast)
- echo "ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[30] Iniciando Cliente $PROTOCOL "
+ case "${PROTOCOL^^}" in
+ MULTICAST)
+ ogEcho log session "ogMcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONMCASTCLIENT $TOOLCLONE $COMPRESOR"
ogMcastReceiverPartition "$DISKTARGET" "$PARTTARGET" "$SESSIONMCASTCLIENT" "$TOOLCLONE" "$COMPRESOR" || exit $(ogRaiseError $OG_ERR_MCASTRECEIVERPARTITION " l251 "; echo $?)
;;
- UNICAST|unicast)
- echo "ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR" | tee -a $OGLOGSESSION $OGLOGFILE
+ UNICAST)
+ ogEcho log session "ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR"
ogUcastReceiverPartition $DISKTARGET $PARTTARGET $SESSIONUCASTCLIENT $TOOLCLONE $COMPRESOR || exit $(ogRaiseError $OG_ERR_UCASTRECEIVERPARTITION " l230 "; echo $?)
;;
esac
- echo "[90] llamando a configureOS $DISKTARGET $PARTTARGET" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[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
@@ -289,6 +290,5 @@ case $MASTERIP in
;;
esac
TIME=$[SECONDS-TIME1]
-echo "[100] Duración de la operación $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
-
+ogEcho log session "[100] Duración de la operación $[TIME/60]m $[TIME%60]s"
diff --git a/client/shared/scripts/configureOs b/client/shared/scripts/configureOs
index b0ab3d33..ba5ee735 100755
--- a/client/shared/scripts/configureOs
+++ b/client/shared/scripts/configureOs
@@ -56,9 +56,10 @@ case "$OSTYPE" in
ogWindowsBootParameters $1 $2
# Registrar en Windows que la partición indicada es su nueva unidad C:\
ogWindowsRegisterPartition $1 $2 C $1 $2
- ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows
- # Instalar cliente para Windows.
- ogInstallWindowsClient $1 $2
+ #ogLoadHiveWindows $1 $2; ogSetWindowsChkdisk $OGWINCHKDISK; ogUpdateHiveWindows
+ # Instalar cliente para Windows (no activar en sistema en produccion ver ticket 604).
+ ogInstallMiniSetup $1 $2 postconf.cmd
+ ogInstallWindowsClient $1 $2 postconf.cmd
;;
Linux)
## Install and Configure Grub based on OS installed and Grub 1st stage location.
diff --git a/client/shared/scripts/configureOsCustom.template b/client/shared/scripts/configureOsCustom.template
new file mode 100644
index 00000000..a9573cae
--- /dev/null
+++ b/client/shared/scripts/configureOsCustom.template
@@ -0,0 +1,12 @@
+#!/bin/bash
+# configureOsCustom.template
+# Plantilla para fichero de configuración del cliente tras restaurar una imagen.
+# Recibe los mismos parámetros que el script "configureOsCustom".
+# Nota: para usar este fichero, renombrar como "createImageCustomPost".
+
+
+# Control de parámetros.
+[ $# -ne 4 ] || exit
+
+
+
diff --git a/client/shared/scripts/createBaseImage b/client/shared/scripts/createBaseImage
new file mode 100755
index 00000000..b9a3c557
--- /dev/null
+++ b/client/shared/scripts/createBaseImage
@@ -0,0 +1,174 @@
+#!/bin/bash
+
+#/**
+# createBaseImage
+#@brief Script 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_LOCKED # 4 Imagen o particion bloqueada
+#@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_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada
+#@note No necesario permiso se escritura por samba en repo.
+#@todo: que hacer, si el tamaño de la cache es sufciente, pero no tiene espacio libre
+#@version 1.0 - creación imagen con btrfs
+#@author
+#@date 2012-12-04
+#*/ ##
+
+trap "onexit $1 $2 $3 \"$4\"" 1 2 3 6 9 14 15 EXIT
+
+# Si salimos con error demontamos la imagen y desbloqueamos la imagen y la particion
+function onexit() {
+ local exit_status=$?
+ if [ $exit_status -ne 4 ]; then
+ ogUnlockImage "$3" "/$4.$IMGEXT"
+ ogUnlock $1 $2
+ fi
+ exit $exit_status
+}
+
+TIME1=$SECONDS
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Factor de calculo de Time out al crear imagen: valor por defecto en engine.cfg
+CREATESPEED=${CREATESPEED:-"100000*4"}
+
+# Sistema de fichero de la imagen según kernel, menor que 3.7 EXT4. comparamos revision
+KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
+[ $KERNELVERSION \< 3.07 ] && IMGFS="EXT4" || IMGFS="BTRFS"
+
+# % de compresion para estimacion tamaño imagen IMGFS="EXT4"
+ZSYNC=${ZSYNC:-"120"}
+
+# Si IMGFS="BTRFS" la compresion es mayor.
+[ $IMGFS == "BTRFS" ] && let ZSYNC=$ZSYNC-30
+
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$PROG: $MSG_HELP_createBaseImage" \
+ "$PROG ndisco nparticion REPO|CACHE base_image" \
+ "$PROG 1 1 REPO Windows7"
+ exit 0
+fi
+
+[ $# -ne 4 ] && exit $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE imagen" ; echo $?)
+
+# Limpiamos fichero de log
+echo " " > $OGLOGCOMMAND
+[ "$(ogGetCaller)" == "RestaurarImagenBasica" ] || echo -n ""> $OGLOGSESSION
+
+ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+
+# Valores por defecto en etc/engine.cfg
+IMGEXT="img"
+REPOIP=$(ogGetRepoIp)
+
+
+# Comprobamos si la imagen o la particion estan bloqueada:
+ogIsImageLocked "$3" "$4.$IMGEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$3 $4.$IMGEXT"; echo $?)
+ogIsLocked "$1" "$2" && exit $(ogRaiseError session $OG_ERR_LOCKED "$1 $2"; echo $?)
+
+# Si el repositorio es CACHE comprobamos que exista
+if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
+ ! ogFindCache >/dev/null && exit $(ogRaiseError session $OG_ERR_NOTCACHE "CACHE "; echo $?)
+fi
+
+# Obtener información de los parámetros de entrada.
+PART=$(ogDiskToDev "$1" "$2" 2>/dev/null) || exit $(ogRaiseError session $OG_ERR_PARTITION "$1 $2" ; echo $?)
+# Comprobar consistencia del sistema de archivos.
+echo " " > $OGLOGCOMMAND
+SIZEFS=$(ogGetFsSize $1 $2)
+ogEcho log session "[20] $MSG_HELP_ogCheckFs $PART $SIZEFS (KB) "
+ogUnmount $1 $2
+ogCheckFs $1 $2 &> $OGLOGCOMMAND || exit $(ogRaiseError session $OG_ERR_PARTITION "ogCheckFs $1 $2"; echo $?)
+
+# Comprobamos que la particion se puede montar
+ORIG=$(ogMount $1 $2) || exit $(ogRaiseError session $OG_ERR_PARTITION "$1 $2" ; echo $?)
+
+# Borramos ficheros de paginacion y configuracion
+case "$(ogGetFsType $1 $2)" in
+ EXT[234])
+ ogCleanLinuxDevices $1 $2
+ rm -rf $ORIG/tmp/*
+ ;;
+ NTFS)
+ [ $(ogGetPath $1 $2 pagefile.sys) ] && ogDeleteFile $1 $2 pagefile.sys
+ [ $(ogGetPath $1 $2 hiberfil.sys) ] && ogDeleteFile $1 $2 hiberfil.sys
+ [ $(ogGetPath $1 $2 swapfile.sys) ] && ogDeleteFile $1 $2 swapfile.sys
+ ;;
+esac
+
+#Comprobar espacio que requerira la imagen para ser almacenada
+SIZEDATA=$(df -k | grep $PART | awk '{print $3}')
+#Aplicar factor de compresion
+let SIZEREQUIRED=$SIZEDATA*$ZSYNC/100
+# El tamaño mínimo del sistema de ficheros btrfs es 250M, ponemos 300
+[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
+#Comprobar espacio libre en el contenedor.
+[ "$3" == "CACHE" -o "$3" == "cache" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`)
+[ "$3" == "REPO" -o "$3" == "repo" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $4}')
+ogEcho log session " $MSG_SCRIPTS_CREATE_SIZE $SIZEREQUIRED $SIZEFREE"
+[ $SIZEREQUIRED -gt $SIZEFREE ] && exit $(ogRaiseError session $OG_ERR_CACHESIZE "$3"; echo $?)
+IMGDIR="$(ogGetParentPath "$3" "/$4")"
+IMGFILE=${IMGDIR[$3]}/$(basename "/$4").$IMGEXT
+
+# Crear la imagen.
+echo " " > $OGLOGCOMMAND
+TIME2=$SECONDS
+
+ogEcho log session "[40] $MSG_HELP_ogCreateImage $1 $2 $3 $4 "
+# Si existe el fichero de la imagen se hace copia de seguridad y se redimensiona, si no existe se crea.
+ogEcho log session "[50] $MSG_HELP_ogCreateFileImage."
+ogLockImage "$3" "/$4.$IMGEXT"
+ogCreateFileImage $3 "$4" $IMGEXT $SIZEREQUIRED
+
+# Creamos la lista del contenido y lo situamos en la particion a copiar.
+ogEcho log session "[60] $MSG_HELP_ogCreateInfoImage"
+ogCreateInfoImage $1 $2 $IMGEXT
+
+TIMEAUX3=$[SECONDS-TIME2]
+ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
+
+# Esperamos que el servidor termine de crear y montar la imagen
+ogWaitSyncImage "$3" "$4" $IMGEXT "mounted" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
+
+# Sincronizamos los datos de la particion con la imagen.
+ogEcho log session "[70] $MSG_HELP_ogSyncCreate."
+ogSyncCreate $1 $2 $3 "$4" $IMGEXT
+RETVAL=$?
+[ $RETVAL == 0 ] || ogEcho session warning "$MSG_ERR_SYNCHRONIZING"
+
+TIMEAUX5=$[SECONDS-TIMEAUX3]
+ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX5/60]m $[TIMEAUX5%60]s"
+
+# Reducimos la imagen: solo para kernel <= 3.7, imagenes con FS ext4. (Desmonta y desbloquea la imagen)
+ogEcho log session "[80] $MSG_HELP_ogReduceImage: $3 /$4.$IMGEXT"
+ogReduceImage $3 "$4" $IMGEXT
+# Esperamos que el servidor termine de reducir la imagen
+ogWaitSyncImage "$3" "$4" $IMGEXT "reduced" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
+
+echo " " > $OGLOGCOMMAND
+# Comprobamos que la imagen esta bien detectacdo que es un sistema de ficheros.
+ogEcho log session "[95] $MSG_HELP_ogCheckSyncImage"
+ogCheckSyncImage $3 "$4" "img" || exit $(ogRaiseError session $OG_ERR_IMAGE "$3 $4 img" ; echo $?)
+
+#resumen de la operacion
+IMGSIZE=$(ls -l --block-size=1024 "$IMGFILE" | cut -f5 -d" ")
+
+TIME=$[SECONDS-TIME1]
+ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s"
+ogEcho log session " FileSystem $PART with $SIZEDATA KB data created onto file-image as $4 and used $IMGSIZE KB acros DFS rsync "
+
+# Si ha habido problema al sincronizar nos salimos con error
+[ $RETVAL == 0 ] || exit $OG_ERR_SYNCHRONIZING
diff --git a/client/shared/scripts/createDiffImage b/client/shared/scripts/createDiffImage
new file mode 100755
index 00000000..32784012
--- /dev/null
+++ b/client/shared/scripts/createDiffImage
@@ -0,0 +1,215 @@
+#!/bin/bash
+
+#/**
+# createDiffImage
+#@brief Script de ejemplo para crear una imagen diferencial 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_completa
+#@param 5 imagen_diferencial
+#@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_NOTFOUND # Fichero de registro no encontrado.
+#@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_LOCKED # 4 Partición o fichero bloqueado.
+#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada.
+#@exception OG_ERR_DONTSYNC_IMAGE # 71 Imagen no sincronizable (es monolitica)
+#@note Se toma como punto de partida el script createImage.
+#@todo: que hacer, si el tamaño de la cache es sufciente, pero no tiene espacio libre
+#@version 1.0 - creacion de la diferencial con rsync y btrfs
+#@author
+#@date 2012-12-04
+#*/ ##
+trap "onexit $1 $2 $3 \"$4\" \"$5\"" 1 2 3 6 9 14 15 EXIT
+
+function onexit() {
+ local exit_status=$?
+ ogUnmountImage $3 "$5" $DIFFTYPE &>/dev/null
+ ogUnmountImage $3 "$4" $IMGEXT &>/dev/null
+ if [ $exit_status -ne 4 ]; then
+ ogUnlockImage "$3" "/$4.$IMGEXT" &>/dev/null
+ ogUnlockImage "$3" "/$5.$DIFFEXT" &>/dev/null
+ ogUnlock $1 $2 &>/dev/null
+ fi
+ exit $exit_status
+}
+
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Factor de calculo de Time out al crear imagen: valor por defecto en engine.cfg
+CREATESPEED=${CREATESPEED:-"100000*4"}
+# Sistema de fichero de la imagen según kernel, menor que 3.7 EXT4. comparamos revision
+KERNELVERSION=$(uname -r| awk '{printf("%d",$1);sub(/[0-9]*\./,"",$1);printf(".%02d",$1)}')
+[ $KERNELVERSION \< 3.07 ] && IMGFS="EXT4" || IMGFS="BTRFS"
+# % de compresion para estimacion tamaño imagen IMGFS="EXT4"
+ZSYNC=${ZSYNC:-"120"}
+# Si IMGFS="BTRFS" la compresion es mayor.
+[ $IMGFS == "BTRFS" ] && let ZSYNC=$ZSYNC-30
+
+TIME1=$SECONDS
+
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$PROG: $MSG_HELP_createDiffImage" \
+ "$PROG ndisco nparticion REPO|CACHE base_image diff_image" \
+ "$PROG 1 1 REPO Windows7 Win7aula23"
+ exit 0
+fi
+
+[ $# -lt 5 ] && exit $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE base_image diff_image"; echo $?)
+
+# Valores por defecto en etc/engine.cfg
+IMGEXT="img"
+DIFFEXT="img.diff"
+DIFFTYPE="diff"
+REPOIP=$(ogGetRepoIp)
+
+# Limpiamos los archivo de log
+echo -n "" >$OGLOGCOMMAND
+[ "$(ogGetCaller)" == "RestaurarSoftIncremental" ] || echo -n "" > $OGLOGSESSION
+
+ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+
+# Comprobamos si la imagen diferencial o la particion estan bloqueada:
+ogIsImageLocked "$3" "$5.$DIFFEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$3 $5.$DIFFEXT"; echo $?)
+ogIsLocked "$1" "$2" && exit $(ogRaiseError session $OG_ERR_LOCKED "$1 $2"; echo $?)
+
+# Comprobar si la imagen completa existe.
+IMGFILE="$(ogGetPath "$3" "$4.$IMGEXT")" || exit $(ogRaiseError session $OG_ERR_NOTFOUND "$3 $4.$IMGEXT"; echo $?)
+
+# Comprobar que la imagen completa es sincronizable
+ogIsSyncImage "$3" "$4" "img" || exit $(ogRaiseError session $OG_ERR_DONTSYNC_IMAGE "$3 $4"; echo $?)
+# Comprobar que no está bloqueada
+ogIsImageLocked "$3" "$4.$IMGEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$3 $4.$IMGEXT"; echo $?)
+
+# Si el repositorio es CACHE comprobamos que exista
+if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
+ ! ogFindCache >/dev/null && exit $(ogRaiseError session $OG_ERR_NOTCACHE "CACHE "; echo $?)
+fi
+
+echo " " > $OGLOGCOMMAND
+
+# Obtener información de los parámetros de entrada.
+PART=$(ogDiskToDev "$1" "$2" 2>/dev/null) || exit $(ogRaiseError session $OG_ERR_PARTITION "$1 $2"; echo $?)
+#Comprobamos que la partición se puede montar.
+ORIG=$(ogMount $1 $2) || exit $(ogRaiseError session $OG_ERR_PARTITION "$1 $2"; echo $?)
+
+DIFFDIR="$(ogGetParentPath "$3" "/$5")"
+DIFFFILE="$DIFFDIR/$5.$DIFFEXT"
+
+ogLockImage "$3" "/$4.$IMGEXT"
+ogLockImage "$3" "/$5.$DIFFEXT"
+
+# Comprobar consistencia del sistema de archivos.
+echo " " > $OGLOGCOMMAND
+SIZEFS=$(ogGetFsSize $1 $2)
+ogEcho log session "[20] $MSG_HELP_ogCheckFs $1 $2 $SIZEFS (KB) "
+ogUnmount $1 $2
+ogCheckFs $1 $2 >$OGLOGCOMMAND || exit $(ogRaiseError session $OG_ERR_PARTITION "ogCheckFs $1 $2" ; echo $?)
+
+# Borramos ficheros de paginacion y configuracion
+FSTYPE=$(ogGetFsType $1 $2)
+case "$FSTYPE" in
+ EXT[234])
+ ogCleanLinuxDevices $1 $2
+ rm -rf $ORIG/tmp/*
+ ;;
+ NTFS)
+ [ $(ogGetPath $1 $2 pagefile.sys) ] && ogDeleteFile $1 $2 pagefile.sys
+ [ $(ogGetPath $1 $2 hiberfil.sys) ] && ogDeleteFile $1 $2 hiberfil.sys
+ [ $(ogGetPath $1 $2 swapfile.sys) ] && ogDeleteFile $1 $2 swapfile.sys
+ ;;
+esac
+
+# Crear la imagen.
+echo " " > $OGLOGCOMMAND
+TIME2=$SECONDS
+ogEcho log session "[40] $MSG_HELP_createDiffImage: $1 $2 $3 $4"
+# Creamos la lista del contenido y lo situamos en la particion a copiar.
+
+# Montamos imagen completa (con la que vamos a comparar)
+ogMountImage $3 "$4" $IMGEXT >/dev/null
+
+# Comprobar que la imagen completa se ha montado
+ogWaitSyncImage $3 "$4" $IMGEXT "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
+
+# Creamos la informacion de la imagen.
+ogEcho log session "[50] $MSG_HELP_ogCreateInfoImage "
+ogCreateInfoImage $1 $2 $3 "$4" "${DIFFTYPE}"
+[ $? -eq $OG_ERR_NOTDIFFERENT ] && exit $(ogRaiseError session $OG_ERR_NOTDIFFERENT; echo $?)
+
+#Calculamos el tamaño de la imagen:
+ogMount $1 $2 >/dev/null
+ogLock $1 $2
+ogEcho log session " $MSG_SCRIPTS_CREATE_SIZE"
+cd $ORIG
+SIZEDATA=$(grep -v "\/$" /tmp/ogimg.info | tr '\n' '\0'| du -x -c --files0-from=- 2>/dev/null|tail -n1 |cut -f1)
+let SIZEREQUIRED=$SIZEDATA*$ZSYNC/100
+# Tamaño minimo fichero imagen 300000
+[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
+
+# Comprueba que quepa en el repositorio
+[ "$3" == "CACHE" -o "$3" == "cache" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`) && ogMountCache >/dev/null
+[ "$3" == "REPO" -o "$3" == "repo" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $4}')
+ogEcho log session " $SIZEREQUIRED $SIZEFREE"
+[ $SIZEREQUIRED -gt $SIZEFREE ] && exit $(ogRaiseError session $OG_ERR_CACHESIZE "$3"; echo $?)
+
+TIMEAUX3=$[SECONDS-TIME2]
+ogEcho log session " $MSG_SCRIPTS_TASK_END $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
+
+# Del fichero de acl de la partición extraemos las acl de los ficheros de la diferencial
+if [ "$FSTYPE" == "NTFS" ]; then
+ ogEcho log session "[55] $MSG_HELP_ogAclFilter "
+ ogAclFilter
+ TIMEAUX4=$[SECONDS-TIMEAUX3]
+ ogEcho log session " $MSG_SCRIPTS_TASK_END $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX4/60]m $[TIMEAUX4%60]s"
+fi
+TIMEAUX5=$[SECONDS-TIMEAUX3]
+
+# Configuro la informacion del tamaño de los datos en /tmp/ogimg.info
+sed -i s/SIZEDATA/"$SIZEDATA"/g /tmp/ogimg.info
+
+# Creamos o redimensionamos la imagen
+ogEcho log session "[60] $MSG_HELP_ogCreateFileImage."
+ogCreateFileImage $3 "$5" $DIFFTYPE $SIZEREQUIRED
+
+# Esperamos que se monte la imagen despues de crarla en el servidor
+ogWaitSyncImage "$3" "$5" "$DIFFTYPE" "mounted" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $5 $DIFFTYPE: time_out."; echo $?)
+
+ogEcho log session "[70] $MSG_HELP_ogSyncCreate"
+# Copio los datos a la imagen diferecial :
+ogSyncCreate $1 $2 $3 "$5" $DIFFTYPE
+RETVAL=$?
+[ $RETVAL == 0 ] || ogEcho session warning "$MSG_ERR_SYNCHRONIZING"
+TIMEAUX6=$[SECONDS-TIMEAUX5]
+ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX6/60]m $[TIMEAUX6%60]s"
+
+# Reducimos la imagen diferencial -> solo para kernel <= 3.7, imagenes con FS ext4
+ogEcho log session "[80] $MSG_HELP_ogReduceImage: $3 /$4.$IMGEXT"
+ogReduceImage $3 "$5" $DIFFTYPE
+# Esperamos que el servidor termine de reducir la imagen
+ogWaitSyncImage "$3" "$5" $DIFFTYPE "reduced" $SIZEREQUIRED || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$3 $4 $IMGEXT: time_out."; echo $?)
+# TODO: necesaria funcion que espere a que se reduzca la imagen para continuar el script
+
+echo " " > $OGLOGCOMMAND
+# Comprobamos que la imagen esta bien
+ogEcho log session "[95] $MSG_HELP_ogCheckSyncImage"
+sleep 10
+ogCheckSyncImage $3 "$5" diff || exit $(ogRaiseError session $OG_ERR_IMAGE "$3 $5 diff"; echo $?)
+
+#resumen de la operacion
+IMGSIZE=$(ls -l --block-size=1024 "${DIFFFILE}"| cut -f5 -d" ")
+TIME=$[SECONDS-TIME1]
+ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s"
+ogEcho log session " FileSystem $PART with $SIZEDATA KB data created onto file-image as $5 and used $IMGSIZE KB acros DFS rsync "
+
+# Si ha habido problema al sincronizar nos salimos con error
+[ $RETVAL == 0 ] || exit $OG_ERR_SYNCHRONIZING
diff --git a/client/shared/scripts/createImage b/client/shared/scripts/createImage
index cd4a6abc..df98ec5b 100755
--- a/client/shared/scripts/createImage
+++ b/client/shared/scripts/createImage
@@ -1,9 +1,9 @@
#!/bin/bash
#/**
-# createImage
+#@file createImage
#@brief Scirpt de ejemplo para crear una imagen de un sistema de archivos.
-#@brief (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin).
+#@brief (puede usarse como base para el programa de creación de imágenes usado por OpenGnSys Admin).
#@param 1 disco
#@param 2 particion
#@param 3 REPO|CACHE
@@ -37,13 +37,6 @@
# test 4. crear una imagen en la Cache sin espacio sufiente.
# test 5. intentar crear una imagen, en la que no se puede reducir el FS.
-TIME1=$SECONDS
-
-#Load engine configurator from engine.cfg file.
-#Carga el configurador del engine desde el fichero engine.cfg
-[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
-
-
PROG="$(basename $0)"
if [ $# -ne 4 ]; then
@@ -51,121 +44,126 @@ if [ $# -ne 4 ]; then
exit $?
fi
+TIME1=$SECONDS
+
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
# Valores por defecto en etc/engine.cfg
#IMGPROG="partclone"
#IMGCOMP="lzop"
#IMGEXT="img"
#IMGREDUCE="TRUE"
-echo "[1] $MSG_SCRIPTS_START $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+echo " " > $OGLOGSESSION; echo " " > $OGLOGCOMMAND; echo " " > ${OGLOGCOMMAND}.tmp
+ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
# Si el repositorio es CACHE comprobamos que exista
if [ "$3" == "CACHE" -o "$3" == "cache" ]; then
! ogFindCache >/dev/null && exit $(ogRaiseError $OG_ERR_NOTCACHE "CACHE "; echo $?)
fi
-echo " " > $OGLOGCOMMAND
-
# Obtener información de los parámetros de entrada.
PART=$(ogDiskToDev "$1" "$2" 2>/dev/null) || exit $(ogRaiseError $OG_ERR_PARTITION "$1 $2"; echo $?)
-echo " " > $OGLOGCOMMAND
-
#Comprobamos acceso de escritura.
DIRTEMP=$(date +%Y%m%d-%H%M%S)
ogMakeDir $3 /$4$DIRTEMP 2>/dev/null || exit $(ogRaiseError $OG_ERR_NOTWRITE "$3"; echo $?) && ogDeleteTree $3 /$4$DIRTEMP
-echo " " > $OGLOGCOMMAND
-
IMGDIR=$(ogGetParentPath "$3" "/$4")
# Si no existe, crear subdirectorio de la imagen.
if [ $? != 0 ]; then
- echo "[5] $MSG_HELP_ogMakeDir \"$3 $(dirname "$4")." | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[5] $MSG_HELP_ogMakeDir \"$3 $(dirname "$4")."
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.
if [ -f "$IMGFILE" ]; then
- echo "[10] $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"." | tee -a $OGLOGSESSION $OGLOGFILE
- mv "$IMGFILE" "$IMGFILE.ant"
+ ogEcho log session "[10] $MSG_SCRIPTS_FILE_RENAME \"$IMGFILE\" -> \"$IMGFILE.ant\"."
+ mv "$IMGFILE" "$IMGFILE.ant"
mv "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
+ mv "$IMGFILE.sum" "$IMGFILE.sum.ant" 2>/dev/null
fi
#Comprobar espacio que requerira la imagen para ser almacenada
echo " " > $OGLOGCOMMAND
if ogMount $1 $2 &>/dev/null
then
- SIZEDATA=$(df -k | grep $PART | awk '{print $3}')
- #Aplicar factor de compresion
- FACTORGZIP=55/100
- FACTORLZOP=65/100
- let SIZEREQUIRED=$SIZEDATA*$FACTORLZOP
- #Comprobar espacio libre en el contenedor.
- [ "$3" == "CACHE" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`)
- [ "$3" == "REPO" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $4}')
+ SIZEDATA=$(df -k | grep $PART | awk '{print $3}')
+ #Aplicar factor de compresion
+ FACTORGZIP=55/100
+ FACTORLZOP=65/100
+ let SIZEREQUIRED=$SIZEDATA*$FACTORLZOP
+ #Comprobar espacio libre en el contenedor.
+ [ "$3" == "CACHE" ] && SIZEFREE=$(ogGetFreeSize `ogFindCache`)
+ [ "$3" == "REPO" ] && SIZEFREE=$(df -k | grep $OGIMG | awk '{print $4}')
else
- ogRaiseError $OG_ERR_PARTITION "$1 $2"
+ ogRaiseError $OG_ERR_PARTITION "$1 $2"
exit $?
-fi
-echo "[16] $PROG: $MSG_SCRIPTS_CREATE_SIZE $SIZEREQUIRED $SIZEFREE" | tee -a $OGLOGSESSION $OGLOGFILE
-[ "$SIZEREQUIRED" -gt "$SIZEFREE" ] && exit $(ogRaiseError $OG_ERR_CACHESIZE "$3" || echo $?)
-
+fi
-# TODO: que hacer si la cache no tiene espacio libre.
+ogEcho log session "[16] $PROG: $MSG_SCRIPTS_CREATE_SIZE $SIZEREQUIRED $SIZEFREE"
+[ "$SIZEREQUIRED" -gt "$SIZEFREE" ] && exit $(ogRaiseError $OG_ERR_CACHESIZE "$3" || echo $?)
+# Ejecuta script personalizado de preconfiguración del sistema operativo modelo.
+if which createImageCustomPre &>/dev/null; then
+ createImageCustomPre "$1" "$2" "$3" "$4"
+fi
# Comprobar consistencia del sistema de archivos.
echo " " > $OGLOGCOMMAND
SIZEFS=$(ogGetFsSize $1 $2)
-echo "[20] $MSG_HELP_ogCheckFs $PART $SIZEFS (KB) " | tee -a $OGLOGSESSION $OGLOGFILE
-ogUnmount $1 $2
+ogEcho log session "[20] $MSG_HELP_ogCheckFs $PART $SIZEFS (KB)"
+ogUnmount $1 $2 2>/dev/null
ogCheckFs $1 $2 || exit $(ogRaiseError $OG_ERR_PARTITION "ogCheckFs $1 $2" && echo $?)
-
-
-if [ "$IMGREDUCE" == "TRUE" ]
+# Evaluar variable de engine.cfg para reducir el sistema de archivos en la creacion
+if [ "$IMGREDUCE" == "TRUE" ]
then
- echo "[30]: $MSG_HELP_ogReduceFs " | tee -a $OGLOGSESSION $OGLOGFILE
- ogReduceFs $1 $2 || exit $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; echo $?)
- NEWSIZEFS=$(ogGetFsSize $1 $2)
- TIMEAUX=$[SECONDS-TIME1]
- echo " $MSG_SCRIPTS_TIME_PARTIAL ( $NEWSIZEFS KB ) : $[TIMEAUX/60]m $[TIMEAUX%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[30]: $MSG_HELP_ogReduceFs"
+ ogReduceFs $1 $2 &>> $OGLOGCOMMAND || exit $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; echo $?)
+ NEWSIZEFS=$(ogGetFsSize $1 $2)
+ TIMEAUX=$[SECONDS-TIME1]
+ ogEcho log session " $MSG_SCRIPTS_TIME_PARTIAL ( $NEWSIZEFS KB ) : $[TIMEAUX/60]m $[TIMEAUX%60]s"
fi
-
-
# Crear la imagen.
echo " " > $OGLOGCOMMAND
TIME2=$SECONDS
-echo "[40] $MSG_HELP_ogCreateImage : ogCreateImage $1 $2 $3 $4 $IMGPROG $IMGCOMP" | tee -a $OGLOGSESSION $OGLOGFILE
-ogCreateImage $1 "$2" $3 $4 "$IMGPROG" "$IMGCOMP" || exit $(ogRaiseError $OG_ERR_IMAGE "ogCreteImage"; echo $?)
-RESUMECREATEIMAGE=$(cat $OGLOGCOMMAND | grep "Total Time:")
+ogEcho log session "[40] $MSG_HELP_ogCreateImage : ogCreateImage $1 $2 $3 $4 $IMGPROG $IMGCOMP"
+ogCreateImage "$1" "$2" "$3" "/$4" "$IMGPROG" "$IMGCOMP" &>> $OGLOGCOMMAND || exit $(ogRaiseError $OG_ERR_IMAGE "ogCreteImage"; echo $?)
+RESUMECREATEIMAGE=$(grep "Total Time:" $OGLOGCOMMAND)
TIMEAUX2=$[SECONDS-TIME2]
-echo " $RESUMECREATEIMAGE " | tee -a $OGLOGSESSION $OGLOGFILE
-echo " $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX2/60]m $[TIMEAUX2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
-
-
+ogEcho log session " $RESUMECREATEIMAGE "
+ogEcho log session " $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX2/60]m $[TIMEAUX2%60]s"
-#Extender sistema de archivos
+# Extender sistema de archivos
TIME3=$SECONDS
-echo "[90] Extender sistema de archivos." | tee -a $OGLOGSESSION $OGLOGFILE
+ogEcho log session "[90] Extender sistema de archivos."
ogExtendFs $1 $2 || exit $(ogRaiseError $OG_ERR_EXTENDFS "$1 $2"; echo $?)
SIZEFS2=$(ogGetFsSize $1 $2)
TIMEAUX3=$[SECONDS-TIME3]
-echo " $MSG_HELP_ogExtendFs $NEWSIZEFS -> $SIZEFS = $SIZEFS2: $[TIMEAUX3/60]m $[TIMEAUX3%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
-
+ogEcho log session " $MSG_HELP_ogExtendFs $NEWSIZEFS -> $SIZEFS = $SIZEFS2: $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
#TODO que hacer si error al extender sistemade archivos
-
-
#resumen de la operacion
-IMGSIZE=$(ls -s `ogGetPath $3 $4.img`| cut -f1 -d" ")
-IMGOS=$(ogGetImageInfo `ogGetPath $3 $4.img`)
+IMGSIZE=$(ls -s `ogGetPath $3 /$4.img`| cut -f1 -d" ")
+IMGOS=$(ogGetImageInfo `ogGetPath $3 /$4.img`)
TIME=$[SECONDS-TIME1]
-echo "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
-echo " FileSystem $PART with $NEWSIZEFS KB data created onto file-image as $4 and used $IMGSIZE KB acros DFS $ogprotocol " | tee -a $OGLOGSESSION $OGLOGFILE
-echo " Image-file $4 metada: $IMGOS " | tee -a $OGLOGSESSION $OGLOGFILE
+ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s"
+ogEcho log session " FileSystem $PART with $NEWSIZEFS KB data created onto file-image as $4 and used $IMGSIZE KB across DFS $ogprotocol"
+ogEcho log session " Image-file $4 metada: $IMGOS"
+
+# Ejecuta scripts personalizado de postconfiguracion del sistema operativo modelo.
+if which createImageCustomPost &>/dev/null; then
+ createImageCustomPost "$1" "$2" "$3" "$4"
+fi
+
diff --git a/client/shared/scripts/createImageCustomPost.template b/client/shared/scripts/createImageCustomPost.template
new file mode 100644
index 00000000..1cec03f6
--- /dev/null
+++ b/client/shared/scripts/createImageCustomPost.template
@@ -0,0 +1,12 @@
+#!/bin/bash
+# createImageCustomPost.template
+# Plantilla para fichero de postconfiguración del cliente modelo tras crear una imagen.
+# Recibe los mismos parámetros que el script "createImage".
+# Nota: para usar este fichero, renombrar como "createImageCustomPost".
+
+
+# Control de parámetros.
+[ $# -ne 4 ] || exit
+
+
+
diff --git a/client/shared/scripts/createImageCustomPre.template b/client/shared/scripts/createImageCustomPre.template
new file mode 100644
index 00000000..9c58bcab
--- /dev/null
+++ b/client/shared/scripts/createImageCustomPre.template
@@ -0,0 +1,11 @@
+#!/bin/bash
+# createImageCustomPre.template
+# Plantilla para fichero de preconfiguración del cliente modelo antes de crear una imagen.
+# Recibe los mismos parámetros que el script "createImage".
+# Nota: para usar este fichero, renombrar como "createImageCustomPre".
+
+
+# Control de parámetros.
+[ $# -le 4 ] || exit
+
+
diff --git a/client/shared/scripts/deployImage b/client/shared/scripts/deployImage
index 1969a9ab..1b2973e9 100755
--- a/client/shared/scripts/deployImage
+++ b/client/shared/scripts/deployImage
@@ -1,75 +1,188 @@
#!/bin/bash
-
#/**
-# deployImage
-#@brief Actualiza la cache del cliente con una imagen, y la restaura en la partición.
-#@param 1
-#@param ejemplo:
-#@return
-#@exception OG_ERR_FORMAT formato incorrecto.
-#@note
-#@todo:
-#@version 0.9.1 - integracion EAC
-#@author Antonio J. Doblas Viso. Universidad de Malaga.
-#@date 2008/03/17
-#@version 0.9.2 - integracion OpenGnsys
-#@author Antonio J. Doblas Viso. Universidad de Malaga.
-#@date 2010/07/27
-#@version 1.0.2 - Separacion de log
-#@author Antonio J. Doblas Viso. Universidad de Malaga.
-#@date 2010/08/04
-#*/ ##
-
-TIME1=$SECONDS
+#@file deployImage
+#@brief Proceso completo de despliegue de imagen, incluyendo actualización de la caché, restauración y post-configuración (este script es llamado por la interfaz RestaurarImagen).
+#@param $1 Repositorio (CACHE, REPO o dirección IP)
+#@param $2 Nombre canónico de la imagen (sin extensión)
+#@param $3 Número de disco
+#@param $4 Número de particion
+#@param $5 Protocolo (UNICAST, por defecto, MULTICAST o TORRENT)
+#@param $6 Opciones del protocolo
+#@exception OG_ERR_FORMAT 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND 2 fichero de imagen o partición no detectados.
+#@exception OG_ERR_PARTITION 3 # Error en partición de disco.
+#@exception OG_ERR_LOCKED 4 partición bloqueada por otra operación.
+#@exception OG_ERR_IMAGE 5 error al restaurar la imagen del sistema.
+#@exception OG_ERR_IMGSIZEPARTITION 30 Tamaño de la particion es menor al tamaño de la imagen.
+#@version 1.0.1 - Separación en protocolos de transferencia y postconfiguracion
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2011-05-11
+#@version 1.0.1 - Separación de los ficheros-log para ser gestionado por el httpd-log
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2011-05-11
+#@version 1.0.2 - Logica basada en fichero de configuracion engine.cfg
+#@author Antonio J. Doblas Viso. Universidad de Málaga
+#@date 2012-01-11
+#@version 1.0.5 - Renominación del script como "deployImage".
+#@author Antonio J. Doblas Viso y Ramón M. Gómez.
+#@date 2013-12-04
+#**/
+
+
+#Descripcion:
+# La interfaz detecta:
+# Si Repositorio es el global (REPO) realiza un deploy.
+# Si Repositorio es local (CACHE) realiza un restoreImage CACHE
+# El deploy, si detecta que el cliente no tiene una cache con espacio suficiente
+# -- reazlia un ogRestore REPO
-#Carga del configurador del engine
-[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
PROG="$(basename $0)"
if [ $# -lt 4 ]; then
- ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]"
+ ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco nparticion [ UNICAST|UNICAST-CACHE|MULTICAST|MULTICAST-CACHE|TORRENT [opciones protocolo] ]"
exit $?
fi
-#controlar param1 REPO
-echo "[1] $MSG_SCRIPTS_TASK_START updateCache REPO $2.img $5 $6" | tee -a $OGLOGSESSION $OGLOGFILE
-updateCache REPO $2.img $5 $6 | tee -a $OGLOGCOMMAND
-RETVAL=$?
-
-TIME2=$[SECONDS-TIME1]
-echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL updateCache $[TIME2/60]m $[TIME2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
-
-
+# Asignación de variables (repositorio y protocolo se convierten a mayúsculas).
+TIME1=$SECONDS
+REPO="${1^^}"
+REPO=${REPO:-"REPO"}
+IMGNAME="$2"
+DISK="$3"
+PART="$4"
+PROTO="${5^^}"
+PROTO="${PROTO:-"UNICAST"}"
+PROTOOPT="$6"
+
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
-if [ "$RETVAL" != "0" ]
-then
- echo "[100] $MSG_SCRIPTS_TASK_ERR = $RETVAL ; updateCache REPO $2.img $5 $6 " | tee -a $OGLOGSESSION $OGLOGFILE
- # RC=15 No hay cache
- # RC=16 no hay espacio sufiente
- exit $RETVAL
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+echo " " > $OGLOGCOMMAND
+[ "$(ogGetCaller)" == "EjecutarScript" ] || echo -n "" > $OGLOGSESSION
+
+# Registro de inicio de ejecución
+ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+
+# Si el origen(pariticion) esta bloqueada salir.
+ogIsLocked $DISK $PART && exit $(ogRaiseError session $OG_ERR_LOCKED "$MSG_PARTITION, $DISK $PART"; echo $?)
+
+ogEcho log session "$MSG_HELP_ogUnmount $DISK $PART"
+ogUnmount $DISK $PART 2>/dev/null
+
+# Valor por defecto para el repositorio.
+[ "$REPO" == "$(ogGetRepoIp)" ] && REPO="REPO"
+[ "$REPO" == "$(ogGetIpAddress)" ] && REPO="CACHE"
+
+#Informacioin previa de la imagen
+IMGOS=$(ogGetImageInfo `ogGetPath $REPO $IMGNAME.img`) || exit $(ogRaiseError session $OG_ERR_NOTFOUND "$REPO $2"; echo $?)
+IMGSIZE=$(ls -s `ogGetPath $REPO $IMGNAME.img`| cut -f1 -d" ")
+
+ogEcho log session "[1] REPO=$REPO IMG-FILE=$IMGNAME.img SIZE=$IMGSIZE (KB) METADATA=$IMGOS"
+
+# Procesar repositorio.
+case "$REPO" in
+ CACHE) # Repositorio en caché local.
+ NEXTOPERATION=CACHE
+ ;;
+ REPO) # Repositorio remoto por defecto.
+ case "$PROTO" in
+ MULTICAST-DIRECT)
+ NEXTOPERATION=MULTICAST
+ ;;
+ UNICAST-DIRECT)
+ NEXTOPERATION=UNICAST
+ ;;
+
+ # Si protocolo es torrent|torrent-cache o multicast|multicast-cache
+ TORRENT|TORRENT-CACHE|MULTICAST|MULTICAST-CACHE|UNICAST|UNICAST-CACHE)
+ ogEcho log session "[2] updateCache REPO \"/$IMGNAME.img\" $PROTO $PROTOOPT"
+ TIME2=$SECONDS
+ updateCache REPO "/$IMGNAME.img" "$PROTO" "$PROTOOPT"
+ RETVAL=$?
+ TIME2=$[SECONDS-TIME2]
+ ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL updateCache $[TIME2/60]m $[TIME2%60]s"
+ case $RETVAL in
+ 0)
+ ogEcho log session "[50] updateCache (OK)"
+ NEXTOPERATION=CACHE
+ ;;
+ 15|16)
+ ogEcho log session "[50] $MSG_ERR_NOTCACHE ; $MSG_ERR_CACHESIZE "
+ ogEcho log session "[50] $MSG_SCRIPTS_CHECK_ENGINE "
+ if [ "$RESTOREPROTOCOLNOCACHE" == "MULTICAST" ]; then
+ case "$PROTO" in
+ MULTICAST) NEXTOPERATION=MULTICAST ;;
+ TORRENT) NEXTOPERATION=UNICAST ;;
+ UNICAST) NEXTOPERATION=UNICAST ;;
+ esac
+ else
+ NEXTOPERATION=UNICAST
+ fi
+ ;;
+ esac
+ ;;
+ *) # Error: protocolo desconocido.
+ ogRaiseError session $OG_ERR_FORMAT "$MSG_ERR_FORMAT, $PROTO"
+ exit $?
+ ;;
+ esac
+ ;;
+ *) # Error: repositorio desconocido.
+ ogRaiseError session $OG_ERR_FORMAT "$MSG_ERR_FORMAT, $REPO"
+ exit $?
+ ;;
+esac
+
+TIME3=$SECONDS
+
+case "$NEXTOPERATION" in
+ CACHE)
+ ogEcho log session "[55] $MSG_HELP_ogRestoreImage : restoreImage CACHE $IMGNAME $DISK $PART UNICAST"
+ restoreImage CACHE "$IMGNAME" "$DISK" "$PART"
+ RETVAL=$?
+ ;;
+ UNICAST)
+ ogEcho log session "[55] $MSG_HELP_ogRestoreImage : restoreImage REPO $IMGNAME $DISK $PART UNICAST"
+ restoreImage REPO "$IMGNAME" "$DISK" "$PART"
+ RETVAL=$?
+ ;;
+ MULTICAST)
+ ogEcho log session "[55] $MSG_HELP_ogRestoreImage : restoreImage REPO $IMGNAME $DISK $PART $PROTO $PROTOOPT"
+ restoreImage REPO "$IMGNAME" "$DISK" "$PART" $PROTO $PROTOOPT
+ RETVAL=$?
+ ;;
+esac
+RESUMERESTOREIMAGE=$(grep -m 1 "Total Time:" $OGLOGCOMMAND)
+ogEcho log session " [ ] $RESUMERESTOREIMAGE "
+# Si la transferencia ha dado error me salgo.
+if [ $RETVAL -ne 0 ] ; then
+ ogRaiseError session $OG_ERR_IMAGE "$REPO $IMGNAME" 2>&1
+ # Muestro registro de fin de ejecución si no viene de Ejecutar Script
+ [ "$(ogGetCaller)" == "EjecutarScript" ] || ogEcho log session "$MSG_INTERFACE_END $OG_ERR_IMAGE"
+ exit $OG_ERR_IMAGE
fi
-
-
-
-
-TIME2=$SECONDS
-echo "[50] $MSG_SCRIPTS_TASK_START ogRestore CACHE /$2 $3 $4" | tee -a $OGLOGSESSION $OGLOGFILE
-ogRestoreImage CACHE /$2 $3 $4 &>> $OGLOGCOMMAND
-RETVAL=$?
-if [ "$RETVAL" == "0" ]
-then
- RESUMERESTOREIMAGE=$(cat $OGLOGCOMMAND | grep "Total Time:")
- echo " [ ] $RESUMERESTOREIMAGE " | tee -a $OGLOGSESSION $OGLOGFILE
- echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL : $[TIME2/60]m $[TIME2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
- TIME2=$[SECONDS-TIME2]
- echo "[90] $MSG_SCRIPTS_OS_CONFIGURE " | tee -a $OGLOGSESSION $OGLOGFILE
- configureOs $3 $4 | tee -a $OGLOGCOMMAND
+TIME3=$[SECONDS-TIME3]
+ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL : $[TIME3/60]m $[TIME3%60]s"
+
+if which configureOsCustom &>/dev/null; then
+ ogEcho log session "[90] configureOsCustom"
+ configureOsCustom "$DISK" "$PART"
+else
+ ogEcho log session "[90] $MSG_SCRIPTS_OS_CONFIGURE "
+ configureOs "$DISK" "$PART"
fi
-
-TIME=$[SECONDS-TIME1]
-echo "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
+TIME=$[SECONDS-TIME1]
+ogEcho log session "[100] $MSG_SCRIPTS_TIME_TOTAL $[TIME/60]m $[TIME%60]s"
+# Registro de fin de ejecución
+# Si se ha llamado desde ejecutar script no lo muestro para no repetir.
+if [ "$(ogGetCaller)" != "EjecutarScript" ] ; then
+ ogEcho log session "$MSG_INTERFACE_END $RETVAL"
+ exit $RETVAL
+fi
-exit $RETVAL \ No newline at end of file
diff --git a/client/shared/scripts/generateMenuDefault b/client/shared/scripts/generateMenuDefault
index 404de375..7a9abd6e 100755
--- a/client/shared/scripts/generateMenuDefault
+++ b/client/shared/scripts/generateMenuDefault
@@ -1,48 +1,78 @@
-#ª/bin/bash
+#!/bin/bash
+# generateMenuDefault - Crea fichero con la página web de inicio del cliente
+# con información de red y de los sistemas operativos instalados,
+# crea fichero con información del contenido de la caché local.
-source /tmp/net-eth0.conf
+
+DEVICE=${DEVICE:-"eth0"}
+source /tmp/net-$DEVICE.conf
FILEINFOHTML=$OGLOG/`ogGetIpAddress`.info.html
FILEINFOCACHE=$OGLOG/`ogGetIpAddress`.cache.txt
ogMountCache 2>/dev/null
CACHECONTENIDO=`ls -m $OGCAC/$OGIMG 2>/dev/null`
SPEED=$(LANG=C ethtool $DEVICE 2>/dev/null | awk '$1~/Speed/ {print $2}')
-case "$SPEED" in
- 1000[Mm]b/s) ;;
- 100[Mm]b/s) SPEED="<font color=\"blue\">$SPEED</font>" ;;
- 10[Mm]b/s) SPEED="<font color=\"grey\">$SPEED</font>" ;;
+case "${SPEED,,}" in
+ 1000mb/s) ;;
+ 100mb/s) SPEED="<font color=\"blue\">$SPEED</font>" ;;
+ 10mb/s) SPEED="<font color=\"grey\">$SPEED</font>" ;;
*) SPEED="<font color=\"red\">$SPEED</font>" ;;
esac
DUPLEX=$(LANG=C ethtool $DEVICE 2>/dev/null | awk '$1~/Duplex/ {print $2}')
-case "$DUPLEX" in
- [Ff]ull) ;;
+case "${DUPLEX,,}" in
+ full) ;;
*) DUPLEX="<font color=\"red\">$DUPLEX</font>"
esac
CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`)
expr $CACHESIZEFREE / 1024 > $FILEINFOCACHE 2>/dev/null && echo '.MB,' >> $FILEINFOCACHE
-#
-# echo '';
-#
-
-cat > $FILEINFOHTML << EOF
+# Crear menú por defecto.
+cat > $FILEINFOHTML << EOT
<div align="center" style="font-family: Arial, Helvetica, sans-serif;">
<p style="color:#999999; font-size: 16px; margin: 2em;">
-<table border=1 width="100%">
+<table border="1" width="100%">
<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>
+<td> $MSG_HOSTNAME </td> <td> $MSG_IPADDR </td> <td> $MSG_MACADDR </td> <td> $MSG_SPEED </td> <td> $MSG_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>
+
+<h1>$MSG_MENUTITLE</h1>
+EOT
+
+# Si existe el fichero de configuración creado por el script getConfiguration, ...
+cfgfile=/tmp/getconfig
+if [ -f $cfgfile ]; then
+ # Tomar los datos del fichero.
+ awk -v boot="$MSG_BOOT" '
+ { n=split($0,sep,";");
+ for (i=1; i<n; i++) {
+ split (sep[i],dua,":");
+ if (dua[5]!="" && dua[5]!="DATA") {
+ printf ("<p><a href=\"command:bootOs %s %s\">%s %s (%s, %s)</a></p>\n",
+ dua[1],dua[2],boot,dua[5],dua[1],dua[2]);
+ }
+ }
+ }' $cfgfile >>$FILEINFOHTML
+else
+ # Si no, obtener los datos de los discos.
+ for ((d=1; d<=$(ogDiskToDev | wc -w); d++)); do
+ for ((p=1; p<=$(ogGetPartitionsNumber $d); p++)); do
+ VERSION=$(ogGetOsVersion $d $p 2>/dev/null | cut -f2 -d:)
+ [ -n "$VERSION" ] && echo "<p><a href=\"command:bootOs $d $p\">$MSG_BOOT $VERSION ($d, $p)</a></p>" >>$FILEINFOHTML
+ done
+ done
+fi
+# Añadir opción de apagado.
+cat >> $FILEINFOHTML << EOT
+<p><a href="command:poweroff">$MSG_POWEROFF</a></p>
</div>
+EOT
-EOF
-cat >> $FILEINFOCACHE << EOF
+# Crear contenido de la caché.
+cat >> $FILEINFOCACHE << EOT
$CACHECONTENIDO
-EOF
+EOT
diff --git a/client/shared/scripts/grubSyntax b/client/shared/scripts/grubSyntax
new file mode 100755
index 00000000..4d91e308
--- /dev/null
+++ b/client/shared/scripts/grubSyntax
@@ -0,0 +1,381 @@
+#! /bin/sh
+set -e
+
+grub_probe=$OGBIN/grub-probe1.99
+
+
+if [ $# == 3 ]; then
+ DISK=$1;PART=$2;KERNELPARAM=$3
+fi
+
+if [ $# == 2 ]; then
+ DISK=$1;PART=$2
+fi
+
+if [ $# == 1 ]; then
+ KERNELPARAM=$1
+fi
+
+
+
+OG_prepare_grub_to_access_device ()
+{
+ device="$1"
+ loop_file=
+ case ${device} in
+ /dev/loop/*|/dev/loop[0-9])
+ grub_loop_device="${device#/dev/}"
+ loop_file=`losetup "${device}" | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
+ case $loop_file in
+ /dev/*) ;;
+ *)
+ loop_device="${device}"
+ device=`"${grub_probe}" --target=device "${loop_file}"` || return 0
+ ;;
+ esac
+ ;;
+ esac
+ if dmsetup status $device 2>/dev/null | grep -q 'crypt[[:space:]]$'; then
+ grub_warn \
+ "$device is a crypto device, which GRUB cannot read directly. Some" \
+ "necessary modules may be missing from /boot/grub/grub.cfg. You may" \
+ "need to list them in GRUB_PRELOAD_MODULES in /etc/default/grub. See" \
+ "http://bugs.debian.org/542165 for details."
+ return 0
+ fi
+ # Abstraction modules aren't auto-loaded.
+ abstraction="`"${grub_probe}" --device "${device}" --target=abstraction`"
+ for module in ${abstraction} ; do
+ echo "insmod ${module}"
+ done
+ partmap="`"${grub_probe}" --device "${device}" --target=partmap`"
+ for module in ${partmap} ; do
+ case "${module}" in
+ netbsd | openbsd)
+ echo "insmod part_bsd";;
+ *)
+ echo "insmod part_${module}";;
+ esac
+ done
+ fs="`"${grub_probe}" --device "${device}" --target=fs`"
+ for module in ${fs} ; do
+ echo "insmod ${module}"
+ done
+ # If there's a filesystem UUID that GRUB is capable of identifying, use it;
+ # otherwise set root as per value in device.map.
+ #OG modificacion
+ echo "set root='`"${grub_probe}" --device "${device}" --target=drive`'"
+ #if fs_uuid="`"${grub_probe}" --device "${device}" --target=fs_uuid 2> /dev/null`" ; then
+ # echo "search --no-floppy --fs-uuid --set=root ${fs_uuid}"
+ #fi
+
+ if [ "x${loop_file}" != x ]; then
+ loop_mountpoint="$(awk '"'${loop_file}'" ~ "^"$2 && $2 != "/" { print $2 }' /proc/mounts | tail -n1)"
+ if [ "x${loop_mountpoint}" != x ]; then
+ echo "loopback ${grub_loop_device} ${loop_file#$loop_mountpoint}"
+ echo "set root=(${grub_loop_device})"
+ fi
+ fi
+}
+
+
+
+# ADV buscar os-prober
+#Si $DISK no definido usar 1
+DISK=${DISK:-"1"}
+OSSEARCH=$(ogDiskToDev $DISK $PART)
+#echo $OSSEARCH
+
+# grub-mkconfig helper script.
+# Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc.
+#
+# GRUB is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GRUB is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+
+
+prefix=/usr
+exec_prefix=${prefix}
+libdir=${exec_prefix}/lib
+
+. ${libdir}/grub/grub-mkconfig_lib
+
+found_other_os=
+
+make_timeout () {
+ if [ "x${found_other_os}" = "x" ] ; then
+ if [ "x${1}" != "x" ] ; then
+ if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
+ verbose=
+ else
+ verbose=" --verbose"
+ fi
+
+ if [ "x${1}" = "x0" ] ; then
+ cat <<EOF
+if [ "x\${timeout}" != "x-1" ]; then
+ if keystatus; then
+ if keystatus --shift; then
+ set timeout=-1
+ else
+ set timeout=0
+ fi
+ else
+ if sleep$verbose --interruptible 3 ; then
+ set timeout=0
+ fi
+ fi
+fi
+EOF
+ else
+ cat << EOF
+if [ "x\${timeout}" != "x-1" ]; then
+ if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
+ set timeout=0
+ fi
+fi
+EOF
+ fi
+ fi
+ fi
+}
+
+adjust_timeout () {
+ if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
+ cat <<EOF
+if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
+EOF
+ make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}"
+ echo else
+ make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
+ echo fi
+ else
+ make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
+ fi
+}
+
+if [ "x${GRUB_DISABLE_OS_PROBER}" = "xtrue" ]; then
+ adjust_timeout
+ exit 0
+fi
+
+if [ -z "`which os-prober 2> /dev/null`" -o -z "`which linux-boot-prober 2> /dev/null`" ] ; then
+ # missing os-prober and/or linux-boot-prober
+ adjust_timeout
+ exit 0
+fi
+
+case "$1" in
+
+
+esac
+
+OSPROBED="`os-prober | grep $OSSEARCH | tr ' ' '^' | paste -s -d ' '`"
+
+
+if [ -z "${OSPROBED}" ] ; then
+ # empty os-prober output, nothing doing
+ adjust_timeout
+ exit 0
+fi
+
+osx_entry() {
+ found_other_os=1
+ cat << EOF
+menuentry "${LONGNAME} (${2}-bit) (on ${DEVICE})" --class osx --class darwin --class os {
+EOF
+ save_default_entry | sed -e "s/^/\t/"
+ prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
+ cat << EOF
+ load_video
+ set do_resume=0
+ if [ /var/vm/sleepimage -nt10 / ]; then
+ if xnu_resume /var/vm/sleepimage; then
+ set do_resume=1
+ fi
+ fi
+ if [ \$do_resume = 0 ]; then
+ xnu_uuid ${OSXUUID} uuid
+ if [ -f /Extra/DSDT.aml ]; then
+ acpi -e /Extra/DSDT.aml
+ fi
+ $1 /mach_kernel boot-uuid=\${uuid} rd=*uuid
+ if [ /System/Library/Extensions.mkext -nt /System/Library/Extensions ]; then
+ xnu_mkext /System/Library/Extensions.mkext
+ else
+ xnu_kextdir /System/Library/Extensions
+ fi
+ if [ -f /Extra/Extensions.mkext ]; then
+ xnu_mkext /Extra/Extensions.mkext
+ fi
+ if [ -d /Extra/Extensions ]; then
+ xnu_kextdir /Extra/Extensions
+ fi
+ if [ -f /Extra/devprop.bin ]; then
+ xnu_devprop_load /Extra/devprop.bin
+ fi
+ if [ -f /Extra/splash.jpg ]; then
+ insmod jpeg
+ xnu_splash /Extra/splash.jpg
+ fi
+ if [ -f /Extra/splash.png ]; then
+ insmod png
+ xnu_splash /Extra/splash.png
+ fi
+ if [ -f /Extra/splash.tga ]; then
+ insmod tga
+ xnu_splash /Extra/splash.tga
+ fi
+ fi
+}
+EOF
+}
+
+wubi=
+
+for OS in ${OSPROBED} ; do
+ DEVICE="`echo ${OS} | cut -d ':' -f 1`"
+ LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
+ LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
+ BOOT="`echo ${OS} | cut -d ':' -f 4`"
+
+ if [ -z "${LONGNAME}" ] ; then
+ LONGNAME="${LABEL}"
+ fi
+
+ echo "Found ${LONGNAME} on ${DEVICE}" >&2
+
+ case ${BOOT} in
+ chain)
+
+ case ${LONGNAME} in
+ Windows*)
+ if [ -z "$wubi" ]; then
+ if [ -x /usr/share/lupin-support/grub-mkimage ] && \
+ /usr/share/lupin-support/grub-mkimage --test; then
+ wubi=yes
+ else
+ wubi=no
+ fi
+ fi
+ if [ "$wubi" = yes ]; then
+ echo "Skipping ${LONGNAME} on Wubi system" >&2
+ continue
+ fi
+ ;;
+ esac
+
+ found_other_os=1
+ cat << EOF
+menuentry "${LONGNAME} (on ${DEVICE})" --class windows --class os {
+EOF
+ save_default_entry | sed -e "s/^/\t/"
+#ADV prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
+ OG_prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
+
+ case ${LONGNAME} in
+ Windows\ Vista*|Windows\ 7*|Windows\ Server\ 2008*)
+ ;;
+ *)
+#ADV cat << EOF
+#ADV drivemap -s (hd0) \${root}
+#ADV EOF
+ ;;
+ esac
+
+ cat <<EOF
+ chainloader +1
+}
+EOF
+ ;;
+ linux)
+ LINUXPROBED="`linux-boot-prober ${DEVICE} 2> /dev/null | tr ' ' '^' | paste -s -d ' '`"
+ prepare_boot_cache=
+
+ for LINUX in ${LINUXPROBED} ; do
+ LROOT="`echo ${LINUX} | cut -d ':' -f 1`"
+ LBOOT="`echo ${LINUX} | cut -d ':' -f 2`"
+ LLABEL="`echo ${LINUX} | cut -d ':' -f 3 | tr '^' ' '`"
+ LKERNEL="`echo ${LINUX} | cut -d ':' -f 4`"
+ LINITRD="`echo ${LINUX} | cut -d ':' -f 5`"
+ LPARAMS="`echo ${LINUX} | cut -d ':' -f 6- | tr '^' ' '`"
+
+ if [ -z "${LLABEL}" ] ; then
+ LLABEL="${LONGNAME}"
+ fi
+
+ if [ "${LROOT}" != "${LBOOT}" ]; then
+ LKERNEL="${LKERNEL#/boot}"
+ LINITRD="${LINITRD#/boot}"
+ fi
+
+ found_other_os=1
+ cat << EOF
+menuentry "${LLABEL} (on ${DEVICE})" --class gnu-linux --class gnu --class os {
+EOF
+ save_default_entry | sed -e "s/^/\t/"
+ if [ -z "${prepare_boot_cache}" ]; then
+#ADV prepare_boot_cache="$(prepare_grub_to_access_device ${LBOOT} | sed -e "s/^/\t/")"
+ prepare_boot_cache="$(OG_prepare_grub_to_access_device ${LBOOT} | sed -e "s/^/\t/")"
+ fi
+ printf '%s\n' "${prepare_boot_cache}"
+ cat << EOF
+ linux ${LKERNEL} ${LPARAMS} ${KERNELPARAM}
+EOF
+ if [ -n "${LINITRD}" ] ; then
+ cat << EOF
+ initrd ${LINITRD}
+EOF
+ fi
+ cat << EOF
+}
+EOF
+ done
+ ;;
+ macosx)
+ OSXUUID="`grub-probe --target=fs_uuid --device ${DEVICE} 2> /dev/null`"
+ osx_entry xnu_kernel 32
+ osx_entry xnu_kernel64 64
+ ;;
+ hurd)
+ found_other_os=1
+ cat << EOF
+menuentry "${LONGNAME} (on ${DEVICE})" --class hurd --class gnu --class os {
+EOF
+ save_default_entry | sed -e "s/^/\t/"
+ prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"
+ grub_device="`${grub_probe} --device ${DEVICE} --target=drive`"
+ mach_device="`echo "${grub_device}" | sed -e 's/(\(hd.*\),msdos\(.*\))/\1s\2/'`"
+ grub_fs="`${grub_probe} --device ${DEVICE} --target=fs`"
+ case "${grub_fs}" in
+ *fs) hurd_fs="${grub_fs}" ;;
+ *) hurd_fs="${grub_fs}fs" ;;
+ esac
+ cat << EOF
+ multiboot /boot/gnumach.gz root=device:${mach_device}
+ module /hurd/${hurd_fs}.static ${hurd_fs} --readonly \\
+ --multiboot-command-line='\${kernel-command-line}' \\
+ --host-priv-port='\${host-port}' \\
+ --device-master-port='\${device-port}' \\
+ --exec-server-task='\${exec-task}' -T typed '\${root}' \\
+ '\$(task-create)' '\$(task-resume)'
+ module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)'
+}
+EOF
+ ;;
+ *)
+ echo " ${LONGNAME} is not yet supported by grub-mkconfig." >&2
+ ;;
+ esac
+done
+
+adjust_timeout
diff --git a/client/shared/scripts/initCache b/client/shared/scripts/initCache
index 69cdc535..908ce85b 100755
--- a/client/shared/scripts/initCache
+++ b/client/shared/scripts/initCache
@@ -3,41 +3,71 @@
# (puede usarse como base para el programa de restauración de imágenes usado por OpenGnSys Admin).
# Versión: 0.9.1, 2009/03/17, - Ramón Gómez, Univ. Sevilla - Versión inicial.
# Versión: 0.9.2, 2010/07/27, - Ramón Gómez, Univ. Sevilla - redefinir parámetro.
+# Version: 1.0.5, 2012/09/18, - Univ. Huelva - Nuevo parametro para indicar el disco donde se creara la CACHE, si no se indica, se usa 1
TIME1=$SECONDS
PROG="$(basename $0)"
-if [ $# -ne 1 ]; then
- ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG -1 | 0 | tamaño"
+# Si el numero de parametros es 1, es el tamano de la CACHE
+if [ $# == 1 ]
+then
+ NDISK=1
+ SIZE=$1
+elif [ $# == 2 ]
+then
+ NDISK=$1
+ SIZE=$2
+else
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG [int_ndisk] -1 | 0 | size"
+ exit $?
+fi
+
+# Si disco no es mayor o igual que 1, error.
+if [ -n "${NDISK//[-0-9]/}" ] || [ $NDISK -lt 1 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG [int_ndisk] -1 | 0 | size"
exit $?
fi
# Si tamaño no es numérico o tamaño<-1, error.
-if [ -n "${1//[-0-9]/}" ] || [ $1 -lt -1 ]; then
- ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG -1 | 0 | tamaño"
+if [ -n "${SIZE//[-0-9]/}" ] || [ $SIZE -lt -1 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG int_ndisk [-1 | 0 | size]"
exit $?
fi
# Si tamaño=0, no hacer nada.
-if [ $1 -eq 0 ]; then
+if [ $SIZE -eq 0 ]; then
echo "No modificar la caché local."
exit
fi
# Si tamaño=-1, borrar caché.
-if [ $1 -eq -1 ]; then
+if [ $SIZE -eq -1 ]; then
echo "[10] Trabajar sin caché local."
ogUnmountCache 2>/dev/null
ogDeleteCache
else
+ # Comprobar disco y particion donde se aloja la cache actualmente, si la hay
+ FINDCACHE=`ogFindCache`
+ echo "[5] ogFindCache: "$FINDCACHE
+ CACHEDISK=${FINDCACHE% *}
+ PART=${FINDCACHE#* }
+
+ # Si la CACHE actual esta definida en otro disco, se elimina
+ if [ "$NDISK" != "$CACHEDISK" ]
+ then
+ echo "[10] Detectada cache en otro disco, eliminarla"
+ ogUnmountCache 2>/dev/null
+ ogDeleteCache
+ fi
+
# Si tamaño>0, ...
- if [ ! $1 -gt 0 ]; then
- ogRaiseError $OG_ERR_FORMAT "$MSG_ERR_FORMAT: !($1>0)"
+ if [ ! $SIZE -gt 0 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_ERR_FORMAT: !($SIZE>0)"
exit $?
fi
# Si no existe caché o si cambia su tamaño, crearla.
- SIZE=$(ogGetCacheSize 2>/dev/null)
- if [ "$1" != "$SIZE" ]; then
+ CACHESIZE=$(ogGetCacheSize 2>/dev/null)
+ if [ "$SIZE" != "$CACHESIZE" ]; then
echo "[10] Crar partición de caché local."
ogUnmountCache 2>/dev/null
- ogCreateCache "$1"
+ ogCreateCache $NDISK "$SIZE"
fi
# Si caché no montada y no formateada, formatear.
CACHE=$(ogFindCache) || exit $?
diff --git a/client/shared/scripts/ogCrearImagenBasica b/client/shared/scripts/ogCrearImagenBasica
new file mode 100755
index 00000000..c4f622c4
--- /dev/null
+++ b/client/shared/scripts/ogCrearImagenBasica
@@ -0,0 +1,167 @@
+#!/bin/bash
+#___________________________________________________________________
+#
+# CREAR IMAGEN BÁSICA
+#___________________________________________________________________
+#
+# Parámetros recibidos desde el cliente:
+#
+# $1 Número de disco
+# $2 Número de particion
+# $3 Nombre canónico de la imagen básica (sin extensión)
+# $4 Dirección del repositorio
+# $5 Es una cadena "nnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnn" donde "n" vale 0 ó 1.
+# 1XX: Gestionar fichero completo en lugar de diferencas
+# X1X: Eliminar archivos de la imagen que no estén en la partición
+# XX1: Comprimir archivos para enviarlos por la red
+# El valor X indica que no importa el valor que tenga el dato
+# $6 Es una cadena "nnnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
+# 1XXX: Borrar la imagen del repositorio antes de crearla
+# X1XX: Copiar Imagen básica también a la cache
+# XX1X: Borrar previamente la imagen de la cache antes de copiarla
+# XXX1: No borrar archivos en destino
+# El valor X indica que no importa el valor que tenga el dato
+# $7 Método de syncronización 1=Sincronización1 2=Sincronizacion2
+# $8 Ruta de origen de la Imagen (Carpeta)
+
+
+#___________________________________________________________________
+#
+# Control parámetros
+#___________________________________________________________________
+
+ PROG="$(basename $0)"
+ if [ $# -lt 7 ]; then
+ usage=" ndisco nparticion nombre_imagen_basica ip_repositorio"
+ usage="$usage copiar_a_caché Borrar_cache_previamente Ruta_origen"
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
+ exit $?
+ fi
+
+ DISCO=$1
+ NPART=$2
+ NOMBREIMG=$3
+ IPREPOSITORIO=$4
+
+ flag=$5
+ echo "flah:$flag">/tmp/log
+ WHLFILE=${flag:0:1}
+ RMVFILE=${flag:1:1}
+ CMPFILE=${flag:2:1}
+
+ flag=$6
+ echo "flah:$flag">/tmp/log
+ BORRARIMG=${flag:0:1}
+ COPIACACHE=${flag:1:1}
+ BORRACACHE=${flag:2:1}
+ NOBORRACHIVOS=${flag:3:1}
+
+ RUTAORIGEN=$8
+#___________________________________________________________________
+#
+# Variables y configuración logs
+#___________________________________________________________________
+
+ source /opt/opengnsys/scripts/ImagenesSincronizadas.lib
+
+#___________________________________________________________________
+#
+# Activa navegador para ver progreso
+#___________________________________________________________________
+
+ coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
+#___________________________________________________________________
+#
+# Proceso
+#___________________________________________________________________
+
+ echo "Creacion de imagen basica..." | tee -a $OGLOGSESSION $OGLOGFILE
+
+ ORIGEN=$PARTICION$RUTAORIGEN/
+ DESTINO="$REPOSITORIO/$NOMBREIMG/"
+
+ # Borrado previo de imagen en repositorio
+ if [ $BORRARIMG -eq 1 ]; then
+ echo "Borrando previamente imagen del repositorio" | tee -a $OGLOGSESSION $OGLOGFILE
+ fi
+
+ ## Marca de localizacion Repositorio
+ FILE_IMG=".marcimg"
+ MARCA=$ORIGEN$FILE_IMG
+ ## Marca de localizacion Repositorio en Imagen
+ if [[ ! -f $MARCA ]]; then
+ ##echo "Creando Marca Repositorio en Imagen $MARCA" | tee -a $OGLOGSESSION $OGLOGFILE
+ touch $MARCA
+ fi
+
+ # Creación de la imagen básica
+ echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ crearListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
+ crearImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+
+ echo "!!! Finaliza correctamente !!! la creacion de imagen básica $NOMBREIMG entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+
+ # Copia opcional a la caché
+ if [ $COPIACACHE -eq 1 ]; then
+ echo "Copiando imagen a cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ CACHE=$(montaCache)
+ if [ -z $CACHE ]; then
+ echo "No se ha podido copiar la imagen a la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ kill $COPROC_PID
+ exit $OG_ERR_NOTCACHE
+ fi
+
+ # Borrar imagen de la caché
+ if [ $BORRACACHE -eq 1 ]; then
+ echo "Borrando imagen $NOMBREIMG de la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ rm -R $CACHE$OGIMG/$NOMBREIMG
+ fi
+
+ # Redefinir destino
+ DESTINO="$CACHE$OGIMG/$NOMBREIMG/"
+
+ ## Marca de localizacion Repositorio
+ FILE_IMG=".marcimg"
+ MARCA=$ORIGEN$FILE_IMG
+ ## Marca de localizacion Repositorio en Imagen
+ if [[ ! -f $MARCA ]]; then
+ ##echo "Creando Marca Repositorio en Imagen $MARCA" | tee -a $OGLOGSESSION $OGLOGFILE
+ touch $MARCA
+ fi
+
+ echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+
+ crearImagen $ORIGEN $DESTINO $SISTEMAFICHERO 2
+
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+ echo "!!! Finaliza correctamente !!! la copia de imagen basica $NOMBREIMG a la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ fi
+
+ eliminaListaAcl $ORIGEN $SISTEMAFICHERO
+ ## Eliminar Marca Repositorio
+ rm $MARCA
+
+ #comprimeImagen $NOMBREIMG
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+#___________________________________________________________________
+#
+# Retorno
+#___________________________________________________________________
+
+ kill $COPROC_PID
+ exit 0
diff --git a/client/shared/scripts/ogCrearSoftIncremental b/client/shared/scripts/ogCrearSoftIncremental
new file mode 100755
index 00000000..de916702
--- /dev/null
+++ b/client/shared/scripts/ogCrearSoftIncremental
@@ -0,0 +1,185 @@
+#!/bin/bash
+#___________________________________________________________________
+#
+# CREAR IMAGEN INCREMENTAL
+#___________________________________________________________________
+#
+# Parámetros recibidos desde el cliente:
+#
+# $1 Número de disco
+# $2 Número de particion
+# $3 Nombre canónico de la imagen básica (sin extensión)
+# $4 Dirección del repositorio
+# $5 Nombre canónico de la imagen incremental (sin extensión)
+# $6 Es una cadena "nnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnn" donde "n" vale 0 ó 1.
+# 1XX: Gestionar fichero completo en lugar de diferencas
+# X1X: Eliminar archivos de la imagen que no estén en la partición
+# XX1: Comprimir archivos para enviarlos por la red
+# El valor X indica que no importa el valor que tenga el dato
+# $7 Es una cadena "nnnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
+# 1XXX: Borrar la imagen incremental del repositorio antes de crearla
+# X1XX: Copiar imagen incremental también a la cache
+# XX1X: Borrar previamente la imagen incremental de la cache antes de copiarla
+# XXX1: No borrar archivos en destino
+# El valor X indica que no importa el valor que tenga el dato
+# $8 Método de syncronización 1=Sincronización1 2=Sincronizacion2
+# $9 Ruta de origen de la Imagen (Carpeta)
+
+#___________________________________________________________________
+#
+# Control parámetros
+#___________________________________________________________________
+
+ PROG="$(basename $0)"
+ if [ $# -lt 7 ]; then
+ usage=" ndisco nparticion nombre_imagen_basica ip_repositorio nombre_imagen_incremental"
+ usage="$usage copiar_a_caché Borrar_cache_previamente Ruta_origen"
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
+ exit $?
+ fi
+
+ DISCO=$1
+ NPART=$2
+ NOMBREIMG=$3
+ IPREPOSITORIO=$4
+ NOMBREIMGINC=$5
+
+ flag=$6
+ echo "flah:$flag">/tmp/log
+ WHLFILE=${flag:0:1}
+ RMVFILE=${flag:1:1}
+ CMPFILE=${flag:2:1}
+
+ flag=$7
+ echo "flah:$flag">/tmp/log
+ BORRARIMG=${flag:0:1}
+ COPIACACHE=${flag:1:1}
+ BORRACACHE=${flag:2:1}
+ NOBORRACHIVOS=${flag:3:1}
+
+ RUTAORIGEN=$9
+#___________________________________________________________________
+#
+# Variables y configuración logs
+#___________________________________________________________________
+
+ source /opt/opengnsys/scripts/ImagenesSincronizadas.lib
+#___________________________________________________________________
+#
+# Activa navegador para ver progreso
+#___________________________________________________________________
+
+ coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
+#___________________________________________________________________
+#
+# Lista de archivos a sincronizar
+#___________________________________________________________________
+
+ TMPFILELIST="/tmp/_listatmp_"
+ FILELIST="/tmp/_lista_"
+#___________________________________________________________________
+#
+# Proceso
+#___________________________________________________________________
+
+ echo "Creacion de imagen incremental..." | tee -a $OGLOGSESSION $OGLOGFILE
+
+ ORIGEN=$PARTICION$RUTAORIGEN/
+ DESTINO="$REPOSITORIO/$NOMBREIMG/"
+
+ # Borrado previo de imagen en repositorio
+ if [ $BORRARIMG -eq 1 ]; then
+ echo "Borrando previamente imagen del $NOMBREIMGINC repositorio" | tee -a $OGLOGSESSION $OGLOGFILE
+ fi
+
+ ## Marca de localizacion Repositorio
+ FILE_IMG=".marcimg"
+ MARCAORIGEN=$ORIGEN$FILE_IMG
+ ## Marca de localizacion Repositorio en Imagen
+ if [ ! -f $MARCAORIGEN ]; then
+ ##echo "Creando Marca Repositorio en Particion $MARCAORIGEN" | tee -a $OGLOGSESSION $OGLOGFILE
+ touch $MARCAORIGEN
+ fi
+
+ # Creación de la lista de archivos entre partición e imagen básica del repositorio
+ echo "Creacion de la lista de archivos a transferir entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ crearListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
+ crearImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1 1 $TMPFILELIST
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+
+ # Editar la lista y depurarla
+ editarLista $TMPFILELIST $FILELIST
+
+ # Creación de la imagen incremental en el repositorio
+ DESTINO="$REPOSITORIO/$NOMBREIMGINC/"
+ echo "Sincronizacion para crear imagen incremental entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ crearImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1 2 $FILELIST
+ RETVAL=$?
+ if [ $RETVAL -ne 0 && [$RETVAL -ne 23]; then
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+ ## Marca de localizacion Repositorio
+ FILE_IMG=".marcimg"
+ MARCA=$DESTINO$FILE_IMG
+ ## Marca de localizacion Repositorio en Imagen
+ if [ ! -f $MARCA ]; then
+ ##echo "Creando Marca Repositorio en Imagen $MARCA" | tee -a $OGLOGSESSION $OGLOGFILE
+ touch $MARCA
+ fi
+
+ echo "!!! Finaliza correctamente !!! la creacion de imagen incremental $NOMBREIMGINC entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+
+ # Copia opcional a la caché
+ if [ $COPIACACHE -eq 1 ]; then
+ echo "Copiando imagen a cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ CACHE=$(montaCache)
+ if [ -z $CACHE ]; then
+ echo "No se ha podido copiar la imagen a la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ kill $COPROC_PID
+ exit $OG_ERR_NOTCACHE
+ fi
+
+ # Borrar imagen de la caché
+ if [ $BORRACACHE -eq 1 ]; then
+ echo "Borrando imagen $NOMBREIMGINC de la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ rm -R $CACHE$OGIMG/$NOMBREIMGINC
+ fi
+
+ DESTINO="$CACHE$OGIMG/$NOMBREIMGINC/"
+ echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ crearImagen $ORIGEN $DESTINO $SISTEMAFICHERO 2 2 $FILELIST
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+ echo "!!! Finaliza correctamente !!! la copia de imagen incremental $NOMBREIMGINC a la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ fi
+
+ ## Marca de localizacion Repositorio
+ FILE_IMG=".marcimg"
+ MARCA=$DESTINO$FILE_IMG
+ ## Marca de localizacion Repositorio en CACHE
+ if [ ! -f $MARCA ]; then
+ ##echo "Creando Marca Repositorio en CACHE $MARCA" | tee -a $OGLOGSESSION $OGLOGFILE
+ touch $MARCA
+ fi
+
+ ## Eliminando Marca Origen Repositorio
+ rm $MARCAORIGEN
+ eliminaListaAcl $ORIGEN $SISTEMAFICHERO
+#___________________________________________________________________
+#
+# Retorno
+#___________________________________________________________________
+
+ kill $COPROC_PID
+ exit 0
+
diff --git a/client/shared/scripts/ogRestaurarImagenBasica b/client/shared/scripts/ogRestaurarImagenBasica
new file mode 100755
index 00000000..4be8e49d
--- /dev/null
+++ b/client/shared/scripts/ogRestaurarImagenBasica
@@ -0,0 +1,199 @@
+#!/bin/bash
+#___________________________________________________________________
+#
+# RESTAURAR IMAGEN BÁSICA
+#___________________________________________________________________
+#
+# Parámetros recibidos desde el cliente:
+#
+# $1 Número de disco
+# $2 Número de particion
+# $3 Nombre canónico de la imagen básica (sin extensión)
+# $4 Dirección del repositorio
+# $5 Tipo de transmisión 0=Unicast 1=Multicast
+# $6 Es una cadena "nnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnn" donde "n" vale 0 ó 1.
+# 1XX: Gestionar fichero completo en lugar de diferencas
+# X1X: Eliminar archivos de la partición que no estén en la imagen
+# XX1: Comprimir archivos para enviarlos por la red
+# El valor X indica que no importa el valor que tenga el dato
+# $7 Es una cadena "nnnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
+# 1XXX: Borrar la particion de destino antes de restaurar la imagen basica
+# X1XX: Copiar Imagen básica también a la cache
+# XX1X: Borrar previamente la imagen basica de la cache antes de copiarla
+# XXX1: No borrar archivos en destino
+# El valor X indica que no importa el valor que tenga el dato
+# $8 Método de clonación 0=Desde caché 1=Desde repositorio
+# $9 Metodo de sincronizacion 1=Sincronización1 2=Sincronizacion2
+# $10 Ruta de origen de la Imagen (Carpeta)
+#___________________________________________________________________
+#
+# Control parámetros
+#___________________________________________________________________
+
+ PROG="$(basename $0)"
+ if [ $# -lt 8 ]; then
+ usage=" ndisco nparticion nombre_imagen_basica ip_repositorio copiar_a_caché "
+ usage="$usage Borrar_cache_previamente metodo_clonación Ruta_origen"
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
+ exit $?
+ fi
+
+ DISCO=$1
+ NPART=$2
+ NOMBREIMG=$3
+ IPREPOSITORIO=$4
+
+ flag=$6
+ echo "flah:$flag">/tmp/log
+ WHLFILE=${flag:0:1}
+ RMVFILE=${flag:1:1}
+ CMPFILE=${flag:2:1}
+
+ flag=$7
+ echo "flah:$flag">/tmp/log
+ BORRARIMG=${flag:0:1}
+ COPIACACHE=${flag:1:1}
+ BORRACACHE=${flag:2:1}
+ NOBORRACHIVOS=${flag:3:1}
+
+ METCLONA=$8
+ RUTAORIGEN=${10}
+#___________________________________________________________________
+#
+# Variables y configuración logs
+#___________________________________________________________________
+
+ source /opt/opengnsys/scripts/ImagenesSincronizadas.lib
+#___________________________________________________________________
+#
+# Activa navegador para ver progreso
+#___________________________________________________________________
+
+ coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
+
+#___________________________________________________________________
+#
+# Proceso
+#___________________________________________________________________
+
+ # Llamada a la función de sincronización.
+ echo "Restauracion de imagen basica..." | tee -a $OGLOGSESSION $OGLOGFILE
+
+ # Borrado previo de la partición
+ if [ $BORRARIMG -eq 1 ]; then
+ if [ -n $RUTAORIGEN ]; then
+ echo "Borrando carpeta $PARTICION$RUTAORIGEN" | tee -a $OGLOGSESSION $OGLOGFILE
+ rm -R $PARTICION$RUTAORIGEN
+ else
+ echo "Formateando la particion" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogFormat $DISCO $PARTICION $TIPOPARTICION
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_PARTITION
+ fi
+ fi
+ fi
+
+ # Sincronización desde repositorio
+ if [ $METCLONA = 1 ]; then
+ if [ $COPIACACHE = 0 ]; then
+ echo "Restaurando imagen basica desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
+ ORIGEN="$REPOSITORIO/$NOMBREIMG/"
+ DESTINO=$PARTICION$RUTAORIGEN/
+ # Restauración de la imagen básica
+ echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
+
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ echo "***Error:$RETVAL. restaurando imagen basica desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+ restauraListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
+
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ echo "***Error:$RETVAL. restaurando listas ACL desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+ echo "!!! Finaliza correctamente !!! la restauracion de imagen basica $NOMBREIMG desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
+ kill $COPROC_PID
+ exit 0
+ fi
+ fi
+
+ if [ $METCLONA = 0 ]; then
+ # Restauración desde la caché
+ echo "Restaurando desde la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ fi
+ # Comprobar si existe caché
+ CACHE=$(montaCache)
+ if [ -z $CACHE ]; then
+ echo "No se puede restaurar la imagen desde la cache ya que no existe" | tee -a $OGLOGSESSION $OGLOGFILE
+ kill $COPROC_PID
+ ogRaiseError $OG_ERR_NOTCACHE "CACHE"
+ exit $OG_ERR_NOTCACHE
+ fi
+
+ # Borrar imagen de la caché
+ if [ $BORRACACHE -eq 1 ]; then
+ echo "Borrando imagen $NOMBREIMG de la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ rm -R $CACHE$OGIMG/$NOMBREIMG
+ fi
+
+ # Actualización de la caché
+ echo "Actualizando cache local desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
+ ORIGEN="$REPOSITORIO/$NOMBREIMG/"
+ DESTINO="$CACHE$OGIMG/$NOMBREIMG/"
+ echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
+
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ echo "***Error:$RETVAL. Actualizando cache local desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+
+ echo "!!! Finaliza correctamente !!! copia de imagen basica a cache local" | tee -a $OGLOGSESSION $OGLOGFILE
+
+ # Restauración desde caché a la partición
+ echo "Copiando imagen a la particion desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
+
+ ORIGEN="$CACHE$OGIMG/$NOMBREIMG/"
+ DESTINO="$PARTICION$RUTAORIGEN/"
+ echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 2
+
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ echo "***Error:$RETVAL. restaurando imagen basica desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+
+ restauraListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ echo "***Error:$RETVAL. restaurando listas ACL desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+
+ echo "Ejecutando configure OS" | tee -a $OGLOGSESSION $OGLOGFILE
+ configureOs $DISCO $NPART
+
+ echo "!!! Finaliza correctamente !!! restauracion imagen basica $NOMBREIMG desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
+#___________________________________________________________________
+#
+# Retorno
+#___________________________________________________________________
+
+ kill $COPROC_PID
+
+ exit 0
diff --git a/client/shared/scripts/ogRestaurarSoftIncremental b/client/shared/scripts/ogRestaurarSoftIncremental
new file mode 100755
index 00000000..a4f73aad
--- /dev/null
+++ b/client/shared/scripts/ogRestaurarSoftIncremental
@@ -0,0 +1,209 @@
+#!/bin/bash
+#___________________________________________________________________
+#
+# RESTAURAR IMAGEN INCREMENTAL
+#___________________________________________________________________
+#
+# Parámetros recibidos desde el cliente:
+#
+# $1 Número de disco
+# $2 Número de particion
+# $3 Nombre canónico de la imagen básica (sin extensión)
+# $4 Dirección del repositorio
+# $5 Nombre canónico del software incremental (sin extensión)
+# $6 Tipo de transmisión 0=Unicast 1=Multicast
+# $7 Es una cadena "nnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnn" donde "n" vale 0 ó 1.
+# 1XX: Gestionar fichero completo en lugar de diferencas
+# X1X: Eliminar archivos de la partición que no estén en la imagen
+# XX1: Comprimir archivos para enviarlos por la red
+# El valor X indica que no importa el valor que tenga el dato
+# $8 Es una cadena "nnnn" tipo flags que codifica varios parametros.
+# Tiene el formato "nnnn" donde "n" vale 0 ó 1.
+# 1XXX: Borrar la particion de destino antes de restaurar la imagen basica
+# X1XX: Copiar Imagen básica también a la cache
+# XX1X: Borrar previamente la imagen basica de la cache antes de copiarla
+# XXX1: No borrar archivos en destino
+# El valor X indica que no importa el valor que tenga el dato
+# $9 Método de clonación 0=Desde caché 1=Desde repositorio
+# $10 Metodo de sincronizacion 1=Sincronización1 2=Sincronizacion2
+# $11 Ruta de origen de la Imagen (Carpeta)
+#___________________________________________________________________
+#
+# Control parámetros
+#___________________________________________________________________
+
+ PROG="$(basename $0)"
+ if [ $# -lt 6 ]; then
+ usage=" ndisco nparticion nombre_imagen_basica ip_repositorio copiar_a_caché "
+ usage="$usage Borrar_cache_previamente metodo_clonación Ruta_origen"
+ ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG $usage"
+ exit $?
+ fi
+
+ DISCO=$1
+ NPART=$2
+ NOMBREIMG=$3
+ IPREPOSITORIO=$4
+ NOMBREIMGINC=$5
+
+ flag=$7
+ echo "flah:$flag">/tmp/log
+ WHLFILE=${flag:0:1}
+ RMVFILE=${flag:1:1}
+ CMPFILE=${flag:2:1}
+
+ flag=$8
+ echo "flah:$flag">/tmp/log
+ BORRARIMG=${flag:0:1}
+ COPIACACHE=${flag:1:1}
+ BORRACACHE=${flag:2:1}
+ NOBORRACHIVOS=${flag:3:1}
+
+ METCLONA=$9
+ RUTAORIGEN=${11}
+#___________________________________________________________________
+#
+# Variables y configuración logs
+#___________________________________________________________________
+
+ source /opt/opengnsys/scripts/ImagenesSincronizadas.lib
+
+#___________________________________________________________________
+#
+# Activa navegador para ver progreso
+#___________________________________________________________________
+
+ coproc /opt/opengnsys/bin/browser -qws http://localhost/cgi-bin/httpd-log.sh
+#___________________________________________________________________
+#
+# Proceso
+#___________________________________________________________________
+
+ echo "Restauracion de imagen incremental..." | tee -a $OGLOGSESSION $OGLOGFILE
+
+ # Borrado previo de la partición
+ if [ $BORRARIMG -eq 1 ]; then
+ if [ -n $RUTAORIGEN ]; then
+ echo "Borrando carpeta $PARTICION$RUTAORIGEN" | tee -a $OGLOGSESSION $OGLOGFILE
+ rm -R $PARTICION$RUTAORIGEN
+ else
+ echo "Formateando la particion" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogFormat $DISCO $PARTICION $TIPOPARTICION
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_PARTITION
+ fi
+ fi
+ fi
+
+ # Sincronización desde repositorio
+ if [ $METCLONA = 1 ]; then
+ if [ $COPIACACHE = 0 ]; then
+ echo "Restaurando imagen basica desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
+ ORIGEN="$REPOSITORIO/$NOMBREIMG/"
+ DESTINO=$PARTICION$RUTAORIGEN/
+ # Restauración de la imagen básica
+ echo "Sincronizando imagen basica entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+
+ # Restauración de la imagen incremental
+ echo "Restaurando imagen incremental desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
+ ORIGEN="$REPOSITORIO/$NOMBREIMGINC/"
+ DESTINO=$PARTICION$RUTAORIGEN/
+ OP_DELETE=""
+ # Restauración de la imagen incremental
+ echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
+ restauraListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
+ RETVAL=$?
+ kill $COPROC_PID
+ echo "!!! Finaliza correctamente !!! la restauracion de imagen incremental $NOMBREIMGINC desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
+ exit $RETVAL
+ fi
+ fi
+
+ # Restauración desde la caché
+ echo "Restaurando desde la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+
+ # Comprobar si existe caché
+ CACHE=$(montaCache)
+ if [ -z $CACHE ]; then
+ echo "No se ha podido restaurar la imagen desde la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogRaiseError $OG_ERR_NOTCACHE "CACHE"
+ kill $COPROC_PID
+ exit $?
+ fi
+
+ # Borrar imagen de la caché
+ if [ $BORRACACHE -eq 1 ]; then
+ echo "Borrando imagen basica $NOMBREIMG de la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ rm -R $CACHE$OGIMG/$NOMBREIMG
+ echo "Borrando imagen incremental $NOMBREIMGINC de la cache" | tee -a $OGLOGSESSION $OGLOGFILE
+ rm -R $CACHE$OGIMG/$NOMBREIMGINC
+ fi
+
+ # Actualización de la caché
+ echo "Actualizando cache local desde repositorio $IPREPOSITORIO" | tee -a $OGLOGSESSION $OGLOGFILE
+
+ ORIGEN="$REPOSITORIO/$NOMBREIMG/"
+ DESTINO="$CACHE$OGIMG/$NOMBREIMG/"
+ echo "Sincronizando imagen basica entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+ ORIGEN="$REPOSITORIO/$NOMBREIMGINC/"
+ DESTINO="$CACHE$OGIMG/$NOMBREIMGINC/"
+ echo "Sincronizando imagen incremental entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 1
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+
+ echo "!!! Finaliza correctamente !!! copia de imagen basica e incremental a cache local" | tee -a $OGLOGSESSION $OGLOGFILE
+
+ # Restauración desde caché a la partición
+
+ echo "Copiando imagen basica a la partición desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
+ ORIGEN="$CACHE$OGIMG/$NOMBREIMG/"
+ DESTINO=$PARTICION$RUTAORIGEN/
+ echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 2
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+
+ echo "Copiando imagen incremental a la partición desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
+ ORIGEN="$CACHE$OGIMG/$NOMBREIMGINC/"
+ DESTINO=$PARTICION$RUTAORIGEN/
+ OP_DELETE=""
+ echo "Sincronizando imagen entre $ORIGEN y $DESTINO" | tee -a $OGLOGSESSION $OGLOGFILE
+ restaurarImagen $ORIGEN $DESTINO $SISTEMAFICHERO 2
+ restauraListaAcl $ORIGEN $DESTINO $SISTEMAFICHERO $DISCO $NPART
+ RETVAL=$?
+ if [ $RETVAL -ne 0 ]; then
+ kill $COPROC_PID
+ exit $OG_ERR_IMAGE
+ fi
+ echo "!!! Finaliza correctamente !!! restauracion imagen incremental $NOMBREIMGINC desde cache local" | tee -a $OGLOGSESSION $OGLOGFILE
+#___________________________________________________________________
+#
+# Retorno
+#___________________________________________________________________
+
+ kill $COPROC_PID
+
+ exit 0
diff --git a/client/shared/scripts/poweroff b/client/shared/scripts/poweroff
index 3be97ed0..9af4d669 100755
--- a/client/shared/scripts/poweroff
+++ b/client/shared/scripts/poweroff
@@ -2,17 +2,26 @@
# Scirpt de ejemplo para apagar un ordenador
# (puede usarse como base para el programa de apagado usado por OpenGNSys Admin).
-PROG="$(basename $0)"
+# Desmontar los sistemas de archivos y la caché local.
echo "[10] Desmontar todos los sistemas de archivos."
sync
for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do
ogUnmountAll $i 2>/dev/null
done
echo "[50] Desmontar cache local."
-ogUnmountCache
+ogUnmountCache 2>/dev/null
echo "[70] Apagando el equipo."
-ethtool -s $DEVICE wol g
-(sleep 5 && busyboxOLD poweroff) &
+# Estado correcto de Wake-On-Lan antes de apagar.
+ethtool -s $DEVICE wol g 2>/dev/null
+# Detectar Busybox.
+BUSYBOX=$(which busyboxOLD)
+BUSYBOX=${BUSYBOX:-"busybox"}
+# Retardo para dar lugar al registro en cola de acciones.
+sleep 5
+# Parar Browser para evitar "cuelgues".
+pkill browser
+# Apagar.
+$BUSYBOX poweroff
diff --git a/client/shared/scripts/reboot b/client/shared/scripts/reboot
index 7966b9a3..87df09d0 100755
--- a/client/shared/scripts/reboot
+++ b/client/shared/scripts/reboot
@@ -1,17 +1,40 @@
#!/bin/bash
-# Scirpt de ejemplo para reiniciar un ordenador
+# Script de ejemplo para reiniciar un ordenador
# (puede usarse como base para el programa de reinicio usado por OpenGNSys Admin).
-PROG="$(basename $0)"
+# Cargamos el valor por defecto del tiempo de sleep
+[ -z $OGSLEEP ] && source /opt/opengnsys/etc/engine.cfg
+# Si se recibe un parametro sera el tiempo de sleep antes de realizar el reboot
+if [ $# == 1 ] && [ "${1//[^0-9]/}" == "$1" ]
+then
+ TIME=$1
+ echo "[5] Se ha introducido un retardo de $TIME segundos para reiniciar"
+else
+ # Sin parámetros, o el parámetro introducido no es un número
+ TIME=${OGSLEEP:-5}
+ echo "[5] No se ha introducido un retardo, $TIME segundos para reiniciar"
+fi
+
+# Desmontar los sistemas de archivos y la caché local.
echo "[10] Desmontar todos los sistemas de archivos."
sync
for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do
ogUnmountAll $i 2>/dev/null
done
echo "[50] Desmontar cache local."
-ogUnmountCache
+ogUnmountCache 2>/dev/null
echo "[90] Reiniciar el equipo."
-ethtool -s $DEVICE wol g
-(sleep 5 && busyboxOLD reboot) &
+# Estado correcto de Wake-On-Lan antes de reiniciar.
+ethtool -s $DEVICE wol g 2>/dev/null
+# Detectar Busybox.
+BUSYBOX=$(which busyboxOLD)
+BUSYBOX=${BUSYBOX:-"busybox"}
+
+# Retardo para dar lugar al registro en cola de acciones.
+sleep $TIME
+# Parar Browser para evitar "cuelgues".
+pkill browser
+# Reiniciar.
+$BUSYBOX reboot
diff --git a/client/shared/scripts/restoreBaseImage b/client/shared/scripts/restoreBaseImage
new file mode 100755
index 00000000..318e7c6f
--- /dev/null
+++ b/client/shared/scripts/restoreBaseImage
@@ -0,0 +1,148 @@
+#!/bin/bash
+#/**
+# restoreBaseImage
+#@brief Script de ejemplo para restaurar una imagen
+#@brief (puede usarse como base para el programa de restauración de imágenes usado por OpenGNSys Admin).
+#@param 1 REPO|CACHE
+#@param 2 imagen
+#@param 3 disco
+#@param 4 particion
+#@param 5 protocolo
+#@param 6 opciones protocolo
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception updateCache # 15 No hay cache
+#@exception updateCache # 16 no hay espacio sufiente
+#@exception OG_ERR_LOCKED # 4 Partición o fichero bloqueado.
+#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado.
+#@exception OG_ERR_FILESYS # 20 Sistema de archivos desconocido o no se puede montar
+#@exception OG_ERR_DONTSYNC_IMAGE # 71 Imagen no sincronizable (es monolitica)
+#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada.
+#@note se toma como punto de partida el script restoreImage
+#@version 1.0 - restauración de imagen con sincronizacion.
+#@author
+#@date 2012-12-04
+#*/ ##
+
+trap "onexit $1 \"$2\" $3 $4" 1 2 3 6 9 14 15 EXIT
+
+# Si salimos con error demontamos la imagen y desbloqueamos la imagen y la particion
+function onexit() {
+ local exit_status=$?
+ ogUnmountImage "$1" "$2" "$IMGEXT" &>/dev/null
+ [ $exit_status -ne 4 ] && ogUnlock $3 $4 &>/dev/null
+ exit $exit_status
+}
+
+# Limpiamos los archivo de log
+echo -n "" >$OGLOGCOMMAND;
+[ "$(ogGetCaller)" == "RestaurarImagenBasica" -o "$(ogGetCaller)" == "restoreDiffImage" ] || echo -n "" > $OGLOGSESSION
+
+# Mensaje de inicio de script salvo si es llamado desde restoreDiffImage.
+[ "$(ogGetCaller)" == "restoreDiffImage" ] || ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+
+TIME1=$SECONDS
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$PROG: $MSG_HELP_restoreBaseImage" \
+ "$PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]" \
+ "$PROG REPO Windows7 1 1 " \
+ "$PROG CACHE Ubuntu12 1 6 MULTICAST 9000:full-duplex:239.194.14.00:150M:50:60"
+ exit 0
+fi
+
+[ $# -lt 4 ] && exit $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]"; echo $?)
+
+# Carga del configurador del engine
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Procesar parámetros de entrada
+REPOFILE="$(ogGetPath "REPO" "$2.$IMGEXT")" || exit $(ogRaiseError session $OG_ERR_NOTFOUND "REPO, $2.$IMGEXT"; echo $?)
+
+# Comprobar que es sincronizable (con REPO)
+ogIsSyncImage REPO "$2" $IMGEXT || exit $(ogRaiseError session $OG_ERR_DONTSYNC_IMAGE "$1 $2"; echo $?)
+
+IMGEXT="img"
+# Comprobamos si la imagen o la particion estan bloqueada:
+ogIsImageLocked "$1" "$2.$IMGEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$1 $2.$IMGEXT"; echo $?)
+ogIsLocked "$3" "$4" && exit $(ogRaiseError session $OG_ERR_LOCKED "$3 $4"; echo $?)
+
+# Detectamos el sistema de ficheros de la imagen
+# TODO ogGetImageInfo
+DIRMOUNT=$(ogMountImage "$1" "$2")
+ogWaitSyncImage "$1" "$2" "$IMGEXT" "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$1 $2 $IMGEXT: time_out."; echo $?)
+IMGFSTYPE=$(head -1 $DIRMOUNT/ogimg.info |cut -d: -f3)
+
+# Comprobamos si el sistema de ficheros se puede montar
+ogMount "$3" "$4" &>/dev/null || RETVAL=$?
+# Si da error formateamos el sistema de ficheros.
+if [ "$RETVAL" ] ; then
+ ogEcho log session " $MSG_HELP_ogFormat: $3 $4 $IMGFSTYPE"
+ ogFormat "$3" "$4" "$IMGFSTYPE" || exit $(ogRaiseError session $OG_ERR_FILESYS "$3 $4"; echo $?)
+ ogMount "$3" "$4" || exit $(ogRaiseError session $OG_ERR_FILESYS "$3 $4"; echo $?)
+fi
+
+# Warning si el sistema de ficheros de la imagen es distinto del de la particion destino
+[ "$IMGFSTYPE" == "$(ogGetFsType $3 $4)" ] || ogEcho session warning "$MSG_SYNC_DIFFERENTFS"
+
+
+PROTO=${5:-"UNICAST"}
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ # Las imagenes sincronizables aunque sean iguales no tienen el mismo sum.
+ # Sincronizamos si existe el fichero y si no usamos updateCache.
+ ogEcho log session "[10] $MSG_SCRIPTS_TASK_START updateCache REPO $2.$IMGEXT $PROTO $6"
+ ogEcho log session " updateCache REPO" "/$2.$IMGEXT" "$PROTO" "$6"
+ updateCache REPO "/$2.$IMGEXT" "$PROTO" "$6"
+ RETVAL=$?
+ if [ "$RETVAL" != "0" ]
+ then
+ ogEcho log session "[39] $MSG_SCRIPTS_TASK_END updateCache REPO $2.$IMGEXT $5 $6 con error $RETVAL"
+ # RC=15 No hay cache
+ # RC=16 no hay espacio sufiente
+ exit $RETVAL
+ fi
+ TIMEAUX1=$[SECONDS-TIME]
+ ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX1/60]m $[TIMEAUX1%60]s"
+
+ # Montamos la imagen de cache
+ ogMountImage "$1" "$2" >/dev/null
+ ogWaitSyncImage "$1" "$2" "$IMGEXT" "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$1 $2 $IMGEXT: time_out."; echo $?)
+fi
+
+TIME2=$SECONDS
+
+# Restaurar la imagen.
+ogEcho log session "[40] $MSG_HELP_ogRestoreImage: $1 $2 $3 $4"
+
+ogLock $3 $4
+
+# Sincronizamos la partición con la imagen.
+ogEcho log session "[60] $MSG_HELP_ogSyncRestore: $1 $2 $IMGEXT $3 $4"
+ogSyncRestore "$1" "$2" "$IMGEXT" $3 $4
+RETVAL=$?
+[ $RETVAL == 0 ] || ogEcho session warning "$MSG_ERR_SYNCHRONIZING"
+
+TIMEAUX2=$[SECONDS-TIME2]
+ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX2/60]m $[TIMEAUX2%60]s"
+
+# Desmontamos imagen basica.
+ogUnmountImage "$1" "$2" "$IMGEXT"
+
+# Restableciendo acl
+ogUnlock $3 $4
+ogEcho log session "[70] $MSG_HELP_ogRestoreInfoImage"
+ogRestoreInfoImage $3 $4 2>&1 | tee -a $OGLOGCOMMAND
+
+# Llamar al script de post-configuración del sistema operativo.
+# Si a este script lo ha llamado el script restoreDiffImage no post-configuramos
+if [ "$(ogGetCaller)" != "restoreDiffImage" ];then
+ ogEcho log session "[90] $MSG_HELP_configureOs"
+ configureOs $3 $4
+fi
+
+TIME=$[SECONDS-TIME1]
+ogEcho log session "[100] $MSG_SCRIPTS_END $MSG_SCRIPTS_TIME_TOTAL: $[TIME/60]m $[TIME%60]s"
+
+# Si ha habido problema al sincronizar nos salimos con error
+[ $RETVAL == 0 ] || exit $OG_ERR_SYNCHRONIZING
diff --git a/client/shared/scripts/restoreDiffImage b/client/shared/scripts/restoreDiffImage
new file mode 100755
index 00000000..9af1064f
--- /dev/null
+++ b/client/shared/scripts/restoreDiffImage
@@ -0,0 +1,135 @@
+#!/bin/bash
+#/**
+# restoreiDiffSquash
+#@brief Script de ejemplo para restaurar una imagen diferencial.
+#@brief (puede usarse como base para el programa de restauración de imágenes usado por OpenGNSys Admin).
+#@param 1 REPO|CACHE
+#@param 2 imagen basica
+#@param 2 imagen diferencial
+#@param 3 disco
+#@param 4 particion
+#@param 5 protocolo
+#@param 6 opciones protocolo
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado
+#@exception OG_ERR_PARTITION# 3 Error en partición de disco.
+#@exception OG_ERR_LOCKED # 4 Partición o fichero bloqueado.
+#@exception updateCache # 15 No hay cache
+#@exception updateCache # 16 no hay espacio sufiente
+#@exception OG_ERR_DONTSYNC_IMAGE # 71 Imagen no sincronizable (es monolitica)
+#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada.
+#@todo: Se puede dar la opcion de que mantenga los ficheros nuevos.
+#@todo: Se puede dar la opcion que la trasferencia se manden los datos comprimidos.
+#@version 1.0 - restauración de imagen con sincronizacion.
+#@author
+#@date 2012-12-04
+#*/ ##
+
+trap "onexit $1 \"$2\" \"$3\" $4 $5" 1 2 3 6 9 14 15 EXIT
+
+# Si salimos con error demontamos la imagen y desbloqueamos la imagen y la particion
+function onexit() {
+ local exit_status=$?
+ ogUnmountImage "$1" "$3" "$DIFFTYPE" &>/dev/null
+ [ $exit_status -ne 4 ] && ogUnlock $4 $5 &>/dev/null
+ exit $exit_status
+}
+
+
+# Limpiamos los archivo de log
+echo -n ""> $OGLOGSESSION
+echo "" >$OGLOGCOMMAND
+
+TIME1=$SECONDS
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$PROG: $MSG_HELP_restoreDiffImage" \
+ "$PROG REPO|CACHE base_image diff_image ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]" \
+ "$PROG REPO Windows7 Windows7_pc123 1 1 " \
+ "$PROG CACHE Ubuntu12 Ubuntu12_aula21 1 6 MULTICAST 9000:full-duplex:239.194.14.00:150M:50:60"
+ exit 0
+fi
+
+[ $# -lt 5 ] && exit $(ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE base_image diff_imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]"; echo $?)
+
+ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+
+# Procesar parámetros de entrada
+DIFFTYPE="diff"
+DIFFEXT="img.diff"
+REPODIFFFILE="$(ogGetPath "REPO" "$3.$DIFFEXT")" || exit $(ogRaiseError session $OG_ERR_NOTFOUND "REPO $3.$DIFFEXT";echo $?)
+
+# Comprobamos si la imagen o la particion estan bloqueada:
+ogIsImageLocked "$1" "$3.$DIFFEXT" && exit $(ogRaiseError session $OG_ERR_LOCKED "$1 $3.$DIFFEXT";echo $?)
+ogIsLocked "$4" "$5" && exit $(ogRaiseError session $OG_ERR_LOCKED "$4 $5";echo $?)
+
+PART=$(ogDiskToDev "$4" "$5" 2>/dev/null ) || exit $(ogRaiseError session $OG_ERR_PARTITION "$1 $3";echo $?)
+
+# Carga del configurador del engine
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Comprobar que es sincronizable
+ogIsSyncImage REPO "$3" diff || exit $(ogRaiseError session $OG_ERR_DONTSYNC_IMAGE "$1 $3";echo $?)
+
+# Restauramos la imagen Basica.
+restoreBaseImage $1 "$2" "$4" "$5" "$6" "$7"
+
+PROTO=${6:-"UNICAST"}
+
+if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
+ ogEcho log session "[10] $MSG_HELP_updateCache."
+ ogEcho log session " updateCache REPO" "/$3.$DIFFEXT" "$PROTO" "$7"
+ updateCache REPO "/$3.$DIFFEXT" "$PROTO" "$7"
+ RETVAL=$?
+ if [ "$RETVAL" != "0" ]
+ then
+ ogEcho log session "[39] $MSG_SCRIPTS_TASK_END updateCache REPO $3.$DIFFEXT $6 $7 con error $RETVAL"
+ # RC=15 No hay cache
+ # RC=16 no hay espacio sufiente
+ exit $RETVAL
+ fi
+
+ TIMEAUX1=$[SECONDS-TIME]
+ ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX1/60]m $[TIMEAUX1%60]s"
+fi
+TIME2=$SECONDS
+
+# Restaurar la imagen.
+ogEcho log session "[40] $MSG_RESTORE $PART"
+
+# Montamos la diferencial
+ogMountImage "$1" "$3" "$DIFFTYPE" &>/dev/null
+# Comprobar que la imagen diferencial se ha montado
+ogWaitSyncImage "$1" "$3" "$DIFFTYPE" "mounted" || exit $(ogRaiseError session $OG_ERR_DONTMOUNT_IMAGE "$1 $3 $DIFFTYPE: time_out $TIMEAUX seg.";echo $?)
+
+ogMount $4 $5 >/dev/null
+ogLock $4 $5
+# Sincronizamos la partición con la imagen.
+ogEcho log session "[60] $MSG_HELP_ogSyncRestore: $1 $3 $DIFFTYPE $4 $5"
+ogSyncRestore "$1" "$3" "$DIFFTYPE" $4 $5
+RETVAL=$?
+[ $RETVAL == 0 ] || ogEcho session warning "$MSG_ERR_SYNCHRONIZING"
+
+# Desmontamos la imagen
+ogUnmountImage "$1" "$3" "$DIFFTYPE"
+ogUnlock $4 $5
+
+TIMEAUX2=$[SECONDS-TIME2]
+ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL : $[TIMEAUX2/60]m $[TIMEAUX2%60]s"
+
+# creando enlaces y restableciendo ACL (en windows)
+ogEcho log session "[70] $MSG_HELP_ogRestoreInfoImage"
+ogRestoreInfoImage "$4" "$5" 2>&1 | tee -a $OGLOGCOMMAND
+
+# Llamar al script de post-configuración del sistema operativo.
+ogEcho log session "[90] $MSG_HELP_configureOs."
+configureOs $4 $5
+
+TIME=$[SECONDS-TIME1]
+ogEcho log session "[100] $MSG_SCRIPTS_END $MSG_SCRIPTS_TIME_TOTAL: $[TIME/60]m $[TIME%60]s"
+
+# Si ha habido problema al sincronizar nos salimos con error
+[ $RETVAL == 0 ] || exit $OG_ERR_SYNCHRONIZING
+
diff --git a/client/shared/scripts/restoreImage b/client/shared/scripts/restoreImage
index f08c0415..b701b82a 100755
--- a/client/shared/scripts/restoreImage
+++ b/client/shared/scripts/restoreImage
@@ -1,85 +1,69 @@
#!/bin/bash
-# Scirpt de ejemplo para restaurar una imagen.
+# Script de ejemplo para restaurar una imagen.
# (puede usarse como base para el programa de restauración de imágenes usado por OpenGNSys Admin).
TIME1=$SECONDS
PROG="$(basename $0)"
if [ $# -lt 4 ]; then
- ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]"
+ ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST opciones protocolo]"
exit $?
fi
+#Load engine configurator from engine.cfg file.
+#Carga el configurador del engine desde el fichero engine.cfg
+# Valores por defecto: #IMGPROG="partclone" ; #IMGCOMP="lzop" ; #IMGEXT="img" #IMGREDUCE="TRUE"
+[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
+
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+echo " " > $OGLOGCOMMAND
+[ "$(ogGetCaller)" == "deployImage" ] || echo -n "" > $OGLOGSESSION;
+
+ogEcho log session "[1] $MSG_SCRIPTS_START $0 $*"
+
# Procesar parámetros de entrada
-IMGTYPE="img"
-IMGFILE=$(ogGetPath "$1" "$2.$IMGTYPE")
-PROTO=${5:-"UNICAST"}
-if [ "$1" == "CACHE" -o "$1" == "cache" ]; then
- IMGDIR=$(ogGetParentPath "$1" "$2")
- # Si no existe el directorio de la imagen, crearlo.
- if [ -z "$IMGDIR" ]; then
- echo "[5] Creando directorio de imagen \"$1, ${2%/*}\"."
- ogMakeDir "$1" "${2%/*}" || ogRaiseError $OG_ERR_NOTFOUND "$1, ${2%/*}" || exit $?
- fi
- IMGDIR=$(ogGetParentPath "$1" "$2") || ogRaiseError $OG_ERR_NOTFOUND "$1, ${2%/*}" || exit $?
- # Procesar protocolos de transferencia.
- case "$PROTO" in
- UNICAST|unicast)
- # Copiar fichero del repositorio al caché local.
- #IMGTYPE=$(ogGetImageType "repo" "$2")
- IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE")
- if [ -z "$IMGFILE" ] || [ $(ogIsNewerFile "repo" "$2.$IMGTYPE" "$IMGFILE") ]; then
- echo "[10] Copiando imagen \"$2\" del repositorio a caché local"
- ogCopyFile "repo" "$2.$IMGTYPE" "$IMGDIR"
- fi
- # Comprobar si existe el fichero en caché y no en el repositorio.
- if [ -z "$IMGFILE" ]; then
- #IMGTYPE=$(ogGetImageType "cache" "$2")
- IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE")
- if [ -z "$IMGFILE" ]; then
- ogRaiseError $OG_ERR_NOTFOUND "cache, $2.$IMGTYPE"
- exit $?
- fi
- fi
- ;;
- MULTICAST|multicast)
- if [ -z "$IMGFILE" ]; then
- echo "[10] Copiando imagen multicast \"$2\" del repositorio a caché local"
- #IMGTYPE=$(ogGetImageType "repo" "$2")
- PORTBASE=`echo $6 | cut -f1 -d:`
- echo "ogMcastReceiverFile SOURCE:$PORTBASE TARGET:CACHE $2.$IMGTYPE"
- ogMcastReceiverFile "$PORTBASE" "CACHE" "$2.$IMGTYPE" || exit $?
- IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE")
- fi
- ;;
- TORRENT|torrent)
- echo "[9] copiando el fichero torrent Unicast \"$2\" del repositorio a caché local"
- #IMGTYPE=$(ogGetImageType "repo" "$2")
- ogCopyFile "repo" "$2.$IMGTYPE.torrent" "$IMGDIR" || exit $?
- echo "[10] descargando imagen torrent($6) \"$2\" del repositorio a caché local"
- ogTorrentStart "CACHE" "$2.$IMGTYPE.torrent" "peer:60" || exit $?
- IMGFILE=$(ogGetPath "cache" "$2.$IMGTYPE")
- ;;
- *) # Protocolo desconocido.
- ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT opciones ]"
- exit $?
- esac
+REPO="${1^^}"
+IMGNAME="$2"
+DISK="$3"
+PART="$4"
+PROTO="${5^^}"
+PROTO=${PROTO:-"UNICAST"}
+PROTOOPT="$6"
+IMGTYPE="${IMGTYPE:-"img"}"
+# Comprobar que existe la imagen del origen.
+IMGFILE=$(ogGetPath "$REPO" "$IMGNAME.$IMGTYPE")
+IMGDIR=$(ogGetParentPath "$REPO" "$IMGNAME")
+if [ "$IMGFILE" == "" -o "$IMGDIR" == "" ]; then
+ ogRaiseError session $OG_ERR_NOTFOUND "$REPO, ${IMGNAME%/*}"
+ exit $?
fi
-if [ -z "$IMGFILE" ]; then
- ogRaiseError $OG_ERR_NOTFOUND "$1, $2"
- exit $?
-fi
-PART=$(ogDiskToDev "$3" "$4") || exit $?
-# Restaurar la imagen.
-echo "[40] Restaurar imagen en $PART"
-ogRestoreImage "$@" || exit $?
-# Restaurar tamaño.
-echo "[80] Extender sistema de archivos."
-ogExtendFs $3 $4
-# Llamar al script de post-configuración del sistema operativo.
-echo "[90] Post-configuracion de aranque del sistema."
-configureOs $3 $4
+# Procesar protocolos de transferencia.
+case "$PROTO" in
+ UNICAST|UNICAST-DIRECT)
+ # Restaurar la imagen.
+ ogEcho log session "[40] ogRestoreImage $REPO $IMGNAME $DISK $PART UNICAST"
+ ogRestoreImage "$REPO" "$IMGNAME" "$DISK" "$PART" 2>&1 | tee -a $OGLOGCOMMAND
+ RETVAL=${PIPESTATUS[0]}
+ ;;
+ MULTICAST|MULTICAST-DIRECT)
+ PORT=$(echo $PROTOOPT | cut -f1 -d":")
+ TOOL=$(ogGetImageProgram REPO $IMGNAME)
+ COMPRESS=$(ogGetImageCompressor REPO $IMGNAME)
+ #TODO comprobar parametros anteriores
+ ogEcho log session "[40] ogMcastReceiverPartition $DISK $PART $PORT $TOOL $COMPRESS"
+ ogMcastRequest "$IMGNAME.img" "$PROTOOPT"
+ ogMcastReceiverPartition "$DISK" "$PART" "$PORT" "$TOOL" "$COMPRESS" 2>&1 | tee -a $OGLOGCOMMAND
+ RETVAL=${PIPESTATUS[0]}
+ ;;
+ *) # Protocolo desconocido.
+ ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO|CACHE imagen ndisco nparticion [ UNICAST|MULTICAST opciones ]"
+ exit $?
+esac
TIME=$[SECONDS-TIME1]
-echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s"
+ogEcho log session "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s"
+
+# Código de salida del comando prinicpal de restauración.
+exit $RETVAL
diff --git a/client/shared/scripts/setBootMode b/client/shared/scripts/setBootMode
new file mode 100755
index 00000000..4ab9c816
--- /dev/null
+++ b/client/shared/scripts/setBootMode
@@ -0,0 +1,35 @@
+#!/bin/bash
+# #/**
+# setBootMode
+#@brief Script to configure the PXE mode to client
+#@param 1 template
+#@date 2012-02-2-9
+#*/ ##
+
+REPOIP="$(ogGetRepoIp)"
+PORT=2011
+TEMPLATE="/opt/oglive/tftpboot/menu.lst/templates/$1"
+PCNAME="$(hostname)"
+
+PROG="$(basename $0)"
+if [ "$*" == "help" ]; then
+ ogHelp "$PROG" "$PROG template" \
+ "$PROG pxe" \
+ "$PROG 01"
+ exit
+fi
+
+
+# Control básico de errores.
+if [ $# -ne 1 ]; then
+ ogRaiseError $OG_ERR_FORMAT "$MSG_ERR_FORMAT: $PROG TEMPLATE_NAME"
+ exit $?
+fi
+if [ ! -e $TEMPLATE ]; then
+ ogRaiseError $OG_ERR_NOTFOUND "$MSG_ERR_NOTFOUND: $TEMPLATE"
+ exit $?
+fi
+
+hose $REPOIP $PORT --out sh -c "echo -ne SET_CLIENTMODE $1 $PCNAME"
+
+
diff --git a/client/shared/scripts/updateBootCache b/client/shared/scripts/updateBootCache
index e866474d..f45e9344 100755
--- a/client/shared/scripts/updateBootCache
+++ b/client/shared/scripts/updateBootCache
@@ -27,7 +27,7 @@ ogMountCache || exit 1
#comparamos los de la cache
CACHEVMLINUZ=`cat ${OGCAC}/boot/ogvmlinuz.sum`
- CACHEINITRD=`cat ${OGCAC}/cache/boot/oginitrd.img.sum`
+ CACHEINITRD=`cat ${OGCAC}/boot/oginitrd.img.sum`
echo "MD5 on SERVER: $SERVERVMLINUZ $SERVERINITRD"
echo "MD5 on CACHE: $CACHEVMLINUZ $CACHEINITRD"
diff --git a/client/shared/scripts/updateCache b/client/shared/scripts/updateCache
index c30dab2b..a0670fe6 100755
--- a/client/shared/scripts/updateCache
+++ b/client/shared/scripts/updateCache
@@ -1,6 +1,4 @@
#!/bin/bash
-
-
#/**
# updateCache
#@brief Actualiza la cache del cliente con imagen o fichero iso.
@@ -25,90 +23,145 @@
#@version 1.0.1 - Control de espacio requerido
#@author Antonio J.Doblas Viso
#@date 2011-05-10
+#@version 2.0.1 - Imagenes sincronizadas
+#@date 2013-02-20
#*/ ##
PROG="$(basename $0)"
if [ $# -lt 3 ]; then
- ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG str_REPO _str_Relative_Path_OGIMG_with_/ PROTOCOLO OPCIONES_PROTOCOLO OPCIONES_UPDATECACHE"
+ ogRaiseError session $OG_ERR_FORMAT "$MSG_FORMAT: $PROG str_REPO _str_Relative_Path_OGIMG_with_/ PROTOCOLO OPCIONES_PROTOCOLO OPCIONES_UPDATECACHE"
exit $?
fi
#Carga del configurador del engine
[ -z $OGENGINECONFIGURATE ] && source /opt/opengnsys/etc/engine.cfg
-REPOSITORIO="$1"
-PROTOCOLO="$3"
+# Clear temporary file used as log track by httpdlog
+# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
+echo " " > $OGLOGCOMMAND
+[ "$(ogGetCaller)" == "deployImage" -o "$(ogGetCaller)" == "restoreBaseImage" -o "$(ogGetCaller)" == "restoreDiffImage" ] || echo -n "" > $OGLOGSESSION;
+
+REPOSITORIO="${1^^}"
+PROTOCOLO="${3^^}"
OPTPROTOCOLO="$4"
REPOIP=$(ogGetRepoIp)
-echo $REPOSITORIO $REPOIP $PROTOCOLO $OPTPROTOCOLO
+ogEcho log session $REPOSITORIO $REPOIP $PROTOCOLO $OPTPROTOCOLO
# Si el repositorio local CACHE no existe error 15.
if ! $(ogFindCache >/dev/null); then
- ogRaiseError $OG_ERR_NOTCACHE "CACHE"
+ ogRaiseError session $OG_ERR_NOTCACHE "CACHE"
exit $?
fi
-echo "$MSG_SCRIPTS_UPDATECACHE_DOUPDATE "
-#TODO: ogUpdateCacheIsNecesary debe borrar la imagen que tenga igual nombre pero distinto sum-
-ogUpdateCacheIsNecesary $1 $2; RETVAL=$?
+# comprobar si la imagen existe (.img, .img.diff o directorio)
+REPOFILE=$(ogGetPath "REPO" "/$2") || exit $(ogRaiseError session $OG_ERR_NOTFOUND "REPO /$2"; echo $?)
+
+ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_DOUPDATE"
+# Distingo si es monolitica o sincronizable
+file "$REPOFILE" | grep -i -e " BTRFS Filesystem " -e " ext4 filesystem " -e " directory" 2>&1 > /dev/null
+if [ $? == 0 ]; then
+ IMGSYNC=TRUE
+ # Para imagen sincronizada, si hay imagen en cache siempre protocolo = rsync.
+ CACHEFILE="$(ogGetPath "CACHE" "/$2")" && PROTOCOLO="RSYNC"
+ # Si es sincronizada tipo directorio siempre protocolo = rsync.
+ [ -d $REPOFILE ] && PROTOCOLO="RSYNC" && IMGTYPE="dir"
+
+ # Si es imagen sincronizada siempre da distinto md5. No podemos comprobar -> actualizamos.
+ RETVAL=0
+else
+ # Si la imagen es monolitica y ha elegido protocolo = RSYNC salimos con error.
+ [ $PROTOCOLO == "RSYNC" ] && exit $(ogRaiseError session $OG_ERR_DONTSYNC_IMAGE "REPO $2"; echo $?)
+ IMGSYNC=FALSE
+ #TODO: ogUpdateCacheIsNecesary debe borrar la imagen que tenga igual nombre pero distinto sum-
+ ogUpdateCacheIsNecesary $1 $2
+ RETVAL=$?
+fi
# 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
+[ "$RETVAL" -gt "1" ] && exit $OG_ERR_UPDATECACHE
+ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE"
CACHESIZE=$(ogGetCacheSize)
CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`)
FILESIZE=$(ls -sk $(ogGetPath $REPOSITORIO "$2") | cut -f1 -d" ")
+if [ "$IMGTYPE" == "dir" ]; then
+ ogEcho log session " * $MSG_SCRIPTS_UPDATECACHE_CHECKSIZEDIR"
+ ogEcho log session " du -sk $REPOFILE"
+ REALFILESIZE=$(du -sk "$REPOFILE"|awk '{print $1}')
+else
+ REALFILESIZE=$(ls -l --block-size=1024 $REPOFILE | cut -f5 -d" ")
+fi
+# La sincronizada, si existe la imagen en cache el espacio necesario
+# es la nueva menos lo que ocupa la que ya hay.
+if [ "$PROTOCOLO" == "RSYNC" ]; then
+ if [ "$CACHEFILE" == "" ]; then
+ CACHEFILESIZE=0
+ else
+ if [ "$IMGTYPE" == "dir" ]; then
+ ogEcho log session " * $MSG_SCRIPTS_UPDATECACHE_CHECKSIZEDIR $CACHEFILESIZE"
+ ogEcho log session " du -sk $CACHEFILE"
+ CACHEFILESIZE=$(du -sk $CACHEFILE |awk '{print $1}')
+ else
+ CACHEFILESIZE=$(ls -l --block-size=1024 "$CACHEFILE" | cut -f5 -d" ")
+ fi
+ fi
+ let SIZEREQUIRED=$REALFILESIZE-$CACHEFILESIZE
+ [ $SIZEREQUIRED -lt 0 ] && SIZEREQUIRED=0
+else
+ SIZEREQUIRED=$FILESIZE
+fi
-echo "$MSG_SCRIPTS_UPDATECACHE_CHECKSIZECACHE"
#ERROR CACHESIZE 16
-if [ "$FILESIZE" -ge "$CACHESIZE" ]
+if [ "$SIZEREQUIRED" -ge "$CACHESIZE" ]
then
- echo "WARNING: $MSG_ERR_CACHESIZE: $2 = $FILESIZE > CACHE = $CACHESIZE" | tee -a $OGLOGSESSION $OGLOGFILE
- ogRaiseError $OG_ERR_CACHESIZE "CACHE"
- exit $?
+ ogEcho log session "$MSG_WARNING: $MSG_ERR_CACHESIZE: $2 = $SIZEREQUIRED > CACHE = $CACHESIZE"
+ ogRaiseError session $OG_ERR_CACHESIZE "CACHE"
+ exit $?
fi
-echo "$MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO"
+ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_IFNOTCACHEDO"
#ERROR CACHESIZE 16
-if [ "$FILESIZE" -ge "$CACHESIZEFREE" ]
+if [ "$SIZEREQUIRED" -ge "$CACHESIZEFREE" ]
then
- # echo "[ ] No hay espacio sufiente en la CACHE, detectar que hacer con engine.cfg" | tee -a $OGLOGSESSION $OGLOGFILE
- case $ACTIONCACHEFULL in
+ # ogEcho log session "[ ] No hay espacio sufiente en la CACHE, detectar que hacer con engine.cfg"
+ case "$ACTIONCACHEFULL" in
NONE)
NEXTOPERATION=UNICAST
;;
FORMAT)
- echo "[51] $MSG_HELP_ogFormatCache " | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[51] $MSG_HELP_ogFormatCache "
ogUnmountCache
ogFormatCache
ogMountCache
NEXTOPERATION=REPEAT
;;
DELETE)
- echo "[51] #MSG_HELP_ogDeleteTree $OGCAC$OGIMG/* " | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session "[51] #MSG_HELP_ogDeleteTree $OGCAC$OGIMG/* "
rm -fr $OGCAC$OGIMG/*
NEXOPERATION=REPEAT
;;
*)
- echo "WARNING: $MSG_ERR_CACHESIZE: $2 = $FILESIZE > CACHE = $CACHESIZEFREE" | tee -a $OGLOGSESSION $OGLOGFILE
- ogRaiseError $OG_ERR_CACHESIZE "CACHE"
- exit $?
+ ogEcho log session "$MSG_WARNING: $MSG_ERR_CACHESIZE: $2 = $FILESIZE > CACHE = $CACHESIZEFREE"
+ ogRaiseError session $OG_ERR_CACHESIZE "CACHE"
+ exit $?
;;
esac
fi
-ogUpdateCacheIsNecesary $REPOSITORIO "$2"; RETVAL=$?
+# Comprobamos que imagen cache igual a la del repo. Si sincronizada no podemos comprobar.
+[ "$IMGSYNC" == "TRUE" ] || ogUpdateCacheIsNecesary $REPOSITORIO "$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
+[ "$RETVAL" -gt "1" ] && exit $OG_ERR_UPDATECACHE
ogMountCache >/dev/null
## Si no existe, crear subdirectorio para el fichero en la cache.
IMGDIR=$(ogGetParentPath CACHE "/$2")
if [ $? != 0 ]; then
- echo "[5] $MSG_HELP_ogMakeDir \"$2 $(dirname "$2")."
+ ogEcho log session "[5] $MSG_HELP_ogMakeDir \"$2 $(dirname "$2")."
ogMakeDir CACHE $(dirname "/$2")
IMGDIR=$(ogGetParentPath CACHE "/$2") || exit $?
fi
@@ -116,68 +169,131 @@ fi
TIME1=$SECONDS
case "$PROTOCOLO" in
- torrent | TORRENT )
- echo "ogCopyFile $1 $2.torrent absolute $OGCAC/$OGIMG"
+ TORRENT)
+ ogEcho log session "ogCopyFile $1 $2.torrent absolute $OGCAC/$OGIMG"
# tiempos
timewait=$(expr $(printf '%d\n' 0x$(ogGetMacAddress | awk -F: '{print $5$6}')) \* 120 / 65535)
- ogCopyFile $REPOSITORIO "$2.torrent" "$IMGDIR"
+ ogCopyFile $REPOSITORIO "$2.torrent" "$IMGDIR" 2>&1 | tee -a $OGLOGCOMMAND
#TODO: comprobar que el tracker definido en el fichero es correcto.
- #TODO comprobar que el fichero torrent está en cache
+ #TODO comprobar que el fichero torrent está en cache
# retardamos el inicio -aleatorio de 0 a 120 segundos- al tracker para gestionar mas de +-40 equipos
P2PWAIT=$[ ( $RANDOM % 120 ) + 1 ]
- echo " [ ] $MSG_SCRIPTS_TASK_SLEEP : $P2PWAIT seconds ogTorrentStart CACHE $2.torrent $4" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogEcho log session " [ ] $MSG_SCRIPTS_TASK_SLEEP : $P2PWAIT seconds ogTorrentStart CACHE $2.torrent $4"
sleep $P2PWAIT
- echo " [ ] $MSG_SCRIPTS_TASK_START: ogTorrentStart CACHE $2.torrent $4" | tee -a $OGLOGSESSION $OGLOGFILE
- ogTorrentStart CACHE "$2.torrent" $4
- RESUMEUPDATECACHE=$(cat $OGLOGCOMMAND | grep -B1 "Download")
+ ogEcho log session " [ ] $MSG_SCRIPTS_TASK_START: ogTorrentStart CACHE $2.torrent $4"
+ ogTorrentStart CACHE "$2.torrent" $4 2>&1 | tee -a $OGLOGCOMMAND
+ RESUMEUPDATECACHE=$(grep -m 1 -B1 "Download" $OGLOGCOMMAND)
+ RESUMEUPDATECACHEbf=$(grep -m 1 "Download" $OGLOGCOMMAND)
+ if [ "$RESUMEUPDATECACHEbf" == "Download complete." ]; then
+ rm $IMGDIR$2".torrent.bf" 2>&1 | tee -a $OGLOGCOMMAND
+ fi
;;
- multicast | MULTICAST )
+ MULTICAST)
PORT=$(echo $OPTPROTOCOLO | cut -f1 -d":")
let PORTAUX=$PORT+1
- echo "$MSG_SCRIPTS_UPDATECACHE_CHECKMCASTSESSION : $REPOIP:$PORTAUX:$PORT"
- #TODO: ticket 379
+ ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_CHECKMCASTSESSION : $REPOIP:$PORTAUX:$PORT"
+ #TODO: ticket 379
NUMBER=$[ ( $RANDOM % 30 ) + 1 ]
sleep $NUMBER
#FIN TODO
if (nmap -n -sU -p $PORTAUX $REPOIP | grep open)
then
- ogMcastReceiverFile $PORT CACHE "$2"
+ ogMcastReceiverFile $PORT CACHE "$2" 2>&1 | tee -a $OGLOGCOMMAND
+
else
# TODO ticket 379 Realizar la petición basada en identificador de operacion
- echo "$MSG_SCRIPTS_TASK_START : hose $REPOIP 2009 --out sh -c "echo -ne START_MULTICAST $2 $OPTPROTOCOLO""
+ ogEcho log session "$MSG_SCRIPTS_TASK_START : hose $REPOIP 2009 --out sh -c \"echo -ne START_MULTICAST $2 $OPTPROTOCOLO\""
hose $REPOIP 2009 --out sh -c "echo -ne START_MULTICAST $2 $OPTPROTOCOLO"
#echo "espero y llamo a: ogMcastReceiverFile $PORT CACHE $2"
sleep 10
if (nmap -n -sU -p $PORTAUX $REPOIP | grep open)
then
- ogMcastReceiverFile $PORT CACHE "$2"
+ ogMcastReceiverFile $PORT CACHE "$2" 2>&1 | tee -a $OGLOGCOMMAND
else
- echo "$MSG_SCRIPTS_TASK_ERR : hose $REPOIP 2009 --out sh -c echo -ne START_MULTICAST $2 $OPTPROTOCOLO"
- exit 1
+ ogEcho log session "$MSG_SCRIPTS_TASK_ERR : hose $REPOIP 2009 --out sh -c echo -ne START_MULTICAST $2 $OPTPROTOCOLO"
+ exit $OG_ERR_UPDATECACHE
fi
fi
#cat $OGLOGCOMMAND.tmp | grep -B1 "Transfer complete"
sleep 5
#cat $OGLOGCOMMAND.tmp | grep -B1 "Transfer complete"
- RESUMEUPDATECACHE=$(cat $OGLOGCOMMAND.tmp | grep -B1 "Transfer complete")
+ RESUMEUPDATECACHE=$(grep -m 1 -B1 "Transfer complete" $OGLOGCOMMAND.tmp)
;;
- unicast | UNICAST )
- echo "unicast"
- ogCopyFile $REPOSITORIO "$2" "$IMGDIR"
+ UNICAST)
+ #ogEcho log session "unicast"
+ ogCopyFile $REPOSITORIO "$2" "$IMGDIR" 2>&1 | tee -a $OGLOGCOMMAND
+ sleep 5
+ RESUMEUPDATECACHE=$(grep -m 1 "100%" $OGLOGCOMMAND.tmp)
+ ;;
+ RSYNC)
+ # Si parametro de protocolo no era rsync, mensaje de cambio protocolo
+ [ "${3^^}" == "RSYNC" ] || ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_RSYNCPROTOCOLCHANGE"
+ # Opciones de rsync
+ USERRSYNC="opengnsys"
+ PASSWORD=" --password-file=/scripts/passrsync "
+ OPTRSYNC=" --delete --progress "
+ [ "$ogrsyncz" == "true" ] && OPTRSYNC="z $OPTRSYNC"
+ [ "$ogrsyncw" == "true" ] && OPTRSYNC="w$OPTRSYNC"
+
+ if [ -d $REPOFILE ]; then
+ # Si es sincronizada tipo directorio.
+ [ -d "$OGCAC$OGIMG/$2" ] || mkdir "$OGCAC$OGIMG/$2"
+ ogEcho log session "rsync -aHAX$OPTRSYNC $USERRSYNC@$REPOIP::ogimages/$2/ $OGCAC$OGIMG/$2"
+ rsync -aHAX$OPTRSYNC $PASSWORD "$USERRSYNC@$REPOIP::ogimages/$2/" "$OGCAC$OGIMG/$2" 2>> $OGLOGCOMMAND | egrep "^sent|^sending|^total%" >> $OGLOGCOMMAND
+ else
+ # Si es sincronizada tipo archivo.
+ [ "${2##*.}" == "img" ] && IMGTYPE="img" || IMGTYPE="diff"
+ IMGNAME="${2%.img*}"
+
+ DIRMOUNT=$(ogGetMountImageDir "$IMGNAME" $IMGTYPE)
+ DIRLOCAL="/tmp/$DIRMOUNT"
+ mkdir "$DIRLOCAL" 2>/dev/null
+ ogEcho log session "$MSG_SCRIPTS_UPDATECACHE_CHECKSIZEIMG"
+
+ # Si la imagen no existe la creo
+ # Si la imagen del repositorio es mayor, redimensiono la imagen de cache
+ if [ "$CACHEFILE" == "" -o $CACHEFILESIZE -lt $REALFILESIZE ]; then
+ ogEcho log session "$MSG_HELP_ogCreateFileImage"
+ ogCreateFileImage CACHE "$IMGNAME" $IMGTYPE $REALFILESIZE
+ TIMEAUX3=$[SECONDS-TIMEAUX3]
+ ogEcho log session " $MSG_SCRIPTS_TASK_END, $MSG_SCRIPTS_TIME_PARTIAL: $[TIMEAUX3/60]m $[TIMEAUX3%60]s"
+ fi
+ # Montamos las imagenes para sincronizarlas. Quitamos / inicial.
+ ogMountImage CACHE "${IMGNAME#\/}" $IMGTYPE || exit $?
+ ogMountImage REPO "${IMGNAME#\/}" $IMGTYPE
+ # Esperamos que se monte la imagen en el servidor
+ ogWaitMountImage REPO "$IMGNAME" $IMGTYPE || exit $?
+ ogEcho log session " rsync -aHAX$OPTRSYNC $USERRSYNC@$REPOIP::ogimages/$DIRMOUNT/ $DIRLOCAL"
+ rsync -aHAX$OPTRSYNC $PASSWORD "$USERRSYNC@$REPOIP::ogimages/$DIRMOUNT/" "$DIRLOCAL" 2>>$OGLOGCOMMAND | egrep "^sent|^sending|^total|%" >> $OGLOGCOMMAND
+ # RETVAL="1" -> OK RETVAL="2" -> error # valores igual que ogUpdateCacheIsNecesary
+ [ ${PIPESTATUS[0]} -eq 0 ] && RETVAL="1"|| RETVAL="2"
+ # Desmonto las imagenes
+ ogUnmountImage CACHE "$IMGNAME" $IMGTYPE
+ ogUnmountImage REPO "$IMGNAME" $IMGTYPE
+ fi
;;
esac
TIME1=$[SECONDS-TIME1]
-echo " [ ] $RESUMEUPDATECACHE " | tee -a $OGLOGSESSION $OGLOGFILE
-echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL updateCache $[TIME1/60]m $[TIME1%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
-echo " [ ] $MSG_SCRIPTS_TASK_START $MSG_HELP_ogCalculateChecksum " | tee -a $OGLOGSESSION $OGLOGFILE
-TIME2=$SECONDS
-ogUpdateCacheIsNecesary $REPOSITORIO "$2"; RETVAL=$?
-TIME2=$[SECONDS-TIME2]
-echo " [ ] $MSG_SCRIPTS_TIME_PARTIAL $MSG_HELP_ogCalculateChecksum $[TIME2/60]m $[TIME2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
-# si RETVAL=0 => actualizamos si RETVAL=1 no actaulizasmo-exit 0 || si RETVAL>2 exit 1
-[ "$RETVAL" == "0" ] && exit 1
+ogEcho log session " [ ] $RESUMEUPDATECACHE "
+ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL updateCache $[TIME1/60]m $[TIME1%60]s"
+ogEcho log session " [ ] $MSG_SCRIPTS_TASK_START $MSG_HELP_ogCalculateChecksum "
+TIME2=$SECONDS
+# Si es imagen sincronizada siempre da distinto md5. No podemos comprobar
+if [ "$IMGSYNC" == "TRUE" ]; then
+ # RETVAL="1" -> OK RETVAL="2" -> error # valores igual que ogUpdateCacheIsNecesary
+ [ $PROTOCOLO == "RSYNC" ] || RETVAL=1
+else
+ ogUpdateCacheIsNecesary $REPOSITORIO "$2"
+ RETVAL=$?
+fi
+if [ "$(ogGetCaller)" != "deployImage" ]; then
+ TIME2=$[SECONDS-TIME2]
+ ogEcho log session " [ ] $MSG_SCRIPTS_TIME_PARTIAL $MSG_HELP_ogCalculateChecksum $[TIME2/60]m $[TIME2%60]s"
+fi
+# si RETVAL=0 => actualizamos si RETVAL=1 no actaulizamos-exit 0 || si RETVAL>2 exit 1
+[ "$RETVAL" == "0" ] && exit $OG_ERR_UPDATECACHE
[ "$RETVAL" == "1" ] && exit 0
-[ "$RETVAL" -gt "1" ] && exit 1
+[ "$RETVAL" -gt "1" ] && exit $OG_ERR_UPDATECACHE
diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt
index 40e8c481..c7003ae4 100644
--- a/doc/CHANGELOG.es.txt
+++ b/doc/CHANGELOG.es.txt
@@ -2,6 +2,115 @@ LISTA DE CAMBIOS CHANGELOG.es.ext
========================================
+Lista de cambios incluidos en OpenGnSys 1.0.5
+---------------------------------------------
+
+Tickets resueltos en módulo OpenGnSys Cloning Engine:
+#142 Ampliar el soporte al mayor número de sistemas de ficheros posible
+#295 Función ogSetPartitionId: partición errónea o desconocida
+#397 Separación completa de objetos partición y sistema de archivos (tarea)
+#484 Arranque dual (tarea)
+#548 Ampliar la detección de sistemas operativos
+#550 Error al restaurar en equipos recién particionados o recién incluidos en OpenGnSys
+#555 Longitud máxima de nombres Netbios
+#571 NTAutoLogon: muestra la clave del usuario de autologon
+#578 Problema con la instalación del cliente de Windows
+#581 El comando chntpw se cuelga cuando el registro de Windows está corrompido
+#588 Grub para GNU/Linux de 32 y 64 bits incluye configurador del fichero cfg
+#589 Función ogConfigureFstab en Boot.lib
+#590 Función ogSetLinuxName en Boot.lib
+#591 Función ogCleanLinuxDevices en Boot.lib
+#592 Función ogBoot sobre un sistema GNU/Linux depende del valor default de grub.cfg
+#593 Engine: optimizar inicio de sesión en Windows
+#598 Eliminar imagen de caché no funciona si caché desmontada
+#600 Eliminar el límite de tamaño de la caché
+#602 Adaptar funciones para soportar los sistemas de ficheros del Kernel 3.7
+#605 builtToOrder para discos SCSI con controlador lsi_sas
+#624 Reboot con valor por defecto de tiempo de sleep configurable.
+#628 Problema postconfiguración Windows dos veces seguidas
+#634 Problema si cliente de OpenGnSys ya se encuentra instalado en Windows
+#636 Recupearar log en tiempo real para comados de restauración
+#637 Función ogRaiseError sin parámetros devuelve mensaje erróneo y revisión de control de errores
+#640 Evitar información repetida en ficheros de logs
+#644 Continuar comunicación en torrent
+
+Tickets resueltos en módulo OpenGnSys Client:
+#245 Teclado internacional en el cliente (mejora)
+#263 Consola Web: Particionar y formatear
+#457 Seguridad: ogclient en modo usuario permite abrir una consola bash (no se resolverá)
+#461 Actualizar Grub4DOS (no se resolverá)
+#463 ogLive no espera el link para configurar la red y da error
+#547 ogLive basado en ubuntu 12.04 no detecta ficheros de configuración de DNS
+#568 Menú por defecto para los clientes incluye acceso a sistemas operativos
+#570 boot-tools: error en la generación del ogLive basado en ubuntu 12.10
+#573 Crear cliente ogLive basado en Ubuntu 12.10 con Kernel 3.7 (tarea)
+#579 El cliente no inicia cuando se conecta un dispositivo USB
+#563 Configuración WOL del ogLive en determinados equipos provoca que el browser no se muestre
+#587 buildToOrder: activación controladores de disco para Windows 7
+#595 Internacionalización mensajes del cliente
+#604 Agente de sistema operativo Windows bloquea conexión a Internet
+#612 Log en tiempo real no muestra salida de Unicast
+#613 Script reboot con parámetro de tiempo
+#635 Opción para deshabilitar el apagado automático de clientes (mejora)
+#639 Cliente OpenGnSys para Linux permite ejecutar script
+#641 Crear Código de error específico para script updateCache
+
+Tickets resueltos en módulo OpenGnSys Server:
+#534 Netboot con ficheros dinámicos
+#535 Script torrent-creator con imágenes mayores a 80 GB entra en bucle y no finaliza
+#567 Los comandos se ejecutan 2 veces si se incluyen en la cola de acciones
+#575 Archivo de configuración Rsync para imagenes sincronizadas
+#584 Script setclientmode trunca el fichero PXE
+#586 Mejorar seguridad en scripts para no mostrar los parámetros de ejecución de mysql
+#597 Servicio ogAdmServer deja conexiones MySQL abiertas en la funcion AutoexecCliente
+#607 Script setclientmode: Identificacion de la plantilla por nombre en consola
+#621 Servicio ogAdmServer consume toda la CPU en ciertas circunstancias
+#638 Script de servidor para listar el software instalado en una imagen
+
+Tickets resueltos en módulo OpenGnSys Repository Server:
+#583 Script deleteimage no admite correctamente parámetro de borrado de copia de seguridad de la imagen
+
+Tickets resueltos en módulo OpenGnSys Web Admin Console:
+#149 Controlar tamaño de caché en la consola
+#265 Consola Web: Actualización información al terminar los comandos (duplicado de #577)
+#416 Clonar partición sólo datos
+#524 Eliminar imagen en caché del cliente
+#533 Scritps de interfaceAdm no deben incluir lógica de proceso
+#551 Consola web compatible con PHP 5.4 (tarea)
+#552 Permitir crear caché en cualquier disco
+#566 Asistente de gestión Master muestra todas las imágenes de su caché para enviarlas
+#585 Incluir en la administración web las opciones DNS y proxy para el ogLive
+#594 Reactivar el comando Formatear y Particionar
+#596 Gestión automática de fichero PXE al administrar clientes
+#599 Consola Web: opción de ejecución por defecto de los comandos
+#601 Mostrar configuraciones de más de un disco en la consola web
+#606 Fichero constantes.php: error panel de navegación y asistente particiones remotas
+#608 Consola Web: mostrar mensaje cuando equipo no tenga la configuración del disco en la BD
+#609 Fallo al incorporar ordenadores
+#610 Validación nombre canónico de image
+#614 Compatibilidad múltiples dispositivos (mejora)
+#617 Botones barra menú (duplicado de #614)
+#619 Consola web asistente particionado: error si se incluye en la cola de acciones
+#642 Mejoras en comandos de eliminación de imágenes
+#643 Validacion formulario propiedades del ordenador
+
+Tickets resueltos en módulo OpenGnSys Installer:
+#562 Log de instalación ubicarlo en directorio log del server
+#569 Aplicar actualizaciones de la base de datos en la misma versión de OpenGnSys
+#576 Varias cuestiones relacionadas con la sincronización de imágenes
+#582 Nebtoot basado en ficheros (ticket #534) requiere proceso para actualización de ficheros y de la base de datos
+#622 Script de instalacion interactivo
+#627 Corrección errores SQL
+
+Tickets genéricos resueltos:
+#453 Autenticación con LDAP u otro servicio (tarea)
+#455 Comunicacion SSH entre un Servidor central y repositorios (opcional)
+#564 Eliminar imagen de repositorio (tarea)
+#565 Imágenes diferenciales (tarea)
+#537 Revisión proceso de creación y restauración de imágenes: interfazAdm -> scripts -> engine (mejora)
+#577 Enviar al servidor la configuración de particiones cada vez que un cliente e ejecuta un comando
+
+
Lista de cambios incluidos en OpenGnSys 1.0.4a (versión de mantenimiento)
----------------------------------------------
@@ -39,6 +148,7 @@ Tickets resueltos en módulo OpenGnSys Cloning Engine:
#530 Función ogReduceFs sobre windows 7 no borra fichero hiberfil.sys
#538 Función ogTypeToId: error en parámetro
#540 Función ogCreateCache no detecta tipo de tabla de particiones
+#542 ogLive cliente torrent -leecher ó peer- tiempo en modo seeder
#543 Particionado -incluido initCache- sobre disco duro sin formatear no funciona
Tickets resueltos en módulo OpenGnSys Client:
@@ -113,6 +223,7 @@ Tickets resueltos en módulo OpenGnSys Client:
#460 Cliente ogLive 11.10 (tarea)
#466 Comando iniciar sobre sistema Linux bloqueado por Browswer
#468 Sistema de archivos de la caché en Ext4
+#476 Revisar y depurar el proceso de arranque del cliente
#477 Mejorar la internacionalización del cliente (inglés, en especial)
#482 Script de inicio mountrepo.sh no reconoce variable "ogprotocol"
@@ -291,6 +402,7 @@ Tickets resueltos en módulo OpenGnSys Client:
#336 Regenerar el cliente ogclient-1.0-lucid-32bit.tar.gz
#360 Importar herramientas de generación del cliente desde la rama ogClient (mejora)
#368 Generar nuevo cliente como boot-tools
+#374 Script fileslink da error al intentar crear enlace con las Qt y crear directorios
Tickets resueltos en módulo OpenGnSys Server:
#340 Menú PXE de arranque con tiempo de espera
diff --git a/doc/INSTALL.es.txt b/doc/INSTALL.es.txt
index 3d8a05f1..cd111e2a 100644
--- a/doc/INSTALL.es.txt
+++ b/doc/INSTALL.es.txt
@@ -1,18 +1,18 @@
-Instalación de OpenGnSys Server v 1.0.3
+Instalación de OpenGnSys Server v 1.0.5
=======================================
Notas iniciales
---------------
-Se presupone que el servidor de OpenGnSys va a ser instalado en una distribución del sistema operativo Ubuntu Linux a partir de la versión 9.04 (también ha sido probado en sistemas Debian 6 y Linux Mint 12).
+Se presupone que el servidor de OpenGnSys va a ser instalado en una distribución del sistema operativo Ubuntu Server a partir de la versión 12.04 LTS (también ha sido probado en sistemas basados en Fedora 20).
-El serividor debe tener acceso a Internet para descargar los paquetes necesarios, el rpositorio código y el cliente preconfigurado.
+El serividor debe tener acceso a Internet para descargar los paquetes necesarios, el código del proyecto y el cliente preconfigurado.
Requisitos mínimos de almacenamiento:
-- 350 MB en el directorio /tmp (solo durante la instalación)
-- 300 MB en el directorio /var/lib/tftpboot (o /srv en sistemas Debian)
-- 50 MB en el directorio de instalación /opt/opengnsys
-- Estimar la capacidad necesaria para el repositorio de imágenes en /opt/opengnsys/images
+- 100 MB en el directorio /tmp (solo durante la instalación)
+- 450 MB en el directorio /var/lib/tftpboot (o /srv en sistemas Debian)
+- 500 MB en el directorio de instalación /opt/opengnsys sin contar el espacio para logs (100 MB si el cliente ogLive está previamente descargado).
+- Estimar la capacidad necesaria para el repositorio de imágenes en /opt/opengnsys/images (es recomendable que este directorio se monte sobre un sistema de archivos independiente).
Instalación
@@ -22,7 +22,7 @@ La instalación de OpenGnSys se realiza ejecutando el script de instalación ope
Ejemplos de descompresión del programa:
- tar xvzf opengnsys-1.0.3.tar.gz
+ tar xvzf opengnsys-1.0.5.tar.gz
cd opengnsys/installer
Ejemplos de descarga con varias herramientas:
@@ -33,18 +33,19 @@ Ejemplos de descarga con varias herramientas:
* Descargar con curl.
curl http://www.opengnsys.es/svn/trunk/installer/opengnsys_installer.sh > opengnsys_installer.sh
-Como medida de seguridad, resulta muy importante modificar los usuarios y claves por defecto de acceso al sistema. Para ello, editar el fichero de instalación opengnsys_installer.sh y modificar los valores de las variables de configuración:
- MYSQL_ROOT_PASSWORD - clave del usuario root de MySQL.
- OPENGNSYS_DB_USER - usuario de acceso y super-administrador de OpenGnSys.
- OPENGNSYS_DB_PASSWD - clave del usuario.
- OPENGNSYS_CLIENT_PASSWD - clave de acceso del cliente a servicios remotos.
-
-El script debe ser ejecutado como usuario root:
+El script de instalación debe ser ejecutado como usuario root:
sudo bash opengnsys_installer.sh
+
+Dicho script solicitará por teclado la siguiente información para configurar el acceso al servicio (si no se indica un parámetro, toma el valor por defecto):
+ * Clave del usuario root de MySQL.
+ * Usuario de acceso a la consola web y super-administrador de OpenGnSys.
+ * Clave del usuario de acceso a la consola web.
+ * Clave de acceso del cliente a servicios remotos.
+
Se realizan los siguientes procesos:
- * Obtenener los parámetros básicos de la red.
+ * Obtener los parámetros básicos de la red.
* Comprobar los paquetes instalados.
* Descargar e instalar las dependencias que faltan.
* Crear la estructura básica de directorios de OpenGnSys.
@@ -71,6 +72,7 @@ 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.
+ * Si el script se actualiza a sí mismo, debe ser ejecutado de nuevo.
* No se actualizan los servicios asociados al sistema operativo.
* No se modifican los ficheros de configuración.
@@ -84,7 +86,7 @@ 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.
+ * Se eliminan 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.
@@ -92,3 +94,4 @@ También existe un script de desinstalación de los componentes de OpenGnSys, co
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 eb3e9793..b5fb630a 100644
--- a/doc/VERSION.txt
+++ b/doc/VERSION.txt
@@ -1 +1 @@
-OpenGnSys 1.0.4a
+OpenGnSys 1.0.5
diff --git a/installer/INSTALL.en.txt b/installer/INSTALL.en.txt
index cfff05c5..844c4e74 100644
--- a/installer/INSTALL.en.txt
+++ b/installer/INSTALL.en.txt
@@ -8,19 +8,11 @@ Installing OpenGnsys
--------------------
-For security reasons, it is very important modify defaults users and passwords to access to the system. For this, edit the installation file opengnsys_installer.sh and change the values of configuration variables:
-
- MYSQL_ROOT_PASSWORD - MySQL root user password.
- OPENGNSYS_DB_USER - OpenGnSys access user and OpenGnSys super-user.
- OPENGNSYS_DB_PASSWD - User password.
- OPENGNSYS_CLIENT_PASSWD - Password for client access to remote services.
-
-
Run opengnsys_installer.sh script as "root" to install all its dependencies, to install the OpenGnSys components, and to make the initial configuration.
sudo bash opengnsys_installer.sh
-Follow the post-installation instructions.
+Follow the instructions.
Updating OpenGnSys
diff --git a/installer/INSTALL.es.txt b/installer/INSTALL.es.txt
index 4a809ac1..9c47cbe3 100644
--- a/installer/INSTALL.es.txt
+++ b/installer/INSTALL.es.txt
@@ -17,18 +17,15 @@ O bien, descargar el instalador desde la última reversión del repositorio:
Opcionalmente, puede descargarse la imagen del cliente; si no se realiza este paso, el instalador la descargará automáticamente.
wget http://www.opengnsys.es/downloads/ogLive-versioncliente.iso
-2. Configuración básica.
-
-Como medida de seguridad, debe modificarse los usuarios y claves por defecto de acceso al sistema. Para ello, editar el fichero de instalación opengnsys_installer.sh y modificar los valores de las variables de configuración:
-
- MYSQL_ROOT_PASSWORD - clave del usuario root de MySQL.
- OPENGNSYS_DB_USER - usuario de acceso y super-administrador de OpenGnSys.
- OPENGNSYS_DB_PASSWD - clave del usuario.
- OPENGNSYS_CLIENT_PASSWD - clave de acceso del cliente a servicios remotos.
-
-3. Ejecutar el instalador como root:
+2. Ejecutar el instalador como root:
sudo bash opengnsys_installer.sh
+Dicho script solicitará por teclado la siguiente información para configurar el acceso al servicio (si no se indica un parámetro, toma el valor por defecto):
+ * Clave del usuario root de MySQL.
+ * Usuario de acceso a la consola web y super-administrador de OpenGnSys.
+ * Clave del usuario de acceso a la consola web.
+ * Clave de acceso del cliente a servicios remotos.
+
Actaulización de ficheros
-------------------------
diff --git a/installer/install_ticket_wolunicast.sh b/installer/install_ticket_wolunicast.sh
deleted file mode 100755
index 31621636..00000000
--- a/installer/install_ticket_wolunicast.sh
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/bash
-# Instalacin del ticket 513: Wake-On-Lan por IP en Unicast.
-
-# Declaracin de variables.
-TICKET="513-WOL-Unicast";
-SVNURLSOURCE="http://opengnsys.es/svn/branches/version1.0-tickets/Resueltos/wake_on_lan_por_IP_unicast_ticket513/";
-BASEDIR="/opt/opengnsys/";
-TICKETDIR="${BASEDIR}tickets/";
-TARGETDIR="${TICKETDIR}${TICKET}/";
-LISTTOBACKUP="${TICKETDIR}${TICKET}-BACKUP.txt";
-FILEBACKUP="${TICKETDIR}${TICKET}-BACKUP.tgz";
-SVNURLSOURCEBASE="http://opengnsys.es/svn/trunk/admin/Sources/";
-
-#TODO comprobar version de opengnsys.
-
-echo "Parando los servios."
-/etc/init.d/opengnsys stop
-sleep 5
-
-mkdir -p $TARGETDIR;
-echo "Descargando base de los sources"
-svn export --force $SVNURLSOURCEBASE $TARGETDIR/admin/Sources;
-if [ ! -d $TARGETDIR/admin/Sources ]; then
- echo "Error de acceso a los ficheros fuente" >&2
- exit 1
-fi
-echo "Descando modificaciones del ticket"
-svn export --force $SVNURLSOURCE $TARGETDIR/;
-find $TARGETDIR -name .svn -type d -exec rm -fr {} \;
-
-## Especifico de este tiket
-mv ${TARGETDIR}/admin/WebConsole ${TARGETDIR}/www/
-
-echo "Generando fichero de los archivos involucrados en $LISTTOBACKUP "
-find $TARGETDIR -type f | egrep -v 'Sources|installer-info' | awk -F"$TARGETDIR" '{print $2}' > $LISTTOBACKUP;
-
-#compilamos el ogAdmServer
-cd ${TARGETDIR}/admin/Sources/Services/ogAdmServer
-make
-mkdir -p ${TARGETDIR}sbin/
-cp -a ${TARGETDIR}admin/Sources/Services/ogAdmServer/ogAdmServer ${BASEDIR}sbin/.
-echo "sbin/ogAdmServer" >> $LISTTOBACKUP;
-##
-
-echo "Creando backup en $FILEBACKUP "
-cd $BASEDIR;
-[ -f $FILEBACKUP ] || tar czvf $FILEBACKUP -T $LISTTOBACKUP 2>/dev/null;
-
-echo "Copiando estructura de opengnsys"
-cp -av ${TARGETDIR}/[^installer][^admin]* ${BASEDIR};
-
-echo "Inicando los servicios"
-/etc/init.d/opengnsys start
-sleep 5
-
diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh
index 44baafd4..a0bc643a 100755
--- a/installer/opengnsys_installer.sh
+++ b/installer/opengnsys_installer.sh
@@ -6,35 +6,83 @@
#####################################################################
-
-#### AVISO: Editar configuración de acceso por defecto.
-#### WARNING: Edit default access configuration.
-MYSQL_ROOT_PASSWORD="passwordroot" # Clave root de MySQL
-OPENGNSYS_DB_USER="usuog" # Usuario de acceso a la base de datos
-OPENGNSYS_DB_PASSWD="passusuog" # Clave de acceso a la base de datos
-OPENGNSYS_CLIENT_PASSWD="og" # Clave de acceso del cliente
-
-
-#### AVISO: NO EDITAR.
-#### WARNING: DO NOT EDIT.
-OPENGNSYS_DATABASE="ogAdmBD" # Nombre de la base datos
-OPENGNSYS_CLIENT_USER="opengnsys" # Usuario del cliente para acceso remoto
-
-
+#### AVISO: Puede editar configuración de acceso por defecto.
+#### WARNING: Edit default access configuration if you wish.
+DEFAULT_MYSQL_ROOT_PASSWORD="passwordroot" # Clave por defecto root de MySQL
+DEFAULT_OPENGNSYS_DB_USER="usuog" # Usuario por defecto de acceso a la base de datos
+DEFAULT_OPENGNSYS_DB_PASSWD="passusuog" # Clave por defecto de acceso a la base de datos
+DEFAULT_OPENGNSYS_CLIENT_PASSWD="og" # Clave por defecto de acceso del cliente
# Sólo ejecutable por usuario root
if [ "$(whoami)" != 'root' ]; then
echo "ERROR: this program must run under root privileges!!"
exit 1
fi
-# Solo se deben aceptar números y letras en la clave de acceso del cliente.
-if [ -n "${OPENGNSYS_CLIENT_PASSWD//[a-zA-Z0-9]/}" ]; then
- echo "ERROR: client password must be alphanumeric, edit installer variables."
- exit 1
-fi
+
+echo -e "\\nOpenGnSys Installation"
+echo "=============================="
+
+# Clave root de MySQL
+while : ; do
+ echo -n -e "\\nEnter root password for MySQL (${DEFAULT_MYSQL_ROOT_PASSWORD}): ";
+ read MYSQL_ROOT_PASSWORD
+ if [ -n "${MYSQL_ROOT_PASSWORD//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico
+ echo -e "\\aERROR: Must be alphanumeric, try again..."
+ else
+ if [ -z $MYSQL_ROOT_PASSWORD ]; then # Si esta vacio ponemos el valor por defecto
+ MYSQL_ROOT_PASSWORD=$DEFAULT_MYSQL_ROOT_PASSWORD
+ fi
+ break
+ fi
+done
+
+# Usuario de acceso a la base de datos
+while : ; do
+ echo -n -e "\\nEnter username for OpenGnSys console (${DEFAULT_OPENGNSYS_DB_USER}): "
+ read OPENGNSYS_DB_USER
+ if [ -n "${OPENGNSYS_DB_USER//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico
+ echo -e "\\aERROR: Must be alphanumeric, try again..."
+ else
+ if [ -z $OPENGNSYS_DB_USER ]; then # Si esta vacio ponemos el valor por defecto
+ OPENGNSYS_DB_USER=$DEFAULT_OPENGNSYS_DB_USER
+ fi
+ break
+ fi
+done
+
+# Clave de acceso a la base de datos
+while : ; do
+ echo -n -e "\\nEnter password for OpenGnSys console (${DEFAULT_OPENGNSYS_DB_PASSWD}): "
+ read OPENGNSYS_DB_PASSWD
+ if [ -n "${OPENGNSYS_DB_PASSWD//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico
+ echo -e "\\aERROR: Must be alphanumeric, try again..."
+ else
+ if [ -z $OPENGNSYS_DB_PASSWD ]; then # Si esta vacio ponemos el valor por defecto
+ OPENGNSYS_DB_PASSWD=$DEFAULT_OPENGNSYS_DB_PASSWD
+ fi
+ break
+ fi
+done
+
+# Clave de acceso del cliente
+while : ; do
+ echo -n -e "\\nEnter root password for OpenGnSys client (${DEFAULT_OPENGNSYS_CLIENT_PASSWD}): "
+ read OPENGNSYS_CLIENT_PASSWD
+ if [ -n "${OPENGNSYS_CLIENT_PASSWD//[a-zA-Z0-9]/}" ]; then # Comprobamos que sea un valor alfanumerico
+ echo -e "\\aERROR: Must be alphanumeric, try again..."
+ else
+ if [ -z $OPENGNSYS_CLIENT_PASSWD ]; then # Si esta vacio ponemos el valor por defecto
+ OPENGNSYS_CLIENT_PASSWD=$DEFAULT_OPENGNSYS_CLIENT_PASSWD
+ fi
+ break
+ fi
+done
+
+echo -e "\\n=============================="
# 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")
OPENGNSYS_SERVER="www.opengnsys.es"
if [ -d "$PROGRAMDIR/../installer" ]; then
USESVN=0
@@ -46,11 +94,19 @@ SVN_URL="http://$OPENGNSYS_SERVER/svn/trunk/"
WORKDIR=/tmp/opengnsys_installer
mkdir -p $WORKDIR
+# Directorio destino de OpenGnSys.
INSTALL_TARGET=/opt/opengnsys
-LOG_FILE=/tmp/opengnsys_installation.log
-# Base de datos
-OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/ogAdmBD.sql
+# Registro de incidencias.
+OGLOGFILE=$INSTALL_TARGET/log/${PROGRAMNAME%.sh}.log
+LOG_FILE=/tmp/$(basename $OGLOGFILE)
+
+# Usuario del cliente para acceso remoto.
+OPENGNSYS_CLIENT_USER="opengnsys"
+
+# Nombre de la base datos y fichero SQL para su creación.
+OPENGNSYS_DATABASE="ogAdmBD"
+OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/${OPENGNSYS_DATABASE}.sql
#####################################################################
@@ -59,7 +115,7 @@ OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/ogAdmBD.sql
# Generar variables de configuración del instalador
# Variables globales:
-# - OSDISTRIB, OSCODENAME - datos de la distribución Linux
+# - OSDISTRIB - tipo de distribución GNU/Linux
# - DEPENDENCIES - array de dependencias que deben estar instaladas
# - UPDATEPKGLIST, INSTALLPKGS, CHECKPKGS - comandos para gestión de paquetes
# - INSTALLEXTRADEPS - instalar dependencias no incluidas en la distribución
@@ -69,21 +125,27 @@ OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/ogAdmBD.sql
# - APACHESSLMOD, APACHEENABLESSL, APACHEMAKECERT - habilitar módulo Apache y certificado SSL
# - APACHEENABLEOG, APACHEOGSITE, - habilitar sitio web de OpenGnSys
# - INETDSERV - servicio Inetd
-# - IPTABLESSERV - servicio IPTables
+# - FIREWALLSERV - servicio de cortabuegos IPTables/FirewallD
# - DHCPSERV, DHCPCFGDIR - servicio y configuración de DHCP
-# - MYSQLSERV - servicio MySQL
+# - MYSQLSERV, TMPMYCNF - servicio MySQL y fichero temporal con credenciales de acceso
+# - MARIADBSERV - servicio MariaDB (sustituto de MySQL en algunas distribuciones)
+# - RSYNCSERV, RSYNCCFGDIR - servicio y configuración de Rsync
# - SAMBASERV, SAMBACFGDIR - servicio y configuración de Samba
# - TFTPSERV, TFTPCFGDIR, SYSLINUXDIR - servicio y configuración de TFTP/PXE
function autoConfigure()
{
-# Detectar sistema operativo del servidor (debe soportar LSB).
-OSDISTRIB=$(lsb_release -is 2>/dev/null)
-OSCODENAME=$(lsb_release -cs 2>/dev/null)
+# Detectar sistema operativo del servidor (compatible con fichero os-release y con LSB).
+if [ -f /etc/os-release ]; then
+ source /etc/os-release
+ OSDISTRIB="$NAME"
+else
+ OSDISTRIB=$(lsb_release -is 2>/dev/null)
+fi
-# Configuración según la distribución de Linux.
+# Configuración según la distribución GNU/Linux.
case "$OSDISTRIB" in
Ubuntu|Debian|LinuxMint)
- DEPENDENCIES=( subversion apache2 php5 libapache2-mod-php5 mysql-server php5-mysql isc-dhcp-server bittorrent tftp-hpa tftpd-hpa syslinux openbsd-inetd update-inetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent samba unzip netpipes debootstrap schroot squashfs-tools )
+ DEPENDENCIES=( subversion apache2 php5 php5-ldap libapache2-mod-php5 mysql-server php5-mysql isc-dhcp-server bittorrent tftp-hpa tftpd-hpa syslinux xinetd build-essential g++-multilib libmysqlclient15-dev wget doxygen graphviz bittornado ctorrent samba rsync unzip netpipes debootstrap schroot squashfs-tools btrfs-tools procps )
UPDATEPKGLIST="apt-get update"
INSTALLPKG="apt-get -y install --force-yes"
CHECKPKG="dpkg -s \$package 2>/dev/null | grep Status | grep -qw install"
@@ -108,24 +170,38 @@ case "$OSDISTRIB" in
APACHEMAKECERT="make-ssl-cert generate-default-snakeoil --force-overwrite"
DHCPSERV=isc-dhcp-server
DHCPCFGDIR=/etc/dhcp
- INETDSERV=openbsd-inetd
+ INETDSERV=xinetd
+ INETDCFGDIR=/etc/xinetd.d
MYSQLSERV=mysql
+ MARIADBSERV=mariadb
+ RSYNCSERV=rsync
+ RSYNCCFGDIR=/etc
SAMBASERV=smbd
SAMBACFGDIR=/etc/samba
SYSLINUXDIR=/usr/lib/syslinux
TFTPCFGDIR=/var/lib/tftpboot
;;
Fedora|CentOS)
- DEPENDENCIES=( subversion httpd mod_ssl php mysql-server mysql-devel mysql-devel.i686 php-mysql dhcp tftp-server tftp syslinux binutils gcc gcc-c++ glibc-devel glibc-devel.i686 glibc-static glibc-static.i686 libstdc++ libstdc++.i686 libstdc++-devel.i686 make wget doxygen graphviz ctorrent samba unzip debootstrap schroot squashfs-tools )
+ DEPENDENCIES=( subversion httpd mod_ssl php php-ldap mysql-server mysql-devel mysql-devel.i686 php-mysql dhcp tftp-server tftp syslinux xinetd binutils gcc gcc-c++ glibc-devel glibc-devel.i686 glibc-static glibc-static.i686 libstdc++ libstdc++.i686 libstdc++-devel.i686 make wget doxygen graphviz ctorrent samba rsync unzip debootstrap schroot squashfs-tools python-crypto )
INSTALLEXTRADEPS=( 'rpm -Uv ftp://ftp.altlinux.org/pub/distributions/ALTLinux/5.1/branch/files/i586/RPMS/netpipes-4.2-alt1.i586.rpm'
- 'pushd /tmp; wget http://download2.bittornado.com/download/BitTornado-0.3.18.tar.gz; tar xvzf BitTornado-0.3.18.tar.gz; cd BitTornado-CVS; python setup.py install; ln -s btlaunchmany.py /usr/bin/btlaunchmany; ln -s bttrack.py /usr/bin/bttrack; popd' )
- UPDATEPKGLIST='test rpm -q --quiet epel-release || echo -e "[epel]\nname=EPEL temporal\nmirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-\$releasever&arch=\$basearch\nenabled=1\ngpgcheck=0" >/etc/yum.repos.d/epel.repo'
+ 'pushd /tmp; wget http://download.bittornado.com/download/BitTornado-0.3.18.tar.gz; tar xvzf BitTornado-0.3.18.tar.gz; cd BitTornado-CVS; python setup.py install; ln -fs btlaunchmany.py /usr/bin/btlaunchmany; ln -fs bttrack.py /usr/bin/bttrack; popd' )
+ if [ "$OSDISTRIB" == "CentOS" ]; then
+ UPDATEPKGLIST='test rpm -q --quiet epel-release || echo -e "[epel]\nname=EPEL temporal\nmirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-\$releasever&arch=\$basearch\nenabled=1\ngpgcheck=0" >/etc/yum.repos.d/epel.repo'
+ fi
INSTALLPKG="yum install -y"
CHECKPKG="rpm -q --quiet \$package"
- STARTSERVICE="eval service \$service start"
- STOPSERVICE="eval service \$service stop"
- ENABLESERVICE="eval chkconfig \$service on"
- DISABLESERVICE="eval chkconfig \$service off"
+ SYSTEMD=$(which systemctl 2>/dev/null)
+ if [ -n "$SYSTEMD" ]; then
+ STARTSERVICE="eval systemctl start \$service.service"
+ STOPSERVICE="eval systemctl stop \$service.service"
+ ENABLESERVICE="eval systemctl enable \$service.service"
+ DISABLESERVICE="eval systemctl disable \$service.service"
+ else
+ STARTSERVICE="eval service \$service start"
+ STOPSERVICE="eval service \$service stop"
+ ENABLESERVICE="eval chkconfig \$service on"
+ DISABLESERVICE="eval chkconfig \$service off"
+ fi
APACHESERV=httpd
APACHECFGDIR=/etc/httpd/conf.d
APACHEOGSITE=opengnsys.conf
@@ -133,9 +209,17 @@ case "$OSDISTRIB" in
APACHEGROUP="apache"
DHCPSERV=dhcpd
DHCPCFGDIR=/etc/dhcp
+ if firewall-cmd --state &>/dev/null; then
+ FIREWALLSERV=firewalld
+ else
+ FIREWALLSERV=iptables
+ fi
INETDSERV=xinetd
- IPTABLESSERV=iptables
+ INETDCFGDIR=/etc/xinetd.d
MYSQLSERV=mysqld
+ MARIADBSERV=mariadb
+ RSYNCSERV=rsync
+ RSYNCCFGDIR=/etc
SAMBASERV=smb
SAMBACFGDIR=/etc/samba
SYSLINUXDIR=/usr/share/syslinux
@@ -147,14 +231,27 @@ case "$OSDISTRIB" in
*) echo "ERROR: Distribution not supported by OpenGnSys."
exit 1 ;;
esac
+
+# Fichero de credenciales de acceso a MySQL.
+TMPMYCNF=/tmp/.my.cnf.$$
}
+
# Modificar variables de configuración tras instalar paquetes del sistema.
function autoConfigurePost()
{
-[ -e /etc/init.d/$SAMBASERV ] || SAMBASERV=samba # Debian 6
-[ -e $TFTPCFGDIR ] || TFTPCFGDIR=/srv/tftp # Debian 6
-[ -f /selinux/enforce ] && echo 0 > /selinux/enforce # SELinux permisivo
+local f
+
+# Configuraciones específicas para Samba y TFTP en Debian 6.
+[ -z "$SYSTEMD" -a ! -e /etc/init.d/$SAMBASERV ] && SAMBASERV=samba
+[ ! -e $TFTPCFGDIR ] && TFTPCFGDIR=/srv/tftp
+
+# Configuraciones específicas para SELinux permisivo en distintas versiones.
+[ -f /selinux/enforce ] && echo 0 > /selinux/enforce
+for f in /etc/sysconfig/selinux /etc/selinux/config; do
+ [ -f $f ] && perl -pi -e 's/SELINUX=enforcing/SELINUX=permissive/g' $f
+done
+selinuxenabled 2>/dev/null && setenforce 0 2>/dev/null
}
@@ -181,8 +278,12 @@ case "$OSDISTRIB" in
fi
;;
CentOS) # Postconfiguación personalizada para CentOS.
- # Incluir repositorio de paquetes EPEL.
- DEPENDENCIES=( ${DEPENDENCIES[@]} epel-release )
+ # Incluir repositorio de paquetes EPEL y paquetes específicos.
+ DEPENDENCIES=( ${DEPENDENCIES[@]} epel-release procps )
+ ;;
+ Fedora) # Postconfiguación personalizada para Fedora.
+ # Incluir paquetes específicos.
+ DEPENDENCIES=( ${DEPENDENCIES[@]} libstdc++-static.i686 btrfs-progs procps-ng )
;;
esac
}
@@ -433,9 +534,20 @@ function mysqlTestConnection()
exit 1
fi
- local root_password="${1}"
+ local root_password="$1"
echoAndLog "${FUNCNAME}(): checking connection to mysql..."
- echo "" | mysql -uroot -p"${root_password}"
+ # Componer fichero con credenciales de conexión a MySQL.
+ touch $TMPMYCNF
+ chmod 600 $TMPMYCNF
+ cat << EOT > $TMPMYCNF
+[client]
+user=root
+password=$root_password
+EOT
+ # Borrar el fichero temporal si termina el proceso de instalación.
+ trap "rm -f $TMPMYCNF" 0 1 2 3 6 9 15
+ # Comprobar conexión a MySQL.
+ echo "" | mysql --defaults-extra-file=$TMPMYCNF
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): connection to mysql failed, check root password and if daemon is running!"
return 1
@@ -448,15 +560,14 @@ function mysqlTestConnection()
# comprueba si la base de datos existe
function mysqlDbExists()
{
- if [ $# -ne 2 ]; then
+ if [ $# -ne 1 ]; then
errorAndLog "${FUNCNAME}(): invalid number of parameters"
exit 1
fi
- local root_password="${1}"
- local database=$2
+ local database="$1"
echoAndLog "${FUNCNAME}(): checking if $database exists..."
- echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$"
+ echo "show databases" | mysql --defaults-extra-file=$TMPMYCNF | grep "^${database}$"
if [ $? -ne 0 ]; then
echoAndLog "${FUNCNAME}():database $database doesn't exists"
return 1
@@ -468,15 +579,14 @@ function mysqlDbExists()
function mysqlCheckDbIsEmpty()
{
- if [ $# -ne 2 ]; then
+ if [ $# -ne 1 ]; then
errorAndLog "${FUNCNAME}(): invalid number of parameters"
exit 1
fi
- local root_password="${1}"
- local database=$2
+ local database="$1"
echoAndLog "${FUNCNAME}(): checking if $database is empty..."
- num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l`
+ num_tablas=`echo "show tables" | mysql --defaults-extra-file=$TMPMYCNF "${database}" | wc -l`
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error executing query, check database and root password"
exit 1
@@ -495,14 +605,13 @@ function mysqlCheckDbIsEmpty()
function mysqlImportSqlFileToDb()
{
- if [ $# -ne 3 ]; then
+ if [ $# -ne 2 ]; then
errorAndLog "${FNCNAME}(): invalid number of parameters"
exit 1
fi
- local root_password="$1"
- local database="$2"
- local sqlfile="$3"
+ local database="$1"
+ local sqlfile="$2"
local tmpfile=$(mktemp)
local i=0
local dev=""
@@ -524,7 +633,7 @@ function mysqlImportSqlFileToDb()
fi
let i++
done
- mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $tmpfile
+ mysql --defaults-extra-file=$TMPMYCNF --default-character-set=utf8 "${database}" < $tmpfile
status=$?
rm -f $tmpfile
if [ $status -ne 0 ]; then
@@ -538,16 +647,15 @@ function mysqlImportSqlFileToDb()
# Crea la base de datos
function mysqlCreateDb()
{
- if [ $# -ne 2 ]; then
+ if [ $# -ne 1 ]; then
errorAndLog "${FUNCNAME}(): invalid number of parameters"
exit 1
fi
- local root_password="${1}"
- local database=$2
+ local database="$1"
echoAndLog "${FUNCNAME}(): creating database..."
- mysqladmin -u root --password="${root_password}" create $database
+ mysqladmin --defaults-extra-file=$TMPMYCNF create $database
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error while creating database $database"
return 1
@@ -559,16 +667,15 @@ function mysqlCreateDb()
function mysqlCheckUserExists()
{
- if [ $# -ne 2 ]; then
+ if [ $# -ne 1 ]; then
errorAndLog "${FUNCNAME}(): invalid number of parameters"
exit 1
fi
- local root_password="${1}"
- local userdb=$2
+ local userdb="$1"
echoAndLog "${FUNCNAME}(): checking if $userdb exists..."
- echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user
+ echo "select user from user where user='${userdb}'\\G" |mysql --defaults-extra-file=$TMPMYCNF mysql | grep user
if [ $? -ne 0 ]; then
echoAndLog "${FUNCNAME}(): user doesn't exists"
return 1
@@ -582,15 +689,14 @@ function mysqlCheckUserExists()
# Crea un usuario administrativo para la base de datos
function mysqlCreateAdminUserToDb()
{
- if [ $# -ne 4 ]; then
+ if [ $# -ne 3 ]; then
errorAndLog "${FUNCNAME}(): invalid number of parameters"
exit 1
fi
- local root_password=$1
- local database=$2
- local userdb=$3
- local passdb=$4
+ local database="$1"
+ local userdb="$2"
+ local passdb="$3"
echoAndLog "${FUNCNAME}(): creating admin user ${userdb} to database ${database}"
@@ -599,7 +705,7 @@ GRANT USAGE ON *.* TO '${userdb}'@'localhost' IDENTIFIED BY '${passdb}' ;
GRANT ALL PRIVILEGES ON ${database}.* TO '${userdb}'@'localhost' WITH GRANT OPTION ;
FLUSH PRIVILEGES ;
EOF
- mysql -u root --password=${root_password} < $WORKDIR/create_${database}.sql
+ mysql --defaults-extra-file=$TMPMYCNF < $WORKDIR/create_${database}.sql
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error while creating user in mysql"
rm -f $WORKDIR/create_${database}.sql
@@ -644,15 +750,22 @@ function svnExportCode()
# Comprobar si existe conexión.
function checkNetworkConnection()
{
- echoAndLog "${FUNCNAME}(): Disabling IPTables."
- if [ -n "$IPTABLESSERV" ]; then
- service=$IPTABLESSERV
+ echoAndLog "${FUNCNAME}(): Disabling Firewall: $FIREWALLSERV."
+ if [ -n "$FIREWALLSERV" ]; then
+ service=$FIREWALLSERV
$STOPSERVICE; $DISABLESERVICE
fi
echoAndLog "${FUNCNAME}(): Checking OpenGnSys server conectivity."
OPENGNSYS_SERVER=${OPENGNSYS_SERVER:-"www.opengnsys.es"}
- wget --spider -q $OPENGNSYS_SERVER
+ if which wget &>/dev/null; then
+ wget --spider -q $OPENGNSYS_SERVER
+ elif which curl &>/dev/null; then
+ curl --connect-timeout 10 -s $OPENGNSYS_SERVER -o /dev/null
+ else
+ echoAndLog "${FUNCNAME}(): Cannot execute \"wget\" nor \"curl\"."
+ return 1
+ fi
}
# Obtener los parámetros de red de la interfaz por defecto.
@@ -681,7 +794,9 @@ function getNetworkSettings()
for dev in ${DEVICE[*]}; do
SERVERIP[i]=$(ip -o addr show dev $dev | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
if [ -n "${SERVERIP[i]}" ]; then
- NETMASK[i]=$(LANG=C ifconfig $dev | awk '/Mask/ {sub(/.*:/,"",$4); print $4}')
+ NETMASK[i]=$(LANG=C ifconfig $dev | \
+ awk '/Mask/ {sub(/.*:/,"",$4); print $4}
+ /netmask/ {print $4}')
NETBROAD[i]=$(ip -o addr show dev $dev | awk '$3~/inet$/ {print ($6)}')
NETIP[i]=$(netstat -nr | awk -v d="$dev" '$1!~/0\.0\.0\.0/&&$8==d {if (n=="") n=$1} END {print n}')
ROUTERIP[i]=$(netstat -nr | awk -v d="$dev" '$1~/0\.0\.0\.0/&&$8==d {print $2}')
@@ -717,8 +832,12 @@ function tftpConfigure()
echoAndLog "${FUNCNAME}(): Configuring TFTP service."
# Habilitar TFTP y reiniciar Inetd.
if [ -n "$TFTPSERV" ]; then
- service=$TFTPSERV
- $ENABLESERVICE
+ if [ -f $INETDCFGDIR/$TFTPSERV ]; then
+ perl -pi -e 's/disable.*/disable = no/' $INETDCFGDIR/$TFTPSERV
+ else
+ service=$TFTPSERV
+ $ENABLESERVICE
+ fi
fi
service=$INETDSERV
$ENABLESERVICE; $STARTSERVICE
@@ -886,6 +1005,57 @@ function smbConfigure()
########################################################################
+## Configuracion servicio Rsync
+########################################################################
+
+# Configurar servicio Rsync.
+function rsyncConfigure()
+{
+ echoAndLog "${FUNCNAME}(): Configuring Rsync service."
+
+ backupFile $RSYNCCFGDIR/rsyncd.conf
+
+ # Configurar acceso a Rsync.
+ sed -e "s/CLIENTUSER/$OPENGNSYS_CLIENT_USER/g" \
+ $WORKDIR/opengnsys/repoman/etc/rsyncd.conf.tmpl > $RSYNCCFGDIR/rsyncd.conf
+ sed -e "s/CLIENTUSER/$OPENGNSYS_CLIENT_USER/g" \
+ -e "s/CLIENTPASSWORD/$OPENGNSYS_CLIENT_PASSWD/g" \
+ $WORKDIR/opengnsys/repoman/etc/rsyncd.secrets.tmpl > $RSYNCCFGDIR/rsyncd.secrets
+ chown root.root $RSYNCCFGDIR/rsyncd.secrets
+ chmod 600 $RSYNCCFGDIR/rsyncd.secrets
+
+ # Habilitar Rsync y reiniciar Inetd.
+ if [ -n "$RSYNCSERV" ]; then
+ if [ -f /etc/default/rsync ]; then
+ perl -pi -e 's/RSYNC_ENABLE=.*/RSYNC_ENABLE=inetd/' /etc/default/rsync
+ fi
+ if [ -f $INETDCFGDIR/rsync ]; then
+ perl -pi -e 's/disable.*/disable = no/' $INETDCFGDIR/rsync
+ else
+ cat << EOT > $INETDCFGDIR/rsync
+service rsync
+{
+ disable = no
+ socket_type = stream
+ wait = no
+ user = root
+ server = $(which rsync)
+ server_args = --daemon
+ log_on_failure += USERID
+ flags = IPv6
+}
+EOT
+ fi
+ service=$RSYNCSERV $ENABLESERVICE
+ service=$INETDSERV $STARTSERVICE
+ fi
+
+ echoAndLog "${FUNCNAME}(): Added Rsync configuration."
+ return 0
+}
+
+
+########################################################################
## Configuracion servicio DHCP
########################################################################
@@ -931,8 +1101,11 @@ function dhcpConfigure()
# Copiar ficheros del OpenGnSys Web Console.
function installWebFiles()
{
+ local COMPATDIR f
+
echoAndLog "${FUNCNAME}(): Installing web files..."
- cp -a $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www #*/ comentario para doxigen
+ # Copiar ficheros.
+ cp -a $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www #*/ comentario para Doxygen.
if [ $? != 0 ]; then
errorAndLog "${FUNCNAME}(): Error copying web files."
exit 1
@@ -940,8 +1113,16 @@ function installWebFiles()
find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null
# Descomprimir XAJAX.
unzip -o $WORKDIR/opengnsys/admin/xajax_0.5_standard.zip -d $INSTALL_TARGET/www/xajax
+ # Compatibilidad con dispositivos móviles.
+ COMPATDIR="$INSTALL_TARGET/www/principal"
+ for f in acciones administracion aula aulas hardwares imagenes menus repositorios softwares; do
+ sed 's/clickcontextualnodo/clicksupnodo/g' $COMPATDIR/$f.php > $COMPATDIR/$f.device.php
+ done
+ cp -a $COMPATDIR/imagenes.device.php $COMPATDIR/imagenes.device4.php
# Cambiar permisos para ficheros especiales.
chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/images/{fotos,iconos}
+ chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/tmp/
+
echoAndLog "${FUNCNAME}(): Web files installed successfully."
}
@@ -953,8 +1134,8 @@ function installWebConsoleApacheConf()
exit 1
fi
- local path_opengnsys_base=$1
- local path_apache2_confd=$2
+ local path_opengnsys_base="$1"
+ local path_apache2_confd="$2"
local CONSOLEDIR=${path_opengnsys_base}/www
if [ ! -d $path_apache2_confd ]; then
@@ -972,10 +1153,15 @@ function installWebConsoleApacheConf()
$APACHEMAKECERT
# Genera configuración de consola web a partir del fichero plantilla.
- sed -e "s/CONSOLEDIR/${CONSOLEDIR//\//\\/}/g" \
- $WORKDIR/opengnsys/server/etc/apache.conf.tmpl > $path_opengnsys_base/etc/apache.conf
-
- ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/$APACHESITESDIR/$APACHEOGSITE
+ if [ -n "$(apachectl -v | grep "2\.[0-2]")" ]; then
+ # Configuración para versiones anteriores de Apache.
+ sed -e "s/CONSOLEDIR/${CONSOLEDIR//\//\\/}/g" \
+ $WORKDIR/opengnsys/server/etc/apache-prev2.4.conf.tmpl > $path_apache2_confd/$APACHESITESDIR/${APACHEOGSITE}
+ else
+ # Configuración específica a partir de Apache 2.4
+ sed -e "s/CONSOLEDIR/${CONSOLEDIR//\//\\/}/g" \
+ $WORKDIR/opengnsys/server/etc/apache.conf.tmpl > $path_apache2_confd/$APACHESITESDIR/${APACHEOGSITE}.conf
+ fi
$APACHEENABLEOG
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation"
@@ -1058,6 +1244,11 @@ function createDirs()
return 1
fi
+ # Mover el fichero de registro de instalación al directorio de logs.
+ echoAndLog "${FUNCNAME}(): moving installation log file"
+ mv $LOG_FILE $OGLOGFILE && LOG_FILE=$OGLOGFILE
+ chmod 600 $LOG_FILE
+
echoAndLog "${FUNCNAME}(): directory paths created"
return 0
}
@@ -1075,6 +1266,8 @@ function copyServerFiles ()
local SOURCES=( server/tftpboot \
server/bin \
repoman/bin \
+ admin/Sources/Services/ogAdmServerAux
+ admin/Sources/Services/ogAdmRepoAux
installer/opengnsys_uninstall.sh \
installer/opengnsys_update.sh \
installer/install_ticket_wolunicast.sh \
@@ -1082,6 +1275,8 @@ function copyServerFiles ()
local TARGETS=( tftpboot \
bin \
bin \
+ sbin \
+ sbin \
lib \
lib \
lib \
@@ -1199,7 +1394,7 @@ function copyClientFiles()
echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files."
mkdir -p $INSTALL_TARGET/client/lib/engine/bin
- cp -a $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin
+ cp -a $WORKDIR/opengnsys/client/engine/*.lib* $INSTALL_TARGET/client/lib/engine/bin
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error while copying engine files"
errstatus=1
@@ -1215,11 +1410,12 @@ function copyClientFiles()
}
-# Crear cliente OpenGnSys 1.0.2
+# Crear cliente OpenGnSys 1.0.2 y posteriores.
function clientCreate()
{
local DOWNLOADURL="http://$OPENGNSYS_SERVER/downloads"
local FILENAME=ogLive-precise-3.2.0-23-generic-r3257.iso # 1.0.4-rc2
+ #local FILENAME=ogLive-raring-3.8.0-22-generic-r3836.iso # 1.0.5-rc3
local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME
local TMPDIR=/tmp/${FILENAME%.iso}
@@ -1269,13 +1465,13 @@ function openGnsysConfigure()
local CONSOLEURL
echoAndLog "${FUNCNAME}(): Copying init files."
- cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys
- cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.default /etc/default/opengnsys
- cp -p $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepoAux $INSTALL_TARGET/sbin
+ cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys
+ cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.default /etc/default/opengnsys
echoAndLog "${FUNCNAME}(): Creating cron files."
echo "* * * * * root [ -x $INSTALL_TARGET/bin/opengnsys.cron ] && $INSTALL_TARGET/bin/opengnsys.cron" > /etc/cron.d/opengnsys
echo "* * * * * root [ -x $INSTALL_TARGET/bin/torrent-creator ] && $INSTALL_TARGET/bin/torrent-creator" > /etc/cron.d/torrentcreator
echo "5 * * * * root [ -x $INSTALL_TARGET/bin/torrent-tracker ] && $INSTALL_TARGET/bin/torrent-tracker" > /etc/cron.d/torrenttracker
+ echo "* * * * * root [ -x $INSTALL_TARGET/bin/deletepreimage ] && $INSTALL_TARGET/bin/deletepreimage" > /etc/cron.d/imagedelete
echoAndLog "${FUNCNAME}(): Creating logrotate configuration file."
sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \
@@ -1345,17 +1541,19 @@ function installationSummary()
echo "=============================="
echoAndLog "Project version: $(cat $VERSIONFILE 2>/dev/null)"
echoAndLog "Installation directory: $INSTALL_TARGET"
+ echoAndLog "Installation log file: $LOG_FILE"
echoAndLog "Repository directory: $INSTALL_TARGET/images"
echoAndLog "DHCP configuration directory: $DHCPCFGDIR"
echoAndLog "TFTP configuration directory: $TFTPCFGDIR"
echoAndLog "Samba configuration directory: $SAMBACFGDIR"
echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL"
- echoAndLog "Web Console admin user: $OPENGNSYS_DB_USER"
- echoAndLog "Web Console admin password: $OPENGNSYS_DB_PASSWD"
+ echoAndLog "Web Console access data: specified in installer script"
echo
echoAndLog "Post-Installation Instructions:"
echo "==============================="
- echoAndLog "Change IPTables and SELinux system configuration, if needed."
+ echoAndLog "Firewall service has been disabled and SELinux mode set to"
+ echoAndLog " permissive during OpenGnSys installation. Please check"
+ echoAndLog " $FIREWALLSERV and SELinux configuration, if needed."
echoAndLog "Review or edit all configuration files."
echoAndLog "Insert DHCP configuration data and restart service."
echoAndLog "Optional: Log-in as Web Console admin user."
@@ -1450,17 +1648,20 @@ if [ $? -ne 0 ]; then
exit 1
fi
-# Configurando tftp
+# Configuración de TFTP.
tftpConfigure
-# Configuración Samba
+# Configuración de Samba.
smbConfigure
if [ $? -ne 0 ]; then
errorAndLog "Error while configuring Samba server!"
exit 1
fi
-# Configuración ejemplo DHCP
+# Configuración de Rsync.
+rsyncConfigure
+
+# Configuración ejemplo DHCP.
dhcpConfigure
if [ $? -ne 0 ]; then
errorAndLog "Error while copying your dhcp server files!"
@@ -1474,25 +1675,34 @@ if [ $? -ne 0 ]; then
exit 1
fi
-# Instalar Base de datos de OpenGnSys Admin.
+# Instalar base de datos de OpenGnSys Admin.
isInArray notinstalled "mysql-server"
if [ $? -eq 0 ]; then
+ # Habilitar gestor de base de datos (MySQL, si falla, MariaDB).
service=$MYSQLSERV
- $ENABLESERVICE; $STARTSERVICE
- mysqlSetRootPassword ${MYSQL_ROOT_PASSWORD}
+ $ENABLESERVICE
+ if [ $? != 0 ]; then
+ service=$MARIADBSERV
+ $ENABLESERVICE
+ fi
+ # Activar gestor de base de datos.
+ $STARTSERVICE
+ # Asignar clave del usuario "root".
+ mysqlSetRootPassword "${MYSQL_ROOT_PASSWORD}"
else
+ # Si ya está instalado el gestor de bases de datos, obtener clave de "root",
mysqlGetRootPassword
fi
-mysqlTestConnection ${MYSQL_ROOT_PASSWORD}
+mysqlTestConnection "${MYSQL_ROOT_PASSWORD}"
if [ $? -ne 0 ]; then
errorAndLog "Error while connection to mysql"
exit 1
fi
-mysqlDbExists ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE}
+mysqlDbExists ${OPENGNSYS_DATABASE}
if [ $? -ne 0 ]; then
echoAndLog "Creating Web Console database"
- mysqlCreateDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE}
+ mysqlCreateDb ${OPENGNSYS_DATABASE}
if [ $? -ne 0 ]; then
errorAndLog "Error while creating Web Console database"
exit 1
@@ -1501,10 +1711,10 @@ else
echoAndLog "Web Console database exists, ommiting creation"
fi
-mysqlCheckUserExists ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DB_USER}
+mysqlCheckUserExists ${OPENGNSYS_DB_USER}
if [ $? -ne 0 ]; then
echoAndLog "Creating user in database"
- mysqlCreateAdminUserToDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE} ${OPENGNSYS_DB_USER} "${OPENGNSYS_DB_PASSWD}"
+ mysqlCreateAdminUserToDb ${OPENGNSYS_DATABASE} ${OPENGNSYS_DB_USER} "${OPENGNSYS_DB_PASSWD}"
if [ $? -ne 0 ]; then
errorAndLog "Error while creating database user"
exit 1
@@ -1512,11 +1722,11 @@ if [ $? -ne 0 ]; then
fi
-mysqlCheckDbIsEmpty ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE}
+mysqlCheckDbIsEmpty ${OPENGNSYS_DATABASE}
if [ $? -eq 0 ]; then
echoAndLog "Creating tables..."
if [ -f $WORKDIR/$OPENGNSYS_DB_CREATION_FILE ]; then
- mysqlImportSqlFileToDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_CREATION_FILE
+ mysqlImportSqlFileToDb ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_CREATION_FILE
else
errorAndLog "Unable to locate $WORKDIR/$OPENGNSYS_DB_CREATION_FILE!!"
exit 1
@@ -1528,11 +1738,13 @@ else
OPENGNSYS_DB_UPDATE_FILE="opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-$REPOVERSION.sql"
if [ -f $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE ]; then
echoAndLog "Updating tables from version $INSTVERSION to $REPOVERSION"
- mysqlImportSqlFileToDb ${MYSQL_ROOT_PASSWORD} ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE
+ mysqlImportSqlFileToDb ${OPENGNSYS_DATABASE} $WORKDIR/$OPENGNSYS_DB_UPDATE_FILE
else
echoAndLog "Database unchanged."
fi
fi
+# Eliminar fichero temporal con credenciales de acceso a MySQL.
+rm -f $TMPMYCNF
# copiando paqinas web
installWebFiles
@@ -1548,7 +1760,6 @@ fi
popd
-
# Crear la estructura de los accesos al servidor desde el cliente (shared)
copyClientFiles
if [ $? -ne 0 ]; then
diff --git a/installer/opengnsys_makecompress.sh b/installer/opengnsys_makecompress.sh
index 2587343a..99156336 100755
--- a/installer/opengnsys_makecompress.sh
+++ b/installer/opengnsys_makecompress.sh
@@ -17,11 +17,20 @@ SVNREV=$(LANG=C svn info $SVNURL | awk '/Last Changed Rev:/ {print "r"$4}')
cd /tmp
rm -fr opengnsys
svn export $SVNURL opengnsys || exit 1
+
+# Asisgnar propietario de los ficheros descargados.
+chown -R root.root opengnsys
+WARNING=$?
+
# 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
+
+# Revisar salida.
+[ $WARNING != 0 ] && echo "*** WARNING: cannot change owner of files to \"root\" user before compressing."
ls -lh $(readlink -e opengnsys-$VERSION.tar.gz)
diff --git a/installer/opengnsys_uninstall.sh b/installer/opengnsys_uninstall.sh
index 2edb6c22..8c206db1 100755
--- a/installer/opengnsys_uninstall.sh
+++ b/installer/opengnsys_uninstall.sh
@@ -15,21 +15,25 @@
#@version 1.0.4 - Compatibilidad con otras distribuciones y auto configuración de acceso a BD
#@author Ramón Gómez - ETSII Univ. Sevilla
#@date 2012/03/28
+#@version 1.0.5 - Usar las mismas variables que el script de instalación.
+#@author Ramón Gómez - ETSII Univ. Sevilla
+#@date 2013/01/09
#### AVISO: Editar configuración de acceso.
#### WARNING: Edit access configuration
-MYSQLROOT="passwordroot" # Clave de root de MySQL
-DATABASE="ogAdmBD" # Base de datos de administración
-DBUSER="usuog" # Usuario de acceso a la base de datos
+MYSQL_ROOT_PASSWORD="passwordroot" # Clave de root de MySQL
+OPENGNSYS_DATABASE="ogAdmBD" # Base de datos de administración
+OPENGNSYS_DB_USER="usuog" # Usuario de acceso a la base de datos
#### AVISO: NO EDITAR variables de configuración.
#### WARNING: DO NOT EDIT configuration variables.
-OPENGNSYS="/opt/opengnsys" # Directorio de OpenGnSys
-OGIMG="images" # Directorio de imágenes del repositorio
-CLIENTUSER="opengnsys" # Usuario Samba
-OLDDATABASE="ogBDAdmin" # Antigua base de datos
+OPENGNSYS="/opt/opengnsys" # Directorio de OpenGnSys
+OGIMG="images" # Directorio de imágenes del repositorio
+OPENGNSYS_CLIENT_USER="opengnsys" # Usuario Samba
+OPENGNSYS_OLDDATABASE="ogBDAdmin" # Antigua base de datos
+MYCNF=/tmp/.my.cnf.$$ # Fichero temporal con credenciales de acceso a la BD.
# Sólo ejecutable por usuario root
@@ -43,33 +47,48 @@ fi
echo "Uninstalling OpenGnSys services."
if [ -x /etc/init.d/opengnsys ]; then
/etc/init.d/opengnsys stop
- if test which update-rc.d 2>/dev/null; then
+ if [ -n "$(which update-rc.d 2>/dev/null)" ]; then
update-rc.d -f opengnsys remove
else
chkconfig --del opengnsys
fi
fi
-# Eliminar bases de datos.
+# Comprobar acceso a la bases de datos.
echo "Erasing OpenGnSys database."
DROP=1
-if ! mysql -u root -p"$MYSQLROOT" <<<"quit" 2>/dev/null; then
+if ! mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then
stty -echo
- read -p "- Please, insert MySQL root password: " MYSQLROOT
+ read -p "- Please, insert MySQL root password: " MYSQL_ROOT_PASSWORD
echo ""
stty echo
- if ! mysql -u root -p"$MYSQLROOT" <<<"quit" 2>/dev/null; then
+ if ! mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then
DROP=0
echo "Warning: database not erased."
fi
fi
if test $DROP; then
- mysql -u root -p"$MYSQLROOT" <<<"DROP DATABASE $OLDDATABASE;" 2>/dev/null
- mysql -u root -p"$MYSQLROOT" <<<"DROP DATABASE $DATABASE;" 2>/dev/null
- mysql -u root -p"$MYSQLROOT" <<<"DROP USER '$DBUSER';" 2>/dev/null
- mysql -u root -p"$MYSQLROOT" <<<"DROP USER '$DBUSER'@'localhost';" 2>/dev/null
+ # Componer fichero temporal con credenciales de conexión a la base de datos.
+ touch $MYCNF
+ chmod 600 $MYCNF
+ cat << EOT > $MYCNF
+[client]
+user=root
+password=$MYSQL_ROOT_PASSWORD
+EOT
+ # Borrar fichero de credenciales si se corta el proceso de acceso a la BD.
+ trap "rm -f $MYCNF" 0 1 2 3 6 9 15
+ # Eliminar bases de datos.
+ mysql --defaults-extra-file=$MYCNF 2> /dev/null << EOT
+DROP DATABASE IF EXISTS $OPENGNSYS_OLDDATABASE;
+DROP DATABASE IF EXISTS $OPENGNSYS_DATABASE;
+DROP USER '$OPENGNSYS_DB_USER';
+DROP USER '$OPENGNSYS_DB_USER'@'localhost';
+EOT
+ # Borrar el fichero temporal de credenciales.
+ rm -f $MYCNF
fi
# Quitar configuración específica de Apache.
-test which a2dissite 2>/dev/null && a2dissite opengnsys
+[ -n "$(which a2dissite 2>/dev/null)" ] && a2dissite opengnsys
rm -f /etc/{apache2/{sites-available,sites-enabled},httpd/conf.d}/opengnsys*
for serv in apache2 httpd; do
[ -x /etc/init.d/$serv ] && /etc/init.d/$serv reload
@@ -90,8 +109,8 @@ for serv in smbd smb ; do
[ -x /etc/init.d/$serv ] && /etc/init.d/$serv reload
done
# Eliminar usuario de OpenGnSys.
-smbpasswd -x $CLIENTUSER
-userdel $CLIENTUSER
+smbpasswd -x $OPENGNSYS_CLIENT_USER
+userdel $OPENGNSYS_CLIENT_USER
# Tareas manuales a realizar después de desinstalar.
echo "Manual tasks:"
echo "- You may stop or uninstall manually all other services"
diff --git a/installer/opengnsys_update.sh b/installer/opengnsys_update.sh
index 55e7dc9e..1dff1528 100755
--- a/installer/opengnsys_update.sh
+++ b/installer/opengnsys_update.sh
@@ -21,6 +21,9 @@
#@version 1.0.4 - Detector de distribución y compatibilidad con CentOS.
#@author Ramón Gómez - ETSII Univ. Sevilla
#@date 2012/05/04
+#@version 1.0.5 - Actualizar BD en la misma versión, compatibilidad con Fedora (systemd) y configuración de Rsync.
+#@author Ramón Gómez - ETSII Univ. Sevilla
+#@date 2014/04/03
#*/
@@ -46,7 +49,7 @@ if [ -r $INSTALL_TARGET/etc/ogAdmServer.cfg ]; then
elif [ -r $INSTALL_TARGET/etc/ogAdmAgent.cfg ]; then
source $INSTALL_TARGET/etc/ogAdmAgent.cfg
fi
-OPENGNSYS_DATABASE=${OPENGNSYS_DATABASE:-"$CATALOG"} # Base datos
+OPENGNSYS_DATABASE=${OPENGNSYS_DATABASE:-"$CATALOG"} # Base de datos
OPENGNSYS_DBUSER=${OPENGNSYS_DBUSER:-"$USUARIO"} # Usuario de acceso
OPENGNSYS_DBPASSWORD=${OPENGNSYS_DBPASSWORD:-"$PASSWORD"} # Clave del usuario
if [ -z "$OPENGNSYS_DATABASE" -o -z "$OPENGNSYS_DBUSER" -o -z "$OPENGNSYS_DBPASSWORD" ]; then
@@ -68,7 +71,9 @@ SVN_URL="http://$OPENGNSYS_SERVER/svn/trunk/"
WORKDIR=/tmp/opengnsys_update
mkdir -p $WORKDIR
-LOG_FILE=/tmp/opengnsys_update.log
+# Registro de incidencias.
+OGLOGFILE=$INSTALL_TARGET/log/${PROGRAMNAME%.sh}.log
+LOG_FILE=/tmp/$(basename $OGLOGFILE)
@@ -81,7 +86,7 @@ LOG_FILE=/tmp/opengnsys_update.log
# - OSDISTRIB - distribución Linux
# - DEPENDENCIES - array de dependencias que deben estar instaladas
# - UPDATEPKGLIST, INSTALLPKGS, CHECKPKG - comandos para gestión de paquetes
-# - APACHECFGDIR, APACHESERV, DHCPSERV - configuración y servicios
+# - APACHECFGDIR, APACHESERV, DHCPSERV, INETDCFGDIR - configuración y servicios
function autoConfigure()
{
local i
@@ -92,19 +97,38 @@ OSDISTRIB=$(lsb_release -is 2>/dev/null)
# Configuración según la distribución de Linux.
case "$OSDISTRIB" in
Ubuntu|Debian|LinuxMint)
- DEPENDENCIES=
+ DEPENDENCIES=( php5-ldap xinetd rsync btrfs-tools procps)
UPDATEPKGLIST="apt-get update"
INSTALLPKGS="apt-get -y install --force-yes"
CHECKPKG="dpkg -s \$package 2>/dev/null | grep -q \"Status: install ok\""
+ if which service &>/dev/null; then
+ STARTSERVICE="eval service \$service restart"
+ STOPSERVICE="eval service \$service stop"
+ else
+ STARTSERVICE="eval /etc/init.d/\$service restart"
+ STOPSERVICE="eval /etc/init.d/\$service stop"
+ fi
+ ENABLESERVICE="eval update-rc.d \$service defaults"
APACHEUSER="www-data"
APACHEGROUP="www-data"
+ INETDCFGDIR=/etc/xinetd.d
;;
Fedora|CentOS)
- DEPENDENCIES=
+ DEPENDENCIES=( php-ldap xinetd rsync btrfs-progs procps-ng )
INSTALLPKGS="yum install -y"
CHECKPKG="rpm -q --quiet \$package"
+ if which systemctl &>/dev/null; then
+ STARTSERVICE="eval systemctl start \$service.service"
+ STOPSERVICE="eval systemctl stop \$service.service"
+ ENABLESERVICE="eval systemctl enable \$service.service"
+ else
+ STARTSERVICE="eval service \$service start"
+ STOPSERVICE="eval service \$service stop"
+ ENABLESERVICE="eval chkconfig \$service on"
+ fi
APACHEUSER="apache"
APACHEGROUP="apache"
+ INETDCFGDIR=/etc/xinetd.d
;;
*) # Otras distribuciones.
;;
@@ -231,6 +255,7 @@ function importSqlFile()
local database="$3"
local sqlfile="$4"
local tmpfile=$(mktemp)
+ local mycnf=/tmp/.my.cnf.$$
local status
if [ ! -r $sqlfile ]; then
@@ -242,9 +267,18 @@ function importSqlFile()
chmod 600 $tmpfile
sed -e "s/SERVERIP/$SERVERIP/g" -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
-e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" $sqlfile > $tmpfile
- mysql -u$dbuser -p"$dbpassword" --default-character-set=utf8 "$database" < $tmpfile
+ # Componer fichero con credenciales de conexión.
+ touch $mycnf
+ chmod 600 $mycnf
+ cat << EOT > $mycnf
+[client]
+user=$dbuser
+password=$dbpassword
+EOT
+ # Ejecutar actualización y borrar fichero de credenciales.
+ mysql --defaults-extra-file=$mycnf --default-character-set=utf8 -D "$database" < $tmpfile
status=$?
- rm -f $tmpfile
+ rm -f $mycnf $tmpfile
if [ $status -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error importing $sqlfile in database $database"
return 1
@@ -352,7 +386,7 @@ function updateClientFiles()
find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null
echoAndLog "${FUNCNAME}(): Updating OpenGnSys Cloning Engine files."
- rsync --exclude .svn -irplt $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin
+ 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"
exit 1
@@ -385,24 +419,76 @@ function apacheConfiguration ()
APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"$APACHEGROUP"}
}
+# Configurar servicio Rsync.
+function rsyncConfigure()
+{
+ local service
+
+ # Configurar acceso a Rsync.
+ if [ ! -f /etc/rsyncd.conf ]; then
+ echoAndLog "${FUNCNAME}(): Configuring Rsync service."
+ NEWFILES="$NEWFILES /etc/rsyncd.conf"
+ sed -e "s/CLIENTUSER/$OPENGNSYS_CLIENTUSER/g" \
+ $WORKDIR/opengnsys/repoman/etc/rsyncd.conf.tmpl > /etc/rsyncd.conf
+ # Habilitar Rsync.
+ if [ -f /etc/default/rsync ]; then
+ perl -pi -e 's/RSYNC_ENABLE=.*/RSYNC_ENABLE=inetd/' /etc/default/rsync
+ fi
+ if [ -f $INETDCFGDIR/rsync ]; then
+ perl -pi -e 's/disable.*/disable = no/' $INETDCFGDIR/rsync
+ else
+ cat << EOT > $INETDCFGDIR/rsync
+service rsync
+{
+ disable = no
+ socket_type = stream
+ wait = no
+ user = root
+ server = $(which rsync)
+ server_args = --daemon
+ log_on_failure += USERID
+ flags = IPv6
+}
+EOT
+ fi
+ # Activar e iniciar Rsync.
+ service="rsync" $ENABLESERVICE
+ service="xinetd"
+ $ENABLESERVICE; $STARTSERVICE
+ fi
+}
+
# Copiar ficheros del OpenGnSys Web Console.
function updateWebFiles()
{
- local ERRCODE
+ local ERRCODE COMPATDIR f
+
echoAndLog "${FUNCNAME}(): Updating web files..."
- backupFile $INSTALL_TARGET/www/controlacceso.php
- mv $INSTALL_TARGET/www $INSTALL_TARGET/WebConsole
+
+ # Copiar los ficheros nuevos conservando el archivo de configuración de acceso.
+ backupFile $INSTALL_TARGET/www/controlacceso.php
+ mv $INSTALL_TARGET/www $INSTALL_TARGET/WebConsole
rsync --exclude .svn -irplt $WORKDIR/opengnsys/admin/WebConsole $INSTALL_TARGET
- ERRCODE=$?
- mv $INSTALL_TARGET/WebConsole $INSTALL_TARGET/www
+ ERRCODE=$?
+ mv $INSTALL_TARGET/WebConsole $INSTALL_TARGET/www
unzip -o $WORKDIR/opengnsys/admin/xajax_0.5_standard.zip -d $INSTALL_TARGET/www/xajax
if [ $ERRCODE != 0 ]; then
errorAndLog "${FUNCNAME}(): Error updating web files."
exit 1
fi
- restoreFile $INSTALL_TARGET/www/controlacceso.php
+ restoreFile $INSTALL_TARGET/www/controlacceso.php
+
+ # Compatibilidad con dispositivos móviles.
+ COMPATDIR="$INSTALL_TARGET/www/principal"
+ for f in acciones administracion aula aulas hardwares imagenes menus repositorios softwares; do
+ sed 's/clickcontextualnodo/clicksupnodo/g' $COMPATDIR/$f.php > $COMPATDIR/$f.device.php
+ done
+ cp -a $COMPATDIR/imagenes.device.php $COMPATDIR/imagenes.device4.php
+
# Cambiar permisos para ficheros especiales.
chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/images/{fotos,iconos}
+ chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/tmp/
+
echoAndLog "${FUNCNAME}(): Web files updated successfully."
}
@@ -410,7 +496,7 @@ function updateWebFiles()
function updateInterfaceAdm()
{
local errcode=0
-
+
# Crear carpeta y copiar Interface
echoAndLog "${FUNCNAME}(): Copying Administration Interface Folder"
mv $INSTALL_TARGET/client/interfaceAdm $INSTALL_TARGET/client/Interface
@@ -483,12 +569,19 @@ function createDirs()
# Establecer los permisos básicos.
echoAndLog "${FUNCNAME}(): setting directory permissions"
chmod -R 775 $INSTALL_TARGET/{log/clients,images,tftpboot/pxelinux.cfg,tftpboot/menu.lst}
+ mkdir -p $INSTALL_TARGET/tftpboot/menu.lst/examples
+ ! [ -f $INSTALL_TARGET/tftpboot/menu.lst/templates/00unknown ] && mv $INSTALL_TARGET/tftpboot/menu.lst/templates/* $INSTALL_TARGET/tftpboot/menu.lst/examples
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
fi
+ # Mover el fichero de registro al directorio de logs.
+ echoAndLog "${FUNCNAME}(): moving update log file"
+ mv $LOG_FILE $OGLOGFILE && LOG_FILE=$OGLOGFILE
+ chmod 600 $LOG_FILE
+
echoAndLog "${FUNCNAME}(): directory paths created"
return 0
}
@@ -499,12 +592,16 @@ function updateServerFiles()
# No copiar ficheros del antiguo cliente Initrd
local SOURCES=( repoman/bin \
server/bin \
+ admin/Sources/Services/ogAdmServerAux \
+ admin/Sources/Services/ogAdmRepoAux \
server/tftpboot \
installer/opengnsys_uninstall.sh \
installer/install_ticket_wolunicast.sh \
doc )
local TARGETS=( bin \
bin \
+ sbin/ogAdmServerAux \
+ sbin/ogAdmRepoAux \
tftpboot \
lib/opengnsys_uninstall.sh \
lib/install_ticket_wolunicast.sh \
@@ -549,6 +646,7 @@ function updateServerFiles()
[ ! -f /etc/cron.d/opengnsys ] && echo "* * * * * root [ -x $INSTALL_TARGET/bin/opengnsys.cron ] && $INSTALL_TARGET/bin/opengnsys.cron" > /etc/cron.d/opengnsys
[ ! -f /etc/cron.d/torrentcreator ] && echo "* * * * * root [ -x $INSTALL_TARGET/bin/torrent-creator ] && $INSTALL_TARGET/bin/torrent-creator" > /etc/cron.d/torrentcreator
[ ! -f /etc/cron.d/torrenttracker ] && echo "5 * * * * root [ -x $INSTALL_TARGET/bin/torrent-tracker ] && $INSTALL_TARGET/bin/torrent-tracker" > /etc/cron.d/torrenttracker
+ [ ! -f /etc/cron.d/imagedelete ] && echo "* * * * * root [ -x $INSTALL_TARGET/bin/deletepreimage ] && $INSTALL_TARGET/bin/deletepreimage" > /etc/cron.d/imagedelete
echoAndLog "${FUNCNAME}(): server files updated successfully."
}
@@ -556,6 +654,27 @@ function updateServerFiles()
### Funciones de compilación de código fuente de servicios
####################################################################
+# Mueve el fichero del nuevo servicio si es distinto al del directorio destino.
+function moveNewService()
+{
+ local service
+
+ # Recibe 2 parámetros: fichero origen y directorio destino.
+ [ $# == 2 ] || return 1
+ [ -f $1 -a -d $2 ] || return 1
+
+ # Comparar los ficheros.
+ if ! diff -q $1 $2/$(basename $1) &>/dev/null; then
+ # Parar los servicios si fuese necesario.
+ [ -z "$NEWSERVICES" ] && service="opengnsys" $STOPSERVICE
+ # Nuevo servicio.
+ NEWSERVICES="$NEWSERVICES $(basename $1)"
+ # Mover el nuevo fichero de servicio
+ mv $1 $2
+ fi
+}
+
+
# Recompilar y actualiza los serivicios y clientes.
function compileServices()
{
@@ -564,7 +683,7 @@ function compileServices()
# Compilar OpenGnSys Server
echoAndLog "${FUNCNAME}(): Recompiling OpenGnSys Admin Server"
pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer
- make && mv ogAdmServer $INSTALL_TARGET/sbin
+ make && moveNewService ogAdmServer $INSTALL_TARGET/sbin
if [ $? -ne 0 ]; then
echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server"
hayErrores=1
@@ -573,7 +692,7 @@ function compileServices()
# Compilar OpenGnSys Repository Manager
echoAndLog "${FUNCNAME}(): Recompiling OpenGnSys Repository Manager"
pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo
- make && mv ogAdmRepo $INSTALL_TARGET/sbin
+ make && moveNewService ogAdmRepo $INSTALL_TARGET/sbin
if [ $? -ne 0 ]; then
echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager"
hayErrores=1
@@ -582,7 +701,7 @@ function compileServices()
# Compilar OpenGnSys Agent
echoAndLog "${FUNCNAME}(): Recompiling OpenGnSys Agent"
pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent
- make && mv ogAdmAgent $INSTALL_TARGET/sbin
+ make && moveNewService ogAdmAgent $INSTALL_TARGET/sbin
if [ $? -ne 0 ]; then
echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Agent"
hayErrores=1
@@ -612,13 +731,16 @@ function updateClient()
{
local DOWNLOADURL="http://$OPENGNSYS_SERVER/downloads"
local FILENAME=ogLive-precise-3.2.0-23-generic-r3257.iso # 1.0.4-rc2
+ #local FILENAME=ogLive-raring-3.8.0-22-generic-r3836.iso # 1.0.5-rc3
local SOURCEFILE=$DOWNLOADURL/$FILENAME
local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME
local SOURCELENGTH
local TARGETLENGTH
local TMPDIR=/tmp/${FILENAME%.iso}
local OGINITRD=$INSTALL_TARGET/tftpboot/ogclient/oginitrd.img
+ local OGVMLINUZ=$INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz
local SAMBAPASS
+ local KERNELVERSION
# Comprobar si debe actualizarse el cliente.
SOURCELENGTH=$(LANG=C wget --spider $SOURCEFILE 2>&1 | awk '/Length:/ {print $2}')
@@ -635,7 +757,7 @@ function updateClient()
if [ -f $OGINITRD ]; then
SAMBAPASS=$(gzip -dc $OGINITRD | \
cpio -i --to-stdout scripts/ogfunctions 2>&1 | \
- grep "^[ ]*OPTIONS=" | \
+ grep "^[ ].*OPTIONS=" | \
sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
fi
# Montar la imagen ISO del ogclient, actualizar ficheros y desmontar.
@@ -661,9 +783,36 @@ function updateClient()
cp -av $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz* $INSTALL_TARGET/tftpboot
cp -av $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img* $INSTALL_TARGET/tftpboot
+ # Obtiene versión del Kernel del cliente (con 2 decimales).
+ KERNELVERSION=$(file -bkr $OGVMLINUZ 2>/dev/null | \
+ awk '/Linux/ { for (i=1; i<=NF; i++)
+ if ($i~/version/) {
+ v=$(i+1);
+ printf ("%d",v);
+ sub (/[0-9]*\./,"",v);
+ printf (".%02d",v)
+ } }')
+ # Actaulizar la base de datos adaptada al Kernel del cliente.
+ OPENGNSYS_DBUPDATEFILE="$WORKDIR/opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-postinst.sql"
+ if [ -f $OPENGNSYS_DBUPDATEFILE ]; then
+ perl -pi -e "s/KERNELVERSION/$KERNELVERSION/g" $OPENGNSYS_DBUPDATEFILE
+ importSqlFile $OPENGNSYS_DBUSER $OPENGNSYS_DBPASSWORD $OPENGNSYS_DATABASE $OPENGNSYS_DBUPDATEFILE
+ fi
+
echoAndLog "${FUNCNAME}(): Client update successfully"
else
- echoAndLog "${FUNCNAME}(): Client is already updated"
+ # Si no existe, crear el fichero de claves de Rsync.
+ if [ ! -f /etc/rsyncd.secrets ]; then
+ echoAndLog "${FUNCNAME}(): Restoring client access key"
+ SAMBAPASS=$(gzip -dc $OGINITRD | \
+ cpio -i --to-stdout scripts/ogfunctions 2>&1 | \
+ grep "^[ ].*OPTIONS=" | \
+ sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
+ echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | \
+ $INSTALL_TARGET/bin/setsmbpass
+ else
+ echoAndLog "${FUNCNAME}(): Client is already updated"
+ fi
fi
}
@@ -672,7 +821,7 @@ function updateSummary()
{
# Actualizar fichero de versión y revisión.
local VERSIONFILE="$INSTALL_TARGET/doc/VERSION.txt"
- local REVISION=$(LANG=C svn info $SVN_URL|awk '/Revision:/ {print "r"$2}')
+ 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
@@ -681,9 +830,20 @@ function updateSummary()
echoAndLog "OpenGnSys Update Summary"
echo "========================"
echoAndLog "Project version: $(cat $VERSIONFILE)"
+ echoAndLog "Update log file: $LOG_FILE"
if [ -n "$NEWFILES" ]; then
echoAndLog "Check the new config files: $(echo $NEWFILES)"
fi
+ if [ -n "$NEWSERVICES" ]; then
+ echoAndLog "New compiled services: $(echo $NEWSERVICES)"
+ # Indicar si se debe reiniciar servicios manualmente o usando el Cron.
+ [ -f /etc/default/opengnsys ] && source /etc/default/opengnsys
+ if [ "$RUN_CRONJOB" == "no" ]; then
+ echoAndLog " WARNING: you must restart OpenGnSys services manually."
+ else
+ echoAndLog " New OpenGnSys services will be restarted by the cronjob."
+ fi
+ fi
echo
}
@@ -723,7 +883,7 @@ fi
autoConfigure
# Instalar dependencias.
-installDependencies $DEPENDENCIES
+installDependencies ${DEPENDENCIES[*]}
if [ $? -ne 0 ]; then
errorAndLog "Error: you may install all needed dependencies."
exit 1
@@ -750,9 +910,13 @@ fi
# Si existe fichero de actualización de la base de datos; aplicar cambios.
INSTVERSION=$(awk '{print $2}' $INSTALL_TARGET/doc/VERSION.txt)
REPOVERSION=$(awk '{print $2}' $WORKDIR/opengnsys/doc/VERSION.txt)
-OPENGNSYS_DBUPDATEFILE="$WORKDIR/opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-$REPOVERSION.sql"
+if [ "$INSTVERSION" == "$REPOVERSION" ]; then
+ OPENGNSYS_DBUPDATEFILE="$WORKDIR/opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION.sql"
+else
+ OPENGNSYS_DBUPDATEFILE="$WORKDIR/opengnsys/admin/Database/$OPENGNSYS_DATABASE-$INSTVERSION-$REPOVERSION.sql"
+fi
if [ -f $OPENGNSYS_DBUPDATEFILE ]; then
- echoAndLog "Updating tables from version $INSTVERSION to $REPOVERSION"
+ echoAndLog "Updating tables from file: $(basename $OPENGNSYS_DBUPDATEFILE)"
importSqlFile $OPENGNSYS_DBUSER $OPENGNSYS_DBPASSWORD $OPENGNSYS_DATABASE $OPENGNSYS_DBUPDATEFILE
else
echoAndLog "Database unchanged."
@@ -765,6 +929,9 @@ if [ $? -ne 0 ]; then
exit 1
fi
+# Configurar Rsync.
+rsyncConfigure
+
# Actualizar ficheros del cliente
updateClientFiles
updateInterfaceAdm
diff --git a/repoman/README.es.txt b/repoman/README.es.txt
index cfcf31b4..c71a23d2 100644
--- a/repoman/README.es.txt
+++ b/repoman/README.es.txt
@@ -5,5 +5,6 @@ OpenGnSys Repository Manager RREADME
Este directorio contiene la estructura de datos del repositorio de datos de OpenGnSys.
- bin binarios y scripts de gestión del repositorio.
+- etc ficheros o plantillas de configuración del repositorio.
diff --git a/repoman/bin/deleteimage b/repoman/bin/deleteimage
index c65277a8..3807b841 100755
--- a/repoman/bin/deleteimage
+++ b/repoman/bin/deleteimage
@@ -1,13 +1,17 @@
#!/bin/bash
-# deleteimage [ -d | -r ] str_image
+# deleteimage [ -b | -r | -i ] str_image
#@file deleteimage
#@brief Borra del repositorio los ficheros de una imagen.
-#@param -d Elimina también la copia de seguridad de la imagen (opcional).
+#@param -b Elimina también la copia de seguridad de la imagen (opcional).
#@param -r Recupera la copia de seguridad de la imagen (opcional).
+#@param -i Elimina imagen Incremental o Basica
#@param str_image Nombre canónico de la imagen, sin extensión.
-#@version 1.0.5
-#@date 2013-03-06
-#@author Ramón Gómez, ETSII Universidad de Sevilla
+#@version 1.0 - Versión inicial.
+#@date 2012-10-14
+#@author Ramón Gómez, ETSII Univ. Sevilla
+#@version 1.2 - Eliminar imagen incremental.
+#@date 2013-07-17
+#@author Alberto García, Univ. Málaga
PROG=$(basename $0)
@@ -15,39 +19,40 @@ OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
OGIMG=$OPENGNSYS/images
IMGEXT="img"
BAKEXT="ant"
-
+DIFFEXT="diff"
+
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
cat << EOT
$PROG: Borra los ficheros de una imagen del repositorio.
-Formato: $PROG [ -d | -r ] str_image
- -d Elimina también la copia de seguridad de la imagen.
+Formato: $PROG [ -b | -r | -i | -d ] str_image
+ -b Elimina también la copia de seguridad de la imagen.
-r Recupera la copia de seguridad de la imagen.
+ -i Elimina imagen Incremental o Basica
+ -d Elimina Directorios
Ejemplo: $PROG imagen1
EOT
exit 0
fi
+
# Procesar parámetros
-while getopts dr OPTION; do
+while getopts brid OPTION; do
case $OPTION in
- d) DELETEBACKUP=1 ;;
+ b) DELETEBACKUP=1 ;;
r) RECOVERBACKUP=1 ;;
+ i) DELETEINCREMEN=1 ;;
+ d) DELETEDIRECTORIO=1 ;;
*) ERR=1 ;;
esac
shift $((OPTIND-1))
done
-[ -n "$DELETEBACKUP" ] && [ -n "$RECOVERBACKUP" ] && ERR=1
+
+[ -n "$DELETEBACKUP" ] && [ -n "$RECOVERBACKUP" ] && [ -n "$DELETEINCREMEN" ] && [ -n "$DELETEDIRECTORIO" ] && ERR=1
if [ $# != 1 -o -n "$ERR" ]; then
- echo "$PROG Error: Formato: $PROG [ -b | -r ] str_image"
+ echo "$PROG Error: Formato: $PROG [ -b | -r | -i | -d ] str_image"
exit 1
fi
-# Fichero principal de la imagen.
-IMGFILE="$OGIMG/$1.$IMGEXT"
-
-# Eliminar ficheros de la imagen.
-rm -f $IMGFILE && rm -f $IMGFILE.{sum,torrent}
-
# Recuperar copia de seguridad de la imagen.
if [ -n "$RECOVERBACKUP" ]; then
mv -f $IMGFILE.$BAKEXT $IMGFILE && \
@@ -60,3 +65,40 @@ if [ -n "$DELETEBACKUP" ]; then
rm -f $IMGFILE.$BAKEXT && rm -f $IMGFILE.{sum,torrent}.$BAKEXT
fi
+# Borrar directorio de imagen
+IMGFILECA="$OGIMG/$1"
+if [ -n "$DELETEINCREMEN" ];then
+rm -R $IMGFILECA && exit
+fi
+
+# Si el Nombre canonico es un directorio eliminamos
+# o si la opcion es i tambien eliminamos
+IMGFILECA="$OGIMG/$1"
+if [ -n "$DELETEDIRECTORIO" ]; then
+rm -R $IMGFILECA && exit
+
+# Si el Nomobre canonico NO es un directorio
+else
+ # Comprobamos si es un archivo backup .ant
+ NOMBREANT=$(echo $1 | awk -F. '{print $1}')
+ if [ $1 == "$NOMBREANT.$BAKEXT" ]; then
+ IMGFILE="$OGIMG/$NOMBREANT.$IMGEXT.$BAKEXT"
+ # Eliminar fichero de seguridad .img.ant
+ rm -f $IMGFILE
+ else
+ # Comprobamos si es un archivo diferencial .diff
+ NOMBREDIF="$OGIMG/$1.$IMGEXT.$DIFFEXT"
+ if [ -f $NOMBREDIF ]; then
+ IMGFILE="$OGIMG/$1.$IMGEXT.$DIFFEXT"
+ # Eliminar fichero diferencial .diff .torrent .sum
+ rm -f $IMGFILE && rm -f $IMGFILE.{sum,torrent}
+
+ else
+ # Fichero principal de la imagen.
+ IMGFILE="$OGIMG/$1.$IMGEXT"
+ # Eliminar ficheros de la imagen.
+ rm -f $IMGFILE && rm -f $IMGFILE.{sum,torrent}
+ fi
+ fi
+
+fi \ No newline at end of file
diff --git a/repoman/bin/deletepreimage b/repoman/bin/deletepreimage
new file mode 100755
index 00000000..85883aea
--- /dev/null
+++ b/repoman/bin/deletepreimage
@@ -0,0 +1,62 @@
+#!/bin/bash
+# Eliminar las imagenees del repositiro seg�raca de la consola web .img
+#Version 0.3 Ejecuci�n desde cron cada minuto.
+#echo "* * * * * root /opt/opengnsys/bin/image-delete" > /etc/cron.d/imagedelete
+
+# Comprobar si el proceso ya est� en ejecuci�n.on.
+PROG=$(basename $0)
+[ "$(pgrep "$PROG")" != "$$" ] && exit
+
+# Variables.
+OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
+PATH=$PATH:$OPENGNSYS/bin
+OGIMG="$OPENGNSYS/images"
+REPOCFG="$OPENGNSYS/etc/ogAdmRepo.cfg"
+LOGFILE="$OPENGNSYS/log/$PROG.log"
+
+# Error si no est� bien configurado el repositorio de im�genes.nes.
+[ -d $OGIMG -a -f $REPOCFG ] || exit 1
+
+# Procesar ficheros de im�genes.s.
+trap 'echo "`date` : Proceso interrumpido" >> $LOGFILE; exit ' 1 2 3 6 9 15
+
+#TODO en LOCAL: si existe algun fichero *.delete lo movemos al repositorio
+ls /opt/opengnsys/www/tmp/*.delete &>/dev/null || exit
+#[ -f /opt/opengnsys/www/tmp/*.delete ] &&
+mv /opt/opengnsys/www/tmp/*.* /opt/opengnsys/images/
+
+#TODO: iniciar blucle siempre y cuando haya algun delete
+ls /opt/opengnsys/images/*.delete &>/dev/null || exit
+
+for IMG in `ls /opt/opengnsys/images/*.delete`; do
+ ## Obtenemos el nombre de la imagen
+ DELETEIMAGE=$(echo $IMG | awk -F"." '{print $1}' | awk -F"/opt/opengnsys/images/" '{print $2}')
+
+ # Borramos marca .delete para que el proximo cron no trabaje sobre este conjunto.
+ [ -f $IMG ] && rm $IMG
+
+ ## Comprobamos si es un Directorio .delete
+ DELETEdir=$(echo $IMG | awk -F"." '{print $2}') ## .delete
+ DELETEant=$(echo $IMG | awk -F"." '{print $3}') ## .ant
+ DELETEdiff=$(echo $IMG | awk -F"." '{print $3}') ## .diff
+ ## Si NO es ninguno es un img
+
+ ## se llama al escript de borrado de imagen.
+ ## Si es un Directorio Borramos
+ if [[ $DELETEdir == "delete" ]]; then
+ /opt/opengnsys/bin/deleteimage -d $DELETEIMAGE
+
+ # Si es un Imagen Backup Borramos
+ elif [[ $DELETEant == "ant" ]]; then
+ DELETEIMAGE=$DELETEIMAGE".ant"
+ /opt/opengnsys/bin/deleteimage $DELETEIMAGE
+
+ # Si es un Imagen diff Borramos
+ elif [[ $DELETEdiff == "diff" ]]; then
+ /opt/opengnsys/bin/deleteimage $DELETEIMAGE
+
+ # Si no es una de las anteriores lo que queda es img
+ else
+ /opt/opengnsys/bin/deleteimage $DELETEIMAGE
+ fi
+done \ No newline at end of file
diff --git a/repoman/bin/opengnsys.cron b/repoman/bin/opengnsys.cron
index 76236f73..be5a0508 100755
--- a/repoman/bin/opengnsys.cron
+++ b/repoman/bin/opengnsys.cron
@@ -1,20 +1,39 @@
#!/bin/bash
-# Comprobamos si los servicios de opengnsys están levantado y si no es así los iniciamos.
+# opengnsys.cron - Script para comprobar si los servicios de OpenGnSys están levantados
+# e iniciarlos automáticamente.
+# Nota: este script debe ser lanzado por Cron cada minuto.
+
+
# Variables.
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
LOGDIR="$OPENGNSYS/log"
DEFAULTFILE=/etc/default/opengnsys
+typeset -i OGCPU # % uso CPU
# Comprobar servicios que deben estar activos.
[ -f $DEFAULTFILE ] && source $DEFAULTFILE
-# Si un servicio debe estar activo y no se está ejecutando, reiniciar OpenGnSys.
-if [ "$RUN_OGADMSERVER" == "yes" -a $(pgrep ogAdmServer | wc -w) == 0 ]; then
- date +"%d/%m/%Y %T ERROR: El servicio ogAdmServer estaba caido, se reinicia" >> $LOGDIR/ogAdmServer.log
- /etc/init.d/opengnsys restart
+# Salir si no se debe ejecutar la revisión en el cron.
+[ "$RUN_CRONJOB" == "no" ] && exit
+
+# Comprobar si está activo el servidor OpenGnSys.
+if [ "$RUN_OGADMSERVER" == "yes" ]; then
+ # Parar procesos ogAdmServer si consume más de 90% de CPU.
+ OGPID=$(pgrep ogAdmServer)
+ OGCPU=$(top -b -n 1 -p $OGPID 2>/dev/null | awk -v p=$OGPID '$1~p {printf "%d",$9}')
+ if [ $OGCPU -gt 90 ]; then
+ date +"%d/%m/%Y %H:%M AVISO: ogAdmServer (PID=$OGPID) parado, consumiendo $OGCPU % de CPU" >> $LOGDIR/ogAdmServer.log
+ kill -9 $OGPID
+ fi
+ # Reiniciar servicios si proceso ogAdmServer está caído.
+ if ! pgrep ogAdmServer >/dev/null; then
+ date +"%d/%m/%Y %H:%M ERROR: El servicio ogAdmServer estaba caido, se reinicia" >> $LOGDIR/ogAdmServer.log
+ /etc/init.d/opengnsys restart
+ fi
fi
+# Reiniciar servicios si es repositorio y proceso ogAdmRepo está caído.
if [ "$RUN_OGADMREPO" == "yes" -a $(pgrep ogAdmRepo | wc -w) == 0 ]; then
- date +"%d/%m/%Y %T ERROR: El servicio ogAdmRepo estaba caido, se reinicia" >> $LOGDIR/ogAdmRepo.log
+ date +"%d/%m/%Y %H:%M ERROR: El servicio ogAdmRepo estaba caido, se reinicia" >> $LOGDIR/ogAdmRepo.log
/etc/init.d/opengnsys restart
fi
diff --git a/repoman/bin/sendFileMcast b/repoman/bin/sendFileMcast
index ec4d7aa6..ac6446d8 100755
--- a/repoman/bin/sendFileMcast
+++ b/repoman/bin/sendFileMcast
@@ -57,5 +57,5 @@ CERROR="8x8/128"
# Envío de fichero por Multicast.
# Se desabilita el uso de mbuffer: eesta versión del upd-sender no la admite.
#which mbuffer &> /dev/null && MBUFFER="--pipe 'mbuffer -m 20M'"
-$OGBIN/udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG"
+$OGBIN/udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 16 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG"
diff --git a/repoman/bin/torrent-creator b/repoman/bin/torrent-creator
index 61765ed5..e890a958 100755
--- a/repoman/bin/torrent-creator
+++ b/repoman/bin/torrent-creator
@@ -25,7 +25,7 @@ pushd $OGIMG >/dev/null
# Procesar ficheros de imágenes.
trap 'echo "`date` : Proceso interrumpido" >> $LOGFILE; exit ' 1 2 3 6 9 15
-for IMG in *.{img,pgz}; do
+for IMG in *.{img,pgz,diff}; do
# Saltar al siguiente si la imagen está bloqueada o si no existe el fichero.
LOCKFILE="$IMG.lock"
if [ -f "$LOCKFILE" -o ! -f "$IMG" ]; then
@@ -46,13 +46,15 @@ for IMG in *.{img,pgz}; do
rm -f "$TORRENT" "$SUMFILE"
DATASUM=$(tail -c1M "$IMG" | md5sum -b | cut -f1 -d" ")
echo $DATASUM > "$SUMFILE"
- nice -8 ctorrent -t "$IMG" -u $TRACKERURL -s "$TORRENT" -c $DATASUM 2>/dev/null
+ nice -8 ctorrent -t "$IMG" -u $TRACKERURL -s "$TORRENT" -c $DATASUM -l 4194304 2>/dev/null
rm -f "$LOCKFILE"
if [ -f "$TORRENT" ]; then
echo "`date` : Fin creación de fichero $TORRENT" >> $LOGFILE
else
echo "`date` : ERROR en creación de fichero $TORRENT" >> $LOGFILE
fi
+ # Modificación realizada en la corrección temporal de la incidencia #535
+ break
done
popd >/dev/null
diff --git a/repoman/etc/rsyncd.conf.tmpl b/repoman/etc/rsyncd.conf.tmpl
new file mode 100644
index 00000000..303893a1
--- /dev/null
+++ b/repoman/etc/rsyncd.conf.tmpl
@@ -0,0 +1,14 @@
+max connections = 0
+log file = /var/log/rsync.log
+timeout = 300
+
+ [ogimages]
+ comment = Carpeta de imagenes
+ path = /opt/opengnsys/images
+ read only = no
+ list = yes
+ uid = root
+ gid = root
+ auth users = CLIENTUSER
+ secrets file = /etc/rsyncd.secrets
+
diff --git a/repoman/etc/rsyncd.secrets.tmpl b/repoman/etc/rsyncd.secrets.tmpl
new file mode 100644
index 00000000..92a79be6
--- /dev/null
+++ b/repoman/etc/rsyncd.secrets.tmpl
@@ -0,0 +1 @@
+CLIENTUSER:CLIENTPASSWORD
diff --git a/server/INSTALL b/server/INSTALL
deleted file mode 100644
index e69de29b..00000000
--- a/server/INSTALL
+++ /dev/null
diff --git a/server/README.es.txt b/server/README.es.txt
new file mode 100644
index 00000000..47fc9601
--- /dev/null
+++ b/server/README.es.txt
@@ -0,0 +1,11 @@
+OpenGnSys Server Manager RREADME
+===================================
+
+
+Este directorio contiene la estructura de datos del servidor central de OpenGnSys.
+
+- bin binarios y scripts de gestión del servidor.
+- etc ficheros o plantillas de configuración del servidor.
+- tftpboot plantillas de configuración del servicio de arranque remoto.
+
+
diff --git a/server/bin/checkperms b/server/bin/checkperms
new file mode 100755
index 00000000..f2ed84a0
--- /dev/null
+++ b/server/bin/checkperms
@@ -0,0 +1,55 @@
+#!/bin/bash
+# checkperms: Comprueba que los permisos de los ficheros sean correctos.
+# Nota: Las siguientes variables de entorno pueden usarse para retocar los
+# valores por defecto:
+# - OPENGNSYS_USER - usuario de OpenGnSys.
+# - OPENGNSYS_DIR - directorio de instalación.
+# - APACHE_USER - usuario de Apache.
+# - APACHE_GROUP - grupo de Apache.
+# Uso: checkperms
+# variable1=valor1 ... checkperms
+# Autor: Ramon Gomez - Univ. Sevilla, noviembre 2010
+# Fecha: 2012/07/13
+
+
+# Variables.
+OPENGNSYS_USER=${OPENGNSYS_USER:-"opengnsys"} # Usuario del cliente para acceso remoto
+OPENGNSYS_DIR=${OPENGNSYS_DIR:-/opt/opengnsys} # Directorio de instalación de OpenGnSys
+APACHE_USER=${APACHE_USER:-"www-data"} # Usuario de ejecución de Apache
+APACHE_GROUP=${APACHE_GROUP:-"www-data"} # Grupo de ejecución de Apache
+PROG=$(basename $0)
+
+# Control de errores.
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+if [ "$OPENGNSYS_USER" == "root" -o -z "$(getent passwd "$OPENGNSYS_USER" 2>/dev/null)" ]; then
+ echo "$PROG: Error: el usuario de OpenGnSys debe existir y no ser root (OPENGNSYS_USER=\"$OPENGNSYS_USER\")" >&2
+ exit 1
+fi
+if [ ! -d "$OPENGNSYS_DIR" ]; then
+ echo "$PROG: Error: sin acceso al directorio de OpenGnSys (OPENGNSYS_DIR=\"$OPENGNSYS_DIR\")". >&2
+ exit 1
+fi
+if [ -z "$(getent passwd "$APACHE_USER" 2>/dev/null)" -o -z "$(getent group "$APACHE_GROUP" 2>/dev/null)" ]; then
+ echo "$PROG: Error: no se detectan el usuario o el grupo de Apache (APACHE_USER=\"$APACHE_USER\", APACHE_GROUP=\"$APACHE_GROUP\")" >&2
+ exit 1
+fi
+
+chown -R :$OPENGNSYS_USER $OPENGNSYS_DIR/{log/clients,images}
+chmod -R 775 $OPENGNSYS_DIR/{log/clients,images}
+find $OPENGNSYS_DIR/client/{interfaceAdm,scripts} ! -name "*.txt" -exec chmod +x {} \;
+chown $OPENGNSYS_USER:$OPENGNSYS_USER $OPENGNSYS_DIR/client/interfaceAdm/CambiarAcceso
+chmod 700 $OPENGNSYS_DIR/client/interfaceAdm/CambiarAcceso
+chown root:root $OPENGNSYS_DIR/etc/{ogAdmServer,ogAdmAgent}*.cfg
+chmod 600 $OPENGNSYS_DIR/etc/{ogAdmServer,ogAdmAgent}*.cfg
+chown $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/www/controlacceso*.php
+chmod 600 $OPENGNSYS_DIR/www/controlacceso*.php
+chown -R $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/www/images/{fotos,iconos}
+chown -R $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/www/api
+chown -R $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/tftpboot/{menu.lst,pxelinux.cfg}
+chown -R :$OPENGNSYS_USER $OPENGNSYS_DIR/tftpboot/ogclient
+find -L $OPENGNSYS_DIR/tftpboot -type d -exec chmod 755 {} \;
+find -L $OPENGNSYS_DIR/tftpboot -type f -exec chmod 644 {} \;
+
diff --git a/server/bin/clean-mountdirimage b/server/bin/clean-mountdirimage
new file mode 100755
index 00000000..a47861ff
--- /dev/null
+++ b/server/bin/clean-mountdirimage
@@ -0,0 +1,38 @@
+#!/bin/bash
+#/**
+# clean-mountdirimage
+#@brief Borra los directorios de montaje de las imagenes que no se estén usando.
+#@param No
+#@return Información sobre los directorios borrardos o no.
+#@exception # Usuario distinto de root.
+#@version 1.0
+#@author Irina Gomez
+#@date 2014-01-20
+#*/ ##
+
+BASEDIR="/opt/opengnsys/images/mount"
+DIR=$(ls $BASEDIR)
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+# Desmontamos los directorios que no se esten usando.
+umount /opt/opengnsys/images/mount/* &>/dev/null
+# Guardamos los directorios que siguen montados.
+MOUNTEDDIR=$(df |grep /opt/opengnsys/images/mount)
+# Comprobamos que no esta montado y borramos.
+echo "Borrando los directorios de montaje de las imagenes:"
+for IMGDIR in $DIR
+do
+ echo -n " $IMGDIR:"
+ if ! echo $MOUNTEDDIR |grep -e "$BASEDIR/$IMGDIR " -e "$BASEDIR/$IMGDIR$" >/dev/null ; then
+ rm -rf $BASEDIR/$IMGDIR
+ echo "directorio borrado."
+ else
+ echo "directorio ocupado, no se puede borrar."
+
+ fi
+done
+
+
diff --git a/server/bin/compareDhcpOpengnsys b/server/bin/compareDhcpOpengnsys
index 5bf3cd43..bc6447d1 100755
--- a/server/bin/compareDhcpOpengnsys
+++ b/server/bin/compareDhcpOpengnsys
@@ -12,6 +12,7 @@ PROG=$(basename $0)
DHCPFILE=${DHCPFILE:-/etc/dhcp/dhcpd.conf}
TMP_DHCP=/tmp/$PROG-dhcp$$
TMP_MYSQL=/tmp/$PROG-mysql$$
+TMP_MYCNF=/tmp/.my.cnf.$$
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
@@ -27,8 +28,16 @@ fi
# Obtener datos de acceso a la Base de datos.
source $SERVERCONF
-
-trap "rm -f $TMP_DHCP $TMP_MYSQL" 1 2 3 9 15
+# Componer fichero con credenciales de conexión.
+touch $TMP_MYCNF
+chmod 600 $TMP_MYCNF
+cat << EOT > $TMP_MYCNF
+[client]
+user=$USUARIO
+password=$PASSWORD
+EOT
+
+trap "rm -f $TMP_DHCP $TMP_MYSQL $TMP_MYCNF" 1 2 3 9 15
# Creo fichero temporal del dhcp
grep -v "#" $DHCPFILE |egrep -e "host " -e "hardware ethernet" -e fixed-address | sed -e 's/.$//' \
|sed -e s/"^.*host "//g -e s/\{/\;/g -e s/"^.*hardware ethernet "/=/g -e s/"^.*fixed-address "/=/g \
@@ -37,7 +46,7 @@ grep -v "#" $DHCPFILE |egrep -e "host " -e "hardware ethernet" -e fixed-address
# Creo fichero temporal del mysql, de la base de datos de opengnsys
-mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
+mysql --defaults-extra-file=$TMP_MYCNF -D "$CATALOG" -N -e \
"select CONCAT_WS (';', nombreordenador, mac, ip) from ordenadores order by nombreordenador;" > $TMP_MYSQL
# Comparo los ficheros
@@ -45,5 +54,5 @@ echo "Comparamos las configuraciones: < dhcp y > mysql"
diff -bi $TMP_DHCP $TMP_MYSQL
[ $? == 0 ] && echo "El ficheros del servicio dhcp y la base de datos de ogAdmBD tienen la misma configuracion"
-rm -f $TMP_DHCP $TMP_MYSQL
+rm -f $TMP_DHCP $TMP_MYSQL $TMP_MYCNF
diff --git a/server/bin/createfileimage b/server/bin/createfileimage
new file mode 100755
index 00000000..73c57711
--- /dev/null
+++ b/server/bin/createfileimage
@@ -0,0 +1,61 @@
+#!/bin/bash
+#/**
+# createtimage
+#@brief Crea o redimensiona el archivo de la imagen.
+#@param 1 imagen
+#@param 2 extension [ img|diff ]
+#@param 3 tamaño de la imagen en kb.
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_DONTSYNC_IMAGE #71 Imagen no sincronizable (es monolitica)
+#@version 1.0 - Montar imagen sincronizable
+#@author Irina Gomez
+#@date 2013-05-23
+#*/ ##
+BASEDIR=/opt/opengnsys
+REPODIR="$BASEDIR/images"
+REPOLOG=$BASEDIR/log/ogAdmRepo.log
+source $BASEDIR/client/etc/lang.$LANG.conf
+
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ echo -e " $PROG: $MSG_HELP_ogCreateFileImage \n" \
+ "$MSG_FORMAT: $PROG image [ img|diff ] size_kb \n" \
+ "base -> $PROG Windows7 img 3900000 \n" \
+ "diff -> $PROG Ubuntu12 diff 450000"
+ exit 0
+fi
+
+[ $# -lt 3 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ] size_Kb " && exit 1
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+IMGEXT="$2"
+
+# Si existe imagen, Comprobamos que no esta bloqueada y que es sincronizable
+IMGFILE="$REPODIR/$1.$IMGEXT"
+if [ -f $IMGFILE ]; then
+ [ -f $IMGFILE.lock ] && echo "$PROG: Error: $MSG_ERR_LOCKED $1 $IMGEXT" && exit 4
+
+
+ if ! file $IMGFILE | grep -i -e " BTRFS Filesystem " -e " ext4 filesystem " >/dev/null ; then
+ echo "$PROG: Error: $MSG_ERR_DONTSYNC_IMAGE $1 $2"
+ exit 71
+ fi
+fi
+
+touch $IMGFILE.lock
+
+# El tamaño minimo de la imagen es 300000 para poder formatear en fs btrfs.
+SIZEREQUIRED=$3
+[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
+
+echo CREATE_IMAGE "$1" $IMGEXT $SIZEREQUIRED
+echo -ne CREATE_IMAGE "$1" $IMGEXT $SIZEREQUIRED| /opt/opengnsys/sbin/ogAdmRepoAux || exit $?
+echo "Los resultado se registran en $REPOLOG. "
+
+rm $IMGFILE.lock
diff --git a/server/bin/listclientmode b/server/bin/listclientmode
index ba86f141..da4404e0 100755
--- a/server/bin/listclientmode
+++ b/server/bin/listclientmode
@@ -11,7 +11,7 @@
PROG=$(basename $0)
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
-PXEDIR=$OPENGNSYS/tftpboot/pxelinux.cfg
+MYCNF=/tmp/.my.cnf.$$
# Control básico de errores.
if [ $# -ne 1 ]; then
@@ -26,27 +26,23 @@ fi
# Obtener datos de acceso a la Base de datos.
source $SERVERCONF
-# Comprobar si se recibe nombre de aula o de equipo.
-IDAULA=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT idaula FROM aulas WHERE nombreaula='$1';")
-
-if [ -n "$IDAULA" ]; then
- # Aula encontrada
- PCNAME=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT nombreordenador FROM ordenadores WHERE idaula='$IDAULA';")
-else
- # Buscar ordenador
- PCNAME=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT nombreordenador FROM ordenadores WHERE nombreordenador='$1';")
-fi
-if [ -z "$PCNAME" ]; then
- echo "$PROG: No existe ningún aula o equipo con el nombre \"$1\""
- exit 1
-fi
-
-for PC in $PCNAME; do
- PXE=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT arranque FROM ordenadores WHERE nombreordenador='$PC';")
- echo "Equipo $PC asociado a arranque tipo \"$PXE\""
-done
+# Sustituir caracteres ' por \' para evitar inyección SQL.
+RESOURCE="${1//\'/\'}"
+# Componer fichero con credenciales de conexión.
+touch $MYCNF
+chmod 600 $MYCNF
+cat << EOT > $MYCNF
+[client]
+user=$USUARIO
+password=$PASSWORD
+EOT
+# Borrar el fichero temporal si termina el proceso.
+trap "rm -f $MYCNF" 0 1 2 3 6 9 15
+# Obtener nombre de ordenador individual o todos los de una aula e indicar su plantilla asociada.
+mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
+ "SELECT nombreordenador, arranque FROM ordenadores
+ JOIN aulas USING (idaula)
+ WHERE aulas.nombreaula='$RESOURCE'
+ OR nombreordenador='$RESOURCE';" | \
+ awk '{ printf ("Equipo %s asociado a arranque tipo \"%s\"\n", $1, $2); }'
diff --git a/server/bin/mountimage b/server/bin/mountimage
new file mode 100755
index 00000000..6187724d
--- /dev/null
+++ b/server/bin/mountimage
@@ -0,0 +1,66 @@
+#!/bin/bash
+#/**
+# mountimage
+#@brief Monta imagen sincronizable en el repositorio con permisos de escritura
+#@param 1 imagen
+#@param 2 extension [ img|diff ] opcional, por defecto img
+#@return Directorio de montaje de la imagen.
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado
+#@exception OG_ERR_DONTSYNC_IMAGE #71 Imagen no sincronizable (es monolitica)
+#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada
+#@version 1.0 - Montar imagen sincronizable
+#@author Irina Gomez
+#@date 2013-05-23
+#*/ ##
+BASEDIR=/opt/opengnsys
+REPODIR="$BASEDIR/images"
+source $BASEDIR/client/etc/lang.$LANG.conf
+
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ echo -e " $PROG: $MSG_HELP_ogMountImage \n" \
+ "$MSG_FORMAT: $PROG nombre_image [ img|diff ] \n" \
+ "base -> $PROG Windows7 \n" \
+ "diff -> $PROG Ubuntu12 diff"
+ exit 0
+fi
+
+[ $# -lt 1 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ]" && exit 1
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+[ "$2" == "" -o "$2" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
+
+# Comprobamos que existe imagen
+IMGFILE="$REPODIR/$1.$IMGEXT"
+[ ! -f $IMGFILE ] && echo "$PROG: Error: $MSG_ERR_NOTFOUND $1 $IMGEXT" && exit 2
+
+
+# Comprobar que la imagen es sincronizable
+file $IMGFILE | grep -i -e " BTRFS Filesystem " >/dev/null && IMGFS=BTRFS
+file $IMGFILE | grep -i -e " ext4 filesystem " >/dev/null && IMGFS=EXT4
+if [ "$IMGFS" != "BTRFS" -a "$IMGFS" != "EXT4" ] ; then
+ echo "$PROG: Error: $MSG_ERR_DONTSYNC_IMAGE $1 $2"
+ exit 71
+fi
+
+MOUNTDIR="$REPODIR/mount/$1"
+[ "$IMGEXT" == "img.diff" ] && MOUNTDIR="$MOUNTDIR.${IMGEXT#*\.}"
+mkdir -p "$MOUNTDIR"
+
+# Comprobamos si la imagen esta montada y si es así nos salimos.
+df |grep "$MOUNTDIR$" 2>&1 >/dev/null && echo "$MOUNTDIR" && exit 0
+
+if [ "$IMGFS" == "EXT4" ] ; then
+ mount -t ext4 "$IMGFILE" "$MOUNTDIR"
+else
+ mount -o compress=lzo "$IMGFILE" "$MOUNTDIR"
+fi
+[ $? -eq 0 ] || ( echo "$MSG_ERR_DONTMOUNT_IMAGE $1 $2" ; exit 70)
+echo "$MOUNTDIR"
+
diff --git a/server/bin/partclone2sync b/server/bin/partclone2sync
new file mode 100755
index 00000000..4272cf06
--- /dev/null
+++ b/server/bin/partclone2sync
@@ -0,0 +1,174 @@
+#!/bin/bash
+#/**
+# partclone2sync
+#@brief Convierte imagen de partclone en imagen sincronizable.
+#@param 1 imagen partclone.
+#@param 2 imagen sincronizable.
+#@param 3 tipo de sincronización y formato de la imagen SYNC1 (directorio) y SYNC2 (fichero)
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado
+#@exception OG_ERR_LOCKED # 4 Imagen de partclone bloqueada.
+#@exception OG_ERR_IMAGE # 5 Error al crear la imagen.
+#@exception OG_CACHESIZE # 16 No hay espacio suficiente en el disco.
+#@note Necesita tener instalado partclone-utils y lzop
+#@version 1.0 -
+#@author Irina Gomez
+#@date 2014-01-22
+#*/ ##
+trap "onexit \"$1\" \"$2\" $3" 0 5 16 9 15
+
+function onexit() {
+ local exit_status=$?
+ # Desmontamos el cliente de opengnsys y la imagen temporal.
+ umount $OGCLIENTDIR/ogclientmount $AUXDIR
+ rm -rf $IMGINFO $FILEHEAD $TMPLOG
+
+ # Borramos los ficheros de bloqueo de las imagenes nuevas.
+ rm -rf $RSYNCIMG.img.lock $AUXIMG.lock
+ # Borramos los ficheros de bloqueo dela imagen de partclone si no estaba bloqueada.
+ [ $exit_status -eq 4 ] || rm -rf $PARTCLONEIMG.lock
+
+ # Borramos las imagenes y directorios temporales.
+ rm $AUXIMG
+ rmdir $AUXDIR $OGCLIENTDIR/ogclientmount
+
+ exit $exit_status
+}
+
+TIME1=$SECONDS
+
+BASEDIR=/opt/opengnsys
+REPODIR="$BASEDIR/images"
+BINDIR="$BASEDIR/bin"
+PROG="$(basename $0)"
+# Cargamos los mensajes en el idioma del sistema.
+source $BASEDIR/client/etc/lang.$LANG.conf
+
+# Sistema de fichero de la imagen según kernel, menor que 3.7 EXT4. comparamos revision
+[ $(uname -r|cut -d. -f2) -lt 7 ] && IMGFS="EXT4" || IMGFS="BTRFS"
+
+# Mostrar ayuda: Si se solicita, si faltan parametros o $3 no es SYNC1 o SYNC2.
+if [ "$*" == "help" -o $# -lt 3 ] && ! [[ "$3" == SYNC[1,2] ]]; then
+ echo -e "$PROG: $MSG_HELP_partclone2sync \n" \
+ "$MSG_FORMAT: $PROG image_partclone image_rsync [ SYNC1 | SYNC2 ] \n" \
+ " $PROG Windows7 Windows72013 SYNC1 "
+ exit 0
+fi
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+
+PARTCLONEIMG="$REPODIR/$1.img"
+RSYNCIMG="$REPODIR/$2"
+AUXIMG="$REPODIR/$1.tmp.img"
+AUXDIR="/tmp/partclone2rsync$$"
+TYPE="$3"
+TMPLOG=/tmp/rsync$$.sal
+
+# Comprobamos que exista la imagen.
+! [ -f $PARTCLONEIMG ] && echo "$MSG_ERR_NOTFOUND: $1" && exit 2
+
+# Comprobamos que la imagen no este bloqueada.
+[ -f $PARTCLONEIMG.lock ] && echo "$MSG_ERR_LOCKED: $1" && exit 4
+
+# Usamos el partclone del ogclient.
+OGCLIENTDIR=$BASEDIR/tftpboot/ogclient
+[ -d $OGCLIENTDIR/ogclientmount ] || mkdir $OGCLIENTDIR/ogclientmount
+mount $OGCLIENTDIR/ogclient.sqfs $OGCLIENTDIR/ogclientmount
+PATHPARTCLONE=$OGCLIENTDIR/ogclientmount/usr/sbin
+
+# Creamos fichero de bloqueo
+touch $PARTCLONEIMG.lock $AUXIMG.lock
+
+
+# Datos imagen.
+echo [10] Obtenemos datos del partclone.
+FILEHEAD=/tmp/$(basename $PARTCLONEIMG).infohead
+COMPRESSOR=`file $PARTCLONEIMG | awk '{print $2}'`
+$COMPRESSOR -dc $PARTCLONEIMG 2>/dev/null | head > $FILEHEAD
+PARTCLONEINFO=$(LC_ALL=C partclone.info $FILEHEAD 2>&1)
+if `echo $PARTCLONEINFO | grep size > /dev/null`
+then
+ FS=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); print toupper($8);}')
+ echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1000000 || SIZEFACTOR=1024
+ IMGSIZE=$(echo $PARTCLONEINFO | awk -v FACTOR=$SIZEFACTOR '{gsub(/\: /,"\n"); printf "%d\n", $11*FACTOR;}')
+else
+ echo "Error: partclone.info no detecta la imagen"
+ exit 5
+fi
+[ "$FS" == "NTFS" ] && echo "Error: Todavia no podemos convertir imagenes de Windows" && exit 6
+
+# Calculamos el espacio disponible en la particion de opengnsys.
+echo -n "[20]$MSG_SCRIPTS_CREATE_SIZE "
+for DIR in "/" "/opt" "/opt/opengnsys" "/opt/opengnsys/images"
+do
+ AUXSIZE=$(df|grep $DIR$|awk '{print $3}')
+ [ "$AUXSIZE" != "" ] && PARTSIZE=$AUXSIZE
+done
+let REQUIRESIZE=2*$IMGSIZE
+if [ $PARTSIZE -lt $REQUIRESIZE ]; then
+ echo "No hay espacio suficiente para descomprimir y crear la imagen: $REQUIRESIZE."
+ exit 16
+fi
+echo "$REQUIRESIZE $PARTSIZE"
+
+# Descomprimimos la imagen de partclone.
+echo [30] Descomprimimos la imagen de partclone.
+$COMPRESSOR -dc $PARTCLONEIMG | $PATHPARTCLONE/partclone.restore -C -s - -O $AUXIMG
+
+TIME2=$[SECONDS-TIME1]
+echo " $MSG_SCRIPTS_TASK_END: $MSG_SCRIPTS_TIME_PARTIAL: $[TIME2/60]m $[TIME2%60]s"
+
+# Montamos la imagen:
+mkdir -p $AUXDIR
+mount $AUXIMG $AUXDIR
+
+# Sincronizamos de la imagen del partclone a la del rsync.
+echo "[60] Sincronizamos desde la imagen de partclone a la de rsync."
+if [ "$TYPE" == "SYNC1" ]; then
+ mkdir -p $RSYNCIMG
+ echo " * Log temporal en: $TMPLOG"
+ echo rsync -aHAX $AUXDIR/ $RSYNCIMG --- log: $TMPLOG
+ rsync -aHAXv $AUXDIR/ $RSYNCIMG >> $TMPLOG
+TIME3=$[SECONDS-TIME2]
+echo " $MSG_SCRIPTS_TASK_END: $MSG_SCRIPTS_TIME_PARTIAL: $[TIME3/60]m $[TIME3%60]s"
+else
+ IMGINFO="/tmp/ogimg.info$$"
+ IMGDIR="$REPODIR/mount/$(basename $RSYNCIMG)"
+ # Calculamos el tamaño de la imagen
+ SIZE=$(df -k|awk -v P="$AUXDIR" '{if ($6==P) print $3}')
+ # Creo fichero de informacion de la imagen
+ echo "#$FSIMG:LZO:$FS:$SIZE" > $IMGINFO
+ # Factor de compresion de la imagen
+ [ "$FS" == "NTFS" ] && ZFACTOR=120 || ZFACTOR=110
+ [ "$FSIMG" == "BTRFS" ] && let ZFACTOR=$ZFACTOR-30
+ let SIZE=$SIZE*$ZFACTOR/100
+
+ # Creamos el fichero de la imagen vacio (queda montado)
+ echo " * $MSG_HELP_ogCreateFileImage"
+ $BINDIR/createfileimage $(basename $RSYNCIMG) img $SIZE || exit 5
+ touch $RSYNCIMG.img.lock
+ TIME3=$[SECONDS-TIME2]
+ echo " $MSG_SCRIPTS_TASK_END: $MSG_SCRIPTS_TIME_PARTIAL: $[TIME3/60]m $[TIME3%60]s"
+
+ # Sincronizo las imagenes antigua y nueva.
+ echo " * Sincroniza las imagenes antigua y nueva. log temporal en: $TMPLOG"
+ echo rsync -aHAX $AUXDIR/ $IMGDIR
+ rsync -aHAXv $AUXDIR/ $IMGDIR >> $TMPLOG
+ TIME4=$[SECONDS-TIME3]
+ echo " $MSG_SCRIPTS_TASK_END: $MSG_SCRIPTS_TIME_PARTIAL: $[TIME4/60]m $[TIME4%60]s"
+ # copiamos el fichero de informacion dentro de la imagen.
+ mv $IMGINFO $IMGDIR/ogimg.info
+ # Desmontamos la imagen y la reducimos al minimo.
+ $BINDIR/unmountimage $(basename $RSYNCIMG) img
+ echo " * $MSG_HELP_ogReduceImage."
+ rm $RSYNCIMG.img.lock
+ $BINDIR/reduceimage $(basename $RSYNCIMG) img
+
+fi
+
+TIME=$[SECONDS-TIME1]
+echo " $MSG_SCRIPTS_END: $MSG_SCRIPTS_TIME_TOTAL: $[TIME/60]m $[TIME%60]s"
diff --git a/server/bin/reduceimage b/server/bin/reduceimage
new file mode 100755
index 00000000..cb2d2f37
--- /dev/null
+++ b/server/bin/reduceimage
@@ -0,0 +1,54 @@
+#!/bin/bash
+#/**
+# reduceimage
+#@brief Reduce el archivo de la imagen a tamaño datos + 500M
+#@param 1 imagen
+#@param 2 extension [ img|diff ] opcional, por defecto img
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado
+#@exception OG_ERR_LOCKED # 4 Partición o fichero bloqueado
+#@exception OG_ERR_DONTSYNC_IMAGE #71 Imagen no sincronizable (es monolitica)
+#@version 1.0 - Reducir tamaño imagen sincronizable
+#@author Irina Gomez
+#@date 2013-05-23
+#*/ ##
+BASEDIR=/opt/opengnsys
+REPODIR="$BASEDIR/images"
+REPOLOG=$BASEDIR/log/ogAdmRepo.log
+source $BASEDIR/client/etc/lang.$LANG.conf
+
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ echo -e " $PROG: $MSG_HELP_ogReduceImage \n" \
+ "$MSG_FORMAT: $PROG nombre_image [ img|diff ] \n" \
+ "base -> $PROG Windows7 \n" \
+ "diff -> $PROG Ubuntu12 diff"
+ exit 0
+fi
+
+[ $# -lt 1 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ]" && exit 1
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+[ "$2" == "" -o "$2" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
+# Comprobamos que existe imagen y que no este bloqueada
+IMGFILE="$REPODIR/$1.$IMGEXT"
+[ ! -f $IMGFILE ] && echo "$PROG: Error: $MSG_ERR_NOTFOUND $1 $IMGEXT" && exit 2
+[ -f $IMGFILE.lock ] && echo "$PROG: Error: $MSG_ERR_LOCKED $1 $IMGEXT" && exit 4
+
+# Comprobar que la imagen es sincronizable
+if ! file $IMGFILE | grep -i -e " BTRFS Filesystem " -e " ext4 filesystem " >/dev/null ; then
+ echo "$PROG: Error: $MSG_ERR_DONTSYNC_IMAGE $1 $2"
+ exit 71
+fi
+
+touch $IMGFILE.lock
+echo -ne REDUCE_IMAGE "$1" ${IMGEXT#*\.} | /opt/opengnsys/sbin/ogAdmRepoAux
+echo "Los resultado se registran en $REPOLOG. "
+
+rm $IMGFILE.lock
diff --git a/server/bin/registeredsoftware b/server/bin/registeredsoftware
new file mode 100755
index 00000000..31357dfb
--- /dev/null
+++ b/server/bin/registeredsoftware
@@ -0,0 +1,63 @@
+#!/bin/bash
+# registeredsoftware str_image
+#@file registeredsoftware
+#@brief Lista el software instalado en una imagen de sistema.
+#@param str_image Nombre canónico de la imagen.
+#@return Líneas con el formato: programa versión
+#@version 1.0 - Creación del script.
+#@author Ramón Gómez - Univ. Sevilla
+#@date 2014-02-27
+
+
+# Variables.
+PROG=$(basename $0)
+OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
+SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
+MYCNF=/tmp/.my.cnf.$$
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ echo "$PROG: Lista el software instalado en una imagen de sistema."
+ echo "Formato: $PROG str_image"
+ exit 0
+fi
+
+# Control básico de errores.
+if [ $# -ne 1 ]; then
+ echo "$PROG Error: Formato: $PROG str_image" >&2
+ exit 1
+fi
+if [ ! -r $SERVERCONF ]; then
+ echo "$PROG: Sin acceso a fichero de configuración"
+ exit 2
+fi
+
+# Sustituir caracteres ' por \' para evitar inyección SQL.
+RESOURCE="${1//\'/\'}"
+
+# Obtener datos de acceso a la base de datos.
+source $SERVERCONF
+
+# Componer fichero con credenciales de conexión a la base de datos.
+touch $MYCNF
+chmod 600 $MYCNF
+cat << EOT > $MYCNF
+[client]
+user=$USUARIO
+password=$PASSWORD
+EOT
+
+# Borrar el fichero temporal si termina el proceso.
+trap "rm -f $MYCNF" 0 1 2 3 6 9 15
+
+# Obtener lista de componentes del perfil de software asociado a la imagen.
+mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
+ "SELECT softwares.descripcion
+ FROM perfilessoft
+ LEFT OUTER JOIN perfilessoft_softwares ON perfilessoft.idperfilsoft=perfilessoft_softwares.idperfilsoft
+ LEFT OUTER JOIN softwares ON softwares.idsoftware=perfilessoft_softwares.idsoftware
+ LEFT OUTER JOIN tiposoftwares ON softwares.idtiposoftware=tiposoftwares.idtiposoftware
+ LEFT OUTER JOIN imagenes ON perfilessoft.idperfilsoft=imagenes.idperfilsoft
+ WHERE imagenes.nombreca='$RESOURCE'
+ ORDER BY tiposoftwares.idtiposoftware,softwares.descripcion;"
+
diff --git a/server/bin/setclientmode b/server/bin/setclientmode
index ecacf247..84ef0f95 100755
--- a/server/bin/setclientmode
+++ b/server/bin/setclientmode
@@ -5,6 +5,9 @@
# y se eliminan los enlaces para equipos con la plantilla por defecto.
# Uso: clienmode NombrePlatilla { NombrePC | NombreAula }
# Autores: Irina Gomez y Ramon Gomez - Univ. Sevilla, noviembre 2010
+#@version 1.0.1 - Identificacion de la plantilla por nombre en consola = en primera linea de la plantilla
+#@author Irina Gomez - Univ. Sevilla
+#@date 2013-05-31
# Variables.
@@ -12,39 +15,46 @@ PROG=$(basename $0)
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
PXEDIR=$OPENGNSYS/tftpboot/menu.lst
-TEMPLATE="$PXEDIR/templates/$1"
LOGFILE=$OPENGNSYS/log/opengnsys.log
+MYCNF=/tmp/.my.cnf.$$
# Control básico de errores.
if [ $# -ne 2 ]; then
echo "$PROG: Error de ejecución"
- echo "Formato: $PROG Archivo_platilla [NOMBRE_PC|NOMBRE_AULA]"
+ echo "Formato: $PROG template [pc_name|group_name]"
exit 1
fi
if [ ! -r $SERVERCONF ]; then
echo "$PROG: Sin acceso a fichero de configuración"
exit 2
fi
-if [ ! -e $TEMPLATE ]; then
- echo "No existe archivo platilla: $TEMPLATE"
+TEMPLATE=$(grep "^#.* $1 *$" $PXEDIR/templates/*|cut -d: -f1)
+if [ -z "$TEMPLATE" ]; then
+ echo "No existe archivo platilla: $1"
exit
fi
# Obtener datos de acceso a la Base de datos.
source $SERVERCONF
-# Comprobar si se recibe nombre de aula o de equipo.
-IDAULA=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT idaula FROM aulas WHERE nombreaula=\"$2\";")
-
-if [ -n "$IDAULA" ]; then
- # Aula encontrada
- ETHERNET=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT mac FROM ordenadores WHERE idaula=\"$IDAULA\";")
-else
- # Buscar ordenador
- ETHERNET=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT mac FROM ordenadores WHERE nombreordenador=\"$2\";")
-fi
+# Sustituir caracteres ' por \' para evitar inyección SQL.
+BOOTMODE="${1//\'/\'}"
+RESOURCE="${2//\'/\'}"
+# Componer fichero con credenciales de conexión.
+touch $MYCNF
+chmod 600 $MYCNF
+cat << EOT > $MYCNF
+[client]
+user=$USUARIO
+password=$PASSWORD
+EOT
+# Borrar el fichero temporal si termina el proceso.
+trap "rm -f $MYCNF" 0 1 2 3 6 9 15
+# Buscar ordenador individual o todos los de una aula.
+ETHERNET=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
+ "SELECT mac FROM ordenadores
+ JOIN aulas USING (idaula)
+ WHERE aulas.nombreaula='$RESOURCE'
+ OR nombreordenador='$RESOURCE';")
if [ -z "$ETHERNET" ]; then
date +"%b %d %T $PROG: No existe aula o equipo con el nombre \"$2\"" | tee -a $LOGFILE
exit 1
@@ -53,26 +63,47 @@ fi
# Copiar fichero de configuración y actualizar base de datos.
date +"%b %d %T $PROG: Configurando \"$1\" en \"$2\"" | tee -a $LOGFILE
NPC=0
-for AUX in $ETHERNET; do
- date +"%b %d %T $PROG: Detectada ethernet \"$AUX\" en \"$2\"" | tee -a $LOGFILE
- AUX="01-${AUX:0:2}-${AUX:2:2}-${AUX:4:2}-${AUX:6:2}-${AUX:8:2}-${AUX:10:2}"
- # Si existe anteriormente lo borra
- [ -e $PXEDIR/$AUX ] && rm $PXEDIR/$AUX
+for MAC in $ETHERNET; do
+ date +"%b %d %T $PROG: Detectada ethernet \"$MAC\" en \"$2\"" | tee -a $LOGFILE
+ # Si existe anteriormente el fichero PXE, lo borra
+ PXEFILE=$PXEDIR/01-${MAC:0:2}-${MAC:2:2}-${MAC:4:2}-${MAC:6:2}-${MAC:8:2}-${MAC:10:2}
+ [ -e $PXEFILE ] && rm $PXEFILE
if [ "$1" != "default" ]; then
- cp -a $TEMPLATE $PXEDIR/$AUX
- DATOS=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT ordenadores.ip, ':', repositorios.ip, ':',
- aulas.router, ':', aulas.netmask, ':',
- ordenadores.netiface, ':none group=',
- REPLACE (aulas.nombreaula, ' ', '_')
+ # Si no está definida la variable LANG, usar idioma inglés por defecto.
+ [ -z "$LANG" -o "$LANG" == "C" ] && LANG="en"
+ # Obtener de la BD los parámetros de arranque asociados (separador es TAB).
+ DATOS=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
+ "SELECT ' LANG=$LANG',
+ ' ip=', CONCAT_WS (':', ordenadores.ip,
+ (@repoip:=repositorios.ip), aulas.router, aulas.netmask,
+ ordenadores.nombreordenador, ordenadores.netiface, 'none'),
+ ' group=', REPLACE (aulas.nombreaula, ' ', '_'),
+ ' ogrepo=', @repoip,
+ ' oglive=', @repoip,
+ ' oglog=', (SELECT (@serverip:=ipserveradm) FROM entornos LIMIT 1),
+ ' ogshare=', @serverip,
+ ' winboot=', IFNULL (perfileshard.winboot, 'reboot'),
+ IF (aulas.dns IS NULL, '', CONCAT (' ogdns=', aulas.dns)),
+ IF (aulas.proxy IS NULL, '', CONCAT (' ogproxy=', aulas.proxy)),
+ CASE
+ WHEN menus.resolucion IS NULL THEN ''
+ WHEN menus.resolucion <= '999' THEN CONCAT (' vga=', menus.resolucion)
+ WHEN menus.resolucion LIKE '%:%' THEN CONCAT (' video=', menus.resolucion)
+ ELSE menus.resolucion
+ END
FROM ordenadores
- JOIN aulas ON ordenadores.idaula=aulas.idaula
- JOIN repositorios ON ordenadores.idrepositorio=repositorios.idrepositorio
- WHERE ordenadores.mac=\"$ETHERNET\";")
+ JOIN aulas USING (idaula)
+ JOIN repositorios USING (idrepositorio)
+ LEFT JOIN perfileshard USING (idperfilhard)
+ LEFT JOIN menus USING (idmenu)
+ WHERE ordenadores.mac='$MAC';")
+ # Quitar tabuladores y sustituir caracteres quitando acentos y tildes.
DATOS=$(echo ${DATOS// /} | tr 'áéíóúñÁÉÍÓÚÑ' 'aeiounAEIOUN')
- perl -pi -e "s/INFOHOST/$DATOS/g" $PXEDIR/$AUX
- mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "UPDATE ordenadores SET arranque=\"$1\" WHERE mac=\"$ETHERNET\";"
+ # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
+ sed -e "s/vga=[0-9]*//g; s/INFOHOST/$DATOS/g" $TEMPLATE >$PXEFILE
+ # Actualizar en la BD el modo de arranque asociada el cliente.
+ mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
+ "UPDATE ordenadores SET arranque='$BOOTMODE' WHERE mac='$MAC';"
fi
let NPC=NPC+1
done
diff --git a/server/bin/setserveraddr b/server/bin/setserveraddr
index 44da0c7b..a53245c6 100755
--- a/server/bin/setserveraddr
+++ b/server/bin/setserveraddr
@@ -5,12 +5,17 @@
# Uso: setserveraddr iface
# Autor: Ramon Gomez - Univ. Sevilla
# Fecha: 2011-01-25
+# Versión: 1.0.5 - Regenerar ficheros de configuración.
+# Autor: Ramon Gomez - Univ. Sevilla
+# Fecha: 2014-06-06
-# Comprobar parámetros.
+# Variables globales.
PROG="$(basename $0)"
+
+# Comprobar parámetros.
if [ $# -ne 1 ]; then
- echo "$PROG: Incorrect operand. Format: $PROG device" >&2
+ echo "$PROG: Incorrect operand. Format: $PROG interface" >&2
exit 1
fi
if [ "$USER" != "root" ]; then
@@ -18,21 +23,41 @@ if [ "$USER" != "root" ]; then
exit 1
fi
+# Aviso informando de que los clientes iniciados pueden quedarse colgados.
+read -p "WARNING: initiated clients can hang. Continue? (y/n): " ANSWER
+if [ "${ANSWER^^}" != "Y" ]; then
+ echo "Operation canceled."
+ exit 0
+fi
+
# Detectar la interfaz de red.
DEVICES=$(ip -o link show up|awk -F: '$2!~/lo/ {print $2}')
-FOUND=0
-for dev in $DEVICES; do
- [ "$dev" == "$1" ] && FOUND=1;
+for DEV in $DEVICES; do
+ # Si se encuentra la interfaz de red, obtener su dirección IP.
+ [ "$DEV" == "$1" ] && SERVERIP=$(ip -o addr show dev $DEV | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
done
-if [ $FOUND == 1 ]; then
+# Comprobar si se ha detectado dirección IP.
+if [ -n "$SERVERIP" ]; then
+ # Ficheros temporales.
+ tmpfile=$(mktemp /tmp/og.XXXXX)
+ MYCNF=$(mktemp /tmp/.my.cnf.XXXXX)
+ trap "rm -f $tmpfile $MYCNF" 1 2 3 6 9 15
+
# Comprobar si hay que modificar la configuración de DHCP.
CHANGE=0
- for f in /etc/{dhcp,dhcp3}/dhcpd.conf; do
- file="${f/./-$1.}"
- if [ -f $file -a ! $f -ef $file ]; then
- ln -f $file $f
- CHANGE=1
+ for f in /etc/{dhcp,hcp3}/dhcpd.conf; do
+ if [ -f $f ]; then
+ # Cambiar el parámetro "next-server" de DHCP.
+ sed "s/next-server.*/next-server $SERVERIP/" $f >$tmpfile
+ file="${f/./-$1.}"
+ # Copiar el fichero y enlazarlo si hay cambios.
+ if ! diff -q $tmpfile $file &>/dev/null; then
+ mv $tmpfile $file
+ chmod 644 $file
+ ln -f $file $f
+ CHANGE=1
+ fi
fi
done
# Si ha cambiado la configuración, reiniciar DHCP.
@@ -43,33 +68,77 @@ if [ $FOUND == 1 ]; then
else
echo "Don't change the DHCP configuration."
fi
- # Comprobar si hay que modificar la configuración de OpenGnsys.
+
+ # Guardar la IP anterior del repositorio.
OPENGNSYS=/opt/opengnsys
+ source $OPENGNSYS/etc/ogAdmRepo.cfg
+ OLDSERVERIP=$IPlocal
+
+ # Comprobar si hay que modificar la configuración de OpenGnsys.
CHANGE=0
- for f in etc/{ogAdmServer,ogAdmRepo,ogAdmAgent}.cfg www/controlacceso.php client/etc/ogAdmClient.cfg; do
- file="$OPENGNSYS/${f/./-$1.}"
- if [ ! -f $file ]; then
+ # Procesar los ficheros de configuración de OpenGnSys.
+ for f in $OPENGNSYS/{etc/{ogAdmServer,ogAdmRepo,ogAdmAgent}.cfg,www/controlacceso.php,client/etc/ogAdmClient.cfg}; do
+ # Error si no existe algún fichero de configuración.
+ if [ ! -f $f ]; then
echo "$PROG: File $file does not exist." >&2
exit 2
fi
- cfg=$OPENGNSYS/$f
- if [ ! $cfg -ef $file ]; then
- ln -f $file $cfg
+ # Cambiar la IP del servidor:
+ # - variables ServidorAdm e IPlocal,
+ # - servidor o IP en URLs excepto si contienen "localhost".
+ sed -e "s,ServidorAdm=.*,ServidorAdm=$SERVERIP," \
+ -e "s,IPlocal=.*,IPlocal=$SERVERIP," \
+ -e '/localhost/!s,http://[^/]*/\(.*\),http://'$SERVERIP'/\1,' $f >$tmpfile
+ file="${f/./-$1.}"
+ # Copiar el fichero y enlazarlo si hay cambios.
+ if ! diff -q $tmpfile $file &>/dev/null; then
+ mv $tmpfile $file
+ chmod 644 $file
+ ln -f $file $f
CHANGE=1
fi
done
+
# Si ha cambiado la configuración, reiniciar OpenGnSys y actualizar la BD.
if [ $CHANGE == 1 ]; then
/etc/init.d/opengnsys restart
source $OPENGNSYS/etc/ogAdmServer.cfg
- mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "UPDATE entornos SET ipserveradm='$ServidorAdm' WHERE identorno=1"
- echo "Default server interface set to: $1 ($ServidorAdm)"
+ # Componer fichero con credenciales de conexión.
+ cat << EOT > $MYCNF
+[client]
+user=$USUARIO
+password=$PASSWORD
+EOT
+ # Actualizar IP del servidor en la BD.
+ mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
+ "UPDATE entornos
+ SET ipserveradm='$SERVERIP'
+ WHERE identorno=1"
+
+ # Actualizar IP del repositorio en la BD.
+ mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
+ "UPDATE repositorios
+ SET ip='$SERVERIP'
+ WHERE ip='$OLDSERVERIP'"
+
+ # Mostrar instrucciones a realizar tras la ejecución.
+ cat << EOT
+Default server interface set to: $1 ($SERVERIP)
+
+Manual tasks:
+Check DHCP configuration file and restart service, if needed.
+Log-in as Web Console organization user.
+ - Check URLs in all menus.
+ - Run Advanced Netboot in all rooms.
+
+EOT
else
+ # Mensaje indicando que no se han cambiado datos.
echo "Don't change the default interface: $1"
fi
else
- echo "$PROG: Network device not found. Format: $PROG device" >&2
+ # Error: interfaz de red no encontrado.
+ echo "$PROG: Network device not found. Format: $PROG interface" >&2
exit 1
fi
diff --git a/server/bin/setsmbpass b/server/bin/setsmbpass
index ac920c00..82d7ce46 100755
--- a/server/bin/setsmbpass
+++ b/server/bin/setsmbpass
@@ -28,17 +28,21 @@ fi
# Crear clave para usuario de acceso a los recursos.
if [ -r $CLIENTINITRD ]; then
+ # Recuperar eco de consola si se corta el proceso.
+ trap "stty echo 2>/dev/null" KILL
+ # Obtener clave del teclado sin eco en pantalla.
stty -echo 2>/dev/null
echo -n "Clave del usuario Samba: "
read SAMBAPASS
# Solo se deben aceptar números y letras para la clave de acceso.
- if [ -n "${SAMBAPASS//[a-zA-Z0-9]/}" ]; then
+ if [[ "$SAMBAPASS" =~ [^a-zA-Z0-9] ]]; then
echo
echo "$PROG: Error: la clave solo debe contener caracteres alfanuméricos" >&2
stty echo 2>/dev/null
exit 2
fi
echo
+ # Obtener confirmación clave sin eco en pantalla.
echo -n "Confirmar clave: "
read SAMBAPASS2
echo
@@ -57,7 +61,16 @@ if [ -r $CLIENTINITRD ]; then
# TEMPORAL: solución ticket 554, actualizar cliente en caché (ogLive r3257).
sed -i "s/busybox reboot/reboot/" scripts/ogfunctions
# FIN CÓDIGO TEMPORAL.
+ # Ticket 565, preparar acceso Rsync cliente.
+ echo "$SAMBAPASS" > scripts/passrsync
+ chown root.root scripts/passrsync
+ chmod 400 scripts/passrsync
+ # Generar Initrd del cliente.
find . | cpio -H newc -oa | gzip -9c > $CLIENTINITRD
+ # Ticket 565, preparar acceso Rsync servidor.
+ echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets
+ chown root.root /etc/rsyncd.secrets
+ chmod 600 /etc/rsyncd.secrets
else
echo "$PROG: Aviso: no se ha modificado la clave del cliente."
fi
diff --git a/server/bin/unmountimage b/server/bin/unmountimage
new file mode 100755
index 00000000..812fbdd4
--- /dev/null
+++ b/server/bin/unmountimage
@@ -0,0 +1,47 @@
+#!/bin/bash
+#/**
+# unmountimage
+#@brief Desmonta imagen sincronizable
+#@param 1 imagen
+#@param 2 extension [ img|diff ] opcional, por defecto img
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@version 1.0 - Desmontar imagen sincronizable
+#@author Irina Gomez
+#@date 2013-05-23
+#*/ ##
+BASEDIR=/opt/opengnsys
+REPODIR="$BASEDIR/images"
+REPOLOG=$BASEDIR/log/ogAdmRepo.log
+source $BASEDIR/client/etc/lang.$LANG.conf
+
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ echo -e " $PROG: $MSG_HELP_ogUnmountImage \n" \
+ "$MSG_FORMAT: $PROG nombre_image [ img|diff ] \n" \
+ "base -> $PROG Windows7 \n" \
+ "diff -> $PROG Ubuntu12 diff"
+ exit 0
+fi
+
+[ $# -lt 1 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ]" && exit 1
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+# Comprobamos que imagen la imagen esta montada
+MOUNTDIR="$REPODIR/mount/$1"
+if [ "$2" == "diff" ]; then
+ IMGEXT="diff"
+ MOUNTDIR="$MOUNTDIR.diff"
+else
+ IMGEXT="img"
+fi
+# Si la imaen no está montada me salgo
+df |grep "$MOUNTDIR$" 2>&1 >/dev/null || exit 0
+
+echo -ne UMOUNT_IMAGE "$1" $IMGEXT | /opt/opengnsys/sbin/ogAdmRepoAux
+echo "Los resultado se registran en $REPOLOG. "
diff --git a/server/etc/apache-prev2.4.conf.tmpl b/server/etc/apache-prev2.4.conf.tmpl
new file mode 100644
index 00000000..474ea62a
--- /dev/null
+++ b/server/etc/apache-prev2.4.conf.tmpl
@@ -0,0 +1,12 @@
+# OpenGnSys Web Console template configuration for Apache.
+
+Alias /opengnsys CONSOLEDIR
+
+# Overrides default CentOS php.ini configuration.
+php_value short_open_tag on
+
+<Directory CONSOLEDIR>
+ Options -Indexes FollowSymLinks
+ DirectoryIndex index.php
+</Directory>
+
diff --git a/server/etc/apache.conf.tmpl b/server/etc/apache.conf.tmpl
index ddf8cc97..5613bf11 100644
--- a/server/etc/apache.conf.tmpl
+++ b/server/etc/apache.conf.tmpl
@@ -6,7 +6,8 @@ Alias /opengnsys CONSOLEDIR
php_value short_open_tag on
<Directory CONSOLEDIR>
- Options -Indexes FollowSymLinks
- DirectoryIndex index.php
+ Require all granted
+ Options -Indexes +FollowSymLinks
+ DirectoryIndex index.php
</Directory>
diff --git a/server/tftpboot/menu.lst/templates/00unknown b/server/tftpboot/menu.lst/templates/00unknown
new file mode 100644
index 00000000..e52ffa82
--- /dev/null
+++ b/server/tftpboot/menu.lst/templates/00unknown
@@ -0,0 +1,7 @@
+##NO-TOCAR-ESTA-LINEA Sin-designar
+timeout 1
+title MBR
+keeppxe
+chainloader (hd0)+1
+rootnoverify (hd0)
+boot \ No newline at end of file
diff --git a/server/tftpboot/menu.lst/templates/1 b/server/tftpboot/menu.lst/templates/01
index 9fa2316b..1b52bb54 100644
--- a/server/tftpboot/menu.lst/templates/1
+++ b/server/tftpboot/menu.lst/templates/01
@@ -1,3 +1,4 @@
+##NO-TOCAR-ESTA-LINEA MBR
timeout 1
title MBR
keeppxe
diff --git a/server/tftpboot/menu.lst/templates/11 b/server/tftpboot/menu.lst/templates/11
index 00560c00..92be0dca 100644
--- a/server/tftpboot/menu.lst/templates/11
+++ b/server/tftpboot/menu.lst/templates/11
@@ -1,3 +1,4 @@
+##NO-TOCAR-ESTA-LINEA 1hd-1partition
timeout 1
title FirstHardDisk-FirstPartition
keeppxe
diff --git a/server/tftpboot/menu.lst/templates/12 b/server/tftpboot/menu.lst/templates/12
index 2fb0dfcb..6f46c742 100644
--- a/server/tftpboot/menu.lst/templates/12
+++ b/server/tftpboot/menu.lst/templates/12
@@ -1,3 +1,4 @@
+##NO-TOCAR-ESTA-LINEA 1hd-2partition
timeout 1
title FirstHardDisk-SecondPartition
keeppxe
diff --git a/server/tftpboot/menu.lst/templates/pxeADMIN b/server/tftpboot/menu.lst/templates/19pxeADMIN
index cf58dabf..f9f3246f 100644
--- a/server/tftpboot/menu.lst/templates/pxeADMIN
+++ b/server/tftpboot/menu.lst/templates/19pxeADMIN
@@ -1,3 +1,4 @@
+##NO-TOCAR-ESTA-LINEA ogAdmin
default saved
timeout 1
hiddenmenu
diff --git a/server/tftpboot/menu.lst/templates/ogadmin b/server/tftpboot/menu.lst/templates/ogadmin
deleted file mode 100644
index a8d96209..00000000
--- a/server/tftpboot/menu.lst/templates/ogadmin
+++ /dev/null
@@ -1,34 +0,0 @@
-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/menu.lst/templates/pxe b/server/tftpboot/menu.lst/templates/pxe
index 29687f0e..6abbed39 100644
--- a/server/tftpboot/menu.lst/templates/pxe
+++ b/server/tftpboot/menu.lst/templates/pxe
@@ -1,3 +1,4 @@
+##NO-TOCAR-ESTA-LINEA ogClient
default saved
timeout 1
hiddenmenu