2025-04-24 19:57:52 +00:00
|
|
|
#!/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
|
2025-04-30 06:32:19 +00:00
|
|
|
set -x
|
2025-04-24 19:57:52 +00:00
|
|
|
|
|
|
|
. $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
|
2025-04-30 06:32:19 +00:00
|
|
|
WMDE_UNISON_PRF=/etc/wmde-rp-full.prf
|
|
|
|
WMDE_UNISON_CFG_PRF=/etc/wmde-rp-config.prf
|
|
|
|
|
2025-04-24 19:57:52 +00:00
|
|
|
SERVERCMD="UNISONLOCALHOSTNAME=$UNISONLOCALHOSTNAME UNISON=$UNISON unison"
|
|
|
|
|
2025-04-30 06:32:19 +00:00
|
|
|
# Arbeits-Directory für Unison erstellen
|
2025-04-24 19:57:52 +00:00
|
|
|
mkdir -p $UNISON
|
|
|
|
LASTERROR=$?
|
|
|
|
if [ $LASTERROR -ne 0 ]; then
|
|
|
|
echo $$ > $CONFIGSYNC
|
|
|
|
echo $$ > $FULLSYNC
|
|
|
|
exit $LASTERROR
|
|
|
|
fi
|
|
|
|
|
2025-04-30 06:32:19 +00:00
|
|
|
# Arbeits-Directory auch auf dem SSH-Server erstellen
|
2025-04-24 19:57:52 +00:00
|
|
|
ssh $SSHARGS $NFSSERVER "mkdir -p $UNISON"
|
|
|
|
LASTERROR=$?
|
|
|
|
if [ $LASTERROR -ne 0 ]; then
|
|
|
|
echo $$ > $CONFIGSYNC
|
|
|
|
echo $$ > $FULLSYNC
|
|
|
|
exit $LASTERROR
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-04-30 06:32:19 +00:00
|
|
|
# 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*
|
|
|
|
|
2025-04-24 19:57:52 +00:00
|
|
|
|
2025-04-30 06:32:19 +00:00
|
|
|
# Lokal und remote eine Liste aller Unison-Archive erstellen
|
2025-04-24 19:57:52 +00:00
|
|
|
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)
|
|
|
|
|
|
|
|
|
2025-04-30 06:32:19 +00:00
|
|
|
# Archive löschen, wenn sie sich lokal und remote unterscheiden
|
2025-04-24 19:57:52 +00:00
|
|
|
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
|
|
|
|
|
2025-04-30 06:32:19 +00:00
|
|
|
# Hilfsfunktion, um ein Unison-Profile zu erstellen
|
2025-04-24 19:57:52 +00:00
|
|
|
generate_profile() {
|
2025-04-30 06:32:19 +00:00
|
|
|
PROFILE="$UNISON/$1.prf"
|
2025-04-24 19:57:52 +00:00
|
|
|
echo "root = $HOMEDIR" > $PROFILE
|
|
|
|
echo "root = ssh://$NFSSERVER/$HOMEDIR" >> $PROFILE
|
2025-04-30 06:32:19 +00:00
|
|
|
cat /etc/wmde-rp-$1.prf >> $PROFILE
|
2025-04-24 19:57:52 +00:00
|
|
|
}
|
|
|
|
|
2025-04-30 06:32:19 +00:00
|
|
|
generate_profile full
|
|
|
|
generate_profile config
|
2025-04-24 19:57:52 +00:00
|
|
|
|
2025-04-30 06:32:19 +00:00
|
|
|
#cp "$WMDE_UNISON_PRF" "$UNISON/full.prf";
|
|
|
|
#cp "$WMDE_UNISON_CFG_PRF" "$UNISON/config.prf";
|
2025-04-24 19:57:52 +00:00
|
|
|
|
|
|
|
|
2025-04-30 06:32:19 +00:00
|
|
|
# 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
|
2025-04-24 19:57:52 +00:00
|
|
|
|
2025-04-30 06:32:19 +00:00
|
|
|
# Sync all & repeat
|
|
|
|
unison full -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -ignore 'Path .wmdesync' -repeat watch+60 full
|
2025-04-24 19:57:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
exit 0
|
|
|
|
|