summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2011-12-22 13:38:11 +0000
committerramon <ramongomez@us.es>2011-12-22 13:38:11 +0000
commitc3c7cb3ae6f6600223111a572050f34f2df6fa71 (patch)
tree96fce1db6bf64fee2845d3a48abcbe07d9937562
parent4caea352de0d0a19d4e0a2e2dd04980dd28e6be0 (diff)
Congelar versión 1.0.2 en tags/opengnsys-1.0.2 (modifica #446).opengnsys-1.0.2
git-svn-id: https://opengnsys.es/svn/tags/opengnsys-1.0.2@2405 a21b9725-9963-47de-94b9-378ad31fedc9
-rw-r--r--admin/Database/ogAdmBD-1.0-1.0.2.sql (renamed from admin/Database/ogAdmBD-1.0-1.0.1.sql)0
-rw-r--r--admin/Database/ogAdmBD-1.0pre-1.0.2.sql (renamed from admin/Database/ogAdmBD-1.0pre-1.0.1.sql)0
-rw-r--r--admin/Database/ogAdmBD-1.0pre-1.0.sql21
-rwxr-xr-xadmin/Interface/CambiarAcceso5
-rwxr-xr-xadmin/Interface/CrearImagen15
-rwxr-xr-xadmin/Interface/EjecutarScript32
-rwxr-xr-xadmin/Interface/RestaurarImagen80
-rwxr-xr-xadmin/Interface/getConfiguration55
-rw-r--r--admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg2
-rw-r--r--admin/Sources/Services/ogAdmAgent/Makefile9
-rw-r--r--admin/Sources/Services/ogAdmBoot/Makefile9
-rw-r--r--admin/Sources/Services/ogAdmRepo/Makefile9
-rwxr-xr-xadmin/Sources/Services/ogAdmRepoAux36
-rw-r--r--admin/Sources/Services/ogAdmServer/Makefile9
-rwxr-xr-xadmin/Sources/Services/opengnsys.init106
-rw-r--r--admin/WebConsole/acceso.php5
-rw-r--r--admin/WebConsole/acceso_esp.php7
-rw-r--r--admin/WebConsole/asistentes/AsistenteParticionado.php21
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php41
-rw-r--r--admin/WebConsole/asistentes/includes/asistentes/formParticionado.php177
-rw-r--r--admin/WebConsole/asistentes/jscripts/asistentes.js284
-rw-r--r--admin/WebConsole/gestores/gestor_pxe.php29
-rw-r--r--admin/WebConsole/gestores/gestor_pxe_grub4dos.php47
-rw-r--r--admin/WebConsole/idiomas/javascripts/eng/ejecutarprocedimientos_eng.js8
-rw-r--r--admin/WebConsole/idiomas/php/cat/configuraciones_cat.php12
-rw-r--r--admin/WebConsole/idiomas/php/eng/configuraciones_eng.php44
-rw-r--r--admin/WebConsole/idiomas/php/esp/configuraciones_esp.php34
-rw-r--r--admin/WebConsole/includes/ConfiguracionesParticiones.php358
-rw-r--r--admin/WebConsole/principal/aulas.php9
l---------[-rw-r--r--]admin/WebConsole/principal/boot.php218
-rw-r--r--admin/WebConsole/principal/boot_pxelinux.php217
-rw-r--r--admin/WebConsole/principal/configuraciones.php80
-rw-r--r--admin/WebConsole/principal/verlogseguimiento.php2
-rw-r--r--admin/WebConsole/propiedades/propiedades_ordenadores.php2
-rw-r--r--client/boot-tools/INSTALL.es.txt43
-rw-r--r--client/boot-tools/boottoolsfunctions.lib518
-rwxr-xr-xclient/boot-tools/boottoolsgenerator.sh134
-rw-r--r--client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions479
-rwxr-xr-xclient/boot-tools/clientstructure/etc/profile.d/loadenviron.sh87
-rwxr-xr-xclient/boot-tools/clientstructure/root/CompileSoftware.sh30
-rwxr-xr-xclient/boot-tools/clientstructure/root/ConfFS.sh24
-rwxr-xr-xclient/boot-tools/clientstructure/root/InstallSoftware.sh62
-rwxr-xr-xclient/boot-tools/clientstructure/root/qemu.sh9
-rw-r--r--client/boot-tools/includes/etc/apt/sources.list.debian (renamed from client/boot-tools/clientstructure/etc/apt/sources.list.debian)0
-rw-r--r--client/boot-tools/includes/etc/apt/sources.list.ubuntu (renamed from client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu)0
-rw-r--r--client/boot-tools/includes/etc/environment (renamed from client/boot-tools/clientstructure/etc/environment)0
-rw-r--r--client/boot-tools/includes/etc/fstab (renamed from client/boot-tools/clientstructure/etc/fstab)0
-rwxr-xr-xclient/boot-tools/includes/etc/initramfs-tools/hooks/oghooks (renamed from client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks)0
-rw-r--r--client/boot-tools/includes/etc/initramfs-tools/modules (renamed from client/boot-tools/clientstructure/etc/initramfs-tools/modules)0
-rw-r--r--client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions669
-rwxr-xr-xclient/boot-tools/includes/etc/initramfs-tools/scripts/oginit (renamed from client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit)65
-rw-r--r--client/boot-tools/includes/etc/inittab (renamed from client/boot-tools/clientstructure/etc/inittab)0
-rw-r--r--client/boot-tools/includes/etc/modprobe.d/blacklist-framebuffer.conf (renamed from client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf)0
-rw-r--r--client/boot-tools/includes/etc/mtab (renamed from client/boot-tools/clientstructure/etc/mtab)0
-rw-r--r--client/boot-tools/includes/etc/network/interfaces (renamed from client/boot-tools/clientstructure/etc/network/interfaces)0
-rwxr-xr-xclient/boot-tools/includes/etc/profile.d/loadenviron.sh4
-rw-r--r--client/boot-tools/includes/etc/securetty.template142
-rw-r--r--client/boot-tools/includes/etc/ssh/ssh_config (renamed from client/boot-tools/clientstructure/etc/ssh/ssh_config)0
-rw-r--r--client/boot-tools/includes/etc/ssh/sshd_config (renamed from client/boot-tools/clientstructure/etc/ssh/sshd_config)0
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/box.pngbin0 -> 870 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/bullet.pngbin0 -> 296 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/entry.pngbin0 -> 350 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/lock.pngbin0 -> 1896 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/logoopengnsys.pngbin0 -> 13331 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.plymouth11
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.pngbin0 -> 13331 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.script203
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_bar.pngbin0 -> 285 bytes
-rw-r--r--client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_box.pngbin0 -> 285 bytes
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh19
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsFsLocales.sh (renamed from client/boot-tools/clientstructure/root/ReconfigureLocales.sh)4
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh124
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsFsPostconfiguration.sh5
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsInitrdGenerate.sh (renamed from client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh)4
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh32
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareInstall.sh69
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows14
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsSshClient.sh (renamed from client/boot-tools/clientstructure/root/generateSshKeysClient.sh)4
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/boottoolsSshServer.sh (renamed from client/boot-tools/clientstructure/root/importSshKeys.sh)3
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Xwindow10
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Zinitrd3
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic13
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning16
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.compile10
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.compresor12
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.local21
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.remote9
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.monitoring12
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.networking14
-rw-r--r--client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.testing4
-rwxr-xr-xclient/boot-tools/includes/usr/bin/boot-tools/qemu.sh12
-rwxr-xr-xclient/boot-tools/includes/var/cache/apt/archivesOG/partclone_0.2.7-1drbl_i386.debbin0 -> 5023908 bytes
-rwxr-xr-xclient/boot-tools/includes/var/cache/apt/archivesOG/partclone_0.2.8_i386.debbin0 -> 5025002 bytes
-rw-r--r--client/boot-tools/includes/var/cache/apt/archivesOG/xvesa.debbin0 -> 541364 bytes
-rw-r--r--client/boot-tools/includes/var/lib/locales/supported.d/local (renamed from client/boot-tools/clientstructure/var/lib/locales/supported.d/local)0
-rw-r--r--client/boot-tools/kernelParameterOG.es.txt48
-rwxr-xr-xclient/boot-tools/ogClientGeneratorV2.sh161
-rw-r--r--client/boot-tools/ogClientManager.lib725
-rw-r--r--client/boot-tools/ogInstaller.lib958
-rwxr-xr-xclient/engine/Boot.lib204
-rwxr-xr-xclient/engine/Disk.lib119
-rwxr-xr-xclient/engine/File.lib55
-rwxr-xr-xclient/engine/FileSystem.lib91
-rwxr-xr-xclient/engine/Image.lib10
-rwxr-xr-xclient/engine/Inventory.lib37
-rwxr-xr-xclient/engine/Net.lib119
-rwxr-xr-xclient/engine/PostConfEAC.lib141
-rwxr-xr-xclient/engine/Protocol.lib35
-rwxr-xr-xclient/engine/Registry.lib9
-rwxr-xr-xclient/engine/System.lib26
-rw-r--r--client/engine/correspondencia-api.txt227
-rwxr-xr-xclient/shared/bin/poweroffconf59
-rwxr-xr-xclient/shared/etc/init/default.sh35
-rwxr-xr-xclient/shared/etc/preinit/default.sh2
-rwxr-xr-xclient/shared/etc/preinit/loadenviron.sh9
-rwxr-xr-xclient/shared/etc/preinit/mountrepo.sh9
-rwxr-xr-xclient/shared/etc/preinit/poweroff.sh35
-rw-r--r--client/shared/lib/httpd/10-cgi.conf18
-rw-r--r--client/shared/lib/httpd/LogCommand.sh35
-rw-r--r--client/shared/lib/httpd/LogSession.sh31
-rw-r--r--client/shared/lib/httpd/bandwidth.sh12
-rw-r--r--client/shared/lib/httpd/httpd-log.sh15
-rw-r--r--client/shared/lib/httpd/httpd-menu.sh14
-rwxr-xr-xclient/shared/lib/httpd/lighttpd.conf167
-rw-r--r--client/shared/lib/httpd/oglive.css11
l---------[-rwxr-xr-x]client/shared/scripts/bootLinux36
-rwxr-xr-xclient/shared/scripts/bootOs12
l---------[-rwxr-xr-x]client/shared/scripts/bootWindows31
-rwxr-xr-xclient/shared/scripts/cloneRemoteFromMaster4
-rwxr-xr-xclient/shared/scripts/configureOs20
-rwxr-xr-xclient/shared/scripts/createImage47
-rwxr-xr-xclient/shared/scripts/deployImage37
-rwxr-xr-xclient/shared/scripts/listPartitions3
-rwxr-xr-xclient/shared/scripts/restoreImage12
-rwxr-xr-xclient/shared/scripts/runAplicationX.sh8
-rwxr-xr-xclient/shared/scripts/runhttplog.sh30
-rwxr-xr-xclient/shared/scripts/updateBootCache55
-rwxr-xr-xclient/shared/scripts/updateCache78
-rw-r--r--doc/CHANGELOG.es.txt54
-rw-r--r--doc/VERSION.txt2
-rwxr-xr-xinstaller/opengnsys_installer.sh571
-rwxr-xr-xinstaller/opengnsys_uninstall.sh8
-rwxr-xr-xinstaller/opengnsys_update.sh142
-rwxr-xr-xrepoman/bin/opengnsys.cron19
-rwxr-xr-xrepoman/bin/sendFileMcast12
-rwxr-xr-xserver/bin/listclientmode29
-rwxr-xr-xserver/bin/setclientmode80
-rwxr-xr-xserver/bin/setsmbpass59
-rw-r--r--server/etc/dhcpd.conf.tmpl2
-rw-r--r--server/etc/exports.tmpl3
-rw-r--r--server/etc/logrotate.tmpl24
-rw-r--r--server/etc/smb-og.conf.tmpl19
-rw-r--r--server/tftpboot/NetbootPXE.es.txt15
-rw-r--r--server/tftpboot/menu.lst/templates/ogadmin34
-rw-r--r--server/tftpboot/menu.lst/templates/pxe12
-rw-r--r--server/tftpboot/menu.lst/templates/pxeADMIN30
156 files changed, 5379 insertions, 4403 deletions
diff --git a/admin/Database/ogAdmBD-1.0-1.0.1.sql b/admin/Database/ogAdmBD-1.0-1.0.2.sql
index 30798763..30798763 100644
--- a/admin/Database/ogAdmBD-1.0-1.0.1.sql
+++ b/admin/Database/ogAdmBD-1.0-1.0.2.sql
diff --git a/admin/Database/ogAdmBD-1.0pre-1.0.1.sql b/admin/Database/ogAdmBD-1.0pre-1.0.2.sql
index 523c1ecf..523c1ecf 100644
--- a/admin/Database/ogAdmBD-1.0pre-1.0.1.sql
+++ b/admin/Database/ogAdmBD-1.0pre-1.0.2.sql
diff --git a/admin/Database/ogAdmBD-1.0pre-1.0.sql b/admin/Database/ogAdmBD-1.0pre-1.0.sql
deleted file mode 100644
index 65f0c4ff..00000000
--- a/admin/Database/ogAdmBD-1.0pre-1.0.sql
+++ /dev/null
@@ -1,21 +0,0 @@
-SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
-
---
--- Base de datos: `ogAdmBD`
---
-
-
-ALTER TABLE `aulas` CHANGE `modp2p` `modp2p` ENUM( 'seeder', 'peer', 'leecher' ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT 'peer';
-
-ALTER TABLE `aulas` CHANGE `velmul` `velmul` SMALLINT( 6 ) NOT NULL DEFAULT '70';
-
-
-ALTER TABLE `asistentes` DROP PRIMARY KEY ,
-ADD PRIMARY KEY ( `idcomando` , `descripcion` ) ;
-
-UPDATE `ogAdmBD`.`comandos` SET `activo` = '0' WHERE `comandos`.`idcomando` =10;
-
-UPDATE `ogAdmBD`.`asistentes` SET `idcomando` = '8' ;
-
-
-UPDATE `ogAdmBD`.`itemboot` SET `append` = 'APPEND initrd=ogclient/oginitrd.img ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true' WHERE `itemboot`.`label` = 'ogClientAdmin';
diff --git a/admin/Interface/CambiarAcceso b/admin/Interface/CambiarAcceso
index 210b3d80..64516e4f 100755
--- a/admin/Interface/CambiarAcceso
+++ b/admin/Interface/CambiarAcceso
@@ -44,6 +44,9 @@ umount $OGIMG
ogEcho info "$PROG: Montar repositorio $REPO por $PROTO en modo $1"
case "$PROTO" in
nfs) mount -t nfs $REPOIP:$OGIMG $OGIMG -o $MODE ;;
- smb) mount -t cifs //$REPOIP/ogimages $OGIMG -o $MODE,serverino,acl,username=opengnsys,password=og ;;
+ 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
esac
diff --git a/admin/Interface/CrearImagen b/admin/Interface/CrearImagen
index abc6edea..1d59da29 100755
--- a/admin/Interface/CrearImagen
+++ b/admin/Interface/CrearImagen
@@ -28,11 +28,24 @@
#Códigos de error de la funcion ogCreateImage
+TIME1=$SECONDS
+#TODO: revisar las variables.
+OGLOGSESSION="${OGLOGSESSION=:-/tmp/session.log}"
+OGLOGCOMMAND="${OGLOGCOMMAND=:-/tmp/command.log}"
+OGLOGSESSION="/tmp/session.log"
+OGLOGCOMMAND="/tmp/command.log"
+
+echo " " > $OGLOGSESSION
+echo " " > $OGLOGCOMMAND
+echo " " > ${OGLOGCOMMAND}.tmp
# Registro de ejecución
echo $* >> $OGLOGFILE
+echo "$*" &>> $OGLOGSESSION | $(tail -n 1 $OGLOGSESSION >> $OGLOGFILE)
+
+
# Solo ejecutable por OpenGnSys Client.
PATH=$PATH:$(dirname $0)
PROG=$(basename $0)
@@ -69,7 +82,7 @@ fi
if [ -f createImage$ogengine ]; then
createImage$ogengine "$1" "$2" "$REPO" /"$3" &>> $OGLOGFILE
else
- createImage "$1" "$2" "$REPO" /"$3" &>> $OGLOGFILE
+ createImage "$1" "$2" "$REPO" /"$3" &>> $OGLOGCOMMAND
fi
RETVAL=$?
diff --git a/admin/Interface/EjecutarScript b/admin/Interface/EjecutarScript
index 3de64815..431164b9 100755
--- a/admin/Interface/EjecutarScript
+++ b/admin/Interface/EjecutarScript
@@ -1,21 +1,33 @@
#!/bin/bash
+TIME1=$SECONDS
-echo -e >> $OGLOGFILE
-echo "Contenido de la ejecucion: *****************************" >> $OGLOGFILE
+OGLOGSESSION="${OGLOGSESSION=:-/tmp/session.log}"
+OGLOGCOMMAND="${OGLOGCOMMAND=:-/tmp/command.log}"
+
+OGLOGSESSION="/tmp/session.log"
+OGLOGCOMMAND="/tmp/command.log"
+
+echo " " > $OGLOGSESSION
+echo " " > $OGLOGCOMMAND
+echo " " > ${OGLOGCOMMAND}.tmp
+
+
+echo "START JOBS ***************************** " | tee -a $OGLOGSESSION $OGLOGFILE
+
+echo "Instrucciones a ejecutar: *****************************" >> $OGLOGFILE
cat $1 >> $OGLOGFILE
-echo -e >> $OGLOGFILE
-echo -e >> $OGLOGFILE
-echo "Salida: *****************************" >> $OGLOGFILE
+
+echo "Salida de las instrucciones: *****************************" >> $OGLOGFILE
chmod +x $1
-$1 &>> $OGLOGFILE
+$1 &>> $OGLOGCOMMAND
RETVAL=$?
echo $RETVAL &>> $OGLOGFILE
-
+TIME=$[SECONDS-TIME1]
if [ $RETVAL == 0 ]
then
- rm $OGLOGFILE
- touch $OGLOGFILE
+ echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
else
- echo $RETVAL &>> $OGLOGFILE
+ echo "ERROR no operacion no realizada" | tee -a $OGLOGSESSION $OGLOGFILE
fi
+echo "END JOBS ***************************** " | tee -a $OGLOGSESSION $OGLOGFILE
exit $RETVAL \ No newline at end of file
diff --git a/admin/Interface/RestaurarImagen b/admin/Interface/RestaurarImagen
index 90299ba9..2b20d054 100755
--- a/admin/Interface/RestaurarImagen
+++ b/admin/Interface/RestaurarImagen
@@ -25,17 +25,34 @@
#@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
+#@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
+
+
+TIME1=$SECONDS
+OGLOGSESSION="${OGLOGSESSION=:-/tmp/session.log}"
+OGLOGCOMMAND="${OGLOGCOMMAND=:-/tmp/command.log}"
+OGLOGSESSION="/tmp/session.log"
+OGLOGCOMMAND="/tmp/command.log"
+
+echo " " > $OGLOGSESSION
+echo " " > $OGLOGCOMMAND
+echo " " > ${OGLOGCOMMAND}.tmp
# Registro de ejecución
-echo $* >> $OGLOGFILE
+echo $* >> $OGLOGSESSION
+echo "$*" &>> $OGLOGSESSION | $(tail -n 1 $OGLOGSESSION >> $OGLOGFILE)
+
+
+echo "[1] Iniciando $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
# Si el origen(pariticion) esta bloqueada salir.
-echo "TODO comprobando si esta bloqueado el $1 $2" &>> $OGLOGFILE
+echo "TODO comprobando si esta bloqueado el $1 $2" | tee -a $OGLOGSESSION $OGLOGFILE
#if ogIsLocked $1 $2; then
# ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION, $1 $2"
# exit $?
@@ -50,8 +67,8 @@ REPO=${4:-"REPO"}
if [ "$REPO" == "CACHE" ]
then
- echo "Iniciando un ogRestoreImage CACHE /$3 $1 $2" &>> $OGLOGFILE
- ogRestoreImage CACHE /"$3" "$1" "$2" &>> $OGLOGFILE
+ echo "[2] Iniciando un ogRestoreImage CACHE $3 $1 $2" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogRestoreImage CACHE "$3" "$1" "$2" &>> $OGLOGCOMMAND
RETVAL=$?
fi
@@ -59,38 +76,49 @@ fi
if [ "$REPO" == "REPO" ]
then
- echo "updateCache REPO /$3.img $5 $6" &>> $OGLOGFILE
- updateCache REPO /$3.img $5 $6 &>> $OGLOGFILE
+ 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 " [ ] Duracion del subproceso updateCache $[TIME2/60]m $[TIME2%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
case $RETVAL in
- 0)
- echo "updateCache (correcto); re realiza ogRestoreImage REPO /$3 $1 $2 UNICAST" &>> $OGLOGFILE
- ogRestoreImage CACHE /"$3" "$1" "$2" &>> $OGLOGFILE
+ 0)
+ echo "[50] updateCache (correcto)" | tee -a $OGLOGSESSION $OGLOGFILE
+ echo "[55] Restaurando la imagen desde la cache con comando: ogRestoreImage CACHE $3 $1 $2 UNICAST" | tee -a $OGLOGSESSION $OGLOGFILE
+ TIME3=$SECONDS
+ ogRestoreImage CACHE "$3" "$1" "$2" &> $OGLOGCOMMAND
RETVAL=$?
+ TIME3=$[SECONDS-TIME3]
+ echo " [ ] Duracion del subproceso ogRestoreImage CACHE $[TIME3/60]m $[TIME3%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
;;
15)
- echo "updateCache(no hay CACHE); se realiza ogRestoreImage REPO /$3 $1 $2 UNICAST" &>> $OGLOGFILE
- ogRestoreImage REPO /"$3" "$1" "$2" &>> $OGLOGFILE
- RETVAL=$?
+ echo "[50] updateCache(no hay CACHE); se realiza ogRestoreImage REPO $3 $1 $2 UNICAST" | tee -a $OGLOGSESSION $OGLOGFILE
+ echo "[55] Se restaura la imagen directamente desde el REPO: ogRestoreImage REPO $3 $1 $2 UNICAST" | tee -a $OGLOGSESSION $OGLOGFILE
+ TIME3=$SECONDS
+ ogRestoreImage REPO "$3" "$1" "$2" &> $OGLOGCOMMAND
+ RETVAL=$?
;;
16)
- echo "updateCache(no hay espacio sufiente en la CACHE), Se realiza ogRestoreImage REPO /$3 $1 $2 UNICAST" &>> $OGLOGFILE
- ogRestoreImage REPO /"$3" "$1" "$2" &>> $OGLOGFILE
+ echo "[50] updateCache(no hay espacio sufiente en la CACHE), Se realiza ogRestoreImage REPO $3 $1 $2 UNICAST" | tee -a $OGLOGSESSION $OGLOGFILE
+ TIME3=$SECONDS
+ ogRestoreImage REPO "$3" "$1" "$2" &> $OGLOGCOMMAND
RETVAL=$?
+ TIME3=$[SECONDS-TIME3]
+ echo " [ ] Duracion del subproceso ogRestoreImage REPO $[TIME3/60]m $[TIME3%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
;;
- esac
+ esac
fi
if [ $RETVAL == 0 ]
then
- echo "Iniciando la Configuracion del Sistema Restaurado" &>> $OGLOGFILE
- configureOs $1 $2
-fi
-if [ $RETVAL == 0 ]
-then
- rm $OGLOGFILE
- touch $OGLOGFILE
-else
- echo $RETVAL &>> $OGLOGFILE
+ echo "[90] Iniciando la Configuracion del Sistema Restaurado" | tee -a $OGLOGSESSION $OGLOGFILE
+ configureOs "$1" "$2"
fi
+
+TIME=$[SECONDS-TIME1]
+echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
+
+
exit $RETVAL
+
diff --git a/admin/Interface/getConfiguration b/admin/Interface/getConfiguration
index 628c9846..a69a041a 100755
--- a/admin/Interface/getConfiguration
+++ b/admin/Interface/getConfiguration
@@ -6,40 +6,35 @@
# 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
#_______________________________________________________________________________________________________________________________
-cfg=$(listPrimaryPartitions 1)
-particiones=$(echo $cfg | awk '{n=split($0,sep," ");print n}')
-cfg=""
-for ((par=1;par<=$particiones;par++));
- do
- # Tipo de partición o sistema de fichero
- fsi=$(getFsType 1 $par 2>/dev/null)
- fsi=${fsi:-"EMPTY"}
- # Tamaño de la particón
- tam=$(ogGetPartitionSize 1 $par 2>/dev/null)
- tam=${tam:-"0"}
- # Código de la partición
- cod=$(ogFsToId $fsi)
+particiones=$(listPartitions 1 | wc -w) # Incluir todas las particiones
+cfg="0::::$(ogGetDiskSize 1);" # e información de disco (partición 0)
-
- if [ $cod == 82 ]; then
- soi=" "
- else
- # Sistema de fichero instalado
- soi=$(getOsVersion 1 $par 2>/dev/null)
- soi=$(echo $soi | awk '{split($0,sep,":"); print sep[2]}')
- fi
-
- cfg=$(echo $cfg$par":"$cod":"$fsi":"$soi":"$tam";")
+for ((par=1;par<=$particiones;par++));
+do
+ # Tipo de partición o sistema de fichero
+ fsi=$(getFsType 1 $par 2>/dev/null)
+ fsi=${fsi:-"EMPTY"}
+ # Código de la partición
+ cod=$(ogFsToId $fsi)
+ # Tamaño de la particón
+ tam=$(ogGetPartitionSize 1 $par 2>/dev/null)
+ tam=${tam:-"0"}
+ # Sistema de fichero instalado
+ if [ $cod == 82 ]; then
+ soi=" "
+ else
+ soi=$(getOsVersion 1 $par 2>/dev/null | cut -f2 -d:)
+ fi
+ cfg="$cfg$par:$cod:$fsi:$soi:$tam;"
done
echo $cfg | awk '{
- n=split($0,sep,";");
- for(i=1;i<n;i++){
- split(sep[i],dua,":");
- printf("par=%s\tcpt=%s\tfsi=%s\tsoi=%s\ttam=%s\n",dua[1],dua[2],dua[3],dua[4],dua[5]);
- }
-
- }'
+ n=split($0,sep,";");
+ for(i=1;i<n;i++){
+ split(sep[i],dua,":");
+ printf("par=%s\tcpt=%s\tfsi=%s\tsoi=%s\ttam=%s\n",dua[1],dua[2],dua[3],dua[4],dua[5]);
+ }
+ }'
diff --git a/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg b/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg
index 21b2b9e8..b41b33f1 100644
--- a/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg
+++ b/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg
@@ -2,5 +2,5 @@ ServidorAdm=SERVERIP
PUERTO=2008
PATHINTERFACE=/opt/opengnsys/interfaceAdm
UrlMenu=OPENGNSYSURL/varios/menubrowser.php
-UrlMsg=OPENGNSYSURL/varios/msgbrowser.php
+UrlMsg=http://localhost/cgi-bin/httpd-log.sh
diff --git a/admin/Sources/Services/ogAdmAgent/Makefile b/admin/Sources/Services/ogAdmAgent/Makefile
index 3b483e85..6a7a180a 100644
--- a/admin/Sources/Services/ogAdmAgent/Makefile
+++ b/admin/Sources/Services/ogAdmAgent/Makefile
@@ -8,11 +8,16 @@ INSTALL_DIR := /opt/opengnsys
# Opciones de compilacion
#CFLAGS := -O0 -g -Wall -I../../Includes # Depuracion
-CFLAGS := -O3 -Wall -I../../Includes # Optimizacion
+CFLAGS := -O3 -Wall -I../../Includes # Depuracion
CPPFLAGS := $(CFLAGS)
# Opciones de linkado
-LDFLAGS := -L/usr/lib -L/usr/lib/mysql -lpthread -lmysqlclient
+LBIT=$(shell getconf LONG_BIT)
+ifeq ($(LBIT), 64)
+ LDFLAGS := -L/usr/lib64 -L/usr/lib64/mysql -lpthread -lmysqlclient
+else
+ LDFLAGS := -L/usr/lib -L/usr/lib/mysql -lpthread -lmysqlclient
+endif
# Ficheros objetos
OBJS := ../../Includes/Database.o sources/ogAdmAgent.o
diff --git a/admin/Sources/Services/ogAdmBoot/Makefile b/admin/Sources/Services/ogAdmBoot/Makefile
index 79b30104..a8d9da0e 100644
--- a/admin/Sources/Services/ogAdmBoot/Makefile
+++ b/admin/Sources/Services/ogAdmBoot/Makefile
@@ -8,11 +8,16 @@ INSTALL_DIR := /opt/opengnsys
# Opciones de compilacion
#CFLAGS := -O0 -g -Wall -I../includes # Depuracion
-CFLAGS := -O3 -Wall -I../includes # Optimizacion
+CFLAGS := -O3 -Wall -I../includes # Depuracion
CPPFLAGS := $(CFLAGS)
# Opciones de linkado
-LDFLAGS := -L/usr/lib -L/usr/lib/mysql -lpthread -lmysqlclient
+LBIT=$(shell getconf LONG_BIT)
+ifeq ($(LBIT), 64)
+ LDFLAGS := -L/usr/lib64 -L/usr/lib64/mysql -lpthread -lmysqlclient
+else
+ LDFLAGS := -L/usr/lib -L/usr/lib/mysql -lpthread -lmysqlclient
+endif
# Ficheros objetos
OBJS := ../includes/Database.o sources/ogAdmBoot.o
diff --git a/admin/Sources/Services/ogAdmRepo/Makefile b/admin/Sources/Services/ogAdmRepo/Makefile
index 903467f4..b7b9a592 100644
--- a/admin/Sources/Services/ogAdmRepo/Makefile
+++ b/admin/Sources/Services/ogAdmRepo/Makefile
@@ -8,11 +8,16 @@ INSTALL_DIR := /opt/opengnsys
# Opciones de compilacion
#CFLAGS := -O0 -g -Wall -I../../Includes # Depuracion
-CFLAGS := -O3 -Wall -I../../Includes # Optimizacion
+CFLAGS := -O3 -Wall -I../../Includes # Depuracion
CPPFLAGS := $(CFLAGS)
# Opciones de linkado
-LDFLAGS := -L/usr/lib -L/usr/lib/mysql -lpthread -lmysqlclient
+LBIT := $(shell getconf LONG_BIT)
+ifeq ($(LBIT), 64)
+ LDFLAGS := -L/usr/lib64 -L/usr/lib64/mysql -lpthread -lmysqlclient
+else
+ LDFLAGS := -L/usr/lib -L/usr/lib/mysql -lpthread -lmysqlclient
+endif
# Ficheros objetos
OBJS := ../../Includes/Database.o sources/ogAdmRepo.o
diff --git a/admin/Sources/Services/ogAdmRepoAux b/admin/Sources/Services/ogAdmRepoAux
index 9dd4b0bb..21c0e4f1 100755
--- a/admin/Sources/Services/ogAdmRepoAux
+++ b/admin/Sources/Services/ogAdmRepoAux
@@ -11,11 +11,17 @@ PARM=`cat`
BASEDIR=/opt/opengnsys
+PATH=$PATH:$BASEDIR/bin
REPONAME=ogAdmRepo
REPOLOG=$BASEDIR/log/$REPONAME.log
MCASTLOGBASE=$BASEDIR/log/mcastlog
MCASTLOG=$MCASTLOGBASE/ogAdmRepoMcast.`date +%Y%m%d-%H%M%S`
+# Añade registro de incidencias.
+function echolog () {
+ date +"%Y%m%d-%H%M%S $*" >> $REPOLOG
+}
+
mkdir -p $MCASTLOGBASE
PARM1=$(echo $PARM | cut -f1 -d" ")
@@ -24,28 +30,26 @@ PARM3=$(echo $PARM | cut -f3 -d" ")
PARM4=$(echo $PARM | cut -f4 -d" ")
-case $PARM1 in
+case "$PARM1" in
START_MULTICAST)
#1 START_MULTICAST
#2 fichero a enviar
#3 opciones de multicast
- FILE=/opt/opengnsys/images$PARM2
- MCASTOPT=$PARM3
- echo `date +%Y%m%d-%H%M%S` "/opt/opengnsys/bin/sendFileMcast $FILE $MCASTOPT" >> $REPOLOG
- /opt/opengnsys/bin/sendFileMcast $FILE $MCASTOPT &>> $MCASTLOG
+ FILE="$PARM2"
+ MCASTOPT="$PARM3"
+ echolog "Ejecutar $(which sendFileMcast) $FILE $MCASTOPT"
+ sendFileMcast $FILE $MCASTOPT &>> $MCASTLOG
case $? in
- 1)
- echo `date +%Y%m%d-%H%M%S` Parametros insuficientes >> $REPOLOG
- ;;
- 2)
- echo `date +%Y%m%d-%H%M%S` Fichero no accesible >> $REPOLOG
- ;;
- 3)
- echo `date +%Y%m%d-%H%M%S` sesion multicast no valida >> $REPOLOG
- ;;
+ 1) echolog "Parametros insuficientes"
+ return 1 ;;
+ 2) echolog "Fichero no accesible"
+ return 2 ;;
+ 3) echolog "Sesion multicast no valida"
+ return 3 ;;
esac
;;
default)
- echo "Solicitud con parametros: - $PARM - no realizada: No registrada o con errores" >> $REPOLOG
+ echolog "Solicitud con parametros \"$PARM\" no realizada, no registrada o con errores"
;;
-esac \ No newline at end of file
+esac
+
diff --git a/admin/Sources/Services/ogAdmServer/Makefile b/admin/Sources/Services/ogAdmServer/Makefile
index ae5a5893..d2312ddf 100644
--- a/admin/Sources/Services/ogAdmServer/Makefile
+++ b/admin/Sources/Services/ogAdmServer/Makefile
@@ -8,11 +8,16 @@ INSTALL_DIR := /opt/opengnsys
# Opciones de compilacion
#CFLAGS := -O0 -g -Wall -I../../Includes # Depuracion
-CFLAGS := -O3 -Wall -I../../Includes # Optimizacion
+CFLAGS := -O3 -Wall -I../../Includes # Depuracion
CPPFLAGS := $(CFLAGS)
# Opciones de linkado
-LDFLAGS := -L/usr/lib -L/usr/lib/mysql -lpthread -lmysqlclient
+LBIT := $(shell getconf LONG_BIT)
+ifeq ($(LBIT), 64)
+ LDFLAGS := -L/usr/lib64 -L/usr/lib64/mysql -lpthread -lmysqlclient
+else
+ LDFLAGS := -L/usr/lib -L/usr/lib/mysql -lpthread -lmysqlclient
+endif
# Ficheros objetos
OBJS := ../../Includes/Database.o sources/ogAdmServer.o
diff --git a/admin/Sources/Services/opengnsys.init b/admin/Sources/Services/opengnsys.init
index a195301e..6dca623c 100755
--- a/admin/Sources/Services/opengnsys.init
+++ b/admin/Sources/Services/opengnsys.init
@@ -1,12 +1,4 @@
-#! /bin/sh
-
-##########1.0######################################################################################################
-####### Script de arranque de los servicios de OpenGnSys: Servidor ogAdmServer, Servidor de repositorio ogAdmRepo,
-####### Tracker Bittorrent y seeder de imagenes por Bittorrent
-####### autor: jcxifre <jcxifre@unizar.es>
-####### basado en http://www.epilogue.org/~xef4/start-stop-example
-##################################################################################################################
-
+#!/bin/bash
### BEGIN INIT INFO
# Provides: opengnsys
@@ -72,21 +64,41 @@ BTTRACKPID="/var/run/bttrack.pid"
BTSEEDERPID="/var/run/btseeder.pid"
-set -e
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin:/usr/bin"
# Read config file if it is present.
if [ -r /etc/default/opengnsys ]
then
- . /etc/default/opengnsys
+ source /etc/default/opengnsys
fi
+# Configuración de arranque según la distribución Linux usada.
+config() {
+ OSDISTRIB=$(lsb_release -is 2>/dev/null)
+ case "$OSDISTRIB" in
+ Ubuntu)
+ INITFUNCTIONS=/lib/lsb/init-functions
+ DAEMONSTART="start-stop-daemon --start --quiet --background --exec"
+ EXTRAOPTS="--"
+ DAEMONSTOP="start-stop-daemon --stop --quiet --oknodo --exec"
+ ACTIONMSG="log_daemon_msg"
+ SUCCESSMSG="log_end_msg 0"
+ FAILMSG="log_end_msg 1"
+ ;;
+ *) echo "Distribución Linux desconcocida o no soportada."
+ exit ;;
+ esac
+ if [ -r $INITFUNCTIONS ]; then
+ source $INITFUNCTIONS
+ fi
+}
+
arranca_demonios() {
if [ $RUN_OGADMSERVER = "yes" ]
then
- echo -n "Iniciando demonio: "$SERVERNAME
- start-stop-daemon --start --quiet --background --exec $SERVERDAEMON -- $SERVERDAEMON_OPTIONS
- echo "."
+ $ACTIONMSG "Iniciando demonio: $SERVERNAME"
+ $DAEMONSTART $SERVERDAEMON $EXTRAOPTS $SERVERDAEMON_OPTIONS
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
fi
if [ $RUN_OGADMSERVER = "yes" ] && [ $RUN_OGADMREPO = "yes" ]
then
@@ -94,32 +106,32 @@ arranca_demonios() {
fi
if [ $RUN_OGADMREPO = "yes" ]
then
- echo -n "Iniciando demonio: "$REPONAME
- start-stop-daemon --start --quiet --background --exec $REPODAEMON -- $REPODAEMON_OPTIONS
- echo "."
+ $ACTIONMSG "Iniciando demonio: $REPONAME"
+ $DAEMONSTART $REPODAEMON $EXTRAOPTS $REPODAEMON_OPTIONS
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
############ ADV
- echo -n "Iniciando demonio: "$REPOAUXNAME
- faucet $REPOAUXPORT --daemon --in bash -c "$REPOAUXDAEMON"
- echo "."
- ############ ADV
+ $ACTIONMSG "Iniciando demonio: $REPOAUXNAME"
+ faucet $REPOAUXPORT --daemon --in bash -c "$REPOAUXDAEMON"
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
+ ############ ADV
fi
if [ $RUN_OGADMAGENT = "yes" ]
then
- echo -n "Iniciando demonio: "$AGENTNAME $AGENTDAEMON
- start-stop-daemon --start --quiet --background --exec $AGENTDAEMON -- $AGENTDAEMON_OPTIONS
- echo "."
+ $ACTIONMSG "Iniciando demonio: $AGENTNAME"
+ $DAEMONSTART $AGENTDAEMON $EXTRAOPTS $AGENTDAEMON_OPTIONS
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
fi
if [ $RUN_BTTRACKER = "yes" ]
then
- echo -n "Iniciando demonio: "$BTTRACK
+ $ACTIONMSG "Iniciando demonio: $BTTRACK"
start-stop-daemon --make-pidfile --pidfile $BTTRACKPID --start --quiet --background --exec $BTTRACK -- $BTTRACK_OPTIONS
- echo "."
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
fi
if [ $RUN_BTSEEDER = "yes" ]
then
- echo -n "Iniciando demonio: "$BTSEEDER
+ $ACTIONMSG "Iniciando demonio: $BTSEEDER"
start-stop-daemon --make-pidfile --pidfile $BTSEEDERPID --start --quiet --background --exec $BTSEEDER -- $BTTORRENTSDIR
- echo "."
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
fi
}
@@ -127,33 +139,36 @@ arranca_demonios() {
para_demonios() {
if [ -e $BTSEEDERPID ]
then
- echo -n "Parando demonio: "$BTSEEDER
+ $ACTIONMSG "Parando demonio: $BTSEEDER"
start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $BTSEEDERPID
- echo "."
- rm $BTSEEDERPID > /dev/null
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
+ rm -f $BTSEEDERPID
fi
if [ -e $BTTRACKPID ]
then
- echo -n "Parando demonio: "$BTTRACK
+ $ACTIONMSG "Parando demonio: $BTTRACK"
start-stop-daemon --stop --quiet --oknodo --pidfile $BTTRACKPID
- echo "."
- rm $BTTRACKPID > /dev/null
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
+ rm -f $BTTRACKPID
fi
- echo -n "Parando demonio: "$AGENTNAME
- start-stop-daemon --stop --quiet --oknodo --name $AGENTNAME
- echo "."
- echo -n "Parando demonio: "$REPONAME
- start-stop-daemon --stop --quiet --oknodo --name $REPONAME
- echo "."
+ $ACTIONMSG "Parando demonio: $AGENTNAME"
+ $DAEMONSTOP $AGENTDAEMON
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
+ $ACTIONMSG "Parando demonio: $REPONAME"
+ $DAEMONSTOP $REPODAEMON
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
############# ADV
- echo -n "Parando demonio: "$REPOAUXNAME
+ $ACTIONMSG "Parando demonio: $REPOAUXNAME"
pkill faucet
+ [ $? -le 1 ] && $SUCCESSMSG || $FAILMSG
############ ADV
- echo -n "Parando demonio: "$SERVERNAME
- start-stop-daemon --stop --quiet --oknodo --name $SERVERNAME
- echo "."
+ $ACTIONMSG "Parando demonio: $SERVERNAME"
+ $DAEMONSTOP $SERVERDAEMON
+ [ $? = 0 ] && $SUCCESSMSG || $FAILMSG
}
+config
+
case "$1" in
start)
arranca_demonios
@@ -167,9 +182,10 @@ case "$1" in
;;
*)
- echo "Uso: opengnsys "$1" {start|stop|restart}"
+ echo "Uso: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
+
diff --git a/admin/WebConsole/acceso.php b/admin/WebConsole/acceso.php
index 1fcb7206..3dd2bcb3 100644
--- a/admin/WebConsole/acceso.php
+++ b/admin/WebConsole/acceso.php
@@ -11,6 +11,11 @@ if(isset($_SESSION)){ // Si existe algua sesin ...
session_unset(); // Elimina variables
session_destroy(); // Destruye sesin
}
+# Cambiar a HTTPS
+if (empty ($_SERVER["HTTPS"])) {
+ header ("Location: https://".$_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"]);
+ exit (0);
+}
include_once("controlacceso.php");
diff --git a/admin/WebConsole/acceso_esp.php b/admin/WebConsole/acceso_esp.php
index 050bb0d7..20146a85 100644
--- a/admin/WebConsole/acceso_esp.php
+++ b/admin/WebConsole/acceso_esp.php
@@ -7,6 +7,13 @@
// Nombre del fichero: acceso.php
// Descripción : Presenta la pantalla de login de la aplicación
// ********************************************************************************************************
+
+# Cambiar a HTTPS
+if (empty ($_SERVER["HTTPS"])) {
+ header ("Location: https://".$_SERVER["SERVER_NAME"].$_SERVER["PHP_SELF"]);
+ exit (0);
+}
+
include_once("controlacceso.php");
include_once("./includes/CreaComando.php");
include_once("./clases/AdoPhp.php");
diff --git a/admin/WebConsole/asistentes/AsistenteParticionado.php b/admin/WebConsole/asistentes/AsistenteParticionado.php
index de1b5f72..3483ab9b 100644
--- a/admin/WebConsole/asistentes/AsistenteParticionado.php
+++ b/admin/WebConsole/asistentes/AsistenteParticionado.php
@@ -59,7 +59,18 @@ $xajax->printJavascript('../xajax/');
</head>
-<body>
+<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;
+">
<?
switch($ambito){
case $AMBITO_CENTROS :
@@ -111,10 +122,10 @@ switch($ambito){
?>
<tr>
- <th colspan="5"><INPUT TYPE="button" NAME="GenerarInstruccion" Value="Generar InstruccionOG" onClick="codeParticionado(this.form)"> </th>
- <td><textarea class="cajatexto" name="codigo" cols="70" rows="7"></textarea></td>
+ <th><input type="button" name="GenerarInstruccion" Value="<?php echo $TbMsg[41];?>" onclick="codeParticionado(this.form)" /> </th>
+ <td colspan="2"><textarea class="cajatexto" name="codigo" cols="70" rows="7"></textarea></td>
</tr>
- </table>
+ </table>
</form>
<?
@@ -133,4 +144,4 @@ switch($ambito){
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php
index 360c8948..ff06b3b7 100644
--- a/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php
+++ b/admin/WebConsole/asistentes/includes/asistentes/AyudanteFormularios.php
@@ -298,17 +298,18 @@ function htmlForm_typepart($cmd,$numpar)
-
-
-
-
-function htmlForm_typepartnotcacheEngine10()
+function htmlForm_typepartnotcacheEngine10($npart)
{
$SelectHtml="";
+if ($npart == 4) {
+ $SelectHtml.='<OPTION value="CACHE"> CACHE </OPTION>';
+}
$SelectHtml.='<OPTION value="FAT12"> FAT12 </OPTION>';
$SelectHtml.='<OPTION value="FAT16"> FAT16 </OPTION>';
$SelectHtml.='<OPTION value="FAT32"> FAT32 </OPTION>';
+$SelectHtml.='<OPTION value="HFAT32"> Hidden FAT32 </OPTION>';
$SelectHtml.='<OPTION value="NTFS"> NTFS </OPTION>';
+$SelectHtml.='<OPTION value="HNTFS"> Hidden NTFS </OPTION>';
#$SelectHtml.='<OPTION value="EXT2"> EXT2 </OPTION>';
#$SelectHtml.='<OPTION value="EXT3"> EXT3 </OPTION>';
$SelectHtml.='<OPTION value="EXT4"> LINUX:EXT[2:3:4] </OPTION>';
@@ -319,6 +320,9 @@ $SelectHtml.='<OPTION value="XFS"> XFS </OPTION>';
$SelectHtml.='<OPTION value="JFS"> JFS </OPTION>';
$SelectHtml.='<OPTION value="LINUX-RAID"> LINUX-RAID </OPTION>';
$SelectHtml.='<OPTION value="LINUX-LVM"> LINUX-LVM </OPTION>';
+if ($npart <= 4) {
+ $SelectHtml.='<OPTION value="EXTENDED"> EXTENDED </OPTION>';
+}
return($SelectHtml);
}
@@ -362,9 +366,13 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
$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
+ $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 = tomaTamano($tbKeys[$k]["numpar"],$idordenadores);
+ }
+ else { // Información de partición (numpart>0)
echo'<TR height=16>'.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);
@@ -376,7 +384,7 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
echo '<TD align=center>&nbsp;'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
//echo'<TD align=rigth>&nbsp;'.formatomiles($tbKeys[$k]["tamano"]).'&nbsp;</TD>'.chr(13);
- echo'<TD align=center>&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
+ echo'<TD align=right>&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
//echo'<TD>&nbsp;'.$tbKeys[$k]["imagen"].'&nbsp;</TD>'.chr(13);
echo'<TD align=center>&nbsp;'.tomaImagenes($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
@@ -388,8 +396,21 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
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 name="disksize" id="disksize" align="right">&nbsp;'.$disksize.'&nbsp;</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>';
}
-?> \ No newline at end of file
+?>
diff --git a/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php b/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php
index 48476243..46207e15 100644
--- a/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php
+++ b/admin/WebConsole/asistentes/includes/asistentes/formParticionado.php
@@ -1,77 +1,126 @@
+<tr>
+<td>
+<table id="primarias">
+<caption><?php echo $TbMsg[36]?></caption>
+<tr>
+<td><?php echo $TbMsg[20]?></td>
+<td><?php echo $TbMsg[24]?></td>
+<td><?php echo $TbMsg[22]?></td>
+</tr>
-<TR>
-<TD > Partici&oacute;n </TD>
-<TD > Tipo </TD>
-<TD > Tama&ntilde;o KB </TD>
-</TR>
-
-<TR>
-<TD > <input type="checkbox" name="check1" value="check1" onclick="if (this.form.check1.checked) { this.form.part1.disabled=false; this.form.size1.disabled=false; if (this.form.part1.options[this.form.part1.selectedIndex].value == 'CUSTOM') { this.form.part1custom.disabled=false } if (this.form.size1.options[this.form.size1.selectedIndex].value == 'CUSTOM') { this.form.size1custom.disabled=false } } else { this.form.part1.disabled=true; this.form.size1.disabled=true; this.form.part1custom.disabled=true; this.form.size1custom.disabled=true }" /> <br> Partici&oacute;n 1 </TD>
-<TD>
-<select name="part1" id="part1" style="WIDTH:220" disabled="true" onclick="if (this.form.part1.options[this.form.part1.selectedIndex].value == 'CUSTOM') { this.form.part1custom.disabled=false } else { this.form.part1custom.disabled=true }" >
- <?php echo ''. htmlForm_typepart($cmd,1) .''; ?>
- <option value="CUSTOM"> Personalizar </option>
+<?php
+for ($p=1; $p<4; $p++) {
+ echo '
+<tr>
+<td>
+<input type="checkbox" name="check'.$p.'" value="check'.$p.'" onclick="clickPartitionCheckbox(this.form, '.$p.');" /> '.$TbMsg[20].' '.$p.'</td>
+<td>
+<select name="part'.$p.'" id="part'.$p.'" style="width:220" disabled="true" onclick="
+ //if (this.form.part'.$p.'.options[this.form.part'.$p.'.selectedIndex].value == \'CUSTOM\') {
+ if (this.options[this.selectedIndex].value == \'CUSTOM\') {
+ this.form.part'.$p.'custom.disabled=false;
+ } else {
+ this.form.part'.$p.'custom.disabled=true;
+ }
+" onchange="checkExtendedPartition(form);">'
+ .htmlForm_typepart($cmd,$p).'
+ <option value="CUSTOM"> '.$TbMsg[39].' </option>
</select>
<br>
-<select name="part1custom" id="part1custom" style="WIDTH:220" disabled="true" >
- <?php echo ''. htmlForm_typepartnotcacheEngine10() .''; ?>
-</select></TD>
-
-<TD><select name="size1" id="size1" style="WIDTH:220" disabled="true" onclick="if (this.form.size1.options[this.form.size1.selectedIndex].value == 'CUSTOM') { this.form.size1custom.disabled=false } else { this.form.size1custom.disabled=true }" >
- <?php echo ''. htmlForm_sizepart($cmd,1) .''; ?>
- <option value="CUSTOM"> Personalizar </option>
+<select name="part'.$p.'custom" id="part'.$p.'custom" style="width:220" disabled="true" onchange="checkExtendedPartition(form);">'. htmlForm_typepartnotcacheEngine10($p) .'</select>
+</td>
+<td>
+<select name="size'.$p.'" id="size'.$p.'" style="width:220" disabled="true" onclick="
+ if (this.form.size'.$p.'.options[this.form.size'.$p.'.selectedIndex].value == \'CUSTOM\') {
+ this.form.size'.$p.'custom.disabled=false;
+ } else {
+ this.form.size'.$p.'custom.disabled=true;
+ }
+" onchange="calculateFreeDisk(this.form);">'
+ .htmlForm_sizepart($cmd,$p).'
+ <option value="CUSTOM"> '.$TbMsg[39].'</option>
</select>
-<br >
-<INPUT type="text" style="width:100" name="size1custom" value="0" disabled="true"></TD>
-</TR>
+<br />
+<input type="text" style="width:100" name="size'.$p.'custom" value="0" disabled="true" onchange="calculateFreeDisk(this.form);" />
+</td>
+</tr>
+ ';
+}
+?>
-<TR>
-<TD > <input type="checkbox" name="check2" value="check2" onclick="if (this.form.check2.checked) { this.form.part2.disabled=false; this.form.size2.disabled=false; if (this.form.part2.options[this.form.part2.selectedIndex].value == 'CUSTOM') { this.form.part2custom.disabled=false } if (this.form.size2.options[this.form.size2.selectedIndex].value == 'CUSTOM') { this.form.size2custom.disabled=false } } else { this.form.part2.disabled=true; this.form.size2.disabled=true; this.form.part2custom.disabled=true; this.form.size2custom.disabled=true }" /> <br> Partici&oacute;n 2 </TD>
-<TD><select name="part2" id="part2" style="WIDTH:220" disabled="true" onclick="if (this.form.part2.options[this.form.part2.selectedIndex].value == 'CUSTOM') { this.form.part2custom.disabled=false } else { this.form.part2custom.disabled=true }" >
- <?php echo ''. htmlForm_typepart($cmd,2) .''; ?>
- <option value="CUSTOM"> Personalizar </option>
+<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 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) .''; ?>
+ <option value="CUSTOM"> <?php echo $TbMsg[39];?> </option>
</select>
-<br>
-<select name="part2custom" id="part2custom" style="WIDTH:220" disabled="true" >
- <?php echo ''. htmlForm_typepartnotcacheEngine10() .''; ?>
-</select></TD>
+<br />
+<input type="text" style="width:100" name="size4custom" value="0" disabled="true" onchange="calculateFreeDisk(this.form);" /></td>
+</tr>
-<TD><select name="size2" id="size2" style="WIDTH:220" disabled="true" onclick="if (this.form.size2.options[this.form.size2.selectedIndex].value == 'CUSTOM') { this.form.size2custom.disabled=false } else { this.form.size2custom.disabled=true }" >
- <?php echo ''. htmlForm_sizepart($cmd,2) .''; ?>
- <option value="CUSTOM"> Personalizar </option>
-</select>
-<br >
-<INPUT type="text" style="width:100" name="size2custom" value="0" disabled="true"></TD>
-</TR>
+</table>
+</td>
+
+<td>
+<table id="logicas" style="visibility:hidden">
+<caption><?php echo $TbMsg[37]?></caption>
+<tr>
+<td><?php echo $TbMsg[20]?></td>
+<td><?php echo $TbMsg[24]?></td>
+<td><?php echo $TbMsg[22]?></td>
+</tr>
-<TR>
-<TD > <input type="checkbox" name="check3" value="check3" onclick="if (this.form.check3.checked) { this.form.part3.disabled=false; this.form.size3.disabled=false; if (this.form.part3.options[this.form.part3.selectedIndex].value == 'CUSTOM') { this.form.part3custom.disabled=false } if (this.form.size3.options[this.form.size3.selectedIndex].value == 'CUSTOM') { this.form.size3custom.disabled=false } } else { this.form.part3.disabled=true; this.form.size3.disabled=true; this.form.part3custom.disabled=true; this.form.size3custom.disabled=true }" /> <br> Partici&oacute;n 3 </TD>
-<TD><select name="part3" id="part3" style="WIDTH:220" disabled="true" onclick="if (this.form.part3.options[this.form.part3.selectedIndex].value == 'CUSTOM') { this.form.part3custom.disabled=false } else { this.form.part3custom.disabled=true }" >
- <?php echo ''. htmlForm_typepart($cmd,3) .''; ?>
- <option value="CUSTOM"> Personalizar </option>
+<?php
+for ($p=5; $p<=9; $p++) {
+ echo '
+<tr>
+<td>
+<input type="checkbox" name="check'.$p.'" value="check'.$p.'" onclick="clickPartitionCheckbox(this.form, '.$p.');" /> '.$TbMsg[20].' '.$p.'</td>
+<td>
+<select name="part'.$p.'" id="part'.$p.'" style="width:220" disabled="true" onclick="
+ if (this.form.part'.$p.'.options[this.form.part'.$p.'.selectedIndex].value == \'CUSTOM\') {
+ this.form.part'.$p.'custom.disabled=false;
+ } else {
+ this.form.part'.$p.'custom.disabled=true;
+ }
+">'. htmlForm_typepart($cmd,$p). '
+ <option value="CUSTOM"> '.$TbMsg[39].' </option>
</select>
<br>
-<select name="part3custom" id="part3custom" style="WIDTH:220" disabled="true" >
- <?php echo ''. htmlForm_typepartnotcacheEngine10() .''; ?>
-</select></TD>
-
-<TD><select name="size3" id="size3" style="WIDTH:220" disabled="true" onclick="if (this.form.size3.options[this.form.size3.selectedIndex].value == 'CUSTOM') { this.form.size3custom.disabled=false } else { this.form.size3custom.disabled=true }" >
- <?php echo ''. htmlForm_sizepart($cmd,3) .''; ?>
- <option value="CUSTOM"> Personalizar </option>
+<select name="part'.$p.'custom" id="part'.$p.'custom" style="width:220" disabled="true" >'. htmlForm_typepartnotcacheEngine10($p) .'</select>
+</td>
+<td>
+<select name="size'.$p.'" id="size'.$p.'" style="width:220" disabled="true" onclick="
+ if (this.form.size'.$p.'.options[this.form.size'.$p.'.selectedIndex].value == \'CUSTOM\') {
+ this.form.size'.$p.'custom.disabled=false;
+ } else {
+ this.form.size'.$p.'custom.disabled=true;
+ }
+" onchange="calculateFreeDisk(this.form);"
+">'.htmlForm_sizepart($cmd,$p).'
+ <option value="CUSTOM"> '.$TbMsg[39].'</option>
</select>
-<br >
-<INPUT type="text" style="width:100" name="size3custom" value="0" disabled="true"></TD>
-</TR>
+<br />
+<input type="text" style="width:100" name="size'.$p.'custom" value="0" disabled="true" />
+</td>
+</tr>
+ ';
+}
+?>
+
+</table>
+</td>
+
+</tr>
+
+<tr>
+<th>
+<input type="hidden" id="minsize" />
+<?php echo $TbMsg[38];?>: <input type="text" id="freedisk" width="15" disabled="true" />
+</th>
+</tr>
+
-<TR>
-<TD > <input type="checkbox" name="check4" value="check4" onclick="if (this.form.check4.checked) { this.form.part4.disabled=false; this.form.size4.disabled=false; if (this.form.size4.options[this.form.size4.selectedIndex].value == 'CUSTOM') { this.form.size4custom.disabled=false } } else { this.form.part4.disabled=true; this.form.size4.disabled=true; this.form.size4.options[0].selected=true; }" /> <br> Partici&oacute;n 4 </TD>
-<TD> <INPUT type="label" readonly size="8" name="part4" disabled="true" value="CACHE"></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 }" >
- <option value="0"> Sin modificar tama&ntilde;o </option>
- <?php echo ''. htmlForm_sizepart($cmd,4) .''; ?>
- <option value="CUSTOM"> Personalizar </option>
-</select>
-<br >
-<INPUT type="text" style="width:100" name="size4custom" value="0" disabled="true"></TD>
-</TR>
diff --git a/admin/WebConsole/asistentes/jscripts/asistentes.js b/admin/WebConsole/asistentes/jscripts/asistentes.js
index 0ecbe87a..f1a296ec 100644
--- a/admin/WebConsole/asistentes/jscripts/asistentes.js
+++ b/admin/WebConsole/asistentes/jscripts/asistentes.js
@@ -19,8 +19,12 @@ switch (form.idmetodo.value)
break;
}
//form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " 1 " + form.PartOrigen.value + " " + form.mcastpuerto.value + ":" + form.mcastmodo.value + ":" + form.mcastdireccion.value + ":" + form.mcastvelocidad.value + "M:" + form.mcastnclien.value + ":" + form.mcastseg.value + " 1 " + form.PartOrigen.value + " " + form.tool.value + " " + form.compresor.value;
-form.codigo.value="cloneRemoteFromMaster " + form.ipMaster.value + " " + form.source.value + " " + protocol + " " + form.targetpart.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] iniciando " + command + " \" | tee -a $OGLOGFILE $OGLOGSESSION \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;
}
function codeDeployImage(form){
@@ -39,75 +43,235 @@ switch (form.idmetodo.value)
//form.codigo.value="deployImage REPO /";
if (form.modo[0].checked)
{
- form.codigo.value="deployImage REPO /" + form.idimagen.value + " 1 " + form.idparticion.value + " " + protocol ;
+ command="deployImage REPO /" + form.idimagen.value + " 1 " + form.idparticion.value + " " + protocol ;
+ form.codigo.value="\
+echo [0] iniciando " + command +" | tee -a $OGLOGSESSION \n \ " +
+command + " | tee -a $OGLOGCOMMAND";
+ //form.codigo.value="deployImage REPO /" + form.idimagen.value + " 1 " + form.idparticion.value + " " + protocol ;
}
else
{
- form.codigo.value="updateCache REPO /" + form.idimagen.value + ".img" + " " + protocol ;
+ command="updateCache REPO /" + form.idimagen.value + ".img" + " " + protocol ;
+ form.codigo.value="\
+echo [0] iniciando " + command +" | tee -a $OGLOGSESSION \n \ " +
+command + " | tee -a $OGLOGCOMMAND";
+ //form.codigo.value="updateCache REPO /" + form.idimagen.value + ".img" + " " + protocol ;
}
}
-function codeParticionado(form){
-var value1;
-var value2;
-var value3;
-var precache;
-if (form.check1.checked) {
- if (form.part1.value == "CUSTOM" ) {value1 = form.part1custom.value}
- else {value1 = form.part1.value};
- if (form.size1.value == "CUSTOM") {value1 += ":" + form.size1custom.value}
- else {value1 += ":" + form.size1.value};
-}
-else
-{
- value1 = "EMPTY:0"
-}
-if (form.check2.checked) {
- if (form.part2.value == "CUSTOM" ) {value2 = form.part2custom.value}
- else {value2 = form.part2.value};
- if (form.size2.value == "CUSTOM") {value2 += ":" + form.size2custom.value}
- else {value2 += ":" + form.size2.value};
-}
-else
-{
- value2 = "EMPTY:0"
-}
-if (form.check3.checked) {
- if (form.part3.value == "CUSTOM" ) {value3 = form.part3custom.value}
- else {value3 = form.part3.value};
- if (form.size3.value == "CUSTOM") {value3 += ":" + form.size3custom.value}
- else {value3 += ":" + form.size3.value};
-}
-else
-{
- value3 = "EMPTY:0"
-}
+function codeParticionado (form) {
+ var partCode="";
+ var logicalCode="";
+ var cacheCode;
+ var cacheSize;
+ var extended=false;
-if (form.size4.value == "0") {
-precache="ogUnmountCache \n ogUnmountAll 1 \n sizecache=`ogGetPartitionSize 1 4` \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache $sizecache ";
-//alert(precache);
-}
-else
-{
- if (form.size4.value == "CUSTOM")
- {
- cachesize = form.size4custom.value;
+ for (var nPart=1; nPart<4; nPart++) {
+ var partCheck=eval("form.check"+nPart);
+ if (partCheck.checked) {
+ var partType=eval("form.part"+nPart);
+ if (partType.value == "CUSTOM" ) {
+ var partTypeCustom=eval("form.part"+nPart+"custom");
+ partCode += " " + partTypeCustom.value;
+ if (partTypeCustom.value == "EXTENDED") {
+ extended=true;
+ }
+ } else {
+ partCode += " " + partType.value;
+ if (partType.value == "EXTENDED") {
+ extended=true;
+ }
+ }
+ var partSize=eval("form.size"+nPart);
+ if (partSize.value == "CUSTOM" ) {
+ var partSizeCustom=eval("form.size"+nPart+"custom");
+ partCode += ":" + partSizeCustom.value;
+ } else {
+ partCode += ":" + partSize.value;
+ }
+ } else {
+ partCode += " EMPTY:0";
+ }
+ }
+ if (form.check4.checked) {
+ if (form.size4.value == "0") {
+ //cacheCode = " ogUnmountCache \n ogUnmountAll 1 \n sizecache=`ogGetPartitionSize 1 4` \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache $sizecache ";
+ cacheCode="\
+ echo \"[20] detectando tamaño de la cache\" | tee -a $OGLOGSESSION \n \
+ sizecache=`ogGetPartitionSize 1 4` \n \
+ echo \"[30] borrando y actualizando tabla particiones disco 1\" | tee -a $OGLOGSESSION \n \
+ ogDeletePartitionTable 1 \n \
+ ogUpdatePartitionTable 1 | tee -a $OGLOGCOMMAND \n \
+ echo \"[50] Activando cache\" | tee -a $OGLOGSESSION \n \
+ initCache $sizecache &>/dev/null | tee -a $OGLOGCOMMAND \n ";
+ } else {
+ if (form.size4.value == "CUSTOM") {
+ cacheSize = form.size4custom.value;
+ } else {
+ cacheSize = form.size4.value;
+ }
+ //cacheCode = " ogUnmountCache \n ogUnmountAll 1 \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache " + cacheSize;
+ cacheCode="\
+ echo \"[30] borrando y actualizando tabla particiones disco 1\" | tee -a $OGLOGSESSION \n \
+ ogDeletePartitionTable 1 \n \
+ ogUpdatePartitionTable 1 \n \
+ echo \"[50] Activando cache\" | tee -a $OGLOGSESSION \n \
+ initCache " + cacheSize + " &>/dev/null | tee -a $OGLOGCOMMAND";
+ }
+ } else {
+ //cacheCode = " ogUnmountCache \n ogUnmountAll 1 \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 ";
+ cacheCode="\
+ echo \"[30] borrando y actualizando tabla particiones disco 1\" | tee -a $OGLOGSESSION \n \
+ ogDeletePartitionTable 1 \n \
+ ogUpdatePartitionTable 1 \n";
+ partCode += " EMPTY:0";
+ }
+ if (extended) {
+ var lastLogical=5;
+ for (var nPart=9; nPart>5; nPart--) {
+ if (eval ("form.check"+nPart+".checked")) {
+ lastLogical = nPart;
+ break;
+ }
+ }
+ for (var nPart=5; nPart<=lastLogical; nPart++) {
+ var partCheck=eval("form.check"+nPart);
+ if (partCheck.checked) {
+ var partType=eval("form.part"+nPart);
+ if (partType.value == "CUSTOM" ) {
+ var partTypeCustom=eval("form.part"+nPart+"custom");
+ logicalCode += " " + partTypeCustom.value;
+ } else {
+ logicalCode += " " + partType.value;
+ }
+ var partSize=eval("form.size"+nPart);
+ if (partSize.value == "CUSTOM" ) {
+ var partSizeCustom=eval("form.size"+nPart+"custom");
+ logicalCode += ":" + partSizeCustom.value;
+ } else {
+ logicalCode += ":" + partSize.value;
+ }
+ } else {
+ logicalCode += " EMPTY:0";
+ }
+ }
+ partCode += logicalCode;
}
- else
- {
- cachesize = form.size4.value;
- }
- precache="ogUnmountCache \n ogUnmountAll 1 \n ogDeletePartitionTable 1 \n ogUpdatePartitionTable 1 \n initCache " + cachesize + " ";
- //alert(precache);
-}
-
+// form.codigo.value="\
+//" + cacheCode + " \n \
+//ogListPartitions 1 \n \
+//ogCreatePartitions 1 " + partCode + " \n \
+//ogSetPartitionActive 1 1 \n \
+//ogUpdatePartitionTable 1 \n \
+//ogListPartitions 1 \n";
form.codigo.value="\
-" + precache + " \n \
-ogListPartitions 1 \n \
-ogCreatePartitions 1 " + value1 + " " + value2 + " " + value3 + " \n \
+echo \"[0] iniciando particionado\" | tee -a $OGLOGSESSION $OGLOGFILE \n \
+echo \"[10] desmontando cache y particiones del disco 1\" | tee -a $OGLOGSESSION \n \
+ogUnmountCache \n \
+ogUnmountAll 1 \n \
+" + cacheCode + " \n \
+echo \"[60] Listando tabla particiones 1\" | tee -a $OGLOGSESSION \n \
+ogListPartitions 1 | tee -a $OGLOGCOMMAND $OGLOGSESSION \n \
+echo \"[70] Creando tabla particiones " + partCode + " \" | tee -a $OGLOGSESSION \n \
+ogCreatePartitions 1 " + partCode + " | tee -a $OGLOGCOMMAND \n \
+echo \"[80] Activando primera particion del disco 1\" | tee -a $OGLOGSESSION \n \
ogSetPartitionActive 1 1 \n \
+echo \"[100] Listando la nueva tabla particiones 1\" | tee -a $OGLOGSESSION $OGLOGFILE \n \
ogUpdatePartitionTable 1 \n \
-ogListPartitions 1 \n";
+ms-sys /dev/sda | grep unknow && ms-sys /dev/sda \n \
+ogListPartitions 1 | tee -a $OGLOGCOMMAND $OGLOGSESSION $OGLOGFILE \n";
+
+}
+
+
+// Código de pulsación de selección de partición.
+function clickPartitionCheckbox(form, npart) {
+ var partCheck=eval("form.check"+npart);
+ var partType=eval("form.part"+npart);
+ var partSize=eval("form.size"+npart);
+ var partTypeCustom=eval("form.part"+npart+"custom");
+ var partSizeCustom=eval("form.size"+npart+"custom");
+ var freeDisk=document.getElementById("freedisk");
+ var logical=document.getElementById("logicas");
+ if (partCheck.checked) {
+ partType.disabled=false;
+ partSize.disabled=false;
+ if (partType.options[partType.selectedIndex].value == "CUSTOM") {
+ partTypeCustom.disabled=false;
+ }
+ if (partSize.options[partSize.selectedIndex].value == "CUSTOM") {
+ partSizeCustom.disabled=false;
+ } else {
+ partSizeCustom.disabled=true;
+ }
+ } else {
+ partType.disabled=true;
+ partSize.disabled=true;
+ partTypeCustom.disabled=true;
+ partSizeCustom.disabled=true;
+ }
+ if (npart <= 4) {
+ checkExtendedPartition(form);
+ calculateFreeDisk(form);
+ }
}
+
+
+// Código para calcular el espacio libre del disco.
+function calculateFreeDisk(form) {
+ var freeDisk=document.getElementById("freedisk");
+ freeDisk.value=form.minsize.value;
+ for (npart=1; npart<=4; npart++) {
+ var partCheck=eval("form.check"+npart);
+ var partSize=eval("form.size"+npart);
+ var partSizeCustom=eval("form.size"+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.
+ }
+}
+
+// Código para comprobar si hay partición extendida activa para mostrar las lógicas.
+function checkExtendedPartition(form) {
+ var logical=document.getElementById("logicas");
+ var visible=false;
+ 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";
+ }
+ }
+ }
+ if (visible) {
+ logical.style.visibility="visible";
+ } else {
+ logical.style.visibility="hidden";
+ }
+}
+
diff --git a/admin/WebConsole/gestores/gestor_pxe.php b/admin/WebConsole/gestores/gestor_pxe.php
index f585a9d5..949ab5d7 100644
--- a/admin/WebConsole/gestores/gestor_pxe.php
+++ b/admin/WebConsole/gestores/gestor_pxe.php
@@ -65,16 +65,29 @@ $rs->Primero();
$router=$rs->campos["router"];
$netmask=$rs->campos["netmask"];
$repo=$rs->campos["iprepo"];
- $infohost=" ip="
- . $ip . ":"
- . $repo .":"
- . $router . ":"
- . $netmask .":"
- . $hostname .":"
- . $netiface . ":none ogrepo="
- . $repo;
$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();
+
+$infohost=" ip="
+. $ip . ":"
+. $server .":"
+. $router . ":"
+. $netmask .":"
+. $hostname .":"
+. $netiface . ":none ogrepo="
+. $repo . " oglive="
+. $repo . " oglog="
+. $server . " ogshare="
+. $repo;
+
###################obtenemos las variables de red del aula.
#02.1 obtenemos nombre fichero mac
diff --git a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php
index 790cdf6e..b293ee7d 100644
--- a/admin/WebConsole/gestores/gestor_pxe_grub4dos.php
+++ b/admin/WebConsole/gestores/gestor_pxe_grub4dos.php
@@ -52,11 +52,13 @@ $cmd->texto="update ordenadores set arranque=@optboot where nombreordenador=@hos
$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 FROM ordenadores
- join aulas on ordenadores.idaula=aulas.idaula
- join repositorios on ordenadores.idrepositorio=repositorios.idrepositorio
- where ordenadores.nombreordenador='". $hostname ."'";
+ ordenadores.netiface AS netiface, aulas.netmask AS netmask,
+ aulas.router AS router, repositorios.ip AS iprepo,
+ aulas.nombreaula AS grupo
+ FROM ordenadores
+ JOIN aulas ON ordenadores.idaula=aulas.idaula
+ JOIN repositorios ON ordenadores.idrepositorio=repositorios.idrepositorio
+ WHERE ordenadores.nombreordenador='". $hostname ."'";
$rs=new Recordset;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) echo "error";
@@ -67,16 +69,26 @@ $rs->Primero();
$router=$rs->campos["router"];
$netmask=$rs->campos["netmask"];
$repo=$rs->campos["iprepo"];
- $infohost="ip="
- . $ip . ":"
- . $repo .":"
- . $router . ":"
- . $netmask .":"
- . $hostname .":"
- . $netiface . ":none"; # repo="
- #. $repo;
+ $group=cleanString($rs->campos["grupo"]);
$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();
+
+$infohost="'ip=$ip:$server:$router:$netmask:$hostname:$netiface:none" .
+ " group=$group" .
+ " ogrepo=$repo" .
+ " oglive=$repo" .
+ " oglog=$server" .
+ " ogshare=$server'";
+
+
###################obtenemos las variables de red del aula.
#02.1 obtenemos nombre fichero mac
@@ -106,4 +118,11 @@ function netmask2cidr($netmask) {
return $cidr;
}
-?> \ No newline at end of file
+// 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/idiomas/javascripts/eng/ejecutarprocedimientos_eng.js b/admin/WebConsole/idiomas/javascripts/eng/ejecutarprocedimientos_eng.js
new file mode 100644
index 00000000..698e4c21
--- /dev/null
+++ b/admin/WebConsole/idiomas/javascripts/eng/ejecutarprocedimientos_eng.js
@@ -0,0 +1,8 @@
+//____________________________________________________________________________
+//
+// Fichero de idiomas javascript: ejecutarprocedimientos_eng.js
+// Idioma: Ingls
+//____________________________________________________________________________
+TbMsg=new Array;
+TbMsg[0]="WARNING.- This procedure will be executed Applying this environment. Are you sure ?";
+TbMsg[1]="This procedure has been successfully executed for this environment";
diff --git a/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php b/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php
index 06d1b7b9..df3ca129 100644
--- a/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php
+++ b/admin/WebConsole/idiomas/php/cat/configuraciones_cat.php
@@ -45,4 +45,16 @@ $TbMsg[31]='Nombre del S.O.';
$TbMsg[32]='Tamaño de partición';
$TbMsg[33]='Nombre de la Imagen ';
$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[42]='Variable';
+$TbMsg[43]='Sin configuraci&oacute;n: cliente no conectado al servidor.';
+
?>
+
diff --git a/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php b/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php
index 06d1b7b9..2238666f 100644
--- a/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php
+++ b/admin/WebConsole/idiomas/php/eng/configuraciones_eng.php
@@ -29,20 +29,32 @@ $TbMsg[17]="Perfil Hardware";
$TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:";
$TbMsg[19]="Datos a suministrar";
-$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[26]='Perfil Software';
-$TbMsg[27]='S.F.';
-$TbMsg[28]='Ninguno';
-$TbMsg[29]='Desconocido';
-
-$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[20]='Partition';
+$TbMsg[21]='Installed OS';
+$TbMsg[22]='Size (KB)';
+$TbMsg[23]='Configuration Data';
+$TbMsg[24]='Type';
+$TbMsg[25]='Image';
+$TbMsg[26]='Software Profile';
+$TbMsg[27]='Filesys';
+$TbMsg[28]='None';
+$TbMsg[29]='Unknown';
+
+$TbMsg[30]='Filesystem';
+$TbMsg[31]='OS name';
+$TbMsg[32]='Partition Size';
+$TbMsg[33]='Image Name';
+$TbMsg[34]='Software Profile';
+$TbMsg[35]='Disk';
+$TbMsg[36]='Primary Partitions';
+$TbMsg[37]='Logical Partitions';
+$TbMsg[38]='Menor espacio libre (KB)';
+$TbMsg[39]='Customize';
+$TbMsg[40]='Sin modificar tama&ntilde;o';
+$TbMsg[41]='Generate Instruction';
+
+$TbMsg[42]='Variable';
+$TbMsg[43]='Sin configuraci&oacute;n: cliente no conectado al servidor.';
+
?>
+
diff --git a/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php b/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php
index 06d1b7b9..8a151b73 100644
--- a/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php
+++ b/admin/WebConsole/idiomas/php/esp/configuraciones_esp.php
@@ -6,33 +6,33 @@
//________________________________________________________________________________________________________
$TbMsg=array();
$TbMsg[0]='Configuraciones';
-$TbMsg[1]='Ámbito';
+$TbMsg[1]='&Aacute;mbito';
$TbMsg[2]="Aulas";
$TbMsg[3]="Grupo de Ordenadores";
$TbMsg[4]="Ordenadores";
$TbMsg[5]="Nombre";
-$TbMsg[6]="Ubicación";
-$TbMsg[7]="Cañón";
+$TbMsg[6]="Ubicaci&oacute;n";
+$TbMsg[7]="Ca&ntilde;&oacute;n";
$TbMsg[8]="Pizarra";
$TbMsg[9]="Puestos";
$TbMsg[10]="URL Imagen";
-$TbMsg[11]="Menú";
+$TbMsg[11]="Men&uacute;";
$TbMsg[12]="Comentarios";
$TbMsg[13]="Ordenadores";
$TbMsg[14]="Nombre";
-$TbMsg[15]="Dirección IP";
-$TbMsg[16]="Dirección MAC";
+$TbMsg[15]="Direcci&oacute;n IP";
+$TbMsg[16]="Direcci&oacute;n MAC";
$TbMsg[17]="Perfil Hardware";
-$TbMsg[18]="DESAGRUPAR SEGÚN VALORES DISTINTOS DE:";
+$TbMsg[18]="DESAGRUPAR SEG&Uacute;N VALORES DISTINTOS DE:";
$TbMsg[19]="Datos a suministrar";
-$TbMsg[20]='Partición';
+$TbMsg[20]='Partici&oacute;n';
$TbMsg[21]='S.O. Instalado';
-$TbMsg[22]='Tamaño';
-$TbMsg[23]='Datos de configuración';
+$TbMsg[22]='Tama&ntilde;o (KB)';
+$TbMsg[23]='Datos de configuraci&oacute;n';
$TbMsg[24]='Tipo';
$TbMsg[25]='Imagen';
$TbMsg[26]='Perfil Software';
@@ -42,7 +42,19 @@ $TbMsg[29]='Desconocido';
$TbMsg[30]='Sistema de Ficheros';
$TbMsg[31]='Nombre del S.O.';
-$TbMsg[32]='Tamaño de partición';
+$TbMsg[32]='Tama&ntilde;o de partici&oacute;n';
$TbMsg[33]='Nombre de la Imagen ';
$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[42]='Variable';
+$TbMsg[43]='Sin configuraci&oacute;n: cliente no conectado al servidor.';
+
?>
+
diff --git a/admin/WebConsole/includes/ConfiguracionesParticiones.php b/admin/WebConsole/includes/ConfiguracionesParticiones.php
index c4a5b844..39567c78 100644
--- a/admin/WebConsole/includes/ConfiguracionesParticiones.php
+++ b/admin/WebConsole/includes/ConfiguracionesParticiones.php
@@ -79,7 +79,7 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
$cmd->texto.=" ordenadores_particiones.codpar) as configuracion,
ordenadores_particiones.numpar ,
- ordenadores_particiones.codpar ,
+ ordenadores_particiones.codpar ,
tipospar.tipopar,
tipospar.clonable,
ordenadores_particiones.tamano,
@@ -88,8 +88,8 @@ function cargaCaves($cmd,$idambito,$ambito,$sws,$swr)
nombresos.nombreso,
imagenes.idimagen,
imagenes.descripcion as imagen,
- imagenes.nombreca as nombreca,
- imagenes.idrepositorio as repositorio,
+ imagenes.nombreca as nombreca,
+ imagenes.idrepositorio as repositorio,
ordenadores_particiones.idperfilsoft,
perfilessoft.descripcion as perfilsoft
@@ -181,62 +181,57 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr)
cargaNombresSO($cmd,$idambito,$ambito);
cargaTamano($cmd,$idambito,$ambito);
- $cmd->texto="SELECT
- count(*) as con,
- group_concat(cast( temp2.idordenador AS char( 11 ) ) ORDER BY temp2.idordenador SEPARATOR ',' ) AS idordenadores,
- temp2.configuraciones
- 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,
- ordenadores_particiones.numpar,
- concat_WS( ';',
- ordenadores_particiones.numpar, ";
-
- if($sws & $msk_tamano)
+ $cmd->texto="SELECT COUNT(*) AS con,
+ GROUP_CONCAT(CAST( temp2.idordenador AS CHAR(11) ) ORDER BY temp2.idordenador SEPARATOR ',' ) AS idordenadores,
+ temp2.configuraciones
+ 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,
+ ordenadores_particiones.numpar,
+ concat_WS( ';',
+ ordenadores_particiones.numpar, ";
+
+ if($sws & $msk_tamano)
$cmd->texto.=" ordenadores_particiones.tamano,";
-
- if($sws & $msk_sysFi)
+
+ if($sws & $msk_sysFi)
$cmd->texto.=" ordenadores_particiones.idsistemafichero, ";
-
- if($sws & $msk_nombreSO)
- $cmd->texto.=" ordenadores_particiones.idnombreso, ";
-
- if($sws & $msk_imagen)
+
+ if($sws & $msk_nombreSO)
+ $cmd->texto.=" ordenadores_particiones.idnombreso, ";
+
+ if($sws & $msk_imagen)
$cmd->texto.=" ordenadores_particiones.idimagen, ";
-
- if($sws & $msk_perfil)
- $cmd->texto.=" ordenadores_particiones.idperfilsoft, ";
+
+ if($sws & $msk_perfil)
+ $cmd->texto.=" ordenadores_particiones.idperfilsoft, ";
- $cmd->texto.=" ordenadores_particiones.codpar) as configuracion
- 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";
-
+ $cmd->texto.=" ordenadores_particiones.codpar) AS configuracion
+ 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";
+
switch($ambito){
case $AMBITO_AULAS :
- $cmd->texto.=" INNER JOIN aulas ON aulas.idaula = ordenadores.idaula
- WHERE aulas.idaula =".$idambito;
- break;
+ $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;
+ $cmd->texto.=" WHERE ordenadores.idordenador=".$idambito;
break;
- }
- if($swr) // Si se trata de restauración no se tiene en cuenta las particiones no clonables
+ }
+ 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
- GROUP BY temp1.idordenador) as temp2
+ $cmd->texto.=" ORDER BY ordenadores_particiones.idordenador, ordenadores_particiones.numpar) AS temp1
+ GROUP BY temp1.idordenador) AS temp2
GROUP BY temp2.configuraciones
ORDER BY con desc,idordenadores";
@@ -246,19 +241,22 @@ function pintaConfiguraciones($cmd,$idambito,$ambito,$colums,$sws,$swr)
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>';
+ 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>';
+ echo '</td></tr>';
//Muestra particiones y configuración
echo pintaParticiones($cmd,$rs->campos["configuraciones"],$rs->campos["idordenadores"],$cc,$ambito,$idambito);
$rs->Siguiente();
}
- echo "</TABLE>";
+ if ($cc == 0) {
+ echo '<tr><th>'.$TbMsg[43].'</th><tr>'; // Cliente sin configuración.
+ }
+ echo "</table>";
$rs->Cerrar();
}
//________________________________________________________________________________________________________
@@ -275,25 +273,24 @@ function pintaOrdenadores($cmd,$idordenadores,$maxcontor,$cc)
$tablaHtml.="";
$contor=0;
$maxcontor=10; // Número máximo de prodenadores por fila
- $cmd->texto=" SELECT idordenador,nombreordenador,ip FROM ordenadores WHERE idordenador in (".$idordenadores." ) ORDER BY nombreordenador";
+ $cmd->texto=" SELECT idordenador,nombreordenador,ip FROM ordenadores WHERE idordenador IN (".$idordenadores.") ORDER BY nombreordenador";
$rs=new Recordset;
$rs->Comando=&$cmd;
if (!$rs->Abrir()) return(""); // Error al abrir recordset
- $tablaHtml.='<TABLE align=left border="0" id="tbOrd_'.$cc.'" value="'.$idordenadores.'"><TR>';
+ $tablaHtml.='<table align="left" border="0" id="tbOrd_'.$cc.'" value="'.$idordenadores.'"><tr>';
while (!$rs->EOF){
$contor++;
- $tablaHtml.= '<TD align=center style="BACKGROUND-COLOR: #FFFFFF;">
- <IMG src="../images/iconos/ordenador.gif" >
- <br><span style="FONT-SIZE:9px; COLOR: #4f4f4f;" >'.$rs->campos["nombreordenador"].'</span>
- </TD>';
+ $tablaHtml.= '<td align="center" style="BACKGROUND-COLOR: #FFFFFF;">
+ <img src="../images/iconos/ordenador.gif" >
+ <br><span style="FONT-SIZE:9px; COLOR: #4f4f4f;" >'.$rs->campos["nombreordenador"].'</span></td>';
if($contor>$maxcontor){
$contor=0;
- $tablaHtml.='</TR><TR>';
+ $tablaHtml.='</tr><tr>';
}
$rs->Siguiente();
}
- $tablaHtml.='</TR>';
- $tablaHtml.= '</TABLE>';
+ $tablaHtml.='</tr>';
+ $tablaHtml.= '</table>';
return($tablaHtml);
}
/*________________________________________________________________________________________________________
@@ -308,28 +305,30 @@ function cargaSistemasFicheros($cmd,$idambito,$ambito)
global $AMBITO_GRUPOSORDENADORES;
global $AMBITO_ORDENADORES;
- $cmd->texto="SELECT count(*) as con,ordenadores_particiones.idsistemafichero,ordenadores_particiones.numpar,
- sistemasficheros.descripcion as sistemafichero,
- group_concat(cast(ordenadores_particiones.idordenador AS char( 11) )
- ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
- FROM ordenadores
- INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
- INNER JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero";
+ $cmd->texto="SELECT COUNT(*) AS con,
+ ordenadores_particiones.idsistemafichero,
+ ordenadores_particiones.numpar,
+ sistemasficheros.descripcion AS sistemafichero,
+ GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
+ ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
+ FROM ordenadores
+ JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
+ JOIN sistemasficheros ON sistemasficheros.idsistemafichero=ordenadores_particiones.idsistemafichero";
switch($ambito){
case $AMBITO_AULAS :
- $cmd->texto.=" INNER JOIN aulas ON aulas.idaula = ordenadores.idaula
- WHERE aulas.idaula =".$idambito;
- break;
+ $cmd->texto.=" 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;
+ $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
}
- $cmd->texto.=" GROUP BY ordenadores_particiones.numpar,ordenadores_particiones.idsistemafichero";
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.idsistemafichero";
//echo "carga sistemas de ficheros:".$cmd->texto;
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -354,17 +353,21 @@ function cargaSistemasFicheros($cmd,$idambito,$ambito)
________________________________________________________________________________________________________*/
function tomaSistemasFicheros($numpar,$ordenadores,$sw=false)
{
- global $tbSysFi; // Tabla contenedora de ordenadores incluidos en la consulta
+ global $tbSysFi; // Tabla contenedora de ordenadores incluidos en la consulta
global $conSysFi; // Contador de elementos anteriores
- for($k=0;$k<$conSysFi;$k++){
- $pos = strpos($tbSysFi[$k]["ordenadores"], $ordenadores);
- if ($pos !== false) { // Cadena encontrada
- if($tbSysFi[$k]["numpar"]==$numpar){
- if($sw) // Retonar identificador
- return($tbSysFi[$k]["idsistemafichero"]);
- else
- return($tbSysFi[$k]["sistemafichero"]);
+ for ($k=0; $k<$conSysFi; $k++){
+ if ($tbSysFi[$k]["numpar"] == $numpar){
+ //$pos = strpos($tbSysFi[$k]["ordenadores"], $ordenadores);
+ //if ($pos !== false) { // Cadena encontrada
+ $pcs = explode (",", $ordenadores);
+ $intersec = array_intersect (explode(",", $tbSysFi[$k]["ordenadores"]), $pcs);
+ if (array_diff ($pcs, $intersec) == NULL) {
+ if ($sw) { // Retonar identificador
+ return ($tbSysFi[$k]["idsistemafichero"]);
+ } else {
+ return ($tbSysFi[$k]["sistemafichero"]);
+ }
}
}
}
@@ -375,33 +378,36 @@ function tomaSistemasFicheros($numpar,$ordenadores,$sw=false)
________________________________________________________________________________________________________*/
function cargaPerfiles($cmd,$idambito,$ambito)
{
- global $tbPerfil; // Tabla contenedora de ordenadores incluidos en la consulta
+ global $tbPerfil; // Tabla contenedora de ordenadores incluidos en la consulta
global $conPerfil; // Contador de elementos anteriores
global $AMBITO_AULAS;
global $AMBITO_GRUPOSORDENADORES;
global $AMBITO_ORDENADORES;
- $cmd->texto="SELECT count(*) as con,ordenadores_particiones.idperfilsoft,ordenadores_particiones.numpar,perfilessoft.descripcion as perfilsoft,
- group_concat(cast(ordenadores_particiones.idordenador AS char( 11) )
- ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
- FROM ordenadores
- INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
- INNER JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft";
+ $cmd->texto="SELECT count(*) AS con,
+ ordenadores_particiones.idperfilsoft,
+ ordenadores_particiones.numpar,
+ perfilessoft.descripcion AS perfilsoft,
+ GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
+ ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
+ FROM ordenadores
+ JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
+ JOIN perfilessoft ON perfilessoft.idperfilsoft=ordenadores_particiones.idperfilsoft";
- switch($ambito){
+ switch ($ambito) {
case $AMBITO_AULAS :
- $cmd->texto.=" INNER JOIN aulas ON aulas.idaula = ordenadores.idaula
- WHERE aulas.idaula =".$idambito;
- break;
+ $cmd->texto.=" 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.=" JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
+ WHERE gruposordenadores.idgrupo =".$idambito;
break;
case $AMBITO_ORDENADORES :
- $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
+ $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
}
- $cmd->texto.=" GROUP BY ordenadores_particiones.numpar,ordenadores_particiones.idperfilsoft";
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.idperfilsoft";
//echo "carga perfiles:".$cmd->texto;
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -425,14 +431,19 @@ function cargaPerfiles($cmd,$idambito,$ambito)
________________________________________________________________________________________________________*/
function tomaPerfiles($numpar,$ordenadores)
{
- global $tbPerfil; // Tabla contenedora de ordenadores incluidos en la consulta
+ global $tbPerfil; // Tabla contenedora de ordenadores incluidos en la consulta
global $conPerfil; // Contador de elementos anteriores
- for($k=0;$k<$conPerfil;$k++){
- $pos = strpos($tbPerfil[$k]["ordenadores"], $ordenadores);
- if ($pos !== false) { // Cadena encontrada
- if($tbPerfil[$k]["numpar"]==$numpar)
- return($tbPerfil[$k]["perfilsoft"]);
+ for ($k=0; $k<$conPerfil; $k++){
+ //$pos = strpos($tbPerfil[$k]["ordenadores"], $ordenadores);
+ //if ($pos !== false) { // Cadena encontrada
+ //if($tbPerfil[$k]["numpar"]==$numpar)
+ if ($tbPerfil[$k]["numpar"] == $numpar) {
+ $pcs = explode (",", $ordenadores);
+ $intersec = array_intersect (explode(",", $tbPerfil[$k]["ordenadores"]), $pcs);
+ if (array_diff ($pcs, $intersec) == NULL) {
+ return ($tbPerfil[$k]["perfilsoft"]);
+ }
}
}
}
@@ -442,33 +453,36 @@ function tomaPerfiles($numpar,$ordenadores)
________________________________________________________________________________________________________*/
function cargaImagenes($cmd,$idambito,$ambito)
{
- global $tbImg; // Tabla contenedora de ordenadores incluidos en la consulta
+ global $tbImg; // Tabla contenedora de ordenadores incluidos en la consulta
global $conImg; // Contador de elementos anteriores
global $AMBITO_AULAS;
global $AMBITO_GRUPOSORDENADORES;
global $AMBITO_ORDENADORES;
- $cmd->texto="SELECT count(*) as con,ordenadores_particiones.idimagen,ordenadores_particiones.numpar,imagenes.descripcion as imagen,
- group_concat(cast(ordenadores_particiones.idordenador AS char( 11) )
- ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
- FROM ordenadores
- INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
- INNER JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen";
+ $cmd->texto="SELECT count(*) as con,
+ ordenadores_particiones.idimagen,
+ ordenadores_particiones.numpar,
+ imagenes.descripcion as imagen,
+ GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
+ ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
+ FROM ordenadores
+ JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
+ JOIN imagenes ON imagenes.idimagen=ordenadores_particiones.idimagen";
switch($ambito){
case $AMBITO_AULAS :
- $cmd->texto.=" INNER JOIN aulas ON aulas.idaula = ordenadores.idaula
- WHERE aulas.idaula =".$idambito;
- break;
+ $cmd->texto.=" 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.=" JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
+ WHERE gruposordenadores.idgrupo =".$idambito;
break;
case $AMBITO_ORDENADORES :
- $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
+ $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
}
- $cmd->texto.=" GROUP BY ordenadores_particiones.numpar,ordenadores_particiones.idimagen";
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.idimagen";
//echo "carga imagenes:".$cmd->texto;
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -492,14 +506,19 @@ function cargaImagenes($cmd,$idambito,$ambito)
________________________________________________________________________________________________________*/
function tomaImagenes($numpar,$ordenadores)
{
- global $tbImg; // Tabla contenedora de ordenadores incluidos en la consulta
+ global $tbImg; // Tabla contenedora de ordenadores incluidos en la consulta
global $conImg; // Contador de elementos anteriores
- for($k=0;$k<$conImg;$k++){
- $pos = strpos($tbImg[$k]["ordenadores"], $ordenadores);
- if ($pos !== false) { // Cadena encontrada
- if($tbImg[$k]["numpar"]==$numpar)
- return($tbImg[$k]["imagen"]);
+ for ($k=0; $k<$conImg; $k++) {
+ //$pos = strpos($tbImg[$k]["ordenadores"], $ordenadores);
+ //if ($pos !== false) { // Cadena encontrada
+ //if($tbImg[$k]["numpar"]==$numpar){
+ if ($tbImg[$k]["numpar"] == $numpar) {
+ $pcs = explode (",", $ordenadores);
+ $intersec = array_intersect (explode(",", $tbImg[$k]["ordenadores"]), $pcs);
+ if (array_diff ($pcs, $intersec) == NULL) {
+ return ($tbImg[$k]["imagen"]);
+ }
}
}
}
@@ -509,33 +528,35 @@ function tomaImagenes($numpar,$ordenadores)
________________________________________________________________________________________________________*/
function cargaNombresSO($cmd,$idambito,$ambito)
{
- global $tbSO; // Tabla contenedora de ordenadores incluidos en la consulta
+ global $tbSO; // Tabla contenedora de ordenadores incluidos en la consulta
global $conSO; // Contador de elementos anteriores
global $AMBITO_AULAS;
global $AMBITO_GRUPOSORDENADORES;
global $AMBITO_ORDENADORES;
- $cmd->texto="SELECT count(*) as con,ordenadores_particiones.idnombreso,ordenadores_particiones.numpar,nombresos.nombreso,
- group_concat(cast(ordenadores_particiones.idordenador AS char( 11) )
- ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
- FROM ordenadores
- INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
- INNER JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso";
+ $cmd->texto="SELECT COUNT(*) AS con,
+ ordenadores_particiones.idnombreso,
+ ordenadores_particiones.numpar,nombresos.nombreso,
+ GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
+ ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
+ FROM ordenadores
+ JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador
+ JOIN nombresos ON nombresos.idnombreso=ordenadores_particiones.idnombreso";
switch($ambito){
case $AMBITO_AULAS :
- $cmd->texto.=" INNER JOIN aulas ON aulas.idaula = ordenadores.idaula
- WHERE aulas.idaula =".$idambito;
- break;
+ $cmd->texto.=" 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.=" JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
+ WHERE gruposordenadores.idgrupo =".$idambito;
break;
case $AMBITO_ORDENADORES :
- $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
+ $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
}
- $cmd->texto.=" GROUP BY ordenadores_particiones.numpar,ordenadores_particiones.idnombreso";
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.idnombreso";
//echo "carga nombresos:".$cmd->texto;
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -559,14 +580,18 @@ function cargaNombresSO($cmd,$idambito,$ambito)
________________________________________________________________________________________________________*/
function tomaNombresSO($numpar,$ordenadores)
{
- global $tbSO; // Tabla contenedora de ordenadores incluidos en la consulta
+ global $tbSO; // Tabla contenedora de ordenadores incluidos en la consulta
global $conSO; // Contador de elementos anteriores
- for($k=0;$k<$conSO;$k++){
- $pos = strpos($tbSO[$k]["ordenadores"], $ordenadores);
- if ($pos !== false) { // Cadena encontrada
- if($tbSO[$k]["numpar"]==$numpar)
- return($tbSO[$k]["nombreso"]);
+ for($k=0; $k<$conSO; $k++) {
+ if ($tbSO[$k]["numpar"]==$numpar) {
+ //$pos = strpos($tbSO[$k]["ordenadores"], $ordenadores);
+ //if ($pos !== false) { // Cadena encontrada
+ $pcs = explode (",", $ordenadores);
+ $intersec = array_intersect (explode(",", $tbSO[$k]["ordenadores"]), $pcs);
+ if (array_diff ($pcs, $intersec) == NULL) {
+ return ($tbSO[$k]["nombreso"]);
+ }
}
}
}
@@ -576,32 +601,34 @@ function tomaNombresSO($numpar,$ordenadores)
________________________________________________________________________________________________________*/
function cargaTamano($cmd,$idambito,$ambito)
{
- global $tbTam; // Tabla contenedora de ordenadores incluidos en la consulta
+ global $tbTam; // Tabla contenedora de ordenadores incluidos en la consulta
global $conTam; // Contador de elementos anteriores
global $AMBITO_AULAS;
global $AMBITO_GRUPOSORDENADORES;
global $AMBITO_ORDENADORES;
- $cmd->texto="SELECT count(*) as con,ordenadores_particiones.tamano,ordenadores_particiones.numpar,
- group_concat(cast(ordenadores_particiones.idordenador AS char( 11) )
- ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
- FROM ordenadores
- INNER JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador";
+ $cmd->texto="SELECT COUNT(*) AS con,
+ ordenadores_particiones.tamano,
+ ordenadores_particiones.numpar,
+ GROUP_CONCAT(CAST(ordenadores_particiones.idordenador AS CHAR(11) )
+ ORDER BY ordenadores_particiones.idordenador SEPARATOR ',' ) AS ordenadores
+ FROM ordenadores
+ JOIN ordenadores_particiones ON ordenadores_particiones.idordenador=ordenadores.idordenador";
switch($ambito){
case $AMBITO_AULAS :
- $cmd->texto.=" INNER JOIN aulas ON aulas.idaula = ordenadores.idaula
- WHERE aulas.idaula =".$idambito;
- break;
+ $cmd->texto.=" 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.=" JOIN gruposordenadores ON gruposordenadores.idgrupo = ordenadores.grupoid
+ WHERE gruposordenadores.idgrupo =".$idambito;
break;
case $AMBITO_ORDENADORES :
- $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
+ $cmd->texto.=" WHERE ordenadores.idordenador =".$idambito;
break;
}
- $cmd->texto.=" GROUP BY ordenadores_particiones.numpar,ordenadores_particiones.tamano";
+ $cmd->texto.=" GROUP BY ordenadores_particiones.numpar, ordenadores_particiones.tamano";
//echo "carga tamaños:".$cmd->texto;
$rs=new Recordset;
$rs->Comando=&$cmd;
@@ -624,16 +651,21 @@ function cargaTamano($cmd,$idambito,$ambito)
________________________________________________________________________________________________________*/
function tomaTamano($numpar,$ordenadores)
{
- global $tbTam; // Tabla contenedora de ordenadores incluidos en la consulta
+ global $tbTam; // Tabla contenedora de ordenadores incluidos en la consulta
global $conTam; // Contador de elementos anteriores
- for($k=0;$k<$conTam;$k++){
- $pos = strpos($tbTam[$k]["ordenadores"], $ordenadores);
- if ($pos !== false) { // Cadena encontrada
- if($tbTam[$k]["numpar"]==$numpar)
- return($tbTam[$k]["tamano"]);
+ for ($k=0; $k<$conTam; $k++) {
+ if ($tbTam[$k]["numpar"] == $numpar) {
+// $pos = strpos ($tbTam[$k]["ordenadores"], $ordenadores);
+// if ($pos !== FALSE) { // Cadena encontrada
+ $pcs = explode (",", $ordenadores);
+ $intersec = array_intersect (explode(",", $tbTam[$k]["ordenadores"]), $pcs);
+ if (array_diff ($pcs, $intersec) == NULL) {
+ return ($tbTam[$k]["tamano"]);
+ }
}
}
}
?>
+
diff --git a/admin/WebConsole/principal/aulas.php b/admin/WebConsole/principal/aulas.php
index 071ddf44..b8fee010 100644
--- a/admin/WebConsole/principal/aulas.php
+++ b/admin/WebConsole/principal/aulas.php
@@ -834,8 +834,13 @@ function ContextualXMLOrdenadores(){
$layerXML.=' imgitem="../images/iconos/acciones.gif"';
$layerXML.=' textoitem="Log"';
$layerXML.='></ITEM>';
-
-
+
+ $layerXML.='<ITEM';
+ $layerXML.=' alpulsar="ver_log_seguimiento('.$AMBITO_ORDENADORES.')"';
+ $layerXML.=' imgitem="../images/iconos/acciones.gif"';
+ $layerXML.=' textoitem="Log_seguimiento"';
+ $layerXML.='></ITEM>';
+
$layerXML.='<ITEM';
$layerXML.=' alpulsar="mover_ordenador()"';
$layerXML.=' imgitem="../images/iconos/mover.gif"';
diff --git a/admin/WebConsole/principal/boot.php b/admin/WebConsole/principal/boot.php
index 8fda145d..5bfe0fa1 100644..120000
--- a/admin/WebConsole/principal/boot.php
+++ b/admin/WebConsole/principal/boot.php
@@ -1,217 +1 @@
-<html>
-<TITLE>Administración web de aulas</TITLE>
-<head>
-<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
- <LINK rel="stylesheet" type="text/css" href="../estilos.css">
- <SCRIPT language="javascript" src="../jscripts/propiedades_aulas.js"></SCRIPT>
- <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT>
- <SCRIPT language="javascript" src="../idiomas/javascripts/esp/propiedades_aulas_esp.js"></SCRIPT></HEAD>
-
-<script language="javascript" type="text/javascript">
-
-function move(fbox, tbox) {
- var arrFbox = new Array();
- var arrTbox = new Array();
- var arrLookup = new Array();
- var i;
- for (i = 0; i < tbox.options.length; i++) {
- arrLookup[tbox.options[i].text] = tbox.options[i].value;
- arrTbox[i] = tbox.options[i].text;
- }
- var fLength = 0;
- var tLength = arrTbox.length;
- for(i = 0; i < fbox.options.length; i++) {
- arrLookup[fbox.options[i].text] = fbox.options[i].value;
- if (fbox.options[i].selected && fbox.options[i].value != "") {
- arrTbox[tLength] = fbox.options[i].text;
- tLength++;
- }
- else {
- arrFbox[fLength] = fbox.options[i].text;
- fLength++;
- }
- }
- arrFbox.sort();
- arrTbox.sort();
- fbox.length = 0;
- tbox.length = 0;
- var c;
-
-for(c = 0; c < arrFbox.length; c++) {
-var no = new Option();
-no.value = arrLookup[arrFbox[c]];
-no.text = arrFbox[c];
-fbox[c] = no;
-}
-
-for(c = 0; c < arrTbox.length; c++) {
-var no = new Option();
-no.value = arrLookup[arrTbox[c]];
-no.text = arrTbox[c];
-tbox[c] = no;
- }
-}
-
-function allSelect()
-{
-var saveString = "";
-// seleccionamos cada uno de los select
-var input = document.getElementsByTagName('select');
-//alert(input.length);
-for(var i=0; i<input.length; i++){
-//if(inputs[i].getAttribute('type')=='button'){
-// your statements
-patron = "L";
-parm = input[i].name;
-//alert(parm);
-parm = parm.replace(patron,'');
-//alert(parm);
-for (j=0;j<input[i].length;j++)
- {
- //List.options[i].selected = true;
- saveString = saveString + parm + '|' + input[i].options[j].value + ';';
- //alert(saveString);
- }
-}
-document.forms['myForm'].listOfItems.value = saveString;
-}
-
-
-</script>
-</head>
-<body>
-
-<?php
-include_once("../includes/ctrlacc.php");
-include_once("../clases/AdoPhp.php");
-include_once("../clases/XmlPhp.php");
-include_once("../clases/MenuContextual.php");
-include_once("../clases/SockHidra.php");
-include_once("../includes/constantes.php");
-include_once("../includes/comunes.php");
-include_once("../includes/CreaComando.php");
-include_once("../idiomas/php/".$idioma."/aulas_".$idioma.".php");
-
-$cmd=CreaComando($cadenaconexion);
-if (!$cmd)
- Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
-//________________________________________________________________________________________________________
-
-$litambito=0;
-$idambito=0;
-$nombreambito="";
-
-
-if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; // Recoge parametros
-if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
-if (isset($_GET["nombreambito"])) $nombreambito=$_GET["nombreambito"];
-
-
-switch($litambito){
- case "aulas":
- $seleccion="and idaula=" . $idambito ."";
- break;
- case "gruposordenadores":
- $seleccion= "and grupoid=" . $idambito . "";
- break;
-}
-?>
-
-<TABLE align=center border=1 cellPadding=1 cellSpacing=1 class=tabla_datos >
-<form name="myForm" method="post" action="../gestores/gestor_pxe.php?idaula=<?php echo $idambito ?>&nombreambito=<?php echo $nombreambito?>&litambito=<?php echo $litambito?>" >
-
-
- <P align=center class=cabeceras>Gestión Arranque Avanzado<BR>
- <SPAN align=center class=subcabeceras> <?php echo $nombreambito; ?> </SPAN>
- <input type="submit" value="GUARDAR" name="saveButton" onclick="allSelect()"> </P>
-
-
-
-
-
-
-<input type="hidden" name="listOfItems" value="">
-<?php
-echo "<input type='hidden' name='rungrupo' value='" . $_GET['id_aula'] . "'>";
-?>
-
-
-<!-- primer file, nombre de las equipos por pxe hace falta <td> </td>-->
-<tr>
-<td>
- <!-- <a href="./muestramenu.php?labelmenu=pxe"> OGclient </a><br> pxe <br> -->
-OGclient <br>
-<select multiple size="30" name="Lpxe" id="Lpxe" style="width:100">
-
-<?php
-#### listado de equipos con menu pxe
-$menupxe=pxe;
-$listadopxe=listaequipos($cmd,$menupxe,$seleccion);
-echo $listadopxe;
-?>
-</select>
-</td>
-
-
-<?php
-
-$cmd->texto="SELECT * FROM menuboot where label <> 'pxe' ";
-$rsmenu=new Recordset;
-$rsmenu->Comando=&$cmd;
-if (!$rsmenu->Abrir()) echo "error";
-$rsmenu->Primero();
-while (!$rsmenu->EOF)
-{
- echo "<td></td>";
- echo "<td> ";
- echo $rsmenu->campos['description'];
- #echo "<a href='./muestramenu.php?labelmenu=" . $rsmenu->campos['label'] ."'> " . $rsmenu->campos['description'] . " </a> <br>". $rs->campos['label'] . "<br>";
- echo " <br>";
- echo "<input type='button' onClick='move(this.form.L" . $rsmenu->campos['label'] . ",this.form.Lpxe)' value='OUT' style='height: 25px; width: 50px' >";
- echo "<input type='button' onClick='move(this.form.Lpxe,this.form.L" . $rsmenu->campos['label'] .")' value='IN' style='height: 25px; width: 35px' >";
- echo " <br>";
- echo "<select multiple size='30' name='L" . $rsmenu->campos['label'] . "' style='width:100'>";
- $listadopxe="";
- $listadopxe=listaequipos($cmd,$rsmenu->campos['label'],$seleccion);
- echo $listadopxe;
- echo "</select>";
- echo "</td>";
- $rsmenu->Siguiente();
-}
-$rsmenu->Cerrar();
-
-
-
-
-
-
-
-// esta funcion genera los elementos de un select(formulario html) donde aparecen los nombres de los ordenadores, según su menu pxe
-function listaequipos($cmd,$menupxe,$seleccion)
-{
-$cmd->texto="SELECT * FROM ordenadores where arranque='" . $menupxe ."' " . $seleccion;
-$rs=new Recordset;
-$rs->Comando=&$cmd;
-if (!$rs->Abrir()) echo "error";
-$rs->Primero();
-while (!$rs->EOF)
-{
- echo "<option value='";
- echo $rs->campos["nombreordenador"];
- echo "'>";
- echo $rs->campos["nombreordenador"];
- echo "</option>";
- $rs->Siguiente();
-}
-$rs->Cerrar();
-}
-
-?>
-
-</tr>
-
-</form>
-</table>
-
-</body>
-</html>
+boot_grub4dos.php \ No newline at end of file
diff --git a/admin/WebConsole/principal/boot_pxelinux.php b/admin/WebConsole/principal/boot_pxelinux.php
new file mode 100644
index 00000000..8fda145d
--- /dev/null
+++ b/admin/WebConsole/principal/boot_pxelinux.php
@@ -0,0 +1,217 @@
+<html>
+<TITLE>Administración web de aulas</TITLE>
+<head>
+<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+ <LINK rel="stylesheet" type="text/css" href="../estilos.css">
+ <SCRIPT language="javascript" src="../jscripts/propiedades_aulas.js"></SCRIPT>
+ <SCRIPT language="javascript" src="../jscripts/opciones.js"></SCRIPT>
+ <SCRIPT language="javascript" src="../idiomas/javascripts/esp/propiedades_aulas_esp.js"></SCRIPT></HEAD>
+
+<script language="javascript" type="text/javascript">
+
+function move(fbox, tbox) {
+ var arrFbox = new Array();
+ var arrTbox = new Array();
+ var arrLookup = new Array();
+ var i;
+ for (i = 0; i < tbox.options.length; i++) {
+ arrLookup[tbox.options[i].text] = tbox.options[i].value;
+ arrTbox[i] = tbox.options[i].text;
+ }
+ var fLength = 0;
+ var tLength = arrTbox.length;
+ for(i = 0; i < fbox.options.length; i++) {
+ arrLookup[fbox.options[i].text] = fbox.options[i].value;
+ if (fbox.options[i].selected && fbox.options[i].value != "") {
+ arrTbox[tLength] = fbox.options[i].text;
+ tLength++;
+ }
+ else {
+ arrFbox[fLength] = fbox.options[i].text;
+ fLength++;
+ }
+ }
+ arrFbox.sort();
+ arrTbox.sort();
+ fbox.length = 0;
+ tbox.length = 0;
+ var c;
+
+for(c = 0; c < arrFbox.length; c++) {
+var no = new Option();
+no.value = arrLookup[arrFbox[c]];
+no.text = arrFbox[c];
+fbox[c] = no;
+}
+
+for(c = 0; c < arrTbox.length; c++) {
+var no = new Option();
+no.value = arrLookup[arrTbox[c]];
+no.text = arrTbox[c];
+tbox[c] = no;
+ }
+}
+
+function allSelect()
+{
+var saveString = "";
+// seleccionamos cada uno de los select
+var input = document.getElementsByTagName('select');
+//alert(input.length);
+for(var i=0; i<input.length; i++){
+//if(inputs[i].getAttribute('type')=='button'){
+// your statements
+patron = "L";
+parm = input[i].name;
+//alert(parm);
+parm = parm.replace(patron,'');
+//alert(parm);
+for (j=0;j<input[i].length;j++)
+ {
+ //List.options[i].selected = true;
+ saveString = saveString + parm + '|' + input[i].options[j].value + ';';
+ //alert(saveString);
+ }
+}
+document.forms['myForm'].listOfItems.value = saveString;
+}
+
+
+</script>
+</head>
+<body>
+
+<?php
+include_once("../includes/ctrlacc.php");
+include_once("../clases/AdoPhp.php");
+include_once("../clases/XmlPhp.php");
+include_once("../clases/MenuContextual.php");
+include_once("../clases/SockHidra.php");
+include_once("../includes/constantes.php");
+include_once("../includes/comunes.php");
+include_once("../includes/CreaComando.php");
+include_once("../idiomas/php/".$idioma."/aulas_".$idioma.".php");
+
+$cmd=CreaComando($cadenaconexion);
+if (!$cmd)
+ Header('Location: '.$pagerror.'?herror=2'); // Error de conexión con servidor B.D.
+//________________________________________________________________________________________________________
+
+$litambito=0;
+$idambito=0;
+$nombreambito="";
+
+
+if (isset($_GET["litambito"])) $litambito=$_GET["litambito"]; // Recoge parametros
+if (isset($_GET["idambito"])) $idambito=$_GET["idambito"];
+if (isset($_GET["nombreambito"])) $nombreambito=$_GET["nombreambito"];
+
+
+switch($litambito){
+ case "aulas":
+ $seleccion="and idaula=" . $idambito ."";
+ break;
+ case "gruposordenadores":
+ $seleccion= "and grupoid=" . $idambito . "";
+ break;
+}
+?>
+
+<TABLE align=center border=1 cellPadding=1 cellSpacing=1 class=tabla_datos >
+<form name="myForm" method="post" action="../gestores/gestor_pxe.php?idaula=<?php echo $idambito ?>&nombreambito=<?php echo $nombreambito?>&litambito=<?php echo $litambito?>" >
+
+
+ <P align=center class=cabeceras>Gestión Arranque Avanzado<BR>
+ <SPAN align=center class=subcabeceras> <?php echo $nombreambito; ?> </SPAN>
+ <input type="submit" value="GUARDAR" name="saveButton" onclick="allSelect()"> </P>
+
+
+
+
+
+
+<input type="hidden" name="listOfItems" value="">
+<?php
+echo "<input type='hidden' name='rungrupo' value='" . $_GET['id_aula'] . "'>";
+?>
+
+
+<!-- primer file, nombre de las equipos por pxe hace falta <td> </td>-->
+<tr>
+<td>
+ <!-- <a href="./muestramenu.php?labelmenu=pxe"> OGclient </a><br> pxe <br> -->
+OGclient <br>
+<select multiple size="30" name="Lpxe" id="Lpxe" style="width:100">
+
+<?php
+#### listado de equipos con menu pxe
+$menupxe=pxe;
+$listadopxe=listaequipos($cmd,$menupxe,$seleccion);
+echo $listadopxe;
+?>
+</select>
+</td>
+
+
+<?php
+
+$cmd->texto="SELECT * FROM menuboot where label <> 'pxe' ";
+$rsmenu=new Recordset;
+$rsmenu->Comando=&$cmd;
+if (!$rsmenu->Abrir()) echo "error";
+$rsmenu->Primero();
+while (!$rsmenu->EOF)
+{
+ echo "<td></td>";
+ echo "<td> ";
+ echo $rsmenu->campos['description'];
+ #echo "<a href='./muestramenu.php?labelmenu=" . $rsmenu->campos['label'] ."'> " . $rsmenu->campos['description'] . " </a> <br>". $rs->campos['label'] . "<br>";
+ echo " <br>";
+ echo "<input type='button' onClick='move(this.form.L" . $rsmenu->campos['label'] . ",this.form.Lpxe)' value='OUT' style='height: 25px; width: 50px' >";
+ echo "<input type='button' onClick='move(this.form.Lpxe,this.form.L" . $rsmenu->campos['label'] .")' value='IN' style='height: 25px; width: 35px' >";
+ echo " <br>";
+ echo "<select multiple size='30' name='L" . $rsmenu->campos['label'] . "' style='width:100'>";
+ $listadopxe="";
+ $listadopxe=listaequipos($cmd,$rsmenu->campos['label'],$seleccion);
+ echo $listadopxe;
+ echo "</select>";
+ echo "</td>";
+ $rsmenu->Siguiente();
+}
+$rsmenu->Cerrar();
+
+
+
+
+
+
+
+// esta funcion genera los elementos de un select(formulario html) donde aparecen los nombres de los ordenadores, según su menu pxe
+function listaequipos($cmd,$menupxe,$seleccion)
+{
+$cmd->texto="SELECT * FROM ordenadores where arranque='" . $menupxe ."' " . $seleccion;
+$rs=new Recordset;
+$rs->Comando=&$cmd;
+if (!$rs->Abrir()) echo "error";
+$rs->Primero();
+while (!$rs->EOF)
+{
+ echo "<option value='";
+ echo $rs->campos["nombreordenador"];
+ echo "'>";
+ echo $rs->campos["nombreordenador"];
+ echo "</option>";
+ $rs->Siguiente();
+}
+$rs->Cerrar();
+}
+
+?>
+
+</tr>
+
+</form>
+</table>
+
+</body>
+</html>
diff --git a/admin/WebConsole/principal/configuraciones.php b/admin/WebConsole/principal/configuraciones.php
index c49c3a6d..435ea935 100644
--- a/admin/WebConsole/principal/configuraciones.php
+++ b/admin/WebConsole/principal/configuraciones.php
@@ -147,48 +147,68 @@ 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 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 '</TR>';
+ 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 '</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
- echo'<TR height=16>'.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);
+ $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">'.$tbKeys[$k]["sistemafichero"].'</td>'.chr(13);
+ echo'<td align="center">&nbsp;'.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</td>'.chr(13);
- //echo'<TD align=center>&nbsp;'.$tbKeys[$k]["sistemafichero"].'&nbsp;</TD>'.chr(13);
- echo'<TD align=center>&nbsp;'.tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
+ //echo '<td align="center">'.$tbKeys[$k]["nombreso"].'</td>'.chr(13);
+ echo '<td align="center">&nbsp;'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</td>'.chr(13);
- //echo '<TD>&nbsp;'.$tbKeys[$k]["nombreso"].'&nbsp;</TD>'.chr(13);
- echo '<TD align=center>&nbsp;'.tomaNombresSO($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
+ //echo'<td align="right">'.formatomiles($tbKeys[$k]["tamano"]).'&nbsp;</td>'.chr(13);
+ echo'<td align="right">&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</td>'.chr(13);
- //echo'<TD align=rigth>&nbsp;'.formatomiles($tbKeys[$k]["tamano"]).'&nbsp;</TD>'.chr(13);
- echo'<TD align=center>&nbsp;'.tomaTamano($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
-
- //echo'<TD>&nbsp;'.$tbKeys[$k]["imagen"].'&nbsp;</TD>'.chr(13);
- echo'<TD align=center>&nbsp;'.tomaImagenes($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
+ //echo'<td align="center">'.$tbKeys[$k]["imagen"].'</td>'.chr(13);
+ echo'<td align="center">&nbsp;'.tomaImagenes($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</td>'.chr(13);
- //echo'<TD>&nbsp;'.$tbKeys[$k]["perfilsoft"].'&nbsp;</TD>'.chr(13);
- echo'<TD align=center>&nbsp;'.tomaPerfiles($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</TD>'.chr(13);
+ //echo'<td align="center">'.$tbKeys[$k]["perfilsoft"].'</td>'.chr(13);
+ echo'<td align="center">&nbsp;'.tomaPerfiles($tbKeys[$k]["numpar"],$idordenadores).'&nbsp;</td>'.chr(13);
- echo'</TR>'.chr(13);
- break;
+ 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'</tr>'.chr(13);
}
- echo '<TR height=5><TD colspan='.$colums.' style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</TD></TR>';
+ echo '<tr height="5"><td colspan="'.$colums.'" style="BORDER-TOP: #999999 1px solid;BACKGROUND-COLOR: #FFFFFF;">&nbsp;</td></tr>';
}
//________________________________________________________________________________________________________
function datosAulas($cmd,$idaula)
diff --git a/admin/WebConsole/principal/verlogseguimiento.php b/admin/WebConsole/principal/verlogseguimiento.php
index e74e17f7..cc0fa3e7 100644
--- a/admin/WebConsole/principal/verlogseguimiento.php
+++ b/admin/WebConsole/principal/verlogseguimiento.php
@@ -48,7 +48,7 @@ else
<TITLE>Log: <? echo $_GET["nombreordenador"] ?> </TITLE>
<HEAD>
<?
-echo "<meta http-equiv='Refresh' content='2;URL=./verlogseguimiento.php?nombreordenador=". $_GET["nombreordenador"] ."&ip=".$ip ."'";
+echo "<meta http-equiv='Refresh' content='2;URL=http://".$ip."/cgi-bin/httpd-log.sh'";
?>
diff --git a/admin/WebConsole/propiedades/propiedades_ordenadores.php b/admin/WebConsole/propiedades/propiedades_ordenadores.php
index 69f44b4c..dd166637 100644
--- a/admin/WebConsole/propiedades/propiedades_ordenadores.php
+++ b/admin/WebConsole/propiedades/propiedades_ordenadores.php
@@ -191,7 +191,7 @@ include_once("../includes/opcionesbotonesop.php");
//
// Frame con la información de la configuración
echo '<DIV align=center>';
-echo '<IFRAME scrolling=yes height=150 width=90%
+echo '<IFRAME scrolling=yes height=170 width=90%
src="../principal/configuraciones.php?swp=1&idambito='.$idordenador.'&ambito='.$AMBITO_ORDENADORES.'"></IFRAME>';
echo '</DIV>';
//________________________________________________________________________________________________________
diff --git a/client/boot-tools/INSTALL.es.txt b/client/boot-tools/INSTALL.es.txt
index d39e798d..7c580934 100644
--- a/client/boot-tools/INSTALL.es.txt
+++ b/client/boot-tools/INSTALL.es.txt
@@ -2,9 +2,15 @@ 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
+- Mas información http://www.opengnsys.es/wiki/ClienteInitrdDSGenerarloV1.0.2
+
+
Requisitos iniciales
--------------------
-
- Utilizar el usuario "root" para ejecutar el proceso de generación del cliente.
- Comprobar la conexión a Internet, sobre todo si usas proxy (el hecho de que funcione apt-get no significa que tengas el proxy configurado).
@@ -12,35 +18,30 @@ Requisitos iniciales
Proceso de instalación
----------------------
-0. Si ya tenemos configurado TFTP, renombrar el directorio /var/lib/tftpboot/ogclient.
-1. Descargar del Subversion las herramientas del cliente
-2. Ejecutar el instalador:
-
+#0. Si ya tenemos configurado TFTP, renombrar el directorio /var/lib/tftpboot/ogclient.
mv /opt/opengnsys/tftpboot/ogclient /opt/opengnsys/tftpboot/ogclient-old;
-svn checkout http://www.opengnsys.es/svn/trunk/client /tmp/opengnsys_installer/opengnsys;
+
+#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;
find /tmp/opengnsys_installer/ -name .svn -type d -exec rm -fr {} \; 2>/dev/null;
-/tmp/opengnsys_installer/opengnsys/client/boot-tools/ogClientGeneratorV2.sh;
+#2. Ejecutar el instalador:
+/tmp/opengnsys_installer/opengnsys/client/boot-tools/boottoolsgenerator.sh;
-NOTAS:
-- el proceso tardará un buen rato, dependiendo de nuestras circustancias.
-- crea un kernel, initrd, ogclient.img en /var/lib/tftpboot/ogclient
-- el ogclient.img es el Segundo sistema de archivos en formato fichero bloques emulando a disco con partición primaria.
-- el ogclient.sqfs es el Segundo sistema de archivos (partición primaria del img) en formato squashfs. Se usará con el parámetro og2nd=sqfs
-- los logs de instalación estarán en /tmp/opengnsys_installation.log
-NOTA ACLARATORIA: $OGSCRITPS(reboot,poweroff) antes de /sbin/{reboot,poweroff}
Descripción de la estrucutra de boot-tools
------------------------------------------
- INSTALL.es.txt este mismo archivo.
-- ogInstaller.lib son todas las funciones del instalador oficial de OpenGnSys.
- Algunas de ellas son utilizadas en la generación del cliente
- (crear ticket para separar las funciones necesarias).
-- ogClientManager.lib son las funicones especificas para la instalacion del cliente;
- están escritas en orden de que son llamadas por el instalador.
-- ogClientGeneratorV2.sh es el guión de ejecución del isntalador.
-
+- boottollsgenerator.sh proceso de generación del sistema operativo opengnsys.
+- boottoolsfunctions.lib libreria complementaria del boottolsgenerator.sh
+- includes/ directorio con ficheros específicos para incluir en la distribución.
+
+
+
+
diff --git a/client/boot-tools/boottoolsfunctions.lib b/client/boot-tools/boottoolsfunctions.lib
new file mode 100644
index 00000000..2f7aff65
--- /dev/null
+++ b/client/boot-tools/boottoolsfunctions.lib
@@ -0,0 +1,518 @@
+#!/bin/bash
+#/**
+#@file boottoolsfunctions.lib
+#@brief Librería o clase Boot-Tools
+#@class Boot-Tools
+#@brief Funciones para generar un sistema operativo cliente para opengnsys
+#@version 0.9
+#@warning License: GNU GPLv3+
+#*/
+
+
+# btGetVariables: define las constantes a utilizar
+# Autor: Antonio J. Doblas Viso. Universidad de Málaga.
+function btogGetVar()
+{
+
+export BTSVNBOOTTOOLS=/tmp/opengnsys_installer/opengnsys/client/boot-tools
+export BTSVNSHARE=/tmp/opengnsys_installer/opengnsys/client/shared
+export BTSVNENGINE=/tmp/opengnsys_installer/opengnsys/client/engine
+
+export BTSVNOG2=/tmp/opengnsys_installer/opengnsys2
+
+export BTTARGETDIR=/var/lib/tftpboot/ogclient/
+export BTROOTFSIMG=${BTTARGETDIR}ogclient.img
+export BTROOTFSMNT=${BTTARGETDIR}ogclientmount
+# tamaño maximo limitado por schroot 2GB
+export BTVIRTUALDISKSIZE=2000
+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
+}
+
+
+# btGetOsInfo: detecta la version del host, para tenerla de referencia en el boot-tools a generar.
+#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2010/05/24
+#@version 1.0 - Compatibilidad OpengGnsys X.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011/08/03
+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/ "
+ ;;
+ 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/ "
+ ;;
+ 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/"
+ ;;
+ esac
+ echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP
+}
+
+# btogSetFsVirtual: Crea y formatea el fichero - disco duro virtual
+#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2010/05/24
+#@version 1.0 - Compatibilidad OpengGnsys X.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011/08/03
+# error code return 2
+function btogSetFsVirtual ()
+{
+
+local RERROR DISKLOOP PARTLOOP #return code error
+
+#Dependencias.
+[ -z "$BTROOTFSIMG" ] && btogGetVar
+
+echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $BTVIRTUALDISKSIZE MB "
+
+#Desmontamos el dispositivo virtual
+mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT
+mount | grep $BTROOTFSMNTT && umount $BTROOTFSMNT
+
+#echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $BTROOTFSMNT"
+mkdir -p $BTROOTFSMNT
+
+if [ $? -ne 0 ]
+then
+ errorAndLog "$FUNCNAME(): Creando directorio $BTROOTFSMNT : ERROR"
+ return 1
+fi
+
+# Permisos para el usuario opengnsys.
+chown -R root:opengnsys $BTTARGETDIR
+
+#echo "$FUNCNAME(): Creando el disco virtual con tamaño máximo de $BTVIRTUALDISKSIZE MB"
+dd if=/dev/zero of=$BTROOTFSIMG bs=1048576 count=$BTVIRTUALDISKSIZE
+ #qemu-img create $BTROOTFSIMG 3G
+ #dd if=/dev/zero of=$BTROOTFSIMG bs=1k count=$OGCLIENTSIZEKB # necesita 500MB
+
+if [ $? -ne 0 ]
+then
+ errorAndLog "$FUNCNAME(): Creando el disco virtual con tamaño maxima $BTVIRTUALDISKSIZE MB : ERROR"
+ return 2
+fi
+
+# Particionamos el disco virtual con una sola particion primaria.
+DISKLOOP=$(losetup -f)
+#TODO: si no DISKLOOP error
+losetup $DISKLOOP $BTROOTFSIMG
+#echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria"
+echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP
+
+
+#echoAndLog "$FUNCNAME(): Liberamos Desmontando $DISKLOOP despues del particionado "
+losetup -d $DISKLOOP
+if [ $? -ne 0 ]
+then
+ errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR"
+ return 2
+fi
+
+
+PARTLOOP=$(losetup -f)
+#echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP"
+losetup -o 32256 $PARTLOOP $BTROOTFSIMG && mkfs.ext3 -b 4096 -L $BTROOTFSIMGLABEL $PARTLOOP
+if [ $? -ne 0 ]
+then
+ errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR"
+ return 2
+fi
+#echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo "
+losetup -d $PARTLOOP
+if [ $? -ne 0 ]
+then
+ errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR"
+ return 2
+else
+ echoAndLog "$FUNCNAME(): $BTROOTFSIMG $BTVIRTUALDISKSIZE MB : OK"
+fi
+}
+
+
+# btogSetfsBase: Genera el sistema root base con debootstrap
+#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2010/05/24
+#@version 1.0 - Compatibilidad OpengGnsys X.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011/08/03
+# error code return 3
+function btogSetFsBase ()
+{
+
+# Dependencias
+[ -z "$OSCODENAME" ] && btogGetOsInfo
+
+echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos "
+
+#Montamos el dispositivo virtual en su punto de montaje.
+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 --arch=$OSARCH --components=main,universe ${OSCODENAME} ${BTROOTFSMNT} ${OSHTTP}
+
+
+if [ $? -ne 0 ]; then
+ errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $BTROOTFSMNT $OSHTTP : ha fallado!"
+ mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT
+ return 3
+else
+ echoAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $BTROOTFSMNT $OSHTTP : ok"
+ mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT
+ return 0
+fi
+ sleep 5
+
+##preubas revisar OSRELEASE
+#debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP}
+#debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
+#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
+#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
+}
+
+#btogSetFsAcces: habilita el acceso al sistema root del cliente con schroot
+#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2010/05/24
+#@version 1.0 - Compatibilidad OpengGnsys X.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011/08/03
+function btogSetFsAccess()
+{
+echoAndLog "$FUNCNAME: Iniciando la configuración del schroot "
+cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime`
+cat << EOF > /etc/schroot/schroot.conf
+[IMGogclient]
+type=loopback
+file=/var/lib/tftpboot/ogclient/ogclient.img
+description=ogclient ubuntu luc IMGi
+#priority=1
+users=root
+groups=root
+root-groups=root
+mount-options=-o offset=32256
+root-users=root
+EOF
+
+cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime`
+cat << EOF > /etc/schroot/mount-defaults
+# mount.defaults: static file system information for chroots.
+# Note that the mount point will be prefixed by the chroot path
+# (CHROOT_PATH)
+#
+# <file system> <mount point> <type> <options> <dump> <pass>
+proc /proc proc defaults 0 0
+#procbususb /proc/bus/usb usbfs defaults 0 0
+#/dev /dev none rw,bind 0 0
+/dev/pts /dev/pts none rw,bind 0 0
+/dev/shm /dev/shm none rw,bind 0 0
+#/home /home none rw,bind 0 0
+/tmp /tmp none rw,bind 0 0
+EOF
+
+rm /etc/schroot/setup.d/*chrootname
+
+echoAndLog "$FUNCNAME: Finalizado: OK "
+return 0
+}
+
+
+
+#btogFsInitr genera un initrd.
+#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2010/05/24
+#@version 1.0 - Compatibilidad OpengGnsys X.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011/08/03
+function btogFsInitrd ()
+{
+#DEPENDENCIAS
+[ -z "$BTROOTFSIMG" ] && btogGetVar
+[ -z "$OSCODENAME" ] && btogGetOsInfo
+
+cd /
+schroot -c IMGogclient -- /usr/bin/boot-tools/boottoolsInitrdGenerate.sh
+echo "cp /tmp/*-${OSRELEASE} ${BTTARGETDIR}"
+cp /tmp/*-${OSRELEASE} ${BTTARGETDIR}
+#Creando copias de las version oginitr y ogvmlinux previas
+TIMEMOD=`date +%Y%m%d-%H%M%S`
+[ -f $BTTARGETDIR/oginitrd.img ] && mv $BTTARGETDIR/oginitrd.img $BTTARGETDIR/oginitrd.img.$TIMEMOD; mv $BTTARGETDIR/oginitrd.img.sum $BTTARGETDIR/oginitrd.img.sum.$TIMEMOD
+[ -f $BTTARGETDIR/ogvmlinuz ] && mv $BTTARGETDIR/ogvmlinuz $BTTARGETDIR/ogvmlinuz.$TIMEMOD; mv $BTTARGETDIR/ogvmlinuz.sum $BTTARGETDIR/ogvmlinuz.sum.$TIMEMOD
+
+#copiando
+cp /tmp/initrd.img-${OSRELEASE} ${BTTARGETDIR}/oginitrd.img
+cp /tmp/vmlinuz-${OSRELEASE} ${BTTARGETDIR}/ogvmlinuz
+#generamos md5 del kernel y del initrd.
+DATASUM=`md5sum "${BTTARGETDIR}/oginitrd.img" | cut -f1 -d" "`
+echo $DATASUM > ${BTTARGETDIR}/oginitrd.img.sum
+DATASUM=`md5sum "${BTTARGETDIR}/ogvmlinuz" | cut -f1 -d" "`
+echo $DATASUM > ${BTTARGETDIR}/ogvmlinuz.sum
+#Damos permisos
+cd -
+chmod -R 755 $BTTARGETDIR
+}
+
+#btogFsSqfs convierte el sistema root en sqfs
+#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2010/05/24
+#@version 1.0 - Compatibilidad OpengGnsys X.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011/08/03
+function btogFsSqfs ()
+{
+#Dependencias.
+[ -z "$BTROOTFSIMG" ] && btogGetVar
+[ -z "$OSCODENAME" ] && btogGetOsInfo
+
+echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs "
+# si ya existe un sqfs lo renombramos
+[ -f $BTTARGETDIR/ogclient.sqfs ] && mv $BTTARGETDIR/ogclient.sqfs $BTTARGETDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S`
+mount | grep $BTROOTFSMNT || mount $BTROOTFSIMG $BTROOTFSMNT -o loop,offset=32256
+mksquashfs $BTROOTFSMNT $BTTARGETDIR/ogclient.sqfs
+mount | grep $BTROOTFSMNT && umount $BTROOTFSMNT
+chmod 744 $BTTARGETDIR/ogclient.sqfs
+DATASUM=`md5sum "${BTTARGETDIR}/ogclient.sqfs" | cut -f1 -d" "`
+echo $DATASUM > ${BTTARGETDIR}/ogclient.sqfs.sum
+}
+
+
+
+
+
+# btogIsoGenerator genera la iso del cliente
+#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2010/05/24
+#@version 1.0 - Compatibilidad OpengGnsys X.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011/08/03
+function btogIsoGenerator {
+#Dependencias.
+#[ -z "$BTROOTFSIMG" ] && btogGetVar
+btogGetVar
+#Preparamos los gestores de arranque
+mkdir -p /tmp/iso/isolinux
+cp -prv /usr/lib/syslinux/* /tmp/iso/isolinux/
+cp -prv /usr/share/gpxe/* /tmp/iso/isolinux/
+
+cat << FIN > /tmp/iso/isolinux/isolinux.cfg
+DEFAULT menu.c32
+PROMPT 0
+ALLOWOPTIONS 1
+
+MENU TITLE OpenGnsys ${NAMEISOCLIENT}
+
+LABEL gpxe
+MENU LABEL gpxe
+KERNEL /clonezilla/live/vmlinuz1
+APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia
+
+LABEL 0
+MENU LABEL ogClient vga irqpool acpi ogdebug ip:none
+KERNEL /ogclient/linuxISO
+APPEND initrd=/ogclient/oginitrd.img ro vga=788 irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none
+
+LABEL 1
+MENU LABEL ogClient irqpoll acpi ip:none
+KERNEL /ogclient/linuxISO
+APPEND initrd=/ogclient/oginitrd.img ro irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=none
+
+LABEL 2
+MENU LABEL ogClient acpi debug ip=dhcp
+KERNEL /ogclient/linuxISO
+APPEND initrd=/ogclient/oginitrd.img ro acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=dhcp
+
+LABEL 3
+MENU LABEL ogClient ip=dhcp
+KERNEL /ogclient/linuxISO
+APPEND initrd=/ogclient/oginitrd.img ro acpi=off boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=dhcp
+
+LABEL 4
+MENU LABEL local
+localboot 0x80
+append -
+
+label 5
+MENU LABEL Network boot via gPXE lkrn
+KERNEL gpxe.lkrn
+
+label 6
+MENU LABEL Network boot via gPXE usb
+KERNEL gpxe.usb
+
+label 7
+MENU LABEL Network boot via gPXE pxe
+KERNEL gpxe.pxe
+
+label 8
+MENU LABEL Network boot via gPXE iso
+KERNEL gpxe.iso
+FIN
+
+
+
+
+# preparamos el directorio boot-tools.
+mkdir -p /tmp/iso/ogclient
+cp ${BTTARGETDIR}/ogclient.sqfs /tmp/iso/ogclient/
+cp ${BTTARGETDIR}/ogclient.sqfs.sum /tmp/iso/ogclient/
+cp ${BTTARGETDIR}/ogvmlinuz /tmp/iso/ogclient/
+cp ${BTTARGETDIR}/ogvmlinuz.sum /tmp/iso/ogclient/
+cp ${BTTARGETDIR}/ogvmlinuz /tmp/iso/ogclient/linuxISO
+cp ${BTTARGETDIR}/ogvmlinuz.sum /tmp/iso/ogclient/linuxISO.sum
+cp ${BTTARGETDIR}/oginitrd.img /tmp/iso/ogclient/
+cp ${BTTARGETDIR}/oginitrd.img.sum /tmp/iso/ogclient/
+#el ogclienteToISO debe tener una copia del ogvmlinuz como linuxISO
+#cp -prv /var/lib/tftpboot/ogclientToIso/* /tmp/iso/ogclient
+
+cd /tmp
+#TIMEMOD=`date +%Y%m%d-%H%M%S`
+####Generamos la iso
+echo "mkisofs -V ogClient -o ${NAMEISOCLIENT}.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table /tmp/iso"
+mkisofs -V ogClient -o ${NAMEISOCLIENT}.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table /tmp/iso
+##Generamos el md5
+DATASUM=`md5sum ${NAMEISOCLIENT}.iso | cut -f1 -d" "`
+echo $DATASUM > ${NAMEISOCLIENT}.iso.sum
+
+mv /tmp/${NAMEISOCLIENT}.iso /var/lib/tftpboot/ogclient/
+mv /tmp/${NAMEISOCLIENT}.iso.sum /var/lib/tftpboot/ogclient/
+
+
+### vi /etc/grub.d/40_custom
+##
+#menuentry "og cache " {
+#set root=(hd0,4)
+#linux /ogvmlinuz ro vga=788 irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none
+#initrd /oginitrd.img
+#}
+
+}
+
+
+#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2010/05/24
+#@version 1.0 - Compatibilidad OpengGnsys X.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011/08/03
+function btogIsoTest {
+#/tmp/iso
+qemu -m 256 -boot d -cdrom ogClient.iso
+}
+
+
+
+
+function getDateTime()
+{
+ echo `date +%Y%m%d-%H%M%S`
+}
+
+# Escribe a fichero y muestra por pantalla
+function echoAndLog()
+{
+ echo $1
+ FECHAHORA=`getDateTime`
+ echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE
+}
+
+function errorAndLog()
+{
+ echo "ERROR: $1"
+ FECHAHORA=`getDateTime`
+ echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
+}
+
+
+
+
+
+
+
+
+
+
+############### No usados en el instalador, solo en actualizaciones.
+#/**
+# ogClientMount [str_program]
+#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys
+#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones
+#@return Si no hay parametros: login de acceso.
+#@return con un parametro: La salida del programa ejecutado
+#@exception
+#@note
+#@todo
+#@version 0.9 - Primera versión para OpenGnSys
+#@author Antonio J. Doblas Viso, Universidad de Málaga
+#@date 2010/02/15
+#*/ ##
+function ogClientMount ()
+{
+ #TODO comprobar que OGFILE y OGFILEMOUNT existe.
+ mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
+ mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc
+ mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys
+ mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp
+ mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev
+ mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts
+
+
+ [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`)
+ [ $# = 1 ] && chroot $OGCLIENTMOUNT $1
+
+}
+
+#/**
+# ogClientUnmount
+#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys
+#@param
+#@return
+#@exception
+#@note
+#@todo
+#@version 0.9 - Primera versión para OpenGnSys
+#@author Antonio J. Doblas Viso, Universidad de Málaga
+#@date 2010/02/15
+#*/ ##
+
+function ogClientUnmount ()
+{
+ cd /tmp
+ echo "desmontando cliente espere"
+ sleep 5
+ mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount
+ mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount
+ mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount
+ mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount
+ mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount
+ mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount
+ #-d -f -l
+
+}
diff --git a/client/boot-tools/boottoolsgenerator.sh b/client/boot-tools/boottoolsgenerator.sh
new file mode 100755
index 00000000..70a77355
--- /dev/null
+++ b/client/boot-tools/boottoolsgenerator.sh
@@ -0,0 +1,134 @@
+#!/bin/bash
+#@file boottoolsgenerator.sh
+#@brief Script generación del sistema opertativo cliente OpenGnSys
+#@warning
+#@version 0.9 - Prototipo de sistema operativo multiarranque de opengnsys.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2010/05/24
+#@version 1.0 - Compatibilidad OpengGnsys X.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@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;
+
+
+#Variables
+TYPECLIENT=host
+WORKDIR=/tmp/opengnsys_installer
+INSTALL_TARGET=/opt/opengnsys
+PROGRAMDIR=$(readlink -e $(dirname "$0"))
+
+# Solo ejecutable por usuario root
+if [ "$(whoami)" != 'root' ]
+then
+ echo "ERROR: this program must run under root privileges!!"
+ exit 1
+fi
+
+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
+
+
+
+#funciones especificas del cliente.
+source $PROGRAMDIR/boottoolsfunctions.lib
+
+
+echoAndLog "OpenGnSys CLIENT installation begins at $(date)"
+
+##########################################################################
+## FASE 1 - 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
+
+##### FASE 2 - Asignación de variables
+#obtenemos las variables necesarias y la información del host.
+btogGetVar && btogGetOsInfo
+
+############# FASE 3: Creación del Sistema raiz RootFS (Segundo Sistema archivos (img))
+##3.1 creación y formateo del disco virtual. generamos el dispositivo loop.
+file $BTROOTFSIMG | grep "partition 1: ID=0x83"
+if [ $? == 1 ]
+then
+ btogSetFsVirtual || exit 2
+fi
+#3.2 generamos el Sistema de archivos con debootstrap
+schroot -p -c IMGogclient -- touch /tmp/ogclientOK
+if [ -f /tmp/ogclientOK ]
+then
+ rm /tmp/ogclientOK
+else
+ btogSetFsBase || exit 3
+fi
+
+# FASE 4: Configuración el acceso al Segundo Sistema de archivos (img), para schroot
+cat /etc/schroot/schroot.conf | grep $BTROOTFSIMG || btogSetFsAccess
+
+# FASE 5: Incorporando con ficheros OG el sistema raiz rootfs
+cp -prv ${BTSVNBOOTTOOLS}/includes/usr/bin/* /tmp/
+chmod 777 /tmp/boot-tools/*.sh
+schroot -p -c IMGogclient -- /tmp/boot-tools/boottoolsFsOpengnsys.sh
+
+# FASE6: Instalacion de software
+# 6.1 instalacion de software con apt-get
+#cp /etc/apt/sources.list /tmp
+schroot -p -c IMGogclient -- /usr/bin/boot-tools/boottoolsSoftwareInstall.sh
+
+
+# 6.2 compilación de software.
+cd /
+schroot -p -c IMGogclient -- /usr/bin/boot-tools/boottoolsSoftwareCompile.sh
+schroot -p -c IMGogclient -- /usr/bin/boot-tools/boottoolsSoftwareCompile.sh
+
+cd -
+
+#Fase 7. Personalizando
+
+schroot -p -c IMGogclient -- /usr/bin/boot-tools/boottoolsFsLocales.sh
+
+
+### 7.1 incorporamos 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 -
+### 7.2 y la del propio cliente.
+schroot -c IMGogclient -- /usr/bin/boot-tools/boottoolsSshClient.sh
+
+## 7.3 configuramos los locales.
+schroot -c IMGogclient -- /usr/bin/boot-tools/boottoolsFsLocales.sh
+
+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
+
+
+
+
+
+#Fase 7. Generando la ISO.
+#7.1 el initrd
+btogFsInitrd
+
+
+#7.2 Convertivos el sistema raiz img en formato sqfs
+btogFsSqfs
+#7.3 Generamos la iso
+btogIsoGenerator
+
+
+# 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/clientstructure/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions
deleted file mode 100644
index 16539dd6..00000000
--- a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/ogfunctions
+++ /dev/null
@@ -1,479 +0,0 @@
-#@file ogfunctions.lib
-#@brief Librería o clase para la generación del 1erFS
-#@class client
-#@brief Funciones para la generación del primers sistema (initrd)
-#@version 0.91
-#@warning License: GNU GPLv3+
-
-
-
-
-ogExportKernelParameters ()
-{
- GLOBAL="cat /proc/cmdline"
- for i in `${GLOBAL}`
- do
- echo $i | grep "=" > /dev/null && export $i
- done
-return 0
-}
-
-ogExportVarEnvironment ()
-{
- export CFGINITRD="/tmp/initrd.cfg"
- echo "puntos de accesos al servidor ogprotocol=nfs" >> $CFGINITRD
- export NFSROOTBOOT="/var/lib/tftpboot" && echo "NFSROOTBOOT=$NFSROOTBOOT" >> $CFGINITRD
- export NFSCLIENTDIR="/opt/opengnsys/client" && echo "NFSCLIENDIR=$NFSCLIENTDIR" >> $CFGINITRD
- export NFSLOGDIR="/opt/opengnsys/log/clients" && echo "NFSLOGDIR=$NFSLOGDIR" >> $CFGINITRD
- export NFSIMGDIR="/opt/opengnsys/images" && echo "NFSIMGDIR=$NFSIMGDIR" >> $CFGINITRD
- echo "puntos de accesos al servidor ogprotocol=smb" >> $CFGINITRD
- export SMBROOTBOOT="tftpboot" && echo "SMBROOTBOOT=$SMBROOTBOOT" >> $CFGINITRD
- export SMBCLIENTDIR="ogclient" && echo "SMBCLIENTDIR=$SMBCLIENTDIR" >> $CFGINITRD
- export SMBLOGDIR="oglog" && echo "SMBLOGDIR=$SMBLOGDIR" >> $CFGINITRD
- export SMBIMGDIR="ogimages" && echo "SMBIMGDIR=$SMBIMGDIR" >> $CFGINITRD
-
- echo "puntos de montaje local para los contenedores" >> $CFGINITRD
- export LOCALROOTBOOT="/opt/og2fs/tftpboot" && echo "LOCALROOTBOOT=$LOCALROOTBOOT" >> $CFGINITRD
- export LOCALCLIENTDIR="/opt/opengnsys" && echo "LOCALCLIENTDIR=$LOCALCLIENTDIR" >> $CFGINITRD
- export LOCALLOGDIR="/opt/opengnsys/log" && echo "LOCALLOGDIR=$LOCALLOGDIR" >> $CFGINITRD
- export LOCALIMGDIR="/opt/opengnsys/images" && echo "LOCALIMGDIR=$LOCALIMGDIR" >> $CFGINITRD
-
- echo "puntos de montajes para realizar la integración unionfs entre el initrd y el sistema root" >> $CFGINITRD
- #punto de montaje donde se accede al 2nd FS mediante loop
- export LOCALROOTIMG="/opt/og2fs/2ndfs" && echo "LOCALROOTIMG=$LOCALROOTIMG" >> $CFGINITRD
- #punto de montaje para unionfs
- export LOCALROOTRAM="/opt/og2fs/1stfs" && echo "LOCALROOTRAM=$LOCALROOTRAM" >> $CFGINITRD
- #punto de union entreo LOCALROOTIMG y LOCALROOTRAM
- export LOCALROOTUNION="/opt/og2fs/unionfs" && echo "LOCALROOTUNION=$LOCALROOTUNION" >> $CFGINITRD
- ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES.
- #ogGetROOTSERVER() ip del servidor pxe, valor obtenido automaticamente desde dhcpd.
- #IPV4DDR
- #IPV4BROADCAST
- #IPV4NETMASK
- #IPV4GATEWAY
- #DNS0 DNS1
- #HOSTNAME
- #ROOTSERVER #ip del servidor pxe que ha servido el kernel
- #REPOSERVER=ogrepo -> ogConectROOTSERVER() ip del servidor de images para separar serviicios.
- return 0
-}
-
-ogConfigureRamfs ()
-{
- mkdir -p $LOCALROOTBOOT
- mkdir -p $LOCALROOTIMG
- mkdir -p $LOCALROOTRAM
- mkdir -p $LOCALROOTUNION
-}
-
-ogLoadNetModule ()
-{
- #cargando netmodule
- if [ -n "$ognetmodule" ]
- then
- echo "Cargando modulo de red $netmodule"
- insmod `find /lib/modules/ -name ${netmodule}*`
- fi
-}
-
-
-ogPostConfigureFS()
-{
- # configuramos el /etc/hostname.
- echo $HOSTNAME > /etc/hostname
-
- #configuramos el /etc/hosts
- echo "127.0.0.1 localhost" > /etc/hosts
- echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts
-
- #configuramos el host.conf
- echo "order hosts,bind" > /etc/host.conf
- echo "multi on" >> /etc/host.conf
-
- # configuramos el /etc/networks
- #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}')
- NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ")
- echo "default 0.0.0.0" > /etc/networks
- echo "loopback 127.0.0.0" >> /etc/networks
- echo "link-local 169.254.0.0" >> /etc/networks
- echo "localnet $NETIP" >> /etc/networks
- #route
-
- #enlace si iniciamos desde ogprotocolo=local { cdrom, usb, cache } .
- # monta el raiz del dispositivo local en /opt/og2fs/tftpboot - acceso al fichero .sqfs
- # y monta el sistema root sqfs en /opt/og2fs/2ndfs
- [ "$LOCALMEDIA" == "CACHE" ] && ln -s /opt/og2fs/tftpboot /opt/opengnsys/cache
- [ "$ogprotocol" == "local" ] && ln -s /opt/og2fs/2ndfs/opt/opengnsys/* /opt/opengnsys/
-
-
-}
-
-
-
-
-ogGetROOTSERVER ()
-{
- # get nfs root from dhcp
- if [ "x${NFSROOT}" = "xauto" ]; then
- # check if server ip is part of dhcp root-path
- if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
- NFSROOT=${ROOTSERVER}:${ROOTPATH}
- else
- NFSROOT=${ROOTPATH}
- fi
-
- # nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
- elif [ -n "${NFSROOT}" ]; then
- # nfs options are an optional arg
- if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
- NFSOPTS="-o ${NFSROOT#*,}"
- fi
- NFSROOT=${NFSROOT%%,*}
- if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
- NFSROOT=${ROOTSERVER}:${NFSROOT}
- fi
- fi
- export ROOTSERVER
- echo "ROOTSERVER=$ROOTSERVER" >> $CFGINITRD
-return 0
-}
-
-ogConectROOTSERVER ()
-{
-local OPTIONS
-#params a detectar
-if [ $ogrepo ]
-then
- # Validar si la ip es correcta
- ROOTREPO=$ogrepo
-else
- ROOTREPO=$ROOTSERVER
-fi
-
-case "$ogprotocol" in
- local)
- echo "Montar imagen del sistema root desde dispositivo local"
- for i in $(blkid /dev/s* | grep ogClient | awk -F: '{print $2}' | tr -d \"); do export $i; done
- mount -t $TYPE LABEL=$LABEL $LOCALROOTBOOT
- if [ $? != 0 ]
- then
- mount -t reiserfs LABEL=CACHE $LOCALROOTBOOT
- export LOCALMEDIA=CACHE
- fi
- ;;
- httfs)
- echo "protocolo httfs aun no soportado"
- ;;
- sshfs)
- echo "protocolo sshfs aun no soportado"
- ;;
- smb)
- echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol"
- OPTIONS=" -o user=opengnsys,pass=og"
- mount.cifs //${ROOTSERVER}/${SMBCLIENTDIR} $LOCALCLIENTDIR $OPTIONS
- mount.cifs //${ROOTSERVER}/${SMBLOGDIR} $LOCALLOGDIR $OPTIONS
- mount.cifs //${ROOTSERVER}/${SMBROOTBOOT} $LOCALROOTBOOT $OPTIONS
- mount.cifs //${ROOTREPO}/${SMBIMGDIR} $LOCALIMGDIR ${OPTIONS},ro
- ;;
- nfs)
- echo "Preparando conexión con el Repositorio $ROOTSERVER por $ogprotocol"
- nfsmount -o nolock,ro $ROOTSERVER:$NFSCLIENTDIR $LOCALCLIENTDIR
- nfsmount -o nolock $ROOTSERVER:$NFSLOGDIR $LOCALLOGDIR
- nfsmount -o nolock $ROOTSERVER:$NFSROOTBOOT $LOCALROOTBOOT
- nfsmount -o nolock,ro $ROOTREPO:$NFSIMGDIR $LOCALIMGDIR
- ;;
-esac
-}
-
-ogMerge2ndFile()
-{
-if [ -f $LOCALROOTBOOT/ogclient/ogclient.sqfs ]
-then
- cat /proc/mounts > /tmp/mtab.preunion
- if [ "$og2nd" == "img" ]
- then
- #para acceder al img
- losetup /dev/loop0 $LOCALROOTBOOT/ogclient/ogclient.img -o 32256
- mount /dev/loop0 $LOCALROOTIMG
- else
- ## para acceder al squashfs
- mount $LOCALROOTBOOT/ogclient/ogclient.sqfs $LOCALROOTIMG -t squashfs -o loop
- fi
- for i in etc var lib bin sbin usr root boot; do
- unionmount $i
- done
- cat /tmp/mtab.preunion > /etc/mtab
-else
- echo "Fichero imagen del cliente no encontrado"
- return 1
-fi
-}
-
-
-unionmount()
-{
- tmpdir=/$1 #dir
- FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid"
- UNION_OPT="-o cow -o noinitgroups"
- UBIN="unionfs-fuse"
- #UPATH="/unionfs"
- #LOCALROOTIMG="/opt/og2fs/2ndfs"
- #LOCALROOTRAM="/opt/og2fs/1stfs" #/unionfs/host #punto de montaje para unionfs
- #LOCALROOTUNION=/opt/og2fs/unionfs/" #/unionfs/union #punto de union entreo LOCALROOTIMG y LOCALROOTRAM
- #mkdir -p $LOCALROOTRAM #/unionfs/host
- #mkdir -p $LOCALROOTUNION #/unionfs/union
- mkdir -p $LOCALROOTRAM$tmpdir
- #mount --bind /$tmpdir $LOCALROOTRAM$tmpdir
- U1STDIR="${LOCALROOTRAM}${tmpdir}=RW"
- U2NDDIR="${LOCALROOTIMG}${tmpdir}=RO"
- UNIONDIR=$LOCALROOTUNION$tmpdir
- mkdir -p $UNIONDIR
- $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR
- mount --bind $UNIONDIR $tmpdir
-}
-
-
-unionmountOLD()
-{
- FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid"
- UNION_OPT="-o cow -o noinitgroups"
- UPATH="/unionfs"
- UBIN="unionfs-fuse"
- mkdir -p /unionfs/host
- mkdir -p /unionfs/union
- dir=$1
- mkdir -p /unionfs/host/$dir
- #mount --bind /$dir /unionfs/host/$dir
- mkdir -p /unionfs/union/$dir
- host="/unionfs/host/${dir}=RW"
- common="/opt/og2fs/${dir}=RO"
- $UBIN $FUSE_OPT $UNION_OPT ${host}:${common} /unionfs/union/$dir
- mount --bind /unionfs/union/$dir /$dir
-}
-
-ogconfigure_lo()
-{
-# for the portmapper we need localhost
-ifconfig lo 127.0.0.1
-#/etc/init.d/portmap start
-}
-
-ogconfigure_networking()
-{
-#echo "ogconfigure_networking: Buscando interfaz a configurar DEVICE"
-if [ -n "${BOOTIF}" ]
-then
- #echo " variable BOOTIF exportada con pxelinux.0 con valor $BOOTIF"
- IP=$IPOPTS
- temp_mac=${BOOTIF#*-}
- # convert to typical mac address format by replacing "-" with ":"
- bootif_mac=""
- IFS='-'
- for x in $temp_mac ; do
- if [ -z "$bootif_mac" ]; then
- bootif_mac="$x"
- else
- bootif_mac="$x:$bootif_mac"
- fi
- done
- unset IFS
- # look for devices with matching mac address, and set DEVICE to
- # appropriate value if match is found.
- for device in /sys/class/net/* ; do
- if [ -f "$device/address" ]; then
- current_mac=$(cat "$device/address")
- if [ "$bootif_mac" = "$current_mac" ]; then
- DEVICE=${device##*/}
- break
- fi
- fi
- done
-else
- #echo "variable BOOTIF no exportada, intentamos detectar que interfaz se ha iniciado"
- IP=$ip
- #TODO Detectar que interfaz se ha iniciado
- case ${IP} in
- none|off)
- return 0
- ;;
- ""|on|any)
- # Bring up device
- DEVICE=eth0
- ;;
- dhcp|bootp|rarp|both)
- DEVICE=eth0
- ;;
- *)
- DEVICE=`echo $IP | cut -f6 -d:`
- ;;
- esac
-fi
-if [ -z "${DEVICE}" ]; then
- echo "variable DEVICE con valor $DEVICE no encontrada, llamamos de nuevo a ogconfigure_networking"
- ogconfigure_networking
-fi
-
-[ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0
-#if [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ]; then
-# echo "variable DEVICE con valor $DEVICE y fichero /tmp/net-$DEVICE encontrados"
-# return 0
-#else
-# echo "variable DEVICE con valor $DEVICE encontrada, procedemos a configurala y a crear el fichero /tmp/net-$DEVICE"
-#fi
-
-# Activamos la interfaz antes de configurar.
-ip address flush $DEVICE
-ip link set dev $DEVICE up
-# Si no se detecta señal portadora volver a configurar.
-sleep 1
-CARRIER=$(cat /sys/class/net/${DEVICE}/carrier)
-if [ "$CARRIER" != "1" ]
-then
- ogconfigure_networking
-fi
-
-# support ip options see linux sources
-# Documentation/filesystems/nfsroot.txt
-# Documentation/frv/booting.txt
-for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do
- # The NIC is to be configured if this file does not exist.
- # Ip-Config tries to create this file and when it succeds
- # creating the file, ipconfig is not run again.
- if [ -e /tmp/net-"${DEVICE}".conf ]; then
- break;
- fi
- case ${IP} in
- none|off)
- return 0
- ;;
- ""|on|any)
- # Bring up device
- echo "Setting $DEVICE with option:on|any and Variable IP= $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} "
- ipconfig -t ${ROUNDTTT} ${DEVICE}
- ;;
- dhcp|bootp|rarp|both)
- echo "Setting $DEVICE with option:dhcp|bootp|rarp|both and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} "
- ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE}
- ;;
- *)
- echo "Setting $DEVICE with option * and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -d $IP "
- ipconfig -t ${ROUNDTTT} -d $IP
- # grab device entry from ip option
- NEW_DEVICE=${IP#*:*:*:*:*:*}
- if [ "${NEW_DEVICE}" != "${IP}" ]; then
- NEW_DEVICE=${NEW_DEVICE%:*}
- else
- # wrong parse, possibly only a partial string
- NEW_DEVICE=
- fi
- if [ -n "${NEW_DEVICE}" ]; then
- DEVICE="${NEW_DEVICE}"
- fi
- ;;
- esac
-done
-
-# source ipconfig output
-if [ -n "${DEVICE}" ]; then
- . /tmp/net-${DEVICE}.conf
- DEVICECFG="/tmp/net-${DEVICE}"
- export DEVICECFG
- export DEVICE
- echo "DEVICE=$DEVICE" >> $CFGINITRD
- echo "DEVICECFG=$DEVICECFG" >> $CFGINITRD
- echo "exportando variable DEVICE con valor = $DEVICE y el DEVICECFG con valor $DEVICECFG"
-else
- # source any interface as not exaclty specified
- . /tmp/net-*.conf
-fi
-}
-
- #####################################################################
-# Ask yesno question.
-#
-# Usage: yesno OPTIONS QUESTION
-#
-# Options:
-# --timeout N Timeout if no input seen in N seconds.
-# --default ANS Use ANS as the default answer on timeout or
-# if an empty answer is provided.
-#
-# Exit status is the answer. 0=yes 1=no
-
-ogYesNo()
-{
- local ans
- local ok=0
- local timeout=0
- local default
- local t
-
- while [[ "$1" ]]
- do
- case "$1" in
- --default)
- shift
- default=$1
- if [[ ! "$default" ]]; then error "Missing default value"; fi
- t=$(echo $default | tr '[:upper:]' '[:lower:]')
-
- if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then
- error "Illegal default answer: $default"
- fi
- default=$t
- shift
- ;;
-
- --timeout)
- shift
- timeout=$1
- if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi
- #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi
- shift
- ;;
-
- -*)
- error "Unrecognized option: $1"
- ;;
-
- *)
- break
- ;;
- esac
- done
-
- if [[ $timeout -ne 0 && ! "$default" ]]; then
- error "Non-zero timeout requires a default answer"
- fi
-
- if [[ ! "$*" ]]; then error "Missing question"; fi
-
- while [[ $ok -eq 0 ]]
- do
- if [[ $timeout -ne 0 ]]; then
- if ! read -t $timeout -p "$*" ans; then
- ans=$default
- else
- # Turn off timeout if answer entered.
- timeout=0
- if [[ ! "$ans" ]]; then ans=$default; fi
- fi
- else
- read -p "$*" ans
- if [[ ! "$ans" ]]; then
- ans=$default
- else
- ans=$(echo $ans | tr '[:upper:]' '[:lower:]')
- fi
- fi
-
- if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then
- ok=1
- fi
-
- if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi
- done
- [[ "$ans" = "y" || "$ans" == "yes" ]]
-}
-
-
diff --git a/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh b/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh
deleted file mode 100755
index c6e8f790..00000000
--- a/client/boot-tools/clientstructure/etc/profile.d/loadenviron.sh
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/bin/bash
-#/**
-#@file loadenviron.sh
-#@brief Script de carga de la API de funciones de OpenGNSys.
-#@warning License: GNU GPLv3+
-#@version 0.9
-#@author Ramon Gomez, ETSII Universidad de Sevilla
-#@date 2009-10-10
-#*/
-
- GLOBAL="cat /proc/cmdline"
- for i in `${GLOBAL}`
- do
- echo $i | grep "=" > /dev/null && export $i
- done
-
-
-# FIXME Temporal
-export LANG="${LANG:-es_ES}"
-
-#/// Directorios del projecto OpenGNSys.
-export OPENGNSYS="${OPENGNSYS:-/opt/opengnsys}"
-if [ -d $OPENGNSYS ]; then
- export OGBIN=$OPENGNSYS/bin
- export OGETC=$OPENGNSYS/etc
- export OGLIB=$OPENGNSYS/lib
- export OGAPI=$OGLIB/engine/bin
- export OGSCRIPTS=$OPENGNSYS/scripts
- export OGIMG=$OPENGNSYS/images
- export OGCAC=$OPENGNSYS/cache
- export OGLOG=$OPENGNSYS/log
-
-# export PATH=$OGBIN:$OGAPI:$OGSCRIPTS:$PATH
- # export LD_LIBRARY_PATH=$OGLIB:$LD_LIBRARY_PATH
-
- #/// Cargar fichero de idioma.
- LANGFILE=$OGETC/lang.$LANG.conf
- if [ -f $LANGFILE ]; then
- source $LANGFILE
- #for i in $(grep "^[a-zA-Z].*=" $LANGFILE | cut -f1 -d=); do
- for i in $(awk -F= '{if (NF==2) print $1}' $LANGFILE); do
- export $i
- done
- fi
- #/// Cargar API de funciones.
- echo "$MSG_LOADAPI"
- for i in $OGAPI/*.lib; do
- source $i
- done
- for i in $(typeset -F | cut -f3 -d" "); do
- export -f $i
- done
- # Carga de las API testing
- if [ "$engine" = "testing" ]
- then
- for i in $OGAPI/*.testing; do
- source $i
- done
- fi
-
- source /tmp/net-eth* 2>/dev/null
-
- # Añadir dependencia de arquitectura
- ARCH=$(ogGetArch)
- if [ -n "$ARCH" ]; then
- # export PATH=$OGBIN/$ARCH:$PATH
- # export LD_LIBRARY_PATH=$OGLIB/$ARCH:$LD_LIBRARY_PATH
- export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin
- export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN:$OGBIN/$ARCH
- fi
- # Fichero de registros.
- export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log"
- # FIXME Pruebas para grupos de ordenadores
- #export OGGROUP=$(ogGetGroup)
- export OGGROUP=aula3
-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.
-export OG_ERR_PARTITION=3 # Error en partición de disco.
-export OG_ERR_LOCKED=4 # Partición o fichero bloqueado.
-export OG_ERR_IMAGE=5 # Error al crear o restaurar una imagen.
-export OG_ERR_NOTOS=6 # Sin sistema operativo.
-export OG_ERR_NOTEXEC=7 # Programa o función no ejecutable.
-
-
diff --git a/client/boot-tools/clientstructure/root/CompileSoftware.sh b/client/boot-tools/clientstructure/root/CompileSoftware.sh
deleted file mode 100755
index 1a9b854a..00000000
--- a/client/boot-tools/clientstructure/root/CompileSoftware.sh
+++ /dev/null
@@ -1,30 +0,0 @@
-#!/bin/bash
-################################################################
-##################### SOFTWARE #####################
-################################################################
-export LANGUAGE=C
-export LC_ALL=C
-export LANG=C
-
-#dpkg-divert --local --rename --add /sbin/initctl
-#ln -s /bin/true /sbin/initctl
-
-apt-get -y update
-# software to compile code
-apt-get -y --force-yes install build-essential libattr* attr make m4 gettext libmhash-dev gdebi-core gawk
-
-source /opt/opengnsys/lib/engine/bin/ToolsGNU.c
-
-ctorrent install
-udpcast install
-#ntfs-3g install
-ms-sys install
-
-wget -O partclone_0.2.16_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.16/partclone_0.2.16_i386.deb?use_mirror=ovh
-gdebi -n partclone_0.2.16_i386.deb
-
- cd /tmp
- wget http://damien.guibouret.free.fr/savepart.zip
- unzip savepart.zip -d /sbin/
-
-
diff --git a/client/boot-tools/clientstructure/root/ConfFS.sh b/client/boot-tools/clientstructure/root/ConfFS.sh
deleted file mode 100755
index 3e0f4b5c..00000000
--- a/client/boot-tools/clientstructure/root/ConfFS.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-dpkg-divert --local --rename --add /sbin/initctl
-ln -s /bin/true /sbin/initctl
-#mv /etc/fstab /etc/fstab.original 2>/dev/null
-#mv /etc/mtab /etc/mtab.original 2>/dev/null
-
-#TODO: fichero etc/hosts
-#TODO: fichero etc/resolv.conf
-echo "ogClient" > /etc/hostname
-
-#export PASSROOT=og
-#dpkg-reconfigure passwd
-#echo "root:$PASSROOT" | chpasswd
-
-
-#for i in pts/0 pts/1 pts/2 pts/3 do
-#
-#
-#done
-#TODO: introducir mas consoluas para el acceso como root.
-echo "pts/0" >> /etc/securetty
-echo "pts/1" >> /etc/securetty
-echo "pts/2" >> /etc/securetty
-echo "pts/3" >> /etc/securetty \ No newline at end of file
diff --git a/client/boot-tools/clientstructure/root/InstallSoftware.sh b/client/boot-tools/clientstructure/root/InstallSoftware.sh
deleted file mode 100755
index da8d8d06..00000000
--- a/client/boot-tools/clientstructure/root/InstallSoftware.sh
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/bash
-################################################################
-##################### SOFTWARE #####################
-################################################################
-export LANGUAGE=C
-export LC_ALL=C
-export LANG=C
-
-
-dpkg-divert --local --rename --add /sbin/initctl
-ln -s /bin/true /sbin/initctl
-
-apt-get clean
-apt-get -y update
-
-
-# software system
-apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE wget dialog man-db htop fbset gdebi-core busybox-static
-
-apt-get -y --force-yes install console-data locales
-
-# sofware networking
-apt-get -y --force-yes install netpipes nfs-common sshfs smbfs smbclient davfs2 unionfs-fuse open-iscsi nmap tcpdump arping dnsutils
-
-apt-get clean
-# software services
-apt-get -y --force-yes install openssh-server bittornado trickle iptraf screen schroot grub
-
-# software disk and filesystem
-apt-get -y --force-yes install drbl-ntfsprogs ntfsprogs parted ntfs-3g dosfstools
-apt-get -y --force-yes install dmraid dmsetup lvm2 e2fsprogs jfsutils reiserfsprogs xfsprogs unionfs-fuse mhddfs squashfs-tools
-apt-get -y --force-yes install btrfs-tools hfsplus hfsprogs hfsutils nilfs-tools reiser4progs ufsutils
-
-# software cloning
-apt-get -y --force-yes install drbl-partimage fsarchiver pv kexec-tools
-apt-get -y --force-yes install mbuffer
-
-
-apt-get clean
-## software postconf
-apt-get -y --force-yes install drbl-chntpw chntpw ethtool lshw gawk
-
-# software compressor
-apt-get -y --force-yes install lzma zip unzip gzip lzop drbl-lzop pigz pbzip2 lbzip2 rzip p7zip-full unzip
-
-apt-get -y --force-yes remove busybox
-apt-get -y --force-yes install busybox-static bash-static
-apt-get clean
-#apt-get -y --force-yes xorg-dev xorg lxde roxterm
-#
-####################################################################
-###################### Reconfigurando paquetes ######################
-###################################################################
-
-
-#dpkg-reconfigure console-data
-#dpkg-reconfigure console-setup
-#dpkg-reconfigure locales
-apt-get clean
-##TODO################# Borrar algunos binarios del mkinitramfs
-
-
diff --git a/client/boot-tools/clientstructure/root/qemu.sh b/client/boot-tools/clientstructure/root/qemu.sh
deleted file mode 100755
index c5a93cd9..00000000
--- a/client/boot-tools/clientstructure/root/qemu.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#/bin/bash
-
-mount -o rw,remount /
-mount proc /proc -t proc
-export PATH=$PATH dpkg -i *.deb
-modprobe 8139too
-modprobe 8139cp
-dhclient
-/etc/init.d/ssh restart \ No newline at end of file
diff --git a/client/boot-tools/clientstructure/etc/apt/sources.list.debian b/client/boot-tools/includes/etc/apt/sources.list.debian
index 495e48d4..495e48d4 100644
--- a/client/boot-tools/clientstructure/etc/apt/sources.list.debian
+++ b/client/boot-tools/includes/etc/apt/sources.list.debian
diff --git a/client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu b/client/boot-tools/includes/etc/apt/sources.list.ubuntu
index 29348ccc..29348ccc 100644
--- a/client/boot-tools/clientstructure/etc/apt/sources.list.ubuntu
+++ b/client/boot-tools/includes/etc/apt/sources.list.ubuntu
diff --git a/client/boot-tools/clientstructure/etc/environment b/client/boot-tools/includes/etc/environment
index bb529d99..bb529d99 100644
--- a/client/boot-tools/clientstructure/etc/environment
+++ b/client/boot-tools/includes/etc/environment
diff --git a/client/boot-tools/clientstructure/etc/fstab b/client/boot-tools/includes/etc/fstab
index d7473df4..d7473df4 100644
--- a/client/boot-tools/clientstructure/etc/fstab
+++ b/client/boot-tools/includes/etc/fstab
diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks b/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
index 67f807ab..67f807ab 100755
--- a/client/boot-tools/clientstructure/etc/initramfs-tools/hooks/oghooks
+++ b/client/boot-tools/includes/etc/initramfs-tools/hooks/oghooks
diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/modules b/client/boot-tools/includes/etc/initramfs-tools/modules
index 8bac1d4b..8bac1d4b 100644
--- a/client/boot-tools/clientstructure/etc/initramfs-tools/modules
+++ b/client/boot-tools/includes/etc/initramfs-tools/modules
diff --git a/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
new file mode 100644
index 00000000..773e4137
--- /dev/null
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/ogfunctions
@@ -0,0 +1,669 @@
+#@file ogfunctions.lib
+#@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
+#@warning License: GNU GPLv3+
+
+#/**
+# ogExportKernelParameters
+#@brief Exporta los parametros pasados al kernel
+#@param
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.7 -
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2010/05/24
+#*/ ##
+ogExportKernelParameters ()
+{
+ GLOBAL="cat /proc/cmdline"
+ for i in `${GLOBAL}`
+ do
+ echo $i | grep "=" > /dev/null && export $i
+ done
+ return 0
+}
+
+#/**
+# ogExportVarEnvironment
+#@brief Exporta las variables usadas en el proceso de inicio OpenGnsys y las almacena en /tmp
+#@param
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2011/05/24
+#*/ ##
+ogExportVarEnvironment ()
+{
+ export CFGINITRD="/tmp/initrd.cfg"
+ OGPROTOCOL="${ogprotocol:-smb}"
+ case "$OGPROTOCOL" in
+ nfs|NFS)
+ export SRCOGLIVE="/var/lib/tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD
+ export SRCOGSHARE="/opt/opengnsys/client" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD
+ export SRCOGLOG="/opt/opengnsys/log/clients" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD
+ export SRCOGIMAGES="/opt/opengnsys/images" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
+ ;;
+ smb|SMB|cifs|CIFS|samba|SAMBA)
+ export OPTIONS=" -o user=opengnsys,pass=og"
+ export SRCOGLIVE="tftpboot" && echo "SRCOGLIVE=$SRCOGLIVE" >> $CFGINITRD
+ export SRCOGSHARE="ogclient" && echo "SRCOGSHARE=$SRCOGSHARE" >> $CFGINITRD
+ export SRCOGLOG="oglog" && echo "SRCOGLOG=$SRCOGLOG" >> $CFGINITRD
+ export SRCOGIMAGES="ogimages" && echo "SRCOGIMAGES=$SRCOGIMAGES" >> $CFGINITRD
+ ;;
+ local|LOCAL)
+ export SRCOGLIVE="local"
+ ;;
+ esac
+ #punto de acceso al boot-tools live
+ export DSTOGLIVE="/opt/oglive/tftpboot"
+ #punto de montaje para unionfs
+ export OGLIVERAMFS="/opt/oglive/ramfs" && echo "OGLIVERAMFS=$OGLIVERAMFS" >> $CFGINITRD
+ #punto de montaje donde se accede al 2nd FS mediante loop
+ export OGLIVEROOTFS="/opt/oglive/rootfs" && echo "OGLIVEROOTFS=$OGLIVEROOTFS" >> $CFGINITRD
+ #punto de union entre LOCALROOTIMG y LOCALROOTRAM
+ export OGLIVEUNIONFS="/opt/oglive/unionfs" && echo "OGLIVEUNIONFS=$OGLIVEUNIONFS" >> $CFGINITRD
+ #etiquta para los dispositivos offline
+ export OGLIVELABEL="ogClient"
+
+ #echo "puntos de montajes para los demas accesos"
+ #echo "acceso al client, engine, scritps, interfaz"
+ export DSTOGSHARE="/opt/opengnsys" && echo "DSTOGSHARE=$DSTOGSHARE" >> $CFGINITRD
+ export DSTOGLOG="/opt/opengnsys/log" && echo "DSTOGLOG=$DSTOGLOG" >> $CFGINITRD
+ export DSTOGIMAGES="/opt/opengnsys/images" && echo "DSTOGIMAGES=$DSTOGIMAGES" >> $CFGINITRD
+
+ ##INFORMACION DE OTRAS VARIABLES OBTENDIAS EN OTRAS FUNCIONES ogConfigureNetwork.
+ #DEVICE
+ #IPV4DDR
+ #IPV4BROADCAST
+ #IPV4NETMASK
+ #IPV4GATEWAY
+ #HOSTNAME
+ #INFORMACION de otras variasbles obteneidas desde ogGetROOTSERVER
+ #ROOTSERVER si ip=dhcp -> ROOTSERVER=NEXT-SERVER; si ip=host:rootserver:gw:mask:hostname:interfaz -> ROOTSERVER=rootserver
+ #BOOTIF -> si el gestor remoto es pxelinux.0 y se añade una linea más tipo "IPAPPEND 2" esta variable tendrá la mac de la interfaz.
+ #$OGSERVERLIVE
+ #$OGSERVERSHARE
+ #$OGSERVERLOG
+ #$OGSERVERIMAGES
+ return 0
+}
+
+
+#/**
+# ogConfigureRamfs
+#@brief Configura el initrd para adaptarlo al sistema raiz.
+#@param
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2010/05/24
+#*/ ##
+ogConfigureRamfs ()
+{
+ mkdir -p $DSTOGLIVE
+ mkdir -p $OGLIVERAMFS
+ mkdir -p $OGLIVEROOTFS
+ mkdir -p $OGLIVEUNIONFS
+}
+
+
+#/**
+# ogLoadNetModule
+#@brief Carga en un demerminado modulo de red, requiere compilación previo del modulo
+#@param
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2010/05/24
+#*/ ##
+ogLoadNetModule ()
+{
+ if [ -n "$ognetmodule" ]
+ then
+ echo "Cargando modulo de red $netmodule"
+ insmod `find /lib/modules/ -name ${netmodule}*`
+ fi
+}
+
+
+#/**
+# ogPostConfigureFS
+#@brief Configura el sistema raiz, para independizarlo entre los clientes.
+#@param
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2010/05/24
+#*/ ##
+ogPostConfigureFS()
+{
+ # configuramos el /etc/hostname.
+ echo $HOSTNAME > /etc/hostname
+
+ #configuramos el /etc/hosts
+ echo "127.0.0.1 localhost" > /etc/hosts
+ echo "$IPV4ADDR $HOSTNAME" >> /etc/hosts
+
+ #configuramos el host.conf
+ echo "order hosts,bind" > /etc/host.conf
+ echo "multi on" >> /etc/host.conf
+
+ #configuramos el dns
+ echo "nameserver $ogdns" > /etc/resolv.conf
+
+
+ # configuramos el /etc/networks
+ #read -e NETIP NETDEFAULT <<<$(route -n | grep eth0 | awk -F" " '{print $1}')
+ NETIP=$(route -n | grep eth0 | awk -F" " '{print $1}') && NETIP=$(echo $NETIP | cut -f1 -d" ")
+ echo "default 0.0.0.0" > /etc/networks
+ echo "loopback 127.0.0.0" >> /etc/networks
+ echo "link-local 169.254.0.0" >> /etc/networks
+ echo "localnet $NETIP" >> /etc/networks
+ #route
+
+ #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
+ [ "$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
+
+}
+
+
+#/**
+# ogGetROOTSERVER
+#@brief Determina los puntos de accesos a los distintos recursos.
+#Requiere ogConfigureNetworking.
+#Exporta ROOTSERVER
+# si la red ha sido configurada con dhcp el valor de ROOTSERVER será el valor de next-server del dhcp
+# si la red ha sido configurada con el parametro de kernel ip, será el segundo valor.
+## ip=iphost:ipnext-server:ipgateway:netmask:hostname:iface:none
+## ip=172.17.36.21:62.36.225.150:172.17.36.254:255.255.255.0:prueba1:eth0:none
+#@param
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2010/05/24
+#*/ ##
+ogGetROOTSERVER ()
+{
+ # get nfs root from dhcp
+ if [ "x${NFSROOT}" = "xauto" ]; then
+ # check if server ip is part of dhcp root-path
+ if [ "${ROOTPATH#*:}" = "${ROOTPATH}" ]; then
+ NFSROOT=${ROOTSERVER}:${ROOTPATH}
+ else
+ NFSROOT=${ROOTPATH}
+ fi
+
+ # nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
+ elif [ -n "${NFSROOT}" ]; then
+ # nfs options are an optional arg
+ if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
+ NFSOPTS="-o ${NFSROOT#*,}"
+ fi
+ NFSROOT=${NFSROOT%%,*}
+ if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
+ NFSROOT=${ROOTSERVER}:${NFSROOT}
+ fi
+ fi
+ export ROOTSERVER
+ echo "ROOTSERVER=$ROOTSERVER" >> $CFGINITRD
+
+ #si oglive no oglive=R
+ export OGSERVERIMAGES="${ogrepo:-$ROOTSERVER}" && echo "OGSERVERIMAGES=$OGSERVERIMAGES" >> $CFGINITRD
+ export OGSERVERSHARE="${ogshare:-$ROOTSERVER}" && echo "OGSERVERSHARE=$OGSERVERSHARE" >> $CFGINITRD
+ export OGSERVERLOG="${oglog:-$ROOTSERVER}" && echo "OGSERVERLOG=$OGSERVERLOG" >> $CFGINITRD
+ export OGSERVERLIVE="${oglive:-$OGSERVERIMAGES}" && echo "OGSERVERLIVE=$OGSERVERLIVE" >> $CFGINITRD
+
+ return 0
+}
+
+
+
+# ogUpdateInitrd
+#@brief Actualiza el intird de la cache desde el servidor. Si el arranque ha disdo desde cache, compueba desde el servidor nueva version del initird.
+#@param1
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2011/05/24
+#*/ ##
+
+ogUpdateInitrd ()
+{
+ cd /tmp
+ mkdir /tmp/cache
+ mount -t reiserfs LABEL=CACHE /tmp/cache || return
+ mkdir /tmp/cache/boot
+
+
+ # comparamos los del server
+ busybox tftp -g -r ogvmlinuz.sum $ROOTSERVER
+ busybox tftp -g -r oginitrd.img.sum $ROOTSERVER
+ SERVERVMLINUZ=`cat ogvmlinuz.sum`
+ SERVERINITRD=`cat oginitrd.img.sum`
+
+
+ #comparamos los de la cache
+ CACHEVMLINUZ=`cat /tmp/cache/boot/ogvmlinuz.sum`
+ CACHEINITRD=`cat /tmp/cache/boot/oginitrd.img.sum`
+
+ echo "MD5 on SERVER: $SERVERVMLINUZ $SERVERINITRD"
+ echo "MD5 on CACHE: $CACHEVMLINUZ $CACHEINITRD"
+
+ cd /tmp/cache/boot
+
+ if [ "$CACHEVMLINUZ" != "$SERVERVMLINUZ" ]
+ then
+ echo "ogvmlinuz updating"
+ busybox tftp -g -r ogvmlinuz $ROOTSERVER
+ busybox tftp -g -r ogvmlinuz.sum $ROOTSERVER
+ DOREBOOT=true
+ fi
+ if [ "$CACHEINITRD" != "$SERVERINITRD" ]
+ then
+ echo "oginitrd updating"
+ busybox tftp -g -r oginitrd.img $ROOTSERVER
+ busybox tftp -g -r oginitrd.img.sum $ROOTSERVER
+ DOREBOOT=true
+ fi
+
+ cd /; umount /tmp/cache
+
+ [ "$DOREBOOT" == "true" ] && busybox reboot -f
+
+}
+
+#/**
+# ogConnect
+#@brief Conecta con los recursos necesarios para opengnsys
+#@param1 ip del servidor TODO:dns
+#@param2 protocolo
+#@param3 punto de acceso remoto
+#@param4 punto de montaje local
+#@param5 acceso de lectura tipo ",ro"
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2011/05/24
+#*/ ##
+
+ogConnect ()
+{
+ SERVER=$1
+ PROTOCOL=$2
+ SRC=$3
+ DST=$4
+ READONLY=$5
+
+ case "$PROTOCOL" in
+ nfs)
+ nfsmount -o nolock${READONLY} ${SERVER}:${SRC} ${DST}
+ ;;
+ smb)
+ mount.cifs //${SERVER}/${SRC} ${DST} ${OPTIONS}${READONLY}
+ ;;
+ esac
+}
+
+
+#/**
+# ogConnectOgLive
+#@brief Conecta con el recurso para usar el sistema raiz externo, remoto o local
+#@param1
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2011/05/24
+ogConnectOgLive ()
+{
+# Si ogprotocol=local, la funcion ogExportVar => SRCOGLIVE=local
+ if [ "$SRCOGLIVE" == "local" ]
+ then
+ echo "Montar imagen del sistema root desde dispositivo local"
+ for i in $(blkid /dev/s* | grep $OGLIVELABEL | awk -F: '{print $2}' | tr -d \"); do export $i; done
+ mount -t $TYPE LABEL=$LABEL $DSTOGLIVE
+ if [ $? != 0 ]
+ then
+ mount -t reiserfs LABEL=CACHE $DSTOGLIVE
+ export LOCALMEDIA=CACHE
+ fi
+ else
+# Si ogprotocol es remoto. TODO en smb rw y en nfs ro??
+ ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE
+ fi
+# Si el montaje ha sido correcto, tanto en local como en remoto. Procedemos con la union
+ ogMergeLive
+}
+
+
+#/**
+# ogMergeLive
+#@brief Metafuncion para fusionar el initrd con el sistema raiz.
+#@param1
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2011/05/24
+ogMergeLive()
+{
+#Si existe en el punto de acceso del del oglive el fichero ogclient.sqfs
+if [ -f $DSTOGLIVE/ogclient/ogclient.sqfs ]
+then
+ cat /proc/mounts > /tmp/mtab.preunion
+ if [ "$og2nd" == "img" ]
+ then
+ #Montamos el ROOTFS tipo img, para desarrolladores
+ #TODO: comprobar que se tiene acceso de escritura
+ losetup /dev/loop0 $DSTOGLIVE/ogclient/ogclient.img -o 32256
+ mount /dev/loop0 $OGLIVEROOTFS
+ else
+ ## Montamos el ROOTFS tipo squashfs
+ mount $DSTOGLIVE/ogclient/ogclient.sqfs $OGLIVEROOTFS -t squashfs -o loop
+ fi
+# Realizamos la union entre el ogliveram(initrd) y el ogliverootfs(ogclient.sqfs)
+ for i in etc var lib bin sbin usr root boot; do
+ ogUnionLiveDir $i
+ done
+ cat /tmp/mtab.preunion > /etc/mtab
+else
+ echo "Fichero imagen del cliente no encontrado"
+ return 1
+fi
+}
+
+
+
+#/**
+# ogUnionLiveDir
+#@brief fusiona dos directorios con unionfs
+#@param1
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2011/05/24
+ogUnionLiveDir()
+{
+ TMPDIR=/$1 #dir
+ FUSE_OPT="-o default_permissions -o allow_other -o use_ino -o nonempty -o suid"
+ UNION_OPT="-o cow -o noinitgroups"
+ UBIN="unionfs-fuse"
+
+ mkdir -p $OGLIVERAMFS$TMPDIR
+ U1STDIR="${OGLIVERAMFS}${TMPDIR}=RW"
+ U2NDDIR="${OGLIVEROOTFS}${TMPDIR}=RO"
+ UNIONDIR=${OGLIVEUNIONFS}${TMPDIR}
+ mkdir -p $UNIONDIR
+ $UBIN $FUSE_OPT $UNION_OPT ${U1STDIR}:${U2NDDIR} $UNIONDIR
+ mount --bind $UNIONDIR $TMPDIR
+}
+
+
+
+#/**
+# ogConfigureLoopback
+#@brief Configura la interfaz loopback para cliente torrent
+#@param
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9 Usando funciones generales de ubuntu
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2010/05/24
+#@version 1.0.1 Deteccion automatica de interfaz con enlace activo.
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2011/05/24
+#*/ ##
+ogConfigureLoopback()
+{
+ # for the portmapper we need localhost
+ ifconfig lo 127.0.0.1
+ #/etc/init.d/portmap start
+}
+
+#/**
+# ogConfigureNetworking
+#@brief Configura la interfaz de red usada en el pxe
+#@param
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author Antonio J. Doblas. Universidad de Malaga.
+#@date 2010/05/24
+#*/ ##
+ogConfigureNetworking()
+{
+#echo "ogConfigureNetworking: Buscando interfaz a configurar DEVICE"
+if [ -n "${BOOTIF}" ]
+then
+ #echo " variable BOOTIF exportada con pxelinux.0 con valor $BOOTIF"
+ IP=$IPOPTS
+ temp_mac=${BOOTIF#*-}
+ # convert to typical mac address format by replacing "-" with ":"
+ bootif_mac=""
+ IFS='-'
+ for x in $temp_mac ; do
+ if [ -z "$bootif_mac" ]; then
+ bootif_mac="$x"
+ else
+ bootif_mac="$x:$bootif_mac"
+ fi
+ done
+ unset IFS
+ # look for devices with matching mac address, and set DEVICE to
+ # appropriate value if match is found.
+ for device in /sys/class/net/* ; do
+ if [ -f "$device/address" ]; then
+ current_mac=$(cat "$device/address")
+ if [ "$bootif_mac" = "$current_mac" ]; then
+ DEVICE=${device##*/}
+ break
+ fi
+ fi
+ done
+else
+ #echo "variable BOOTIF no exportada, intentamos detectar que interfaz se ha iniciado"
+ IP=$ip
+ #TODO Detectar que interfaz se ha iniciado
+ case ${IP} in
+ none|off)
+ return 0
+ ;;
+ ""|on|any)
+ # Bring up device
+ DEVICE=eth0
+ ;;
+ dhcp|bootp|rarp|both)
+ DEVICE=eth0
+ ;;
+ *)
+ DEVICE=`echo $IP | cut -f6 -d:`
+ ;;
+ esac
+fi
+if [ -z "${DEVICE}" ]; then
+ echo "variable DEVICE con valor $DEVICE no encontrada, llamamos de nuevo a ogconfigure_networking"
+ 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"
+# return 0
+#else
+# echo "variable DEVICE con valor $DEVICE encontrada, procedemos a configurala y a crear el fichero /tmp/net-$DEVICE"
+#fi
+
+# Activamos la interfaz antes de configurar.
+ip address flush $DEVICE
+ip link set dev $DEVICE up
+# Si no se detecta señal portadora volver a configurar.
+sleep 1
+CARRIER=$(cat /sys/class/net/${DEVICE}/carrier)
+if [ "$CARRIER" != "1" ]
+then
+ ogConfigureNetworking
+fi
+
+# support ip options see linux sources
+# Documentation/filesystems/nfsroot.txt
+# Documentation/frv/booting.txt
+for ROUNDTTT in 2 3 4 6 9 16 25 36 64 100; do
+ # The NIC is to be configured if this file does not exist.
+ # Ip-Config tries to create this file and when it succeds
+ # creating the file, ipconfig is not run again.
+ if [ -e /tmp/net-"${DEVICE}".conf ]; then
+ break;
+ fi
+ case ${IP} in
+ none|off)
+ return 0
+ ;;
+ ""|on|any)
+ # Bring up device
+ echo "Setting $DEVICE with option:on|any and Variable IP= $IP: ipconfig -t ${ROUNDTTT} ${DEVICE} "
+ ipconfig -t ${ROUNDTTT} ${DEVICE}
+ ;;
+ dhcp|bootp|rarp|both)
+ echo "Setting $DEVICE with option:dhcp|bootp|rarp|both and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE} "
+ ipconfig -t ${ROUNDTTT} -c ${IP} -d ${DEVICE}
+ ;;
+ *)
+ echo "Setting $DEVICE with option * and Variable IP= $IP: ipconfig -t ${ROUNDTTT} -d $IP "
+ ipconfig -t ${ROUNDTTT} -d $IP
+ # grab device entry from ip option
+ NEW_DEVICE=${IP#*:*:*:*:*:*}
+ if [ "${NEW_DEVICE}" != "${IP}" ]; then
+ NEW_DEVICE=${NEW_DEVICE%:*}
+ else
+ # wrong parse, possibly only a partial string
+ NEW_DEVICE=
+ fi
+ if [ -n "${NEW_DEVICE}" ]; then
+ DEVICE="${NEW_DEVICE}"
+ fi
+ ;;
+ esac
+done
+
+# source ipconfig output
+if [ -n "${DEVICE}" ]; then
+ . /tmp/net-${DEVICE}.conf
+ DEVICECFG="/tmp/net-${DEVICE}.conf"
+ export DEVICECFG
+ export DEVICE
+ echo "DEVICE=$DEVICE" >> $CFGINITRD
+ echo "DEVICECFG=$DEVICECFG" >> $CFGINITRD
+ echo "exportando variable DEVICE con valor = $DEVICE y el DEVICECFG con valor $DEVICECFG"
+else
+ # source any interface as not exaclty specified
+ . /tmp/net-*.conf
+fi
+}
+
+
+#/**
+# ogYesNo
+#@brief Gestion de peticiones de usuario en modo ogdebug=true
+#@param1 OPTIONS --timeout N --default ANSWER
+#@param1 Questions
+#@return 1=yes 0=no
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@version 0.9
+#@author:
+#@date 2010/05/24
+#*/ ##
+ogYesNo()
+{
+ local ans
+ local ok=0
+ local timeout=0
+ local default
+ local t
+
+ while [[ "$1" ]]
+ do
+ case "$1" in
+ --default)
+ shift
+ default=$1
+ if [[ ! "$default" ]]; then error "Missing default value"; fi
+ t=$(echo $default | tr '[:upper:]' '[:lower:]')
+
+ if [[ "$t" != 'y' && "$t" != 'yes' && "$t" != 'n' && "$t" != 'no' ]]; then
+ error "Illegal default answer: $default"
+ fi
+ default=$t
+ shift
+ ;;
+
+ --timeout)
+ shift
+ timeout=$1
+ if [[ ! "$timeout" ]]; then error "Missing timeout value"; fi
+ #if [[ ! "$timeout" =~ ^[0-9][0-9]*$ ]]; then error "Illegal timeout value: $timeout"; fi
+ shift
+ ;;
+
+ -*)
+ error "Unrecognized option: $1"
+ ;;
+
+ *)
+ break
+ ;;
+ esac
+ done
+
+ if [[ $timeout -ne 0 && ! "$default" ]]; then
+ error "Non-zero timeout requires a default answer"
+ fi
+
+ if [[ ! "$*" ]]; then error "Missing question"; fi
+
+ while [[ $ok -eq 0 ]]
+ do
+ if [[ $timeout -ne 0 ]]; then
+ if ! read -t $timeout -p "$*" ans; then
+ ans=$default
+ else
+ # Turn off timeout if answer entered.
+ timeout=0
+ if [[ ! "$ans" ]]; then ans=$default; fi
+ fi
+ else
+ read -p "$*" ans
+ if [[ ! "$ans" ]]; then
+ ans=$default
+ else
+ ans=$(echo $ans | tr '[:upper:]' '[:lower:]')
+ fi
+ fi
+
+ if [[ "$ans" == 'y' || "$ans" == 'yes' || "$ans" == 'n' || "$ans" == 'no' ]]; then
+ ok=1
+ fi
+
+ if [[ $ok -eq 0 ]]; then warning "Valid answers are: yes y no n"; fi
+ done
+ [[ "$ans" = "y" || "$ans" == "yes" ]]
+}
+
diff --git a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit b/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
index d91afaee..cc179f9f 100755
--- a/client/boot-tools/clientstructure/etc/initramfs-tools/scripts/oginit
+++ b/client/boot-tools/includes/etc/initramfs-tools/scripts/oginit
@@ -3,25 +3,30 @@
#@file oginit
#@brief Guion modificador inicio initrd para OpenGnSys
#@warning
-#@version 0.1 - basado en ROOTfs
+#@version 0.1 - basado en ROOTfs - rootfs over nfs -
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date 2009/00/00
-#@version 0.2 - basado en el instalador de ubunto
-#@author Alejandro Castillo
-#@author Ramón Gómez
-#@author Irina
-#@author Antonio Doblas
+#@version 0.2 - basado en RAMFS - instalador de ubunto -
+#@author Alejandro Castillo, Ramón Gómez, Irina, Antonio Doblas
#@date 2010/00/00
-#@version 0.7 - Generación limpia con mkinitrd, busybox
+#@version 0.7 - Hibrido en RAMFS + ROOTFS -mkinitrd, busybox, deboostrap-
#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
#@date 2010/05/24
-#@version 0.8 - Integración con FileSystem externo
+#@version 0.8 - Soporte smb, asignación ip estática
#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
#@date 2010/06/24
-#@version 0.8.1 - UnionFS + squasfs
+#@version 0.8.1 - Integración RAMFS+ROOTFS con UnionFS y squasfs
#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
#@date 2010/06/29
-
+#@version 1.0. - Adaptacion variables. Corrección enlace red
+#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
+#@date 2011/06/16
+#@version 1.0.1 - Logica para inicio multiples dispositivos, usb, red, cd
+#@author Antonio J. Doblas Viso. Universidad de Málaga. EVLT.
+#@date 2011/07/4
+#@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
#*/
@@ -45,8 +50,6 @@ mountroot ()
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before get OG variables: y/N "
[ $? == 0 ] && sh || echo " "
-
-
set -a
log_success_msg "Checking kernel parameters"
ogExportKernelParameters
@@ -67,30 +70,40 @@ mountroot ()
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before configure networking: y/N "
[ $? == 0 ] && sh || echo " "
- ogconfigure_networking
+ ogConfigureNetworking
log_success_msg "config networking"
- ogconfigure_lo
+ ogConfigureLoopback
log_success_msg "config loopback"
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before detect rootserver: y/N "
[ $? == 0 ] && sh || echo " "
- ogGetROOTSERVER && log_success_msg "Get Info from pxe server"
-
- [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before conect with og Services : y/N "
- [ $? == 0 ] && sh || echo " "
- ogConectROOTSERVER && log_success_msg "Conecting with og services" || sh
- # ogConectROOTMEDIA
+ ogGetROOTSERVER && log_success_msg "Get Info from pxe server and ckeck distribuited OG services "
- [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before merge the Second File System with initrd (First File System) : y/N "
- [ $? == 0 ] && sh || echo " "
- ogMerge2ndFile && log_success_msg "Merge onto Second File System"
+ if [ "$ogdebug" == "true" -a "$ogupdateinitrd" == "true" ]; then
+ ogYesNo --timeout 5 --default no "Stop before check updating initrd: y/N "
+ [ $? == 0 ] && sh || echo " "
+ fi
+ [ "$ogupdateinitrd" == "true" ] && ogUpdateInitrd
- #[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/og-bottom"
- #run_scripts /scripts/og-bottom
- #[ "$quiet" != "y" ] && log_end_msg
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect and merging the rootfs -ogLive- with $OGSERVERLIVE: y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogConnectOgLive && log_success_msg "Merge the initrd with the remote rootfs -ogLive- on $OGSERVERLIVE" || sh
+ # si es necesario realiza ogConnect $OGSERVERLIVE $OGPROTOCOL $SRCOGLIVE $DSTOGLIVE
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with client dir SHARE -engine,scripts,interface, -share- on $OGSERVERSHARE : y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogConnect $OGSERVERSHARE $OGPROTOCOL $SRCOGSHARE $DSTOGSHARE
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with client dir LOG STORAGE on $OGSERVERLOG : y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogConnect $OGSERVERLOG $OGPROTOCOL $SRCOGLOG $DSTOGLOG
+
+ [ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before connect with REPOSITORY STORAGE on $OGSERVERIMAGES : y/N "
+ [ $? == 0 ] && sh || echo " "
+ ogConnect $OGSERVERIMAGES $OGPROTOCOL $SRCOGIMAGES $DSTOGIMAGES
+
[ "$ogdebug" == "true" ] && ogYesNo --timeout 5 --default no "Stop before doing the postconfiguration: y/N "
[ $? == 0 ] && sh || echo " "
diff --git a/client/boot-tools/clientstructure/etc/inittab b/client/boot-tools/includes/etc/inittab
index 6d3277fc..6d3277fc 100644
--- a/client/boot-tools/clientstructure/etc/inittab
+++ b/client/boot-tools/includes/etc/inittab
diff --git a/client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf b/client/boot-tools/includes/etc/modprobe.d/blacklist-framebuffer.conf
index 8b047e4e..8b047e4e 100644
--- a/client/boot-tools/clientstructure/etc/modprobe.d/blacklist-framebuffer.conf
+++ b/client/boot-tools/includes/etc/modprobe.d/blacklist-framebuffer.conf
diff --git a/client/boot-tools/clientstructure/etc/mtab b/client/boot-tools/includes/etc/mtab
index e69de29b..e69de29b 100644
--- a/client/boot-tools/clientstructure/etc/mtab
+++ b/client/boot-tools/includes/etc/mtab
diff --git a/client/boot-tools/clientstructure/etc/network/interfaces b/client/boot-tools/includes/etc/network/interfaces
index dbe43582..dbe43582 100644
--- a/client/boot-tools/clientstructure/etc/network/interfaces
+++ b/client/boot-tools/includes/etc/network/interfaces
diff --git a/client/boot-tools/includes/etc/profile.d/loadenviron.sh b/client/boot-tools/includes/etc/profile.d/loadenviron.sh
new file mode 100755
index 00000000..e2ad0144
--- /dev/null
+++ b/client/boot-tools/includes/etc/profile.d/loadenviron.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+### NOTA este archivo se debe de copiar desde el fichero etc/init/default
+
diff --git a/client/boot-tools/includes/etc/securetty.template b/client/boot-tools/includes/etc/securetty.template
new file mode 100644
index 00000000..491d8f52
--- /dev/null
+++ b/client/boot-tools/includes/etc/securetty.template
@@ -0,0 +1,142 @@
+# /etc/securetty: list of terminals on which root is allowed to login.
+# See securetty(5) and login(1).
+console
+
+
+pts/0
+pts/1
+pts/2
+pts/3
+
+
+# Standard serial ports
+ttyS0
+ttyS1
+ttyS2
+ttyS3
+ttyS4
+ttyS5
+
+# USB dongles
+ttyUSB0
+ttyUSB1
+ttyUSB2
+
+# PowerMac
+ttyPZ0
+ttyPZ1
+ttyPZ2
+ttyPZ3
+
+# Embedded MPC platforms
+ttyPSC0
+ttyPSC1
+ttyPSC2
+ttyPSC3
+ttyPSC4
+ttyPSC5
+
+# PA-RISC mux ports
+ttyB0
+ttyB1
+
+# Standard hypervisor virtual console
+hvc0
+
+# Oldstyle Xen console
+xvc0
+
+# Standard consoles
+tty1
+tty2
+tty3
+tty4
+tty5
+tty6
+tty7
+tty8
+tty9
+tty10
+tty11
+tty12
+tty13
+tty14
+tty15
+tty16
+tty17
+tty18
+tty19
+tty20
+tty21
+tty22
+tty23
+tty24
+tty25
+tty26
+tty27
+tty28
+tty29
+tty30
+tty31
+tty32
+tty33
+tty34
+tty35
+tty36
+tty37
+tty38
+tty39
+tty40
+tty41
+tty42
+tty43
+tty44
+tty45
+tty46
+tty47
+tty48
+tty49
+tty50
+tty51
+tty52
+tty53
+tty54
+tty55
+tty56
+tty57
+tty58
+tty59
+tty60
+tty61
+tty62
+tty63
+
+# Local X displays (allows empty passwords with pam_unix's nullok_secure)
+:0
+:0.0
+:0.1
+:1
+:1.0
+:1.1
+:2
+:2.0
+:2.1
+:3
+:3.0
+:3.1
+
+# Embedded Freescale i.MX ports
+ttymxc0
+ttymxc1
+ttymxc2
+ttymxc3
+ttymxc4
+ttymxc5
+
+# Embedded Renesas SuperH ports
+ttySC0
+ttySC1
+ttySC2
+ttySC3
+ttySC4
+ttySC5 \ No newline at end of file
diff --git a/client/boot-tools/clientstructure/etc/ssh/ssh_config b/client/boot-tools/includes/etc/ssh/ssh_config
index 7f9319dc..7f9319dc 100644
--- a/client/boot-tools/clientstructure/etc/ssh/ssh_config
+++ b/client/boot-tools/includes/etc/ssh/ssh_config
diff --git a/client/boot-tools/clientstructure/etc/ssh/sshd_config b/client/boot-tools/includes/etc/ssh/sshd_config
index 80900684..80900684 100644
--- a/client/boot-tools/clientstructure/etc/ssh/sshd_config
+++ b/client/boot-tools/includes/etc/ssh/sshd_config
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/box.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/box.png
new file mode 100644
index 00000000..54876e68
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/box.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/bullet.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/bullet.png
new file mode 100644
index 00000000..dd527369
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/bullet.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/entry.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/entry.png
new file mode 100644
index 00000000..a9f4157b
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/entry.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/lock.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/lock.png
new file mode 100644
index 00000000..a0f8c12f
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/lock.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/logoopengnsys.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/logoopengnsys.png
new file mode 100644
index 00000000..c87ca25e
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/logoopengnsys.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.plymouth b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.plymouth
new file mode 100644
index 00000000..a974b70c
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.plymouth
@@ -0,0 +1,11 @@
+[Plymouth Theme]
+Name=Script
+Description=Script example plugin.
+ModuleName=script
+
+[script]
+ImageDir=/lib/plymouth/themes/opengnsys
+ScriptFile=/lib/plymouth/themes/opengnsys/opengnsys.script
+
+[script-env-vars]
+example_env_var=example env var value
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.png
new file mode 100644
index 00000000..c87ca25e
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.script b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.script
new file mode 100644
index 00000000..dc0c8541
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/opengnsys.script
@@ -0,0 +1,203 @@
+# This is an example plymouth plugin script
+
+Window.SetBackgroundTopColor(0, 0, 0);
+Window.SetBackgroundBottomColor(0, 0, 0);
+
+#logo.image = Image("special://logo");
+logo.image = Image ("opengnsys.png");
+logo.sprite = Sprite(logo.image);
+logo.opacity_angle = 0;
+
+fun refresh_callback ()
+ {
+ if (status == "normal")
+ {
+ logo.opacity_angle += ((2 * 3.14) / 50) * 0.5; # 0.5 HZ
+ min_opacity = 0.3;
+ opacity = (Math.Cos(logo.opacity_angle) + 1) / 2;
+ opacity *= 1 - min_opacity;
+ opacity += min_opacity;
+ logo.sprite.SetX (Window.GetX() + Window.GetWidth() / 2 - logo.image.GetWidth() / 2);
+ logo.sprite.SetY (Window.GetY() + Window.GetHeight() / 2 - logo.image.GetHeight() / 2);
+ logo.sprite.SetOpacity (opacity);
+ }
+ else
+ {
+ logo.sprite.SetX (0);
+ logo.sprite.SetY (0);
+ logo.sprite.SetOpacity (1);
+ }
+ }
+
+Plymouth.SetRefreshFunction (refresh_callback);
+
+#----------------------------------------- Dialogue --------------------------------
+
+status = "normal";
+
+fun dialog_setup()
+ {
+ local.box;
+ local.lock;
+ local.entry;
+
+ box.image = Image("box.png");
+ lock.image = Image("lock.png");
+ entry.image = Image("entry.png");
+
+ box.sprite = Sprite(box.image);
+ box.x = Window.GetX() + Window.GetWidth() / 2 - box.image.GetWidth ()/2;
+ box.y = Window.GetY() + Window.GetHeight() / 2 - box.image.GetHeight()/2;
+ box.z = 10000;
+ box.sprite.SetPosition(box.x, box.y, box.z);
+
+ lock.sprite = Sprite(lock.image);
+ lock.x = box.x + box.image.GetWidth()/2 - (lock.image.GetWidth() + entry.image.GetWidth()) / 2;
+ lock.y = box.y + box.image.GetHeight()/2 - lock.image.GetHeight()/2;
+ lock.z = box.z + 1;
+ lock.sprite.SetPosition(lock.x, lock.y, lock.z);
+
+ entry.sprite = Sprite(entry.image);
+ entry.x = lock.x + lock.image.GetWidth();
+ entry.y = box.y + box.image.GetHeight()/2 - entry.image.GetHeight()/2;
+ entry.z = box.z + 1;
+ entry.sprite.SetPosition(entry.x, entry.y, entry.z);
+
+ global.dialog.box = box;
+ global.dialog.lock = lock;
+ global.dialog.entry = entry;
+ global.dialog.bullet_image = Image("bullet.png");
+ dialog_opacity (1);
+ }
+
+fun dialog_opacity(opacity)
+ {
+ dialog.box.sprite.SetOpacity (opacity);
+ dialog.lock.sprite.SetOpacity (opacity);
+ dialog.entry.sprite.SetOpacity (opacity);
+ for (index = 0; dialog.bullet[index]; index++)
+ {
+ dialog.bullet[index].sprite.SetOpacity(opacity);
+ }
+ }
+
+fun display_normal_callback ()
+ {
+ global.status = "normal";
+ if (global.dialog)
+ dialog_opacity (0);
+ }
+
+fun display_password_callback (prompt, bullets)
+ {
+ global.status = "password";
+ if (!global.dialog)
+ dialog_setup();
+ else
+ dialog_opacity(1);
+ for (index = 0; dialog.bullet[index] || index < bullets; index++)
+ {
+ if (!dialog.bullet[index])
+ {
+ dialog.bullet[index].sprite = Sprite(dialog.bullet_image);
+ dialog.bullet[index].x = dialog.entry.x + index * dialog.bullet_image.GetWidth();
+ dialog.bullet[index].y = dialog.entry.y + dialog.entry.image.GetHeight() / 2 - dialog.bullet_image.GetHeight() / 2;
+ dialog.bullet[index].z = dialog.entry.z + 1;
+ dialog.bullet[index].sprite.SetPosition(dialog.bullet[index].x, dialog.bullet[index].y, dialog.bullet[index].z);
+ }
+ if (index < bullets)
+ dialog.bullet[index].sprite.SetOpacity(1);
+ else
+ dialog.bullet[index].sprite.SetOpacity(0);
+ }
+ }
+
+Plymouth.SetDisplayNormalFunction(display_normal_callback);
+Plymouth.SetDisplayPasswordFunction(display_password_callback);
+
+#----------------------------------------- Progress Bar --------------------------------
+
+progress_box.original_image = Image("progress_box.png");
+progress_box.image = progress_box.original_image.Scale(Window.GetWidth (), progress_box.original_image.GetHeight());
+progress_box.sprite = Sprite(progress_box.image);
+
+progress_box.x = Window.GetX() + Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2;
+progress_box.y = Window.GetY() + Window.GetHeight() - progress_box.image.GetHeight();
+progress_box.sprite.SetPosition(progress_box.x, progress_box.y, 0);
+
+progress_bar.original_image = Image("progress_bar.png");
+progress_bar.image = progress_bar.original_image.Scale(0, progress_box.image.GetHeight());
+progress_bar.sprite = Sprite();
+
+progress_bar.x = Window.GetX() + Window.GetWidth() / 2 - progress_box.image.GetWidth() / 2;
+progress_bar.y = Window.GetY() + Window.GetHeight() - progress_box.image.GetHeight();
+progress_bar.sprite.SetPosition(progress_bar.x, progress_bar.y, 1);
+
+fun progress_callback (duration, progress)
+ {
+ if (progress_bar.image.GetWidth () != Math.Int (progress_bar.original_image.GetWidth () * progress))
+ {
+ progress_bar.image = progress_bar.original_image.Scale(progress_box.image.GetWidth(progress_box.image) * progress, progress_box.image.GetHeight());
+ progress_bar.sprite.SetImage (progress_bar.image);
+ }
+ }
+
+Plymouth.SetBootProgressFunction(progress_callback);
+
+#----------------------------------------- Quit --------------------------------
+
+fun quit_callback ()
+{
+ logo.sprite.SetOpacity (1);
+}
+
+Plymouth.SetQuitFunction(quit_callback);
+
+#----------------------------------------- Message --------------------------------
+
+message_sprite = Sprite();
+message_sprite.SetPosition(10, 10, 10000);
+
+fun message_callback (text)
+{
+ my_image = Image.Text(text, 0.6, 0.6, 0.6);
+ message_sprite.SetImage(my_image);
+ message_sprite.SetX(Window.GetWidth () / 2 - my_image.GetWidth() / 2);
+ message_sprite.SetY((Window.GetHeight () * 0.7) - (2 * my_image.GetHeight()));
+ message.sprite.SetZ(11);
+}
+
+Plymouth.SetMessageFunction(message_callback);
+
+
+#----------------------------------------- Status Update --------------------------------
+
+statusupdate_sprite = Sprite();
+
+fun StringLength(string) {
+
+ index = 0;
+ str = String(string);
+ while(str.CharAt(index)) index++;
+ return index;
+}
+
+fun status_callback (text)
+{
+ // Truncate the message if too long
+ if (StringLength(text) > (Window.GetHeight () / 4 )) {
+ text = text.SubString(0, (Window.GetHeight () / 4 ) - 3);
+ text += "...";
+ }
+
+ my_image = Image.Text(text, 0.4, 0.4, 0.4);
+ statusupdate_sprite.SetPosition(10, 10 + (i * 20), 10000);
+ statusupdate_sprite.SetImage(my_image);
+ statusupdate_sprite.SetX(Window.GetWidth () / 2 - my_image.GetWidth() / 2);
+ statusupdate_sprite.SetY((Window.GetHeight () * 0.7) - my_image.GetHeight());
+ statusupdate.sprite.SetZ(11);
+}
+
+Plymouth.SetUpdateStatusFunction(status_callback);
+
+
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_bar.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_bar.png
new file mode 100644
index 00000000..fad2e3f9
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_bar.png
Binary files differ
diff --git a/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_box.png b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_box.png
new file mode 100644
index 00000000..bdc029e1
--- /dev/null
+++ b/client/boot-tools/includes/lib/plymouth/themes/opengnsys/progress_box.png
Binary files differ
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh
new file mode 100644
index 00000000..edd0dc00
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsBootGraphics.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+#TODO Comprobar si esta los source.
+#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;
+
+#plymouth
+apt-get -y install plymouth plymouth-theme-script
+
+
+#plymoutyh
+update-alternatives --install /lib/plymouth/themes/default.plymouth default.plymouth /lib/plymouth/themes/opengnsys/opengnsys.plymouth 100
+update-alternatives --set default.plymouth /lib/plymouth/themes/opengnsys/opengnsys.plymouth
+
+mkdir -p /etc/initramfs-tools/conf.d
+echo "FRAMEBUFFER=y" > /etc/initramfs-tools/conf.d/splash
+
+history -c \ No newline at end of file
diff --git a/client/boot-tools/clientstructure/root/ReconfigureLocales.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsLocales.sh
index 5480d141..63d36943 100755
--- a/client/boot-tools/clientstructure/root/ReconfigureLocales.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsLocales.sh
@@ -1,4 +1,6 @@
#!/bin/bash
dpkg-reconfigure console-data
dpkg-reconfigure console-setup
-dpkg-reconfigure locales \ No newline at end of file
+dpkg-reconfigure locales
+
+history -c \ No newline at end of file
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh
new file mode 100644
index 00000000..21b7a54d
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsOpengnsys.sh
@@ -0,0 +1,124 @@
+#!/bin/bash
+#TODO Comprobar si esta los source.
+
+#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
+export SVNURL="http://opengnsys.es/svn/branches/version1.0/client/"
+VERSIONSVN=$(LANG=C svn info $SVNURL | awk '/Revision:/ {print "r"$2}')
+
+VERSIONBOOTTOOLS=ogLive
+
+NAMEISOCLIENT="/tmp/opengnsys_info_rootfs"
+NAMEHOSTCLIENT="/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=""
+
+
+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
+
+
+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
+if [ $? -ne 0 ]
+then
+ echo "$FUNCNAME(): Parsing apt.sources : ERROR"
+ exit 1
+fi
+
+
+
+#damos permiso al directorio de scripts
+chmod -R 775 ${SVNCLIENTDIR}/includes/usr/bin/*
+
+# los copiamos
+cp -prv ${SVNCLIENTDIR}/includes/* /
+mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/
+cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/
+cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/
+
+if [ $? -ne 0 ]
+then
+ echo "$FUNCNAME(): Copying client data : ERROR"
+ 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
+ echo "$FUNCNAME(): Copying Browser : 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} > $NAMEISOCLIENT
+echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > $NAMEHOSTCLIENT
+echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > /etc/debian_chroot
+echo ${VERSIONBOOTTOOLS}-${OSCODENAME}-${VERSIONSVN} > /etc/opengnsys_chroot
+
+history -c
+
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsPostconfiguration.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsPostconfiguration.sh
new file mode 100755
index 00000000..140cffb9
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsFsPostconfiguration.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+
+
+history -c \ No newline at end of file
diff --git a/client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsInitrdGenerate.sh
index eaeb475b..fe9fe4ff 100755
--- a/client/boot-tools/clientstructure/root/GenerateInitrd.generic.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsInitrdGenerate.sh
@@ -13,4 +13,6 @@ rm *
cp /bin/busybox ./
cd /tmp/
mkinitramfs -o /tmp/initrd.img-$OSRELEASE -v $OSRELEASE
-cp /boot/vmlinuz-$OSRELEASE /tmp \ No newline at end of file
+cp /boot/vmlinuz-$OSRELEASE /tmp
+
+history -c \ No newline at end of file
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh
new file mode 100755
index 00000000..568548f2
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareCompile.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+################################################################
+##################### SOFTWARE #####################
+################################################################
+export LANGUAGE=C
+export LC_ALL=C
+export LANG=C
+
+
+source /opt/opengnsys/lib/engine/bin/ToolsGNU.c &>/dev/null
+cd /tmp
+
+echo "ctorrent "
+which ctorrent || ctorrent install &>/dev/null
+
+echo "udp-sender "
+which udp-sender || udpcast install &>/dev/null
+
+echo "ms-sys "
+which ms-sys || ms-sys install &>/dev/null
+
+echo "echo partclone "
+#which partclone.ntfs || $(wget -O partclone_0.2.16_i386.deb http://downloads.sourceforge.net/project/partclone/stable/0.2.16/partclone_0.2.16_i386.deb?use_mirror=ovh &>/dev/null; gdebi -n partclone_0.2.16_i386.deb &>/dev/null)
+which partclone.ntfs || gdebi -n /var/cache/apt/archivesOG/partclone_0.2.8_i386.deb
+
+echo "spartlnx"
+which spartlnx.run || $(wget http://damien.guibouret.free.fr/savepart.zip &>/dev/null; unzip -o savepart.zip -d /sbin/)
+
+echo "xvesa"
+gdebi -n /var/cache/apt/archivesOG/xvesa.deb
+
+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
new file mode 100755
index 00000000..9af72199
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareInstall.sh
@@ -0,0 +1,69 @@
+#!/bin/bash
+export LANGUAGE=C
+export LC_ALL=C
+export LANG=C
+#LOG_FILE=/tmp/boot-tools-software.txt
+
+#Desactivamos upstart
+dpkg-divert --local --rename --add /sbin/initctl
+ln -s /bin/true /sbin/initctl
+
+#cp /tmp/sources.list /etc/apt/sources.list
+#Limpiamos y actualizamos los repositorios apt
+apt-get clean
+apt-get update
+
+#Desactivamos el hook del oginitrd.img para evitar problemas.
+mv /etc/initramfs-tools/hooks/oghooks /etc/initramfs-tools/
+
+echo " /dev/sda1 / ext4 rw,errors=remount-ro 0 0 " > /etc/mtab
+
+
+#Instalamos el kernel.
+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/"
+# software Kernel
+apt-get -y --force-yes install linux-image-${OSRELEASE} linux-headers-${OSRELEASE} linux-image-$RELEASE
+
+#Eliminamos cualquier busybox previo: antes del busybox.
+apt-get -y --force-yes remove busybox
+
+#estos paquetes ofrecen interaccion.
+# si es actualización, ya existe el fichero /etc/ssh/ssh_config
+apt-get -y install sshfs
+
+apt-get -y install console-data
+
+for group in `find /usr/bin/boot-tools/listpackages/ -name sw.*`
+do
+ echo "Instalando el grupo de paquetes almacenados en $group"
+ for package in ` awk /^install/'{print $2}' $group `
+ do
+ echo -n $package
+ apt-get -y --force-yes install $package &>/dev/null
+ RETVAL=$?
+ if [ $RETVAL == 0 ]
+ then
+ echo " : OK - Paquete instalado correctamente (codigo interno de apt-get $RETVAL)"
+ else
+ echo " : Error Paquete $package del grupo $group (codigo interno de apt-get $RETVAL) "
+ echo "Pulse pause para continuar"
+ read
+ fi
+ done
+done
+
+
+#Activamos el hook del oginitrd.img
+mv /etc/initramfs-tools/oghooks /etc/initramfs-tools/hooks/
+
+echo " " > /etc/mtab
+
+apt-get clean
+apt-get autoclean
+apt-get autoremove
+
+history -c
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows
new file mode 100644
index 00000000..41824f18
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSoftwareXwindows
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+export LANGUAGE=C
+export LC_ALL=C
+export LANG=C
+
+apt-get clean
+apt-get -y update
+
+apt-get -y --force-yes install xorg-dev xorg lxde roxterm
+
+apt-get clean
+
+history -c \ No newline at end of file
diff --git a/client/boot-tools/clientstructure/root/generateSshKeysClient.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSshClient.sh
index 9857ad40..10aa673e 100755
--- a/client/boot-tools/clientstructure/root/generateSshKeysClient.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSshClient.sh
@@ -20,4 +20,6 @@ ssh-keygen -q -f /root/.ssh/id_rsa -N ""
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
## TODO: exportamos la publica a los repos
-cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub \ No newline at end of file
+cp /root/.ssh/id_rsa.pub /tmp/rsa.ogclient.pub
+
+history -c \ No newline at end of file
diff --git a/client/boot-tools/clientstructure/root/importSshKeys.sh b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSshServer.sh
index 17a797f8..02ea71cd 100755
--- a/client/boot-tools/clientstructure/root/importSshKeys.sh
+++ b/client/boot-tools/includes/usr/bin/boot-tools/boottoolsSshServer.sh
@@ -14,4 +14,5 @@ echo "importando la clave publica del servidor OG"
cat /tmp/id_rsa.pub
[ -f /tmp/id_rsa.pub ] && cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys || echo "no key publica og"
- \ No newline at end of file
+
+ history -c \ No newline at end of file
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
new file mode 100644
index 00000000..25356820
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Xwindow
@@ -0,0 +1,10 @@
+#sw.X
+#+300M
+#install xorg-dev
+#install xorg
+#install lxde
+#+80M roxterm y gparted
+install roxterm
+install gparted
+#xvesa en compilacion
+install openbox \ No newline at end of file
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
new file mode 100644
index 00000000..48438791
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.Zinitrd
@@ -0,0 +1,3 @@
+#sw.zinitrd
+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
new file mode 100644
index 00000000..4286d652
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.basic
@@ -0,0 +1,13 @@
+#Format install paquete
+install dialog
+install man-db
+install fbset
+install gdebi-core
+install busybox-static
+install console-data
+install locales
+install lshw
+install gawk
+install subversion
+install python-openssl
+install python \ No newline at end of file
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
new file mode 100644
index 00000000..9eda4b6b
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.cloning
@@ -0,0 +1,16 @@
+#sw.cloning
+install drbl-partimage
+install fsarchiver
+install pv
+install kexec-tools
+install mbuffer
+install parted
+install drbl-chntpw
+install chntpw
+install clonezilla
+install registry-tools
+install reglookup
+install libparse-win32registry-perl
+install grokevt
+install libhivex0
+install libhivex-bin \ No newline at end of file
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.compile b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.compile
new file mode 100644
index 00000000..8b1d1001
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.compile
@@ -0,0 +1,10 @@
+install build-essential
+install libattr*
+install attr
+install make
+install m4
+install gettext
+install libmhash-dev
+install gdebi-core
+install gawk
+
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.compresor b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.compresor
new file mode 100644
index 00000000..113e885e
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.compresor
@@ -0,0 +1,12 @@
+#sw.compressor
+install lzma
+install zip
+install unzip
+install gzip
+install lzop
+install drbl-lzop
+install pigz
+install pbzip2
+install lbzip2
+install rzip
+install p7zip-full \ No newline at end of file
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
new file mode 100644
index 00000000..16d67da5
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.local
@@ -0,0 +1,21 @@
+#sw.filesystem.local
+install squashfs-tools
+install unionfs-fuse
+install drbl-ntfsprogs
+install ntfsprogs
+install ntfs-3g
+install dosfstools
+install dmraid
+install dmsetup
+install lvm2
+install e2fsprogs
+install jfsutils
+install reiserfsprogs
+install xfsprogs
+install mhddfs
+install hfsplus
+install hfsprogs
+install hfsutils
+install nilfs-tools
+install reiser4progs
+install ufsutils \ No newline at end of file
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
new file mode 100644
index 00000000..192a4017
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.filesystem.remote
@@ -0,0 +1,9 @@
+#sw.filesystem.remote
+install nfs-common
+install sshfs
+install smbfs
+install smbclient
+install davfs2
+install open-iscsi
+install openssh-server
+install bittornado \ No newline at end of file
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.monitoring b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.monitoring
new file mode 100644
index 00000000..49adc6f3
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.monitoring
@@ -0,0 +1,12 @@
+#sw.monitoring
+install htop
+install ncdu
+install bwbar
+install bmon
+install iftop
+install ifstat
+install dstat
+install hdparm
+install sdparm
+install blktool
+install testdisk \ No newline at end of file
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.networking b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.networking
new file mode 100644
index 00000000..d8efd04e
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.networking
@@ -0,0 +1,14 @@
+#sw.networking
+install netpipes
+install wget
+install tftp
+install dnsutils
+install trickle
+install lighttpd
+install ethtool
+install ssmping
+install mii-diag
+install tcpdump
+install nmap
+install arping
+install iptraf \ No newline at end of file
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
new file mode 100644
index 00000000..282de9e8
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/listpackages/sw.testing
@@ -0,0 +1,4 @@
+#sw.other
+install screen
+install schroot
+install grub \ No newline at end of file
diff --git a/client/boot-tools/includes/usr/bin/boot-tools/qemu.sh b/client/boot-tools/includes/usr/bin/boot-tools/qemu.sh
new file mode 100755
index 00000000..49031670
--- /dev/null
+++ b/client/boot-tools/includes/usr/bin/boot-tools/qemu.sh
@@ -0,0 +1,12 @@
+#/bin/bash
+
+mount -o rw,remount /
+mount proc /proc -t proc
+export PATH=$PATH dpkg -i *.deb
+modprobe 8139too
+modprobe 8139cp
+dhclient
+/etc/init.d/ssh restart
+
+
+#qemu -hda ogclient.img -kernel ./ogvmlinuz -initrd ./oginitrd.img -append "root=/dev/sda1 rw init=false" -boot c \ No newline at end of file
diff --git a/client/boot-tools/includes/var/cache/apt/archivesOG/partclone_0.2.7-1drbl_i386.deb b/client/boot-tools/includes/var/cache/apt/archivesOG/partclone_0.2.7-1drbl_i386.deb
new file mode 100755
index 00000000..870b021f
--- /dev/null
+++ b/client/boot-tools/includes/var/cache/apt/archivesOG/partclone_0.2.7-1drbl_i386.deb
Binary files differ
diff --git a/client/boot-tools/includes/var/cache/apt/archivesOG/partclone_0.2.8_i386.deb b/client/boot-tools/includes/var/cache/apt/archivesOG/partclone_0.2.8_i386.deb
new file mode 100755
index 00000000..9dbe2e9e
--- /dev/null
+++ b/client/boot-tools/includes/var/cache/apt/archivesOG/partclone_0.2.8_i386.deb
Binary files differ
diff --git a/client/boot-tools/includes/var/cache/apt/archivesOG/xvesa.deb b/client/boot-tools/includes/var/cache/apt/archivesOG/xvesa.deb
new file mode 100644
index 00000000..72433e76
--- /dev/null
+++ b/client/boot-tools/includes/var/cache/apt/archivesOG/xvesa.deb
Binary files differ
diff --git a/client/boot-tools/clientstructure/var/lib/locales/supported.d/local b/client/boot-tools/includes/var/lib/locales/supported.d/local
index be3f2a41..be3f2a41 100644
--- a/client/boot-tools/clientstructure/var/lib/locales/supported.d/local
+++ b/client/boot-tools/includes/var/lib/locales/supported.d/local
diff --git a/client/boot-tools/kernelParameterOG.es.txt b/client/boot-tools/kernelParameterOG.es.txt
index 66d7fcfa..7f8a15b2 100644
--- a/client/boot-tools/kernelParameterOG.es.txt
+++ b/client/boot-tools/kernelParameterOG.es.txt
@@ -1,49 +1,5 @@
-KERNEL ogclient/ogvmlinuz
-initrd=ogclient/oginitrd.img
+Ver información completa en:
+ http://www.opengnsys.es/wiki/InitrdClienteSecondFileSystem
-### PARAMETROS ESTANDAR DEl KERNEL
-## indicamos al kernel que proceso a iniciar el Opengnsys
- boot=oginit
- vga=788
-irqpoll
-acpi=on
-
-ip=dhcp
-ip=
-
-### PARAMETROS ESPECIFICOS DE OG.
- # Indicamos al cliente OG, cuando termine su proceso que incie el init (/opt/opengnsys/etc/preinit/default.sh)
- # si no se utiliza este parametro por defecto usa init.
- oginit=init|/bin/bash
-
-
- #por defecto todos los servicios OG, los considera ubicados en el next-server (parámetro indicado en el servicio dhcp)
-# en el caso de que queramos que indicar que REPO (/opt/opengnsys/images) está en otro equipo utilizar este parámetro ogrepo
- ogrepo=ip del repositorio
-
- # fichero donde se encuentra el rootfs que usara el ogvmlinuz y el oginitrd.img
- # hay dos formatos, el img (fichero modificable desde el OG server), o el sqfs (fichero solo lectura del img)
- og2nd=sqfs|img
-
- #protocolo de acceso al og2nd.
- ogprotocol=smb|nfs|local
- #local para cdrom, usb a partir de la iso. labelparticionusbUNETBOOTIN=ogClient
- #loacl tambien para fichero.sqfs en cache.
-
-
- # modo de funcionalidad del browser con shell root activa.
- ogactiveadmin=true|false
-
- #modo de depuración en el proceso de arranque del cliente.
- ogdebug=true|false
-
-
-#modulo especial de la tarjeta de red.
-ognetmodule
-
-
-
-
-
diff --git a/client/boot-tools/ogClientGeneratorV2.sh b/client/boot-tools/ogClientGeneratorV2.sh
deleted file mode 100755
index 3f816aeb..00000000
--- a/client/boot-tools/ogClientGeneratorV2.sh
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/bin/bash
-#@file ogClientGenerator.sh
-#@brief Script generación del cliente OpenGnSys
-#@warning
-#@version 0.9 -
-#@author Antonio J. Doblas Viso.
-#@date 2010/05/24
-#*/
-
-
-#$1 OSCONENAME lucid karmic
-#if [ $# -ne 1 ]; then
-# echo ": invalid number of parameters"
-# echo " host | lucid | karmic | jaunty | lenny | squeeze "
-# exit 1
-#fi
-TYPECLIENT=host
-
-# Solo ejecutable por usuario root
-if [ "$(whoami)" != 'root' ]
-then
- echo "ERROR: this program must run under root privileges!!"
- exit 1
-fi
-
-
-
-#FIXME: variables del instalador oficial.
-WORKDIR=/tmp/opengnsys_installer
-INSTALL_TARGET=/opt/opengnsys
-LOG_FILE=/tmp/opengnsys_installation.log
-PROGRAMDIR=$(readlink -e $(dirname "$0"))
-
-
-#funciones especificas del cliente.
-source $PROGRAMDIR/ogClientManager.lib
-#funciones incluidas dentro del scritps general de instalacion.
-source $PROGRAMDIR/ogInstaller.lib
-
-echoAndLog "OpenGnSys CLIENT installation begins at $(date)"
-
-##########################################################################
-## FASE 1 - Instalación de software adicional.
-##TO DO Integrar en el instaldor. Actualizar repositorios
-# Datos para la generación del cliente.
-DEPENDENCIES=( debootstrap subversion schroot squashfs-tools)
-apt-get update
-# Instalación de dependencias (paquetes de sistema operativo).
-declare -a notinstalled
-checkDependencies DEPENDENCIES notinstalled
-if [ $? -ne 0 ]; then
- installDependencies notinstalled
- if [ $? -ne 0 ]; then
- echoAndLog "Error while installing some dependeces, please verify your server installation before continue"
- exit 1
- fi
-fi
-############## FIN DEL TO DO
-############################################## FIN FASE 1
-
-
-
-############## FASE 2 - Asignación de variables
-#obtenemos las variables necesarias.
-ogClientVar
-#obtenemos la información del host.
-ogClientOsInfo
-######################## FIN fase 2
-
-############# FASE 3: Segundo Sistema archivos (img) Creación.
-#TODO comprobacion de que el fichero esta creado.
-file $OGCLIENTFILE | grep "partition 1: ID=0x83"
-if [ $? == 1 ]
-then
- ##3.1 creación y formateo del disco virtual. generamos el dispositivo loop.
- ogClient2ndFile || exit 1
-fi
-
-
-#3.2 generamos el Sistema de archivos con debootstrap
-# Comprobamos que ya tenemos alguno.
-schroot -p -c IMGogclient -- touch /tmp/ogclientOK
-if [ -f /tmp/ogclientOK ]
-then
- rm /tmp/ogclientOK
-else
- ogClient2ndFs $TYPECLIENT || exit
-fi
-
-
-############### FASE 4: Configuración el acceso al Segundo Sistema de archivos (img), para schroot
-cat /etc/schroot/schroot.conf | grep ogclient || ogClientSchrootConf
-
-
-############### FASE 5: Configuración del Segundo Sistema de archivos (img) con la estructura especial de OpenGnsys
-ogClient2ndSVN $TYPECLIENT || exit
-
-
-
-
-############# FASE6: Ejecutamos los scripts de personalización del 2º sistema de archivos (img) desde la jaula schroot
-### 6.1 instalacion de software con apt-get
-schroot -p -c IMGogclient -- /root/InstallSoftware.sh
-echo "saltando"
- if [ $? -ne 0 ]; then
- errorAndLog "Instalando sofware adicional OG : ERROR"
- exit
-else
- echoAndLog "Instalando sofware adicional OG: OK"
-fi
-#### 6.2 compilación de software.
-cd /
-schroot -p -c IMGogclient -- /root/CompileSoftware.sh
-cd -
-
-### 6.3 configuracion hostname passroot securety
-cd /
-schroot -c IMGogclient -- /root/ConfFS.sh
-cd -
-#schroot -c IMGogclient -- echo -ne "og1\nog1\n" | passwd root
-# schroot -c IMGogclient -- passwd root | echo "root"
-
-
-### 6.4 incorporamos 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 -- /root/importSshKeys.sh
-cd -
-############ y la del propio cliente.
-schroot -c IMGogclient -- /root/generateSshKeysClient.sh
-
-## configuramos los locales.
-schroot -c IMGogclient -- /root/ReconfigureLocales.sh
-
-
-################## FIN fase 6. Fin de comfiguración del segundo sistema de archivos (img)
-
-################## FASE 7. Generamos el 1er sistema de archivos. INITRD
-#nota el parametro es el "tipo" de linux generado en debootstrap. usar solo "host", es decir version,kernel ... del propio host
-#nota: hace un schroot, al 2fs (img), ejecuta el fichero generateinitrd.
-#nota: deja en el directorio tmp del host el nuevo initrd, y lo copia al tftpboot
-ogClientInitrd $TYPECLIENT
-
-
-################## FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs)
-# generamos el 2sistema de archivos en squashfs
-ogClient2ndSqfs
-################## FIN FASE 8. convertimos el 2ºFS(img) en 2ºFS(sqfs)
-
-
-##################### FASE 9. algunos detallas del pxe
-#dejamos ficheros de ejemplo para el pxe y el nfs
-#ogClientConfpxe
-##################### FIN FASE 9. algunos detallas del pxe
-
-
-# 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/ogClientManager.lib b/client/boot-tools/ogClientManager.lib
deleted file mode 100644
index 9f56ec4a..00000000
--- a/client/boot-tools/ogClientManager.lib
+++ /dev/null
@@ -1,725 +0,0 @@
-
-ogClientVar()
-{
-export SVNCLIENTDIR=/tmp/opengnsys_installer/opengnsys/client/boot-tools
-export SVNCLIENTSTRUCTURE=/tmp/opengnsys_installer/opengnsys/client/shared
-export SVNCLIENTENGINE=/tmp/opengnsys_installer/opengnsys/client/engine
-
-export OGCLIENTBASEDIR=/var/lib/tftpboot/ogclient/
-export OGCLIENTFILE=${OGCLIENTBASEDIR}ogclient.img
-export OGCLIENTMOUNT=${OGCLIENTBASEDIR}ogclientmount
-# tamaño maximo limitado por schroot 2GB
-export OGCLIENTSIZEMB=1900
-#export OGCLIENTSIZEMB=1000
-# export OGCLIENTSIZEKB=500
-export OGCLIENTLABEL=ogClient
-#export OGLIB=/opt/opengnsys/client/lib
-}
-
-
-
-function ogClientOsInfo ()
-{
-#TODO según host, un OSHHTP u otro OSARCH
- #1 OSCODENAME jaunty|karmic|lucid
- #devuelve OSDISTRIB(ubuntu,debian),OSCODENAME(lucid,karmic,squeeze):OGRELEASE:httpAPT
- case $1 in
- host | HOST)
- 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/"
- ;;
- jaunty|JAUNTY)
- export OSDISTRIB=ubuntu
- export OSCODENAME=jaunty
- export OSRELEASE="2.6.28-11-generic"
- export OSARCH=i386
- export OSHTTP="http://es.archive.ubuntu.com/ubuntu/"
- ;;
- 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/ "
- ;;
- squeeze|SQUEEZE)
- export OSDISTRIB=debian
- export OSCODENAME=squeeze
- export OSRELEASE="2.6.28-11-generic"
- export OSARCH=i386
- export OSHTTP="http://es.archive.ubuntu.com/ubuntu/ "
- ;;
- karmic|KARMIC)
- export OSDISTRIB=ubuntu
- export OSCODENAME=karmic
- export OSRELEASE="2.6.31-14-generic"
- export OSARCH=i386
- export 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/ "
- ;;
- *)
- return 1
- ;;
- esac
- echo $OSDISTRIB:$OSCODENAME:$OSRELEASE:$OSARCH:$OSHTTP
-}
-
-#creación y formateo del disco virtual.
-ogClient2ndFile ()
-{
-local RERROR DISKLOOP PARTLOOP #return code error
-echoAndLog "$FUNCNAME(): Creación y formateo del disco virtual $OGCLIENTSIZEMB MB "
-#Desmontamos por si acaso el dispositivo virtual
-mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
-mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
-echo "$FUNCNAME(): Creando el directorio donde se montará el disco virtual $OGCLIENTMOUNT"
-mkdir -p $OGCLIENTMOUNT
-if [ $? -ne 0 ]
-then
- errorAndLog "$FUNCNAME(): Creando directorio $OGCLIENTMOUNT : ERROR"
- return 1
-fi
-echo "$FUNCNAME(): Creando el disco virtual que almacenará el FS del cliente $OGCLIENTSIZEMB MB de datos físicos"
-dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB
-#qemu-img create $OGCLIENTFILE 3G
-#dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB
-if [ $? -ne 0 ]
-then
- errorAndLog "$FUNCNAME(): Creando el disco virtual: ERROR"
- return 1
-fi
-
-DISKLOOP=$(losetup -f)
-losetup $DISKLOOP $OGCLIENTFILE
-echo "$FUNCNAME(): particiondo el disco virtual - $DISKLOOP - con una particion primaria"
-echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk $DISKLOOP
-#echo $?
-# da error, porque no puede actualizar el kernel.
-#if [ $? -ne 0 ]
-#then
-# errorAndLog "$FUNCNAME(): Particionando el disco virutal: ERROR"
-# return 1
-#fi
-
-echoAndLog "$FUNCNAME(): Desmontando $DISKLOOP despues del particionado "
-losetup -d $DISKLOOP
-
-if [ $? -ne 0 ]
-then
- errorAndLog "$FUNCNAME(): Liberando disco virtual despues del particionado: ERROR"
- return 1
-fi
-
-
-#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1
-#mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1
-PARTLOOP=$(losetup -f)
-echo "$FUNCNAME(): Formateando la particion principal $PARTLOOP"
-losetup -o 32256 $PARTLOOP $OGCLIENTFILE && mkfs.ext3 -b 4096 -L $OGCLIENTLABEL $PARTLOOP
-if [ $? -ne 0 ]
-then
- errorAndLog "$FUNCNAME(): Formateando la particion principal del disco virtual: ERROR"
- return 1
-fi
-echoAndLog "$FUNCNAME(): Desmontando $PARTLOOP despues del formateo "
-losetup -d $PARTLOOP
-if [ $? -ne 0 ]
-then
- errorAndLog "$FUNCNAME(): Liberando la particion virtual despues del formateo: ERROR"
- return 1
-else
- echoAndLog "$FUNCNAME(): $OGCLIENTFILE $OGCLIENTSIZEMB MB : OK"
-fi
-}
-
-
-
-
-
-ogClient2ndFs ()
-{
-ogClientOsInfo $1
-echoAndLog "$FUNCNAME: Iniciando la generación del sistema de archivos "
-#Montamos el dispositivo virtual en su punto de montaje.
-mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
-
-mount | grep $OGCLIENTMOUNT && echoAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 OK " || errorAndLog "$FUNCNAME: mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256 : FAILURE "
-
-#debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP}
-debootstrap --arch=$OSARCH --components=main,universe ${OSCODENAME} ${OGCLIENTMOUNT} ${OSHTTP}
-
-
-if [ $? -ne 0 ]; then
- errorAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP
- : ha fallado!"
- mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
- return 1
-else
- echoAndLog "$FUNCNAME: debootstrap --include=linux-image-${OSRELEASE},linux-headers-${OSRELEASE} --arch=$OSARCH --components=main,universe $OSCODENAME $OGCLIENTMOUNT $OSHTTP
- : ok"
- mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
- return 0
-fi
- sleep 5
-
-##preubas revisar OSRELEASE
-#debootstrap --include=linux-image-${OSRELEASE} --arch=i386 --variant=minbase $OSVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
-#debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
-#echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
-}
-
-
-
-
-########## configura el segundo sistema de archivos
-########### parametro: "host"
-function ogClient2ndSVN()
-{
-ogClientOsInfo $1
-#1 la salida de ogClientOsInfo
-local LERROR
-LERROR=TRUE
-echoAndLog "$FUNCNAME: Iniciando la personalización con datos del SVN "
-# comprobar que está montado $OGCLIENTMOUNT
-mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
-
-# parseamos del apt.source
-sed -e "s/OSCODENAME/$OSCODENAME/g" ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list.ubuntu > ${SVNCLIENTDIR}/clientstructure/etc/apt/sources.list
-if [ $? -ne 0 ]
-then
- errorAndLog "$FUNCNAME(): Parsing apt.sources : ERROR"
- return 1
-fi
-
-#parseamos el script de generación del initrd.
-sed -e "s/OSRELEASE/$OSRELEASE/g" ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.generic.sh > ${SVNCLIENTDIR}/clientstructure/root/GenerateInitrd.sh
-if [ $? -ne 0 ]
-then
- errorAndLog "$FUNCNAME(): Parsing GenerateInitrd.sh : ERROR"
- return 1
-fi
-
-#damos permiso al directorio de scripts
-chmod 775 ${SVNCLIENTDIR}/clientstructure/root/*
-
-# los copiamos
-cp -prv ${SVNCLIENTDIR}/clientstructure/* $OGCLIENTMOUNT
-mkdir -p ${OGCLIENTMOUNT}/opt/opengnsys/
-cp -prv ${SVNCLIENTSTRUCTURE}/* ${OGCLIENTMOUNT}/opt/opengnsys/
-cp -prv ${SVNCLIENTENGINE}/* ${OGCLIENTMOUNT}/opt/opengnsys/lib/engine/bin/
-
-if [ $? -ne 0 ]
-then
- errorAndLog "$FUNCNAME(): Copying client data : ERROR"
- return 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/
-#ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/Trolltech/QtEmbedded-4.5.1/lib/fonts
-#ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/QtEmbedded-4.6.2/lib/fonts
-#ln -fs $OGCLIENTMOUNT/usr/local/lib/fonts /usr/local/QtEmbedded-4.6.3/lib/fonts
-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
- errorAndLog "$FUNCNAME(): Linking Browser fonts : ERROR"
- return 1
-fi
-
-# B ########################################################
-cp -pr ${SVNCLIENTSTRUCTURE}/lib/pci.ids $OGCLIENTMOUNT/etc
-if [ $? -ne 0 ]
-then
- errorAndLog "$FUNCNAME(): Copying pci.ids : ERROR"
- return 1
-fi
-
-cp ${SVNCLIENTSTRUCTURE}/bin/browser $OGCLIENTMOUNT/bin
-if [ $? -ne 0 ]
-then
- errorAndLog "$FUNCNAME(): Copying Browser : ERROR"
- return 1
-fi
-
-cp ${SVNCLIENTSTRUCTURE}/bin/ogAdmClient $OGCLIENTMOUNT/bin
-if [ $? -ne 0 ]
-then
- errorAndLog "$FUNCNAME(): Copying ogAdmClient : ERROR"
- return 1
-else
- mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
- mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
- mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
- mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
- echoAndLog "$FUNCNAME: Finalizado: OK "
- return 0
-fi
-}
-
-
-ogClientSchrootConf()
-{
-echoAndLog "$FUNCNAME: Iniciando la configuración del schroot "
-cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.`getDateTime`
-cat << EOF > /etc/schroot/schroot.conf
-[IMGogclient]
-type=loopback
-file=/var/lib/tftpboot/ogclient/ogclient.img
-description=ogclient ubuntu luc IMGi
-priority=1
-users=root
-groups=root
-root-groups=root
-mount-options=-o offset=32256
-root-users=root
-[DIRogclient]
-type=directory
-directory=/var/lib/tftpboot/ogclient/ogclientmount
-description=ogclient ubuntu lucid DIR
-priority=2
-users=root
-groups=root
-root-groups=root
-root-users=root
-EOF
-cp /etc/schroot/mount-defaults /etc/schroot/mount-defaults.`getDateTime`
-cat << EOF > /etc/schroot/mount-defaults
-# mount.defaults: static file system information for chroots.
-# Note that the mount point will be prefixed by the chroot path
-# (CHROOT_PATH)
-#
-# <file system> <mount point> <type> <options> <dump> <pass>
-proc /proc proc defaults 0 0
-#procbususb /proc/bus/usb usbfs defaults 0 0
-#/dev /dev none rw,bind 0 0
-/dev/pts /dev/pts none rw,bind 0 0
-/dev/shm /dev/shm none rw,bind 0 0
-#/home /home none rw,bind 0 0
-/tmp /tmp none rw,bind 0 0
-EOF
-
-echoAndLog "$FUNCNAME: Finalizado: OK "
-return 0
-}
-
-
-
-########### param1 "host"
-ogClientInitrd()
-{
-ogClientVar
-cd /
-ogClientOsInfo $1
-schroot -c IMGogclient -- /root/GenerateInitrd.generic.sh
-echo "cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR"
-cp /tmp/*-${OSRELEASE} $OGCLIENTBASEDIR
-cp /tmp/initrd.img-${OSRELEASE} ${OGCLIENTBASEDIR}/oginitrd.img
-cp /tmp/vmlinuz-${OSRELEASE} ${OGCLIENTBASEDIR}/ogvmlinuz
-cd -
-}
-
-
-ogClient2ndSqfs()
-{
-ogClientVar
-echoAndLog "$FUNCNAME: Iniciando la creación del sistema de archivos en sqfs "
-# si ya existe un sqfs lo renombramos
-[ -f $OGCLIENTBASEDIR/ogclient.sqfs ] && mv $OGCLIENTBASEDIR/ogclient.sqfs $OGCLIENTBASEDIR/ogclient.sqfs.`date +%Y%m%d-%H%M%S`
-mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
-mksquashfs $OGCLIENTMOUNT $OGCLIENTBASEDIR/ogclient.sqfs
-chmod 744 $OGCLIENTBASEDIR/ogclient.sqfs
-mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
-}
-
-
-
-
-ogClientSshkeys()
-{
-echo comprobamos clave rsa en el host REPO OG.
-if [ ! -f /root/.ssh/id_rsa.pub ]
-then
- echo "creando claves rsa"
- ssh-keygen -q -f /root/.ssh/id_dsa -t dsa -N "opengnsys"
-else
- echo "la claves ya estan creadas"
-fi
-echo "copiamos la clave publica a /tmp"
-cp /root/.ssh/id_dsa.pub /tmp
-
-cat /tmp/id_dsa.pub
-
-echo "schroot con instrucciones."
-schroot -c IMGogclient -- /root/importSshKeys.sh
-
-echo "limpiando"
-rm /tmp/id_dsa.pub
-
-## copiamos ssh rsa del host al guest como authorized-key2
-##rm ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
-##cat /root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
-#cat ${OGCLIENTMOUNT}/root/.ssh/id_rsa.pub >> ${OGCLIENTMOUNT}/root/.ssh/authorized-key2
-##mount | grep $OGCLIENTMOUNT || umount $OGCLIENTMOUNT
-}
-
-
-
-function ogCrearISO {
-apt-get install syslinux genisoimage
-#TODO: deb http://free.nchc.org.tw/drbl-core drbl stable
-#apt-get install gpxe
-mkdir -p /tmp/iso/isolinux
-#cd tmp/iso/
-cp -prv /usr/lib/syslinux/* /tmp/iso/isolinux/
-cp -prv /usr/share/gpxe/* /tmp/iso/isolinux/
-mkdir -p /tmp/iso/ogclient
-#el ogclienteToISO debe tener una copia del ogvmlinuz como linuxISO
-cp -prv /var/lib/tftpboot/ogclientToIso/* /tmp/iso/ogclient
-
-
-cat << FIN > /tmp/iso/isolinux/isolinux.cfg
-DEFAULT menu.c32
-PROMPT 0
-ALLOWOPTIONS 1
-
-MENU TITLE OpenGnsys 1.0.1 v00
-
-LABEL gpxe
-MENU LABEL gpxe
-KERNEL /clonezilla/live/vmlinuz1
-APPEND initrd=/clonezilla/live/initrd1.img boot=live union=aufs noswap vga=788 ip=frommedia
-
-
-#default 0
-#prompt 1
-#timeout 100
-
-#display mensaje.txt
-
-
-
-
-LABEL 0
-MENU LABEL ogClient vga irqpool acpi ogdebug ip:none
-KERNEL /ogclient/linuxISO
-APPEND initrd=/ogclient/oginitrd.img ro vga=788 irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none
-
-LABEL 1
-MENU LABEL ogClient irqpoll acpi ip:none
-KERNEL /ogclient/linuxISO
-APPEND initrd=/ogclient/oginitrd.img ro irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=none
-
-LABEL 2
-MENU LABEL ogClient acpi debug ip=dhcp
-KERNEL /ogclient/linuxISO
-APPEND initrd=/ogclient/oginitrd.img ro acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=dhcp
-
-LABEL 3
-MENU LABEL ogClient ip=dhcp
-KERNEL /ogclient/linuxISO
-APPEND initrd=/ogclient/oginitrd.img ro acpi=off boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=false ip=dhcp
-
-
-#LABEL ogclient
-#KERNEL /ogclient/linuxISO
-#APPEND initrd=/ogclient/initrdISO.img
-
-#KERNEL linuxISO
-#APPEND initrd=initrdISO.img
-
-LABEL 4
-MENU LABEL local
-localboot 0x80
-append -
-
-
-label 5
-MENU LABEL Network boot via gPXE lkrn
-KERNEL gpxe.lkrn
-
-label 5
-MENU LABEL Network boot via gPXE usb
-KERNEL gpxe.usb
-
-label 5
-MENU LABEL Network boot via gPXE pxe
-KERNEL gpxe.pxe
-
-label 5
-MENU LABEL Network boot via gPXE iso
-KERNEL gpxe.iso
-FIN
-#### /tmp/iso#
-mkisofs -V ogClient -o ogClient.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -J -no-emul-boot -boot-load-size 4 -boot-info-table tmp/iso
-
-### vi /etc/grub.d/40_custom
-##
-#menuentry "og cache " {
-#set root=(hd0,4)
-#linux /ogvmlinuz ro vga=788 irqpoll acpi=on boot=oginit og2nd=sqfs ogprotocol=local ogactiveadmin=true ogdebug=true ip=none
-#initrd /oginitrd.img
-#}
-
-
-}
-
-function ogprobarISO {
-#/tmp/iso
-qemu -m 256 -boot d -cdrom ogClient.iso
-}
-
-
-
-
-
-
-
-ogClientConfpxe()
-{
-################## DEJAMOS FICHERO DE EJEMPLOS PARA:
-#default
-cat << FIN >> /var/lib/tftpboot/pxelinux.cfg/defaultNEWClient
-LABEL pxe-${OGRELEASE}
-KERNEL ogclient/vmlinuz-$OGRELEASE
-APPEND initrd=ogclient/initrd.img-$OGRELEASE ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=
-LABEL pxe-2.6.32-21-generic-pae
-KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae
-APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=oginit vga=788 irqpoll acpi=on ogrepo=172.17.36.11 ogprotocol=nfs og2nd=sqfs
-LABEL cache
-KERNEL grub.exe
-APPEND --config-file="find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img"
-LABEL net
-KERNEL grub.exe
-APPEND keeppxe --config-file="pxe detect; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae"
-LABEL IfNOTcacheGOnet
-KERNEL grub.exe
-APPEND keeppxe --config-file="pxe detect; default 0; timeout 0; hiddenmenu; title cache; fallback 1; find --set-root /vmlinuz; kernel /vmlinuz ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd /initrd.img; boot; title net; kernel (pd)/ogclient/vmlinuz-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on engine=testing reposerver=172.17.32.242; initrd (pd)/ogclient/initrd.img-2.6.32-21-generic-pae; boot"
-#LABEL pxe-2.6.32-21-generic-pae
-#KERNEL ogclient/vmlinuz-2.6.32-21-generic-pae
-#APPEND initrd=ogclient/initrd.img-2.6.32-21-generic-pae ip=dhcp ro boot=og vga=788 irqpoll acpi=on reposerver=172.17.32.242
-#LABEL grub
-#KERNEL grub.exe
-#APPEND keeppxe
-FIN
-#/etc/hosts
-echo "/var/lib/tftpboot *(ro,no_subtree_check,no_root_squash,sync)" > /etc/exportsNEWClient
-/etc/init.d/nfs-kernel-server restart
-#####################################################################
-}
-
-
-
-############### No usados en el instalador, solo en actualizaciones.
-#/**
-# ogClientMount [str_program]
-#@brief Acceso al 2nd FS del cliente desde el Servidor Opengnsys
-#@param 1 Opciona: scripts o programa a ejecutar para automatizaciones
-#@return Si no hay parametros: login de acceso.
-#@return con un parametro: La salida del programa ejecutado
-#@exception
-#@note
-#@todo
-#@version 0.9 - Primera versión para OpenGnSys
-#@author Antonio J. Doblas Viso, Universidad de Málaga
-#@date 2010/02/15
-#*/ ##
-function ogClientMount ()
-{
- #TODO comprobar que OGFILE y OGFILEMOUNT existe.
- mount | grep $OGCLIENTFILE > /dev/null || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
- mount | grep $OGCLIENTMOUNT/proc > /dev/null || mount --bind /proc $OGCLIENTMOUNT/proc
- mount | grep $OGCLIENTMOUNT/sys > /dev/null || mount --bind /sys $OGCLIENTMOUNT/sys
- mount | grep $OGCLIENTMOUNT/tmp > /dev/null || mount --bind /tmp $OGCLIENTMOUNT/tmp
- mount | grep $OGCLIENTMOUNT/dev > /dev/null || mount --bind /dev $OGCLIENTMOUNT/dev
- mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null || mount --bind /dev/pts $OGCLIENTMOUNT/dev/pts
-
-
- [ $# = 0 ] && $(chroot $OGCLIENTMOUNT /sbin/getty 38400 `tty`)
- [ $# = 1 ] && chroot $OGCLIENTMOUNT $1
-
-}
-
-#/**
-# ogClientUnmount
-#@brief Desmonta el 2nd FS del cliente desde el Servidor Opengnsys
-#@param
-#@return
-#@exception
-#@note
-#@todo
-#@version 0.9 - Primera versión para OpenGnSys
-#@author Antonio J. Doblas Viso, Universidad de Málaga
-#@date 2010/02/15
-#*/ ##
-
-function ogClientUnmount ()
-{
- cd /tmp
- echo "desmontando cliente espere"
- sleep 5
- mount | grep $OGCLIENTMOUNT/dev > /dev/null && umount $OGCLIENTMOUNT/dev || ogClientUnmount
- mount | grep $OGCLIENTMOUNT/dev/pts > /dev/null && umount $OGCLIENTMOUNT/dev/pts || ogClientUnmount
- mount | grep $OGCLIENTMOUNT/proc > /dev/null && umount $OGCLIENTMOUNT/proc || ogClientUnmount
- mount | grep $OGCLIENTMOUNT/sys > /dev/null && umount $OGCLIENTMOUNT/sys || ogClientUnmount
- mount | grep $OGCLIENTMOUNT/tmp > /dev/null && umount $OGCLIENTMOUNT/tmp || ogClientUnmount
- mount | grep $OGCLIENTMOUNT > /dev/null && umount $OGCLIENTMOUNT || ogClientUnmount
- #-d -f -l
-
-}
-
-
-############################ hasta el final del archivo antiguos
-############################# ANTIGUOS
-function ogClientGetRelease ()
-{
- #1 OSCODENAME jaunty|karmic|lucid
- case $1 in
- jaunty|JAUNTY)
- OSCODENAME=jaunty
- OGRELEASE="2.6.28-11-generic"
- echo $OGRELEASE
- ;;
- lenny|LENNY)
- OSCODENAME=lenny
- OGRELEASE="2.6.28-11-generic"
- echo $OGRELEASE
- ;;
- squeeze|SQUEEZE)
- OSCODENAME=squeeze
- OGRELEASE="2.6.28-11-generic"
- echo $OGRELEASE
- ;;
- karmic|KARMIC)
- OSCODENAME=karmic
- OGRELEASE="2.6.31-14-generic"
- echo $OGRELEASE
- ;;
- lucid|LUCID)
- OSCODENAME=lucid
- OGRELEASE="2.6.32-21-generic-pae"
- echo $OGRELEASE
- ;;
- *)
- return 1
- ;;
- esac
-
-}
-
-
-#/**
-# ogClientGenerator str_versionUbuntu str_release
-#@brief Crea el 2nd FS del cliente desde el Servidor Opengnsys
-#@param 1 Versión de ubuntu a generar, jaunty karmic
-#@return
-#@exception
-#@note
-#@todo
-#@version 0.9 - Primera versión para OpenGnSys
-#@author Antonio J. Doblas Viso, Universidad de Málaga
-#@date 2010/02/15
-#*/ ##
-
-function ogClientGeneratorDebootstrap ()
-{
- if [ $# != 2 ]
- then
- echo Debes introducir como argumento1: jaunty karmic lucid
- echo Debes introducir como argumento2: la release
- echo utiliza como entrada ogClientCheckVersion
- return
- fi
- OSCODENAME=$1
- OGRELEASE=$2
-
- # instalamos el ultimo debotstrap para permitir instalar versiones superiores a nuestro sistema
- #apt-get install gdebi-core
- #wget $LASTDEBOOTSTRAP
- #gdebi -n debootstrap_1.0.20_all.deb
-
- #Desmontamos por si acaso el dispositivo virtual
- mount | grep $OGCLIENTMOUNT && umount $OGCLIENTMOUNT
-
- #Creamos el directorio donde montaremos el disco virtual
- mkdir -p $OGCLIENTMOUNT
-
- #Creamos el disco virtual con el filesystem del cliente.
- dd if=/dev/zero of=$OGCLIENTFILE bs=1048576 count=$OGCLIENTSIZEMB
- #qemu-img create $OGCLIENTFILE 3G
- #dd if=/dev/zero of=$OGCLIENTFILE bs=1k count=$OGCLIENTSIZEKB # necesita 500MB
-
-
- #particionamos el disco virtual
- losetup /dev/loop0 $OGCLIENTFILE
- echo -e "n\np\n1\n\n\nt\n83\nw" | fdisk /dev/loop0
- losetup -d /dev/loop0
-
-
- #formateamos la particion principal.
- losetup -o 32256 /dev/loop1 $OGCLIENTFILE
- mkfs.ext3 -b 4096 -L $OGCLIENTLABEL /dev/loop1
- #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1
- #mkfs.ext3 -L $OGCLIENTLABEL /dev/loop1
- losetup -d /dev/loop1
-
- #Montamos el dispositivo virtual en su punto de montaje.
- mount | grep $OGCLIENTMOUNT || mount $OGCLIENTFILE $OGCLIENTMOUNT -o loop,offset=32256
-
- #TODO Comprobar arquitectura
- #Iniciamos la creación del sistema en el directorio de clientes.
- #echo debootstrap --include=linux-image-${OGRELEASE},dbus --arch=i386 --components=main,universe $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
- debootstrap --include=linux-image-${OGRELEASE},linux-headers-${OGRELEASE} --arch=i386 --components=main,universe $OSCODENAME $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
- ##preubas
- #debootstrap --include=linux-image-${OGRELEASE} --arch=i386 --variant=minbase $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
- #debootstrap --variant=minbase --include=linux-image-${OGRELEASE} --arch=i386 $OGVERSION $OGCLIENTMOUNT http://es.archive.ubuntu.com/ubuntu/
-
- if [ $? -ne 0 ]; then
- errorAndLog "ogClientGeneratorDebootstrap(): ha fallado!"
- return 1
- else
- echoAndLog "ogClientGeneratorDebootstrap(): ok"
- return 0
- fi
- sleep 5
-
-mount | grep $OGCLIENTMOUNT && umount $OGCLIENTFILE
-
-cat << EOF > /etc/schroot/schroot.conf
-[DIRogclient]
-type=directory
-directory=/var/lib/tftpboot/ogclient/ogclientmount
-description=ogclient ubuntu lucid DIR
-priority=2
-users=root
-groups=root
-root-groups=root
-root-users=root
-EOF
-}
-
-
-
-
-
diff --git a/client/boot-tools/ogInstaller.lib b/client/boot-tools/ogInstaller.lib
deleted file mode 100644
index af0f18df..00000000
--- a/client/boot-tools/ogInstaller.lib
+++ /dev/null
@@ -1,958 +0,0 @@
-#!/bin/bash
-
-
-#####################################################################
-####### Algunas funciones útiles de propósito general:
-#####################################################################
-function getDateTime()
-{
- echo `date +%Y%m%d-%H%M%S`
-}
-
-# Escribe a fichero y muestra por pantalla
-function echoAndLog()
-{
- echo $1
- FECHAHORA=`getDateTime`
- echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE
-}
-
-function errorAndLog()
-{
- echo "ERROR: $1"
- FECHAHORA=`getDateTime`
- echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
-}
-
-# comprueba si el elemento pasado en $2 esta en el array $1
-function isInArray()
-{
- if [ $# -ne 2 ]; then
- errorAndLog "${FUNCNAME}(): invalid number of parameters"
- exit 1
- fi
-
- echoAndLog "${FUNCNAME}(): checking if $2 is in $1"
- local deps
- eval "deps=( \"\${$1[@]}\" )"
- elemento=$2
-
- local is_in_array=1
- # copia local del array del parametro 1
- for (( i = 0 ; i < ${#deps[@]} ; i++ ))
- do
- if [ "${deps[$i]}" = "${elemento}" ]; then
- echoAndLog "isInArray(): $elemento found in array"
- is_in_array=0
- fi
- done
-
- if [ $is_in_array -ne 0 ]; then
- echoAndLog "${FUNCNAME}(): $elemento NOT found in array"
- fi
-
- return $is_in_array
-
-}
-
-#####################################################################
-####### Funciones de manejo de paquetes Debian
-#####################################################################
-
-function checkPackage()
-{
- package=$1
- if [ -z $package ]; then
- errorAndLog "checkPackage(): parameter required"
- exit 1
- fi
- echoAndLog "checkPackage(): checking if package $package exists"
- dpkg -s $package | grep Status | grep -qw install &>/dev/null
- if [ $? -eq 0 ]; then
- echoAndLog "checkPackage(): package $package exists"
- return 0
- else
- echoAndLog "checkPackage(): package $package doesn't exists"
- return 1
- fi
-}
-
-# recibe array con dependencias
-# por referencia deja un array con las dependencias no resueltas
-# devuelve 1 si hay alguna dependencia no resuelta
-function checkDependencies()
-{
- if [ $# -ne 2 ]; then
- errorAndLog "checkDependencies(): invalid number of parameters"
- exit 1
- fi
-
- echoAndLog "checkDependencies(): checking dependences"
- uncompletedeps=0
-
- # copia local del array del parametro 1
- local deps
- eval "deps=( \"\${$1[@]}\" )"
-
- declare -a local_notinstalled
-
- for (( i = 0 ; i < ${#deps[@]} ; i++ ))
- do
- checkPackage ${deps[$i]}
- if [ $? -ne 0 ]; then
- local_notinstalled[$uncompletedeps]=$package
- let uncompletedeps=uncompletedeps+1
- fi
- done
-
- # relleno el array especificado en $2 por referencia
- for (( i = 0 ; i < ${#local_notinstalled[@]} ; i++ ))
- do
- eval "${2}[$i]=${local_notinstalled[$i]}"
- done
-
- # retorna el numero de paquetes no resueltos
- echoAndLog "checkDependencies(): dependencies uncompleted: $uncompletedeps"
- return $uncompletedeps
-}
-
-# Recibe un array con las dependencias y lo instala
-function installDependencies()
-{
- if [ $# -ne 1 ]; then
- errorAndLog "installDependencies(): invalid number of parameters"
- exit 1
- fi
- echoAndLog "installDependencies(): installing uncompleted dependencies"
-
- # copia local del array del parametro 1
- local deps
- eval "deps=( \"\${$1[@]}\" )"
-
- local string_deps=""
- for (( i = 0 ; i < ${#deps[@]} ; i++ ))
- do
- string_deps="$string_deps ${deps[$i]}"
- done
-
- if [ -z "${string_deps}" ]; then
- errorAndLog "installDependencies(): array of dependeces is empty"
- exit 1
- fi
-
- OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND
- export DEBIAN_FRONTEND=noninteractive
-
- echoAndLog "installDependencies(): now ${string_deps} will be installed"
- apt-get -y install --force-yes ${string_deps}
- if [ $? -ne 0 ]; then
- errorAndLog "installDependencies(): error installing dependencies"
- return 1
- fi
-
- DEBIAN_FRONTEND=$OLD_DEBIAN_FRONTEND
- echoAndLog "installDependencies(): dependencies installed"
-}
-
-# Hace un backup del fichero pasado por parámetro
-# deja un -last y uno para el día
-function backupFile()
-{
- if [ $# -ne 1 ]; then
- errorAndLog "${FUNCNAME}(): invalid number of parameters"
- exit 1
- fi
-
- local fichero=$1
- local fecha=`date +%Y%m%d`
-
- if [ ! -f $fichero ]; then
- errorAndLog "${FUNCNAME}(): file $fichero doesn't exists"
- return 1
- fi
-
- echoAndLog "${FUNCNAME}(): realizando backup de $fichero"
-
- # realiza una copia de la última configuración como last
- cp -p $fichero "${fichero}-LAST"
-
- # si para el día no hay backup lo hace, sino no
- if [ ! -f "${fichero}-${fecha}" ]; then
- cp -p $fichero "${fichero}-${fecha}"
- fi
-
- echoAndLog "${FUNCNAME}(): backup realizado"
-}
-
-#####################################################################
-####### Funciones para el manejo de bases de datos
-#####################################################################
-
-# This function set password to root
-function mysqlSetRootPassword()
-{
- if [ $# -ne 1 ]; then
- errorAndLog "mysqlSetRootPassword(): invalid number of parameters"
- exit 1
- fi
-
- local root_mysql=$1
- echoAndLog "mysqlSetRootPassword(): setting root password in MySQL server"
- /usr/bin/mysqladmin -u root password ${root_mysql}
- if [ $? -ne 0 ]; then
- errorAndLog "mysqlSetRootPassword(): error while setting root password in MySQL server"
- return 1
- fi
- echoAndLog "mysqlSetRootPassword(): root password saved!"
- return 0
-}
-
-# Si el servicio mysql esta ya instalado cambia la variable de la clave del root por la ya existente
-function mysqlGetRootPassword(){
- local pass_mysql
- local pass_mysql2
- # Comprobar si MySQL está instalado con la clave de root por defecto.
- if mysql -u root -p"$MYSQL_ROOT_PASSWORD" <<<"quit" 2>/dev/null; then
- echoAndLog "${FUNCNAME}(): Using default mysql root password."
- else
- stty -echo
- echo "Existe un servicio mysql ya instalado"
- read -p "Insertar clave de root de Mysql: " pass_mysql
- echo ""
- read -p "Confirmar clave:" pass_mysql2
- echo ""
- stty echo
- if [ "$pass_mysql" == "$pass_mysql2" ] ;then
- MYSQL_ROOT_PASSWORD=$pass_mysql
- echo "La clave es: ${MYSQL_ROOT_PASSWORD}"
- return 0
- else
- echo "Las claves no coinciden no se configura la clave del servidor de base de datos."
- echo "las operaciones con la base de datos daran error"
- return 1
- fi
- fi
-}
-
-# comprueba si puede conectar con mysql con el usuario root
-function mysqlTestConnection()
-{
- if [ $# -ne 1 ]; then
- errorAndLog "mysqlTestConnection(): invalid number of parameters"
- exit 1
- fi
-
- local root_password="${1}"
- echoAndLog "mysqlTestConnection(): checking connection to mysql..."
- echo "" | mysql -uroot -p"${root_password}"
- if [ $? -ne 0 ]; then
- errorAndLog "mysqlTestConnection(): connection to mysql failed, check root password and if daemon is running!"
- return 1
- else
- echoAndLog "mysqlTestConnection(): connection success"
- return 0
- fi
-}
-
-# comprueba si la base de datos existe
-function mysqlDbExists()
-{
- if [ $# -ne 2 ]; then
- errorAndLog "mysqlDbExists(): invalid number of parameters"
- exit 1
- fi
-
- local root_password="${1}"
- local database=$2
- echoAndLog "mysqlDbExists(): checking if $database exists..."
- echo "show databases" | mysql -uroot -p"${root_password}" | grep "^${database}$"
- if [ $? -ne 0 ]; then
- echoAndLog "mysqlDbExists():database $database doesn't exists"
- return 1
- else
- echoAndLog "mysqlDbExists():database $database exists"
- return 0
- fi
-}
-
-function mysqlCheckDbIsEmpty()
-{
- if [ $# -ne 2 ]; then
- errorAndLog "mysqlCheckDbIsEmpty(): invalid number of parameters"
- exit 1
- fi
-
- local root_password="${1}"
- local database=$2
- echoAndLog "mysqlCheckDbIsEmpty(): checking if $database is empty..."
- num_tablas=`echo "show tables" | mysql -uroot -p"${root_password}" "${database}" | wc -l`
- if [ $? -ne 0 ]; then
- errorAndLog "mysqlCheckDbIsEmpty(): error executing query, check database and root password"
- exit 1
- fi
-
- if [ $num_tablas -eq 0 ]; then
- echoAndLog "mysqlCheckDbIsEmpty():database $database is empty"
- return 0
- else
- echoAndLog "mysqlCheckDbIsEmpty():database $database has tables"
- return 1
- fi
-
-}
-
-
-function mysqlImportSqlFileToDb()
-{
- if [ $# -ne 3 ]; then
- errorAndLog "${FNCNAME}(): invalid number of parameters"
- exit 1
- fi
-
- local root_password="${1}"
- local database=$2
- local sqlfile=$3
-
- if [ ! -f $sqlfile ]; then
- errorAndLog "${FUNCNAME}(): Unable to locate $sqlfile!!"
- return 1
- fi
-
- echoAndLog "${FUNCNAME}(): importing sql file to ${database}..."
- perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DEFAULTUSER/$OPENGNSYS_DB_DEFAULTUSER/g; s/DEFAULTPASSWD/$OPENGNSYS_DB_DEFAULTPASSWD/g" $sqlfile
- mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $sqlfile
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while importing $sqlfile in database $database"
- return 1
- fi
- echoAndLog "${FUNCNAME}(): file imported to database $database"
- return 0
-}
-
-# Crea la base de datos
-function mysqlCreateDb()
-{
- if [ $# -ne 2 ]; then
- errorAndLog "${FUNCNAME}(): invalid number of parameters"
- exit 1
- fi
-
- local root_password="${1}"
- local database=$2
-
- echoAndLog "${FUNCNAME}(): creating database..."
- mysqladmin -u root --password="${root_password}" create $database
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while creating database $database"
- return 1
- fi
- echoAndLog "${FUNCNAME}(): database $database created"
- return 0
-}
-
-
-function mysqlCheckUserExists()
-{
- if [ $# -ne 2 ]; then
- errorAndLog "mysqlCheckUserExists(): invalid number of parameters"
- exit 1
- fi
-
- local root_password="${1}"
- local userdb=$2
-
- echoAndLog "mysqlCheckUserExists(): checking if $userdb exists..."
- echo "select user from user where user='${userdb}'\\G" |mysql -uroot -p"${root_password}" mysql | grep user
- if [ $? -ne 0 ]; then
- echoAndLog "mysqlCheckUserExists(): user doesn't exists"
- return 1
- else
- echoAndLog "mysqlCheckUserExists(): user already exists"
- return 0
- fi
-
-}
-
-# Crea un usuario administrativo para la base de datos
-function mysqlCreateAdminUserToDb()
-{
- if [ $# -ne 4 ]; then
- errorAndLog "mysqlCreateAdminUserToDb(): invalid number of parameters"
- exit 1
- fi
-
- local root_password=$1
- local database=$2
- local userdb=$3
- local passdb=$4
-
- echoAndLog "mysqlCreateAdminUserToDb(): creating admin user ${userdb} to database ${database}"
-
- cat > $WORKDIR/create_${database}.sql <<EOF
-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
- if [ $? -ne 0 ]; then
- errorAndLog "mysqlCreateAdminUserToDb(): error while creating user in mysql"
- rm -f $WORKDIR/create_${database}.sql
- return 1
- else
- echoAndLog "mysqlCreateAdminUserToDb(): user created ok"
- rm -f $WORKDIR/create_${database}.sql
- return 0
- fi
-}
-
-
-#####################################################################
-####### Funciones para el manejo de Subversion
-#####################################################################
-
-function svnExportCode()
-{
- if [ $# -ne 1 ]; then
- errorAndLog "${FUNCNAME}(): invalid number of parameters"
- exit 1
- fi
-
- local url=$1
-
- echoAndLog "${FUNCNAME}(): downloading subversion code..."
-
- svn export "${url}" opengnsys
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error getting code from ${url}, verify your user and password"
- return 1
- fi
- echoAndLog "${FUNCNAME}(): subversion code downloaded"
- return 0
-}
-
-
-############################################################
-### Detectar red
-############################################################
-
-function getNetworkSettings()
-{
- # Variables globales definidas:
- # - SERVERIP: IP local del servidor.
- # - NETIP: IP de la red.
- # - NETMASK: máscara de red.
- # - NETBROAD: IP de difusión de la red.
- # - ROUTERIP: IP del router.
- # - DNSIP: IP del servidor DNS.
-
- local MAINDEV
-
- echoAndLog "${FUNCNAME}(): Detecting default network parameters."
- MAINDEV=$(ip -o link show up | awk '!/loopback/ {d=d$2} END {sub(/:.*/,"",d); print d}')
- if [ -z "$MAINDEV" ]; then
- errorAndLog "${FUNCNAME}(): Network device not detected."
- exit 1
- fi
- SERVERIP=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
- NETMASK=$(LANG=C ifconfig $MAINDEV | awk '/Mask/ {sub(/.*:/,"",$4); print $4}')
- NETBROAD=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {print ($6)}')
- NETIP=$(netstat -nr | grep $MAINDEV | awk '$1!~/0\.0\.0\.0/ {if (n=="") n=$1} END {print n}')
- ROUTERIP=$(netstat -nr | awk '$1~/0\.0\.0\.0/ {print $2}')
- DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1)
- if [ -z "$NETIP" -o -z "$NETMASK" ]; then
- errorAndLog "${FUNCNAME}(): Network not detected."
- exit 1
- fi
-
- # Variables de ejecución de Apache
- # - APACHE_RUN_USER
- # - APACHE_RUN_GROUP
- if [ -f /etc/apache2/envvars ]; then
- source /etc/apache2/envvars
- fi
- APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"}
- APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"}
-}
-
-
-############################################################
-### Esqueleto para el Servicio pxe y contenedor tftpboot ###
-############################################################
-
-function tftpConfigure() {
- echo "Configurando el servicio tftp"
- basetftp=/var/lib/tftpboot
-
- # reiniciamos demonio internet ????? porque ????
- /etc/init.d/openbsd-inetd start
-
- # preparacion contenedor tftpboot
- cp -pr /usr/lib/syslinux/ ${basetftp}/syslinux
- cp /usr/lib/syslinux/pxelinux.0 ${basetftp}
- # prepamos el directorio de la configuracion de pxe
- mkdir -p ${basetftp}/pxelinux.cfg
- cat > ${basetftp}/pxelinux.cfg/default <<EOF
-DEFAULT pxe
-
-LABEL pxe
-KERNEL linux
-APPEND initrd=initrd.gz ip=dhcp ro vga=788 irqpoll acpi=on
-EOF
- # comprobamos el servicio tftp
- sleep 1
- testPxe
- ## damos perfimos de lectura a usuario web.
- chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP ${basetftp}
-}
-
-function testPxe () {
- cd /tmp
- echo "comprobando servicio pxe ..... Espere"
- tftp -v localhost -c get pxelinux.0 /tmp/pxelinux.0 && echo "servidor tftp OK" || echo "servidor tftp KO"
- cd /
-}
-
-########################################################################
-## Configuracion servicio NFS
-########################################################################
-
-# ADVERTENCIA: usa variables globales NETIP y NETMASK!
-function nfsConfigure()
-{
- echoAndLog "${FUNCNAME}(): Config nfs server."
-
- backupFile /etc/exports
-
- nfsAddExport /opt/opengnsys/client ${NETIP}/${NETMASK}:ro,no_subtree_check,no_root_squash,sync
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while adding nfs client config"
- return 1
- fi
-
- nfsAddExport /opt/opengnsys/images ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync,crossmnt
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while adding nfs images config"
- return 1
- fi
-
- nfsAddExport /opt/opengnsys/log/clients ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while adding logging client config"
- return 1
- fi
-
- /etc/init.d/nfs-kernel-server restart
-
- exportfs -va
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while configure exports"
- return 1
- fi
-
- echoAndLog "${FUNCNAME}(): Added NFS configuration to file \"/etc/exports\"."
- return 0
-}
-
-
-# ejemplos:
-#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0:ro,no_subtree_check,no_root_squash,sync
-#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0
-#nfsAddExport /opt/opengnsys 80.20.2.1:ro 192.123.32.2:rw
-function nfsAddExport()
-{
- if [ $# -lt 2 ]; then
- errorAndLog "${FUNCNAME}(): invalid number of parameters"
- exit 1
- fi
-
- if [ ! -f /etc/exports ]; then
- errorAndLog "${FUNCNAME}(): /etc/exports don't exists"
- return 1
- fi
-
- local export="${1}"
- local contador=0
- local cadenaexport
-
- grep "^${export}" /etc/exports > /dev/null
- if [ $? -eq 0 ]; then
- echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting"
- return 0
- fi
-
- cadenaexport="${export}"
- for parametro in $*
- do
- if [ $contador -gt 0 ]
- then
- host=`echo $parametro | awk -F: '{print $1}'`
- options=`echo $parametro | awk -F: '{print $2}'`
- if [ "${host}" == "" ]; then
- errorAndLog "${FUNCNAME}(): host can't be empty"
- return 1
- fi
- cadenaexport="${cadenaexport}\t${host}"
-
- if [ "${options}" != "" ]; then
- cadenaexport="${cadenaexport}(${options})"
- fi
- fi
- let contador=contador+1
- done
-
- echo -en "$cadenaexport\n" >> /etc/exports
-
- echoAndLog "${FUNCNAME}(): add $export to /etc/exports"
-
- return 0
-}
-
-########################################################################
-## Configuracion servicio DHCP
-########################################################################
-
-function dhcpConfigure()
-{
- echoAndLog "${FUNCNAME}(): Sample DHCP Configuration."
-
- backupFile /etc/dhcp3/dhcpd.conf
-
- sed -e "s/SERVERIP/$SERVERIP/g" \
- -e "s/NETIP/$NETIP/g" \
- -e "s/NETMASK/$NETMASK/g" \
- -e "s/NETBROAD/$NETBROAD/g" \
- -e "s/ROUTERIP/$ROUTERIP/g" \
- -e "s/DNSIP/$DNSIP/g" \
- $WORKDIR/opengnsys/server/DHCP/dhcpd.conf > /etc/dhcp3/dhcpd.conf
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while configuring dhcp server"
- return 1
- fi
-
- /etc/init.d/dhcp3-server restart
- echoAndLog "${FUNCNAME}(): Sample DHCP Configured in file \"/etc/dhcp3/dhcpd.conf\"."
- return 0
-}
-
-
-#####################################################################
-####### Funciones específicas de la instalación de Opengnsys
-#####################################################################
-
-# Copiar ficheros del OpenGnSys Web Console.
-function installWebFiles()
-{
- echoAndLog "${FUNCNAME}(): Installing web files..."
- cp -ar $WORKDIR/opengnsys/admin/WebConsole/* $INSTALL_TARGET/www #*/ comentario para doxigen
- if [ $? != 0 ]; then
- errorAndLog "${FUNCNAME}(): Error copying web files."
- exit 1
- fi
- find $INSTALL_TARGET/www -name .svn -type d -exec rm -fr {} \; 2>/dev/null
- # Cambiar permisos para ficheros especiales.
- chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP \
- $INSTALL_TARGET/www/includes \
- $INSTALL_TARGET/www/comandos/gestores/filescripts \
- $INSTALL_TARGET/www/images/iconos
- echoAndLog "${FUNCNAME}(): Web files installed successfully."
-}
-
-# Configuración específica de Apache.
-function openGnsysInstallWebConsoleApacheConf()
-{
- if [ $# -ne 2 ]; then
- errorAndLog "${FUNCNAME}(): invalid number of parameters"
- exit 1
- fi
-
- local path_opengnsys_base=$1
- local path_apache2_confd=$2
- local path_web_console=${path_opengnsys_base}/www
-
- if [ ! -d $path_apache2_confd ]; then
- errorAndLog "${FUNCNAME}(): path to apache2 conf.d can not found, verify your server installation"
- return 1
- fi
-
- mkdir -p $path_apache2_confd/{sites-available,sites-enabled}
-
- echoAndLog "${FUNCNAME}(): creating apache2 config file.."
-
-
- # genera configuración
- cat > $path_opengnsys_base/etc/apache.conf <<EOF
-# OpenGnSys Web Console configuration for Apache
-
-Alias /opengnsys ${path_web_console}
-
-<Directory ${path_web_console}>
- Options -Indexes FollowSymLinks
- DirectoryIndex acceso.php
-</Directory>
-EOF
-
- ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf
- ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation"
- return 1
- else
- echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon"
- /etc/init.d/apache2 restart
- return 0
- fi
-}
-
-# Crear documentación Doxygen para la consola web.
-function makeDoxygenFiles()
-{
- echoAndLog "${FUNCNAME}(): Making Doxygen web files..."
- $WORKDIR/opengnsys/installer/ogGenerateDoc.sh \
- $WORKDIR/opengnsys/client/engine $INSTALL_TARGET/www
- if [ ! -d "$INSTALL_TARGET/www/html" ]; then
- errorAndLog "${FUNCNAME}(): unable to create Doxygen web files."
- return 1
- fi
- mv "$INSTALL_TARGET/www/html" "$INSTALL_TARGET/www/api"
- chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/api
- echoAndLog "${FUNCNAME}(): Doxygen web files created successfully."
-}
-
-
-# Crea la estructura base de la instalación de opengnsys
-function openGnsysInstallCreateDirs()
-{
- if [ $# -ne 1 ]; then
- errorAndLog "${FUNCNAME}(): invalid number of parameters"
- exit 1
- fi
-
- local path_opengnsys_base=$1
-
- echoAndLog "${FUNCNAME}(): creating directory paths in $path_opengnsys_base"
-
- mkdir -p $path_opengnsys_base
- mkdir -p $path_opengnsys_base/admin/{autoexec,comandos,menus,usuarios}
- mkdir -p $path_opengnsys_base/bin
- mkdir -p $path_opengnsys_base/client
- mkdir -p $path_opengnsys_base/doc
- mkdir -p $path_opengnsys_base/etc
- mkdir -p $path_opengnsys_base/lib
- mkdir -p $path_opengnsys_base/log/clients
- mkdir -p $path_opengnsys_base/sbin
- mkdir -p $path_opengnsys_base/www
- mkdir -p $path_opengnsys_base/images
- ln -fs /var/lib/tftpboot $path_opengnsys_base
- ln -fs $path_opengnsys_base/log /var/log/opengnsys
-
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while creating dirs. Do you have write permissions?"
- return 1
- fi
-
- echoAndLog "${FUNCNAME}(): directory paths created"
- return 0
-}
-
-# Copia ficheros de configuración y ejecutables genéricos del servidor.
-function openGnsysCopyServerFiles () {
- if [ $# -ne 1 ]; then
- errorAndLog "${FUNCNAME}(): invalid number of parameters"
- exit 1
- fi
-
- local path_opengnsys_base=$1
-
- local SOURCES=( client/boot/initrd-generator \
- client/boot/upgrade-clients-udeb.sh \
- client/boot/udeblist.conf \
- client/boot/udeblist-jaunty.conf \
- client/boot/udeblist-karmic.conf \
- client/boot/udeblist-lucid.conf \
- server/PXE/pxelinux.cfg/default \
- doc )
- local TARGETS=( bin/initrd-generator \
- bin/upgrade-clients-udeb.sh \
- etc/udeblist.conf \
- etc/udeblist-jaunty.conf \
- etc/udeblist-karmic.conf \
- etc/udeblist-lucid.conf \
- tftpboot/pxelinux.cfg/default \
- doc )
-
- if [ ${#SOURCES[@]} != ${#TARGETS[@]} ]; then
- errorAndLog "${FUNCNAME}(): inconsistent number of array items"
- exit 1
- fi
-
- echoAndLog "${FUNCNAME}(): copying files to server directories"
-
- pushd $WORKDIR/opengnsys
- local i
- for (( i = 0; i < ${#SOURCES[@]}; i++ )); do
- if [ -f "${SOURCES[$i]}" ]; then
- echoAndLog "Copying ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
- cp -p "${SOURCES[$i]}" "${path_opengnsys_base}/${TARGETS[$i]}"
- elif [ -d "${SOURCES[$i]}" ]; then
- echoAndLog "Copying content of ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
- cp -a "${SOURCES[$i]}"/* "${path_opengnsys_base}/${TARGETS[$i]}"
- else
- echoAndLog "Warning: Unable to copy ${SOURCES[$i]} to $path_opengnsys_base/${TARGETS[$i]}"
- fi
- done
- popd
-}
-
-####################################################################
-### Funciones de compilación de códifo fuente de servicios
-####################################################################
-
-# Compilar los servicios de OpenGNsys
-function servicesCompilation ()
-{
- local hayErrores=0
-
- # Compilar OpenGnSys Server
- echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server"
- pushd $WORKDIR/opengnsys/admin/Services/ogAdmServer
- make && make install
- if [ $? -ne 0 ]; then
- echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server"
- hayErrores=1
- fi
- popd
- # Compilar OpenGnSys Repository Manager
- echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager"
- pushd $WORKDIR/opengnsys/admin/Services/ogAdmRepo
- make && make install
- if [ $? -ne 0 ]; then
- echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager"
- hayErrores=1
- fi
- popd
- # Compilar OpenGnSys Client
- echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Client"
- pushd $WORKDIR/opengnsys/admin/Services/ogAdmClient
- make && mv ogAdmClient ../../../client/nfsexport/bin
- if [ $? -ne 0 ]; then
- echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Client"
- hayErrores=1
- fi
- popd
-
- return $hayErrores
-}
-
-
-####################################################################
-### Funciones instalacion cliente opengnsys
-####################################################################
-
-function openGnsysClientCreate()
-{
- local OSDISTRIB OSCODENAME
-
- local hayErrores=0
-
- echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files."
- cp -ar $WORKDIR/opengnsys/client/nfsexport/* $INSTALL_TARGET/client
- find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null
- echoAndLog "${FUNCNAME}(): Copying OpenGnSys Cloning Engine files."
- mkdir -p $INSTALL_TARGET/client/lib/engine/bin
- cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while copying engine files"
- hayErrores=1
- fi
-
- # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto).
- OSDISTRIB=$(lsb_release -i | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
- OSCODENAME=$(lsb_release -c | awk -F: '{sub(/\t/,""); print $2}') 2>/dev/null
- if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then
- echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME."
- $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v "$OSCODENAME"
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client"
- hayErrores=1
- fi
- echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME."
- $INSTALL_TARGET/bin/upgrade-clients-udeb.sh "$OSCODENAME"
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client"
- hayErrores=1
- fi
- else
- echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files."
- $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot/
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client"
- hayErrores=1
- fi
- echoAndLog "${FUNCNAME}(): Loading default udeb files."
- $INSTALL_TARGET/bin/upgrade-clients-udeb.sh
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client"
- hayErrores=1
- fi
- fi
-
- if [ $hayErrores -eq 0 ]; then
- echoAndLog "${FUNCNAME}(): Client generation success."
- else
- errorAndLog "${FUNCNAME}(): Client generation with errors"
- fi
-
- return $hayErrores
-}
-
-
-# Configuración básica de servicios de OpenGnSys
-function openGnsysConfigure()
-{
- echoAndLog "openGnsysConfigure(): Copying init files."
- cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.init /etc/init.d/opengnsys
- cp -p $WORKDIR/opengnsys/admin/Services/opengnsys.default /etc/default/opengnsys
- update-rc.d opengnsys defaults
- echoAndLog "openGnsysConfigure(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"."
- perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmServer.cfg
- perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg
- echoAndLog "${FUNCNAME}(): Creating Web Console config file"
- OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys"
- perl -pi -e "s/SERVERIP/$SERVERIP/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php
- sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Services/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg
- echoAndLog "openGnsysConfiguration(): Starting OpenGnSys services."
- /etc/init.d/opengnsys start
-}
-
-
-#####################################################################
-####### Función de resumen informativo de la instalación
-#####################################################################
-
-function installationSummary(){
- echo
- echoAndLog "OpenGnSys Installation Summary"
- echo "=============================="
- echoAndLog "Project version: $(cat $INSTALL_TARGET/doc/VERSION.txt 2>/dev/null)"
- echoAndLog "Installation directory: $INSTALL_TARGET"
- echoAndLog "Repository directory: $INSTALL_TARGET/images"
- echoAndLog "TFTP configuracion directory: /var/lib/tftpboot"
- echoAndLog "DHCP configuracion file: /etc/dhcp3/dhcpd.conf"
- echoAndLog "NFS configuracion file: /etc/exports"
- 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 default user: $OPENGNSYS_DB_DEFAULTUSER"
- echoAndLog "Web Console default password: $OPENGNSYS_DB_DEFAULTPASSWD"
- echo
- echoAndLog "Post-Installation Instructions:"
- echo "==============================="
- echoAndLog "Review or edit all configuration files."
- echoAndLog "Insert DHCP configuration data and restart service."
- echoAndLog "Log-in as Web Console admin user."
- echoAndLog " - Review default Organization data and default user."
- echoAndLog "Log-in as Web Console organization user."
- echoAndLog " - Insert OpenGnSys data (rooms, computers, etc)."
-echo
-}
-
diff --git a/client/engine/Boot.lib b/client/engine/Boot.lib
index 8731580f..e21935ca 100755
--- a/client/engine/Boot.lib
+++ b/client/engine/Boot.lib
@@ -20,10 +20,10 @@
#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
#@exception OG_ERR_NOTOS La partición no tiene instalado un sistema operativo.
#@note En Linux, debe arrancarse la partición del directorio \c /boot
-#@version 0.1 - Integracion para OpenGNSys. - EAC: HDboot(); BootLinuxEX() en Boot.lib
+#@version 0.1 - Integración para OpenGnSys. - EAC: HDboot; BootLinuxEX en Boot.lib
#@author Antonio J. Doblas Viso, Universidad de Malaga
#@date 2008-10-27
-#@version 0.9 - Adaptacion para OpenGNSys.
+#@version 0.9 - Adaptación para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-11
#*/ ##
@@ -68,21 +68,19 @@ case "$TYPE" in
[ -z "$LOADER" ] && ogRaiseError $OG_ERR_NOTOS && return $?
# Activar la partición y copiar Grub4DOS.
ogSetPartitionActive $1 $2
- #FIXME: activar seguimiento inicio sesion XP con grub4dos
- #if `ogGetOsVersion $1 $2 | grep "XP" > /dev/null`
- #then
- # dd if=/dev/zero of=${MNTDIR}/ogboot.me bs=1024 count=3
- # dd if=/dev/zero of=${MNTDIR}/ogboot.firstboot bs=1024 count=3
- # dd if=/dev/zero of=${MNTDIR}/ogboot.secondboot bs=1024 count=3
- # ogLoadHiveWindows $1 $2
- # ogHiveNTRunMachine "cmd /c del c:\ogboot.* " ogcleanboot
- # ogUpdateHiveWindows
- # reboot
- #else
- cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen)
- ##kexec -l $MNTDIR/grub.exe --append=--config-file="find --set-root /$LOADER; chainloader /$LOADER; tpm --init"
- kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init"
- #fi
+ #FIXME: activar seguimiento inicio sesion Windows con grub4dos
+ if [ "$(ogGetOsType $1 $2)" == "Windows" ]; then
+ dd if=/dev/zero of=${MNTDIR}/ogboot.me bs=1024 count=3
+ dd if=/dev/zero of=${MNTDIR}/ogboot.firstboot bs=1024 count=3
+ dd if=/dev/zero of=${MNTDIR}/ogboot.secondboot bs=1024 count=3
+ ogLoadHiveWindows $1 $2
+ ogHiveNTRunMachine "cmd /c del c:\ogboot.*" ogcleanboot
+ ogUpdateHiveWindows
+ reboot
+ else
+ cp $OGLIB/grub4dos/* $MNTDIR # */ (Comentario Doxygen)
+ kexec -l $MNTDIR/grub.exe --append=--config-file="root (hd$[$1-1],$[$2-1]); chainloader (hd$[$1-1],$[$2-1])/$LOADER; tpm --init"
+ fi
;;
*) ogRaiseError $OG_ERR_PARTITION "$1, $2"
return $?
@@ -103,7 +101,7 @@ kexec -e
#@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 0.9 - Adaptación para OpenGNSys.
+#@version 0.9 - Adaptación para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-23
#*/ ##
@@ -140,7 +138,7 @@ ogGetRegistryValue $MNTDIR system '\ControlSet001\Control\ComputerName\ComputerN
#@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 Función básica usada por \c ogBoot
-#@version 0.9 - Primera adaptación para OpenGNSys.
+#@version 0.9 - Primera adaptación para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-11
#@version 0.9.2 - Soporta partición /boot independiente.
@@ -202,7 +200,7 @@ awk 'BEGIN {cont=-1;}
#@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 0.9 - Adaptación a OpenGNSys.
+#@version 0.9 - Adaptación a OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-09-24
#*/ ##
@@ -244,7 +242,7 @@ ogSetRegistryValue $MNTDIR system '\ControlSet001\services\Tcpip\Parameters\NV H
#@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 0.9.2 - Adaptación a OpenGNSys.
+#@version 0.9.2 - Adaptación a OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-07-20
#*/ ##
@@ -279,7 +277,7 @@ ogSetRegistryValue $MNTDIR SOFTWARE '\Microsoft\Windows NT\CurrentVersion\Winlog
#@return salida del programa my-sys
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
-#@version 0.9 - Adaptación a OpenGNSys.
+#@version 0.9 - Adaptación a OpenGnSys.
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date 2009-09-24
#*/ ##
@@ -311,7 +309,7 @@ ms-sys -m -f $PART
#@return salida del programa my-sys
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Tipo de partición desconocido o no se puede montar.
-#@version 0.9 - Adaptación a OpenGNSys.
+#@version 0.9 - Adaptación a OpenGnSys.
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date 2009-09-24
#*/ ##
@@ -346,7 +344,7 @@ ms-sys -s -f $PART
#@return
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
-#@version 0.9 - Adaptación a OpenGNSys.
+#@version 0.9 - Adaptación a OpenGnSys.
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date 2009-09-24
#*/ ##
@@ -354,7 +352,7 @@ ms-sys -s -f $PART
function ogFixBootSector ()
{
# Variables locales.
-local PART DISK FILE
+local PARTYPE DISK PART FILE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -369,7 +367,7 @@ fi
#TODO, solo si la particion existe
#TODO, solo si es ntfs o fat
PARTYPE=$(ogGetPartitionId $1 $2)
-case $PARTYPE in
+case "$PARTYPE" in
1|4|6|7|b|c|e|f)
;;
*)
@@ -382,15 +380,17 @@ ogUnmount $1 $2 || return $(ogRaiseError $OG_ERR_PARTITION; echo $?)
#Preparando instruccion
let DISK=$1-1
PART=$2
-FILE=/tmp/temporal
+FILE=/tmp/temp$$
cat > $FILE <<EOF
disk=$DISK
main_part=$PART
fix_first_sector=yes
EOF
-spartlnx.run -cui -nm -a -f $FILE
-
+spartlnx.run -cui -nm -a -f $FILE &
+sleep 5
+ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
+rm -f $FILE
}
@@ -403,7 +403,7 @@ spartlnx.run -cui -nm -a -f $FILE
#@return
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
-#@version 0.9 - Integración desde EAC para OpenGNSys.
+#@version 0.9 - Integración desde EAC para OpenGnSys.
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date 2009-09-24
#@version 1.0.1 - Adapatacion para OpenGnsys.
@@ -415,11 +415,11 @@ spartlnx.run -cui -nm -a -f $FILE
function ogWindowsBootParameters ()
{
# Variables locales.
-local PART DISK FILE
+local PART DISK FILE VERSION WINVER MOUNT
#Preparando variables adaptadas a sintaxis windows.
let DISK=$1-1
PART=$2
-FILE=/tmp/temporal
+FILE=/tmp/temp$$
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -462,7 +462,11 @@ disk=$DISK
main_part=$PART
boot_entry=Windows Resume Application
EOF
-spartlnx.run -cui -nm -w -f $FILE
+spartlnx.run -cui -nm -w -f $FILE &
+sleep 5
+ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
+
+
#Preparando instruccion tipo windows
cat > $FILE <<EOF
@@ -472,17 +476,23 @@ disk=$DISK
main_part=$PART
boot_entry=$WINVER
EOF
-spartlnx.run -cui -nm -w -f $FILE
+spartlnx.run -cui -nm -w -f $FILE &
+sleep 5
+ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
+
##Preparando instruccion Ramdisk Options
-#cat > $FILE <<EOF
-#boot_disk=$DISK
-#boot_main_part=$PART
-#disk=$DISK
-#main_part=$PART
-#boot_entry=Ramdisk Options
-#EOF
-#spartlnx.run -cui -nm -w -f $FILE
+cat > $FILE <<EOF
+boot_disk=$DISK
+boot_main_part=$PART
+disk=$DISK
+main_part=$PART
+boot_entry=Ramdisk Options
+EOF
+spartlnx.run -cui -nm -w -f $FILE &
+sleep 5
+ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
+
#Preparando instruccion Windows Boot Manager
cat > $FILE <<EOF
@@ -492,20 +502,25 @@ disk=$DISK
main_part=$PART
boot_entry=Windows Boot Manager
EOF
-spartlnx.run -cui -nm -w -f $FILE
+spartlnx.run -cui -nm -w -f $FILE &
+sleep 5
+ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
+
#Preparando instruccion Herramienta de diagnóstico de memoria de Windows
-#cat > $FILE <<EOF
-#boot_disk=$DISK
-#boot_main_part=$PART
-#disk=$DISK
-#main_part=$PART
-#boot_entry=Herramienta de diagnóstico de memoria de Windows
-#EOF
-#spartlnx.run -cui -nm -w -f $FILE
+cat > $FILE <<EOF
+boot_disk=$DISK
+boot_main_part=$PART
+disk=$DISK
+main_part=$PART
+boot_entry=Herramienta de diagnóstico de memoria de Windows
+EOF
+spartlnx.run -cui -nm -w -f $FILE &
+sleep 5
+ps aux > /dev/null | grep $! | grep -E "T|S" | kill -9 $! > /dev/null
}
-
+
# ogWindowsRegisterPartition int_ndisk int_partiton str_volume int_disk int_partition
#@brief Registra una partición en windows con un determinado volumen.
@@ -517,16 +532,14 @@ spartlnx.run -cui -nm -w -f $FILE
#@return
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
-#@version 0.9 - Adaptación a OpenGNSys.
+#@version 0.9 - Adaptación a OpenGnSys.
#@author Antonio J. Doblas Viso. Universidad de Málaga
#@date 2009-09-24
#*/ ##
-
-
function ogWindowsRegisterPartition ()
-{
+{
# Variables locales.
-local PART DISK FILE
+local PART DISK FILE REGISTREDDISK REGISTREDPART REGISTREDVOL VERSION SYSTEMROOT
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -543,7 +556,7 @@ REGISTREDPART=$2
REGISTREDVOL=$(echo $3 | cut -c1 | tr '[:lower:]' '[:upper:]')
DISK=$4
PART=$5
-FILE=/tmp/temporal
+FILE=/tmp/temp$$
ogDiskToDev $REGISTREDDISK $REGISTREDPART || return $(ogRaiseError $OG_ERR_PARTITION "particion a registrar "; echo $?)
ogDiskToDev $DISK $PART || return $(ogRaiseError $OG_ERR_PARTITION "particion de windows"; echo $?)
@@ -577,5 +590,78 @@ main_part=$REGISTREDPART
;ext_part
part_letter=$REGISTREDVOL
EOF
-spartlnx.run -cui -nm -u -f $FILE
+spartlnx.run -cui -nm -u -f $FILE &
+sleep 5
+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
+#@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
+#*/ ##
+
+function ogGrubInstallPartition {
+
+# Variables locales.
+local PART DISK DIRCONF SCHROOTDEVICE
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_partition" \
+ "$FUNCNAME 1 1 "
+ return
+fi
+
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+
+DISK=$1; PART=$2; DIRCONF="/etc/schroot"
+
+
+VERSION=$(ogGetOsVersion $DISK $PART)
+echo $VERSION | grep "Linux" || return $(ogRaiseError $OG_ERR_NOTOS "no es linux"; echo $?)
+
+SCHROOTLOCATION=$(ogMount $DISK $PART)
+SCHROOTDEVICE=$(ogDiskToDev $DISK $PART)
+
+rm ${DIRCONF}/schroot.conf
+
+cat >> ${DIRCONF}/schroot.conf << EOF
+[linux]
+description=$VERSION
+type=plain
+directory=$SCHROOTLOCATION
+EOF
+
+cat >> $SCHROOTLOCATION/root/installgrub.sh <<EOF
+#!/bin/bash
+grub-install --recheck --force $SCHROOTDEVICE
+update-grub2
+EOF
+
+chmod 777 $SCHROOTLOCATION/root/installgrub.sh
+
+mount --bind /dev $SCHROOTLOCATION/dev
+mount --bind /dev/pts $SCHROOTLOCATION/dev/pts
+mount --bind /proc $SCHROOTLOCATION/proc
+mount --bind /sys $SCHROOTLOCATION/sys
+
+
+schroot -c linux -- /root/installgrub.sh
+
+rm $SCHROOTLOCATION/root/installgrub.sh
+
+umount $SCHROOTLOCATION/dev/pts
+umount $SCHROOTLOCATION/dev
+umount $SCHROOTLOCATION/proc
+umount $SCHROOTLOCATION/sys
+}
+
diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib
index f15f1e08..6b642b38 100755
--- a/client/engine/Disk.lib
+++ b/client/engine/Disk.lib
@@ -319,7 +319,7 @@ local DISK
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \ "$FUNCNAME 1 => 244198584"
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" "$FUNCNAME 1 => 244198584"
return
fi
# Error si no se recibe 1 parámetro.
@@ -467,6 +467,59 @@ esac
#/**
+# ogGetPartitionType int_ndisk int_npartition
+#@brief Muestra el tipo de una particion determinada.
+#@see ogGetFsType
+#*/ ##
+function ogGetPartitionType ()
+{
+ogGetFsType "$@"
+}
+
+
+#/**
+# ogHidePartition int_ndisk int_npartition
+#@brief Oculta un apartición visible.
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@return (nada)
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@exception OG_ERR_NOTFOUND disco o particion no detectado (no es un dispositivo).
+#@exception OG_ERR_PARTITION tipo de partición no reconocido.
+#@version 1.0 - Versión en pruebas.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2010/01/12
+#*/ ##
+function ogHidePartition ()
+{
+# Variables locales.
+local PART TYPE NEWTYPE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ "$FUNCNAME 1 1"
+ return
+fi
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+PART=$(ogDiskToDev "$1" "$2") || return $?
+
+# Obtener tipo de partición.
+TYPE=$(ogGetPartitionType "$1" "$2")
+case "$TYPE" in
+ NTFS) NEWTYPE="HNTFS" ;;
+ FAT32) NEWTYPE="HFAT32" ;;
+ FAT16) NEWTYPE="HFAT16" ;;
+ FAT12) NEWTYPE="HFAT12" ;;
+ *) ogRaiseError $OG_ERR_PARTITION "$TYPE"
+ return $? ;;
+esac
+# Cambiar tipo de partición.
+ogSetPartitionId $1 $2 $NEWTYPE
+}
+
+
+#/**
# ogListPartitions int_ndisk
#@brief Lista las particiones definidas en un disco.
#@param int_ndisk nº de orden del disco
@@ -613,11 +666,52 @@ DISK="$(ogDiskToDev $1)" || return $?
PART="$(ogDiskToDev $1 $2)" || return $?
# Convertir tamaño en KB a sectores de 512 B.
SIZE=$[$3*2] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Usar \c sfdisk para redefinir el tamaño.
+# Redefinir el tamaño de la partición.
sfdisk -f -uS -N$2 $DISK <<< ",$SIZE" &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
partprobe 2>/dev/null
}
+#/**
+# ogUnhidePartition int_ndisk int_npartition
+#@brief Hace visible una partición oculta.
+#@param int_ndisk nº de orden del disco
+#@param int_npartition nº de orden de la partición
+#@return (nada)
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@exception OG_ERR_NOTFOUND disco o particion no detectado (no es un dispositivo).
+#@exception OG_ERR_PARTITION tipo de partición no reconocido.
+#@version 1.0 - Versión en pruebas.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2010/01/12
+#*/ ##
+function ogUnhidePartition ()
+{
+# Variables locales.
+local PART TYPE NEWTYPE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ "$FUNCNAME 1 1"
+ return
+fi
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
+PART=$(ogDiskToDev "$1" "$2") || return $?
+
+# Obtener tipo de partición.
+TYPE=$(ogGetPartitionType "$1" "$2")
+case "$TYPE" in
+ HNTFS) NEWTYPE="NTFS" ;;
+ HFAT32) NEWTYPE="FAT32" ;;
+ HFAT16) NEWTYPE="FAT16" ;;
+ HFAT12) NEWTYPE="FAT12" ;;
+ *) ogRaiseError $OG_ERR_PARTITION "$TYPE"
+ return $? ;;
+esac
+# Cambiar tipo de partición.
+ogSetPartitionId $1 $2 $NEWTYPE
+}
+
#/**
# ogUpdatePartitionTable
@@ -629,10 +723,10 @@ partprobe 2>/dev/null
#@version 0.1 - Integracion para Opengnsys - EAC: UpdatePartitionTable() en ATA.lib
#@author Antonio J. Doblas Viso. Universidad de Malaga
#@date 27/10/2008
-#*/
-
+#*/ ##
function ogUpdatePartitionTable ()
{
+local i
for i in `ogDiskToDev`
do
partprobe $i
@@ -641,10 +735,12 @@ done
-#/** @function ogGetPartitionsNumber: @brief detecta el numero de particiones del disco duro indicado.
-#@param int_numdisk (indentificado EAC del disco)
-#@return devuelve el numero paritiones del disco duro indicado
-#@warning Salidas de errores no determinada
+#/**
+# ogGetPartitionsNumber int_ndisk
+#@brief Detecta el numero de particiones del disco duro indicado.
+#@param int_ndisk nº de orden del disco
+#@return Devuelve el numero paritiones del disco duro indicado
+#@warning Salidas de errores no determinada
#@attention Requisitos: parted
#@note Notas sin especificar
#@version 0.1 - Integracion para Opengnsys - EAC: DetectNumberPartition () en ATA.lib
@@ -653,14 +749,15 @@ done
#@version 1.0 - Uso de sfdisk Primera version para OpenGnSys
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009/07/24
-#*/
-function ogGetPartitionsNumber () {
+#*/ ##
+function ogGetPartitionsNumber ()
+{
#local disco totalpart
#disco=`ogDiskToDev $1`
#totalpart=`parted $disco print | egrep ^" [0123456789] " -c`
#echo $totalpart
local DISK
-#/// Contar el nº de veces que aparece el disco en su lista de particiones.
+# Contar el nº de veces que aparece el disco en su lista de particiones.
DISK=$(ogDiskToDev $1) 2>/dev/null
sfdisk -l $DISK 2>/dev/null | grep -c "^$DISK"
}
diff --git a/client/engine/File.lib b/client/engine/File.lib
index 52b48075..b04d2278 100755
--- a/client/engine/File.lib
+++ b/client/engine/File.lib
@@ -27,7 +27,7 @@ function ogCalculateChecksum ()
local FILE
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME [ str_repo | int_ndisk int_npartition ] path_filepath" \
- "$FUNCNAME REPO ubuntu.img ==> ef899299caf8b517ce36f1157a93d8bf"
+ "$FUNCNAME REPO ubuntu.img ==> ef899299caf8b517ce36f1157a93d8bf"
return
fi
@@ -53,7 +53,7 @@ function ogCompareChecksumFiles ()
local ARGS SOURCE TARGET
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME [ str_repo | int_ndisk int_npartition ] path_filepath" \
- "if $FUNCNAME REPO ubuntu.img CACHE ubuntu.img; then ... fi"
+ "if $FUNCNAME REPO ubuntu.img CACHE ubuntu.img; then ...; fi"
return
fi
@@ -89,25 +89,30 @@ function ogCopyFile ()
{
# Variables locales.
local ARGS SOURCE TARGET
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME [ str_repo | int_ndisk int_npartition ] path_source [ str_repo | int_ndisk int_npartition ] path_target" \
+ "$FUNCNAME REPO newfile.txt 1 2 /tmp/newfile.txt"
+ return
+fi
ARGS="$@"
case "$1" in
/*) # Camino completo. */ (Comentrio Doxygen)
- SOURCE=$(ogGetPath "$1")
+ SOURCE="$(ogGetPath "$1")"
shift ;;
[1-9]*) # ndisco npartición.
- SOURCE=$(ogGetPath "$1" "$2" "$3")
+ SOURCE="$(ogGetPath "$1" "$2" "$3")"
shift 3 ;;
*) # Otros: repo, cache, cdrom (no se permiten caminos relativos).
- SOURCE=$(ogGetPath "$1" "$2")
+ SOURCE="$(ogGetPath "$1" "$2")"
shift 2 ;;
esac
# Comprobar fichero origen y directorio destino.
[ -n "$SOURCE" ] || ogRaiseError $OG_ERR_NOTFOUND "${ARGS% $*}" || return $?
-TARGET=$(ogGetPath "$@")
+TARGET="$(ogGetPath "$@")"
[ -n "$TARGET" ] || ogRaiseError $OG_ERR_NOTFOUND "$@" || return $?
# Copiar fichero.
-cp -p "$SOURCE" "$TARGET" # (definir posible error)
+cp -a "$SOURCE" "$TARGET" # (definir posible error)
}
@@ -123,8 +128,14 @@ function ogDeleteFile ()
{
# Variables locales.
local FILE
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME [ str_repo | int_ndisk int_npartition ] path_file" \
+ "$FUNCNAME 1 2 /tmp/newfile.txt"
+ return
+fi
+
# Comprobar que existe el fichero y borrarlo.
-FILE=$(ogGetPath "$@")
+FILE="$(ogGetPath "$@")"
[ -n "$FILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$*" || return $?
rm -f "$FILE" || ogRaiseError $OG_ERR_NOTFOUND "$*" || return $?
}
@@ -142,8 +153,14 @@ function ogDeleteTree ()
{
# Variables locales.
local DIR
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME [ str_repo | int_ndisk int_npartition ] path_dir" \
+ "$FUNCNAME 1 2 /tmp/newdir"
+ return
+fi
+
# Comprobar que existe el directorio y borrarlo con su contenido.
-DIR=$(ogGetPath "$@")
+DIR="$(ogGetPath "$@")"
[ -n "$DIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$*" || return $?
rm -fr "$DIR" || ogRaiseError $OG_ERR_NOTFOUND "$*" || return $?
}
@@ -245,7 +262,7 @@ if [ "$*" == "help" ]; then
fi
case $# in
- 1) PARENT=$(dirname "$1") ;;
+ 1) PARENT="$(dirname "$1")" ;;
2) PARENT="$1 $(dirname "/$2")" ;;
3) PARENT="$1 $2 $(dirname "/$3")" ;;
*) ogRaiseError $OG_ERR_FORMAT
@@ -282,13 +299,13 @@ fi
ARGS="$@"
case "$1" in
/*) # Camino completo. */ (Comentrio Doxygen)
- SOURCE=$(ogGetPath "$1")
+ SOURCE="$(ogGetPath "$1")"
shift ;;
[1-9]*) # ndisco npartición.
- SOURCE=$(ogGetPath "$1" "$2" "$3")
+ SOURCE="$(ogGetPath "$1" "$2" "$3")"
shift 3 ;;
*) # Otros: repo, cache, cdrom (no se permiten caminos relativos).
- SOURCE=$(ogGetPath "$1" "$2")
+ SOURCE="$(ogGetPath "$1" "$2")"
shift 2 ;;
esac
# Comprobar que existen los ficheros origen y destino.
@@ -312,7 +329,7 @@ test "$SOURCE" -nt "$TARGET"
function ogMakeChecksumFile ()
{
# Variables locales.
-local FILE DATA
+local FILE
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME [ str_repo | int_ndisk int_npartition ] path_filepath" \
"$FUNCNAME REPO ubuntu.img"
@@ -320,7 +337,7 @@ if [ "$*" == "help" ]; then
fi
# Comprobar que existe el fichero y guardar su checksum.
-FILE=$(ogGetPath "$@")
+FILE="$(ogGetPath "$@")"
[ -n "$FILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$*" || return $?
ogCalculateChecksum "$FILE" > "$FILE.sum"
}
@@ -342,7 +359,13 @@ ogCalculateChecksum "$FILE" > "$FILE.sum"
function ogMakeDir ()
{
local PARENT DIR
-PARENT=$(ogGetParentPath "$@") || return $?
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME [ str_repo | int_ndisk int_npartition ] path_dir" \
+ "$FUNCNAME 1 2 /tmp/newdir"
+ return
+fi
+
+PARENT="$(ogGetParentPath "$@")" || return $?
DIR="$(basename "${!#}")"
mkdir -p "$PARENT/$DIR" || ogRaiseError $OG_ERR_NOTFOUND "$*" || return $?
}
diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib
index ca4486b0..5c69e089 100755
--- a/client/engine/FileSystem.lib
+++ b/client/engine/FileSystem.lib
@@ -21,34 +21,44 @@
#@note Requisitos: *fsck*
#@warning No se comprueban sistemas de archivos montados o bloqueados.
#@todo Definir salidas.
-#@version 0.9 - Primera adaptación para OpenGNSys.
+#@version 0.9 - Primera adaptación para OpenGnSys.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-10-07
+#@version 1.0.2 - Ignorar códigos de salida de comprobación (no erróneos).
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-09-23
#*/
function ogCheckFs ()
{
# Variables locales.
-local PART TYPE PROG PARAMS
+local PART TYPE PROG PARAMS CODES ERRCODE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ "$FUNCNAME 1 1"
+ return
+fi
-#/// Error si no se reciben 2 parámetros.
+# Error si no se reciben 2 parámetros.
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-#/// Obtener partición.
+# Obtener partición.
PART="$(ogDiskToDev $1 $2)" || return $?
TYPE=$(ogGetFsType $1 $2)
case "$TYPE" in
- EXT[234]) PROG="e2fsck" ;;
- REISERFS) PROG="reiserfsck"; PARAMS="<<<\"Yes\"" ;;
- JFS) PROG="fsck.jfs" ;;
+ EXT[234]) PROG="e2fsck"; PARAMS="-y"; CODES=(1 2) ;;
+ 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|HNTFS) PROG="ntfsfix" ;;
- FAT32|HFAT32) PROG="dosfsck"; PARAMS="-a" ;;
- FAT16|HFAT16) PROG="dosfsck"; PARAMS="-a" ;;
- FAT12|HFAT12) PROG="dosfsck"; PARAMS="-a" ;;
+ FAT32|HFAT32) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
+ FAT16|HFAT16) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
+ FAT12|HFAT12) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
*) ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE"
- return $? ;;
+ return $? ;;
esac
-#/// Error si el sistema de archivos esta montado o bloqueado.
+# Error si el sistema de archivos esta montado o bloqueado.
if ogIsMounted $1 $2; then
ogRaiseError $OG_ERR_PARTITION "$1 $2" # Indicar nuevo error
return $?
@@ -57,14 +67,17 @@ if ogIsLocked $1 $2; then
ogRaiseError $OG_ERR_LOCKED "$1 $2"
return $?
fi
-#/// Comprobar en modo uso exclusivo.
+# Comprobar en modo uso exclusivo.
ogLock $1 $2
eval $PROG $PARAMS $PART
ERRCODE=$?
case $ERRCODE in
- 0) ;;
- 127) ogRaiseError $OG_ERR_NOTEXEC "$PROG" ;;
- *) ogRaiseError $OG_ERR_PARTITION "$1 $2" ;;
+ 0|${CODES[*]})
+ ERRCODE=0 ;;
+ 127) ogRaiseError $OG_ERR_NOTEXEC "$PROG"
+ ERRCODE=$OG_ERR_NOTEXEC ;;
+ *) ogRaiseError $OG_ERR_PARTITION "$1 $2"
+ ERRCODE=$OG_ERR_PARTITION ;;
esac
ogUnlock $1 $2
return $ERRCODE
@@ -91,22 +104,22 @@ return $ERRCODE
function ogExtendFs ()
{
# Variables locales.
-local PART PROG PARAMS
+local PART TYPE PROG PARAMS ERRCODE
-#/// Si se solicita, mostrar ayuda.
+# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
"$FUNCNAME 1 1"
return
fi
-#/// Error si no se reciben 2 parámetros.
+# Error si no se reciben 2 parámetros.
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-#/// Obtener partición.
+# 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.
+# 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" ;;
@@ -115,7 +128,7 @@ case "$TYPE" in
*) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
return $? ;;
esac
-#/// Error si el sistema de archivos está montado o bloqueado.
+# 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 $?
@@ -124,14 +137,16 @@ if ogIsLocked $1 $2; then
ogRaiseError $OG_ERR_LOCKED "$1 $2"
return $?
fi
-#/// Redimensionar en modo uso exclusivo.
+# Redimensionar en modo uso exclusivo.
ogLock $1 $2
eval $PROG $PARAMS $PART &>/dev/null
ERRCODE=$?
case $ERRCODE in
0) ;;
- 127) ogRaiseError $OG_ERR_NOTEXEC "$PROG" ;;
- *) ogRaiseError $OG_ERR_PARTITION "$1 $2" ;;
+ 127) ogRaiseError $OG_ERR_NOTEXEC "$PROG"
+ ERRCODE=$OG_ERR_NOTEXEC ;;
+ *) ogRaiseError $OG_ERR_PARTITION "$1 $2"
+ ERRCODE=$OG_ERR_PARTITION ;;
esac
ogUnlock $1 $2
return $ERRCODE
@@ -217,7 +232,8 @@ if [ -z "$PROG" ]; then
REISERFS) PROG="mkfs.reiserfs"; PARAMS="-f" ;;
REISER4) PROG="mkfs.reiser4";;
XFS) PROG="mkfs.xfs"; PARAMS="-f" ;;
- JFS) PROG="mkfs.jfs"; PARAMS="<<<\"y\"";;
+ 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" ;;
@@ -278,11 +294,10 @@ return $ERRCODE
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2009-07-21
#*/ ##
-function ogGetFsType () {
-
+function ogGetFsType ()
+{
# Variables locales.
-local ID TYPE
-
+local DISK ID TYPE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
@@ -326,7 +341,7 @@ case "$ID" in
fd) TYPE="LINUX-RAID" ;;
*) TYPE="UNKNOWN" ;;
esac
-echo $TYPE
+echo "$TYPE"
}
@@ -591,13 +606,8 @@ if [ -z "$MNTDIR" ]; then
$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 $?
- # linea temporal durante desarrollo para poder usar el cliente completo nfs y testeas nuevas herramientas.
- if grep -q nfsroot /proc/cmdline; then
- echo "$PART $MNTDIR" >> /etc/mtab
- fi
- # fin linea temporal.
fi
-echo $MNTDIR
+echo "$MNTDIR"
}
@@ -688,8 +698,6 @@ case "$(ogGetFsType $1 $2)" in
*) ogRaiseError $OG_ERR_PARTITION "$1,$2"
return $? ;;
esac
-#/// Mostrar nuevo tamaño en KB.
-#echo $[SIZE*1024]
ogGetFsSize $1 $2
}
@@ -847,11 +855,6 @@ if [ -n "$MNTDIR" ]; then
# Desmontar y borrar punto de montaje.
umount $PART 2>/dev/null || ogEcho warning "$FUNCNAME: $MSG_DONTUNMOUNT: \"$1, $2\""
rmdir $MNTDIR 2>/dev/null || rm -f $MNTDIR 2>/dev/null
- # linea temporal durante desarrollo para testear nuevas herramientas con el cliente completo nfs
- if grep -q nfsroot /proc/cmdline; then
- grep -v $PART /etc/mtab > /var/tmp/mtab.temporal && cp /var/tmp/mtab.temporal /var/tmp/mtab && rm /var/tmp/mtab.temporal
- fi
- # fin linea temporal.
else
ogEcho warning "$MSG_DONTMOUNT: \"$1,$2\""
fi
diff --git a/client/engine/Image.lib b/client/engine/Image.lib
index a4b82b02..0a0867f2 100755
--- a/client/engine/Image.lib
+++ b/client/engine/Image.lib
@@ -14,7 +14,7 @@ function ogPartcloneSyntax ()
{
#TODO: comprobar como unico parametro particion /dev/sda1
#COMPAR="partclone.$FS --clone --force --source $PART"
-COMPAR="-F -c -s "
+COMPAR=" -d0 -F -c -s "
TYPE="$(ogGetFsType `ogDevToDisk $1`)"
case "$TYPE" in
EXT[234])
@@ -210,7 +210,7 @@ if [ "$#" -eq 4 ]; then
;;
"partclone" | "PARTCLONE")
# -C para que no compruebe tamaños
- TOOL="| partclone.restore -o $PART"
+ TOOL="| partclone.restore -d0 -C -I -o $PART"
;;
*)
ogRaiseError $OG_ERR_NOTFOUND "Tools imaging no valid $TOOL" || return $?
@@ -382,6 +382,7 @@ IMGFILE="$IMGDIR/$(basename "$3").mbr"
dd if="$DISK" of="$IMGFILE" bs=446 count=1 || ogRaiseError $OG_ERR_IMAGE "$1 $IMGFILE" || return $?
}
+
#/**
# ogIsImageLocked [str_repo] path_image
#@brief Comprueba si una imagen está bloqueada para uso exclusivo.
@@ -481,7 +482,7 @@ touch $IMGDIR/$(basename "${!#}").lock
function ogRestoreImage ()
{
# Variables locales
-local PART PARTSIZE IMGFILE IMGTYPE IMGSIZE FSTYPE
+local PART PARTSIZE IMGFILE IMGTYPE IMGSIZE FSTYPE PROGRAM ERRCODE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -662,7 +663,8 @@ rm -f $(ogGetPath $@.lock)
#@date 2010/02/08
#*/ ##
-function ogGetImageInfo () {
+function ogGetImageInfo ()
+{
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME filename " \
diff --git a/client/engine/Inventory.lib b/client/engine/Inventory.lib
index 47ffd83d..b610639e 100755
--- a/client/engine/Inventory.lib
+++ b/client/engine/Inventory.lib
@@ -17,8 +17,14 @@
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-07-17
#*/
-function ogGetArch () {
-[ -d /lib64 ] && echo x86_64 || echo i386
+function ogGetArch ()
+{
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => x86_64"
+ return
+fi
+
+[ -d /lib64 ] && echo "x86_64" || echo "i386"
}
@@ -41,10 +47,10 @@ function ogGetOsVersion ()
{
# Variables locales.
local MNTDIR TYPE DISTRIB VERSION FILE
-
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME" "$FUNCNAME"
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ "$FUNCNAME 1 2 => Linux:Ubuntu 11.04 64 bits"
return
fi
# Error si no se reciben 2 parametros.
@@ -72,7 +78,7 @@ case "$(ogGetFsType $1 $2)" in
fi
[ -e $MNTDIR/lib64 ] && VERSION="$VERSION 64 bits"
;;
- NTFS | HTNFS | FAT32 | HFAT32)
+ NTFS | HNTFS | FAT32 | HFAT32)
TYPE="Windows"
# Para Windows: leer la version del registro.
VERSION=$(ogGetRegistryValue $MNTDIR software '\Microsoft\Windows NT\CurrentVersion\ProductName')
@@ -96,6 +102,12 @@ return 0
#*/ ##
function ogGetOsType ()
{
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
+ "$FUNCNAME 1 2 => Linux"
+ return
+fi
ogGetOsVersion "$@" | cut -sf1 -d:
}
@@ -168,7 +180,7 @@ lshw | awk 'BEGIN {type="mod";}
function ogListSoftware ()
{
# Variables locales.
-local MNTDIR TYPE DPKGDIR RPMDIR KEYS k PROG VERS
+local MNTDIR TYPE DPKGDIR RPMDIR PACMANDIR KEYS KEYS32 k PROG VERS
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -228,6 +240,7 @@ case "$TYPE" in
NTFS|HNTFS|FAT32|HFAT32)
# 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')
# Mostrar los valores "DisplayName" y "DisplayVersion" para cada clave.
(for k in $KEYS; do
PROG=$(ogGetRegistryValue $MNTDIR software "\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\$k\\DisplayName")
@@ -235,6 +248,13 @@ case "$TYPE" in
VERS=$(ogGetRegistryValue $MNTDIR software "\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\$k\\DisplayVersion")
echo "$PROG $VERS"
fi
+ done
+ for k in $KEYS32; do
+ PROG=$(ogGetRegistryValue $MNTDIR software "\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\$k\\DisplayName")
+ if [ -n "$PROG" ]; then
+ VERS=$(ogGetRegistryValue $MNTDIR software "\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\$k\\DisplayVersion")
+ echo "$PROG $VERS"
+ fi
done) | sort | uniq
;;
*) ogRaiseError $OG_ERR_PARTITION "$1, $2"
@@ -250,7 +270,9 @@ esac
#@attention
#@version 0.1 Date: 27/10/2008 Author Antonio J. Doblas Viso. Universidad de Malaga
#*/
-function ogInfoCache () {
+function ogInfoCache ()
+{
+local info infoFilesystem infoSize infoUsed infoUsedPorcet infoMountedOn content
if ogMountCache
then
info=`df -h | grep $OGCAC`
@@ -282,3 +304,4 @@ else
fi
}
+
diff --git a/client/engine/Net.lib b/client/engine/Net.lib
index 6ac5a94a..b7534e20 100755
--- a/client/engine/Net.lib
+++ b/client/engine/Net.lib
@@ -4,12 +4,65 @@
#@brief Librería o clase Net
#@class Net
#@brief Funciones básicas de red.
-#@version 0.10
+#@version 1.0.2
#@warning License: GNU GPLv3+
#*/
#/**
+# ogGetGroupDir [ str_repo ]
+#@brief Devuelve el cmaino del directorio para el grupo del cliente.
+#@param str_repo repositorio de imágenes (opcional)
+#@return path_dir - Camino al directorio del grupo.
+#@note repo = { REPO, CACHE } REPO por defecto
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@version 1.0.2 - Primera versión para OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-10-03
+#*/
+function ogGetGroupDir ()
+{
+local REPO DIR GROUP
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME str_repo" \
+ "$FUNCNAME REPO ==> /opt/opengnsys/images/groups/Grupo1"
+ 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
+
+GROUP="$(ogGetGroupName)"
+if [ -n "$GROUP" ]; then
+ DIR=$(ogGetPath "$REPO" "/groups/$GROUP" 2>/dev/null)
+ [ -d "$DIR" ] && echo "$DIR"
+fi
+}
+
+
+#/**
+# ogGetGroupName
+#@brief Devuelve el nombre del grupo al que pertenece el cliente.
+#@return str_group - Nombre de grupo.
+#@version 1.0.2 - Primera versión para OpenGnSys.
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-10-03
+#*/
+function ogGetGroupName ()
+{
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => Grupo1"
+ return
+fi
+[ -n "$group" ] && echo "$group"
+}
+
+
+#/**
# ogGetHostname
#@brief Muestra el nombre del cliente.
#@return str_host - nombre de máquina
@@ -20,6 +73,10 @@
function ogGetHostname ()
{
local HOST
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => pc1"
+ return
+fi
# Tomar nombre de la variable HOSTNAME
HOST="$HOSTNAME"
# Si no, tomar del DHCP, opción host-name /* (comentario para Doxygen)
@@ -30,14 +87,14 @@ HOST="$HOSTNAME"
[ -z "$HOST" ] && HOST=$(awk 'BEGIN {RS=""; FS="="}
$1~/hostname/ {print $2}' /proc/cmdline)
[ "$HOSTNAME" != "$HOST" ] && export HOSTNAME="$HOST"
-echo $HOST
+[ -n "$HOST" ] && echo $HOST
}
#/**
# ogGetNetInterface
#@brief Muestra la interfaz de red del sistema
-#@return str_interfaz - interfaz de red
+#@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.
@@ -45,13 +102,14 @@ echo $HOST
#*/ ##
function ogGetNetInterface ()
{
- echo $DEVICE
-
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => eth0"
+ return
+fi
+[ -n "$DEVICE" ] && echo "$DEVICE"
}
-
-
#/**
# ogGetIpAddress
#@brief Muestra la dirección IP del sistema
@@ -63,19 +121,29 @@ function ogGetNetInterface ()
#@note Usa las variables utilizadas por el initrd "/etc/net-ethX.conf
#@author Antonio J. Doblas Viso. Universidad de Malaga.
#@date 2011-02-24
+#@version 1.0.2 - Soporte para varias tarjetas de red
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-06-17
#*/ ##
function ogGetIpAddress ()
{
local IP
-if [ -n $IPV4ADDR ]
-then
- echo $IPV4ADDR
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 192.168.0.10"
+ return
+fi
+if [ -n $IPV4ADDR ]; then
+ IP=$IPV4ADDR
else
- # Obtener direcciones IP. /* (comentario para Doxygen)
- IP=$(ip address show | awk '$2!~/lo/ { readline; if ($1~/inet$/) {sub (/\/.*/, ""); printf ("%s ", $2)}}')
- # Mostrar sólo la primera. (comentario para Doxygen) */
- echo ${IP%% *}
+ # Obtener direcciones IP.
+ if [ -n "$DEVICE" ]; then
+ IP=$(ip -o address show up dev "$DEVICE" 2>/dev/null | awk '{if ($3~/inet$/) {printf ("%s ", $4)}}')
+ else
+ IP=$(ip -o address show up | awk '$2!~/lo/ {if ($3~/inet$/) {printf ("%s ", $4)}}')
+ fi
fi
+# Mostrar solo la primera.
+echo ${IP%%/*} # (comentario para Doxygen) */
}
@@ -86,12 +154,23 @@ fi
#@version 0.10 - Integración en OpenGnSys 0.10
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2010-02-11
+#@version 1.0.2 - Soporte para varias tarjetas de red
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-06-17
#*/ ##
function ogGetMacAddress ()
{
local MAC
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 00:11:22:33:44:55"
+ return
+fi
# Obtener direcciones Ethernet.
-MAC=$(ip address show | awk '$2!~/lo/ {readline; if ($1~/ether/) printf ("%s ", toupper($2));}')
+if [ -n "$DEVICE" ]; then
+ MAC=$(ip -o address 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));}')
+fi
# Mostrar sólo la primera.
echo ${MAC%% *}
}
@@ -111,6 +190,10 @@ echo ${MAC%% *}
#*/ ##
function ogGetRepoIp ()
{
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 192.168.0.2"
+ return
+fi
# Obtener direcciones IP, segun el protocolo de montaje
if [ -n "$OGIMG" ]; then
case "$ogprotocol" in
@@ -135,8 +218,12 @@ fi
#*/ ##
function ogGetServerIp ()
{
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME" "$FUNCNAME => 192.168.0.2"
+ return
+fi
# Obtener direcciones IP.
-if [ -n "$PENGNSYS" ]; then
+if [ -n "$OPENGNSYS" ]; then
case "$ogprotocol" in
nfs) mount | grep " on $OPENGNSYS " | cut -f1 -d: ;;
smb) mount | grep " on $OPENGNSYS " | cut -f3 -d/ ;;
diff --git a/client/engine/PostConfEAC.lib b/client/engine/PostConfEAC.lib
index 642b9118..f2487919 100755
--- a/client/engine/PostConfEAC.lib
+++ b/client/engine/PostConfEAC.lib
@@ -573,3 +573,144 @@ schroot -c linux
schroot -end-sessiona --all-sessions
}
+####################################################################################
+################### Funciones para postconfiguracion windows #######################
+############# 2011 Jonathan Alonso Martinez jonathan.alonso@uab.cat ###############
+#################### Universidad Autonoma de Barcelona (Spain)######################
+####################################################################################
+
+#/**
+# ogInstallMiniSetup path_mountpoint 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 path_mountpoint directorio donde está montado el sistema Windows
+#@param str_filename nombre del archivo .cmd a ejecutar en el arranque (estara en system32 y sera visible por el sistema)
+#@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
+#*/ ##
+function ogInstallMiniSetup ()
+{
+local CMDDIR CMDFILE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_filename" \
+ "$FUNCNAME /mnt/sda1 filename.cmd"
+ return
+fi
+# Error si no se reciben 2 parámetros.
+[ $# == 2 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Comprobar que existe el directorio del fichero de comandos.
+CMDDIR=$(ogGetPath "$1/windows/system32")
+[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $?
+CMDFILE="$CMDDIR/$2"
+
+# 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
+
+#Creamos las claves de registro necesarias para que se haga la ejecucion del .cmd al aranque
+ogSetRegistryValue "$1" SYSTEM "\Setup\SystemSetupInProgress" 1
+ogSetRegistryValue "$1" SYSTEM "\Setup\SetupType" 4
+ogSetRegistryValue "$1" SYSTEM "\Setup\CmdLine" "cmd.exe /c $2"
+}
+
+
+# ogAddCmd path_mountpoint str_filename str_commands
+#@brief Añade comandos al cmd creado por ogInstalMiniSetup
+#@param path_mountpoint directorio donde está montado el sistema Windows
+#@param str_filename nombre del fichero cmd (siempre se guardara en windows\system32\para que sea visible por el sistema
+#@param str_commands comando o comandos que se añadiran al fichero
+#@return
+#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_PARTITION Tipo de partición desconocido o no se puede montar.
+#@version 1.0.2 - Nueva función
+#@author Jonathan Alonso Martinez - Universidad Autonoma de Barcelona
+#@date 2011-06-29
+#*/ ##
+
+function ogAddCmd ()
+{
+local CMDFILE
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_filename str_commands" \
+ "$FUNCNAME /mnt/sda1 filename.cmd command"
+ return
+fi
+# Error si no se reciben 3 parámetros.
+[ $# == 3 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Comprobar que existe el fichero de comandos.
+CMDFILE=$(ogGetPath "$1/windows/system32/$2")
+[ -n "$CMDFILE" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32/$2" || return $?
+
+cat >> "$CMDFILE" << EOF
+$3
+EOF
+}
+
+# ogDomainScript path_mountpoint str_domain str_user str_password
+#@brief Crea un script .vbs para unir al dominio una maquina windows y el comando adequado en el archivo cmd creado por ogInstallMiniSetup
+#@param path_mountpoint directorio donde está montado el sistema Windows
+#@param str_filename nombre del fichero cmd donde deberemos introducir el comando de ejecutar el script vbs
+#@param str_domain Dominio donde se quiere conectar
+#@param str_user Usuario con privilegios para unir al dominio
+#@param str_password Password del usuario con privilegios
+#@return
+#@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
+#*/ ##
+
+function ogDomainScript ()
+{
+local CMDDIR
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_filename str_domain str_user str_password" \
+ "$FUNCNAME /mnt/sda1 filename.cmd domain user password_user"
+ return
+fi
+# Error si no se reciben 4 parámetros.
+[ $# == 5 ] || return $(ogRaiseError $OG_ERR_FORMAT; echo $?)
+# Comprobar que existe el directorio de comandos.
+CMDDIR=$(ogGetPath "$1/windows/system32")
+[ -n "$CMDDIR" ] || ogRaiseError $OG_ERR_NOTFOUND "$1/windows/system32" || return $?
+
+# Añadimos en el cmd que se ejecutara al arranque, el comando de ejecutar el script que añade al dominio.
+ogAddCmd $1 "$2" "CSCRIPT joindomain.vbs"
+# Eliminamos el script porque tiene el usuario de administrador de dominio en claro
+ogAddCmd $1 "$2" "del /Q C:\Windows\System32\joindomain.vbs"
+
+# Creamos el archivo joindomain.vbs que nos introduce la maquina en el dominio
+cat > "$CMDDIR/joindomain.vbs" << EOF
+Const JOIN_DOMAIN = 1
+Const ACCT_CREATE = 2
+Const ACCT_DELETE = 4
+Const WIN9X_UPGRADE = 16
+Const DOMAIN_JOIN_IF_JOINED = 32
+Const JOIN_UNSECURE = 64
+Const MACHINE_PASSWORD_PASSED = 128
+Const DEFERRED_SPN_SET = 256
+Const INSTALL_INVOCATION = 262144
+
+strDomain = "$3"
+strUser = "$4"
+strPassword = "$5"
+
+Set objNetwork = CreateObject("WScript.Network")
+strComputer = objNetwork.ComputerName
+
+Set objComputer = GetObject("winmgmts:{impersonationLevel=Impersonate}!\\\" & _
+ strComputer & "\root\cimv2:Win32_ComputerSystem.Name='" & strComputer & "'")
+
+ReturnValue = objComputer.JoinDomainOrWorkGroup(strDomain, strPassword, _
+ strDomain & "\" & strUser, NULL, JOIN_DOMAIN + ACCT_CREATE)
+EOF
+}
+
diff --git a/client/engine/Protocol.lib b/client/engine/Protocol.lib
index ecc0d43b..5fe2bc74 100755
--- a/client/engine/Protocol.lib
+++ b/client/engine/Protocol.lib
@@ -29,14 +29,10 @@
#@date 2011/03/09
#*/ ##
-
-
-
function ogUcastSyntax ()
{
-local PARM SESSION SESSIONPARM MODE PORTBASE PERROR
-local ADDRESS
+local PARM SESSION SESSIONPARM MODE PORTBASE PERROR ADDRESS
local TOOL LEVEL DEVICE MBUFFER SYNTAXSERVER SYNTAXCLIENT
# Si se solicita, mostrar ayuda.
@@ -159,7 +155,7 @@ function ogUcastSendPartition ()
{
# Variables locales
-local PART COMMAND RETVAL
+local PART COMMAND RETVAL
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -175,7 +171,6 @@ PART=$(ogDiskToDev "$1" "$2") || return $?
#ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $?
ogUnmount $1 $2
-
#generamos la instrucción a ejecutar.
COMMAND=`ogUcastSyntax SENDPARTITION "$3" $PART $4 $5`
RETVAL=$?
@@ -190,6 +185,7 @@ fi
}
+
#/**
# ogUcastReceiverPartition
#@brief Función para recibir directamente en la partición el contenido de un fichero imagen remoto enviado por UNICAST.
@@ -208,7 +204,7 @@ fi
function ogUcastReceiverPartition ()
{
# Variables locales
-local PART COMMAND RETVAL
+local PART COMMAND RETVAL
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -224,7 +220,6 @@ PART=$(ogDiskToDev "$1" "$2") || return $?
#ogIsLocked $1 $2 || ogRaiseError $OG_ERR_LOCKED "$1,$2" || return $?
ogUnmount $1 $2
-
#generamos la instrucción a ejecutar.
COMMAND=`ogUcastSyntax RECEIVERPARTITION "$3" $PART $4 $5`
RETVAL=$?
@@ -260,7 +255,7 @@ fi
function ogUcastSendFile ()
{
# Variables locales.
-local ARGS SOURCE TARGET COMMAND DEVICE RETVAL LOGFILE
+local ARG ARGS SOURCE TARGET COMMAND DEVICE RETVAL LOGFILE
#ARGS usado para controlar ubicación de la sesion multicast
@@ -301,7 +296,6 @@ esac
ogGetPath $SOURCE &> /dev/null || ogRaiseError $OG_ERR_NOTFOUND " device or file $DEVICE not found" || return $?
-
SESSION=${!ARG}
#generamos la instrucción a ejecutar.
@@ -340,7 +334,6 @@ fi
#*/ ##
#
-
function ogMcastSyntax ()
{
@@ -478,7 +471,7 @@ esac
function ogMcastSendFile ()
{
# Variables locales.
-local ARGS SOURCE TARGET COMMAND DEVICE RETVAL LOGFILE
+local ARGS ARG SOURCE TARGET COMMAND DEVICE RETVAL LOGFILE
#LOGFILE="/tmp/mcast.log"
@@ -525,7 +518,6 @@ ogGetPath $SOURCE &> /dev/null || ogRaiseError $OG_ERR_NOTFOUND " device or file
SESSION=${!ARG}
-
#generamos la instrucción a ejecutar.
COMMAND=`ogMcastSyntax "SENDFILE" "$SESSION" "$SOURCE"`
RETVAL=$?
@@ -611,6 +603,7 @@ else
fi
}
+
#/**
# ogMcastSendPartition
#@brief Función para enviar el contenido de una partición a multiples particiones remotas.
@@ -633,7 +626,7 @@ function ogMcastSendPartition ()
{
# Variables locales
-local PART COMMAND RETVAL
+local PART COMMAND RETVAL
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -683,7 +676,7 @@ fi
function ogMcastReceiverPartition ()
{
# Variables locales
-local PART COMMAND RETVAL
+local PART COMMAND RETVAL
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -926,7 +919,7 @@ esac
# Error si no existe la imagen
-[ $SOURCE ] || ogRaiseError $OG_ERR_NOTFOUND || return $?
+[ $SOURCE ] || ogRaiseError $OG_ERR_NOTFOUND || return $?
[ -r $SOURCE.torrent ] && mv "$SOURCE.torrent" "$SOURCE.torrent.ant" && echo "Esperamos que se refresque el servidor" && sleep 20
@@ -957,7 +950,7 @@ function ogUpdateCacheIsNecesary ()
{
# Variables locales.
-local ERROR SOURCE CACHE FILESOURCE MD5SOURCE FILETARGET MD5TARGET
+local ERROR SOURCE CACHE FILESOURCE MD5SOURCE FILETARGET MD5TARGET
ERROR=0
# Si se solicita, mostrar ayuda.
@@ -986,8 +979,8 @@ 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
+ 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
@@ -1029,7 +1022,7 @@ then
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 $FILETARGET
+ rm -f $FILETARGET
return 0
fi
diff --git a/client/engine/Registry.lib b/client/engine/Registry.lib
index 9ca6a0e4..6423f43a 100755
--- a/client/engine/Registry.lib
+++ b/client/engine/Registry.lib
@@ -60,8 +60,8 @@ EOT
#@return (nada)
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado.
-#@note hive = { default, sam, security, software, system, components }
-#@note valuetype = { string, binary, dword }, por defecto: string
+#@note hive = { DEFAULT, SAM, SECURITY, SOFTWARE, SYSTEM, COMPONENTS }
+#@note valuetype = { STRING, BINARY, DWORD }, por defecto: STRING
#@warning Requisitos: chntpw
#@warning El sistema de archivos de Windows debe estar montada previamente.
#@version 1.0.1 - Nueva función
@@ -146,6 +146,7 @@ y
EOT
}
+
#/**
# ogDeleteRegistryValue path_mountpoint str_hive str_valuename
#@brief Elimina un valor del registro de Windows.
@@ -198,7 +199,7 @@ EOT
#@return str_path - camino del fichero de registro
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Fichero de registro no encontrado.
-#@note hive = { default, sam, security, software, system, components }
+#@note hive = { DEFAULT, SAM, SECURITY, SOFTWARE, SYSTEM, COMPONENTS }
#@warning El sistema de archivos de Windows debe estar montada previamente.
#@version 1.0.1 - Nueva función
#@author Ramon Gomez, ETSII Universidad de Sevilla
@@ -212,7 +213,7 @@ local FILE FILENT FILEXP
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME path_mountpoint str_hive"
- "$FUNCNAME /mnt/sda1 SOFTWARE"
+ "$FUNCNAME /mnt/sda1 SOFTWARE => /mnt/sda1/WINDOWS/System32/config/SOFTWARE"
return
fi
# Error si no se reciben 2 parámetros.
diff --git a/client/engine/System.lib b/client/engine/System.lib
index 020692d5..0d060f29 100755
--- a/client/engine/System.lib
+++ b/client/engine/System.lib
@@ -15,6 +15,7 @@
#@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 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
@@ -28,16 +29,17 @@ local LOGLEVEL LOGFILE DATETIME
# Selección del nivel de registro (opcional).
case "$1" in
help) shift ;;
- info) LOGLEVEL=$1; shift ;;
- warning) LOGLEVEL=$1; shift ;;
- error) LOGLEVEL=$1; shift ;;
+ info) LOGLEVEL="$1"; shift ;;
+ warning) LOGLEVEL="$1"; shift ;;
+ error) LOGLEVEL="$1"; shift ;;
*) ;;
esac
-# Pendiente en cliente Initrd.
-#DATETIME=$(date +"%F %T")
+DATETIME=$(date +"%F %T")
if [ -n "$LOGLEVEL" ]; then
- logger -s -t "OpenGnSys $LOGLEVEL" $LOGFILE "$DATETIME $*"
+ logger -s -t "OpenGnSys $LOGLEVEL" -f $LOGFILE "$DATETIME $*"
+ logger -t "OpenGnSys $LOGLEVEL" -f $OGLOGCOMMAND "$DATETIME $*"
+ logger -t "OpenGnSys $LOGLEVEL" -f $OGLOGSESSION "$DATETIME $*"
else
echo "$*"
fi
@@ -91,7 +93,7 @@ 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\"" ;;
- *) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;;
+ *) MSG="$MSG_ERR_GENERIC"; CODE=$OG_ERR_GENERIC ;;
esac
# Mostrar mensaje de error y salir con el código indicado.
@@ -177,19 +179,20 @@ while [ $# -gt 0 ]; do
done
}
-ogCheckProgram ()
+
+function ogCheckProgram ()
{
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
- ogHelp "$FUNCNAME \"str_program1 program2 programN\" " \
- "$FUNCNAME \"partimage partclone mbuffer\" "
+ ogHelp "$FUNCNAME \"str_program ...\"" \
+ "$FUNCNAME \"partimage partclone mbuffer\""
return
fi
# Error si no se recibe 1 parámetro.
[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-local PERROR PLOG
+local PERROR PLOG i
PERROR=0
PLOG=" "
for i in `echo $1`
@@ -207,3 +210,4 @@ else
return 0
fi
}
+
diff --git a/client/engine/correspondencia-api.txt b/client/engine/correspondencia-api.txt
deleted file mode 100644
index e3cff0f5..00000000
--- a/client/engine/correspondencia-api.txt
+++ /dev/null
@@ -1,227 +0,0 @@
-
-OpenGNSys Client Cloning Engine API
-===================================
-
-La API está dividida en librerías de funciones C/BASH o clases C++/PHP.
-La columna de la izquierda es la propuesta de nombre para función/método y la de la derecha es la equivalencia con las actuales en UMA/US/UNIZAR.
-
-En el resto del fichero están las funciones originales que aún no he revisado.
-
-Entre el nombre de la función y sus equivalentes, se añade estado de la migración.
- version 0.1 incorporada desde hidra, brutalix, EAC, o interfaz hidra-eac pero no compatible.
- version 0.x proceso de migración
- version 0.9 totalmente funcional con la estructura definida en las primeras funciones insertadas por Ramón. Un ejemplo es ogPartitionActive de la libreria Disk.lib
-
-
-PROPUESTA
----------
-
-Librería o clase Install:
-- ogConfigureServer 0.1 (CustomEACServer, InterfazCustomEACServer)
-- ogLoadConfig (scirpt_uso)
-
-Librería o clase System:
-- ogEcho 0.9 (Msg)
-- ogRaiseError (?)
-
-Librería o clase Disk:
-- ogUpdatePartitionTable 0.1 (UpdateDisk)
-- ogDeletePartitionTable 0.1 (DeletePartitionTable, hidraDeletePartitionTable)
-- ogDevToDisk (Disk, IdPartition, hidraDisk)
-- ogDiskToDev 0.9 (DiskEAC)
- ogDiskToRelativeDev 0.1 (IdPartition)
-- ogCreatePartitions (CreatePartitions, hidraCreatePrimaryPartitions, hidraCreateLogicalPartitions)
-- ogListPartitions (ListPartitions, hidraListPartitions, hidraListPrimaryPartitions, hidraListLogicalPartitions)
-- ogGetPartitionActive (hidraGetPartitionActive)
-- ogSetPartitionActive (SetPartitionActive, hidraSetPartitionActive)
-- ogGetPartitionId 0.9 (?)
-- ogSetPartitionId 0.1 (SetPartitionType)
-- ogGetPartitionSize 0.9 (SizePartition, hidraGetPartitionSize)
-- ogSetPartitionSize (hidraSetPartitionSize)
- ogGetPartitionsNumber 0.1 (DetectNumberPartition)
- ogDeletePartitionsLabels 0.1 (DeleteLABELS)
-
-
-Librería o clase FileSystem:
-- ogFormat, ogFormatFs (FormatPartition, hidraFormat)
-- ogFormatCache 0.1 (FormatCACHE, hidraFormatCache)
-- ogExtend, ogExtendFs (EnlargeFileSystem, hidraFSExtend)
-- ogReduce, ogReduceFs (ReduceFileSystem, hidraFSReduce)
-- ogGetFsType (TypeFS, hidraTypeFS)
-- ogSetFsType (SetPartitionType, hidraSetPartitionType)
-- ogFindCache 0.1 (FindCache, hidraFindCache)
-- ogIsLocked, ogIsFsLocked (hidraIsLocked)
-- ogLock, ogLockFs (hidraLock)
-- ogUnlock, ogUnlockFs (hidraUnlock)
-- ogMountFs, ogMount (MountPartition, hidraMount)
-- ogUnmountFs, ogUnmount (UmountPartition, hidraUnmount)
-- ogMountAllFs, ogMountAll (hidraMountAll)
-- ogUnmountAllFs, ogUnmountAll (hidraUnmmountAll)
-- ogMountRepo, ogMount (MountRepo, hidraMountRepo)
-- ogUnmountRepo, ogUnmount (UmountRepo, hidraUnmountRepo)
-- ogMountCache, ogMount 0.1 (MountCache, hidraMountCache)
-- ogUnmountCache, ogUnmount 0.1 (UmountCache, hidraUnmountCache)
-
-Librería o clase Image:
-- ogCreateImage (CreateImageFromPartition, hidraCreateImageFromPartition)
-- ogRestoreImage (RestorePartitionFromImage, RestorePartitionFromPartition, hidraRestorePartitionFromImage)
-- ogGetImageSize (hidraImageSize)
-- ogCreateTorrent (CreateTorrentFromImage)
-
-
-Librería o clase Boot:
-- ogBoot (HDBoot, BootLinuxEX, hidraBoot)
-- ogLinuxBootParameters (hidraLinuxBootParameters)
-- ogInstallGrub (InstallGrub)
-- ogConfigureGrub (ConfGrub)
-- ogListRegistryKeys (hidraListRegistryKeys)
-- ogGetRegistryValue (hidraGetRegistryKey)
-- ogSetRegistryValue (hidraSetRegistryKey)
-- ogGetWindowsName (hidraGetWindowsName)
-- ogSetWindowsName (hidraSetWindowsName)
- ogNewMbrXP v0.1 (NewMbrXP)
-
-Librería o clase Inventory:
-- ogListHardwareInfo (InfoHardware, DetectDevices, hidraHardwareInfo)
-- ogGetOsVersion (hidraOSVersion)
-- ogListSoftware
-- ogListLinuxSoftware (hidraLinuxSoftware)
-- ogListWindowsSoftware (idraWindowsSoftware)
- ogInfoCache v.0.1 (infoCache)
-
-Librería o clase File:
-- ogGetPath (ConnectToRepo, hidraPath)
-- ogIsFile (IfFileExist, IfFileNotExist)
- ogNewPath
-
-Librería o clase String:
-
-Librería o clase ToolsGNU
-
-
-===================
-
-Funciones EAC:
-
-Referencia del Archivo ATA.lib
-
-DetectNumberPartition -> GetPartitionNumber
-NewMbrXP
-DeleteLABELS
-IsFSequalPartition -> CompareSizeFSPartition
-AmpliarFileSystemNT -> desaparece (la anterior detecta el tipo de FS)
-CrearSistemaArchivos
-ELIMINARReducirFileSystemNT
-
-Referencia del Archivo Boot.lib
-
-SetDefaultBoot
-ConvertToGrub
-InstalaGrub4dos
-moddhcpdconf
-
-Referencia del Archivo Deploy.lib
-
-SetDefaultStartpage
-DetectMethodTransfer
-GetImageFile
-UpdateCache
-CheckImage
-DetectInfoImage -> GetImageInfo
-DetectaProgramaImagen -> GetImageProgram
-DetectaFSImagen -> GetImageFS
-DetectCompresionImage -> GetImageCompression
-DeployPartitionFromImage
-OpenArchiveZIP
-OpenArchiveNT
-Synchronize
-MakeOffline
-MountChrootEACclient
-UmountChrootEACclient
-MakePhotoConsole
-BORRARCheckImageTORRENT
-
-Referencia del Archivo EACInstall.lib
-
-BuildEACOSBase
-BuildEACBootAgenPXE
-BuildEACServer
-TestPxe
-
-Referencia del Archivo FileSystem.lib
-
-SizeFileSystem
-InfoCache
-FormatToLower
-FormatToUpper
-FormatSintaxDev
-FormatSintaxSpacePath
-FormatSintaxBackSlashPath
-GetPath
-GetLastStr
-GetFirstStr
-MkdirPath
-DetectaEtiquetas
-WhatsTime
-HowLongHasWorked
-NumberRound
-
-Referencia del Archivo PostConf.lib
-
-CrearPatron
-ParseaSysprep
-NTDetect
-LoadRegistrySystem
-LoadRegistryUsers
-UpdateRegistry
-NTChangeName
-NTDrivers
-NTDrivers2
-NTSetGroupName
-NTSetOwner
-NTAutoLogon
-NTStatusRatonTeclado
-NTRunOnceMachine
-NTRunMachine
-NTRunUser
-NTPolUserOn
-NTPolUserOFF
-NTStatusBootChk
-NTNoMsgNewHardware
-ChangeName
-
-Referencia del Archivo Settings.lib
-
-IPservidor
-IfacesEACclient
-ExportEACconf
-clean
-
-Referencia del Archivo DBProcess.php
-
- RegistryHost ($mac, $ip)
- SetHostName ()
- BootServer ($boot, $ip)
- Logger ()
- InsertClassrom ($descripcion, $subred, $netmask, $broadcast, $gateway, $repo_image, $repo_client)
- InsertItemtoMenu ($menu, $item)
-
-
-Funciones Hidra:
-
-HIDRA (* a las que llama la web de hidra,las demás desaparecen salvo algunas que no existe en EAC)
-
-hidraClientIP
-hidraClientMAC
-hidraDeleteFile
-hidraEACServer
-hidraFSCheck
-hidraPoweroff
-hidraReboot
-hidraUpdateCache
-
-
-Funciones de configuracion Unizar
-
-eac_config_server
-opengnsys_installer
diff --git a/client/shared/bin/poweroffconf b/client/shared/bin/poweroffconf
new file mode 100755
index 00000000..c4813e34
--- /dev/null
+++ b/client/shared/bin/poweroffconf
@@ -0,0 +1,59 @@
+#!/bin/bash
+#/**
+#@file poweroffconf
+#@brief Control de parada tras tiempo de inactividad para ahorro de energía.
+#@param int_minutos Minutos de inactividad (opcional).
+#@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
+#@warning License: GNU GPLv3+
+#*/
+
+
+# Variables generales.
+OPENGNSYS=${OPENGNSYS:-/opt/opengnsys} # Instalación de OpenGnSys
+OGETC=${OGETC:-$OPENGNSYS/etc} # Configuración de OpenGnSys
+POWEROFFCONF=/etc/poweroff.conf # Configuración del script
+source $POWEROFFCONF
+
+case $# in
+ 0) # Sin parámetros, comprobar que existe la variable POWEROFFSLEEP.
+ if [ -z "$POWEROFFSLEEP" ]; then
+ ogRaiseError $OG_ERR_FORMAT "Sin tiempo de espera."
+ exit $?
+ fi
+ ;;
+ 1) #TODO Comprobar que el parámetro es entero positivo.
+ # Nuevo timepo de espera.
+ POWEROFFSLEEP=$1
+ 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")
+ perl -pi -e "s/POWEROFFTIME=.*/POWEROFFTIME=$POWEROFFTIME/" $POWEROFFCONF
+ fi
+ exit 0 ;;
+ *) # Error de formato de ejecución.
+ ogRaiseError $OG_ERR_FORMAT "Formato: $0 [int_minutos]"
+ exit $? ;;
+esac
+# Comprobar si hay algún script en ejecución.
+if [ -n "$(pgrep -fl $OPENGNSYS | egrep -v "$OGETC|$0")" ]; then
+ # Eliminar tiempo de inicio de espera, si se está ejecutando operación.
+ perl -pi -e 's/POWEROFFTIME=.*$/POWEROFFTIME=/' $POWEROFFCONF
+else
+ # Si el sistema está en estado de espera, ...
+ NOW=$(date +"%H%M")
+ if [ -z "$POWEROFFTIME" ]; then
+ # Asignar tiempo de inicio, si no estaba definido.
+ POWEROFFTIME=$(date --date="$POWEROFFSLEEP min" +"%H%M")
+ perl -pi -e "s/POWEROFFTIME=.*$/POWEROFFTIME=$POWEROFFTIME/" $POWEROFFCONF
+ else
+ # Apagar el equipo si se sobrepasa el periodo de espera.
+ if [ $NOW -ge $POWEROFFTIME ]; then
+ $OPENGNSYS/scripts/poweroff
+ fi
+ fi
+fi
+
diff --git a/client/shared/etc/init/default.sh b/client/shared/etc/init/default.sh
index 79385796..d1fea1c9 100755
--- a/client/shared/etc/init/default.sh
+++ b/client/shared/etc/init/default.sh
@@ -1,11 +1,21 @@
#!/bin/bash
# TODO Separar esta sección en otro script
+
+
# Lanzar servicios complementarios del cliente.
-echo -ne "og\nog\n" | passwd root
-#Compatibilidad ssh con el boot-tools 1.0.2
+PASS=$(grep "^[ ]*\(export \)\?OPTIONS=" /scripts/ogfunctions 2>&1 | \
+ sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
+PASS=${PASS:-"og"}
+echo -ne "$PASS\n$PASS\n" | passwd root 2>/dev/null
+
+# Inicio del servidor sshd
/usr/sbin/sshd
+
+# Desactivado apagado de monitor
#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
# Fichero de registro de incidencias (en el servidor; si no, en local).
@@ -16,12 +26,29 @@ if ! touch $OGLOGFILE 2>/dev/null; then
fi
LOGLEVEL=5
-#facilitando el entorno Og desde ssh
+#Facilitando el entorno Og desde ssh
cp $OPENGNSYS/etc/preinit/loadenviron.sh /etc/profile.d/
+
+
+
+########## PRUEBAS
# Crear menú por defecto para el cliente
generateMenuDefault
-# Arranque de OpenGnSys Client.
+# Matando plymount para inicir browser o shell
+pkill -9 plymouthd
+
+[ -f /opt/opengnsys/scripts/runhttplog.sh ] && /opt/opengnsys/scripts/runhttplog.sh
+
+########## FIN PRUEBAS
+
+# Arranque de OpenGnSys Client daemon (web services).
+if [ -x $OPENGNSYS/job_executer/init.d/job_executer ]; then
+ echo "Running Opengnsys client daemon (web services)"
+ $OPENGNSYS/job_executer/init.d/job_executer restart
+fi
+
+# Arranque de OpenGnSys Client daemon (socket).
if [ -x "$OPENGNSYS/bin/ogAdmClient" ]; then
echo "$MSG_LAUNCHCLIENT"
[ $ogactiveadmin == "true" ] && boot=admin
diff --git a/client/shared/etc/preinit/default.sh b/client/shared/etc/preinit/default.sh
index 539c12fe..addab9aa 100755
--- a/client/shared/etc/preinit/default.sh
+++ b/client/shared/etc/preinit/default.sh
@@ -5,7 +5,7 @@ set -a
source /opt/opengnsys/etc/preinit/loadenviron.sh
# Scripts de inicio.
-for f in fileslinks loadmodules mountrepo; do
+for f in fileslinks loadmodules mountrepo poweroff; do
$OGETC/preinit/$f.sh
done
diff --git a/client/shared/etc/preinit/loadenviron.sh b/client/shared/etc/preinit/loadenviron.sh
index af891534..c23fcc80 100755
--- a/client/shared/etc/preinit/loadenviron.sh
+++ b/client/shared/etc/preinit/loadenviron.sh
@@ -23,7 +23,8 @@ if [ -d $OPENGNSYS ]; then
export OGCAC=$OPENGNSYS/cache
export OGLOG=$OPENGNSYS/log
- export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/og2fs/2ndfs/opt/drbl/sbin
+ export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:/usr/local/bin:/opt/oglive/rootfs/opt/drbl/sbin
+
export PATH=$OGSCRIPTS:$PATH:$OGAPI:$OGBIN
# Exportar parámetros del kernel.
@@ -64,9 +65,15 @@ if [ -d $OPENGNSYS ]; then
# Fichero de registros.
export OGLOGFILE="$OGLOG/$(ogGetIpAddress).log"
+ # Configuracion de la red (valido offline)
+ cat /tmp/initrd.cfg | grep DEVICECFG && export $(cat /tmp/initrd.cfg | grep DEVICECFG)
+ source $DEVICECFG 2>/dev/null
+
# FIXME Pruebas para grupos de ordenadores
#export OGGROUP=$(ogGetGroup)
export OGGROUP="$group"
+
+ ROOTREPO=${ROOTREPO:-"$OGSERVERIMAGES"}
fi
# Declaración de códigos de error.
diff --git a/client/shared/etc/preinit/mountrepo.sh b/client/shared/etc/preinit/mountrepo.sh
index aa0b9886..5c20499a 100755
--- a/client/shared/etc/preinit/mountrepo.sh
+++ b/client/shared/etc/preinit/mountrepo.sh
@@ -9,6 +9,7 @@
#*/
OGIMG=${OGIMG:-/opt/opengnsys/images}
+ROOTREPO=${ROOTREPO:-"$ROOTSERVER"}
# TODO Revisar proceso de arranque para no montar 2 veces el repositorio.
if [ $ogactiveadmin == "true" ]; then
@@ -18,8 +19,12 @@ if [ $ogactiveadmin == "true" ]; then
protocol=${potocol:-"smb"}
printf "$MSG_MOUNTREPO\n" "$protocol" "$boot"
case "$protocol" in
- nfs) mount.nfs ${ROOTSERVER}:$OGIMG $OGIMG -o rw,nolock ;;
- smb) mount.cifs //${ROOTSERVER}/ogimages $OGIMG -o rw,serverino,acl,username=opengnsys,password=og ;;
+ nfs) mount.nfs ${ROOTREPO}:$OGIMG $OGIMG -o rw,nolock ;;
+ smb) PASS=$(grep "^[ ]*\(export \)\?OPTIONS=" /scripts/ogfunctions 2>&1 | \
+ sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
+ PASS=${PASS:-"og"}
+ mount.cifs //${ROOTREPO}/ogimages $OGIMG -o rw,serverino,acl,username=opengnsys,password=$PASS
+ ;;
esac
fi
diff --git a/client/shared/etc/preinit/poweroff.sh b/client/shared/etc/preinit/poweroff.sh
new file mode 100755
index 00000000..9e7d700d
--- /dev/null
+++ b/client/shared/etc/preinit/poweroff.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+#/**
+#@file poweroff.sh
+#@brief Script de inicio para cargar el proceso comprobación de clientes inactivos.
+#@note Arranca y configura el proceso "cron".
+#@warning License: GNU GPLv3+
+#@version 1.0.2
+#@author Ramon Gomez, ETSII Universidad de Sevilla
+#@date 2011-10-25
+#*/
+
+
+# Si está configurado OpenGnSys ...
+if [ -n "$OPENGNSYS" ]; then
+ #echo "$MSG_POWEROFFCONF"
+
+ # Crear fichero de configuración por defecto (30 min. de espera).
+ POWEROFFCONF=/etc/poweroff.conf
+ cat << FIN > $POWEROFFCONF
+POWEROFFSLEEP=30
+POWEROFFTIME=
+FIN
+
+ # Lanzar el proceso "cron".
+ cron -l
+
+ # Definir la "crontab" lanzando el proceso de comprobación cada minuto.
+ echo "* * * * * [ -x $OGBIN/poweroffconf ] && $OGBIN/poweroffconf" | crontab -
+
+else
+ # 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/lib/httpd/10-cgi.conf b/client/shared/lib/httpd/10-cgi.conf
new file mode 100644
index 00000000..e6f4c85c
--- /dev/null
+++ b/client/shared/lib/httpd/10-cgi.conf
@@ -0,0 +1,18 @@
+# /usr/share/doc/lighttpd-doc/cgi.txt
+
+server.modules += ( "mod_cgi" )
+
+$HTTP["url"] =~ "^/cgi-bin/" {
+alias.url += ( "/cgi-bin/" => "/usr/lib/cgi-bin/" )
+$HTTP["url"] =~ "^/cgi-bin/" {
+cgi.assign = ( ".sh" => "/bin/sh" )
+}
+}
+
+## Warning this represents a security risk, as it allow to execute any file
+## with a .pl/.py even outside of /usr/lib/cgi-bin.
+#
+#cgi.assign = (
+# ".pl" => "/usr/bin/perl",
+# ".py" => "/usr/bin/python",
+#)
diff --git a/client/shared/lib/httpd/LogCommand.sh b/client/shared/lib/httpd/LogCommand.sh
new file mode 100644
index 00000000..9a116f7c
--- /dev/null
+++ b/client/shared/lib/httpd/LogCommand.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+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>"
+
+$(strings /tmp/command.log > /tmp/command.log.tmp)
+
+echo "<table>"
+
+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)"
+echo "</TEXTAREA>"
+
+echo "</tr>"
+
+
+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)"
+echo "</TEXTAREA>"
+
+
+echo "</tr>"
+
+echo "</table>"
+
+
+echo "</body></html>" \ No newline at end of file
diff --git a/client/shared/lib/httpd/LogSession.sh b/client/shared/lib/httpd/LogSession.sh
new file mode 100644
index 00000000..a5d18e68
--- /dev/null
+++ b/client/shared/lib/httpd/LogSession.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+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 "<style type='text/css'>"
+echo "<!--"
+echo "TEXTAREA {"
+echo "background-color: navy;"
+echo "border: black 2px solid;"
+echo "color: white;"
+echo "font-family: arial, verdana, ms sans serif;"
+echo "font-size: 8pt;"
+echo "font-weight: normal"
+echo "} "
+echo "-->"
+echo "</style>"
+
+
+
+echo "</head><body>"
+
+echo "<TEXTAREA NAME='contenido' ROWS='115' COLS='175' >"
+echo "$(cat /tmp/session.log | uniq )"
+echo "</TEXTAREA>"
+
+
+
+echo "</body></html>"
+
diff --git a/client/shared/lib/httpd/bandwidth.sh b/client/shared/lib/httpd/bandwidth.sh
new file mode 100644
index 00000000..9e7833c3
--- /dev/null
+++ b/client/shared/lib/httpd/bandwidth.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+echo "Content-type: text/html"
+echo ""
+echo "<html><head><meta http-equiv='Refresh' content='11,URL=./bandwidth.sh'> <link rel='stylesheet' type='text/css' href='oglive.css' /> <title>Bash as CGI </title></head><body>"
+
+echo "<TEXTAREA class='example1' NAME='contenido' ROWS='35' COLS='50' >"
+echo " DISK || NET "
+echo "Read:Write || Recv:Send "
+echo $(tail -n1 /tmp/bandwidth)
+#echo " $(dstat -dn -f 1 1 ) "
+echo "</TEXTAREA>"
+echo "</body></html>" \ No newline at end of file
diff --git a/client/shared/lib/httpd/httpd-log.sh b/client/shared/lib/httpd/httpd-log.sh
new file mode 100644
index 00000000..12e6823c
--- /dev/null
+++ b/client/shared/lib/httpd/httpd-log.sh
@@ -0,0 +1,15 @@
+
+#!/bin/bash
+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 "<h1> NO APAGAR POR FAVOR. host $(hostname -s)</h1> "
+echo "<IFRAME SRC='bandwidth.sh' WIDTH=250 HEIGHT=80> <A HREF="bandwidth.sh">link</A> </IFRAME> "
+
+
+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 "</body> \ No newline at end of file
diff --git a/client/shared/lib/httpd/httpd-menu.sh b/client/shared/lib/httpd/httpd-menu.sh
new file mode 100644
index 00000000..c5e58364
--- /dev/null
+++ b/client/shared/lib/httpd/httpd-menu.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+
+#!/bin/bash
+echo "Content-type: text/html"
+echo ""
+
+echo "<html><head><title>OpenGnsys Client</title></head><body>"
+
+$(wget http://172.17.9.205/opengnsys/varios/menubrowser.php -O /tmp/menu.tmp)
+echo "$(cat /tmp/menu.tmp)"
+
+echo "</body>
+
diff --git a/client/shared/lib/httpd/lighttpd.conf b/client/shared/lib/httpd/lighttpd.conf
new file mode 100755
index 00000000..7a11040b
--- /dev/null
+++ b/client/shared/lib/httpd/lighttpd.conf
@@ -0,0 +1,167 @@
+# Debian lighttpd configuration file
+#
+
+############ Options you really have to take care of ####################
+
+## modules to load
+# mod_access, mod_accesslog and mod_alias are loaded by default
+# all other module should only be loaded if neccesary
+# - saves some time
+# - saves memory
+
+server.modules = (
+ "mod_access",
+ "mod_alias",
+ "mod_accesslog",
+ "mod_compress",
+# "mod_rewrite",
+# "mod_redirect",
+# "mod_evhost",
+# "mod_usertrack",
+# "mod_rrdtool",
+# "mod_webdav",
+# "mod_expire",
+# "mod_flv_streaming",
+# "mod_evasive"
+)
+
+## a static document-root, for virtual-hosting take look at the
+## server.virtual-* options
+server.document-root = "/var/www/"
+
+## where to upload files to, purged daily.
+server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
+
+## where to send error-messages to
+server.errorlog = "/var/log/lighttpd/error.log"
+
+## files to check for if .../ is requested
+index-file.names = ( "index.php", "index.html",
+ "index.htm", "default.htm",
+ "index.lighttpd.html" )
+
+
+## Use the "Content-Type" extended attribute to obtain mime type if possible
+# mimetype.use-xattr = "enable"
+
+#### accesslog module
+accesslog.filename = "/var/log/lighttpd/access.log"
+
+## deny access the file-extensions
+#
+# ~ is for backupfiles from vi, emacs, joe, ...
+# .inc is often used for code includes which should in general not be part
+# of the document-root
+url.access-deny = ( "~", ".inc" )
+
+##
+# which extensions should not be handle via static-file transfer
+#
+# .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi
+static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
+
+
+######### Options that are good to be but not neccesary to be changed #######
+
+## Use ipv6 only if available. (disabled for while, check #560837)
+#include_shell "/usr/share/lighttpd/use-ipv6.pl"
+
+## bind to port (default: 80)
+# server.port = 81
+
+## bind to localhost only (default: all interfaces)
+## server.bind = "localhost"
+
+## error-handler for status 404
+#server.error-handler-404 = "/error-handler.html"
+#server.error-handler-404 = "/error-handler.php"
+
+## to help the rc.scripts
+server.pid-file = "/var/run/lighttpd.pid"
+
+##
+## Format: <errorfile-prefix><status>.html
+## -> ..../status-404.html for 'File not found'
+#server.errorfile-prefix = "/var/www/"
+
+## virtual directory listings
+dir-listing.encoding = "utf-8"
+server.dir-listing = "enable"
+
+## send unhandled HTTP-header headers to error-log
+#debug.dump-unknown-headers = "enable"
+
+### only root can use these options
+#
+# chroot() to directory (default: no chroot() )
+#server.chroot = "/"
+
+## change uid to <uid> (default: don't care)
+server.username = "www-data"
+
+## change uid to <uid> (default: don't care)
+server.groupname = "www-data"
+
+#### compress module
+compress.cache-dir = "/var/cache/lighttpd/compress/"
+compress.filetype = ("text/plain", "text/html", "application/x-javascript", "text/css")
+
+
+#### url handling modules (rewrite, redirect, access)
+# url.rewrite = ( "^/$" => "/server-status" )
+# url.redirect = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )
+
+#
+# define a pattern for the host url finding
+# %% => % sign
+# %0 => domain name + tld
+# %1 => tld
+# %2 => domain name without tld
+# %3 => subdomain 1 name
+# %4 => subdomain 2 name
+#
+# evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/"
+
+#### expire module
+# expire.url = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
+
+#### rrdtool
+# rrdtool.binary = "/usr/bin/rrdtool"
+# rrdtool.db-name = "/var/www/lighttpd.rrd"
+
+#### variable usage:
+## variable name without "." is auto prefixed by "var." and becomes "var.bar"
+#bar = 1
+#var.mystring = "foo"
+
+## integer add
+#bar += 1
+## string concat, with integer cast as string, result: "www.foo1.com"
+#server.name = "www." + mystring + var.bar + ".com"
+## array merge
+#index-file.names = (foo + ".php") + index-file.names
+#index-file.names += (foo + ".php")
+
+
+#### external configuration files
+## mimetype mapping
+include_shell "/usr/share/lighttpd/create-mime.assign.pl"
+
+## load enabled configuration files,
+## read /etc/lighttpd/conf-available/README first
+include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
+
+#### handle Debian Policy Manual, Section 11.5. urls
+## by default allow them only from localhost
+## (This must come last due to #445459)
+## Note: =~ "127.0.0.1" works with ipv6 enabled, whereas == "127.0.0.1" doesn't
+#$HTTP["remoteip"] =~ "127.0.0.1" {
+# alias.url += (
+# "/doc/" => "/usr/share/doc/",
+# "/images/" => "/usr/share/images/"
+# )
+# $HTTP["url"] =~ "^/doc/|^/images/" {
+# dir-listing.activate = "enable"
+# }
+#}
+
diff --git a/client/shared/lib/httpd/oglive.css b/client/shared/lib/httpd/oglive.css
new file mode 100644
index 00000000..71f19ce2
--- /dev/null
+++ b/client/shared/lib/httpd/oglive.css
@@ -0,0 +1,11 @@
+TEXTAREA {
+background-color: navy;
+border: black 2px solid;
+color: white;
+font-family: arial, verdana, ms sans serif;
+font-size: 8pt;
+font-weight: normal
+}
+
+ example1 {color:white; background-color:navy;
+ font-weight:bold; text-align:center;} \ No newline at end of file
diff --git a/client/shared/scripts/bootLinux b/client/shared/scripts/bootLinux
index e20b9489..d19be900 100755..120000
--- a/client/shared/scripts/bootLinux
+++ b/client/shared/scripts/bootLinux
@@ -1,35 +1 @@
-#!/bin/bash
-# Scirpt de ejemplo para iniciar Linux desde partición de arranque.
-# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin).
-
-PROG="$(basename $0)"
-if [ $# -ne 2 ]; then
- ogRaiseError $OG_ERR_FORMAT "Formato: $PROG ndisco nparticion"
- exit $?
-fi
-
-echo "[0] Inicio del proceso de arranque."
-PART=$(ogDiskToDev "$1" "$2") || exit $?
-
-echo "[10] Desmontar todos los sistemas de archivos."
-sync
-for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do
- ogUnmountAll $i 2>/dev/null
-done
-ETC=$(ogGetPath $1 $2 /etc)
-if [ -n "$ETC" ]; then
- echo "[30] Asignar nombre Linux \"$NAME\"."
- NAME=$(ogGetHostname)
- NAME=${NAME:-"pc"}
- echo "$NAME" >$ETC/hostname 2>/dev/null
- echo "[50] Actaualizar fstab con particion raiz \"$PART\"."
- awk -v P="$PART " '{ if ($2=="/") {sub(/^.*$/, P, $1)}
- print } ' $ETC/fstab >/tmp/fstab
- mv /tmp/fstab $ETC/fstab
-fi
-echo "[70] Desmontar cache local."
-ogUnmountCache
-
-echo "[90] Arrancar sistema operativo."
-ogBoot $1 $2
-
+bootOs \ No newline at end of file
diff --git a/client/shared/scripts/bootOs b/client/shared/scripts/bootOs
index 71a9fe73..78d779be 100755
--- a/client/shared/scripts/bootOs
+++ b/client/shared/scripts/bootOs
@@ -10,9 +10,16 @@ fi
echo "[0] Inicio del proceso de arranque."
PART=$(ogDiskToDev "$1" "$2") || exit $?
-NAME=$(ogGetHostname)
+NAME="$(ogGetHostname)"
NAME=${NAME:-"pc"}
OSTYPE=$(ogGetOsType $1 $2)
+# Borrar marcas de arrranque de todos los Windows instalados en el disco.
+if [ "$OSTYPE" == "Windows" ]; then
+ for (( i=1; i<=$(ogGetPartitionsNumber $1); i++ )); do
+ [ "$(ogGetOsType $1 $i)" == "Windows" ] && ogMount $1 $i &>/dev/null
+ done
+ rm -f /mnt/*/ogboot.*
+fi
echo "[10] Desmontar todos los sistemas de archivos."
sync
@@ -21,7 +28,8 @@ for (( i=1; i <= $(ogDiskToDev | wc -w); i++ )); do
done
case "$OSTYPE" in
Windows)
- echo "[30] Activar particion de Windows $PART."
+ 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"
diff --git a/client/shared/scripts/bootWindows b/client/shared/scripts/bootWindows
index e92e484a..d19be900 100755..120000
--- a/client/shared/scripts/bootWindows
+++ b/client/shared/scripts/bootWindows
@@ -1,30 +1 @@
-#!/bin/bash
-# Scirpt de ejemplo para iniciar Windows con partición de arranque.
-# (puede usarse como base para el programa de arranque usado por OpenGNSys Admin).
-
-PROG="$(basename $0)"
-if [ $# -ne 2 ]; then
- ogRaiseError $OG_ERR_FORMAT "Formato: $PROG ndisco nparticion"
- exit $?
-fi
-
-echo "[0] Inicio del proceso de arranque."
-PART=$(ogDiskToDev "$1" "$2") || exit $?
-
-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 "[30] Activar particion de Windows $PART."
-ogSetPartitionActive $1 $2
-echo "[50] Asignar nombre Windows \"$NAME\"."
-NAME=$(ogGetHostname)
-NAME=${NAME:-"pc"}
-ogSetWindowsName $1 $2 "$NAME"
-echo "[70] Desmontar cache local."
-ogUnmountCache
-
-echo "[90] Arrancar sistema operativo."
-ogBoot $1 $2
-
+bootOs \ No newline at end of file
diff --git a/client/shared/scripts/cloneRemoteFromMaster b/client/shared/scripts/cloneRemoteFromMaster
index 6516b587..cc0a936b 100755
--- a/client/shared/scripts/cloneRemoteFromMaster
+++ b/client/shared/scripts/cloneRemoteFromMaster
@@ -247,7 +247,9 @@ case $MASTERIP in
SIZEIMAGE=$(echo $INFOEXTRA | awk '{print $4}')
echo -n "[26] $INFOEXTRA = herramienta= $TOOLCLONE compresor= $COMPRESOR size= $SIZEIMAGE "
ogMount $DISKTARGET $PARTTARGET || ogFormat $DISKTARGET $PARTTARGET
- SIZEPARTTARGET=$(parted `ogDiskToDev $DISKTARGET $PARTTARGET` unit kB print | awk '{y=x; x=$4};END{print y}' | tr -d kB)
+ #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 "[29] comprobando que el tamaño de la imagen $SIZEIMAGE es menor que el de la particion destino $SIZEPARTTARGET"
# comprobamos que el tamaño de a imagen es menor que la del cliente.
if [ "$SIZEIMAGE" -lt "$SIZEPARTTARGET" ]
diff --git a/client/shared/scripts/configureOs b/client/shared/scripts/configureOs
index 64249c9b..c9660d4d 100755
--- a/client/shared/scripts/configureOs
+++ b/client/shared/scripts/configureOs
@@ -15,6 +15,9 @@
#@version 1.0.1 - Configura el sector de la particion y el gestor de windows para iniciarse desde cualquier particion.
#@author Antonio J. Doblas Viso. Universidad de Malaga.
#@date 2011-05-20
+#@version 1.0.2 - Configura el sector de la particion y el gestor de linux para iniciarse desde cualquier particion.
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2011-11-22
@@ -32,15 +35,20 @@ FLAGACTIVE=$(ogGetPartitionActive $1)
# Cambiar nombre en sistemas Windows y quitar usuario de acceso por defecto.
if [ "$(ogGetOsType $1 $2)" = "Windows" ]; then
+ # Cambiar nombre en sistemas Windows.
HOST=$(ogGetHostname)
HOST=${HOST:-"pc"}
- echo " Cambiar nombre Windows a \"$HOST\" "
ogSetWindowsName $1 $2 "$HOST"
- #ogSetWinlogonUser $1 $2 " " # Descomentar para cambiar usuario de inicio.
- # Configurar el boot sector de la particion windows.
- ogFixBootSector $1 $2
- # Configura el gestor de arranque de windows xp vista seven
+ # Descomentar la siguiente línea para cambiar usuario de inicio.
+ #ogSetWinlogonUser $1 $2 " "
+ # Configurar el boot sector de la partición Windows.
+ ogFixBootSector $1 $2
+ # Configurar el gestor de arranque de Windows XP/Vista/7.
ogWindowsBootParameters $1 $2
- # Registra en windows que la particion indicada es su nueva unidad c:\
+ # Registrar en Windows que la partición indicada es su nueva unidad C:\
ogWindowsRegisterPartition $1 $2 C $1 $2
+fi
+
+if [ "$(ogGetOsType $1 $2)" = "Linux" ]; then
+ ogGrubInstallPartition $1 $2
fi \ No newline at end of file
diff --git a/client/shared/scripts/createImage b/client/shared/scripts/createImage
index 3643d1af..3bba9d36 100755
--- a/client/shared/scripts/createImage
+++ b/client/shared/scripts/createImage
@@ -23,10 +23,12 @@
#@version 1.0 - control de errores para el ogAdmServer
#@author
#@date 2011-04-10
-#@version 1.0.1 - Fin de control de errores para el ogAdmServer
-#@author
+#@version 1.0.1 - Control de espacio requerido
+#@author Antonio J.Doblas Viso
#@date 2011-05-10
-
+ #@version 1.0.2 - Separacion de log
+#@author Antonio J.Doblas Viso
+#@date 2011-08-4
#*/ ##
# Test 1. crear una imagen en un REPO sin espacio libre.
@@ -36,6 +38,12 @@
# test 5. intentar crear una imagen, en la que no se puede reducir el FS.
TIME1=$SECONDS
+OGLOGSESSION="/tmp/session.log"
+OGLOGCOMMAND="/tmp/command.log"
+
+
+
+
PROG="$(basename $0)"
if [ $# -ne 4 ]; then
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG ndisco nparticion REPO|CACHE imagen"
@@ -47,29 +55,38 @@ IMGPROG="partclone"
IMGCOMP="lzop"
IMGEXT="img"
+echo "[1] Iniciando $0 $*" | tee -a $OGLOGSESSION $OGLOGFILE
+
+
# 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] Crear subdirectorio de la imagen \"$3 $(dirname "$4")."
+ echo "[5] Crear subdirectorio de la imagen \"$3 $(dirname "$4")." | tee -a $OGLOGSESSION $OGLOGFILE
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] Renombrar \"$IMGFILE\" por \"$IMGFILE.ant\"."
+ echo "[10] Renombrar \"$IMGFILE\" por \"$IMGFILE.ant\"." | tee -a $OGLOGSESSION $OGLOGFILE
mv "$IMGFILE" "$IMGFILE.ant"
mv "$IMGFILE.torrent" "$IMGFILE.torrent.ant" 2>/dev/null
fi
@@ -90,9 +107,11 @@ else
exit $?
fi
+echo " " > $OGLOGCOMMAND
+
# Mostrar información.
-echo "[15] $PROG: Origen=$PART, Destino=$IMGFILE"
-echo "[16] $PROG: TamañoRequerido=$SIZEREQUIRED EspacioDisponible=$SIZEFREE"
+echo "[15] $PROG: Origen=$PART, Destino=$IMGFILE" | tee -a $OGLOGSESSION $OGLOGFILE
+echo "[16] $PROG: TamañoRequerido=$SIZEREQUIRED EspacioDisponible=$SIZEFREE" | tee -a $OGLOGSESSION $OGLOGFILE
[ "$SIZEREQUIRED" -gt "$SIZEFREE" ] && exit $(ogRaiseError $OG_ERR_CACHESIZE "$3" || echo $?)
@@ -100,21 +119,25 @@ echo "[16] $PROG: TamañoRequerido=$SIZEREQUIRED EspacioDisponible=$SIZEFREE"
# TODO: que hacer si la cache no tiene espacio libre.
# Comprobar consistencia del sistema de archivos.
-echo "[20] Comprobar sistema de archivos."
+echo "[20] Comprobar sistema de archivos." | tee -a $OGLOGSESSION $OGLOGFILE
ogUnmount $1 $2
ogCheckFs $1 $2 || exit $(ogRaiseError $OG_ERR_PARTITION "ogCheckFs $1 $2" && echo $?)
-echo "[30]: Reducir sistema de archivos."
+echo " " > $OGLOGCOMMAND
+
+echo "[30]: Reducir sistema de archivos." | tee -a $OGLOGSESSION $OGLOGFILE
ogReduceFs $1 $2 || exit $(ogRaiseError $OG_ERR_REDUCEFS "$1 $2"; echo $?)
+echo " " > $OGLOGCOMMAND
+
# Crear la imagen.
-echo "[40] Crear imagen con: ogCreateImage $1 $2 $3 $4 $IMGPROG $IMGCOMP"
+echo "[40] Crear imagen con: 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 $?)
-echo "[90] Extender sistema de archivos."
+echo "[90] Extender sistema de archivos." | tee -a $OGLOGSESSION $OGLOGFILE
ogExtendFs $1 $2 || exit $(ogRaiseError $OG_ERR_EXTENDFS "$1 $2"; echo $?)
TIME=$[SECONDS-TIME1]
-echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s"
+echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s" | tee -a $OGLOGSESSION $OGLOGFILE
diff --git a/client/shared/scripts/deployImage b/client/shared/scripts/deployImage
index 16a403cc..e5a2bec3 100755
--- a/client/shared/scripts/deployImage
+++ b/client/shared/scripts/deployImage
@@ -1,6 +1,31 @@
#!/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
+
+OGLOGSESSION="/tmp/session.log"
+OGLOGCOMMAND="/tmp/command.log"
+
+
PROG="$(basename $0)"
if [ $# -lt 4 ]; then
ogRaiseError $OG_ERR_FORMAT "$MSG_FORMAT: $PROG REPO imagen ndisco nparticion [ UNICAST|MULTICAST|TORRENT ] [opciones protocolo]"
@@ -8,20 +33,20 @@ if [ $# -lt 4 ]; then
fi
#controlar param1 REPO
-echo "Realizando un updateCache REPO $2.img $5 $6"
-updateCache REPO $2.img $5 $6
+echo "[1] Realizando un updateCache REPO $2.img $5 $6" | tee -a $OGLOGSESSION $OGLOGFILE
+updateCache REPO $2.img $5 $6 | tee -a $OGLOGCOMMAND
RETVAL=$?
if [ "$RETVAL" != "0" ]
then
- echo "fin del updateCache REPO $2.img $5 $6 con error $RETVAL"
+ echo "[49] Fin del updateCache REPO $2.img $5 $6 con error $RETVAL" | tee -a $OGLOGSESSION $OGLOGFILE
# RC=15 No hay cache
# RC=16 no hay espacio sufiente
exit $RETVAL
else
- echo "iniciando un ogRestore CACHE desde deployImage"
- ogRestoreImage CACHE /$2 $3 $4
+ echo "[50] Iniciando un ogRestore CACHE desde deployImage" | tee -a $OGLOGSESSION $OGLOGFILE
+ ogRestoreImage CACHE /$2 $3 $4 &>> $OGLOGCOMMAND
RETVAL=$?
- [ "$RETVAL" == "0" ] && configureOs $3 $4
+ [ "$RETVAL" == "0" ] && configureOs $3 $4 | tee -a $OGLOGCOMMAND
exit $RETVAL
fi \ No newline at end of file
diff --git a/client/shared/scripts/listPartitions b/client/shared/scripts/listPartitions
new file mode 100755
index 00000000..6f9c318f
--- /dev/null
+++ b/client/shared/scripts/listPartitions
@@ -0,0 +1,3 @@
+#!/bin/bash
+ogListPartitions "$@" | sed 's/\(EMPTY:0 \)*$//'
+
diff --git a/client/shared/scripts/restoreImage b/client/shared/scripts/restoreImage
index a01f1a49..f08c0415 100755
--- a/client/shared/scripts/restoreImage
+++ b/client/shared/scripts/restoreImage
@@ -76,14 +76,10 @@ ogRestoreImage "$@" || exit $?
# Restaurar tamaño.
echo "[80] Extender sistema de archivos."
ogExtendFs $3 $4
-# Cambiar nombre en sistemas Windows y quitar usuario de acceso por defecto.
-if [ "$(ogGetOsType $3 $4)" = "Windows" ]; then
- HOST=$(ogGetHostname)
- HOST=${HOST:-"pc"}
- echo "[90] Cambiar nombre Windows a \"$HOST\" y usuario de acceso."
- ogSetWindowsName $3 $4 "$HOST"
- #ogSetWinlogonUser $3 $4 " " # Descomentar para cambiar usuario de inicio.
-fi
+# Llamar al script de post-configuración del sistema operativo.
+echo "[90] Post-configuracion de aranque del sistema."
+configureOs $3 $4
+
TIME=$[SECONDS-TIME1]
echo "[100] Duracion de la operacion $[TIME/60]m $[TIME%60]s"
diff --git a/client/shared/scripts/runAplicationX.sh b/client/shared/scripts/runAplicationX.sh
new file mode 100755
index 00000000..85f96814
--- /dev/null
+++ b/client/shared/scripts/runAplicationX.sh
@@ -0,0 +1,8 @@
+#/bin/bash
+/usr/X11R6/bin/Xvesa :0 -ac -shadow -screen 1024x768x24 -br -mouse /dev/input/mice &
+/bin/sleep 0.1
+export DISPLAY=:0
+#/usr/bin/lxde-logout
+#/usr/bin/openbox
+/usr/bin/roxterm
+#/usr/sbin/gparted
diff --git a/client/shared/scripts/runhttplog.sh b/client/shared/scripts/runhttplog.sh
new file mode 100755
index 00000000..04d3e530
--- /dev/null
+++ b/client/shared/scripts/runhttplog.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+echo "export OGLOGCOMMAND=/tmp/command.log" >> /etc/profile.d/loadenviron.sh
+echo "export OGLOGSESSION=/tmp/session.log" >> /etc/profile.d/loadenviron.sh
+ export OGLOGCOMMAND=/tmp/command.log
+ export OGLOGSESSION=/tmp/session.log
+
+#httd-log-status
+cp /etc/lighttpd/lighttpd.conf /etc/lighttpd/lighttpd.conf.back
+cp /opt/opengnsys/lib/httpd/lighttpd.conf /etc/lighttpd/
+cp /etc/lighttpd/conf-enabled/10-cgi.conf /etc/lighttpd/conf-enabled/10-cgi.conf.back
+cp /opt/opengnsys/lib/httpd/10-cgi.conf /etc/lighttpd/conf-enabled/
+/etc/init.d/lighttpd start
+chmod 755 /opt
+cp /opt/opengnsys/lib/httpd/* /usr/lib/cgi-bin
+#TODO:
+dstat -dn 10 > /tmp/bandwidth &
+#Se pasan al loadenviro para su uso en ssh
+#export OGLOGSESSION=/tmp/session.log
+#export OGLOGCOMMAND=/tmp/command.log
+touch $OGLOGCOMMAND
+touch $OGLOGSESSION
+touch ${OGLOGCOMMAND}.tmp
+chmod 777 $OGLOGCOMMAND
+chmod 777 $OGLOGSESSION
+chmod 777 ${OGLOGCOMMAND}.tmp
+touch /tmp/menu.tmp
+chmod 777 /tmp/menu.tmp
+echo "WAITING" >> $OGLOGSESSION
+# http-log-status \ No newline at end of file
diff --git a/client/shared/scripts/updateBootCache b/client/shared/scripts/updateBootCache
index af2267a2..f3edae7c 100755
--- a/client/shared/scripts/updateBootCache
+++ b/client/shared/scripts/updateBootCache
@@ -1,7 +1,54 @@
#!/bin/bash
-OGBTFTP="/opt/og2fs/tftpboot/ogclient/"
+
+#/**
+# updateBootCache
+#@brief acelerador arranque pxe. incorpora a la cache el initrd y el kernel.
+#@param 1
+#@param ejemplo:
+#@return
+#@exception OG_ERR_FORMAT formato incorrecto.
+#@note
+#@todo:
+#@version 1.0.1 - requiere el gestor de arranque grub2dos
+#@author Antonio J. Doblas Viso. Universidad de Malaga.
+#@date 2010/07/27
+#*/ ##
+
+
+
+OGBTFTP="/opt/oglive/tftpboot/ogclient"
ogMountCache || exit 1
-echo $OGCAC
+
[ -d $OGCAC/boot ] || mkdir -p $OGCAC/boot
-[ -f ${OGCAC}/boot/ogvmlinuz ] || cp ${OGBTFTP}ogvmlinuz ${OGCAC}/boot/ogvmlinuz
-[ -f ${OGCAC}/boot/oginitrd.img ] || cp ${OGBTFTP}oginitrd.img ${OGCAC}/boot/oginitrd.img \ No newline at end of file
+
+ # comparamos los del server
+ SERVERVMLINUZ=`cat ${OGBTFTP}/ogvmlinuz.sum`
+ SERVERINITRD=`cat ${OGBTFTP}/oginitrd.img.sum`
+
+ #comparamos los de la cache
+ CACHEVMLINUZ=`cat ${OGCAC}/boot/ogvmlinuz.sum`
+ CACHEINITRD=`cat ${OGCAC}/cache/boot/oginitrd.img.sum`
+
+ echo "MD5 on SERVER: $SERVERVMLINUZ $SERVERINITRD"
+ echo "MD5 on CACHE: $CACHEVMLINUZ $CACHEINITRD"
+
+
+ if [ "$CACHEVMLINUZ" != "$SERVERVMLINUZ" ]
+ then
+ echo "ogvmlinuz updating"
+ cp ${OGBTFTP}ogvmlinuz ${OGCAC}/boot/ogvmlinuz
+ cp ${OGBTFTP}ogvmlinuz.sum ${OGCAC}/boot/ogvmlinuz.sum
+ DOREBOOT=true
+ fi
+ if [ "$CACHEINITRD" != "$SERVERINITRD" ]
+ then
+ echo "oginitrd updating"
+ cp ${OGBTFTP}oginitrd.img ${OGCAC}/boot/oginitrd.img
+ cp ${OGBTFTP}oginitrd.img.sum ${OGCAC}/boot/oginitrd.img.sum
+ DOREBOOT=true
+ fi
+
+echo $DOREBOOT
+# [ "$DOREBOOT" == "true" ] && busybox reboot -f
+
+
diff --git a/client/shared/scripts/updateCache b/client/shared/scripts/updateCache
index bebb1153..2b7f2c3f 100755
--- a/client/shared/scripts/updateCache
+++ b/client/shared/scripts/updateCache
@@ -1,17 +1,29 @@
#!/bin/bash
-# Scirpt para la actualizacion de datos en la cache.
-# Versión: 0.9.1, 2008/03/17, - integracion eac
-# Versión: 0.9.2, 2010/07/27, - integracion opengnsys
-
-
-
-#1 REPO
-#2 nombre del fichero con su extension, tipo /imagen1.img o /ubuntu.iso
-#3 Protocolo TORRENT | MULTICAST | UNICAST
-#4 opciones protocolo
-#5 opciones de update cache
+#/**
+# updateCache
+#@brief Actualiza la cache del cliente con imagen o fichero iso.
+#@param 1 REPO Origen del fichero. -accesible por nfs-samba-
+#@param 2 str_fichero nombre del fichero a actualizar.
+#@param 3 str_protoco. TORRENT | MULTICAST | UNICAST.
+#@param 4 str_opcionesprotocolo
+#@param 4 str_opcionesupdatecache
+#@ejemplo: oneRemoteFromMaster 172.17.36.11 CACHE /imagen1 9000:full-duplex:239.194.17.36:70M:50:100 1 1 partclone lzop
+#@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.1 - Control de espacio requerido
+#@author Antonio J.Doblas Viso
+#@date 2011-05-10
+#*/ ##
PROG="$(basename $0)"
if [ $# -lt 3 ]; then
@@ -19,9 +31,9 @@ if [ $# -lt 3 ]; then
exit $?
fi
-REPOSITORIO=$1
-PROTOCOLO=$3
-OPTPROTOCOLO=$4
+REPOSITORIO="$1"
+PROTOCOLO="$3"
+OPTPROTOCOLO="$4"
REPOIP=$(ogGetRepoIp)
echo $REPOSITORIO $REPOIP $PROTOCOLO $OPTPROTOCOLO
# Si el repositorio local CACHE no existe salimos.
@@ -39,7 +51,7 @@ ogUpdateCacheIsNecesary $1 $2; RETVAL=$?
CACHESIZEFREE=$(ogGetFreeSize `ogFindCache`)
-FILESIZE=$(ls -sk $(ogGetPath $1 $2) | cut -f1 -d" ")
+FILESIZE=$(ls -sk $(ogGetPath $REPOSITORIO "$2") | cut -f1 -d" ")
if [ "$FILESIZE" -ge "$CACHESIZEFREE" ]
then
@@ -48,32 +60,35 @@ then
exit $?
fi
-ogUpdateCacheIsNecesary $1 $2; RETVAL=$?
+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
-ogMountCache
+ogMountCache >/dev/null
## Si no existe, crear subdirectorio para el fichero en la cache.
-IMGDIR=$(ogGetParentPath "$1" "/$2")
+IMGDIR=$(ogGetParentPath CACHE "/$2")
if [ $? != 0 ]; then
echo "[5] Crear subdirectorio del fichero \"$2 $(dirname "$2")."
- ogMakeDir "CACHE" $(dirname "/$2")
- IMGDIR=$(ogGetParentPath "$1" "/$2") || exit $?
+ ogMakeDir CACHE $(dirname "/$2")
+ IMGDIR=$(ogGetParentPath CACHE "/$2") || exit $?
fi
-
-
case "$PROTOCOLO" in
torrent | TORRENT )
- echo "ogCopyFile $1 $2.torrent absolute $OGCAC$OGIMG"
- ogCopyFile $1 $2.torrent $OGCAC$OGIMG
+ echo "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"
#TODO: comprobar que el tracker definido en el fichero es correcto.
#TODO comprobar que el fichero torrent está en cache
- echo "ogTorrentStart CACHE $2.torrent $4"
- ogTorrentStart CACHE $2.torrent $4
+ # retardamos el inicio -aleatorio de 0 a 120 segundos- al tracker para gestionar mas de +-40 equipos
+ P2PWAIT=$[ ( $RANDOM % 120 ) + 1 ]
+ echo "Esperando $P2PWAIT segundos para iniciar ogTorrentStart CACHE $2.torrent $4"
+ sleep $P2PWAIT
+ ogTorrentStart CACHE "$2.torrent" $4
;;
multicast | MULTICAST )
echo "determinando puerto principal y auxiliar."
@@ -86,7 +101,7 @@ case "$PROTOCOLO" in
echo "comprobando puerto $PORTAUX en $REPOIP (sesion multicast en puerto $PORT) "
if (nmap -n -sU -p $PORTAUX $REPOIP | grep open)
then
- ogMcastReceiverFile $PORT CACHE $2
+ ogMcastReceiverFile $PORT CACHE "$2"
else
# TODO ticket 379 Realizar la petición basada en identificador de operacion
echo "solicita la apertura: hose $REPOIP 2009 --out sh -c "echo -ne START_MULTICAST $2 $OPTPROTOCOLO""
@@ -95,7 +110,7 @@ case "$PROTOCOLO" in
sleep 10
if (nmap -n -sU -p $PORTAUX $REPOIP | grep open)
then
- ogMcastReceiverFile $PORT CACHE $2
+ ogMcastReceiverFile $PORT CACHE "$2"
else
echo "la peticion ha fallado: hose $REPOIP 2009 --out sh -c echo -ne START_MULTICAST $2 $OPTPROTOCOLO"
exit 1
@@ -104,13 +119,14 @@ case "$PROTOCOLO" in
;;
unicast | UNICAST )
echo "unicast"
- ogCopyFile $1 $2 $OGCAC$OGIMG
+ ogCopyFile $REPOSITORIO "$2" "$IMGDIR"
;;
esac
-ogUpdateCacheIsNecesary $1 $2; RETVAL=$?
+ogUpdateCacheIsNecesary $REPOSITORIO "$2"; RETVAL=$?
# si RETVAL=0 => actualizamos si RETVAL=1 no actaulizasmo-exit 0 || si RETVAL>2 exit 1
[ "$RETVAL" == "0" ] && exit 1
[ "$RETVAL" == "1" ] && exit 0
-[ "$RETVAL" -gt "1" ] && exit 1 \ No newline at end of file
+[ "$RETVAL" -gt "1" ] && exit 1
+
diff --git a/doc/CHANGELOG.es.txt b/doc/CHANGELOG.es.txt
index e7c1cfaa..d1a4a398 100644
--- a/doc/CHANGELOG.es.txt
+++ b/doc/CHANGELOG.es.txt
@@ -2,6 +2,47 @@ LISTA DE CAMBIOS CHANGELOG.es.ext
========================================
+Lista de cambios incluidos en OpenGnSys 1.0.2
+---------------------------------------------
+
+Tickets resueltos en módulo OpenGnSys Cloning Engine:
+#14 Crear funciones de línea de comando que permitan la gestión de los grupos de PCs (duplicado)
+#370 ogGetMacAddress en host multiples interfaces siempre usa datos eth0 aunque no esté activa
+#393 En acceso ssh a los clientes, no reconoce funciones de valores de la interfaz de red
+#394 crearImagen y updateCache debe considerar espacio libre para almacenar la imagen
+#402 Gestor de arranque para Windows 7/Vista/XP/2000
+#450 Instalar Grub en sistemas Linux restaurados
+#460 updateCache usando torrent en una operación con más de 60 clientes produce error inesperado del binario ctorrent en algunos equipos
+
+Tickets resueltos en módulo OpenGnSys Client:
+#371 ogAdmClient debería realizar proceso de actualización a la BD después de particionado, restauración (duplicado de #265)
+#421 boot-tools-httd-log (mejora)
+#422 boot-tools: Separar los log normales de los de seguimiento
+#430 RAMFS del boot-tools autogestión sobre la caché: Instalación y Actualización
+#432 Escalar servicios de almacenamiento
+#444 Sustitución definitiva de PXELinux por Grub4Dos en el arranque de clientes (heredado de #134)
+#451 Fase inicial para apagado programado de clientes inactivos
+
+Tickets resueltos en módulo OpenGnSys Server:
+#425 Evitar que los registros de logs aumenten indefinidamente
+#428 Modificar la clave por defecto de acceso a Samba desde los clientes
+#448 Restauración Multicast en línea de comandos
+
+Tickets resueltos en módulo OpenGnSys Web Admin Console:
+#296 Consola Web: particionar y formatear no va si hay partición de linux-swap (no se resolverá)
+#341 Control del tamaño de disco duro en consola web
+#423 Netboot no configura el parámetro de IP serverADM
+#434 Soporte para particiones lógicas en el asistente de particionado
+#443 Usar HTTPS en la consola web
+#458 Interfaz RestaurarImagen no pasa los parametros correctos a script updateCache
+
+Tickets resueltos en módulo OpenGnSys Installer:
+#464 opengnsys_update de la 1.0.1 a la 1.0.2 no actualiza el ogAdmClient.cfg
+
+Tickets genéricos resueltos:
+#446 Integración de OpenGnSys 1.0.2 en rama principal
+
+
Lista de cambios incluidos en OpenGnSys 1.0.1
---------------------------------------------
@@ -59,6 +100,7 @@ Tickets resueltos en módulo OpenGnSys Cloning Engine:
#64 Selección de aplicaciones de clonación
#264 Error al crear la caché
#286 Parámetro debug para el engine
+#287 cloneRemoteFromMaster unicast/multicast
#291 Creación de imagenes desde el modo user
#298 Tratamientos de bloqueos de imágenes para solucionar problemas de concurrencia (mejora)
#305 Integración engine versión 1.0
@@ -216,13 +258,13 @@ Tickets resueltos en módulo OpenGnSys Client:
Tickets resueltos en módulo OpenGnSys Server:
#117 Añadir IP o MAC del cliente rechazado
#146 Fallo echo consola
-#187 Mayor información en los logs de los servicios
+#187 Mayor información en los logs de los servicios (duplicado)
Tickets resueltos en módulo OpenGnSys Web Admin Console
#122 Consola Web: Errores en comando "Particionar y Formatear"
#148 La consola no permite clonar la partición de recuperación de Windows 7
#158 controlar inconsistencias
-#160 Problemas particionando y formateando desde consola
+#160 Problemas particionando y formateando desde consola (ticket no válido)
#175 Consola Web: No se ven los servidores OpenGnSys
Tickets resueltos en módulo OpenGnSys Installer:
@@ -271,14 +313,14 @@ Tickets resueltos en módulo OpenGnSys Cloning Engine:
#75 Arrancar sistemas Linux en partición distinta a la original
#85 ogCreateImage no crea los subdirectorios del path indicado
#86 ogRestoreImage siempre añade a la imagen pasada como parámetro la subcadena ".img"
-#87 engine no se adapta a la sintaxis doxygen
+#87 Engine no se adapta a la sintaxis Doxygen
#98 ogGetParent no devuelve salida correcta para el argumento CACHE
#99 ogGetIpAddress obtiene la ip a partir del leases obtenido del dhcp
#101 trunk Disk.lib error linea 445
#109 ogSetPartitionId no modifica bien el identificador de la partición
#110 ogCreatePartitions no llama a ogTypeToId
#111 ogFormatFS no reconoce el tipo de partitición CACHE
-#121 ogCreatePartitions revisión 813
+#121 ogCreatePartitions revisión 813 (no se resolverá)
Tickets resueltos en módulo OpenGnSys Client:
#11 Páginas de inicio estilo rembo
@@ -292,7 +334,7 @@ Tickets resueltos en módulo OpenGnSys Client:
#67 Cliente QT no importa NFS
#68 Cliente no encuentra el subdirectorio de logs
#72 Error en el browser al intentar cargar la libpng12.so.0
-#84 oginit considera siempre al servidor dhcp como si fuese el servidor opengnsys
+#84 oginit considera siempre al servidor DHCP como si fuese el servidor OpenGnSys
#105 El browser del cliente no detecta algunos ratones
#106 Añadir al busybox del initrd soporte de configuración de red (no se resolverá)
#118 Función ogGetIpAddress no obtiene la ip adecuadamente
@@ -309,7 +351,7 @@ Tickets resueltos en módulo OpenGnSys Web Admin Console:
#76 Problemas al crear tareas y trabajos nuevos (tarea)
#77 No se pueden añadir comandos a tareas, trabajos, etc. (tarea)
#78 No funciona la consola web (tarea)
-#80 puerto por defecto del servidor opengnsys en el web admin
+#80 Puerto por defecto del servidor opengnsys en el web admin
#97 Instalador no deja bien configurado controlacceso.php
#113 Incluir ayuda Doxygen en la consola web
#119 Mensaje de aviso en el browser al elegir opción de menú
diff --git a/doc/VERSION.txt b/doc/VERSION.txt
index 0b7640f7..2a17fb2f 100644
--- a/doc/VERSION.txt
+++ b/doc/VERSION.txt
@@ -1 +1 @@
-OpenGnSys 1.0.1
+OpenGnSys 1.0.2
diff --git a/installer/opengnsys_installer.sh b/installer/opengnsys_installer.sh
index f910dab1..c6aa77c5 100755
--- a/installer/opengnsys_installer.sh
+++ b/installer/opengnsys_installer.sh
@@ -1,49 +1,38 @@
#!/bin/bash
#####################################################################
-####### Script instalador OpenGnsys
+####### Script instalador OpenGnSys
####### autor: Luis Guillén <lguillen@unizar.es>
#####################################################################
-#### AVISO: Editar configuración de acceso por defecto a la Base de Datos.
+#### AVISO: Editar configuración de acceso por defecto.
MYSQL_ROOT_PASSWORD="passwordroot" # Clave root de MySQL
-OPENGNSYS_DATABASE="ogAdmBD" # Nombre de la base datos
-OPENGNSYS_DB_USER="usuog" # Usuario de acceso
-OPENGNSYS_DB_PASSWD="passusuog" # Clave del usuario
+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.
-#### configuración de acceso smb para clientes OG.
-OPENGNSYS_CLIENT_USER="opengnsys" # Nombre del usuario
-OPENGNSYS_CLIENT_PASSWD="og" # Clave del usuario opengnsys
+OPENGNSYS_DATABASE="ogAdmBD" # Nombre de la base datos
+OPENGNSYS_CLIENT_USER="opengnsys" # Usuario del cliente para acceso remoto
# Sólo ejecutable por usuario root
-if [ "$(whoami)" != 'root' ]
-then
+if [ "$(whoami)" != 'root' ]; then
echo "ERROR: this program must run under root privileges!!"
exit 1
fi
-# Detectar sistema operativo del servidor (debe soportar LSB).
-OSDISTRIB=$(lsb_release -is 2>/dev/null)
-# Array con las dependencias que deben estar instaladas, según de la distribución detectada.
-case "$OSDISTRIB" in
- Ubuntu) DEPENDENCIES=( subversion apache2 php5 libapache2-mod-php5 mysql-server php5-mysql nfs-kernel-server dhcp3-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 )
- ;;
- *) echo "ERROR: Distribution not supported by OpenGnSys."
- exit 1 ;;
-esac
-
# Comprobar si se ha descargado el paquete comprimido (USESVN=0) o sólo el instalador (USESVN=1).
PROGRAMDIR=$(readlink -e $(dirname "$0"))
OPENGNSYS_SERVER="www.opengnsys.es"
if [ -d "$PROGRAMDIR/../installer" ]; then
- USESVN=0
+ USESVN=0
else
- USESVN=1
+ USESVN=1
fi
SVN_URL="http://$OPENGNSYS_SERVER/svn/trunk/"
@@ -58,26 +47,98 @@ OPENGNSYS_DB_CREATION_FILE=opengnsys/admin/Database/ogAdmBD.sql
#####################################################################
+####### Funciones de configuración
+#####################################################################
+
+# Generar variables de configuración del instalador
+# Variables globales:
+# - OSDISTRIB, OSCODENAME - datos de la distribución Linux
+# - DEPENDENCIES - array de dependencias que deben estar instaladas
+# - UPDATEPKGLIST, INSTALLPKGS, CHECKPKGS - comandos para gestión de paquetes
+# - APACHEINIT, APACHECFGDIR, APACHEUSER, APACHEGROUP - arranque y configuración de Apache
+# - ENABLEMOD, ENABLESITE - habilitar módulo Apache y sitio web
+# - DHCPINIT, DHCPCFGDIR - arranque y configuración de DHCP
+# - SAMBAINIT, SAMBACFGDIR - arranque y configuración de Samba
+# - TFTPCFGDIR - configuración de TFTP
+function autoConfigure()
+{
+# Detectar sistema operativo del servidor (debe soportar LSB).
+OSDISTRIB=$(lsb_release -is 2>/dev/null)
+OSCODENAME=$(lsb_release -cs 2>/dev/null)
+
+# Configuración según la distribución de Linux.
+case "$OSDISTRIB" in
+ Ubuntu) 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 )
+ UPDATEPKGLIST="apt-get update"
+ INSTALLPKG="apt-get -y install --force-yes"
+ CHECKPKG="dpkg -s \$package 2>/dev/null | grep Status | grep -qw install"
+ APACHEINIT=/etc/init.d/apache2
+ APACHECFGDIR=/etc/apache2
+ APACHEUSER="www-data"
+ APACHEGROUP="www-data"
+ ENABLEMOD="a2enmod"
+ ENABLESITE="a2ensite"
+ DHCPINIT=/etc/init.d/isc-dhcp-server
+ DHCPCFGDIR=/etc/dhcp
+ SAMBAINIT=/etc/init.d/smbd
+ SAMBACFGDIR=/etc/samba
+ TFTPCFGDIR=/var/lib/tftpboot
+ ;;
+ "") echo "ERROR: Unknown Linux distribution, please install \"lsb_release\" command."
+ exit 1 ;;
+ *) echo "ERROR: Distribution not supported by OpenGnSys."
+ exit 1 ;;
+esac
+}
+
+# Cargar lista de paquetes del sistema y actualizar algunas variables de configuración
+# dependiendo de la versión instalada.
+function updatePackageList()
+{
+local DHCPVERSION
+
+# Si es necesario, actualizar la lista de paquetes disponibles.
+[ -n "$UPDATEPKGLIST" ] && eval $UPDATEPKGLIST
+
+# Configuración personallizada de algunos paquetes.
+case "$OSDISTRIB" in
+ Ubuntu) # Postconfiguación personalizada para Ubuntu.
+ # Configuración para DHCP v3.
+ DHCPVERSION=$(apt-cache show dhcp.?-server$ | \
+ awk '/Version/ {print substr($2,1,1);}' | \
+ sort -n | tail -1)
+ if [ $DHCPVERSION = 3 ]; then
+ DEPENDENCIES=${DEPENDENCIES[@]/isc-dhcp-server/dhcp3-server}
+ DHCPINIT=/etc/init.d/dhcp3-server
+ DHCPCFGDIR=/etc/dhcp3
+ fi
+ ;;
+esac
+}
+
+
+#####################################################################
####### Algunas funciones útiles de propósito general:
#####################################################################
+
function getDateTime()
{
- date "+%Y%m%d-%H%M%S"
+ date "+%Y%m%d-%H%M%S"
}
# Escribe a fichero y muestra por pantalla
function echoAndLog()
{
- echo "$1"
- FECHAHORA=`getDateTime`
- echo "$FECHAHORA;$SSH_CLIENT;$1" >> $LOG_FILE
+ echo "$1"
+ local DATETIME=`getDateTime`
+ echo "$DATETIME;$SSH_CLIENT;$1" >> $LOG_FILE
}
function errorAndLog()
{
- echo "ERROR: $1"
- FECHAHORA=`getDateTime`
- echo "$FECHAHORA;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
+ echo "ERROR: $1"
+ local DATETIME=`getDateTime`
+ echo "$DATETIME;$SSH_CLIENT;ERROR: $1" >> $LOG_FILE
}
# comprueba si el elemento pasado en $2 esta en el array $1
@@ -123,7 +184,7 @@ function checkPackage()
exit 1
fi
echoAndLog "${FUNCNAME}(): checking if package $package exists"
- dpkg -s $package &>/dev/null | grep Status | grep -qw install
+ eval $CHECKPKG
if [ $? -eq 0 ]; then
echoAndLog "${FUNCNAME}(): package $package exists"
return 0
@@ -199,8 +260,8 @@ function installDependencies()
OLD_DEBIAN_FRONTEND=$DEBIAN_FRONTEND
export DEBIAN_FRONTEND=noninteractive
- echoAndLog "${FUNCNAME}(): now ${string_deps} will be installed"
- apt-get -y install --force-yes ${string_deps}
+ echoAndLog "${FUNCNAME}(): now $string_deps will be installed"
+ eval $INSTALLPKG $string_deps
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error installing dependencies"
return 1
@@ -219,25 +280,25 @@ function backupFile()
exit 1
fi
- local fichero=$1
- local fecha=`date +%Y%m%d`
+ local file="$1"
+ local dateymd=`date +%Y%m%d`
- if [ ! -f $fichero ]; then
- errorAndLog "${FUNCNAME}(): file $fichero doesn't exists"
+ if [ ! -f "$file" ]; then
+ errorAndLog "${FUNCNAME}(): file $file doesn't exists"
return 1
fi
- echoAndLog "${FUNCNAME}(): realizando backup de $fichero"
+ echoAndLog "${FUNCNAME}(): making $file backup"
# realiza una copia de la última configuración como last
- cp -p $fichero "${fichero}-LAST"
+ cp -a "$file" "${file}-LAST"
# si para el día no hay backup lo hace, sino no
- if [ ! -f "${fichero}-${fecha}" ]; then
- cp -p $fichero "${fichero}-${fecha}"
+ if [ ! -f "${file}-${dateymd}" ]; then
+ cp -a "$file" "${file}-${dateymd}"
fi
- echoAndLog "${FUNCNAME}(): backup realizado"
+ echoAndLog "${FUNCNAME}(): $file backup success"
}
#####################################################################
@@ -369,6 +430,8 @@ function mysqlImportSqlFileToDb()
local database="$2"
local sqlfile="$3"
local tmpfile=$(mktemp)
+ local i=0
+ local dev=""
local status
if [ ! -f $sqlfile ]; then
@@ -376,10 +439,17 @@ function mysqlImportSqlFileToDb()
return 1
fi
- echoAndLog "${FUNCNAME}(): importing sql file to ${database}..."
+ echoAndLog "${FUNCNAME}(): importing SQL file to ${database}..."
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
+ for dev in ${DEVICE[*]}; do
+ if [ "${DEVICE[i]} == $DEFAULTDEV" ]; then
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
+ -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
+ $sqlfile > $tmpfile
+ fi
+ let i++
+ done
mysql -uroot -p"${root_password}" --default-character-set=utf8 "${database}" < $tmpfile
status=$?
rm -f $tmpfile
@@ -507,29 +577,39 @@ function checkNetworkConnection()
# Obtener los parámetros de red de la interfaz por defecto.
function getNetworkSettings()
{
- # Variables globales definidas:
- # - SERVERIP: IP local del servidor.
- # - NETIP: IP de la red.
- # - NETMASK: máscara de red.
- # - NETBROAD: IP de difusión de la red.
- # - ROUTERIP: IP del router.
- # - DNSIP: IP del servidor DNS.
-
- local MAINDEV
-
- echoAndLog "${FUNCNAME}(): Detecting default network parameters."
- MAINDEV=$(ip -o link show up | awk '!/loopback/ {d=d$2} END {sub(/:.*/,"",d); print d}')
- if [ -z "$MAINDEV" ]; then
- errorAndLog "${FUNCNAME}(): Network device not detected."
+ # Arrays globales definidas:
+ # - DEVICE: nombres de dispositivos de red activos.
+ # - SERVERIP: IPs locales del servidor.
+ # - NETIP: IPs de redes.
+ # - NETMASK: máscaras de red.
+ # - NETBROAD: IPs de difusión de redes.
+ # - ROUTERIP: IPs de routers.
+ # Otras variables globales:
+ # - DEFAULTDEV: dispositivo de red por defecto.
+ # - DNSIP: IP del servidor DNS principal.
+
+ local i=0
+ local dev=""
+
+ echoAndLog "${FUNCNAME}(): Detecting network parameters."
+ DEVICE=( $(ip -o link show up | awk '!/loopback/ {sub(/:.*/,"",$2); print $2}') )
+ if [ -z "$DEVICE" ]; then
+ errorAndLog "${FUNCNAME}(): Network devices not detected."
exit 1
fi
- SERVERIP=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
- NETMASK=$(LANG=C ifconfig $MAINDEV | awk '/Mask/ {sub(/.*:/,"",$4); print $4}')
- NETBROAD=$(ip -o addr show dev $MAINDEV | awk '$3~/inet$/ {print ($6)}')
- NETIP=$(netstat -nr | grep $MAINDEV | awk '$1!~/0\.0\.0\.0/ {if (n=="") n=$1} END {print n}')
- ROUTERIP=$(netstat -nr | awk '$1~/0\.0\.0\.0/ {print $2}')
+ 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}')
+ 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}')
+ DEFAULTDEV=${DEFAULTDEV:-"$dev"}
+ let i++
+ fi
+ done
DNSIP=$(awk '/nameserver/ {print $2}' /etc/resolv.conf | head -n1)
- if [ -z "$NETIP" -o -z "$NETMASK" ]; then
+ if [ -z "${NETIP}[*]" -o -z "${NETMASK[*]}" ]; then
errorAndLog "${FUNCNAME}(): Network not detected."
exit 1
fi
@@ -537,11 +617,11 @@ function getNetworkSettings()
# Variables de ejecución de Apache
# - APACHE_RUN_USER
# - APACHE_RUN_GROUP
- if [ -f /etc/apache2/envvars ]; then
- source /etc/apache2/envvars
+ if [ -f $APACHECFGDIR/envvars ]; then
+ source $APACHECFGDIR/envvars
fi
- APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"}
- APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"}
+ APACHE_RUN_USER=${APACHE_RUN_USER:-"$APACHEUSER"}
+ APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"$APACHEGROUP"}
}
@@ -551,18 +631,16 @@ function getNetworkSettings()
function tftpConfigure()
{
- local basetftp=/var/lib/tftpboot
-
echoAndLog "${FUNCNAME}(): Configuring TFTP service."
# reiniciamos demonio internet ????? porque ????
/etc/init.d/openbsd-inetd start
# preparacion contenedor tftpboot
- cp -ar /usr/lib/syslinux/ ${basetftp}/syslinux
- cp -a /usr/lib/syslinux/pxelinux.0 ${basetftp}
+ cp -ar /usr/lib/syslinux/ $TFTPCFGDIR/syslinux
+ cp -a /usr/lib/syslinux/pxelinux.0 $TFTPCFGDIR
# prepamos el directorio de la configuracion de pxe
- mkdir -p ${basetftp}/pxelinux.cfg
- cat > ${basetftp}/pxelinux.cfg/default <<EOF
+ mkdir -p $TFTPCFGDIR/pxelinux.cfg
+ cat > $TFTPCFGDIR/pxelinux.cfg/default <<EOF
DEFAULT syslinux/vesamenu.c32
MENU TITLE Aplicacion GNSYS
@@ -589,122 +667,20 @@ function testPxe ()
########################################################################
-## Configuracion servicio NFS
-########################################################################
-
-# ADVERTENCIA: usa variables globales NETIP y NETMASK!
-function nfsConfigure()
-{
- echoAndLog "${FUNCNAME}(): Config nfs server."
-
- backupFile /etc/exports
-
- nfsAddExport /opt/opengnsys/client ${NETIP}/${NETMASK}:ro,no_subtree_check,no_root_squash,sync
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while adding nfs client config"
- return 1
- fi
-
- nfsAddExport /opt/opengnsys/images ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync,crossmnt
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while adding nfs images config"
- return 1
- fi
-
- nfsAddExport /opt/opengnsys/log/clients ${NETIP}/${NETMASK}:rw,no_subtree_check,no_root_squash,sync
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while adding logging client config"
- return 1
- fi
-
- nfsAddExport /var/lib/tftpboot ${NETIP}/${NETMASK}:ro,no_subtree_check,no_root_squash,sync
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while adding second filesystem for the pxe ogclient"
- return 1
- fi
-
- /etc/init.d/nfs-kernel-server restart
-
- exportfs -va
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while configure exports"
- return 1
- fi
-
- echoAndLog "${FUNCNAME}(): Added NFS configuration to file \"/etc/exports\"."
- return 0
-}
-
-
-# ejemplos:
-#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0:ro,no_subtree_check,no_root_squash,sync
-#nfsAddExport /opt/opengnsys 192.168.0.0/255.255.255.0
-#nfsAddExport /opt/opengnsys 80.20.2.1:ro 192.123.32.2:rw
-function nfsAddExport()
-{
- if [ $# -lt 2 ]; then
- errorAndLog "${FUNCNAME}(): invalid number of parameters"
- exit 1
- fi
-
- if [ ! -f /etc/exports ]; then
- errorAndLog "${FUNCNAME}(): /etc/exports don't exists"
- return 1
- fi
-
- local export="${1}"
- local contador=0
- local cadenaexport
-
- grep "^${export}" /etc/exports > /dev/null
- if [ $? -eq 0 ]; then
- echoAndLog "${FUNCNAME}(): $export exists in /etc/exports, omiting"
- return 0
- fi
-
- cadenaexport="${export}"
- for parametro in $*
- do
- if [ $contador -gt 0 ]
- then
- host=`echo $parametro | awk -F: '{print $1}'`
- options=`echo $parametro | awk -F: '{print $2}'`
- if [ "${host}" == "" ]; then
- errorAndLog "${FUNCNAME}(): host can't be empty"
- return 1
- fi
- cadenaexport="${cadenaexport}\t${host}"
-
- if [ "${options}" != "" ]; then
- cadenaexport="${cadenaexport}(${options})"
- fi
- fi
- let contador=contador+1
- done
-
- echo -en "$cadenaexport\n" >> /etc/exports
-
- echoAndLog "${FUNCNAME}(): add $export to /etc/exports"
-
- return 0
-}
-
-
-########################################################################
## Configuracion servicio Samba
########################################################################
function smbConfigure()
{
echoAndLog "${FUNCNAME}(): Configuring Samba service."
- backupFile /etc/samba/smb.conf
+ backupFile $SAMBACFGDIR/smb.conf
# Copiar plantailla de recursos para OpenGnSys
sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \
- $WORKDIR/opengnsys/server/etc/smb-og.conf.tmpl > /etc/samba/smb-og.conf
+ $WORKDIR/opengnsys/server/etc/smb-og.conf.tmpl > $SAMBACFGDIR/smb-og.conf
# Configurar y recargar Samba"
- perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnSys Samba Server/; s/^\; *include \=.*$/ include \= \/etc\/samba\/smb-og.conf/" /etc/samba/smb.conf
- /etc/init.d/smbd restart
+ perl -pi -e "s/WORKGROUP/OPENGNSYS/; s/server string \=.*/server string \= OpenGnSys Samba Server/; s/^\; *include \=.*$/ include \= \/etc\/samba\/smb-og.conf/" $SAMBACFGDIR/smb.conf
+ $SAMBAINIT restart
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error while configure Samba"
return 1
@@ -725,28 +701,31 @@ function dhcpConfigure()
{
echoAndLog "${FUNCNAME}(): Sample DHCP configuration."
- local DHCPSERVER=/etc/init.d/isc-dhcp-server
- DHCPCONFIG=/etc/dhcp/dhcpd.conf
- if [ ! -x $DHCPSERVER ]; then
- DHCPSERVER=/etc/init.d/dhcp3-server
- DHCPCONFIG=/etc/dhcp3/dhcpd.conf
- fi
- backupFile $DHCPCONFIG
-
- sed -e "s/SERVERIP/$SERVERIP/g" \
- -e "s/NETIP/$NETIP/g" \
- -e "s/NETMASK/$NETMASK/g" \
- -e "s/NETBROAD/$NETBROAD/g" \
- -e "s/ROUTERIP/$ROUTERIP/g" \
- -e "s/DNSIP/$DNSIP/g" \
- $WORKDIR/opengnsys/server/etc/dhcpd.conf.tmpl > $DHCPCONFIG
- if [ $? -ne 0 ]; then
+ local errcode=0
+ local i=0
+ local dev=""
+
+ backupFile $DHCPCFGDIR/dhcpd.conf
+ for dev in ${DEVICE[*]}; do
+ if [ -n "${SERVERIP[i]}" ]; then
+ backupFile $DHCPCFGDIR/dhcpd-$dev.conf
+ sed -e "s/SERVERIP/${SERVERIP[$i]}/g" \
+ -e "s/NETIP/${NETIP[$i]}/g" \
+ -e "s/NETMASK/${NETMASK[$i]}/g" \
+ -e "s/NETBROAD/${NETBROAD[$i]}/g" \
+ -e "s/ROUTERIP/${ROUTERIP[$i]}/g" \
+ -e "s/DNSIP/$DNSIP/g" \
+ $WORKDIR/opengnsys/server/etc/dhcpd.conf.tmpl > $DHCPCFGDIR/dhcpd-$dev.conf || errcode=1
+ fi
+ let i++
+ done
+ if [ $errcode -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error while configuring DHCP server"
return 1
fi
-
- $DHCPSERVER restart
- echoAndLog "${FUNCNAME}(): Sample DHCP configured in file \"$DHCPCONFIG\"."
+ ln -f $DHCPCFGDIR/dhcpd-$DEFAULTDEV.conf $DHCPCFGDIR/dhcpd.conf
+ $DHCPINIT restart
+ echoAndLog "${FUNCNAME}(): Sample DHCP configured in \"$DHCPCFGDIR\"."
return 0
}
@@ -793,8 +772,12 @@ function openGnsysInstallWebConsoleApacheConf()
echoAndLog "${FUNCNAME}(): creating apache2 config file.."
+ # Activar HTTPS.
+ $ENABLESITE default-ssl
+ $ENABLEMOD ssl
+ make-ssl-cert generate-default-snakeoil --force-overwrite
- # genera configuración
+ # Genera configuración de consola web.
cat > $path_opengnsys_base/etc/apache.conf <<EOF
# OpenGnSys Web Console configuration for Apache
@@ -806,14 +789,14 @@ Alias /opengnsys ${path_web_console}
</Directory>
EOF
- ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys.conf
- ln -fs $path_apache2_confd/sites-available/opengnsys.conf $path_apache2_confd/sites-enabled/opengnsys.conf
+ ln -fs $path_opengnsys_base/etc/apache.conf $path_apache2_confd/sites-available/opengnsys
+ $ENABLESITE opengnsys
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): config file can't be linked to apache conf, verify your server installation"
return 1
else
echoAndLog "${FUNCNAME}(): config file created and linked, restarting apache daemon"
- /etc/init.d/apache2 restart
+ $APACHEINIT restart
return 0
fi
}
@@ -880,7 +863,7 @@ function createDirs()
# Establecer los permisos básicos.
echoAndLog "${FUNCNAME}(): setting directory permissions"
- chmod -R 775 $path_opengnsys_base/{log/clients,images,tftpboot}
+ chmod -R 775 $path_opengnsys_base/{log/clients,images}
chown -R :$OPENGNSYS_CLIENT_USER $path_opengnsys_base/{log/clients,images}
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error while setting permissions"
@@ -949,7 +932,7 @@ function servicesCompilation ()
# Compilar OpenGnSys Server
echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Admin Server"
pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer
- make && make install
+ make && mv ogAdmServer $INSTALL_TARGET/sbin
if [ $? -ne 0 ]; then
echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Admin Server"
hayErrores=1
@@ -958,7 +941,7 @@ function servicesCompilation ()
# Compilar OpenGnSys Repository Manager
echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Repository Manager"
pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo
- make && make install
+ make && mv ogAdmRepo $INSTALL_TARGET/sbin
if [ $? -ne 0 ]; then
echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Repository Manager"
hayErrores=1
@@ -967,7 +950,7 @@ function servicesCompilation ()
# Compilar OpenGnSys Agent
echoAndLog "${FUNCNAME}(): Compiling OpenGnSys Agent"
pushd $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent
- make && make install
+ make && mv ogAdmAgent $INSTALL_TARGET/sbin
if [ $? -ne 0 ]; then
echoAndLog "${FUNCNAME}(): error while compiling OpenGnSys Agent"
hayErrores=1
@@ -1014,13 +997,13 @@ function copyInterfaceAdm ()
function openGnsysCopyClientFiles()
{
- local hayErrores=0
+ local errstatus=0
echoAndLog "${FUNCNAME}(): Copying OpenGnSys Client files."
cp -ar $WORKDIR/opengnsys/client/shared/* $INSTALL_TARGET/client
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error while copying client estructure"
- hayErrores=1
+ errstatus=1
fi
find $INSTALL_TARGET/client -name .svn -type d -exec rm -fr {} \; 2>/dev/null
@@ -1029,76 +1012,27 @@ function openGnsysCopyClientFiles()
cp -ar $WORKDIR/opengnsys/client/engine/*.lib $INSTALL_TARGET/client/lib/engine/bin
if [ $? -ne 0 ]; then
errorAndLog "${FUNCNAME}(): error while copying engine files"
- hayErrores=1
+ errstatus=1
fi
- if [ $hayErrores -eq 0 ]; then
+ if [ $errstatus -eq 0 ]; then
echoAndLog "${FUNCNAME}(): client copy files success."
else
errorAndLog "${FUNCNAME}(): client copy files with errors"
fi
- return $hayErrores
+ return $errstatus
}
-
-
-# Crear antiguo cliente initrd para OpenGnSys 0.10
-function openGnsysOldClientCreate()
-{
- local OSCODENAME
-
- local hayErrores=0
-
- # Cargar Kernel, Initrd y paquetes udeb para la distribución del servidor (o por defecto).
- OSCODENAME=$(lsb_release -cs 2>/dev/null)
- if [ "$OSDISTRIB" = "Ubuntu" -a -n "$OSCODENAME" ]; then
- echoAndLog "${FUNCNAME}(): Loading Kernel and Initrd files for $OSDISTRIB $OSCODENAME."
- $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot -v $OSCODENAME 2>&1 | tee -a $LOG_FILE
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client"
- hayErrores=1
- fi
- echoAndLog "${FUNCNAME}(): Loading udeb files for $OSDISTRIB $OSCODENAME."
- $INSTALL_TARGET/bin/upgrade-clients-udeb.sh $OSCODENAME 2>&1 | tee -a $LOG_FILE
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client"
- hayErrores=1
- fi
- else
- echoAndLog "${FUNCNAME}(): Loading default Kernel and Initrd files."
- $INSTALL_TARGET/bin/initrd-generator -t $INSTALL_TARGET/tftpboot 2>&1 | tee -a $LOG_FILE
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while generating initrd OpenGnSys Admin Client"
- hayErrores=1
- fi
- echoAndLog "${FUNCNAME}(): Loading default udeb files."
- $INSTALL_TARGET/bin/upgrade-clients-udeb.sh 2>&1 | tee -a $LOG_FILE
- if [ $? -ne 0 ]; then
- errorAndLog "${FUNCNAME}(): error while upgrading udeb files OpenGnSys Admin Client"
- hayErrores=1
- fi
- fi
-
- if [ $hayErrores -eq 0 ]; then
- echoAndLog "${FUNCNAME}(): Old client generation success."
- else
- errorAndLog "${FUNCNAME}(): Old client generation with errors"
- fi
-
- return $hayErrores
-}
-
-
-# Crear cliente OpenGnSys 1.0.1
+# Crear cliente OpenGnSys 1.0.2
function clientCreate()
{
- local DOWNLOADURL="http://www.opengnsys.es/downloads"
- local FILENAME=ogclient-1.0.2-natty-32bit-beta00-rev2046.iso
+ local DOWNLOADURL="http://$OPENGNSYS_SERVER/downloads"
+ local FILENAME=ogLive-natty-2.6.38-8-generic-pae-r2303.iso
local TARGETFILE=$INSTALL_TARGET/lib/$FILENAME
local TMPDIR=/tmp/${FILENAME%.iso}
-
+
echoAndLog "${FUNCNAME}(): Loading Client"
# Descargar, montar imagen, copiar cliente ogclient y desmontar.
wget $DOWNLOADURL/$FILENAME -O $TARGETFILE
@@ -1109,15 +1043,24 @@ function clientCreate()
echoAndLog "${FUNCNAME}(): Copying Client files"
mkdir -p $TMPDIR
mount -o loop,ro $TARGETFILE $TMPDIR
- cp -vr $TMPDIR/ogclient $INSTALL_TARGET/tftpboot
+ cp -avr $TMPDIR/ogclient $INSTALL_TARGET/tftpboot
umount $TMPDIR
rmdir $TMPDIR
+ # Asignar la clave cliente para acceso a Samba.
+ echoAndLog "${FUNCNAME}(): Set client access key"
+ echo -ne "$OPENGNSYS_CLIENT_PASSWD\n$OPENGNSYS_CLIENT_PASSWD\n" | \
+ $INSTALL_TARGET/bin/setsmbpass
# Establecer los permisos.
find -L $INSTALL_TARGET/tftpboot -type d -exec chmod 755 {} \;
find -L $INSTALL_TARGET/tftpboot -type f -exec chmod 644 {} \;
chown -R :$OPENGNSYS_CLIENT_USER $INSTALL_TARGET/tftpboot/ogclient
chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/tftpboot/{menu.lst,pxelinux.cfg}
+
+ # Ofrecer md5 del kernel y vmlinuz para ogupdateinitrd en cache
+ cp -arv $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz* $INSTALL_TARGET/tftpboot
+ cp -arv $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img* $INSTALL_TARGET/tftpboot
+
echoAndLog "${FUNCNAME}(): Client generation success"
}
@@ -1125,26 +1068,60 @@ function clientCreate()
# Configuración básica de servicios de OpenGnSys
function openGnsysConfigure()
{
+ local i=0
+ local dev=""
+
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 /opt/opengnsys/sbin/
+ cp -p $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepoAux $INSTALL_TARGET/sbin
update-rc.d opengnsys defaults
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
- echoAndLog "${FUNCNAME}(): Creating OpenGnSys config file in \"$INSTALL_TARGET/etc\"."
- perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DBUSER/$OPENGNSYS_DB_USER/g; s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g; s/DATABASE/$OPENGNSYS_DATABASE/g" $INSTALL_TARGET/etc/ogAdmServer.cfg
- perl -pi -e "s/SERVERIP/$SERVERIP/g" $INSTALL_TARGET/etc/ogAdmRepo.cfg
- perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DBUSER/$OPENGNSYS_DB_USER/g; s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g; s/DATABASE/$OPENGNSYS_DATABASE/g" $INSTALL_TARGET/etc/ogAdmAgent.cfg
- chown root:root $INSTALL_TARGET/etc/{ogAdmServer.cfg,ogAdmAgent.cfg}
- chmod 600 $INSTALL_TARGET/etc/{ogAdmServer.cfg,ogAdmAgent.cfg}
- echoAndLog "${FUNCNAME}(): Creating Web Console config file"
- OPENGNSYS_CONSOLEURL="http://$SERVERIP/opengnsys"
- perl -pi -e "s/SERVERIP/$SERVERIP/g; s/DBUSER/$OPENGNSYS_DB_USER/g; s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g; s/DATABASE/$OPENGNSYS_DATABASE/g; s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $INSTALL_TARGET/www/controlacceso.php
- chown $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/controlacceso.php
- chmod 600 $INSTALL_TARGET/www/controlacceso.php
- sed -e "s/SERVERIP/$SERVERIP/g" -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient.cfg
+
+ echoAndLog "${FUNCNAME}(): Creating logrotate configuration file."
+ sed -e "s/OPENGNSYSDIR/${INSTALL_TARGET//\//\\/}/g" \
+ $WORKDIR/opengnsys/server/etc/logrotate.tmpl > /etc/logrotate.d/opengnsys
+
+ echoAndLog "${FUNCNAME}(): Creating OpenGnSys config files."
+ for dev in ${DEVICE[*]}; do
+ if [ -n "${SERVERIP[i]}" ]; then
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
+ -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
+ -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
+ $WORKDIR/opengnsys/admin/Sources/Services/ogAdmServer/ogAdmServer.cfg > $INSTALL_TARGET/etc/ogAdmServer-$dev.cfg
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ $WORKDIR/opengnsys/admin/Sources/Services/ogAdmRepo/ogAdmRepo.cfg > $INSTALL_TARGET/etc/ogAdmRepo-$dev.cfg
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
+ -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
+ -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
+ $WORKDIR/opengnsys/admin/Sources/Services/ogAdmAgent/ogAdmAgent.cfg > $INSTALL_TARGET/etc/ogAdmAgent-$dev.cfg
+ OPENGNSYS_CONSOLEURL="http://${SERVERIP[i]}/opengnsys"
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/DBUSER/$OPENGNSYS_DB_USER/g" \
+ -e "s/DBPASSWORD/$OPENGNSYS_DB_PASSWD/g" \
+ -e "s/DATABASE/$OPENGNSYS_DATABASE/g" \
+ -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" \
+ $INSTALL_TARGET/www/controlacceso.php > $INSTALL_TARGET/www/controlacceso-$dev.php
+ sed -e "s/SERVERIP/${SERVERIP[i]}/g" \
+ -e "s/OPENGNSYSURL/${OPENGNSYS_CONSOLEURL//\//\\/}/g" \
+ $WORKDIR/opengnsys/admin/Sources/Clients/ogAdmClient/ogAdmClient.cfg > $INSTALL_TARGET/client/etc/ogAdmClient-$dev.cfg
+ fi
+ let i++
+ done
+ ln -f $INSTALL_TARGET/etc/ogAdmServer-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmServer.cfg
+ ln -f $INSTALL_TARGET/etc/ogAdmRepo-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmRepo.cfg
+ ln -f $INSTALL_TARGET/etc/ogAdmAgent-$DEFAULTDEV.cfg $INSTALL_TARGET/etc/ogAdmAgent.cfg
+ ln -f $INSTALL_TARGET/client/etc/ogAdmClient-$DEFAULTDEV.cfg $INSTALL_TARGET/client/etc/ogAdmClient.cfg
+ ln -f $INSTALL_TARGET/www/controlacceso-$DEFAULTDEV.php $INSTALL_TARGET/www/controlacceso.php
+ chown root:root $INSTALL_TARGET/etc/{ogAdmServer,ogAdmAgent}*.cfg
+ chmod 600 $INSTALL_TARGET/etc/{ogAdmServer,ogAdmAgent}*.cfg
+ chown $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/www/controlacceso*.php
+ chmod 600 $INSTALL_TARGET/www/controlacceso*.php
echoAndLog "${FUNCNAME}(): Starting OpenGnSys services."
/etc/init.d/opengnsys start
}
@@ -1169,7 +1146,7 @@ function installationSummary()
echoAndLog "Project version: $(cat $VERSIONFILE 2>/dev/null)"
echoAndLog "Installation directory: $INSTALL_TARGET"
echoAndLog "Repository directory: $INSTALL_TARGET/images"
- echoAndLog "DHCP configuration file: $DHCPCONFIG"
+ echoAndLog "DHCP configuration directory: $DHCPCFGDIR"
echoAndLog "TFTP configuration directory: /var/lib/tftpboot"
echoAndLog "Samba configuration directory: /etc/samba"
echoAndLog "Web Console URL: $OPENGNSYS_CONSOLEURL"
@@ -1196,7 +1173,15 @@ echo
echoAndLog "OpenGnSys installation begins at $(date)"
pushd $WORKDIR
-# Comprobar si hay conexión y detectar parámetros de red por defecto.
+# Detectar datos de auto-configuración del instalador.
+autoConfigure
+
+# Detectar parámetros de red y comprobar si hay conexión.
+getNetworkSettings
+if [ $? -ne 0 ]; then
+ errorAndLog "Error reading default network settings."
+ exit 1
+fi
checkNetworkConnection
if [ $? -ne 0 ]; then
errorAndLog "Error connecting to server. Causes:"
@@ -1205,17 +1190,12 @@ if [ $? -ne 0 ]; then
errorAndLog " - Server is temporally down, try agian later."
exit 1
fi
-getNetworkSettings
-if [ $? -ne 0 ]; then
- errorAndLog "Error reading default network settings."
- exit 1
-fi
# Detener servicios de OpenGnSys, si están activos previamente.
[ -f /etc/init.d/opengnsys ] && /etc/init.d/opengnsys stop
# Actualizar repositorios
-apt-get update
+updatePackageList
# Instalación de dependencias (paquetes de sistema operativo).
declare -a notinstalled
@@ -1263,14 +1243,6 @@ fi
# Configurando tftp
tftpConfigure
-# Configuración NFS
-#### (descomentar las siguientes líneas para exportar servicios por NFS)
-#nfsConfigure
-#if [ $? -ne 0 ]; then
-# errorAndLog "Error while configuring nfs server!"
-# exit 1
-#fi
-
# Configuración Samba
smbConfigure
if [ $? -ne 0 ]; then
@@ -1371,14 +1343,7 @@ if [ $? -ne 0 ]; then
errorAndLog "Error creating client structure"
fi
-# Crear la estructura del antiguo cliente initrd de OpenGnSys 0.10
-#### (descomentar las siguientes líneas para generar cliente initrd)
-#openGnsysOldClientCreate
-#if [ $? -ne 0 ]; then
-# errorAndLog "Warning: cannot create old initrd client"
-#fi
-
-# Crear la estructura del cliente de OpenGnSys 1.0
+# Crear la estructura del cliente de OpenGnSys
clientCreate
if [ $? -ne 0 ]; then
errorAndLog "Error creating client"
diff --git a/installer/opengnsys_uninstall.sh b/installer/opengnsys_uninstall.sh
index 0ee3b947..f9b5ce0e 100755
--- a/installer/opengnsys_uninstall.sh
+++ b/installer/opengnsys_uninstall.sh
@@ -11,6 +11,7 @@ DBUSER="usuog" # Usuario de acceso a la base de datos
# Variables.
OPENGNSYS="/opt/opengnsys" # Directorio de OpenGnSys
OGIMG="images" # Directorio de imágenes del repositorio
+CLIENTUSER="opengnsys" # Usuario de acceso del cliente
# Parar servicio.
echo "Uninstalling OpenGnSys services."
@@ -37,6 +38,10 @@ if test $DROP; then
mysql -u root -p"$MYSQLROOT" <<<"DROP USER '$DBUSER';" 2>/dev/null
mysql -u root -p"$MYSQLROOT" <<<"DROP USER '$DBUSER'@'localhost';" 2>/dev/null
fi
+# Quitar configuración específica de Apache.
+a2dissite opengnsys
+rm -f /etc/apache2/{sites-available,sites-enabled}/opengnsys*
+/etc/init.d/apache2 reload
# Eliminar ficheros.
echo "Deleting OpenGnSys files."
for dir in $OPENGNSYS/*; do
@@ -48,6 +53,9 @@ rm -f /etc/init.d/opengnsys /etc/default/opengnsys /var/log/opengnsys
# Comentar recursos de OpenGnSys en Samba.
perl -pi -e "s/^ *include \= \/etc\/samba\/smb-og.conf/\; include \= \/etc\/samba\/smb-og.conf/" /etc/samba/smb.conf
/etc/init.d/smbd restart
+# Eliminar usuario de OpenGnSys.
+smbpasswd -x $CLIENTUSER
+userdel $CLIENTUSER
# 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 3c46ce57..ad376290 100755
--- a/installer/opengnsys_update.sh
+++ b/installer/opengnsys_update.sh
@@ -25,8 +25,7 @@ OPENGNSYS_CLIENTUSER="opengnsys" # Usuario Samba
# Sólo ejecutable por usuario root
-if [ "$(whoami)" != 'root' ]
-then
+if [ "$(whoami)" != 'root' ]; then
echo "ERROR: this program must run under root privileges!!"
exit 1
fi
@@ -43,12 +42,12 @@ PROGRAMNAME=$(basename "$0")
DEPS="build-essential g++-multilib rsync ctorrent samba unzip netpipes debootstrap schroot squashfs-tools"
OPENGNSYS_SERVER="www.opengnsys.es"
if [ -d "$PROGRAMDIR/../installer" ]; then
- USESVN=0
+ USESVN=0
else
- USESVN=1
- DEPS="$DEPS subversion"
+ USESVN=1
+ DEPS="$DEPS subversion"
fi
-SVN_URL="http://$OPENGNSYS_SERVER/svn/trunk/"
+SVN_URL="http://$OPENGNSYS_SERVER/svn/branches/version1.0/"
WORKDIR=/tmp/opengnsys_update
mkdir -p $WORKDIR
@@ -131,11 +130,11 @@ function backupFile()
echoAndLog "${FUNCNAME}(): Making $fichero back-up"
# realiza una copia de la última configuración como last
- cp -p $fichero "${fichero}-LAST"
+ cp -a $fichero "${fichero}-LAST"
# si para el día no hay backup lo hace, sino no
if [ ! -f "${fichero}-${fecha}" ]; then
- cp -p $fichero "${fichero}-${fecha}"
+ cp -a $fichero "${fichero}-${fecha}"
fi
}
@@ -151,7 +150,7 @@ function restoreFile()
echoAndLog "${FUNCNAME}(): restoring file $fichero"
if [ -f "${fichero}-LAST" ]; then
- cp -p "$fichero-LAST" "$fichero"
+ cp -a "$fichero-LAST" "$fichero"
fi
}
@@ -265,18 +264,6 @@ function checkNetworkConnection()
####### Funciones específicas de la instalación de Opengnsys
#####################################################################
-# Copiar ficheros de arranque de los servicios del sistema de OpenGnSys
-function updateServicesStart()
-{
- echoAndLog "${FUNCNAME}(): Updating OpenGnSys init file ..."
- cp -p $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys
- if [ $? != 0 ]; then
- errorAndLog "${FUNCNAME}(): Error updating /etc/init.d/opengnsys"
- exit 1
- fi
- echoAndLog "${FUNCNAME}(): init file updated successfully."
-}
-
# Actualizar cliente OpenGnSys
function updateClientFiles()
{
@@ -289,7 +276,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
@@ -298,14 +285,27 @@ function updateClientFiles()
echoAndLog "${FUNCNAME}(): client files update success."
}
-# Exportar nombre de usuario y grupo del servicio Apache.
-function getApacheUser()
+# Configurar HTTPS y exportar usuario y grupo del servicio Apache.
+function apacheConfiguration ()
{
- # Variables de ejecución de Apache
+ local APACHECONF=/etc/apache2
+
+ # Activar HTTPS, si es necesario.
+ if [ -e $APACHECONF/sites-available/opengnsys.conf ]; then
+ echoAndLog "${FUNCNAME}(): Configuring HTTPS access..."
+ mv $APACHECONF/sites-available/opengnsys.conf $APACHECONF/sites-available/opengnsys
+ a2ensite default-ssl
+ a2enmod ssl
+ a2dissite opengnsys.conf
+ a2ensite opengnsys
+ /etc/init.d/apache2 restart
+ fi
+
+ # Variables de ejecución de Apache.
# - APACHE_RUN_USER
# - APACHE_RUN_GROUP
- if [ -f /etc/apache2/envvars ]; then
- source /etc/apache2/envvars
+ if [ -f $APACHECONF/envvars ]; then
+ source $APACHECONF/envvars
fi
APACHE_RUN_USER=${APACHE_RUN_USER:-"www-data"}
APACHE_RUN_GROUP=${APACHE_RUN_GROUP:-"www-data"}
@@ -443,7 +443,29 @@ function updateServerFiles()
fi
done
popd >/dev/null
+ NEWFILES="" # Ficheros de configuración que han cambiado de formato.
+ if grep -q 'pxelinux.0' /etc/dhcp*/dhcpd*.conf; then
+ echoAndLog "${FUNCNAME}(): updating DHCP files"
+ perl -pi -e 's/pxelinux.0/grldr/' /etc/dhcp*/dhcpd*.conf
+ for i in isc-dhcp-server dhcpd3-server dhcpd; do
+ [ -f /etc/init.d/$i ] && /etc/init.d/$i restart
+ done
+ NEWFILES="/etc/dhcp*/dhcpd*.conf"
+ fi
+ if ! diff --quiet $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys 2>/dev/null; then
+ echoAndLog "${FUNCNAME}(): updating new init file"
+ backupFile /etc/init.d/opengnsys
+ cp -a $WORKDIR/opengnsys/admin/Sources/Services/opengnsys.init /etc/init.d/opengnsys
+ NEWFILES="$NEWFILES /etc/init.d/opengnsys"
+ fi
+ if grep -q "UrlMsg=.*msgbrowser.php" $INSTALL_TARGET/client/etc/ogAdmClient.cfg 2>/dev/null; then
+ echoAndLog "${FUNCNAME}(): updating new client config file"
+ backupFile $INSTALL_TARGET/client/etc/ogAdmClient.cfg
+ perl -pi -e 's!UrlMsg=.*msgbrowser\.php!UrlMsg=http://localhost/cgi-bin/httpd-log\.sh!g' $INSTALL_TARGET/client/etc/ogAdmClient.cfg
+ NEWFILES="$NEWFILES $INSTALL_TARGET/client/etc/ogAdmClient.cfg"
+ fi
echoAndLog "${FUNCNAME}(): updating 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
echoAndLog "${FUNCNAME}(): server files updated successfully."
}
@@ -506,17 +528,20 @@ function compileServices()
# Actualizar nuevo cliente para OpenGnSys 1.0
function updateClient()
{
- local DOWNLOADURL="http://www.opengnsys.es/downloads"
- local FILENAME=ogclient-1.0.2-natty-32bit-beta00-rev2046.iso
+ local DOWNLOADURL="http://$OPENGNSYS_SERVER/downloads"
+ local FILENAME=ogLive-natty-2.6.38-8-generic-pae-r2303.iso
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 SAMBAPASS
# Comprobar si debe actualizarse el cliente.
SOURCELENGTH=$(LANG=C wget --spider $SOURCEFILE 2>&1 | awk '/Length:/ {print $2}')
TARGETLENGTH=$(ls -l $TARGETFILE 2>/dev/null | awk '{print $5}')
+ [ -z $TARGETLENGTH ] && TARGETLENGTH=0
if [ "$SOURCELENGTH" != "$TARGETLENGTH" ]; then
echoAndLog "${FUNCNAME}(): Loading Client"
wget $DOWNLOADURL/$FILENAME -O $TARGETFILE
@@ -524,23 +549,40 @@ function updateClient()
errorAndLog "${FUNCNAME}(): Error loading OpenGnSys Client"
return 1
fi
+ # Obtener la clave actual de acceso a Samba para restaurarla.
+ if [ -f $OGINITRD ]; then
+ SAMBAPASS=$(gzip -dc $OGINITRD | \
+ cpio -i --to-stdout scripts/ogfunctions 2>&1 | \
+ grep "^[ ]*OPTIONS=" | \
+ sed 's/\(.*\)pass=\(\w*\)\(.*\)/\2/')
+ fi
+ # Montar la imagen ISO del ogclient, actualizar ficheros y desmontar.
+ echoAndLog "${FUNCNAME}(): Updatting ogclient files"
+ mkdir -p $TMPDIR
+ mount -o loop,ro $TARGETFILE $TMPDIR
+ rsync -irlt $TMPDIR/ogclient $INSTALL_TARGET/tftpboot
+ umount $TMPDIR
+ rmdir $TMPDIR
+ # Recuperar la clave de acceso a Samba.
+ if [ -n "$SAMBAPASS" ]; then
+ echoAndLog "${FUNCNAME}(): Restoring client access key"
+ echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | \
+ $INSTALL_TARGET/bin/setsmbpass
+ fi
+ # Establecer los permisos.
+ find -L $INSTALL_TARGET/tftpboot -type d -exec chmod 755 {} \;
+ find -L $INSTALL_TARGET/tftpboot -type f -exec chmod 644 {} \;
+ chown -R :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/tftpboot/ogclient
+ chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/tftpboot/{menu.lst,pxelinux.cfg}
+
+ # Ofrecer md5 del kernel y vmlinuz para ogupdateinitrd en cache
+ cp -arv $INSTALL_TARGET/tftpboot/ogclient/ogvmlinuz* $INSTALL_TARGET/tftpboot
+ cp -arv $INSTALL_TARGET/tftpboot/ogclient/oginitrd.img* $INSTALL_TARGET/tftpboot
+
+ echoAndLog "${FUNCNAME}(): Client update successfully"
else
- echoAndLog "${FUNCNAME}(): Client is already loaded"
+ echoAndLog "${FUNCNAME}(): Client is already updated"
fi
- # Montar la imagen ISO del ogclient, actualizar ficheros y desmontar.
- echoAndLog "${FUNCNAME}(): Updating ogclient files"
- mkdir -p $TMPDIR
- mount -o loop,ro $TARGETFILE $TMPDIR
- rsync -irlt $TMPDIR/ogclient $INSTALL_TARGET/tftpboot
- umount $TMPDIR
- rmdir $TMPDIR
-
- # Establecer los permisos.
- find -L $INSTALL_TARGET/tftpboot -type d -exec chmod 755 {} \;
- find -L $INSTALL_TARGET/tftpboot -type f -exec chmod 644 {} \;
- chown -R :$OPENGNSYS_CLIENTUSER $INSTALL_TARGET/tftpboot/ogclient
- chown -R $APACHE_RUN_USER:$APACHE_RUN_GROUP $INSTALL_TARGET/tftpboot/{menu.lst,pxelinux.cfg}
- echoAndLog "${FUNCNAME}(): Client update successfully"
}
# Resumen de actualización.
@@ -555,8 +597,11 @@ function updateSummary()
echo
echoAndLog "OpenGnSys Update Summary"
- echo "========================"
- echoAndLog "Project version: $(cat $VERSIONFILE)"
+ echo "========================"
+ echoAndLog "Project version: $(cat $VERSIONFILE)"
+ if [ -n "$NEWFILES" ]; then
+ echoAndLog "Check the new config files: $(echo $NEWFILES)"
+ fi
echo
}
@@ -639,7 +684,7 @@ updateClientFiles
updateInterfaceAdm
# Actualizar páqinas web
-getApacheUser
+apacheConfiguration
updateWebFiles
if [ $? -ne 0 ]; then
errorAndLog "Error updating OpenGnSys Web Admin files"
@@ -658,9 +703,6 @@ if [ $? -ne 0 ]; then
exit 1
fi
-# Actualizamos el fichero que arranca los servicios de OpenGnSys
-updateServicesStart
-
# Eliminamos el fichero de estado del tracker porque es incompatible entre los distintos paquetes
if [ -f /tmp/dstate ]; then
rm -f /tmp/dstate
diff --git a/repoman/bin/opengnsys.cron b/repoman/bin/opengnsys.cron
new file mode 100755
index 00000000..55022ef1
--- /dev/null
+++ b/repoman/bin/opengnsys.cron
@@ -0,0 +1,19 @@
+# Comprobamos si los servicios de opengnsys están levantado y si no es así los iniciamos.
+# Variables.
+OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
+LOGDIR="$OPENGNSYS/log"
+DEFAULTFILE=/etc/default/opengnsys
+
+# 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 -c ogAdmServer) == 0 ]; then
+ date +"%d/%m/%Y %T ERROR: El servicio ogAdmServer estaba caido, se reinicia" >> $LOGDIR/ogAdmServer.log
+ /etc/init.d/opengnsys restart
+fi
+if [ "$RUN_OGADMREPO" == "yes" -a $(pgrep -c ogAdmRepo) == 0 ]; then
+ date +"%d/%m/%Y %T 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 39f6a947..bf7091e0 100755
--- a/repoman/bin/sendFileMcast
+++ b/repoman/bin/sendFileMcast
@@ -23,18 +23,15 @@ if [ $# -ne 2 ]; then
exit 1
fi
-# Fichero de imagen (camino completo o nombre de imagen sin extensión).
+# Fichero a enviar (camino completo o relativo al directorio del repositorio).
FICH="$1"
if [ "${FICH:0:1}" != "/" ]; then
- for EXT in pgz img; do
- FICHIMG="$OGIMG/$FICH.$EXT"
- [ -r "$FICHIMG" ] && break
- done
+ FICHIMG="$OGIMG/$FICH"
else
FICHIMG="$FICH"
fi
if [ ! -f "$FICHIMG" ]; then
- echo "$PROG Error: Fichero \"$FICH\" no accesible"
+ echo "$PROG Error: Fichero \"$FICHIMG\" no accesible"
exit 2
fi
@@ -59,8 +56,5 @@ CERROR="8x8/128"
# Envío de fichero por Multicast.
which mbuffer &> /dev/null && MBUFFER="--pipe 'mbuffer -m 20M'"
-##### ADV v. 1.0 23/02/2011
-#version 0.10 # udp-sender $MBUFFER --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG"
$OGBIN/udp-sender $MBUFFER --nokbd --retries-until-drop 65 --portbase $PORTBASE --$METHOD --mcast-data-address $ADDRESS --fec $CERROR --max-bitrate $BITRATE --ttl 1 --min-clients $NCLIENTS --max-wait $MAXTIME --file "$FICHIMG"
-##### ADV v. 1.0 23/02/2011
diff --git a/server/bin/listclientmode b/server/bin/listclientmode
index eddd4fd8..ba86f141 100755
--- a/server/bin/listclientmode
+++ b/server/bin/listclientmode
@@ -32,30 +32,21 @@ IDAULA=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
if [ -n "$IDAULA" ]; then
# Aula encontrada
- ETHERNET=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT mac FROM ordenadores WHERE idaula='$IDAULA';")
+ PCNAME=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
+ "SELECT nombreordenador FROM ordenadores WHERE idaula='$IDAULA';")
else
# Buscar ordenador
- ETHERNET=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT mac FROM ordenadores WHERE nombreordenador='$1';")
+ PCNAME=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
+ "SELECT nombreordenador FROM ordenadores WHERE nombreordenador='$1';")
fi
-if [ -z "$ETHERNET" ]; then
- echo "$PROG: No existe ningun aula o equipo con el nombre \"$1\""
+if [ -z "$PCNAME" ]; then
+ echo "$PROG: No existe ningún aula o equipo con el nombre \"$1\""
exit 1
fi
-for ETH in $ETHERNET; do
- AUX=$(echo $ETH | awk '{print tolower($0)}')
- AUX="01-${AUX:0:2}-${AUX:2:2}-${AUX:4:2}-${AUX:6:2}-${AUX:8:2}-${AUX:10:2}"
- PCNAME=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT nombreordenador FROM ordenadores WHERE mac='$ETH';")
- if [ -f $PXEDIR/$AUX ]; then
- INODE=$(ls -i $PXEDIR/$AUX | cut -f1 -d" ")
- TMPL=$(ls -i $PXEDIR | grep $INODE | grep -v "01-" | cut -f2 -d" ")
- [ -z "$TMPL" ] && TMPL="default"
- else
- TMPL="default"
- fi
- echo "Equipo $PCNAME ($ETH) asociado a plantilla \"$TMPL\""
+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
diff --git a/server/bin/setclientmode b/server/bin/setclientmode
new file mode 100755
index 00000000..ecacf247
--- /dev/null
+++ b/server/bin/setclientmode
@@ -0,0 +1,80 @@
+#!/bin/bash
+# setclientmode: Configura el archivo de arranque de PXE para los clientes,
+# ya sea un equipo o un aula, generando enlaces a archivos usados como plantilla.
+# Nota: El archivo PXE por defecto "default" se deja en modo de ejecución "user"
+# 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
+
+
+# Variables.
+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
+
+# Control básico de errores.
+if [ $# -ne 2 ]; then
+ echo "$PROG: Error de ejecución"
+ echo "Formato: $PROG Archivo_platilla [NOMBRE_PC|NOMBRE_AULA]"
+ 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"
+ 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
+if [ -z "$ETHERNET" ]; then
+ date +"%b %d %T $PROG: No existe aula o equipo con el nombre \"$2\"" | tee -a $LOGFILE
+ exit 1
+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
+ 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, ' ', '_')
+ FROM ordenadores
+ JOIN aulas ON ordenadores.idaula=aulas.idaula
+ JOIN repositorios ON ordenadores.idrepositorio=repositorios.idrepositorio
+ WHERE ordenadores.mac=\"$ETHERNET\";")
+ 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\";"
+ fi
+ let NPC=NPC+1
+done
+date +"%b %d %T $PROG: $NPC equipo(s) configurado(s)" | tee -a $LOGFILE
+
diff --git a/server/bin/setsmbpass b/server/bin/setsmbpass
new file mode 100755
index 00000000..2c239601
--- /dev/null
+++ b/server/bin/setsmbpass
@@ -0,0 +1,59 @@
+#!/bin/bash
+# setsmbpass: cambia la contraseña del usuario del cliente para acceder a los
+# servicios Samba.
+# Nota: se modifica el Initrd del cliente y se cambia la clave en el servidor.
+# Nota: no se modifica el usuario de acceso (usuario "opengnsys").
+# Uso: setsmbpass
+# Autor: Ramon Gomez - Univ. Sevilla, julio 2011
+
+
+# Variables.
+PROG=$(basename $0)
+OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
+SAMBAUSER="opengnsys" # Usuario por defecto.
+CLIENTINITRD=$OPENGNSYS/tftpboot/ogclient/oginitrd.img
+TMPDIR=/tmp/ogclient$$
+
+# Control básico de errores.
+if [ $# != 0 ]; then
+ echo "$PROG: Error de ejecución" >&2
+ echo "Formato: $PROG"
+ exit 1
+fi
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+# Crear clave para usuario de acceso a los recursos.
+if [ -r $CLIENTINITRD ]; then
+ stty -echo 2>/dev/null
+ echo -n "Clave del usuario Samba: "
+ read SAMBAPASS
+ echo
+ echo -n "Confirmar clave: "
+ read SAMBAPASS2
+ echo
+ stty echo 2>/dev/null
+ if [ "$SAMBAPASS" != "$SAMBAPASS2" ]; then
+ echo "$PROG: Error: las claves no coinciden" >&2
+ exit 2
+ fi
+ # Editar la parte de acceso del cliente:
+ # descomprimir Initrd, sustituir clave y recomprimir Initrd).
+ mkdir -p $TMPDIR
+ cd $TMPDIR
+ gzip -dc $CLIENTINITRD | cpio -im
+ if [ -f scripts/ogfunctions ]; then
+ sed -i "s/OPTIONS=\(.*\)user=\w*\(.*\)pass=\w*\(.*\)/OPTIONS=\1user=$SAMBAUSER\2pass=$SAMBAPASS\3/" scripts/ogfunctions
+ find . | cpio -H newc -oa | gzip -9c > $CLIENTINITRD
+ else
+ echo "$PROG: Aviso: no se ha modificado la clave del cliente."
+ fi
+ rm -fr $TMPDIR
+else
+ SAMBAPASS="og" # Clave por defecto.
+ echo "$PROG: Aviso: no se ha modificado la clave del cliente."
+fi
+echo -ne "$SAMBAPASS\n$SAMBAPASS\n" | smbpasswd -a -s $SAMBAUSER
+
diff --git a/server/etc/dhcpd.conf.tmpl b/server/etc/dhcpd.conf.tmpl
index 687bbf0f..fb6afa00 100644
--- a/server/etc/dhcpd.conf.tmpl
+++ b/server/etc/dhcpd.conf.tmpl
@@ -10,7 +10,7 @@ subnet NETIP netmask NETMASK {
default-lease-time 600;
max-lease-time 7200;
next-server SERVERIP;
- filename "pxelinux.0";
+ filename "grldr";
use-host-decl-names on;
# host HOSTNAME1 {
diff --git a/server/etc/exports.tmpl b/server/etc/exports.tmpl
deleted file mode 100644
index 5b30216b..00000000
--- a/server/etc/exports.tmpl
+++ /dev/null
@@ -1,3 +0,0 @@
-/opt/opengnsys/client NETIP/NETMASK(ro,no_subtree_check,no_root_squash,sync)
-/opt/opengnsys/images NETIP/NETMASK(rw,no_subtree_check,no_root_squash,sync,crossmnt)
-/opt/opengnsys/log/clients NETIP/NETMASK(rw,no_subtree_check,no_root_squash,sync) \ No newline at end of file
diff --git a/server/etc/logrotate.tmpl b/server/etc/logrotate.tmpl
new file mode 100644
index 00000000..abe436d1
--- /dev/null
+++ b/server/etc/logrotate.tmpl
@@ -0,0 +1,24 @@
+# Los archivos se copian y luego se corta el original, para que los equipos puedan seguir escribiendo sobre ellos
+# Las copias se comprimen
+# Clientes: se guardan 500K de cada cliente: se rotan cuando llegan a 100K y se guardan 5
+# Mcastlog: se guardan dos semanas.
+# servicios opengnsys y tracker: se guardan 4 semanas
+
+
+copytruncate
+compress
+OPENGNSYSDIR/log/clients/*.log {
+ rotate 5
+ size 100k
+}
+
+OPENGNSYSDIR/log/mcastlog/ogAdmRepoMcast.*([-0-9]) {
+ rotate 2
+ weekly
+}
+
+OPENGNSYSDIR/log/bttrack.log OPENGNSYSDIR/log/ogAdmRepo.log OPENGNSYSDIR/log/ogAdmServer.log {
+ rotate 4
+ weekly
+}
+
diff --git a/server/etc/smb-og.conf.tmpl b/server/etc/smb-og.conf.tmpl
index 1ee7024c..894bbc72 100644
--- a/server/etc/smb-og.conf.tmpl
+++ b/server/etc/smb-og.conf.tmpl
@@ -1,37 +1,30 @@
[tftpboot]
comment = el directorio fisico ogclient debe estar como escritura
+ browseable = no
writeable = no
- read only = yes
- #locking = no
path = /var/lib/tftpboot
guest ok = no
-#[ogboot]
-# comment = OpenGnSys Boot
-# writeable = no
-# read only = yes
-# #locking = no
-# path = /var/lib/tftpboot
-# guest ok = no
-
[ogclient]
comment = OpenGnSys Client
- read only = yes
+ browseable = no
+ writeable = no
locking = no
path = OPENGNSYSDIR/client
guest ok = no
[oglog]
comment = OpenGnSys Log
- read only = no
+ browseable = no
writeable = yes
path = OPENGNSYSDIR/log/clients
guest ok = no
[ogimages]
comment = OpenGnSys Repository
- read only = no
+ browseable = no
writeable = yes
locking = no
path = OPENGNSYSDIR/images
guest ok = no
+
diff --git a/server/tftpboot/NetbootPXE.es.txt b/server/tftpboot/NetbootPXE.es.txt
index e467b763..3efd8371 100644
--- a/server/tftpboot/NetbootPXE.es.txt
+++ b/server/tftpboot/NetbootPXE.es.txt
@@ -2,11 +2,10 @@ Como cambiar el arranque en red PXELinux por Grub4DOS
=====================================================
-OpenGnSys usa como gestor PXE el binario pxelinux.0
+OpenGnSys 1.0.1 usa como gestor PXE el binario pxelinux.0, sin embargo, la actulización a OpenGnSys 1.0.2 sustituye automáticamente dicho gestor por Grub4Dos.
-También ofrece la posibilidad de usar el bianrio grldr que se está evaluando para solucionar algunas incidencias.
-
+Realizar los siguientes pasos para sutituir "a mano" PXELinux por Grub4Dos como gestor de arranque sin usar el proceso de actualización de OpenGnSys.
Activar el grldr del grub4dos
@@ -16,11 +15,15 @@ Activar el grldr del grub4dos
/etc/init.d/dhcpd restart
3) Renombrar cambiar el gestor de arranque de la web, para que use grldr.
cp /opt/opengnsys/www/principal/boot.php /opt/opengnsys/www/principal/boot.pxelinux.php
- cp /opt/opengnsys/www/principal/boot.grub4dos.php /opt/opengnsys/www/principal/boot.php
+ cp /opt/opengnsys/www/principal/boot.grub4dos.php /opt/opengnsys/www/principal/boot.php
+
+ cp /opt/opengnsys/www/gestores/gestor_pxe.php /opt/opengnsys/www/gestores/gestor_pxe.pxelinux.php
+ cp /opt/opengnsys/www/gestores/gestor_pxe_grub4dos.php /opt/opengnsys/www/gestores/gestor_pxe.php
-4) En la funcion ogBoot, de la libreria Boot.lib descomentar los comentarios del if de las líneas 71 a 85, para que quede
+4)
+En la funcion ogBoot, de la libreria Boot.lib descomentar los comentarios del if de las líneas 71 a 85, para que quede
#FIXME: activar seguimiento inicio sesion XP con grub4dos
- if `ogGetOsVersion $1 $2 | grep "XP" > /dev/null`
+ if `ogGetOsVersion $1 $2 | grep "Windows" > /dev/null`
then
dd if=/dev/zero of=${MNTDIR}/ogboot.me bs=1024 count=3
dd if=/dev/zero of=${MNTDIR}/ogboot.firstboot bs=1024 count=3
diff --git a/server/tftpboot/menu.lst/templates/ogadmin b/server/tftpboot/menu.lst/templates/ogadmin
new file mode 100644
index 00000000..a8d96209
--- /dev/null
+++ b/server/tftpboot/menu.lst/templates/ogadmin
@@ -0,0 +1,34 @@
+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 c7ef01fb..00d1a455 100644
--- a/server/tftpboot/menu.lst/templates/pxe
+++ b/server/tftpboot/menu.lst/templates/pxe
@@ -19,20 +19,16 @@ chainloader +1
savedefault fallback
boot
-title OpenGnsys-CACHE
+title OpenGnSys-CACHE
find --set-root --ignore-floppies --ignore-cd /boot/ogvmlinuz
-kernel /boot/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false INFOHOST
+kernel /boot/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false INFOHOST
initrd /boot/oginitrd.img
savedefault fallback
boot
-title OpenGnsys-NET
+title OpenGnSys-NET
keeppxe
-kernel (pd)/ogclient/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false INFOHOST
+kernel (pd)/ogclient/ogvmlinuz ro boot=oginit quiet splash vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=false ogdebug=false INFOHOST
initrd (pd)/ogclient/oginitrd.img
boot
-
-
-
-
diff --git a/server/tftpboot/menu.lst/templates/pxeADMIN b/server/tftpboot/menu.lst/templates/pxeADMIN
index 0dd603ce..cf58dabf 100644
--- a/server/tftpboot/menu.lst/templates/pxeADMIN
+++ b/server/tftpboot/menu.lst/templates/pxeADMIN
@@ -3,36 +3,10 @@ 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
+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
+kernel (pd)/ogclient/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogupdateinitrd=true INFOHOST
initrd (pd)/ogclient/oginitrd.img
boot
-
-
-
-