Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— |
anwenderwiki:home_url_in_konfigurationsdateien_nach_klassenwechsel_reparieren [2011/11/04 10:53] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== 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 | ||
+ | <code> | ||
+ | /usr/local/bin | ||
+ | </code> | ||
+ | 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. | ||
+ | |||
+ | <code> | ||
+ | /usr/local/bin/verschiebe-schueler_homeURL.sh gast | ||
+ | </code> | ||
+ | bearbeitet den Home-Ordner des Benutzers **gast**. | ||
+ | |||
+ | <code> | ||
+ | /usr/local/bin/verschiebe-schueler_homeURL.sh | ||
+ | </code> | ||
+ | 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 ===== | ||
+ | <code> | ||
+ | #!/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 | ||
+ | </code> | ||