wmde-rp/wmde-rp-unison-ssh.sh

174 lines
4.0 KiB
Bash
Raw Normal View History

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
2025-05-09 20:07:49 +00:00
. $PREFIX/wmde-rp-common.sh
2025-04-24 19:57:52 +00:00
HOMEDIR=$(getent passwd "$PAM_USER" | cut -d: -f6)
2025-05-15 10:38:04 +00:00
SSHARGS="-o UserKnownHostsFile=$WMDERPDIR/known_hosts -o ControlMaster=auto -o ControlPath=$WMDERPDIR/cm-%r@%h:%p -o ControlPersist=10m"
2025-04-24 19:57:52 +00:00
2025-05-09 20:07:49 +00:00
create_wmderpdir
2025-04-24 19:57:52 +00:00
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
2025-05-09 20:07:49 +00:00
echo $KNOWNHOSTS > "$WMDERPDIR/known_hosts"
2025-04-24 19:57:52 +00:00
LASTERROR=$?
if [ $LASTERROR -ne 0 ]; then
echo $$ > $CONFIGSYNC
echo $$ > $FULLSYNC
exit $LASTERROR
fi
2025-05-09 20:07:49 +00:00
2025-04-24 19:57:52 +00:00
# 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'"
2025-05-01 10:40:53 +00:00
OTHERARGS="-auto -log -prefer newer -maxerrors 500000 -fastcheck true"
2025-04-24 19:57:52 +00:00
export UNISONLOCALHOSTNAME=`hostname`
2025-05-09 20:07:49 +00:00
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
2025-04-30 06:32:19 +00:00
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-05-09 20:07:49 +00:00
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-05-12 21:17:11 +00:00
# Lokal und remote eine Liste aller Unison-Archive erstellen
REMOTEDIR="$UNISON"
LOCALDIR="$UNISON"
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
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-05-09 20:07:49 +00:00
echo "$2" >> $PROFILE
2025-04-24 19:57:52 +00:00
}
2025-05-09 20:07:49 +00:00
generate_profile config "$UNISON_CONFIG_DIRS"
generate_profile full "$UNISON_FULL_DIRS"
generate_profile perm "$UNISON_PERM_DIRS"
2025-04-24 19:57:52 +00:00
2025-04-30 06:32:19 +00:00
2025-05-09 20:07:49 +00:00
yes | unison config -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch #-ignore 'Path .wmde-rp'
2025-04-30 06:32:19 +00:00
2025-05-01 10:40:53 +00:00
echo "PUT PID INTO CONFIG_SYNC"
echo "$$" > $CONFIGSYNC
2025-04-30 06:32:19 +00:00
2025-05-01 10:40:53 +00:00
echo "DONE PUT PID INTO CONFIG_SYNC"
2025-04-30 06:32:19 +00:00
# Sync all
2025-05-09 20:07:49 +00:00
yes | unison full -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch #-ignore 'Path $WMDERPDIRNAME'
2025-04-30 06:32:19 +00:00
echo "$$" > $FULLSYNC
echo "$$" > $FIRSTSYNC
2025-04-24 19:57:52 +00:00
2025-04-30 06:32:19 +00:00
# Sync all & repeat
2025-05-09 20:07:49 +00:00
yes | unison perm -times -sshargs "$SSHARGS" -servercmd "$SERVERCMD" $OTHERARGS -batch -repeat watch+60 #-ignore 'Path $WMDERPDIRNAME' -repeat watch+60
2025-04-24 19:57:52 +00:00
exit 0