summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2014-06-18 10:42:24 +0000
committerramon <ramongomez@us.es>2014-06-18 10:42:24 +0000
commit1602040392ece97f3876f6b756158141a41cac3a (patch)
treedd933aa35b10a8dcb8bfc98c21f51de309f56cad /server
parent51c2318a7174de452b9ebd41dde9335a97b94e3f (diff)
Versión 1.0.5, #616: Integrar código de la versión 1.0.5 en rama principal.
git-svn-id: https://opengnsys.es/svn/trunk@4309 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'server')
-rw-r--r--server/INSTALL0
-rw-r--r--server/README.es.txt11
-rwxr-xr-xserver/bin/checkperms55
-rwxr-xr-xserver/bin/clean-mountdirimage38
-rwxr-xr-xserver/bin/compareDhcpOpengnsys17
-rwxr-xr-xserver/bin/createfileimage61
-rwxr-xr-xserver/bin/listclientmode44
-rwxr-xr-xserver/bin/mountimage66
-rwxr-xr-xserver/bin/partclone2sync174
-rwxr-xr-xserver/bin/reduceimage54
-rwxr-xr-xserver/bin/registeredsoftware63
-rwxr-xr-xserver/bin/setclientmode99
-rwxr-xr-xserver/bin/setserveraddr113
-rwxr-xr-xserver/bin/setsmbpass15
-rwxr-xr-xserver/bin/unmountimage47
-rw-r--r--server/etc/apache-prev2.4.conf.tmpl12
-rw-r--r--server/etc/apache.conf.tmpl5
-rw-r--r--server/tftpboot/menu.lst/templates/00unknown7
-rw-r--r--server/tftpboot/menu.lst/templates/01 (renamed from server/tftpboot/menu.lst/templates/1)1
-rw-r--r--server/tftpboot/menu.lst/templates/111
-rw-r--r--server/tftpboot/menu.lst/templates/121
-rw-r--r--server/tftpboot/menu.lst/templates/19pxeADMIN (renamed from server/tftpboot/menu.lst/templates/pxeADMIN)1
-rw-r--r--server/tftpboot/menu.lst/templates/ogadmin34
-rw-r--r--server/tftpboot/menu.lst/templates/pxe1
24 files changed, 799 insertions, 121 deletions
diff --git a/server/INSTALL b/server/INSTALL
deleted file mode 100644
index e69de29b..00000000
--- a/server/INSTALL
+++ /dev/null
diff --git a/server/README.es.txt b/server/README.es.txt
new file mode 100644
index 00000000..47fc9601
--- /dev/null
+++ b/server/README.es.txt
@@ -0,0 +1,11 @@
+OpenGnSys Server Manager RREADME
+===================================
+
+
+Este directorio contiene la estructura de datos del servidor central de OpenGnSys.
+
+- bin binarios y scripts de gestión del servidor.
+- etc ficheros o plantillas de configuración del servidor.
+- tftpboot plantillas de configuración del servicio de arranque remoto.
+
+
diff --git a/server/bin/checkperms b/server/bin/checkperms
new file mode 100755
index 00000000..f2ed84a0
--- /dev/null
+++ b/server/bin/checkperms
@@ -0,0 +1,55 @@
+#!/bin/bash
+# checkperms: Comprueba que los permisos de los ficheros sean correctos.
+# Nota: Las siguientes variables de entorno pueden usarse para retocar los
+# valores por defecto:
+# - OPENGNSYS_USER - usuario de OpenGnSys.
+# - OPENGNSYS_DIR - directorio de instalación.
+# - APACHE_USER - usuario de Apache.
+# - APACHE_GROUP - grupo de Apache.
+# Uso: checkperms
+# variable1=valor1 ... checkperms
+# Autor: Ramon Gomez - Univ. Sevilla, noviembre 2010
+# Fecha: 2012/07/13
+
+
+# Variables.
+OPENGNSYS_USER=${OPENGNSYS_USER:-"opengnsys"} # Usuario del cliente para acceso remoto
+OPENGNSYS_DIR=${OPENGNSYS_DIR:-/opt/opengnsys} # Directorio de instalación de OpenGnSys
+APACHE_USER=${APACHE_USER:-"www-data"} # Usuario de ejecución de Apache
+APACHE_GROUP=${APACHE_GROUP:-"www-data"} # Grupo de ejecución de Apache
+PROG=$(basename $0)
+
+# Control de errores.
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+if [ "$OPENGNSYS_USER" == "root" -o -z "$(getent passwd "$OPENGNSYS_USER" 2>/dev/null)" ]; then
+ echo "$PROG: Error: el usuario de OpenGnSys debe existir y no ser root (OPENGNSYS_USER=\"$OPENGNSYS_USER\")" >&2
+ exit 1
+fi
+if [ ! -d "$OPENGNSYS_DIR" ]; then
+ echo "$PROG: Error: sin acceso al directorio de OpenGnSys (OPENGNSYS_DIR=\"$OPENGNSYS_DIR\")". >&2
+ exit 1
+fi
+if [ -z "$(getent passwd "$APACHE_USER" 2>/dev/null)" -o -z "$(getent group "$APACHE_GROUP" 2>/dev/null)" ]; then
+ echo "$PROG: Error: no se detectan el usuario o el grupo de Apache (APACHE_USER=\"$APACHE_USER\", APACHE_GROUP=\"$APACHE_GROUP\")" >&2
+ exit 1
+fi
+
+chown -R :$OPENGNSYS_USER $OPENGNSYS_DIR/{log/clients,images}
+chmod -R 775 $OPENGNSYS_DIR/{log/clients,images}
+find $OPENGNSYS_DIR/client/{interfaceAdm,scripts} ! -name "*.txt" -exec chmod +x {} \;
+chown $OPENGNSYS_USER:$OPENGNSYS_USER $OPENGNSYS_DIR/client/interfaceAdm/CambiarAcceso
+chmod 700 $OPENGNSYS_DIR/client/interfaceAdm/CambiarAcceso
+chown root:root $OPENGNSYS_DIR/etc/{ogAdmServer,ogAdmAgent}*.cfg
+chmod 600 $OPENGNSYS_DIR/etc/{ogAdmServer,ogAdmAgent}*.cfg
+chown $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/www/controlacceso*.php
+chmod 600 $OPENGNSYS_DIR/www/controlacceso*.php
+chown -R $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/www/images/{fotos,iconos}
+chown -R $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/www/api
+chown -R $APACHE_USER:$APACHE_GROUP $OPENGNSYS_DIR/tftpboot/{menu.lst,pxelinux.cfg}
+chown -R :$OPENGNSYS_USER $OPENGNSYS_DIR/tftpboot/ogclient
+find -L $OPENGNSYS_DIR/tftpboot -type d -exec chmod 755 {} \;
+find -L $OPENGNSYS_DIR/tftpboot -type f -exec chmod 644 {} \;
+
diff --git a/server/bin/clean-mountdirimage b/server/bin/clean-mountdirimage
new file mode 100755
index 00000000..a47861ff
--- /dev/null
+++ b/server/bin/clean-mountdirimage
@@ -0,0 +1,38 @@
+#!/bin/bash
+#/**
+# clean-mountdirimage
+#@brief Borra los directorios de montaje de las imagenes que no se estén usando.
+#@param No
+#@return Información sobre los directorios borrardos o no.
+#@exception # Usuario distinto de root.
+#@version 1.0
+#@author Irina Gomez
+#@date 2014-01-20
+#*/ ##
+
+BASEDIR="/opt/opengnsys/images/mount"
+DIR=$(ls $BASEDIR)
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+# Desmontamos los directorios que no se esten usando.
+umount /opt/opengnsys/images/mount/* &>/dev/null
+# Guardamos los directorios que siguen montados.
+MOUNTEDDIR=$(df |grep /opt/opengnsys/images/mount)
+# Comprobamos que no esta montado y borramos.
+echo "Borrando los directorios de montaje de las imagenes:"
+for IMGDIR in $DIR
+do
+ echo -n " $IMGDIR:"
+ if ! echo $MOUNTEDDIR |grep -e "$BASEDIR/$IMGDIR " -e "$BASEDIR/$IMGDIR$" >/dev/null ; then
+ rm -rf $BASEDIR/$IMGDIR
+ echo "directorio borrado."
+ else
+ echo "directorio ocupado, no se puede borrar."
+
+ fi
+done
+
+
diff --git a/server/bin/compareDhcpOpengnsys b/server/bin/compareDhcpOpengnsys
index 5bf3cd43..bc6447d1 100755
--- a/server/bin/compareDhcpOpengnsys
+++ b/server/bin/compareDhcpOpengnsys
@@ -12,6 +12,7 @@ PROG=$(basename $0)
DHCPFILE=${DHCPFILE:-/etc/dhcp/dhcpd.conf}
TMP_DHCP=/tmp/$PROG-dhcp$$
TMP_MYSQL=/tmp/$PROG-mysql$$
+TMP_MYCNF=/tmp/.my.cnf.$$
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
@@ -27,8 +28,16 @@ fi
# Obtener datos de acceso a la Base de datos.
source $SERVERCONF
-
-trap "rm -f $TMP_DHCP $TMP_MYSQL" 1 2 3 9 15
+# Componer fichero con credenciales de conexión.
+touch $TMP_MYCNF
+chmod 600 $TMP_MYCNF
+cat << EOT > $TMP_MYCNF
+[client]
+user=$USUARIO
+password=$PASSWORD
+EOT
+
+trap "rm -f $TMP_DHCP $TMP_MYSQL $TMP_MYCNF" 1 2 3 9 15
# Creo fichero temporal del dhcp
grep -v "#" $DHCPFILE |egrep -e "host " -e "hardware ethernet" -e fixed-address | sed -e 's/.$//' \
|sed -e s/"^.*host "//g -e s/\{/\;/g -e s/"^.*hardware ethernet "/=/g -e s/"^.*fixed-address "/=/g \
@@ -37,7 +46,7 @@ grep -v "#" $DHCPFILE |egrep -e "host " -e "hardware ethernet" -e fixed-address
# Creo fichero temporal del mysql, de la base de datos de opengnsys
-mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
+mysql --defaults-extra-file=$TMP_MYCNF -D "$CATALOG" -N -e \
"select CONCAT_WS (';', nombreordenador, mac, ip) from ordenadores order by nombreordenador;" > $TMP_MYSQL
# Comparo los ficheros
@@ -45,5 +54,5 @@ echo "Comparamos las configuraciones: < dhcp y > mysql"
diff -bi $TMP_DHCP $TMP_MYSQL
[ $? == 0 ] && echo "El ficheros del servicio dhcp y la base de datos de ogAdmBD tienen la misma configuracion"
-rm -f $TMP_DHCP $TMP_MYSQL
+rm -f $TMP_DHCP $TMP_MYSQL $TMP_MYCNF
diff --git a/server/bin/createfileimage b/server/bin/createfileimage
new file mode 100755
index 00000000..73c57711
--- /dev/null
+++ b/server/bin/createfileimage
@@ -0,0 +1,61 @@
+#!/bin/bash
+#/**
+# createtimage
+#@brief Crea o redimensiona el archivo de la imagen.
+#@param 1 imagen
+#@param 2 extension [ img|diff ]
+#@param 3 tamaño de la imagen en kb.
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_DONTSYNC_IMAGE #71 Imagen no sincronizable (es monolitica)
+#@version 1.0 - Montar imagen sincronizable
+#@author Irina Gomez
+#@date 2013-05-23
+#*/ ##
+BASEDIR=/opt/opengnsys
+REPODIR="$BASEDIR/images"
+REPOLOG=$BASEDIR/log/ogAdmRepo.log
+source $BASEDIR/client/etc/lang.$LANG.conf
+
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ echo -e " $PROG: $MSG_HELP_ogCreateFileImage \n" \
+ "$MSG_FORMAT: $PROG image [ img|diff ] size_kb \n" \
+ "base -> $PROG Windows7 img 3900000 \n" \
+ "diff -> $PROG Ubuntu12 diff 450000"
+ exit 0
+fi
+
+[ $# -lt 3 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ] size_Kb " && exit 1
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+IMGEXT="$2"
+
+# Si existe imagen, Comprobamos que no esta bloqueada y que es sincronizable
+IMGFILE="$REPODIR/$1.$IMGEXT"
+if [ -f $IMGFILE ]; then
+ [ -f $IMGFILE.lock ] && echo "$PROG: Error: $MSG_ERR_LOCKED $1 $IMGEXT" && exit 4
+
+
+ if ! file $IMGFILE | grep -i -e " BTRFS Filesystem " -e " ext4 filesystem " >/dev/null ; then
+ echo "$PROG: Error: $MSG_ERR_DONTSYNC_IMAGE $1 $2"
+ exit 71
+ fi
+fi
+
+touch $IMGFILE.lock
+
+# El tamaño minimo de la imagen es 300000 para poder formatear en fs btrfs.
+SIZEREQUIRED=$3
+[ $SIZEREQUIRED -lt 300000 ] && SIZEREQUIRED=300000
+
+echo CREATE_IMAGE "$1" $IMGEXT $SIZEREQUIRED
+echo -ne CREATE_IMAGE "$1" $IMGEXT $SIZEREQUIRED| /opt/opengnsys/sbin/ogAdmRepoAux || exit $?
+echo "Los resultado se registran en $REPOLOG. "
+
+rm $IMGFILE.lock
diff --git a/server/bin/listclientmode b/server/bin/listclientmode
index ba86f141..da4404e0 100755
--- a/server/bin/listclientmode
+++ b/server/bin/listclientmode
@@ -11,7 +11,7 @@
PROG=$(basename $0)
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
-PXEDIR=$OPENGNSYS/tftpboot/pxelinux.cfg
+MYCNF=/tmp/.my.cnf.$$
# Control básico de errores.
if [ $# -ne 1 ]; then
@@ -26,27 +26,23 @@ fi
# Obtener datos de acceso a la Base de datos.
source $SERVERCONF
-# Comprobar si se recibe nombre de aula o de equipo.
-IDAULA=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT idaula FROM aulas WHERE nombreaula='$1';")
-
-if [ -n "$IDAULA" ]; then
- # Aula encontrada
- PCNAME=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT nombreordenador FROM ordenadores WHERE idaula='$IDAULA';")
-else
- # Buscar ordenador
- PCNAME=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT nombreordenador FROM ordenadores WHERE nombreordenador='$1';")
-fi
-if [ -z "$PCNAME" ]; then
- echo "$PROG: No existe ningún aula o equipo con el nombre \"$1\""
- exit 1
-fi
-
-for PC in $PCNAME; do
- PXE=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT arranque FROM ordenadores WHERE nombreordenador='$PC';")
- echo "Equipo $PC asociado a arranque tipo \"$PXE\""
-done
+# Sustituir caracteres ' por \' para evitar inyección SQL.
+RESOURCE="${1//\'/\'}"
+# Componer fichero con credenciales de conexión.
+touch $MYCNF
+chmod 600 $MYCNF
+cat << EOT > $MYCNF
+[client]
+user=$USUARIO
+password=$PASSWORD
+EOT
+# Borrar el fichero temporal si termina el proceso.
+trap "rm -f $MYCNF" 0 1 2 3 6 9 15
+# Obtener nombre de ordenador individual o todos los de una aula e indicar su plantilla asociada.
+mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
+ "SELECT nombreordenador, arranque FROM ordenadores
+ JOIN aulas USING (idaula)
+ WHERE aulas.nombreaula='$RESOURCE'
+ OR nombreordenador='$RESOURCE';" | \
+ awk '{ printf ("Equipo %s asociado a arranque tipo \"%s\"\n", $1, $2); }'
diff --git a/server/bin/mountimage b/server/bin/mountimage
new file mode 100755
index 00000000..6187724d
--- /dev/null
+++ b/server/bin/mountimage
@@ -0,0 +1,66 @@
+#!/bin/bash
+#/**
+# mountimage
+#@brief Monta imagen sincronizable en el repositorio con permisos de escritura
+#@param 1 imagen
+#@param 2 extension [ img|diff ] opcional, por defecto img
+#@return Directorio de montaje de la imagen.
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado
+#@exception OG_ERR_DONTSYNC_IMAGE #71 Imagen no sincronizable (es monolitica)
+#@exception OG_ERR_DONTMOUNT_IMAGE # 70 Error al montar una imagen sincronizada
+#@version 1.0 - Montar imagen sincronizable
+#@author Irina Gomez
+#@date 2013-05-23
+#*/ ##
+BASEDIR=/opt/opengnsys
+REPODIR="$BASEDIR/images"
+source $BASEDIR/client/etc/lang.$LANG.conf
+
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ echo -e " $PROG: $MSG_HELP_ogMountImage \n" \
+ "$MSG_FORMAT: $PROG nombre_image [ img|diff ] \n" \
+ "base -> $PROG Windows7 \n" \
+ "diff -> $PROG Ubuntu12 diff"
+ exit 0
+fi
+
+[ $# -lt 1 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ]" && exit 1
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+[ "$2" == "" -o "$2" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
+
+# Comprobamos que existe imagen
+IMGFILE="$REPODIR/$1.$IMGEXT"
+[ ! -f $IMGFILE ] && echo "$PROG: Error: $MSG_ERR_NOTFOUND $1 $IMGEXT" && exit 2
+
+
+# Comprobar que la imagen es sincronizable
+file $IMGFILE | grep -i -e " BTRFS Filesystem " >/dev/null && IMGFS=BTRFS
+file $IMGFILE | grep -i -e " ext4 filesystem " >/dev/null && IMGFS=EXT4
+if [ "$IMGFS" != "BTRFS" -a "$IMGFS" != "EXT4" ] ; then
+ echo "$PROG: Error: $MSG_ERR_DONTSYNC_IMAGE $1 $2"
+ exit 71
+fi
+
+MOUNTDIR="$REPODIR/mount/$1"
+[ "$IMGEXT" == "img.diff" ] && MOUNTDIR="$MOUNTDIR.${IMGEXT#*\.}"
+mkdir -p "$MOUNTDIR"
+
+# Comprobamos si la imagen esta montada y si es así nos salimos.
+df |grep "$MOUNTDIR$" 2>&1 >/dev/null && echo "$MOUNTDIR" && exit 0
+
+if [ "$IMGFS" == "EXT4" ] ; then
+ mount -t ext4 "$IMGFILE" "$MOUNTDIR"
+else
+ mount -o compress=lzo "$IMGFILE" "$MOUNTDIR"
+fi
+[ $? -eq 0 ] || ( echo "$MSG_ERR_DONTMOUNT_IMAGE $1 $2" ; exit 70)
+echo "$MOUNTDIR"
+
diff --git a/server/bin/partclone2sync b/server/bin/partclone2sync
new file mode 100755
index 00000000..4272cf06
--- /dev/null
+++ b/server/bin/partclone2sync
@@ -0,0 +1,174 @@
+#!/bin/bash
+#/**
+# partclone2sync
+#@brief Convierte imagen de partclone en imagen sincronizable.
+#@param 1 imagen partclone.
+#@param 2 imagen sincronizable.
+#@param 3 tipo de sincronización y formato de la imagen SYNC1 (directorio) y SYNC2 (fichero)
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado
+#@exception OG_ERR_LOCKED # 4 Imagen de partclone bloqueada.
+#@exception OG_ERR_IMAGE # 5 Error al crear la imagen.
+#@exception OG_CACHESIZE # 16 No hay espacio suficiente en el disco.
+#@note Necesita tener instalado partclone-utils y lzop
+#@version 1.0 -
+#@author Irina Gomez
+#@date 2014-01-22
+#*/ ##
+trap "onexit \"$1\" \"$2\" $3" 0 5 16 9 15
+
+function onexit() {
+ local exit_status=$?
+ # Desmontamos el cliente de opengnsys y la imagen temporal.
+ umount $OGCLIENTDIR/ogclientmount $AUXDIR
+ rm -rf $IMGINFO $FILEHEAD $TMPLOG
+
+ # Borramos los ficheros de bloqueo de las imagenes nuevas.
+ rm -rf $RSYNCIMG.img.lock $AUXIMG.lock
+ # Borramos los ficheros de bloqueo dela imagen de partclone si no estaba bloqueada.
+ [ $exit_status -eq 4 ] || rm -rf $PARTCLONEIMG.lock
+
+ # Borramos las imagenes y directorios temporales.
+ rm $AUXIMG
+ rmdir $AUXDIR $OGCLIENTDIR/ogclientmount
+
+ exit $exit_status
+}
+
+TIME1=$SECONDS
+
+BASEDIR=/opt/opengnsys
+REPODIR="$BASEDIR/images"
+BINDIR="$BASEDIR/bin"
+PROG="$(basename $0)"
+# Cargamos los mensajes en el idioma del sistema.
+source $BASEDIR/client/etc/lang.$LANG.conf
+
+# Sistema de fichero de la imagen según kernel, menor que 3.7 EXT4. comparamos revision
+[ $(uname -r|cut -d. -f2) -lt 7 ] && IMGFS="EXT4" || IMGFS="BTRFS"
+
+# Mostrar ayuda: Si se solicita, si faltan parametros o $3 no es SYNC1 o SYNC2.
+if [ "$*" == "help" -o $# -lt 3 ] && ! [[ "$3" == SYNC[1,2] ]]; then
+ echo -e "$PROG: $MSG_HELP_partclone2sync \n" \
+ "$MSG_FORMAT: $PROG image_partclone image_rsync [ SYNC1 | SYNC2 ] \n" \
+ " $PROG Windows7 Windows72013 SYNC1 "
+ exit 0
+fi
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+
+PARTCLONEIMG="$REPODIR/$1.img"
+RSYNCIMG="$REPODIR/$2"
+AUXIMG="$REPODIR/$1.tmp.img"
+AUXDIR="/tmp/partclone2rsync$$"
+TYPE="$3"
+TMPLOG=/tmp/rsync$$.sal
+
+# Comprobamos que exista la imagen.
+! [ -f $PARTCLONEIMG ] && echo "$MSG_ERR_NOTFOUND: $1" && exit 2
+
+# Comprobamos que la imagen no este bloqueada.
+[ -f $PARTCLONEIMG.lock ] && echo "$MSG_ERR_LOCKED: $1" && exit 4
+
+# Usamos el partclone del ogclient.
+OGCLIENTDIR=$BASEDIR/tftpboot/ogclient
+[ -d $OGCLIENTDIR/ogclientmount ] || mkdir $OGCLIENTDIR/ogclientmount
+mount $OGCLIENTDIR/ogclient.sqfs $OGCLIENTDIR/ogclientmount
+PATHPARTCLONE=$OGCLIENTDIR/ogclientmount/usr/sbin
+
+# Creamos fichero de bloqueo
+touch $PARTCLONEIMG.lock $AUXIMG.lock
+
+
+# Datos imagen.
+echo [10] Obtenemos datos del partclone.
+FILEHEAD=/tmp/$(basename $PARTCLONEIMG).infohead
+COMPRESSOR=`file $PARTCLONEIMG | awk '{print $2}'`
+$COMPRESSOR -dc $PARTCLONEIMG 2>/dev/null | head > $FILEHEAD
+PARTCLONEINFO=$(LC_ALL=C partclone.info $FILEHEAD 2>&1)
+if `echo $PARTCLONEINFO | grep size > /dev/null`
+then
+ FS=$(echo $PARTCLONEINFO | awk '{gsub(/\: /,"\n"); print toupper($8);}')
+ echo $PARTCLONEINFO | grep GB > /dev/null && SIZEFACTOR=1000000 || SIZEFACTOR=1024
+ IMGSIZE=$(echo $PARTCLONEINFO | awk -v FACTOR=$SIZEFACTOR '{gsub(/\: /,"\n"); printf "%d\n", $11*FACTOR;}')
+else
+ echo "Error: partclone.info no detecta la imagen"
+ exit 5
+fi
+[ "$FS" == "NTFS" ] && echo "Error: Todavia no podemos convertir imagenes de Windows" && exit 6
+
+# Calculamos el espacio disponible en la particion de opengnsys.
+echo -n "[20]$MSG_SCRIPTS_CREATE_SIZE "
+for DIR in "/" "/opt" "/opt/opengnsys" "/opt/opengnsys/images"
+do
+ AUXSIZE=$(df|grep $DIR$|awk '{print $3}')
+ [ "$AUXSIZE" != "" ] && PARTSIZE=$AUXSIZE
+done
+let REQUIRESIZE=2*$IMGSIZE
+if [ $PARTSIZE -lt $REQUIRESIZE ]; then
+ echo "No hay espacio suficiente para descomprimir y crear la imagen: $REQUIRESIZE."
+ exit 16
+fi
+echo "$REQUIRESIZE $PARTSIZE"
+
+# Descomprimimos la imagen de partclone.
+echo [30] Descomprimimos la imagen de partclone.
+$COMPRESSOR -dc $PARTCLONEIMG | $PATHPARTCLONE/partclone.restore -C -s - -O $AUXIMG
+
+TIME2=$[SECONDS-TIME1]
+echo " $MSG_SCRIPTS_TASK_END: $MSG_SCRIPTS_TIME_PARTIAL: $[TIME2/60]m $[TIME2%60]s"
+
+# Montamos la imagen:
+mkdir -p $AUXDIR
+mount $AUXIMG $AUXDIR
+
+# Sincronizamos de la imagen del partclone a la del rsync.
+echo "[60] Sincronizamos desde la imagen de partclone a la de rsync."
+if [ "$TYPE" == "SYNC1" ]; then
+ mkdir -p $RSYNCIMG
+ echo " * Log temporal en: $TMPLOG"
+ echo rsync -aHAX $AUXDIR/ $RSYNCIMG --- log: $TMPLOG
+ rsync -aHAXv $AUXDIR/ $RSYNCIMG >> $TMPLOG
+TIME3=$[SECONDS-TIME2]
+echo " $MSG_SCRIPTS_TASK_END: $MSG_SCRIPTS_TIME_PARTIAL: $[TIME3/60]m $[TIME3%60]s"
+else
+ IMGINFO="/tmp/ogimg.info$$"
+ IMGDIR="$REPODIR/mount/$(basename $RSYNCIMG)"
+ # Calculamos el tamaño de la imagen
+ SIZE=$(df -k|awk -v P="$AUXDIR" '{if ($6==P) print $3}')
+ # Creo fichero de informacion de la imagen
+ echo "#$FSIMG:LZO:$FS:$SIZE" > $IMGINFO
+ # Factor de compresion de la imagen
+ [ "$FS" == "NTFS" ] && ZFACTOR=120 || ZFACTOR=110
+ [ "$FSIMG" == "BTRFS" ] && let ZFACTOR=$ZFACTOR-30
+ let SIZE=$SIZE*$ZFACTOR/100
+
+ # Creamos el fichero de la imagen vacio (queda montado)
+ echo " * $MSG_HELP_ogCreateFileImage"
+ $BINDIR/createfileimage $(basename $RSYNCIMG) img $SIZE || exit 5
+ touch $RSYNCIMG.img.lock
+ TIME3=$[SECONDS-TIME2]
+ echo " $MSG_SCRIPTS_TASK_END: $MSG_SCRIPTS_TIME_PARTIAL: $[TIME3/60]m $[TIME3%60]s"
+
+ # Sincronizo las imagenes antigua y nueva.
+ echo " * Sincroniza las imagenes antigua y nueva. log temporal en: $TMPLOG"
+ echo rsync -aHAX $AUXDIR/ $IMGDIR
+ rsync -aHAXv $AUXDIR/ $IMGDIR >> $TMPLOG
+ TIME4=$[SECONDS-TIME3]
+ echo " $MSG_SCRIPTS_TASK_END: $MSG_SCRIPTS_TIME_PARTIAL: $[TIME4/60]m $[TIME4%60]s"
+ # copiamos el fichero de informacion dentro de la imagen.
+ mv $IMGINFO $IMGDIR/ogimg.info
+ # Desmontamos la imagen y la reducimos al minimo.
+ $BINDIR/unmountimage $(basename $RSYNCIMG) img
+ echo " * $MSG_HELP_ogReduceImage."
+ rm $RSYNCIMG.img.lock
+ $BINDIR/reduceimage $(basename $RSYNCIMG) img
+
+fi
+
+TIME=$[SECONDS-TIME1]
+echo " $MSG_SCRIPTS_END: $MSG_SCRIPTS_TIME_TOTAL: $[TIME/60]m $[TIME%60]s"
diff --git a/server/bin/reduceimage b/server/bin/reduceimage
new file mode 100755
index 00000000..cb2d2f37
--- /dev/null
+++ b/server/bin/reduceimage
@@ -0,0 +1,54 @@
+#!/bin/bash
+#/**
+# reduceimage
+#@brief Reduce el archivo de la imagen a tamaño datos + 500M
+#@param 1 imagen
+#@param 2 extension [ img|diff ] opcional, por defecto img
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@exception OG_ERR_NOTFOUND # 2 Fichero o dispositivo no encontrado
+#@exception OG_ERR_LOCKED # 4 Partición o fichero bloqueado
+#@exception OG_ERR_DONTSYNC_IMAGE #71 Imagen no sincronizable (es monolitica)
+#@version 1.0 - Reducir tamaño imagen sincronizable
+#@author Irina Gomez
+#@date 2013-05-23
+#*/ ##
+BASEDIR=/opt/opengnsys
+REPODIR="$BASEDIR/images"
+REPOLOG=$BASEDIR/log/ogAdmRepo.log
+source $BASEDIR/client/etc/lang.$LANG.conf
+
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ echo -e " $PROG: $MSG_HELP_ogReduceImage \n" \
+ "$MSG_FORMAT: $PROG nombre_image [ img|diff ] \n" \
+ "base -> $PROG Windows7 \n" \
+ "diff -> $PROG Ubuntu12 diff"
+ exit 0
+fi
+
+[ $# -lt 1 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ]" && exit 1
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+[ "$2" == "" -o "$2" == "img" ] && IMGEXT="img" || IMGEXT="img.diff"
+# Comprobamos que existe imagen y que no este bloqueada
+IMGFILE="$REPODIR/$1.$IMGEXT"
+[ ! -f $IMGFILE ] && echo "$PROG: Error: $MSG_ERR_NOTFOUND $1 $IMGEXT" && exit 2
+[ -f $IMGFILE.lock ] && echo "$PROG: Error: $MSG_ERR_LOCKED $1 $IMGEXT" && exit 4
+
+# Comprobar que la imagen es sincronizable
+if ! file $IMGFILE | grep -i -e " BTRFS Filesystem " -e " ext4 filesystem " >/dev/null ; then
+ echo "$PROG: Error: $MSG_ERR_DONTSYNC_IMAGE $1 $2"
+ exit 71
+fi
+
+touch $IMGFILE.lock
+echo -ne REDUCE_IMAGE "$1" ${IMGEXT#*\.} | /opt/opengnsys/sbin/ogAdmRepoAux
+echo "Los resultado se registran en $REPOLOG. "
+
+rm $IMGFILE.lock
diff --git a/server/bin/registeredsoftware b/server/bin/registeredsoftware
new file mode 100755
index 00000000..31357dfb
--- /dev/null
+++ b/server/bin/registeredsoftware
@@ -0,0 +1,63 @@
+#!/bin/bash
+# registeredsoftware str_image
+#@file registeredsoftware
+#@brief Lista el software instalado en una imagen de sistema.
+#@param str_image Nombre canónico de la imagen.
+#@return Líneas con el formato: programa versión
+#@version 1.0 - Creación del script.
+#@author Ramón Gómez - Univ. Sevilla
+#@date 2014-02-27
+
+
+# Variables.
+PROG=$(basename $0)
+OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
+SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
+MYCNF=/tmp/.my.cnf.$$
+
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ echo "$PROG: Lista el software instalado en una imagen de sistema."
+ echo "Formato: $PROG str_image"
+ exit 0
+fi
+
+# Control básico de errores.
+if [ $# -ne 1 ]; then
+ echo "$PROG Error: Formato: $PROG str_image" >&2
+ exit 1
+fi
+if [ ! -r $SERVERCONF ]; then
+ echo "$PROG: Sin acceso a fichero de configuración"
+ exit 2
+fi
+
+# Sustituir caracteres ' por \' para evitar inyección SQL.
+RESOURCE="${1//\'/\'}"
+
+# Obtener datos de acceso a la base de datos.
+source $SERVERCONF
+
+# Componer fichero con credenciales de conexión a la base de datos.
+touch $MYCNF
+chmod 600 $MYCNF
+cat << EOT > $MYCNF
+[client]
+user=$USUARIO
+password=$PASSWORD
+EOT
+
+# Borrar el fichero temporal si termina el proceso.
+trap "rm -f $MYCNF" 0 1 2 3 6 9 15
+
+# Obtener lista de componentes del perfil de software asociado a la imagen.
+mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
+ "SELECT softwares.descripcion
+ FROM perfilessoft
+ LEFT OUTER JOIN perfilessoft_softwares ON perfilessoft.idperfilsoft=perfilessoft_softwares.idperfilsoft
+ LEFT OUTER JOIN softwares ON softwares.idsoftware=perfilessoft_softwares.idsoftware
+ LEFT OUTER JOIN tiposoftwares ON softwares.idtiposoftware=tiposoftwares.idtiposoftware
+ LEFT OUTER JOIN imagenes ON perfilessoft.idperfilsoft=imagenes.idperfilsoft
+ WHERE imagenes.nombreca='$RESOURCE'
+ ORDER BY tiposoftwares.idtiposoftware,softwares.descripcion;"
+
diff --git a/server/bin/setclientmode b/server/bin/setclientmode
index ecacf247..84ef0f95 100755
--- a/server/bin/setclientmode
+++ b/server/bin/setclientmode
@@ -5,6 +5,9 @@
# y se eliminan los enlaces para equipos con la plantilla por defecto.
# Uso: clienmode NombrePlatilla { NombrePC | NombreAula }
# Autores: Irina Gomez y Ramon Gomez - Univ. Sevilla, noviembre 2010
+#@version 1.0.1 - Identificacion de la plantilla por nombre en consola = en primera linea de la plantilla
+#@author Irina Gomez - Univ. Sevilla
+#@date 2013-05-31
# Variables.
@@ -12,39 +15,46 @@ PROG=$(basename $0)
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg
PXEDIR=$OPENGNSYS/tftpboot/menu.lst
-TEMPLATE="$PXEDIR/templates/$1"
LOGFILE=$OPENGNSYS/log/opengnsys.log
+MYCNF=/tmp/.my.cnf.$$
# Control básico de errores.
if [ $# -ne 2 ]; then
echo "$PROG: Error de ejecución"
- echo "Formato: $PROG Archivo_platilla [NOMBRE_PC|NOMBRE_AULA]"
+ echo "Formato: $PROG template [pc_name|group_name]"
exit 1
fi
if [ ! -r $SERVERCONF ]; then
echo "$PROG: Sin acceso a fichero de configuración"
exit 2
fi
-if [ ! -e $TEMPLATE ]; then
- echo "No existe archivo platilla: $TEMPLATE"
+TEMPLATE=$(grep "^#.* $1 *$" $PXEDIR/templates/*|cut -d: -f1)
+if [ -z "$TEMPLATE" ]; then
+ echo "No existe archivo platilla: $1"
exit
fi
# Obtener datos de acceso a la Base de datos.
source $SERVERCONF
-# Comprobar si se recibe nombre de aula o de equipo.
-IDAULA=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT idaula FROM aulas WHERE nombreaula=\"$2\";")
-
-if [ -n "$IDAULA" ]; then
- # Aula encontrada
- ETHERNET=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT mac FROM ordenadores WHERE idaula=\"$IDAULA\";")
-else
- # Buscar ordenador
- ETHERNET=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT mac FROM ordenadores WHERE nombreordenador=\"$2\";")
-fi
+# Sustituir caracteres ' por \' para evitar inyección SQL.
+BOOTMODE="${1//\'/\'}"
+RESOURCE="${2//\'/\'}"
+# Componer fichero con credenciales de conexión.
+touch $MYCNF
+chmod 600 $MYCNF
+cat << EOT > $MYCNF
+[client]
+user=$USUARIO
+password=$PASSWORD
+EOT
+# Borrar el fichero temporal si termina el proceso.
+trap "rm -f $MYCNF" 0 1 2 3 6 9 15
+# Buscar ordenador individual o todos los de una aula.
+ETHERNET=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
+ "SELECT mac FROM ordenadores
+ JOIN aulas USING (idaula)
+ WHERE aulas.nombreaula='$RESOURCE'
+ OR nombreordenador='$RESOURCE';")
if [ -z "$ETHERNET" ]; then
date +"%b %d %T $PROG: No existe aula o equipo con el nombre \"$2\"" | tee -a $LOGFILE
exit 1
@@ -53,26 +63,47 @@ fi
# Copiar fichero de configuración y actualizar base de datos.
date +"%b %d %T $PROG: Configurando \"$1\" en \"$2\"" | tee -a $LOGFILE
NPC=0
-for AUX in $ETHERNET; do
- date +"%b %d %T $PROG: Detectada ethernet \"$AUX\" en \"$2\"" | tee -a $LOGFILE
- AUX="01-${AUX:0:2}-${AUX:2:2}-${AUX:4:2}-${AUX:6:2}-${AUX:8:2}-${AUX:10:2}"
- # Si existe anteriormente lo borra
- [ -e $PXEDIR/$AUX ] && rm $PXEDIR/$AUX
+for MAC in $ETHERNET; do
+ date +"%b %d %T $PROG: Detectada ethernet \"$MAC\" en \"$2\"" | tee -a $LOGFILE
+ # Si existe anteriormente el fichero PXE, lo borra
+ PXEFILE=$PXEDIR/01-${MAC:0:2}-${MAC:2:2}-${MAC:4:2}-${MAC:6:2}-${MAC:8:2}-${MAC:10:2}
+ [ -e $PXEFILE ] && rm $PXEFILE
if [ "$1" != "default" ]; then
- cp -a $TEMPLATE $PXEDIR/$AUX
- DATOS=$(mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "SELECT ordenadores.ip, ':', repositorios.ip, ':',
- aulas.router, ':', aulas.netmask, ':',
- ordenadores.netiface, ':none group=',
- REPLACE (aulas.nombreaula, ' ', '_')
+ # Si no está definida la variable LANG, usar idioma inglés por defecto.
+ [ -z "$LANG" -o "$LANG" == "C" ] && LANG="en"
+ # Obtener de la BD los parámetros de arranque asociados (separador es TAB).
+ DATOS=$(mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \
+ "SELECT ' LANG=$LANG',
+ ' ip=', CONCAT_WS (':', ordenadores.ip,
+ (@repoip:=repositorios.ip), aulas.router, aulas.netmask,
+ ordenadores.nombreordenador, ordenadores.netiface, 'none'),
+ ' group=', REPLACE (aulas.nombreaula, ' ', '_'),
+ ' ogrepo=', @repoip,
+ ' oglive=', @repoip,
+ ' oglog=', (SELECT (@serverip:=ipserveradm) FROM entornos LIMIT 1),
+ ' ogshare=', @serverip,
+ ' winboot=', IFNULL (perfileshard.winboot, 'reboot'),
+ IF (aulas.dns IS NULL, '', CONCAT (' ogdns=', aulas.dns)),
+ IF (aulas.proxy IS NULL, '', CONCAT (' ogproxy=', aulas.proxy)),
+ CASE
+ WHEN menus.resolucion IS NULL THEN ''
+ WHEN menus.resolucion <= '999' THEN CONCAT (' vga=', menus.resolucion)
+ WHEN menus.resolucion LIKE '%:%' THEN CONCAT (' video=', menus.resolucion)
+ ELSE menus.resolucion
+ END
FROM ordenadores
- JOIN aulas ON ordenadores.idaula=aulas.idaula
- JOIN repositorios ON ordenadores.idrepositorio=repositorios.idrepositorio
- WHERE ordenadores.mac=\"$ETHERNET\";")
+ JOIN aulas USING (idaula)
+ JOIN repositorios USING (idrepositorio)
+ LEFT JOIN perfileshard USING (idperfilhard)
+ LEFT JOIN menus USING (idmenu)
+ WHERE ordenadores.mac='$MAC';")
+ # Quitar tabuladores y sustituir caracteres quitando acentos y tildes.
DATOS=$(echo ${DATOS// /} | tr 'áéíóúñÁÉÍÓÚÑ' 'aeiounAEIOUN')
- perl -pi -e "s/INFOHOST/$DATOS/g" $PXEDIR/$AUX
- mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "UPDATE ordenadores SET arranque=\"$1\" WHERE mac=\"$ETHERNET\";"
+ # Crear fichero PXE a partir de la plantilla con los datos obtenidos en la BD.
+ sed -e "s/vga=[0-9]*//g; s/INFOHOST/$DATOS/g" $TEMPLATE >$PXEFILE
+ # Actualizar en la BD el modo de arranque asociada el cliente.
+ mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
+ "UPDATE ordenadores SET arranque='$BOOTMODE' WHERE mac='$MAC';"
fi
let NPC=NPC+1
done
diff --git a/server/bin/setserveraddr b/server/bin/setserveraddr
index 44da0c7b..a53245c6 100755
--- a/server/bin/setserveraddr
+++ b/server/bin/setserveraddr
@@ -5,12 +5,17 @@
# Uso: setserveraddr iface
# Autor: Ramon Gomez - Univ. Sevilla
# Fecha: 2011-01-25
+# Versión: 1.0.5 - Regenerar ficheros de configuración.
+# Autor: Ramon Gomez - Univ. Sevilla
+# Fecha: 2014-06-06
-# Comprobar parámetros.
+# Variables globales.
PROG="$(basename $0)"
+
+# Comprobar parámetros.
if [ $# -ne 1 ]; then
- echo "$PROG: Incorrect operand. Format: $PROG device" >&2
+ echo "$PROG: Incorrect operand. Format: $PROG interface" >&2
exit 1
fi
if [ "$USER" != "root" ]; then
@@ -18,21 +23,41 @@ if [ "$USER" != "root" ]; then
exit 1
fi
+# Aviso informando de que los clientes iniciados pueden quedarse colgados.
+read -p "WARNING: initiated clients can hang. Continue? (y/n): " ANSWER
+if [ "${ANSWER^^}" != "Y" ]; then
+ echo "Operation canceled."
+ exit 0
+fi
+
# Detectar la interfaz de red.
DEVICES=$(ip -o link show up|awk -F: '$2!~/lo/ {print $2}')
-FOUND=0
-for dev in $DEVICES; do
- [ "$dev" == "$1" ] && FOUND=1;
+for DEV in $DEVICES; do
+ # Si se encuentra la interfaz de red, obtener su dirección IP.
+ [ "$DEV" == "$1" ] && SERVERIP=$(ip -o addr show dev $DEV | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
done
-if [ $FOUND == 1 ]; then
+# Comprobar si se ha detectado dirección IP.
+if [ -n "$SERVERIP" ]; then
+ # Ficheros temporales.
+ tmpfile=$(mktemp /tmp/og.XXXXX)
+ MYCNF=$(mktemp /tmp/.my.cnf.XXXXX)
+ trap "rm -f $tmpfile $MYCNF" 1 2 3 6 9 15
+
# Comprobar si hay que modificar la configuración de DHCP.
CHANGE=0
- for f in /etc/{dhcp,dhcp3}/dhcpd.conf; do
- file="${f/./-$1.}"
- if [ -f $file -a ! $f -ef $file ]; then
- ln -f $file $f
- CHANGE=1
+ for f in /etc/{dhcp,hcp3}/dhcpd.conf; do
+ if [ -f $f ]; then
+ # Cambiar el parámetro "next-server" de DHCP.
+ sed "s/next-server.*/next-server $SERVERIP/" $f >$tmpfile
+ file="${f/./-$1.}"
+ # Copiar el fichero y enlazarlo si hay cambios.
+ if ! diff -q $tmpfile $file &>/dev/null; then
+ mv $tmpfile $file
+ chmod 644 $file
+ ln -f $file $f
+ CHANGE=1
+ fi
fi
done
# Si ha cambiado la configuración, reiniciar DHCP.
@@ -43,33 +68,77 @@ if [ $FOUND == 1 ]; then
else
echo "Don't change the DHCP configuration."
fi
- # Comprobar si hay que modificar la configuración de OpenGnsys.
+
+ # Guardar la IP anterior del repositorio.
OPENGNSYS=/opt/opengnsys
+ source $OPENGNSYS/etc/ogAdmRepo.cfg
+ OLDSERVERIP=$IPlocal
+
+ # Comprobar si hay que modificar la configuración de OpenGnsys.
CHANGE=0
- for f in etc/{ogAdmServer,ogAdmRepo,ogAdmAgent}.cfg www/controlacceso.php client/etc/ogAdmClient.cfg; do
- file="$OPENGNSYS/${f/./-$1.}"
- if [ ! -f $file ]; then
+ # Procesar los ficheros de configuración de OpenGnSys.
+ for f in $OPENGNSYS/{etc/{ogAdmServer,ogAdmRepo,ogAdmAgent}.cfg,www/controlacceso.php,client/etc/ogAdmClient.cfg}; do
+ # Error si no existe algún fichero de configuración.
+ if [ ! -f $f ]; then
echo "$PROG: File $file does not exist." >&2
exit 2
fi
- cfg=$OPENGNSYS/$f
- if [ ! $cfg -ef $file ]; then
- ln -f $file $cfg
+ # Cambiar la IP del servidor:
+ # - variables ServidorAdm e IPlocal,
+ # - servidor o IP en URLs excepto si contienen "localhost".
+ sed -e "s,ServidorAdm=.*,ServidorAdm=$SERVERIP," \
+ -e "s,IPlocal=.*,IPlocal=$SERVERIP," \
+ -e '/localhost/!s,http://[^/]*/\(.*\),http://'$SERVERIP'/\1,' $f >$tmpfile
+ file="${f/./-$1.}"
+ # Copiar el fichero y enlazarlo si hay cambios.
+ if ! diff -q $tmpfile $file &>/dev/null; then
+ mv $tmpfile $file
+ chmod 644 $file
+ ln -f $file $f
CHANGE=1
fi
done
+
# Si ha cambiado la configuración, reiniciar OpenGnSys y actualizar la BD.
if [ $CHANGE == 1 ]; then
/etc/init.d/opengnsys restart
source $OPENGNSYS/etc/ogAdmServer.cfg
- mysql -u "$USUARIO" -p"$PASSWORD" -D "$CATALOG" -N -e \
- "UPDATE entornos SET ipserveradm='$ServidorAdm' WHERE identorno=1"
- echo "Default server interface set to: $1 ($ServidorAdm)"
+ # Componer fichero con credenciales de conexión.
+ cat << EOT > $MYCNF
+[client]
+user=$USUARIO
+password=$PASSWORD
+EOT
+ # Actualizar IP del servidor en la BD.
+ mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
+ "UPDATE entornos
+ SET ipserveradm='$SERVERIP'
+ WHERE identorno=1"
+
+ # Actualizar IP del repositorio en la BD.
+ mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
+ "UPDATE repositorios
+ SET ip='$SERVERIP'
+ WHERE ip='$OLDSERVERIP'"
+
+ # Mostrar instrucciones a realizar tras la ejecución.
+ cat << EOT
+Default server interface set to: $1 ($SERVERIP)
+
+Manual tasks:
+Check DHCP configuration file and restart service, if needed.
+Log-in as Web Console organization user.
+ - Check URLs in all menus.
+ - Run Advanced Netboot in all rooms.
+
+EOT
else
+ # Mensaje indicando que no se han cambiado datos.
echo "Don't change the default interface: $1"
fi
else
- echo "$PROG: Network device not found. Format: $PROG device" >&2
+ # Error: interfaz de red no encontrado.
+ echo "$PROG: Network device not found. Format: $PROG interface" >&2
exit 1
fi
diff --git a/server/bin/setsmbpass b/server/bin/setsmbpass
index ac920c00..82d7ce46 100755
--- a/server/bin/setsmbpass
+++ b/server/bin/setsmbpass
@@ -28,17 +28,21 @@ fi
# Crear clave para usuario de acceso a los recursos.
if [ -r $CLIENTINITRD ]; then
+ # Recuperar eco de consola si se corta el proceso.
+ trap "stty echo 2>/dev/null" KILL
+ # Obtener clave del teclado sin eco en pantalla.
stty -echo 2>/dev/null
echo -n "Clave del usuario Samba: "
read SAMBAPASS
# Solo se deben aceptar números y letras para la clave de acceso.
- if [ -n "${SAMBAPASS//[a-zA-Z0-9]/}" ]; then
+ if [[ "$SAMBAPASS" =~ [^a-zA-Z0-9] ]]; then
echo
echo "$PROG: Error: la clave solo debe contener caracteres alfanuméricos" >&2
stty echo 2>/dev/null
exit 2
fi
echo
+ # Obtener confirmación clave sin eco en pantalla.
echo -n "Confirmar clave: "
read SAMBAPASS2
echo
@@ -57,7 +61,16 @@ if [ -r $CLIENTINITRD ]; then
# TEMPORAL: solución ticket 554, actualizar cliente en caché (ogLive r3257).
sed -i "s/busybox reboot/reboot/" scripts/ogfunctions
# FIN CÓDIGO TEMPORAL.
+ # Ticket 565, preparar acceso Rsync cliente.
+ echo "$SAMBAPASS" > scripts/passrsync
+ chown root.root scripts/passrsync
+ chmod 400 scripts/passrsync
+ # Generar Initrd del cliente.
find . | cpio -H newc -oa | gzip -9c > $CLIENTINITRD
+ # Ticket 565, preparar acceso Rsync servidor.
+ echo "$SAMBAUSER:$SAMBAPASS" > /etc/rsyncd.secrets
+ chown root.root /etc/rsyncd.secrets
+ chmod 600 /etc/rsyncd.secrets
else
echo "$PROG: Aviso: no se ha modificado la clave del cliente."
fi
diff --git a/server/bin/unmountimage b/server/bin/unmountimage
new file mode 100755
index 00000000..812fbdd4
--- /dev/null
+++ b/server/bin/unmountimage
@@ -0,0 +1,47 @@
+#!/bin/bash
+#/**
+# unmountimage
+#@brief Desmonta imagen sincronizable
+#@param 1 imagen
+#@param 2 extension [ img|diff ] opcional, por defecto img
+#@return
+#@exception OG_ERR_FORMAT # 1 formato incorrecto.
+#@version 1.0 - Desmontar imagen sincronizable
+#@author Irina Gomez
+#@date 2013-05-23
+#*/ ##
+BASEDIR=/opt/opengnsys
+REPODIR="$BASEDIR/images"
+REPOLOG=$BASEDIR/log/ogAdmRepo.log
+source $BASEDIR/client/etc/lang.$LANG.conf
+
+PROG="$(basename $0)"
+# Si se solicita, mostrar ayuda.
+if [ "$*" == "help" ]; then
+ echo -e " $PROG: $MSG_HELP_ogUnmountImage \n" \
+ "$MSG_FORMAT: $PROG nombre_image [ img|diff ] \n" \
+ "base -> $PROG Windows7 \n" \
+ "diff -> $PROG Ubuntu12 diff"
+ exit 0
+fi
+
+[ $# -lt 1 ] && echo -e "$PROG: Error: $MSG_ERR_FORMAT \n $MSG_FORMAT: $PROG image [ img | diff ]" && exit 1
+
+if [ "$USER" != "root" ]; then
+ echo "$PROG: Error: solo ejecutable por root" >&2
+ exit 1
+fi
+
+# Comprobamos que imagen la imagen esta montada
+MOUNTDIR="$REPODIR/mount/$1"
+if [ "$2" == "diff" ]; then
+ IMGEXT="diff"
+ MOUNTDIR="$MOUNTDIR.diff"
+else
+ IMGEXT="img"
+fi
+# Si la imaen no está montada me salgo
+df |grep "$MOUNTDIR$" 2>&1 >/dev/null || exit 0
+
+echo -ne UMOUNT_IMAGE "$1" $IMGEXT | /opt/opengnsys/sbin/ogAdmRepoAux
+echo "Los resultado se registran en $REPOLOG. "
diff --git a/server/etc/apache-prev2.4.conf.tmpl b/server/etc/apache-prev2.4.conf.tmpl
new file mode 100644
index 00000000..474ea62a
--- /dev/null
+++ b/server/etc/apache-prev2.4.conf.tmpl
@@ -0,0 +1,12 @@
+# OpenGnSys Web Console template configuration for Apache.
+
+Alias /opengnsys CONSOLEDIR
+
+# Overrides default CentOS php.ini configuration.
+php_value short_open_tag on
+
+<Directory CONSOLEDIR>
+ Options -Indexes FollowSymLinks
+ DirectoryIndex index.php
+</Directory>
+
diff --git a/server/etc/apache.conf.tmpl b/server/etc/apache.conf.tmpl
index ddf8cc97..5613bf11 100644
--- a/server/etc/apache.conf.tmpl
+++ b/server/etc/apache.conf.tmpl
@@ -6,7 +6,8 @@ Alias /opengnsys CONSOLEDIR
php_value short_open_tag on
<Directory CONSOLEDIR>
- Options -Indexes FollowSymLinks
- DirectoryIndex index.php
+ Require all granted
+ Options -Indexes +FollowSymLinks
+ DirectoryIndex index.php
</Directory>
diff --git a/server/tftpboot/menu.lst/templates/00unknown b/server/tftpboot/menu.lst/templates/00unknown
new file mode 100644
index 00000000..e52ffa82
--- /dev/null
+++ b/server/tftpboot/menu.lst/templates/00unknown
@@ -0,0 +1,7 @@
+##NO-TOCAR-ESTA-LINEA Sin-designar
+timeout 1
+title MBR
+keeppxe
+chainloader (hd0)+1
+rootnoverify (hd0)
+boot \ No newline at end of file
diff --git a/server/tftpboot/menu.lst/templates/1 b/server/tftpboot/menu.lst/templates/01
index 9fa2316b..1b52bb54 100644
--- a/server/tftpboot/menu.lst/templates/1
+++ b/server/tftpboot/menu.lst/templates/01
@@ -1,3 +1,4 @@
+##NO-TOCAR-ESTA-LINEA MBR
timeout 1
title MBR
keeppxe
diff --git a/server/tftpboot/menu.lst/templates/11 b/server/tftpboot/menu.lst/templates/11
index 00560c00..92be0dca 100644
--- a/server/tftpboot/menu.lst/templates/11
+++ b/server/tftpboot/menu.lst/templates/11
@@ -1,3 +1,4 @@
+##NO-TOCAR-ESTA-LINEA 1hd-1partition
timeout 1
title FirstHardDisk-FirstPartition
keeppxe
diff --git a/server/tftpboot/menu.lst/templates/12 b/server/tftpboot/menu.lst/templates/12
index 2fb0dfcb..6f46c742 100644
--- a/server/tftpboot/menu.lst/templates/12
+++ b/server/tftpboot/menu.lst/templates/12
@@ -1,3 +1,4 @@
+##NO-TOCAR-ESTA-LINEA 1hd-2partition
timeout 1
title FirstHardDisk-SecondPartition
keeppxe
diff --git a/server/tftpboot/menu.lst/templates/pxeADMIN b/server/tftpboot/menu.lst/templates/19pxeADMIN
index cf58dabf..f9f3246f 100644
--- a/server/tftpboot/menu.lst/templates/pxeADMIN
+++ b/server/tftpboot/menu.lst/templates/19pxeADMIN
@@ -1,3 +1,4 @@
+##NO-TOCAR-ESTA-LINEA ogAdmin
default saved
timeout 1
hiddenmenu
diff --git a/server/tftpboot/menu.lst/templates/ogadmin b/server/tftpboot/menu.lst/templates/ogadmin
deleted file mode 100644
index a8d96209..00000000
--- a/server/tftpboot/menu.lst/templates/ogadmin
+++ /dev/null
@@ -1,34 +0,0 @@
-default saved
-timeout 1
-hiddenmenu
-fallback 1 2 3
-
-title firsboot
-find --set-root --ignore-floppies --ignore-cd /ogboot.me
-cmp /ogboot.me /ogboot.firstboot || ls FALLBACK
-write /ogboot.firstboot iniciado
-chainloader +1
-savedefault fallback
-boot
-
-title secondboot
-find --set-root --ignore-floppies --ignore-cd /ogboot.me
-cmp /ogboot.me /ogboot.secondboot || ls FALLBACK
-write /ogboot.secondboot iniciado
-chainloader +1
-savedefault fallback
-boot
-
-title OpenGnSys-CACHE
-find --set-root --ignore-floppies --ignore-cd /boot/ogvmlinuz
-kernel /boot/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true INFOHOST
-initrd /boot/oginitrd.img
-savedefault fallback
-boot
-
-title OpenGnSys-NET
-keeppxe
-kernel (pd)/ogclient/ogvmlinuz ro boot=oginit vga=788 irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true INFOHOST
-initrd (pd)/ogclient/oginitrd.img
-boot
-
diff --git a/server/tftpboot/menu.lst/templates/pxe b/server/tftpboot/menu.lst/templates/pxe
index 29687f0e..6abbed39 100644
--- a/server/tftpboot/menu.lst/templates/pxe
+++ b/server/tftpboot/menu.lst/templates/pxe
@@ -1,3 +1,4 @@
+##NO-TOCAR-ESTA-LINEA ogClient
default saved
timeout 1
hiddenmenu