Am 12.02.2015 um 19:47 schrieb Michael Hagedorn:
Hi.
Ok, ich habe gerade einen ersten Versuch gestartet, beide Scripte zu
vereinen! Die Parameterübergabe habe ich bisher nicht eingebaut. Mir
gefällt es im Moment noch besser mit _festen_ Variablen, die man ganz
oben einmal deklariert und fertig.

Moin Michael,

da ich momentan einige Ferienupdates machen muss und unsere Hardware es nur erlaubt, in kleinen Gruppen die PCs über das Netz per Linbo und Torrentübertragung zu updaten, habe ich mir dein Skript noch mal genauer angesehen (apropos - danke dafür!!!) und auf unsere Verhältnisse angepasst. Vielleicht kannst du dich auch mit meiner Variante anfreunden... ;-) - Ein paar Bedingungen sind wohl anders als bei dir...

-- Da unser Windowsimage recht groß ist, kopiere ich es gerne häppchenweise in der Nacht. Dazu muss ich das Skript im Hintergrund laufen lassen können, die Auswahlmenüs fallen also bei mir weg, in Variablen am Anfang des Skriptes wird alles deklariert.

-- Ich inkrementiere den Zähler für die Anzahl der PCs, die gleichzeitig geklont werden, da mit mehr Seedern die Aktion stabil beschleunigt werden kann.

-- Die Ausgabe logge ich durch den Aufruf auch in eine Datei, dass müsste man auch innerhalb des Skriptes mittels "tee" machen können... (TODO)

-- Wichtig ist auch, dass man die gewünschten PCs in der /etc/linuxmuster/workstations mit einem gewünschten Kriterium finden kann.

-- Bei Bedarf kann man auch Wake-On-Lan aktivieren

Mir erleichtert das Skript wenigstens meine Arbeit ;-)

cu,     Jens

PS: Das Skript habe ich UNSCHARF geschaltet, so dass man es

---

#! /bin/bash

# Version 2.0 -- vom 12.02.2015
# Version 2.1 -- vom 24.07.2015
# Version 2.2 -- vom 01.08.2015 - Anpassungen zum Skripten im Hintergrund - JS

# Voraussetzung: In der start.conf.trusty714 --> Autostart abschalten!
# Danach laufen alle Clients bis zum LINBO-Startbildschirm hoch und
# warten auf ein serverseitiges "linbo-remote"


################################################################################################
# globale Deklarationen für die Räume:
ROOM1='b130';
ROOM2='b131';
ROOM3='b229';
ROOM4='c326';
ROOM5='pd600_smart'
ROOM6="grundschule";


# Varianten zur Synchronisation:
command1="sync:2";
command2="format:1,sync:1";
command3="initcache";
#,sync:1,format:2,sync:2";
command4="halt";
warten="";
#warten=" -w 60 ";
# -- ggf. mit Wartezeit

# Hier die Ausnahmen deklarieren, die NICHT synchronisiert werden
# sollen:
# Mit Pipe getrennte Keywords die Drucker definieren
# (drucker, printers, whatever)
PRINTER_KEYWORDS='drucker|raspi'

# Wartezeit zwischen den Zyklen
SECS=3
#((SECS=60*40) # Linux
#((SECS=60*60) # Windows
#((SECS=60*100)) # initcache

# Anzahl der Clients pro Zyklus
HOSTPERCYCLE=4
MEHR=1
# pro Durchgang ein PC mehr, weil mehr Seeder vorhanden sind
################################################################################################
# Skriptvorgaben - WICHTIG - HIER RAUM und BEFEHLE ANPASSEN!!!

ROOM=$ROOM6
command=$command3

##################################################################################################

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 /etc/linuxmuster/workstations |grep $ROOM |cut -d ";" -f 5`)
# Länge des IP Arrays
IP_LENGTH=${#IP[@]}
((IP_LENGTH_1=IP_LENGTH - 1))

for i in `seq 0 $IP_LENGTH_1`
do
  COMPARE=$(($i % $HOSTPERCYCLE))
  if [ "$i" != "0" ] && [ "$COMPARE" == "0" ]
    then
      sleep $SECS
((HOSTPERCYCLE+=$MEHR)) # pro Durchgang ein PC mehr, weil mehr Seeder vorhanden sind
  fi
  date
 # echo ${IP[$i]}
  echo "linbo-remote -i ${IP[$i]} $warten -c $command ";
  #  linbo-remote -i ${IP[$i]} $warten -c $command
  #  sleep 2
done
}

###########################################################################
###    Hauptmenu:
###########################################################################
echo "";
echo "**************************************************************";
echo "***   LINBO-REMOTE: Clients serverseitig synchronisieren   ***";
echo "**************************************************************";
echo "";

raum_sync;

exit 0









Das Script ist halbwegs fertig -- und kann in *diesem* Zustand gefahrlos
getestet werden, da es noch nicht "scharf gestellt ist" (ein echo-Befehl
zuviel). Eine Kleinigkeit ist aber seltsam: Ganz am Ende erscheint der
Befehl bei mir einmal zu oft. Warum?? Bash-Wizzards vor :)

Michael
-----------------------------------------------------------------------

#! /bin/bash

# Version 2.0 -- vom 12.02.2015

# Voraussetzung: In der start.conf.trusty714 --> Autostart abschalten!
# Danach laufen alle Clients bis zum LINBO-Startbildschirm hoch und
# warten auf ein serverseitiges "linbo-remote"

################################################################################################
# globale Deklarationen für die Räume:
ROOM1='raum1';
ROOM2='raum2';
ROOM3='lpc';

# Varianten zur Synchronisation:
command1="format,initcache:torrent,sync:1,sync:2,start:1";
command2="format,initcache:torrent,sync:1,sync:2,halt";
command3="initcache:torrent,sync:1,sync:2,start:1";
command4="sync:1,sync:2,halt";

# Hier die Ausnahmen deklarieren, die NICHT synchronisiert werden
# sollen:
# Mit Pipe getrennte Keywords die Drucker definieren
# (drucker, printers, whatever)
PRINTER_KEYWORDS='drucker|serverraum'

# Wartezeit zwischen den Zyklen
SECS=3

# Anzahl der Clients pro Zyklus
HOSTPERCYCLE=10
##################################################################################################

function what_to_do() {
PS3="Was soll alles gemacht werden: "
echo " ";

select auswahl2 in $command1 $command2 $command3 $command4 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 ;;
*) 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 /etc/linuxmuster/workstations |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]}
   echo "linbo-remote -i ${IP[$i]} -c $command";
   #  sleep 2
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 LehrerPCs  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 ;;
LehrerPCs) ROOM=$ROOM3; what_to_do; raum_sync; break ;;
*) echo "Ende"; exit 0 ;;
esac
done
#EOF

-----------------------------------------------------------------------------------------

_______________________________________________
linuxmuster-user mailing list
[email protected]
https://mail.lehrerpost.de/mailman/listinfo/linuxmuster-user


_______________________________________________
linuxmuster-user mailing list
[email protected]
https://mail.lehrerpost.de/mailman/listinfo/linuxmuster-user

Antwort per Email an