#!/bin/bash # Copyright (C) 2018 Tetras Libre <Contact@Tetras-Libre.fr> # Author: Beniamine, David <David.Beniamine@Tetras-Libre.fr> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. getip(){ awk '/^lease/{IP=$2} /hardware ethernet/{gsub(";","",$3);if($3 == "'$1'"){print IP}}' \ < /var/lib/dhcp/dhcpd.leases } runcmd(){ host=$1 shift echo "Runnig $@ on $host" ssh root@$host $@ } conf_dir="/etc/registry" conf_file="$conf_dir/hosts" broadcast=$(ip a | awk '/inet.*eth1/ {print $4}' | cut -d / -f 1) wait_time=10 wait_step=5 if [ -z "$1" ] then cmd="cd /opt/primtux-eole/; git pull; upgrade-session.sh" else cmd="$@" fi while read date mac name do # Boot machine wakeonlan -i $broadcast "$mac" MACS+=" $mac" done < $conf_file # Wait for boot echo "" while [ $wait_time -gt 0 ] do echo -ne "Waiting for boot, remaining $wait_time seconds\r" sleep $wait_step wait_time=$(($wait_time - $wait_step)) done echo -e "\nWaiting finished" for mac in $MACS do ip=$(getip $mac) runcmd $ip $cmd & done