wmde-rp/wmde-rp-unison.nfs.sh

110 lines
3.2 KiB
Bash
Executable File

#!/bin/sh
. /etc/wmde-rp.conf
set -x
USER=`whoami`
PAM_USER=$USER
PAM_TYPE=open_session
. $PREFIX/wmde-rp-check-pam-user.sh
HOMEDIR=$(getent passwd "$USER" | cut -d: -f6)
IGNORES="-ignore 'Path .wmdesync'"
OTHERARGS="-auto -log -prefer newer -fastcheck true -maxerrors 5000"
export UNISON=$HOMEDIR/.wmdesync/unison
export UNISONLOCALHOSTNAME=`hostname`
WMDE_UNISON_PRF=/etc/wmde-rp-unison.prf
if [ -e "$WMDE_UNISON_PRF" ]; then cp "$WMDE_UNISON_PRF" "$UNISON/default.prf"; fi
eval unison $HOMEDIR $NFSHOMES/$USER $OTHERARGS -repeat watch+60 -watch -batch $IGNORES
echo "$HOMEDIR"
exit 0
exit 0
echo "Login as $PAM_USER with type $PAM_TYPE" >> /tmp/login.txt
export NFSSERVER="nfsserver.lan.gs.wikimedia.de"
export HOMEDIR=$(getent passwd "$PAM_USER" | cut -d: -f6)
export OTHERARGS_CONF="-auto -log -prefer newer "
export PIDFILE="$HOMEDIR/.wmdesync/unison.pid"
GROUP="wmde"
if id -nG "$PAM_USER" | grep -qw "$GROUP"; then
echo "$PAM_USER is member of $GROUP." >> /tmp/login.txt
else
echo "$PAM_USER is not member of $GROUP." >> /tmp/login.txt
exit 0
fi
echo "Action begins" >> /tmp/login.txt
echo "Homedir for $PAM_USER is $HOMEDIR." >> /tmp/login.txt
generate_known_hosts() {
echo "SUBFUNC $HOMEDIR, $NFSSERVER" >> /tmp/login.txt
ipa host-show nfsserver.lan.gs.wikimedia.de --all | grep "SSH public key:" | sed 's/.*SSH public key: //;s/, /\n/g' | sed "s/^\([^[:space:]]\+\s\+.*\)$/$NFSSERVER \1/" > "$HOMEDIR/.wmdesync/known_hosts"
}
oioioioisync_config() {
rm -rf $HOMEDIR/.unison
unison $HOMEDIR/.config ssh://$NFSSERVER/$HOMEDIR/.config -sshargs "$SSHARGS" $OTHERARGS_CONF -batch # & echo $! > $PIDFILE
mkdir -p $HOMEDIR/.local/share/backgrounds
unison $HOMEDIR/.local/share/backgrounds ssh://$NFSSERVER/$HOMEDIR/.local/share/backgrounds -sshargs "$SSHARGS" $OTHERARGS_CONF -batch # & echo $! > $PIDFILE
}
sync_all() {
#Prüfen, ob PID-Datei existiert
if -f "$PIDFILE" ; then
PID=$(cat "$PIDFILE")
# Prüfen, ob Prozess läuft und Unison ist
if ps -p "$PID" > /dev/null 2>&1; then
# Ist es auch wirklich ein Unison-Prozess?
if ps -p "$PID" -o comm= | grep -q "^unison$"; then
echo "Unison läuft bereits mit PID $PID."
exit 0
else
echo "PID $PID gehört nicht zu Unison. Ignoriere PID-Datei."
fi
else
echo "PID $PID läuft nicht mehr. Starte Unison neu."
fi
fi
unison $HOMEDIR ssh://$NFSSERVER/$HOMEDIR -sshargs "$SSHARGS" $OTHERARGS -batch -ignore 'Path .unison' -ignore 'Path .cache' & echo $! > $PIDFILE
}
sudo -E -u $PAM_USER mkdir -p $HOMEDIR/.wmdesync
sudo -E -u $PAM_USER bash -c "$(declare -f generate_known_hosts); generate_known_hosts" 2>>/tmp/login.txt
sudo -E -u $PAM_USER bash -c "$(declare -f sync_config); sync_config" 2>>/tmp/login.txt
sudo -E -u $PAM_USER bash -c "$(declare -f sync_all); sync_all" 2>>/tmp/login.txt
#sudo -u "$PAM_USER" bash -c "NFSSERVER='$NFSSERVER' HOMEDIR='$HOMEDIR' $(declare -f generate_known_hosts); generate_known_hosts" 2>>/tmp/login.txt
#sudo -u "$PAM_USER" bash -c "NFSSERVER='$NFSSERVER' HOMEDIR='$HOMEDIR' SSHARGS='$SSHARGS' OTHERARGS='$OTHERARGS_CONF'; $(declare -f sync_config); sync_config" 2>>/tmp/login.txt
echo "RESULT $?" >> /tmp/login.txt
echo "Done" >> /tmp/login.txt