Proyecto

General

Perfil

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


(5-5/6)