Script wake_and_pkgsync: Encender los equipos de un aula y actualizarlos mediante pkgsync

El script wake_and_pkgsync se encuentra alojado en el directorio /usr/local/sbin/ del nas. ¿Por qué en el nas? Principalmente porque el nas tiene acceso a las tres redes: Intranet, Wifi e Infolab y porque lo uso como pasarela.

Su función es encender los equipos de un aula y actualizarlos mediante pkgsync

Para encender los equipos, el script utiliza un fichero por cada aula que contienen los nombres y las MAC de las máquinas del aula.
El comando a ejecutar en cada máquina se indica mediante la variable command. Esta variable puede tomar dos posibles valores:
  • command="/usr/local/sbin/windowsbooting && /usr/local/sbin/pkgsync -R"
  • command="/usr/local/sbin/pkgsync -S"
La primera opción modifica EFI para que la próxima vez se inicie windows y reinicia la máquina tras el pkgsync. Esta opción está pensada para actualizar Ubuntu, y, a continuación Windows.

La segunda opción ejecuta pkgsync y apaga la máquina. Esta opción está pensada para actualizar solamente Ubuntu.

#!/bin/bash
#
# Esteban M. Navas
# IES Valle del Jerte - Plasencia
# Fecha de creación: 16/05/2018
# Última modificación: 18/05/2018

# wake_and_pkgsync -> Enciende los equipos de un aula y los actualiza mediante pkgsync

basedir="/etc/dsh/group"
aula=$1
hosts=$basedir/$aula.hosts
macs=$basedir/$aula.macs
timeout=90

# Comando que queremos ejecutar en cada máquina
# Actualizar Ubuntu y Windows
# command="/usr/local/sbin/windowsbooting && /usr/local/sbin/pkgsync -R"
# Actualizar Ubuntu y apagar
# command="/usr/local/sbin/pkgsync -S"
command="/usr/local/sbin/pkgsync -S"

waitfor () {
   ping -c 1 -n -w $timeout $1 &>/dev/null
}

if [ $# -eq 0 ]; then
   echo "Debe introducir el nombre de un fichero con el listado de hosts (nombres o IPs)"
   echo -e "USO: $0 filenamen"
   exit
fi

if [ ! -s $hosts ]; then
   echo "No existe el fichero de hosts: $hosts"
   echo -e "USO: $0 filenamen"
   exit
fi

if [ ! -s $macs ]; then
   echo "No existe el fichero de macs: $macs"
   echo -e "USO: $0 filenamen"
   exit
fi

if [ "$aula" = "tecnologia" ]; then
   broadcast="172.19.145.255"
else
   broadcast="192.168.103.255"
fi

echo -e "nEncendiendo equipos del aula $aula ..."
# Seleccionamos las MAC de los equipos y los encendemos
cut -f2 -d";" $hosts > $macs && wakeonlan -i $broadcast -f $macs 2>&1>/dev/null

echo "Esperando $timeout segundos mientras finaliza el proceso de encendido ..."
sleep $timeout

while read host; do
   machine=$(echo $host | cut -f1 -d";")
   mac=$(echo $host | cut -f2 -d";")

   echo -e "nActualizando equipo $machine con MAC $mac ..."
   waitfor $machine; /usr/bin/dsh -m $machine -w $command
done < $hosts
Be the first to comment

Por favor acceder para comentar.