diff options
Diffstat (limited to 'server/bin')
-rwxr-xr-x | server/bin/listclientmode | 29 | ||||
-rwxr-xr-x | server/bin/setclientmode | 80 | ||||
-rwxr-xr-x | server/bin/setsmbpass | 59 |
3 files changed, 149 insertions, 19 deletions
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 + |