#!/bin/sh
#
# script to backup this system to lapback1 using ssh transport
# 21.08.12 v0.1, andy thomas
# updated: 23.10.16

SERVICE="lapback" 
SERVER="lapback1" 
BACKUP_SRVR="${SERVER}.ma.ic.ac.uk"
LAP_HOME_DIR="MY_LAPTOP_HOME_DIRECTORY"
COLL_USERNAME="MY_COLLEGE_USERNAME"
RSYNC="/usr/bin/rsync"
CTRL_DIR="${HOME}/.laptop-backup"
MODE_CFG="${CTRL_DIR}/${SERVICE}-backup-mode"
LOG="${CTRL_DIR}/${SERVICE}-backup.log"
SYNC_LOCK="${CTRL_DIR}/sync2${SERVICE}-in-progress.lock"
MEM_CARD=0

backup()
{
    echo "backup mode selected" >> $LOG
    echo "Transferring new and changed files to backup..." >> $LOG
    echo "Transferring new and changed files to backup..."
    $RSYNC -av $LAP_HOME_DIR -e ssh ${COLL_USERNAME}@${BACKUP_SRVR}:laptop_backup/home
}

sync()
{
    echo "sync mode selected" >> $LOG
    echo "Synchronising backup with laptop..." >> $LOG
    echo "Synchronising backup with laptop..."
    $RSYNC -av --delete $LAP_HOME_DIR -e ssh ${COLL_USERNAME}@${BACKUP_SRVR}:laptop_backup/home
}

test -d $CTRL_DIR || mkdir -p $CTRL_DIR

echo "-----------------------------------------------------------" >> $LOG
echo "Sync of laptop to ${SERVICE} started on `/bin/date`" >> $LOG

# check if a backup/sync is already in progress - if not, do it now

if [ ! -f $SYNC_LOCK ]; then
	touch $SYNC_LOCK

# check if the backup server is actually reachable, quit if not

	echo "checking if ${SERVER} is reachable..." >> $LOG
	ping -c 5 $BACKUP_SRVR > /dev/null
   	if [ ! $? = 0 ]; then
		echo "Cannot reach server, aborting this backup" >> $LOG
		echo "Cannot reach server, aborting this backup"
		exit 1
	fi

# create the laptop_backup folder on the backup server if necessary

	ssh ${COLL_USERNAME}@${BACKUP_SRVR} 'test -d laptop_backup || mkdir laptop_backup'

# has the backup/sync mode been given by the user after the command?

	if [ $# -gt 1 ]; then
        echo ""
		echo "Usage: sync2lapback sync   # synchronises your backup with your laptop"
		echo "   or  sync2lapback backup # backs up your laptop (no deletions from backup)"
		echo "   or  sync2lapback        # uses your saved backup mode (defaults to"
        echo "                           # safe backup' mode if none)"
        echo ""
	elif [ $# -eq 1 ]; then
		if [ $1 == "backup" ]; then
			backup
		elif [ $1 == "sync" ]; then
			sync
		else
			echo "option '$1' is not valid - please use 'backup' or 'sync'"
		fi
	else

# if no mode given with command, check if there's a mode config file

	    if [ -f $MODE_CFG ]; then
            MODE=`cat $MODE_CFG`
		    if [ $MODE == "backup" ]; then
                backup
	        elif [ $MODE == "sync" ]; then
			    sync
		    else
                echo "option '$MODE' in your mode configuration file is not valid" 
		        echo "defaulting to backup mode" >> $LOG
		        echo "defaulting to backup mode"
                backup
            fi
        else    

# otherwise default to backup mode (safer) if no mode config file is found

            echo "No mode configuration file found" 
		    echo "defaulting to backup mode" >> $LOG
		    echo "defaulting to backup mode"
            backup
	    fi
    fi
    rm $SYNC_LOCK
    echo "Update of laptop completed at `/bin/date`" >> $LOG
else 
    echo "Previous backup is still running, aborting this run at `/bin/date`" >> $LOG
    echo -e "-----------------------------------------------------------\n" >> $LOG
fi

