#!/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 . $PREFIX/wmde-rp-common.sh HOMEDIR=$(getent passwd "$PAM_USER" | cut -d: -f6) SSHARGS="-o UserKnownHostsFile=$WMDERPDIR/known_hosts -o ControlMaster=auto -o ControlPath=~/.ssh/cm-%r@%h:%p -o ControlPersist=10m" create_wmderpdir 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 > "$WMDERPDIR/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 true" export UNISONLOCALHOSTNAME=`hostname` export UNISON=$WMDERPDIR/unison-$UNISONLOCALHOSTNAME #WMDE_UNISON_PRF=/etc/wmde-rp-full.prf #WMDE_UNISON_CFG_PRF=/etc/wmde-rp-config.prf #WMDE_UNISON_PERM_PRF=/etc/wmde-rp-perm.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 echo "$2" >> $PROFILE } generate_profile config "$UNISON_CONFIG_DIRS" generate_profile full "$UNISON_FULL_DIRS" generate_profile perm "$UNISON_PERM_DIRS" yes | unison config -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch #-ignore 'Path .wmde-rp' echo "PUT PID INTO CONFIG_SYNC" echo "$$" > $CONFIGSYNC echo "DONE PUT PID INTO CONFIG_SYNC" # Sync all yes | unison full -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch #-ignore 'Path $WMDERPDIRNAME' echo "$$" > $FULLSYNC echo "$$" > $FIRSTSYNC # Sync all & repeat yes | unison perm -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -repeat watch+60 #-ignore 'Path $WMDERPDIRNAME' -repeat watch+60 exit 0