Advertisement
angeldp

UnirDom

Jun 7th, 2011
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 7.47 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.  
  71. # La función preserva se encarga de copiar los archivos
  72. # que se van a modificar al unirlo al dominio. Sólo se
  73. # ejecutará si no se han salvado previamente
  74.  
  75. function preserva(){
  76. [ -f /etc/nsswitch.conf.original ] || cp -f /etc/nsswitch.conf /etc/nsswitch.conf.original > /dev/null 2>$1
  77. [ -f /etc/pam.d/common-account.original ] || cp -f /etc/pam.d/common-account /etc/pam.d/common-account.original > /dev/null 2>$1
  78. [ -f /etc/pam.d/common-auth.original ] || cp -f /etc/pam.d/common-auth /etc/pam.d/common-auth.original > /dev/null 2>$1
  79. [ -f /etc/pam.d/common-password.original ] || cp -f /etc/pam.d/common-password /etc/pam.d/common-password.original > /dev/null 2>$1
  80. [ -f /etc/pam.d/common-session.original ] || cp -f /etc/pam.d/common-session /etc/pam.d/common-session.original > /dev/null 2>$1
  81. [ -f /etc/pam.d/common-auth.original ] || cp -f /etc/pam.d/common-auth /etc/pam.d/common-auth.original > /dev/null 2>$1
  82. }
  83.  
  84. clear
  85.  
  86. # Comprobamos si se ejecuta como root
  87.  
  88. [ "$USER" = "root" ] || error "Tienes que ser root"
  89.  
  90. # Crear variables con los valores de uso frecuente en el script
  91. # Datos del dominio
  92. DOMINIO="cepalencia.local"
  93. ADMDOM="prueba"
  94. DCIP="10.10.10.3"
  95. DCNAME="servers-03.cepalencia.es"
  96. #Datos del equipo
  97. MASCARA="255.255.255.0"
  98. DNS1="10.10.10.3"
  99. DNS2="194.179.1.100"
  100. FCONFNAME="/etc/hostname"
  101. FCONFRED="/etc/network/interfaces"
  102. FCONFDNS="/etc/resolv.conf"
  103. FCONFHOST="/etc/hosts"
  104. FCONFNSS="/etc/nsswitch.conf"
  105. FAUX="/tmp/configred.aux"
  106. OPC="z"
  107.  
  108. # Comprobamos que existan los archivos
  109.  
  110. [ -f $FCONFNAME ] || error "No se encontró $FCONFNAME"
  111. [ -f $FCONFRED ] || error "No se encontró $FCONFRED"
  112. [ -f $FCONFDNS ] || error "No se encontró $FCONFDNS"
  113. [ -f $FCONFHOST ] || error "No se encontró $FCONFHOST"
  114. [ -f $FCONFNSS ] || error "No se encontró $FCONFNSS"
  115.  
  116. # Si no hay copia de los ficheros originales, la hago ahora:
  117.  
  118. [ -f /etc/pam.d/common-account.original ] || preserva
  119.  
  120. # Preguntamos si queremos realizar una copia de seguridad
  121. # de los ficheros, útil en el caso de primera instalación.
  122. # o restaurar versiones previas, si es que ya se hubiera
  123. # realizado alguna copia.
  124.  
  125. while [ "$OPCOPIA" != "c" -a "$OPCOPIA" != "C" -a "$OPCOPIA" != "r" -a "$OPCOPIA" != "R" ]
  126.     do
  127.     clear
  128.     echo "Si es la primera vez que intenta unir el equipo a $DOMINIO"
  129.     echo "quizá desee realizar una copia de seguridad de los siguientes archivos:"
  130.     echo "$FCONFNAME"
  131.     echo "$FCONFRED"
  132.     echo "$FCONFDNS"
  133.     echo "$FCONFHOST"
  134.     echo "$FCONFNSS"
  135.     echo "Pulse c para llevar a cabo la copia (se sobreescribirán versiones anteriores)"
  136.     [ -f ${FCONFNAME}.bck ] && echo "Pulse r para restaurar copias de seguridad anteriores."
  137.     read -n1 -s OPCOPIA
  138.     case $OPCOPIA in
  139.         c|C)
  140.         cp -f $FCONFNAME ${FCONFNAME}.bck
  141.         cp -f $FCONFRED ${FCONFRED}.bck
  142.         cp -f $FCONFDNS ${FCONFDNS}.bck
  143.         cp -f $FCONFHOST ${FCONFHOST}.bck
  144.         cp -f $FCONFNSS ${FCONFNSS}.bck
  145.         echo "Arhivos copiados.";;
  146.         r|R)
  147.         [ -f ${FCONFNAME}.bck ] || error "No existen copias disponibles para su restauración."
  148.         cp -f ${FCONFNAME}.bck $FCONFNAME
  149.         cp -f ${FCONFRED}.bck $FCONFRED
  150.         cp -f ${FCONFDNS}.bck $FCONFDNS
  151.         cp -f ${FCONFHOST}.bck $FCONFHOST
  152.         cp -f ${FCONFNSS}.bck $FCONFNSS
  153.         echo "Copias de seguridad restauradas.";;
  154.         *)
  155.         echo "Opción incorrecta."
  156.         sleep 3;;
  157.     esac
  158. done
  159. # Pedimos el nombre del equipo, permitiendo mantener el actual
  160. echo "Indique el nombre del equipo, o pulse enter para"
  161. echo -e "mantener el actual: $HOSTNAME \n"
  162. read MYNAME
  163. [ -z $MYNAME ] && MYNAME=$HOSTNAME
  164. echo $MYNAME > $FCOFNAME
  165. clear
  166. # Pedimos una IP para crear el archivo interfaces
  167. # asegurándonos de que se indica una válida
  168. comprueba
  169. # Calculamos el gateway
  170. GATEWAY=`echo $DIRIP | cut -d. -f1-3`
  171. GATEWAY="`echo $GATEWAY`.1"
  172. # Creamos el fichero interfaces
  173. echo "auto lo" > $FAUX
  174. echo "iface lo inet loopback" >> $FAUX
  175. echo "" >> $FAUX
  176. echo "auto eth0" >> $FAUX
  177. echo "iface eth0 inet static" >> $FAUX
  178. echo "address $DIRIP" >> $FAUX
  179. echo "netmask $MASCARA" >> $FAUX
  180. echo "gateway $GATEWAY" >> $FAUX
  181. # Lo mostramos y permitimos abortar
  182. verifica $FCONFRED
  183. # Creamos el fichero resolv.conf
  184. echo "nameserver $DNS1" > $FAUX
  185. echo "nameserver $DNS2" >> $FAUX
  186. # Lo mostramos y permitimos abortar
  187. verifica $FCONFDNS
  188. # Eliminamos del fichero /etc/hosts las línes que
  189. # pudieran existir con datos del equipo o dominio
  190. more $FCONFHOST | grep -v ^$DCIP | grep -v ^$DIRIP > $FAUX
  191. cp -f $FAUX $FCONFHOST
  192. # Incluimos las nuevas líneas en un fichero vacío
  193. echo -e "$DIRIP\t${MYNAME}.${DOMINIO}\t$MYNAME" > $FAUX
  194. echo -e "$DCIP\t$DOMINIO" >> $FAUX
  195. echo -e "$DCIP\t$DCNAME" >> $FAUX
  196. # Y le añadimos el resto de /etc/hosts
  197. more $FCONFHOST >> $FAUX
  198. # Lo mostramos permitiendo abortar
  199. verifica $FCONFHOST
  200. # Cambio la línea del fichero /etc/nsswitch.conf
  201. CONT=`more $FCONFNSS | wc -l`
  202. NLINEA=1
  203. rm -f $FAUX
  204. until [ $NLINEA -eq `expr $CONT + 1` ]
  205.     do
  206.     LINEA=`more $FCONFNSS | head -$NLINEA | tail -1`
  207.     CTR=`echo $LINEA | grep ^hosts: | wc -l`
  208.     if [ $CTR -eq 0 ]
  209.         then
  210.         echo $LINEA >> $FAUX
  211.     else
  212.         echo -e "hosts:\tfiles dns" >> $FAUX
  213.     fi
  214.     NLINEA=`expr $NLINEA + 1`
  215. done
  216. # Lo muestro por pantalla para asegurarme de que está todo en orden
  217. verifica $FCONFNSS
  218. clear
  219. # Una vez configurados los parámetros de red
  220. # deberemos reiniciar la red, verificando posibles errores
  221. echo "Se han modificado los ficheros necesarios,"
  222. echo "pulse cualquier tecla para reiniciar la red."
  223. read -n1 -s NADA
  224. /etc/init.d/networking restart
  225. [ $? -ne 0 ] && error "La red no se ha podido reiniciar. Error nº $?"
  226. # Reinstalamos, desde 0, la herramienta likewise-open.
  227. clear
  228. echo "Eliminando instalaciones previas... "
  229. sleep 1
  230. apt-get purge likewise-open 2> /dev/null
  231. apt-get purge krb5-user 2> /dev/null
  232. apt-get purge krb5-config 2> /dev/null
  233. sleep 1
  234. clear
  235. echo "Instalando likewise-open... "
  236. sleep 1
  237. apt-get install likewise-open
  238. sleep 1
  239. clear
  240. sleep 1
  241. echo "Llevamos a cabo la unión al dominio."
  242. echo "Indique la contraseña del administrador del dominio cuando se la solicite"
  243. domainjoin-cli join $DOMINIO $ADMDOM
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement