Hi.
Ich habe gerade ein weiteres Script, das ich irgendwann mal für den v6.x Server zusammengebastelt habe, auf den v7 Server übertragen.
Vielleicht kann das ja jemand brauchen … es ist jedenfalls sehr schnell an die eigenen Bedürfnisse anpassbar.
Das Script ist im Moment nicht scharf gestellt; dazu muss noch in der Zeile „SCHARF STELLEN“ das # herausgenommen werden…
Man kann also alles völlig gefahrlos testen, da der Befehl nur per echo
ausgegeben aber nicht wirklich ausgeführt wird…
#! /bin/bash
# Version 2.1 vom 06.09.2020
# Dieses Script versorgt alle Rechner einer HWK per Menusteuerung mit einem Image.
# Man kann die gängigsten Befehle und häufig verwendeten Räume eintragen.
# Voraussetzung: In der start.conf.<HWK> --> Autostart abschalten!
# Danach laufen alle Clients bis zum LINBO-Startbildschirm hoch und warten auf "linbo-remote"
################################################################################################
# globale Deklarationen für die Räume:
ROOM1='raum1';
ROOM2='raum2';
ROOM3='schullaptop';
# Varianten zur Synchronisation:
command1="format,initcache,sync:1,start:1";
command2="initcache:torrent,sync:2,sync:1,reboot";
command3="initcache:torrent,sync:1,start:1,reboot";
command4="start:1";
command5="reboot";
# Hier die Ausnahmen deklarieren, die NICHT synchronisiert werden sollen:
# Mit Pipe getrennte Keywords die Drucker definieren (drucker, printers, whatever)
PRINTER_KEYWORDS='drucker|serverraum|usb-stick|knoppix|t410|ams'
# Wo befindet sich die devices.csv? (default hier eingetragen)
devices=/etc/linuxmuster/sophomorix/default-school/devices.csv;
# Wartezeit zwischen den Zyklen
SECS=2
#SECS=600
# Anzahl der Clients pro Zyklus -- es werden immer x Hosts auf einmal synchronisiert:
HOSTPERCYCLE=20
##################################################################################################
function what_to_do() {
PS3="Was soll alles gemacht werden: "
echo " ";
select auswahl2 in $command1 $command2 $command3 $command4 $command5 Ende
do
case "$auswahl2" in
"") echo "Ungültige Auswahl" ;;
$command1) command=$command1; break ;;
$command2) command=$command2; break ;;
$command3) command=$command3; break ;;
$command4) command=$command4; break ;;
$command5) command=$command5; break ;;
*) echo "Ende"; exit 0 ;;
esac
done
}
function raum_sync() {
# IP Adressen abarbeiten, Vergleichen ob ein Zyklus (ungleich 0)
# betreten wurde, falls ja, dann mache eine Pause, falls nein, weitermachen
# die echo-Zeile kann durch einen entsprechenden Befehl angepasst werden
# - ${IP[$i]} gibt die IP an der Stelle $i im Array wieder
declare -a IP # Array mit IPs
# IP-Adressen raumbezogen aus workstations lesen und ins Array packen
IP=(`grep -Ev $PRINTER_KEYWORDS $devices |grep $ROOM |cut -d ";" -f 5`)
# Länge des IP Arrays
IP_LENGTH=${#IP[@]}
for i in `seq 0 $IP_LENGTH`
do
COMPARE=$(($i % $HOSTPERCYCLE))
if [ "$i" != "0" ] && [ "$COMPARE" == "0" ]
then
sleep $SECS
fi
echo "${IP[$i]}"
# NUR Ausgabe:
echo "linbo-remote -i ${IP[$i]} -c $command";
#SCHARF STELLEN:
# /usr/sbin/linbo-remote -i ${IP[$i]} -c $command;
sleep 1
done
}
###########################################################################
### Hauptmenu:
###########################################################################
echo "";
echo "**************************************************************";
echo "*** LINBO-REMOTE: Clients serverseitig synchronisieren ***";
echo "**************************************************************";
echo "";
PS3="Durch Tippen der Ziffer wählen: ";
echo "Welche Clients sollen synchronisiert werden?";
echo " ";
select auswahl in Raum1 Raum2 Schullaptop Ende
do
case "$auswahl" in
"") echo "Ungültige Auswahl" ;;
Raum1) ROOM=$ROOM1; what_to_do; raum_sync; break ;;
Raum2) ROOM=$ROOM2; what_to_do; raum_sync; break ;;
Schullaptop) ROOM=$ROOM3; what_to_do; raum_sync; break ;;
*) echo "Ende"; exit 0 ;;
esac
done
#EOF
VG,
Michael