Proyecto

General

Perfil

« Anterior | Siguiente » 

Revisión 430

Script autorconfiguracion ltsp-server

Ver diferencias:

scripts/ltsp-server/autoconfiguracion/copiainicial
#!/usr/bin/env python
# coding: latin1
#
# Descripcion:
# - Este script comprueba todas las interfaces de red de la maquina
# hasta que obtiene conexion.
# - Pregunta a ldap a que aula pertenece.
# - Descarga del servidor NFS los archivos 70-persistent-net.rules y de aulalinex
# - Se reinicia con las interfaces de red correctamente configuradas
#
# Modo de uso:
# En el servidor NFS:
# - Ejecutar el script backupltsp.sh (Tiene que tener
# relacion de confianza SSH con los servidores de aula)
#
# En el servidor de aula:
# - Copiar el script copiainicial a /root/copiainicial y hacerlo ejecutable
# - Editar el fichero /etc/rc.local e insertar la linea /root/copiainicicial
# - Instalar el paquete python-ldap
# - Borrar el fichero /etc/udev/rules.d/70-persistent-net.rules
# - Al reiniciar, el script se ejecutara una unica vez
#
# Fecha : 13/11/2012
# Autores : Francisco Damian Mendez Palma
# Manuel Mora Gordillo
# IES Santa Eulalia - Merida
import socket
import fcntl
import struct
import os,sys
import ldap
def printText(text,color):
col="2"
if color == "rojo":
col="1"
os.system("tput setaf "+col)
print (text)
os.system("tput sgr0 default")
def comprobarInterfaz(eth):
printText("Comprobando interfaz "+eth, "verde")
resultping=os.system ("ping -c 1 servidor")
return resultping
def cambioInterfaz(ethX,ethZ):
global interfazActual
interfazActual = ethZ
printText("Cambio interfaz "+ethX+" por "+ethZ, "verde")
os.system ("sed 's/"+ethX+"/"+ethZ+"/g' /etc/network/interfaces > /tmp/interfaces_new")
os.system ("mv /tmp/interfaces_new /etc/network/interfaces")
os.system ("service networking restart")
def getMAC(ifname):
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
info = fcntl.ioctl(s.fileno(), 0x8927, struct.pack('256s', ifname[:15]))
return ''.join(['%02x:' % ord(char) for char in info[18:24]])[:-1]
def finalizarScript(texto,reiniciar=False):
# Restauramos backup
os.system("cp /var/cache/interfaces.backup /etc/network/interfaces")
#restauramos el rc.local para que no se vuelva a invocar a este script
os.system("sed 's/\/root\/copiainicial//g' /etc/rc.local > /tmp/DefaultRC.LOCAL")
os.system("mv /tmp/DefaultRC.LOCAL /etc/rc.local")
os.system("chmod +x /etc/rc.local")
if reiniciar:
printText(texto, "verde")
os.system("sleep 3")
os.system("init 6")
else:
printText(texto, "verde")
# Consideraciones previas
os.system ("chattr -i /etc/udev/rules.d/70-persistent-net.rules")
os.system ("rm -rf /etc/udev/rules.d/70-persistent-net.rules")
os.system ("cp /etc/network/interfaces /var/cache/interfaces.backup")
os.system ("cp /etc/rc.local /var/cache/rc.local.backup")
# Creamos un nuevo interfaces
os.system ("echo 'auto lo eth3' > /etc/network/interfaces")
os.system ("echo 'iface lo inet loopback' >> /etc/network/interfaces")
os.system ("echo 'iface eth3 inet dhcp' >> /etc/network/interfaces")
os.system ("echo ' ifup eth3' >> /etc/network/interfaces")
os.system ("echo ' post-up /usr/sbin/ethtool -s $IFACE wol g' >> /etc/network/interfaces")
os.system ("echo ' post-down /usr/sbin/ethtool -s $IFACE wol g' >> /etc/network/interfaces")
# Comprobamos las interfaces de red
interfazActual = "eth3"
if comprobarInterfaz(interfazActual) != 0:
cambioInterfaz(interfazActual,"eth2")
if comprobarInterfaz(interfazActual) != 0:
cambioInterfaz(interfazActual,"eth1")
if comprobarInterfaz(interfazActual) != 0:
cambioInterfaz(interfazActual,"eth0")
if comprobarInterfaz(interfazActual) != 0:
finalizarScript("No se pudo establecer conexion con ningun interfaz.\nScript abortado")
# Obtenemos la mac de la interfaz elegida
mac = getMAC(interfazActual)
# Establecemos conexion con LDAP
try:
connect=ldap.open("ldap")
protocol_version = ldap.VERSION3
except ldap.LDAPError, e:
finalizarScript("No se pudo establecer conexion con el ldap.\nScript abortado")
# Buscamos el nombre del aula al que pertenece la mac
try:
ldap_result_id = connect.search("ou=hosts,dc=instituto,dc=extremadura,dc=es", ldap.SCOPE_SUBTREE, "(macAddress="+mac+")", ["macAddress","cn"])
result_set = []
while 1:
result_type, result_data = connect.result(ldap_result_id, 0)
if (result_data == []):
break
else:
if result_type == ldap.RES_SEARCH_ENTRY:
result_set.append(result_data)
except ldap.LDAPError, e:
finalizarScript(e)
try:
aula = result_set[0][0][1]["cn"][0]
if aula != "":
os.system("wget http://servidor/backupltsp/"+aula+"/setup.ini -P /var/lib/aulalinex-profesor-ltsp -N")
os.system("wget http://servidor/backupltsp/"+aula+"/aulalinex-profesor.conf -P /var/lib/aulalinex-profesor -N")
os.system("wget http://servidor/backupltsp/"+aula+"/70-persistent-net.rules -P /etc/udev/rules.d -N")
os.system("chattr +i /etc/udev/rules.d/70-persistent-net.rules")
finalizarScript("Script finalizado correctamente.\nReiniciando...",True)
else:
finalizarScript("No se ha encontrado ningun aula asociada a la mac: "+mac+"\nScript abortado")
except:
finalizarScript("Hubo un error al buscar el aula asociada a la mac: "+mac+"\nScript abortado")
scripts/ltsp-server/autoconfiguracion/LEEME
##############################################################################
# Project: Autoconfiguracion
# Purpose: Autoconfiguracion de ltsp-servers
# Language: Python / Bash
# Date: 13-Nov-2012.
# Authores: Manuel Mora Gordillo
# Francisco Damian Mendez Palma
#
# Copyright: 2012 - Manuel Mora Gordillo <manuel.mora.gordillo @nospam@ gmail.com>
# 2012 - Francisco Damian Mendez Palma <fmendezpalma @nospam@ gmail.com>
#
# Autoconfiguracion is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# Autoconfiguracion is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with Autoconfiguracion. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
Que hace el script:
- Cuando se inicia el equipo comprueba todas las interfaces de red hasta que consigue conectarse a la red troncal.
- Una vez conectado, con su mac consulta a ldap para saber a que aula pertenece ese equipo
- Sabiendo el aula al que pertenece, se descarga sus respectivos archivos (70-persistent-net.rules, aulalinex-profesor.conf y setup.ini)
- Se reinicia con todo perfectamente configurado
Pasos a seguir:
- Tener relación de confianza SSH entre el servidor NFS y todos los servidores de aula
- Hacer copia de los ficheros 70-persistent-net.rules, aulalinex-ltsp.conf y setup.ini con el script de Alfonso Pastor (he modificado el script para que además mueva el backup a servidor:/var/www/)
- Tras la ejecución del script, en el NFS debe quedar algo así:
/var/www/backupltsp/a01-pro/70-persistent-net.rules
/var/www/backupltsp/a01-pro/aulalinex-ltsp.conf
/var/www/backupltsp/a01-pro/setup.ini
/var/www/backupltsp/a02-pro/70-persistent-net.rules
/var/www/backupltsp/a02-pro/aulalinex-ltsp.conf
/var/www/backupltsp/a02-pro/setup.ini
y así sucesivamente...
- Instalar la nueva imagen ltsp-server en un servidor de aula
- Copiar el script "copiainicial" a /root/copiainicial y hacerlo ejecutable "chmod +x /root/copiainicial"
- Añadir al fichero /etc/rc.local la línea /root/copiainicial
- Instalar en el servidor de aula el paquete python-ldap
- Borrar el fichero /etc/udev/rules.d/70-persistent-net.rules
- Hacer de nuevo la imagen del servidor (con clonezilla o backharddi) para instalarla al resto de equipos
scripts/ltsp-server/autoconfiguracion/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
/root/copiainicial
exit 0
scripts/ltsp-server/autoconfiguracion/backupltsp.sh
#!/bin/bash
#Ejecutar desde un ordenador donde se tenga relacion de confianza con todos los servidores de aula.
#Version: 1.5
#Fecha : 11/10/2012
#Autor : Alfonso Pastor
# IES Virgen de Guadalupe (Cáceres)
#
# Modificado por Manuel Mora Gordillo - 9/11/2012
servidoresaula=$(ldapsearch -xLLL -h ldap -b cn=ltsp-server-hosts,ou=Netgroup,dc=instituto,dc=extremadura,dc=es "nisNetgroupTriple" |grep -v "dn:"| cut -f2 -d "(" | cut -f1 -d",")
listaficheros="/etc/udev/rules.d/70-persistent-net.rules /var/lib/aulalinex-profesor/aulalinex-profesor.conf /var/lib/aulalinex-profesor-ltsp/setup.ini /etc/hostapd/hostapd.accept /etc/hostapd/hostapd.conf"
for servidoraula in $servidoresaula
do
echo "Backup de $servidoraula:"
mkdir -p backupltsp/$servidoraula
for ruta in $listaficheros
do
fichero=$(basename $ruta)
if scp root@$servidoraula:$ruta backupltsp/$servidoraula/$fichero > /dev/null 2>&1
then
echo " Copiado: $fichero"
else
echo " No encontrado: $fichero"
fi
done
done
# Modificacion realizada por Manuel Mora Gordillo - 9/11/2012: Copio los ficheros a /var/www/
cp -r ./backupltsp /var/www/
chmod 755 /var/www/backupltsp -R
echo "Finalizado: tiene todos los datos que se han podido copiar en ./backupltsp y /var/www/backupltsp"

Exportar a: Unified diff