Proyecto

General

Perfil

« Anterior | Siguiente » 

Revisión 499

Actulizado utilaula a version 0.8

Ver diferencias:

tareas_puppet/servidores_aula/squeeze/ltsp_utilaula/changelog
12/04/13 v0.8 Actulizado para empezar a usar nmap en vez de avahi
Actulizado para squeeze
22/09/11 v0.7.1 Añadido compruebaprofe
16/02/11 v0.7 Corregidos permisos en la carpeta files
10/02/11 v0·6 Corregido bug(No se creaba la carpeta .ssh dentro del root de la imagen ltsp)
10/02/11 v0.5 Release incial
tareas_puppet/servidores_aula/squeeze/ltsp_utilaula/manifests/init.pp
class ltsp_utilaula {
package { "nmap":
ensure => installed,
}
user { "portatil":
uid => '900',
ensure => present,
home => '/var/lib/portatil',
managehome => true,
shell => '/bin/bash',
}
file {
"/var/lib/portatil/.ssh": ensure => directory, owner => portatil, group => portatil, mode => 700,
require => User["portatil"] ;
"id-rsa":
path => "/var/lib/portatil/.ssh/id_rsa",
owner => portatil, group => portatil, mode => 600,
require => File["/var/lib/portatil/.ssh"],
source => "puppet://puppetinstituto/files/portatil-prof/id_rsa";
"id_rsa.pub":
path => "/var/lib/portatil/.ssh/id_rsa.pub",
owner => portatil, group => portatil, mode => 644,
require => File["/var/lib/portatil/.ssh"],
source => "puppet://puppetinstituto/files/portatil-prof/id_rsa.pub";
"/sbin/conectahost":
owner => root, group => root, mode => 750,
source => "puppet:///modules/ltsp_utilaula/conectahost";
"/sbin/listahosts":
owner => root, group => root, mode => 750,
source => "puppet:///modules/ltsp_utilaula/listahosts";
"/sbin/ejecutaenhosts":
owner => root, group => root, mode => 750,
source => "puppet:///modules/ltsp_utilaula/ejecutaenhosts";
"/sbin/arreglosportatil":
owner => root, group => root, mode => 750,
source => "puppet:///modules/ltsp_utilaula/arreglosportatil";
"/sbin/apagado":
owner => root, group => root, mode => 750,
source => "puppet:///modules/ltsp_utilaula/apagado";
"/sbin/reinicio":
owner => root, group => root, mode => 750,
source => "puppet:///modules/ltsp_utilaula/reinicio";
"/sbin/compruebaprofe":
owner => root, group => root, mode => 750,
source => "puppet:///modules/ltsp_utilaula/compruebaprofe";
"/opt/ltsp/i386/root/.ssh":
owner => root, group => root, mode => 755,
ensure => directory,
before => File["/opt/ltsp/i386/root/.ssh/authorized_keys2"];
"/opt/ltsp/i386/root/.ssh/authorized_keys2":
owner => root, group => root, mode => 600,
source => "/var/lib/portatil/.ssh/id_rsa.pub",
notify => Exec[crear-imagen-ltsp_utilaula];
#Limitamos el acceso a nmap
"/usr/bin/nmap":
owner => root, group => root, mode => 750;
#Solo si se quieren apagar los terminales/portatiles si no hay profesor
"/etc/cron.d/croncompruebaprofe":
owner => root, group => root, mode => 644,
source => "puppet:///modules/ltsp_utilaula/croncompruebaprofe";
}
exec { "crear-imagen-ltsp_utilaula":
command => "/usr/sbin/ltsp-update-image --arch i386",
refreshonly => true;
}
}
tareas_puppet/servidores_aula/squeeze/ltsp_utilaula/files/reinicio
#!/bin/bash
#Reinicia el servidor de aula si no hay nadie logeado. Tambien apaga
#los ordenadores de los host conectados(Evita que se queden fritos
#algunos tipos de clientes ligeros como los Dominion)
#No tiene en cuenta si hay logeados alumnos
if ! who | grep -q "(:0)"; then
ejecutaenhosts poweroff
/sbin/shutdown -r now
fi
tareas_puppet/servidores_aula/squeeze/ltsp_utilaula/files/ejecutaenhosts
#!/bin/bash
#Permite ejecutar el comando que se le pase como parámetro en todos los hosts, ya
#sean portatiles o clientes ligeros que esten conectados en esa clase en ese instante.
#Con el parametro -p se ejecuta en paralelo en todos los equipos, la salida puede
#redirigirse a un fichero.
#Sin el parametro -p el comando se va ejecutando maquina a maquina
#
#Ricardo Salgado Cid
#IESO Galisteo
#
#26/01/11 Release incial ()
#09/02/11 Opciones mas restrictivas en los ssh para evitar esperas infinitas
#12/04/13 Actualizado para que use nmap en vez de avahi
if [ $# -lt 1 ]; then
echo "Permite ejecutar el comando que se le pase como parametro en todos los hosts"
echo "sean portatiles o clientes ligeros que esten conectados en esa clase en ese instante."
echo "Con el parametro -p se ejecuta en paralelo en todos los equipos"
echo "Uso: $0 [-p] comando"
exit
fi
if [ "$1" \= "-p" ] ; then
enparalelo="yes"
shift
fi
listahosts=$(nmap -oG - --system-dns -sP 192.168.0.200-253 | grep -v '^#' | tr -d '()' | sed 's/.local//' | awk '{print $3 ";" $2}' | sort)
if [ -z "$listahosts" ]; then
echo "No se ha encontrado ninguna maquina conectada"
exit 0
else
echo "El comando se ejecutará sobre $(echo $listahosts | tr " " "\n" | wc -l ) maquina/s"
fi
for hostip in $listahosts
do
if [ -z $enparalelo ]; then
salida=/dev/stdout
else
salida=/dev/null
fi
host=$(echo $hostip | cut -d";" -f1)
ip=$(echo $hostip | cut -d";" -f2)
echo "Salida del comando en el host $host($ip):" > $salida
echo __________________________________________________________________________ > $salida
if [ -z $enparalelo ]; then
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=9 -o ServerAliveCountMax=2 -o ServerAliveInterval=15 -i /var/lib/portatil/.ssh/id_rsa root@$ip $*
else
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=9 -o ServerAliveCountMax=2 -o ServerAliveInterval=15 -i /var/lib/portatil/.ssh/id_rsa root@$ip $* > /tmp/salida_host_$host.log 2>&1 &
fi
echo __________________________________________________________________________ > $salida
echo -e "\n\n" > $salida
done
if [ -z "$enparalelo" ]; then
exit 0
else
echo -n "Esperando a que terminen los procesos "
for job in $(jobs -p)
do
echo -n "."
wait $job
done
echo -e "\n"
echo "Hecho!"
echo "Salidas del comando: \"$*\""
echo $(date)
for hostip in $listahosts
do
host=$(echo $hostip | cut -d";" -f1)
ip=$(echo $hostip | cut -d";" -f2)
echo "Salida del comando en el host $host($ip):"
echo __________________________________________________________________________
cat /tmp/salida_host_${host}.log
rm /tmp/salida_host_${host}.log
echo __________________________________________________________________________
echo -e "\n\n"
done
fi
tareas_puppet/servidores_aula/squeeze/ltsp_utilaula/files/compruebaprofe
#!/bin/bash
#
#Ricardo Salgado(IESO Galisteo)
#
#Comprueba si hay un profesor logeado en caso de no haberlo apgaga los
#los ordenadores que esten encendidos.
if ! who | grep -q "(:0)" ; then
/sbin/ejecutaenhosts "poweroff" > /dev/null
fi
tareas_puppet/servidores_aula/squeeze/ltsp_utilaula/files/conectahost
#!/bin/bash
#
#Ricardo Salgado(IESO Galisteo)
#
#Conecta a un host (portatil o workstation) que esté conectado a la red del aula en ese momento
#toma como parametro el nombre del host(o una parte de el)
#
#Ricardo Salgado Cid
#IESO Galisteo
#
#26/01/11 Release incial ()
#09/02/11 Opciones mas restrictivas en los ssh para evitar esperas infinitas
#12/04/13 Actualizado para que use nmap en vez de avahi
if [ $# -ne 1 ]; then
echo "Conecta a un host (portatil o workstation) que este conectado a la red del aula en ese momento"
echo "Uso: $0 nombre_equipo"
exit
fi
hostip=$(nmap -oG - --system-dns -sP 192.168.0.200-253 | grep -v '^#' | grep $1.* | tr -d '()' | sed 's/.local//' | awk '{print $3 ";" $2}' | sort | tail -1)
host=$(echo $hostip | cut -d";" -f1)
ip=$(echo $hostip | cut -d";" -f2)
echo "Conectando a $host($ip)"
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=9 -o ServerAliveCountMax=2 -o ServerAliveInterval=15 -i /var/lib/portatil/.ssh/id_rsa root@$ip
tareas_puppet/servidores_aula/squeeze/ltsp_utilaula/files/croncompruebaprofe
#*/5 * * * * root /sbin/compruebaprofe
tareas_puppet/servidores_aula/squeeze/ltsp_utilaula/files/apagado
#!/bin/bash
#Apaga el servidor de aula si no hay nadie logeado. Tambien apaga
#los ordenadores de los host conectados(Evita que se queden fritos
#algunos tipos de clientes ligeros como los Dominion)
#No tiene en cuenta si hay logeados alumnos
if ! who | grep -q "(:0)"; then
ejecutaenhosts poweroff
/sbin/shutdown -h now
fi
tareas_puppet/servidores_aula/squeeze/ltsp_utilaula/files/arreglosportatil
#!/bin/bash
#
# Ricardo Salgado(IESO Galisteo)
#
# Ejecuta los comandos contenidos en la variable "comandos" en todos los portatiles conectados al aula.
# Los comandos deben terminar con el caracter ";" a excepcion del ultimo
# Pensado solo para los portatiles, cuidado con ejecutarlo sobre los clientes ligeros
# Pasando como parametro -p al script los comandos se ejecutaran en paralelo en todos los host.
# Sin parametros se ejecutaran host a host
comandos="
/etc/init.d/puppet stop;
dpkg --configure -a --force-all;
puppetd -tv;
pkgsync;
nss_updatedb ldap;
apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold--reinstall install autofs5;
/etc/init.d/puppet start
"
if [ "$1" \= "-p" ] ; then
/sbin/ejecutaenhosts -p $comandos
else
/sbin/ejecutaenhosts $comandos
fi
tareas_puppet/servidores_aula/squeeze/ltsp_utilaula/files/listahosts
#!/bin/bash
#Lista los hosts, sean portatiles o clientes ligeros que esten conectados en esa clase
#en ese instante.
#
#Ricardo Salgado Cid
#IESO Galisteo
#
#09/02/11 Release incial ()
#12/04/13 Actualizado para que use nmap en vez de avahi
listahosts=$(nmap -oG - --system-dns -sP 192.168.0.200-253 | grep -v '^#' | tr -d '()' | sed 's/.local//' | awk '{print $3 ";" $2}' | sort)
if [ -z "$listahosts" ]; then
echo "No se ha encontrado ninguna maquina conectada"
exit 2
else
echo "Hay $(echo $listahosts | tr " " "\n" | wc -l ) maquina/s conectadas:"
fi
for hostip in $listahosts
do
host=$(echo $hostip | cut -d";" -f1)
ip=$(echo $hostip | cut -d";" -f2)
echo "--$host($ip)"
done
tareas_puppet/servidores_aula/squeeze/ltsp_utilaula/leeme.txt
utilaula 0.8
Tarea de puppet que añade comandos que hace posible conectarse desde el ordenador
del profesor facilmente a los ordenadores(portatiles o clientes ligeros) que estan
encendidos en un determinado momento en un aula desde el ordenador del profesor.
Para instalar la tarea solo hay que descomprimir en /etc/puppet/modules del servidor
nfs y añadirla a clase-especifica-squeeze.
Desde Abril de 2013 hace uso de nmap para localizar los equipos encendidos en vez
de avahi, por lo tanto será necesario añadir nmap al mayhave de los servidores de
aula. El acceso al ejectuble de nmap queda restringido exclusivamente a root.
Los comandos son los siguientes:
*listahosts: devuelve una lista de las máquinas conectadas(hostname e ip).
*conectahost: abre una sesión de ssh como root en la maquina que se le indique.
(No es necesario teclear el nombre entero,basta con los primeros caracteres)
*ejecutaenhosts: ejecuta el comando que se le pase como parámetro en todos los hosts
(Con el parametro -p se ejecuta en paralelo en todos los equipos)
*arreglosportatil: ejecuta los comandos de configuracion basica de los portatiles.
(mirar dentro del script para mas detalles)
*reincio: reincia el servidor de aula si no hay nadie logeado.
*apagado: apaga el servidor de aula si no hay nadie logeadoo.
*compruebaprofe: comprueba si hay profesor logeado, si no lo hay apaga los equipos que
esten conectados. Para hacer comprobaciones periodicas se incluye el archivo
croncrompruebaprofe que se copia en /etc/cron.d/ . Por defecto esta comentado para
no interferir con las personalizaciones que tenga cada uno.
Ricardo Salgado Cid
IESO Galisteo
Abril 2013

Exportar a: Unified diff