YOU-Updates für Clients immer aktuell

Seite: 3/3
(1769 Worte insgesamt im Text)
(11936 mal aufgerufen)  Druckerfreundliche Ansicht

Update-Einträge im LDAP

Die Clients befragen bei jedem Bootvorgang den LDAP-Server und führen nur dann Skripte aus, wenn speziell für sie ein Eintrag im LDAP hinterlegt ist.

Daten zum ersten Mal eintragen

Um nun überhaupt erst einmal Einträge ins LDAP-Verzeichnis zu bringen, benötigen wir ein kleines Skript, welches in einem "Initialisierungsschritt" die Einträge anlegt. Später werden diese Einträge nur noch geändert.

Angenommen, Sie haben einen Klassenraum mit openSUSE 11.0-Clients, der "pc-raum" genannt wurde. Dann sieht die Struktur glücklicherweise schon so aus:

  • pc-raum-pc01
  • pc-raum-pc02
  • pc-raum-pc03
  • ...
Das entsprechende Skript (klick zum Download) zum Eintragen der nötigen Werte in die LDAP-Datenbank sieht dann wie folgt aus:
#!/bin/bash
# 
# init-script to add ldap-configuration for linux clients 
# who can retrieve updates from the server
#
LDIFDIR=$(mktemp -d /var/tmp/PCTMP-XXXXXX)
# ACHTUNG!
# Das hier angegebene Skript muss unterhalb von 
# /var/SuSE/update/
# liegen:
SCRIPTNAME=update.sh
ROOMS=`ldapsearch -x "(&(Objectclass=SchoolRoom)(description=*))" description |  awk '/description:/ {print $2}'`
if [ -x $LDIFDIR ]; then
echo "$LDIFDIR exists!"
echo "Please rm -rf $LDIFDIR and run me again!"
exit 1
fi
if [ "$ROOMS" == "" ]; then 
echo "YOU have to define some rooms first!"
exit 1
fi
echo "Defined rooms:"
echo $ROOMS
echo
echo -n "Please enter the Room-Name(s) or press [Enter] for all rooms: "
read room
echo -n "Please enter the Scriptname for the clients (must be beneath /var/SuSE/update) [update.sh]: " 
read scriptname
if [ "$scriptname" != "" ]; then
SCRIPTNAME=$scriptname;
fi
echo "Using $SCRIPTNAME for Updatepath."
echo
if [ "$room" == "" ]; then
echo "initialise all rooms ..."
for PCDN in `ldapsearch -x "(&(objectClass=SchoolWorkstation)(sn=*Workstation-User))" dn | grep dn  | cut -d " " -f 2 | grep -v requesting`; do
# Create an tempfile for each client
/bin/cat >> $LDIFDIR/$PCDN.ldiff << EOF_LDIF
dn: $PCDN
changetype: modify
add: lientUpdatePath
clientUpdatePath: $SCRIPTNAME
-
dn: $PCDN
changetype: modify
add: clientMustUpdate
clientMustUpdate: yes
EOF_LDIF
done
else
for ROOM in $room; do
echo "initialise $ROOM ..."
for PCDN in `ldapsearch -x "(&(objectClass=SchoolWorkstation)(sn=$ROOM*Workstation-User))" dn | grep dn  | cut -d " " -f 2 | grep -v requesting`; do 
# Create an tempfile for each client in room
/bin/cat >> $LDIFDIR/$PCDN.ldiff << EOF_LDIF
dn: $PCDN
changetype: modify
add: clientUpdatePath
clientUpdatePath: $SCRIPTNAME
-
dn: $PCDN
changetype: modify
add: clientMustUpdate
clientMustUpdate: yes
EOF_LDIF
done
done
fi
echo
echo "You can find my results in $LDIFDIR"
echo -n "Should I update the LDAP-Database now [y/N] ? "
read LDAP
if [ "$LDAP" == "y" ]; then
for i in $LDIFDIR/*; do
PASS=`/usr/sbin/get_admin_pw`
DN=`cat /etc/openldap/slapd.conf | grep -v "#" | awk '/rootdn/ {print }' | cut -d "\"" -f 2`
ldapadd -x -D $DN -w $PASS -f $i
done
fi
echo -n "Should I remove $LDIFDIR now [y/N] ? "
read answ
if [ "$answ" == "y" ]; then
rm -rf $LDIFDIR
fi
echo
echo "READY"
echo

Anschließend ist für jeden Client des entsprechenden Raumes (oder der Räume) ein entsprechender Eintrag im LDAP vorhanden. Jetzt werden die Clients beim Booten schon auf dem Server nach einem Skript suchen, dessen Pfad (und Namen) Sie angegeben haben.

Update der Daten im LDAP

Da man als Administrator ja irgendwann eine gewisse Faulheit an den Tag legt, sollen die Update-Daten der Clients zukünftig automatisch eingetragen werden, wenn man etwas geändert hat oder z.B. Updates für die Clients vorliegen. Dazu wird der anfangs angelegte Cronjob erweitert. So wird immer dann, wenn Daten vom externen original-Update-Rechner auf den OSS übertragen wurden, ein entsprechender Eintrag in der Datenbank gemacht und die Clients führen beim nächsten Booten ein Update durch.

Da man u.U. ja auch einfach einmal bestimmte Befehle nur an die Clients in einem bestimmten Raum ausführen möchte, ist das Skript zweigeteilt. Einerseits gibt es hier ein nützliches Skript, welches die Einträge im LDAP vornimmt:

#!/bin/bash
# UpdateClients.sh
# 
usage () {
echo Usage: `basename $0` "[--help] [--list] [--disable] [--room <room>] [--script </room>



Kommentare

Einen Kommentar hinzufügen



 Suchen:


 Umfrage

(Nur für angemeldete Benutzer)

Was wird hier am meisten vermisst?

[ Ergebnis | Umfragen ]

Stimmen: 621
Kommentare: 0

 Zitate

Wo sich noch Bit und Byte gute Nacht sagen.

-- anonymous