Advertisement
angeldp

Untitled

Jun 6th, 2011
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 6.44 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Script que configurará los equipos Ubuntu para dejar
  4. # sus parámetros de red preparados para introducirlos
  5. # en el dominio cepalencia.local
  6.  
  7. # Declaro una función para salir cuando se produzca un error
  8.  
  9. function error(){
  10. clear
  11. echo "Se ha producido un error"
  12. echo "$1"
  13. echo "Pulse cualquier tecla para continuar."
  14. read -n1 -s NADA
  15. exit
  16. }
  17.  
  18. # La función verifica muestra, antes de sustituir, el fichero
  19. # modificado con los parámetros necesarios, dando la opción de
  20. # salir sin aplicar las modificaciones
  21.  
  22. function verifica(){
  23. clear
  24. echo "Se introducirá la siguiente información en $1"
  25. more $FAUX
  26. until [ "$OPC" = "a" -o "$OPC" = "A" -o "$OPC" = "c" -o "$OPC" = "C" ]
  27.     do
  28.     echo "¿Desea continuar (c) o abortar (a)? "
  29.     read -n1 -s OPC
  30.     if [ "$OPC" = "c" -o "$OPC" = "C" ]
  31.         then
  32.         cp -f $FAUX $1
  33.     elif [ "$OPC" = "a" -o "$OPC" = "A" ]
  34.         then
  35.         echo "Finalizando script..."
  36.         exit
  37.     else
  38.         echo "Opción incorrecta."
  39.         sleep 3
  40.     fi
  41. done
  42. OPC="z"
  43. }
  44.  
  45. # La función comprueba pedirá dirección IP hasta
  46. # que se indique una válida
  47.  
  48. function comprueba() {
  49. CTR="fail"
  50. until [ "$CTR" = "ok" ]
  51.    do
  52.    CTR2="ok"
  53.    C5=""
  54.    clear
  55.    echo Indique la dirección IP
  56.    read DIRIP
  57.    for((i=1;i<5;i++))
  58.        do
  59.        OCT=`echo $DIRIP | cut -d. -f$i`
  60.        [ $OCT -lt 0 -o $OCT -gt 255 ] && CTR2="fail"
  61.    done
  62. C1=`echo $DIRIP | cut -d. -f1`
  63. C5=`echo $DIRIP | cut -d. -f5`
  64.    if [ "$CTR2" != "fail" ] && [ $C1 -ne 0 ] && [ -z $C5 ]
  65.        then
  66.        CTR="ok"
  67.    fi
  68. done
  69. }
  70. clear
  71.  
  72. # Comprobamos si se ejecuta como root
  73.  
  74. [ "$USER" = "root" ] || error "Tienes que ser root"
  75.  
  76. # Crear variables con los valores de uso frecuente en el script
  77. # Datos del dominio
  78. DOMINIO="cepalencia.local"
  79. ADMDOM="prueba"
  80. DCIP="10.10.10.3"
  81. DCNAME="servers-03.cepalencia.es"
  82. #Datos del equipo
  83. MASCARA="255.255.255.0"
  84. DNS1="10.10.10.3"
  85. DNS2="194.179.1.100"
  86. FCONFNAME="/etc/hostname"
  87. FCONFRED="/etc/network/interfaces"
  88. FCONFDNS="/etc/resolv.conf"
  89. FCONFHOST="/etc/hosts"
  90. FCONFNSS="/etc/nsswitch.conf"
  91. FAUX="/tmp/configred.aux"
  92. OPC="z"
  93.  
  94. # Comprobamos que existan los archivos
  95.  
  96. [ -f $FCONFNAME ] || error "No se encontró $FCONFNAME"
  97. [ -f $FCONFRED ] || error "No se encontró $FCONFRED"
  98. [ -f $FCONFDNS ] || error "No se encontró $FCONFDNS"
  99. [ -f $FCONFHOST ] || error "No se encontró $FCONFHOST"
  100. [ -f $FCONFNSS ] || error "No se encontró $FCONFNSS"
  101.  
  102. # Preguntamos si queremos realizar una copia de seguridad
  103. # de los ficheros, útil en el caso de primera instalación.
  104. # o restaurar versiones previas, si es que ya se hubiera
  105. # realizado alguna copia.
  106.  
  107. while [ "$OPCOPIA" != "c" -a "$OPCOPIA" != "C" -a "$OPCOPIA" != "r" -a "$OPCOPIA" != "R" ]
  108.     do
  109.     clear
  110.     echo "Si es la primera vez que intenta unir el equipo a $DOMINIO"
  111.     echo "quizá desee realizar una copia de seguridad de los siguientes archivos:"
  112.     echo "$FCONFNAME"
  113.     echo "$FCONFRED"
  114.     echo "$FCONFDNS"
  115.     echo "$FCONFHOST"
  116.     echo "$FCONFNSS"
  117.     echo "Pulse c para llevar a cabo la copia (se sobreescribirán versiones anteriores)"
  118.     [ -f ${FCONFNAME}.bck ] && echo "Pulse r para restaurar copias de seguridad anteriores."
  119.     read -n1 -s OPCOPIA
  120.     case $OPCOPIA in
  121.         c|C)
  122.         cp -f $FCONFNAME ${FCONFNAME}.bck
  123.         cp -f $FCONFRED ${FCONFRED}.bck
  124.         cp -f $FCONFDNS ${FCONFDNS}.bck
  125.         cp -f $FCONFHOST ${FCONFHOST}.bck
  126.         cp -f $FCONFNSS ${FCONFNSS}.bck
  127.         echo "Arhivos copiados.";;
  128.         r|R)
  129.         [ -f ${FCONFNAME}.bck ] || error "No existen copias disponibles para su restauración."
  130.         cp -f ${FCONFNAME}.bck $FCONFNAME
  131.         cp -f ${FCONFRED}.bck $FCONFRED
  132.         cp -f ${FCONFDNS}.bck $FCONFDNS
  133.         cp -f ${FCONFHOST}.bck $FCONFHOST
  134.         cp -f ${FCONFNSS}.bck $FCONFNSS
  135.         echo "Copias de seguridad restauradas.";;
  136.         *)
  137.         echo "Opción incorrecta."
  138.         sleep 3;;
  139.     esac
  140. done
  141. # Pedimos el nombre del equipo, permitiendo mantener el actual
  142. echo "Indique el nombre del equipo, o pulse enter para"
  143. echo -e "mantener el actual: $HOSTNAME \n"
  144. read MYNAME
  145. [ -z $MYNAME ] && MYNAME=$HOSTNAME
  146. echo $MYNAME > $FCOFNAME
  147. clear
  148. # Pedimos una IP para crear el archivo interfaces
  149. # asegurándonos de que se indica una válida
  150. comprueba
  151. # Calculamos el gateway
  152. GATEWAY=`echo $DIRIP | cut -d. -f1-3`
  153. GATEWAY="`echo $GATEWAY`.1"
  154. # Creamos el fichero interfaces
  155. echo "auto lo" > $FAUX
  156. echo "iface lo inet loopback" >> $FAUX
  157. echo "" >> $FAUX
  158. echo "auto eth1" >> $FAUX
  159. echo "iface eth1 inet static" >> $FAUX
  160. echo "address $DIRIP" >> $FAUX
  161. echo "netmask $MASCARA" >> $FAUX
  162. echo "gateway $GATEWAY" >> $FAUX
  163. # Lo mostramos y permitimos abortar
  164. verifica $FCONFRED
  165. # Creamos el fichero resolv.conf
  166. echo "nameserver $DNS1" > $FAUX
  167. echo "nameserver $DNS2" >> $FAUX
  168. # Lo mostramos y permitimos abortar
  169. verifica $FCONFDNS
  170. # Eliminamos del fichero /etc/hosts las línes que
  171. # pudieran existir con datos del equipo o dominio
  172. more $FCONFHOST | grep -v ^$DCIP | grep -v ^$DIRIP > $FAUX
  173. cp -f $FAUX $FCONFHOST
  174. # Incluimos las nuevas líneas en un fichero vacío
  175. echo -e "$DIRIP\t${MYNAME}.${DOMINIO}\t$MYNAME" > $FAUX
  176. echo -e "$DCIP\t$DOMINIO" >> $FAUX
  177. echo -e "$DCIP\t$DCNAME" >> $FAUX
  178. # Y le añadimos el resto de /etc/hosts
  179. more $FCONFHOST >> $FAUX
  180. # Lo mostramos permitiendo abortar
  181. verifica $FCONFHOST
  182. # Cambio la línea del fichero /etc/nsswitch.conf
  183. CONT=`more $FCONFNSS | wc -l`
  184. NLINEA=1
  185. rm -f $FAUX
  186. until [ $NLINEA -eq `expr $CONT + 1` ]
  187.     do
  188.     LINEA=`more $FCONFNSS | head -$NLINEA | tail -1`
  189.     CTR=`echo $LINEA | grep ^hosts: | wc -l`
  190.     if [ $CTR -eq 0 ]
  191.         then
  192.         echo $LINEA >> $FAUX
  193.     else
  194.         echo -e "hosts:\tfiles dns" >> $FAUX
  195.     fi
  196.     NLINEA=`expr $NLINEA + 1`
  197. done
  198. # Lo muestro por pantalla para asegurarme de que está todo en orden
  199. verifica $FCONFNSS
  200. clear
  201. # Una vez configurados los parámetros de red
  202. # deberemos reiniciar la red, verificando posibles errores
  203. echo "Se han modificado los ficheros necesarios,"
  204. echo "pulse cualquier tecla para reiniciar la red."
  205. read -n1 -s NADA
  206. /etc/init.d/networking restart
  207. [ $? -ne 0 ] && error "La red no se ha podido reiniciar. Error nº $?"
  208. # Reinstalamos, desde 0, la herramienta likewise-open.
  209. clear
  210. echo "Eliminando instalaciones previas... "
  211. sleep 1
  212. apt-get purge likewise-open 2> /dev/null
  213. apt-get purge krb5-user 2> /dev/null
  214. apt-get purge krb5-config 2> /dev/null
  215. sleep 1
  216. clear
  217. echo "Instalando likewise-open... "
  218. sleep 1
  219. apt-get install likewise-open
  220. sleep 1
  221. clear
  222. sleep 1
  223. echo "Llevamos a cabo la unión al dominio."
  224. echo "Indique la contraseña del administrador del dominio cuando se la solicite"
  225. domainjoin-cli join $DOMINIO $ADMDOM
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement