diff --git a/install.sh b/install.sh index 97db70d..1ad6641 100755 --- a/install.sh +++ b/install.sh @@ -38,7 +38,8 @@ copy_files() { rm -rf /etc/systemd/user/default.target.wants/wmde-rp-usersync.service ln -s /etc/systemd/user/wmde-rp-usersync.service /etc/systemd/user/default.target.wants/wmde-rp-usersync.service - cp wmde-rp-unison.prf /etc + cp wmde-rp-full.prf /etc + cp wmde-rp-config.prf /etc } update_pam() { diff --git a/wmde-rp-usersync-ssh.sh b/wmde-rp-usersync-ssh.sh index c6d0ed3..efea7db 100755 --- a/wmde-rp-usersync-ssh.sh +++ b/wmde-rp-usersync-ssh.sh @@ -8,7 +8,7 @@ USER=`whoami` PAM_USER=$USER PAM_TYPE=open_session #exec >> /tmp/mys-$USER.txt 2>&1 -#set -x +set -x . $PREFIX/wmde-rp-check-pam-user.sh @@ -90,9 +90,12 @@ OTHERARGS="-auto -log -prefer newer -maxerrors 500000" export UNISONLOCALHOSTNAME=`hostname` export UNISON=$HOMEDIR/.wmdesync/unison-$UNISONLOCALHOSTNAME -WMDE_UNISON_PRF=/etc/wmde-rp-unison.prf +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 @@ -101,6 +104,7 @@ if [ $LASTERROR -ne 0 ]; then exit $LASTERROR fi +# Arbeits-Directory auch auf dem SSH-Server erstellen ssh $SSHARGS $NFSSERVER "mkdir -p $UNISON" LASTERROR=$? if [ $LASTERROR -ne 0 ]; then @@ -111,25 +115,23 @@ 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 - - +# 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* @@ -145,66 +147,41 @@ for file in $LOCALDIR/ar*; do 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 -) +# Hilfsfunktion, um ein Unison-Profile zu erstellen generate_profile() { + PROFILE="$UNISON/$1.prf" echo "root = $HOMEDIR" > $PROFILE echo "root = ssh://$NFSSERVER/$HOMEDIR" >> $PROFILE - printf "%s\n" "$1" >> $PROFILE - cat /etc/wmde-rp-unison.prf >> $PROFILE + cat /etc/wmde-rp-$1.prf >> $PROFILE } - generate_profile "$IGNORE_RULES" - unison wmde -sshargs "$SSHARGS" -times -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' - echo "$$" > $SMALLFILESSYNC +generate_profile full +generate_profile config - # Sync all - unison $HOMEDIR ssh://$NFSSERVER/$HOMEDIR -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' - echo "$$" > $FULLSYNC - echo "$$" > $FIRSTSYNC +#cp "$WMDE_UNISON_PRF" "$UNISON/full.prf"; +#cp "$WMDE_UNISON_CFG_PRF" "$UNISON/config.prf"; - # Sync all & repeat - unison $HOMEDIR ssh://$NFSSERVER/$HOMEDIR -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' -repeat watch+60 -fi +# 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 +unison full -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' +echo "$$" > $FULLSYNC +echo "$$" > $FIRSTSYNC + +# Sync all & repeat +unison full -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' -repeat watch+60 full + exit 0