[c8fd992] | 1 | #!/bin/bash |
---|
| 2 | # setserveraddr: modifica los ficheros de configuración para asignar los valores |
---|
| 3 | # de la interfaz de red solicitada. |
---|
| 4 | # Nota: se enlazan los ficheros a los predefinidos detectados para la interfaz. |
---|
| 5 | # Uso: setserveraddr iface |
---|
| 6 | # Autor: Ramon Gomez - Univ. Sevilla |
---|
| 7 | # Fecha: 2011-01-25 |
---|
[8f70b5b] | 8 | # Versión: 1.0.5 - Regenerar ficheros de configuración. |
---|
| 9 | # Autor: Ramon Gomez - Univ. Sevilla |
---|
| 10 | # Fecha: 2014-06-06 |
---|
[c8fd992] | 11 | |
---|
| 12 | |
---|
[632bd45] | 13 | # Variables globales. |
---|
[c8fd992] | 14 | PROG="$(basename $0)" |
---|
[632bd45] | 15 | |
---|
| 16 | # Comprobar parámetros. |
---|
[c8fd992] | 17 | if [ $# -ne 1 ]; then |
---|
[8f70b5b] | 18 | echo "$PROG: Incorrect operand. Format: $PROG interface" >&2 |
---|
[c8fd992] | 19 | exit 1 |
---|
| 20 | fi |
---|
| 21 | if [ "$USER" != "root" ]; then |
---|
| 22 | echo "$PROG: Need to be root." >&2 |
---|
| 23 | exit 1 |
---|
| 24 | fi |
---|
| 25 | |
---|
[8f70b5b] | 26 | # Aviso informando de que los clientes iniciados pueden quedarse colgados. |
---|
| 27 | read -p "WARNING: initiated clients can hang. Continue? (y/n): " ANSWER |
---|
| 28 | if [ "${ANSWER^^}" != "Y" ]; then |
---|
| 29 | echo "Operation canceled." |
---|
| 30 | exit 0 |
---|
| 31 | fi |
---|
| 32 | |
---|
[c8fd992] | 33 | # Detectar la interfaz de red. |
---|
| 34 | DEVICES=$(ip -o link show up|awk -F: '$2!~/lo/ {print $2}') |
---|
[8f70b5b] | 35 | for DEV in $DEVICES; do |
---|
| 36 | # Si se encuentra la interfaz de red, obtener su dirección IP. |
---|
| 37 | [ "$DEV" == "$1" ] && SERVERIP=$(ip -o addr show dev $DEV | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}') |
---|
[c8fd992] | 38 | done |
---|
| 39 | |
---|
[8f70b5b] | 40 | # Comprobar si se ha detectado dirección IP. |
---|
| 41 | if [ -n "$SERVERIP" ]; then |
---|
| 42 | # Ficheros temporales. |
---|
| 43 | tmpfile=$(mktemp /tmp/og.XXXXX) |
---|
| 44 | MYCNF=$(mktemp /tmp/.my.cnf.XXXXX) |
---|
| 45 | trap "rm -f $tmpfile $MYCNF" 1 2 3 6 9 15 |
---|
| 46 | |
---|
[c8fd992] | 47 | # Comprobar si hay que modificar la configuración de DHCP. |
---|
| 48 | CHANGE=0 |
---|
[8f70b5b] | 49 | for f in /etc/{dhcp,hcp3}/dhcpd.conf; do |
---|
| 50 | if [ -f $f ]; then |
---|
| 51 | # Cambiar el parámetro "next-server" de DHCP. |
---|
| 52 | file="${f/./-$1.}" |
---|
[e0314d93] | 53 | sed -e "s/next-server.*/next-server $SERVERIP;/" \ |
---|
| 54 | -e "s/option routers ;/option routers ${SERVERIP%.*}.1;/" $file >$tmpfile |
---|
[8f70b5b] | 55 | # Copiar el fichero y enlazarlo si hay cambios. |
---|
[67d0d8c] | 56 | if [ ! $f -ef $file ] || ! diff -q $tmpfile $file &>/dev/null; then |
---|
[8f70b5b] | 57 | mv $tmpfile $file |
---|
| 58 | chmod 644 $file |
---|
| 59 | ln -f $file $f |
---|
| 60 | CHANGE=1 |
---|
| 61 | fi |
---|
[c8fd992] | 62 | fi |
---|
| 63 | done |
---|
| 64 | # Si ha cambiado la configuración, reiniciar DHCP. |
---|
| 65 | if [ $CHANGE == 1 ]; then |
---|
| 66 | for f in /etc/init.d/{isc-dhcp-server,dhcp3-server,dhcpd}; do |
---|
| 67 | [ -x $f ] && $f restart |
---|
| 68 | done |
---|
| 69 | else |
---|
[2cbfd3f] | 70 | echo "DHCP configuration has not changed." |
---|
[c8fd992] | 71 | fi |
---|
[8f70b5b] | 72 | |
---|
| 73 | # Guardar la IP anterior del repositorio. |
---|
[c8fd992] | 74 | OPENGNSYS=/opt/opengnsys |
---|
[8f70b5b] | 75 | source $OPENGNSYS/etc/ogAdmRepo.cfg |
---|
| 76 | OLDSERVERIP=$IPlocal |
---|
| 77 | |
---|
| 78 | # Comprobar si hay que modificar la configuración de OpenGnsys. |
---|
[c8fd992] | 79 | CHANGE=0 |
---|
[d7fe54a] | 80 | # Procesar los ficheros de configuración de OpenGnsys. |
---|
[8f70b5b] | 81 | for f in $OPENGNSYS/{etc/{ogAdmServer,ogAdmRepo,ogAdmAgent}.cfg,www/controlacceso.php,client/etc/ogAdmClient.cfg}; do |
---|
| 82 | # Error si no existe algún fichero de configuración. |
---|
| 83 | if [ ! -f $f ]; then |
---|
[c8fd992] | 84 | echo "$PROG: File $file does not exist." >&2 |
---|
| 85 | exit 2 |
---|
| 86 | fi |
---|
[8f70b5b] | 87 | # Cambiar la IP del servidor: |
---|
| 88 | # - variables ServidorAdm e IPlocal, |
---|
| 89 | # - servidor o IP en URLs excepto si contienen "localhost". |
---|
| 90 | sed -e "s,ServidorAdm=.*,ServidorAdm=$SERVERIP," \ |
---|
| 91 | -e "s,IPlocal=.*,IPlocal=$SERVERIP," \ |
---|
[f535be9] | 92 | -e "s,UrlMenu=https?://\([^/]*\)/\(.*\),UrlMenu=https://$SERVERIP/\2," \ |
---|
[4079733] | 93 | -e '/localhost/!s,https\?://[^/]*/\(.*\),https://'$SERVERIP'/\1,' $f >$tmpfile |
---|
[8f70b5b] | 94 | file="${f/./-$1.}" |
---|
[2cbfd3f] | 95 | # Si se usa otro interfaz o cambian los datos de red; ... |
---|
| 96 | if [ ! $f -ef $file ] || ! diff -q $tmpfile $file &>/dev/null; then |
---|
| 97 | # Copiar el fichero y enlazarlo. |
---|
| 98 | cp $tmpfile $file |
---|
[8f70b5b] | 99 | ln -f $file $f |
---|
[c8fd992] | 100 | CHANGE=1 |
---|
| 101 | fi |
---|
| 102 | done |
---|
[8f70b5b] | 103 | |
---|
[d7fe54a] | 104 | # Si ha cambiado la configuración, reiniciar OpenGnsys y actualizar la BD. |
---|
[c8fd992] | 105 | if [ $CHANGE == 1 ]; then |
---|
| 106 | /etc/init.d/opengnsys restart |
---|
| 107 | source $OPENGNSYS/etc/ogAdmServer.cfg |
---|
[69fc529] | 108 | # Componer fichero con credenciales de conexión. |
---|
| 109 | cat << EOT > $MYCNF |
---|
| 110 | [client] |
---|
| 111 | user=$USUARIO |
---|
| 112 | password=$PASSWORD |
---|
| 113 | EOT |
---|
[8f70b5b] | 114 | # Actualizar IP del servidor en la BD. |
---|
| 115 | mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \ |
---|
| 116 | "UPDATE entornos |
---|
| 117 | SET ipserveradm='$SERVERIP' |
---|
| 118 | WHERE identorno=1" |
---|
| 119 | |
---|
| 120 | # Actualizar IP del repositorio en la BD. |
---|
[9d380ec] | 121 | mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \ |
---|
[8f70b5b] | 122 | "UPDATE repositorios |
---|
| 123 | SET ip='$SERVERIP' |
---|
| 124 | WHERE ip='$OLDSERVERIP'" |
---|
| 125 | |
---|
| 126 | # Mostrar instrucciones a realizar tras la ejecución. |
---|
| 127 | cat << EOT |
---|
| 128 | Default server interface set to: $1 ($SERVERIP) |
---|
| 129 | |
---|
| 130 | Manual tasks: |
---|
| 131 | Check DHCP configuration file and restart service, if needed. |
---|
| 132 | Log-in as Web Console organization user. |
---|
| 133 | - Check URLs in all menus. |
---|
| 134 | - Run Advanced Netboot in all rooms. |
---|
| 135 | |
---|
| 136 | EOT |
---|
[c8fd992] | 137 | else |
---|
[8f70b5b] | 138 | # Mensaje indicando que no se han cambiado datos. |
---|
[2cbfd3f] | 139 | echo "Default interface has not changed: $1" |
---|
[c8fd992] | 140 | fi |
---|
| 141 | else |
---|
[8f70b5b] | 142 | # Error: interfaz de red no encontrado. |
---|
| 143 | echo "$PROG: Network device not found. Format: $PROG interface" >&2 |
---|
[c8fd992] | 144 | exit 1 |
---|
| 145 | fi |
---|
| 146 | |
---|
[2cbfd3f] | 147 | # Eliminar ficheros temporales. |
---|
| 148 | rm -f $tmpfile $MYCNF |
---|
| 149 | |
---|