|
#!/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")
|
|
|
|
|