#!/bin/sh . /etc/wmde-rp.conf #exec > >(tee /dev/null) 2>&1 USER=`whoami` PAM_USER=$USER PAM_TYPE=open_session exec >> /tmp/mys-$USER.txt 2>&1 set -x . $PREFIX/wmde-rp-check-pam-user.sh #echo `who am i` > /tmp/usersync-session.txt HOMEDIR=$(getent passwd "$PAM_USER" | cut -d: -f6) SSHARGS="-o UserKnownHostsFile=$HOMEDIR/.wmdesync/known_hosts" . $PREFIX/wmde-rp-common.sh mkdir -p $HOMEDIR/.wmdesync LASTERROR=$? if [ $LASTERROR -ne 0 ]; then echo $$ > $CONFIGSYNC echo $$ > $FULLSYNC exit $LASTERROR fi #LOGFILE=$HOMEDIR/.wmdesync/usersync.log #PIDFILE=$HOMEDIR/.wmdesync/usersync.pid #FIRSTSYNC=$HOMEDIR/.wmdesync/firstsync-done #FULLSYNC=$HOMEDIR/.wmdesync/fullsync-done #CONFIGSYNC=$HOMEDIR/.wmdesync/configsync-done . $PREFIX/wmde-rp-common.sh if [ -f "$PIDFILE" ]; then OLD_PID=`cat "$PIDFILE"` if kill -0 "$OLD_PID" 2> /dev/null; then echo "Usersync already running." >> $LOGFILE exit 0 fi fi echo 0 > $CONFIGSYNC echo 0 > $FULLSYNC echo 0 > $SMALLFILESSYNC echo $$ > $PIDFILE KNOWNHOSTS=`$PREFIX/wmde-rp-generate-known-hosts.sh` LASTERROR=$? if [ $LASTERROR -ne 0 ]; then echo $$ > $CONFIGSYNC echo $$ > $FULLSYNC exit $LASTERROR fi echo $KNOWNHOSTS > "$HOMEDIR/.wmdesync/known_hosts" LASTERROR=$? if [ $LASTERROR -ne 0 ]; then echo $$ > $CONFIGSYNC echo $$ > $FULLSYNC exit $LASTERROR fi # The following creates users home directory on the nfs server if not already exists ssh $SSHARGS $PAM_USER@$NFSSERVER /usr/bin/true LASTERROR=$? if [ $LASTERROR -ne 0 ]; then echo $$ > $CONFIGSYNC echo $$ > $FULLSYNC exit $LASTERROR fi IGNORES="-ignore 'Path .wmdesync'" OTHERARGS="-auto -log -prefer newer -maxerrors 500000 -fastcheck" export UNISONLOCALHOSTNAME=`hostname` export UNISON=$HOMEDIR/.wmdesync/unison-$UNISONLOCALHOSTNAME WMDE_UNISON_PRF=/etc/wmde-rp-full.prf WMDE_UNISON_CFG_PRF=/etc/wmde-rp-config.prf SERVERCMD="UNISONLOCALHOSTNAME=$UNISONLOCALHOSTNAME UNISON=$UNISON unison" # Arbeits-Directory für Unison erstellen mkdir -p $UNISON LASTERROR=$? if [ $LASTERROR -ne 0 ]; then echo $$ > $CONFIGSYNC echo $$ > $FULLSYNC exit $LASTERROR fi # Arbeits-Directory auch auf dem SSH-Server erstellen ssh $SSHARGS $NFSSERVER "mkdir -p $UNISON" LASTERROR=$? if [ $LASTERROR -ne 0 ]; then echo $$ > $CONFIGSYNC echo $$ > $FULLSYNC exit $LASTERROR fi # Lokal und remote eventuell vorhandene Lock- oder Cache-Dateien von Unison entfernen rm -f $LOCALDIR/lk* rm -f $LOCALDIR/fp* ssh $SSHARGS $PAM_USER@$NFSSERVER rm -f $REMOTEDIR/lk* ssh $SSHARGS $PAM_USER@$NFSSERVER rm -f $REMOTEDIR/fp* # Lokal und remote eine Liste aller Unison-Archive erstellen REMOTEDIR="$UNISON" LOCALDIR="$UNISON" REMOTEFILES=$(ssh $SSHARGS $PAM_USER@$NFSSERVER find "$REMOTEDIR" -maxdepth 1 -type f -name 'ar*' -printf '%f\\n' | sort) LOCALFILES=$(find "$LOCALDIR" -maxdepth 1 -type f -name 'ar*' -printf '%f\n' | sort) # Archive löschen, wenn sie sich lokal und remote unterscheiden if [ "$REMOTEFILES" = "$LOCALFILES" ]; then echo "ok" > /dev/null else # echo "Unison archives differ, removing them " rm -f $LOCALDIR/ar* ssh $SSHARGS $PAM_USER@$NFSSERVER rm -f $REMOTEDIR/ar* fi for file in $LOCALDIR/ar*; do [ -e "$file" ] || continue # Falls kein Match, "ar*" bleibt als String erhalten if [ ! -s "$file" ]; then rm -f "$file" ssh $SSHARGS $PAM_USER@$NFSSERVER rm -f "$file" fi done # Hilfsfunktion, um ein Unison-Profile zu erstellen generate_profile() { PROFILE="$UNISON/$1.prf" echo "root = $HOMEDIR" > $PROFILE echo "root = ssh://$NFSSERVER/$HOMEDIR" >> $PROFILE cat /etc/wmde-rp-$1.prf >> $PROFILE } generate_profile full generate_profile config #cp "$WMDE_UNISON_PRF" "$UNISON/full.prf"; #cp "$WMDE_UNISON_CFG_PRF" "$UNISON/config.prf"; # Sync config for item in $CONFIGDIRS; do CONFIGDIRSARGS="$CONFIGDIRSARGS -path $item" done unison config -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' $CONFIGDIRSARGS echo "$$" > $CONFIGSYNC echo "$$" > $SMALLFILESSYNC # Sync all yes | unison full -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' echo "$$" > $FULLSYNC echo "$$" > $FIRSTSYNC # Sync all & repeat yes | unison full -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' -repeat watch+60 exit 0