====== Home-URL reparieren ====== Bei der jährlichen Versetzung oder einem Klassenwechsel während des Schuljahres verschiebt die paedML den Home-Ordner an eine andere Stelle((z.B. von /home/students/7a nach /home/students/8a)). Leider speichern einige Programme unter Linux den Pfad zum Home-Ordner in Konfigurationsdateien ab. Ein prominentes Beispiel ist KDE4, das in der Datei ''.kde4/share/apps/kfileplaces/bookmarks.xml'' relativ zum Home-Ordner diesen Pfad speichert. Als Folge davon funktioniert nach einer Versetzung im KDE-Programm //dolphin// der Ort Home-Ordner nicht mehr. Abhilfe bietet das folgende kleine Skript. Es sollte auf dem Server im Verzeichnis /usr/local/bin gespeichert und immer nach einer Versetzung ausgeführt werden. Es durchsucht alle Schülerordner nach Dateien die einen Verweis auf den alten Home-Ordner haben und ändert diesen durch einen Verweis auf den neuen Home-Ordner. Es werden keine binären Dateien durchsucht und symbolische Links werden nicht durchsucht. Zu Testzwecken kann man einen Benutzernamen als Parameter übergeben, um nur ein einziges Benutzerverzeichnis bearbeiten zu lassen. /usr/local/bin/verschiebe-schueler_homeURL.sh gast bearbeitet den Home-Ordner des Benutzers **gast**. /usr/local/bin/verschiebe-schueler_homeURL.sh bearbeitet alle Home-Ordner der Schüler. Es werden nur Schülerordner bearbeitet, da nur bei diesen das Problem der Verschiebung auftritt. ===== verschiebe-schueler_homeURL.sh ===== #!/bin/bash # Gymnasium Himmelsthuer, fschuett 2011 # In allen Konfigurationssdateien wird das Home-Verzeichnis # von aklasse nach nklasse versetzt, # falls beide unterschiedlich sind. # # Test: Sind wir root? if [ $UID != 0 ]; then echo "Das darf nur mit root-Rechten passieren!" exit 1 fi TMPFILE=`mktemp /tmp/move_homeURL.XXXXXX` TMPFILEUSER=`mktemp /tmp/move_homeURL.XXXXXX` DEBUG="" move_homeURL(){ if [ -d ${home} ]; then SEARCH="/home/students/\([^/]*\)/${user}" nklasse=`echo $home|cut -d\/ -f4` REPLACE="/home/students/${nklasse}/${user}" for DATEI in `find ${home} -type f -print0| xargs -0r grep -l -I "${SEARCH}"`; do [ -f "$DATEI" ] || continue; aklasse=`grep -o -m 1 "${SEARCH}" "$DATEI"|head -n 1|cut -d\/ -f4` if [ ! "${aklasse}" = "${nklasse}" ]; then echo "Schüler ${user}: ${aklasse} -> ${nklasse} in Datei $DATEI" sed -i "s#${SEARCH}#${REPLACE}#g" "$DATEI" fi done; fi } #Arbeitsversion mit allen Schuelern if [ -z "$1" ]; then getent passwd >$TMPFILEUSER else getent passwd | grep "^$1" >$TMPFILEUSER fi echo "Verschiebung von Schülern" echo "=======================" echo "Änderung der Pfade in Konfigurationsdateien auf die URL der neuen Klasse." echo "-------------------------------------------------------------------------" while IFS=: read user pass uid gid name home shell do # Ist es ein Schueler ? GROUP=`id -gn $user`; [ "" != "`echo $home | grep students`" ] && GROUP=students; [ "" != "`echo $home | grep null`" ] && continue; [ "$name" = "ExamAccount" ] && GROUP=examaccount; [ "$GROUP" != "students" ] && continue; [ "$home" = "/dev/null" ] && continue; move_homeURL $user done <$TMPFILEUSER; rm -f $TMPFILE rm -f $TMPFILEUSER