
#!/bin/sh
# File	: backup-user.sh
# By	: MaartenDeBoer.nl, 150103, 210413
# Subject	: Backup user(-dir) & SSH-copy it to remote/destination host
#(0.2)	: Added crontab -l
#(0.3)	: Added; cd {HOME}
#(0.4)	: Added PORT, USER, ls -l
#(0.5),171127	: Changed name to bck-appl.sh
#(0.6),180731	: Mod exclude; exclude ALL *tgz
#(0.7),210413	: Changed from bck-appl.sh
#(0.8),210707	: Mod. & add BACKUPDIR ($HOME/backup) & BCK_NR (daynr / month)
#(0.9),210707	: Add RCFILE
#(0.10),200708	: Added --exclude=*.iso *.zip
#		: Mod .t*gz
#(0.11),240624	: Added --retention <nr>
#set -x
PGM="`basename $0|cut -d\. -f1`"
VER="0.11"
TMP="/tmp/${PGM}.$$"
LOG="${HOME}/log/${PGM}.log"
USER=`whoami`
HOSTNAME=`hostname|cut -d\. -f1`
BACKUPDIR="${HOME}/backup"
BCK_NR=`date +%d`
TARFILE="${HOME}/backup-user_${HOSTNAME}-${USER}-${BCK_NR}.tgz"
RCFILE="${HOME}/etc/${PGM}.rc"
RETENTION_NR=10

DESTHOST="ssh.agrarix.it"
DESTPORT="22"
DESTUSER="backup"

if [ ! -d ${HOME}/log ]; then
  mkdir -p ${HOME}/log
fi

echo "`date` ${PGM} v${VER} started."|tee -a ${LOG}
if [ -f ${RCFILE} ]; then
  echo "  RCFILE (${RCFILE}) found. So, using it."|tee -a ${LOG}
  . ${RCFILE}
fi
if [ -d ${BACKUPDIR} ]; then
  TARFILE="${BACKUPDIR}/backup-user_${HOSTNAME}-${USER}-${BCK_NR}.tgz"
fi

echo "  BACKUPDIR=${BACKUPDIR}"
echo "  BCK_NR=${BCK_NR}"
echo "  DESTHOST=${DESTHOST}"
echo "  DESTPORT=${DESTPORT}"
echo "  DESTUSER=${DESTUSER}"
echo "  TARFILE=${TARFILE}"
echo "  RETENTION_NR=${RETENTION_NR}"

sleep 2

touch ${TMP}

crontab -l > ${HOME}/crontab.asc

cd ${HOME}
tar cvzf ${TARFILE} --exclude=*.t*gz --exclude=*.iso --exclude=*.zip .

if [ "${RETENTION_NR}" != "" ] && [ ${RETENTION_NR} -gt 0 ]; then
  BCK_FILES_CNT=`ls -1t ${BACKUPDIR}/backup-user_${HOSTNAME}-${USER}-*.tgz|wc -l`
  echo "    BCK_FILES_CNT=${BCK_FILES_CNT}|"|tee -a ${LOG}
  BCK_REM_CNT=`expr ${BCK_FILES_CNT} - ${RETENTION_NR}`
  echo "    BCK_REM_CNT=${BCK_REM_CNT}|"|tee -a ${LOG}
  ls -1t ${BACKUPDIR}/backup-user_${HOSTNAME}-${USER}-*.tgz|tail -${BCK_REM_CNT}|while read FNAME
  do
    rm ${FNAME}
    EC=${?}
    echo "    Deleted(${EC}) ${FNAME}"|tee -a ${LOG}
  done  # FNAME
fi  # RETENTION_NR

if [ "${DESTHOST}" != "" ] && [ "${DESTUSER}" != "" ] && [ "${DESTPORT}" != "" ]; then
  echo "  To remote: ${DESTUSER}@${DESTHOST}"|tee -a ${LOG}
  scp -P ${DESTPORT} ${TARFILE} ${DESTUSER}@${DESTHOST}:backup/ 1>> ${LOG} 2>&1
  ssh -p ${DESTPORT} ${DESTUSER}@${DESTHOST} "ls -l backup/" | tee -a ${LOG}
fi

rm ${TMP}
echo "`date` ${PGM} finished."|tee -a ${LOG}
exit 0

