149 lines
4.4 KiB
Bash
149 lines
4.4 KiB
Bash
#!/bin/bash
|
|
# setserveraddr: modifica los ficheros de configuración para asignar los valores
|
|
# de la interfaz de red solicitada.
|
|
# Nota: se enlazan los ficheros a los predefinidos detectados para la interfaz.
|
|
# Uso: setserveraddr iface
|
|
# Autor: Ramon Gomez - Univ. Sevilla
|
|
# Fecha: 2011-01-25
|
|
# Versión: 1.0.5 - Regenerar ficheros de configuración.
|
|
# Autor: Ramon Gomez - Univ. Sevilla
|
|
# Fecha: 2014-06-06
|
|
|
|
|
|
# Variables globales.
|
|
PROG="$(basename $0)"
|
|
|
|
# Comprobar parámetros.
|
|
if [ $# -ne 1 ]; then
|
|
echo "$PROG: Incorrect operand. Format: $PROG interface" >&2
|
|
exit 1
|
|
fi
|
|
if [ "$USER" != "root" ]; then
|
|
echo "$PROG: Need to be root." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Aviso informando de que los clientes iniciados pueden quedarse colgados.
|
|
read -p "WARNING: initiated clients can hang. Continue? (y/n): " ANSWER
|
|
if [ "${ANSWER^^}" != "Y" ]; then
|
|
echo "Operation canceled."
|
|
exit 0
|
|
fi
|
|
|
|
# Detectar la interfaz de red.
|
|
DEVICES=$(ip -o link show up|awk -F: '$2!~/lo/ {print $2}')
|
|
for DEV in $DEVICES; do
|
|
# Si se encuentra la interfaz de red, obtener su dirección IP.
|
|
[ "$DEV" == "$1" ] && SERVERIP=$(ip -o addr show dev $DEV | awk '$3~/inet$/ {sub (/\/.*/, ""); print ($4)}')
|
|
done
|
|
|
|
# Comprobar si se ha detectado dirección IP.
|
|
if [ -n "$SERVERIP" ]; then
|
|
# Ficheros temporales.
|
|
tmpfile=$(mktemp /tmp/og.XXXXX)
|
|
MYCNF=$(mktemp /tmp/.my.cnf.XXXXX)
|
|
trap "rm -f $tmpfile $MYCNF" 1 2 3 6 9 15
|
|
|
|
# Comprobar si hay que modificar la configuración de DHCP.
|
|
CHANGE=0
|
|
for f in /etc/{dhcp,hcp3}/dhcpd.conf; do
|
|
if [ -f $f ]; then
|
|
# Cambiar el parámetro "next-server" de DHCP.
|
|
file="${f/./-$1.}"
|
|
sed -e "s/next-server.*/next-server $SERVERIP;/" \
|
|
-e "s/option routers ;/option routers ${SERVERIP%.*}.1;/" $file >$tmpfile
|
|
# Copiar el fichero y enlazarlo si hay cambios.
|
|
if [ ! $f -ef $file ] || ! diff -q $tmpfile $file &>/dev/null; then
|
|
mv $tmpfile $file
|
|
chmod 644 $file
|
|
ln -f $file $f
|
|
CHANGE=1
|
|
fi
|
|
fi
|
|
done
|
|
# Si ha cambiado la configuración, reiniciar DHCP.
|
|
if [ $CHANGE == 1 ]; then
|
|
for f in /etc/init.d/{isc-dhcp-server,dhcp3-server,dhcpd}; do
|
|
[ -x $f ] && $f restart
|
|
done
|
|
else
|
|
echo "DHCP configuration has not changed."
|
|
fi
|
|
|
|
# Guardar la IP anterior del repositorio.
|
|
OPENGNSYS=/opt/opengnsys
|
|
source $OPENGNSYS/etc/ogAdmRepo.cfg
|
|
OLDSERVERIP=$IPlocal
|
|
|
|
# Comprobar si hay que modificar la configuración de OpenGnsys.
|
|
CHANGE=0
|
|
# Procesar los ficheros de configuración de OpenGnSys.
|
|
for f in $OPENGNSYS/{etc/{ogAdmServer,ogAdmRepo,ogAdmAgent}.cfg,www/controlacceso.php,client/etc/ogAdmClient.cfg}; do
|
|
# Error si no existe algún fichero de configuración.
|
|
if [ ! -f $f ]; then
|
|
echo "$PROG: File $file does not exist." >&2
|
|
exit 2
|
|
fi
|
|
# Cambiar la IP del servidor:
|
|
# - variables ServidorAdm e IPlocal,
|
|
# - servidor o IP en URLs excepto si contienen "localhost".
|
|
sed -e "s,ServidorAdm=.*,ServidorAdm=$SERVERIP," \
|
|
-e "s,IPlocal=.*,IPlocal=$SERVERIP," \
|
|
-e '/localhost/!s,https\?://[^/]*/\(.*\),https://'$SERVERIP'/\1,' $f >$tmpfile
|
|
file="${f/./-$1.}"
|
|
# Si se usa otro interfaz o cambian los datos de red; ...
|
|
if [ ! $f -ef $file ] || ! diff -q $tmpfile $file &>/dev/null; then
|
|
# Copiar el fichero y enlazarlo.
|
|
cp $tmpfile $file
|
|
ln -f $file $f
|
|
CHANGE=1
|
|
fi
|
|
done
|
|
|
|
# Si ha cambiado la configuración, reiniciar OpenGnSys y actualizar la BD.
|
|
if [ $CHANGE == 1 ]; then
|
|
/etc/init.d/opengnsys restart
|
|
source $OPENGNSYS/etc/ogAdmServer.cfg
|
|
# Componer fichero con credenciales de conexión.
|
|
cat << EOT > $MYCNF
|
|
[client]
|
|
user=$USUARIO
|
|
password=$PASSWORD
|
|
EOT
|
|
# Actualizar IP del servidor en la BD.
|
|
mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
|
|
"UPDATE entornos
|
|
SET ipserveradm='$SERVERIP'
|
|
WHERE identorno=1"
|
|
|
|
# Actualizar IP del repositorio en la BD.
|
|
mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -e \
|
|
"UPDATE repositorios
|
|
SET ip='$SERVERIP'
|
|
WHERE ip='$OLDSERVERIP'"
|
|
|
|
# Mostrar instrucciones a realizar tras la ejecución.
|
|
cat << EOT
|
|
Default server interface set to: $1 ($SERVERIP)
|
|
|
|
Manual tasks:
|
|
Check DHCP configuration file and restart service, if needed.
|
|
Log-in as Web Console organization user.
|
|
- Check URLs in all menus.
|
|
- Run Advanced Netboot in all rooms.
|
|
|
|
EOT
|
|
else
|
|
# Mensaje indicando que no se han cambiado datos.
|
|
echo "Default interface has not changed: $1"
|
|
fi
|
|
else
|
|
# Error: interfaz de red no encontrado.
|
|
echo "$PROG: Network device not found. Format: $PROG interface" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Eliminar ficheros temporales.
|
|
rm -f $tmpfile $MYCNF
|
|
|