#!/bin/sh
# backup_to_external_hdd.sh.
# This script is licensed under the General Public License ver. 2.0
# See http://www.gnu.org/licenses/gnu.txt for details.
# For bugs and suggestions mail to: hipo@pc-freak.net
# Author Georgi Georgiev
# https://www.pc-freak.net

################## Configure Here #################

# IP of the backup server where archives shall drop.
BACKUP_SERV_IP="207.234.147.191";

# path to the tar binary.
TAR_BIN=/bin/tar;

# tar options.
TAR_OPTS='-czvf';

# remote backup dir location.
REMOTE_BACKUP_DIR=/backups/backups;

# path to the tsh client binary.
#TSH_CLIENT_BIN=/usr/sbin/tsh-client;

# mode ( interactive|non-interactive, 1|0 )
INTERACTIVE=0;

# directory locations to be into the archive
BACKUP_LOCATION=/;
#BACKUP_LOCATION[1]=/home/customusers/sclangenthalch;
##BACKUP_LOCATION[2]=/home/customusers/bulgariatravelorg;
####################################################

BACKUP_DIR='/backups/backups';
LOG='/var/log/backup.log';
array_length=$((${#BACKUP_LOCATION[*]} - 1));

# If you edit something here you risk to make the script a crap.
TSH_CLIENT="$TSH_CLIENT_BIN $BACKUP_SERV_IP";

BACKUP_FILE_NAME=`date +%k_%d_%m_%Y|sed -e 's/^ *//'`.tar.gz;


chk_variables_def () {

if [ -z "$BACKUP_SERV_IP" ] || [  -z "$TAR_BIN" ] ||\
[ -z "$TAR_OPTS" ] ||\
[ -z "$REMOTE_BACKUP_DIR" ] ||\
[ -z "$TSH_CLIENT_BIN" ] ||\
[ -z "$INTERACTIVE" ]; then
echo "Missing Variable !!! Fatal Error occured !" >> /var/log/site_backups-fatal.log;
exit 1;
fi

}

construct_backup_names () {

array_length=$((${#BACKUP_LOCATION[*]} - 1));
for F in $(seq 0 ${array_length}); do

SITE_NAME[$F]=${BACKUP_LOCATION[$F]}-${BACKUP_FILE_NAME};

done

}

# create backups func.
create_backup () {

if [ $INTERACTIVE -ne 0 ]; then

echo "Creating site backups and archiving it's content ...";

fi
# check whether bakcups is mounted
backup_m=$(mount|grep -i backups|wc -l);
	if [ "$backup_m" -eq "1" ]; then
#for L in $(seq 0 ${array_length}); do

## nice -n 10 $TAR_BIN $TAR_OPTS ${SITE_NAME[$L]} ${BACKUP_LOCATION[$L]} &>/dev/null;
echo "Backup Log STARTED: $(date "+%k:%d:%m %Y")" >> $LOG 
	for i in $(ls -1d /*); do
i=$(echo $i |grep -v backups);
echo $i;
		time timeout 86400 nice -n 10 rsync -ahPHAXxv --log-file=$LOG --exclude={"/dev/*","/proc/*","/sys/*","/run/*","/mnt/sda1/*","/media/*","/backups/*","/backups/backups/*","/backups/backups/"} --exclude 'backups' "$i"/ "$BACKUP_DIR""$i" ;
#echo "Running command :### time timeout 86400 screen -d -m nice -n 10 rsync -ahPHAXxv --info=COPY2,DEL2,NAME2,BACKUP2,REMOVE2,SKIP2 --log-file=$LOG --exclude={"/dev/*","/proc/*","/sys/*","/run/*","/mnt/sda1/*","/media/*","/backups/*"} "$i"/ "$BACKUP_DIR""$i"/";
		sleep 1;
	done
#	nice -n 10 rsync -azvp  --info=COPY2,DEL2,NAME2,BACKUP2,REMOVE2,SKIP2 /usr/ --exclude={"/dev/*","/proc/*","/sys/*","/run/*","/mnt/sda1/*","/media/*","/backups/*"} $BACKUP_LOCATION/usr/ --log-file=/var/log/backup.log;

#done
	else 
		echo "$(date "+%k:%d:%m %Y")/backups not mounted" >> $LOG.err
	fi
echo "Backup Log ENDED: $(date "+%k:%d:%m %Y")" >> $LOG 

}

chk_rem_backup_dir_existence () {
if [ $INTERACTIVE -ne 0 ]; then

echo "Checking for remote: $REMOTE_BACKUP_DIR existence ...";

fi

$TSH_CLIENT `echo "if [ ! -d $REMOTE_BACKUP_DIR ]; then \
mkdir -p $REMOTE_BACKUP_DIR\
fi\""`;

}


# upload .tar.gz archives func. 
upload_backup () {

for i in $(seq 0 ${array_length}); do
if [ $INTERACTIVE -ne 0 ]; then

echo "Putting The backupped archives into remote: $REMOTE_BACKUP_DIR ...";


EXEC_CMD[$i]="put ${SITE_NAME[$i]} ${REMOTE_BACKUP_DIR}";
echo "${TSH_CLIENT} ${EXEC_CMD[$i]}";
echo "rm -f ${SITE_NAME[$i]}";
${TSH_CLIENT} ${EXEC_CMD[$i]};
rm -f ${SITE_NAME[$i]};

else

EXEC_CMD[$i]="put ${SITE_NAME[$i]} ${REMOTE_BACKUP_DIR}";
$TSH_CLIENT ${EXEC_CMD[$i]} &>/dev/null;
rm -f ${SITE_NAME[$i]};

fi

done

}

# Main function.
main () {

#chk_variables_def;
#construct_backup_names;
create_backup;
#chk_rem_backup_dir_existence;
#upload_backup;
}

main;
