Revisión 430
Añadido por Manu Mora Gordillo hace más de 12 años
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
Script autorconfiguracion ltsp-server