root/scripts/ltsp-server/autoconfiguracion/copiainicial @ 538
430 | manumora | #!/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")
|
|||