#!/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-unison.prf SERVERCMD="UNISONLOCALHOSTNAME=$UNISONLOCALHOSTNAME UNISON=$UNISON unison" mkdir -p $UNISON LASTERROR=$? if [ $LASTERROR -ne 0 ]; then echo $$ > $CONFIGSYNC echo $$ > $FULLSYNC exit $LASTERROR fi ssh $SSHARGS $NFSSERVER "mkdir -p $UNISON" LASTERROR=$? if [ $LASTERROR -ne 0 ]; then echo $$ > $CONFIGSYNC echo $$ > $FULLSYNC exit $LASTERROR fi 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) #echo $REMOTEFILES #echo $LOCALFILES 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* 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 #if [ -e "$WMDE_UNISON_PRF" ]; then cp "$WMDE_UNISON_PRF" "$UNISON/default.prf"; cat "$WMDE_UNISON_PRF" | ssh $SSHARGS $NFSSERVER "cat > $UNISON/default.prf" #fi if [ "$1" = "pam" ]; then echo "Loading roaming profile, please be patient ..." size=$(ssh $SSHARGS $NFSSERVER "du -sh $HOMDIR | cut -f1") $PREFIX/wmde-rp-progress.sh $HOMEDIR $size & PRPID=$! unison $HOMEDIR ssh://$NFSSERVER/$HOMEDIR -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' -silent > /dev/null 2>&1 kill $PRPID echo "Raoming profile loaded." else # Sync config for item in $CONFIGDIRS; do CONFIGDIRSARGS="$CONFIGDIRSARGS -path $item" done unison $HOMEDIR ssh://$NFSSERVER/$HOMEDIR -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' $CONFIGDIRSARGS echo "$$" > $CONFIGSYNC PROFILE=$UNISON/wmde.prf REMOTE_BASE=$HOMEDIR IGNORE_RULES=$( ssh "$SSHARGS" $NFSSERVER "find '$REMOTE_BASE' -type f -size +$SMALLFILESSIZE" | while IFS= read -r filepath; do # Pfad relativieren zum REMOTE_BASE relpath="${filepath#$REMOTE_BASE/}" echo "ignore = Path $relpath" done ) generate_profile() { echo "root = $HOMEDIR" > $PROFILE echo "root = ssh://$NFSSERVER/$HOMEDIR" >> $PROFILE printf "%s\n" "$1" >> $PROFILE cat /etc/wmde-rp-unison.prf >> $PROFILE } generate_profile "$IGNORE_RULES" unison wmde -sshargs "$SSHARGS" -times -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' echo "$$" > $SMALLFILESSYNC # Sync all unison $HOMEDIR ssh://$NFSSERVER/$HOMEDIR -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' echo "$$" > $FULLSYNC echo "$$" > $FIRSTSYNC # Sync all & repeat unison $HOMEDIR ssh://$NFSSERVER/$HOMEDIR -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' -repeat watch+60 fi exit 0