wmde-rp/wmde-rp-usersync-ssh.sh

211 lines
4.9 KiB
Bash
Executable File

#!/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