#!/bin/bash
##############################################################################
# Author:	Ahbaid Gaffoor, OCPdba.Net
# File:		backup.sh
# Date:		Sunday 24th NOvember 2002
# Use:		Backup directories and files
#
# Notes:        The CONFIG_FILE allows specification of an optional
#               webserver directory for placing backup logs
##############################################################################


# Configuration files
export CONFIG_PATH=/root/backup_scripts
export CONFIG_FILE=$CONFIG_PATH/config.txt
export CANDIDATE_FILE=$CONFIG_PATH/candidates.txt

# Target Directory
export TIMESTAMP=`date +%Y%m%d-%H%M%S`
export TARGETDIR=`cat $CONFIG_FILE | grep -v ^# | grep ^TARGET | awk -F= '{print $2}'`"/"$TIMESTAMP

# Target Log
export TARGETLOG=$TARGETDIR"/backup.log"

# Webserver logging info.
export WEBSERVER=`cat $CONFIG_FILE | grep -v ^# | grep ^WEBSERVER  | awk -F= '{print $2}'`
export WEBDIR=`cat $CONFIG_FILE | grep -v ^# | grep ^WEBDIR  | awk -F= '{print $2}'`
export WEBLOG=$WEBDIR"/backup-"$TIMESTAMP".txt"

# Create Target Directory if it does not exist
if [ ! -d ${TARGETDIR} ]; then
   mkdir -p $TARGETDIR
fi

# Usage function
function usage {
  echo
  echo "backup.sh"
  echo "  - See: $CANDIDATE_FILE for entries"
  echo
}


# Header function
function header {
   echo "================================================================================="
   echo "Backup Log for `date` on `hostname`"
   echo "================================================================================="
   echo "Config file: $CONFIG_FILE"
   echo "Candidate file: $CANDIDATE_FILE"
   echo "Timestamp is: $TIMESTAMP"

  if test "$WEBSERVER" = "Y" ; then
     echo "Webserver logging: ON"
     echo "Webserver log to $WEBDIR"
  else
     echo "Webserver logging: OFF"
  fi
}

# Footer function
function footer {
   echo
   echo "================================================================================="
   echo "Backup Log ended at `date`"
   echo "================================================================================="
}

# List Candidates function
function list_candidates {
   echo
   echo "================================================================================="
   echo "Backup Candidates:"
   echo "================================================================================="
   cat $CANDIDATE_FILE
   echo "================================================================================="
}

# Directory backup function
function backup_directories {

  echo
  echo "#################################################################################"
  echo "Backing up directories...."
  echo "#################################################################################"
  echo

  for dir in `cat $CANDIDATE_FILE | grep ^d | awk '{print $2}'`
  do
     export SRCDIR=$dir
     export TARFILE=$TARGETDIR"/"`echo $dir | awk -F/ '{print $NF}'`".tar"

     if [ ! -f ${TARFILE} ]; then
        echo
        echo "---------------------------------------------------------------------------------"
        echo "Creating $TARFILE for $dir"
        echo "---------------------------------------------------------------------------------"
        tar -cPvf $TARFILE $dir
     else
        echo "---------------------------------------------------------------------------------"
        echo "Adding to existing $TARFILE for $dir"
        echo "---------------------------------------------------------------------------------"
        tar -rPvf $TARFILE $dir
     fi

  done

}

# File backup function
function backup_files {

  echo
  echo "#################################################################################"
  echo "Backing up files...."
  echo "#################################################################################"
  echo

  export TARFILE=$TARGETDIR"/files.tar"

  echo "---------------------------------------------------------------------------------"
  echo "Creating $TARFILE"
  echo "---------------------------------------------------------------------------------"

  for fn in `cat $CANDIDATE_FILE | grep ^f | awk '{print $2}'`
  do

     if [ ! -f ${TARFILE} ]; then
        tar -cPvf $TARFILE $fn
     else
        tar -rPvf $TARFILE $fn
     fi

  done

}


# Compress tar files
function compress_files {

  echo 
  echo "#################################################################################"
  echo "Compressing tar files...."
  echo "#################################################################################"
  echo

  for tf in `ls $TARGETDIR/*.tar`
  do
     echo "---------------------------------------------------------------------------------"
     echo "Compressing $tf"
     gzip $tf
     ls -al $tf.gz | awk '{print $5" "$6" "$7" "$8" "$9}'
     echo "---------------------------------------------------------------------------------"
     echo
  done

}

#
# Main call to functions
#
if [ $# -ne 0 ]; then
  usage
else

  header 1>>$TARGETLOG 2>>$TARGETLOG
  list_candidates 1>>$TARGETLOG 2>>$TARGETLOG
  backup_files  1>>$TARGETLOG 2>>$TARGETLOG
  backup_directories 1>>$TARGETLOG 2>>$TARGETLOG
  compress_files 1>>$TARGETLOG 2>>$TARGETLOG

  # Optional webserver directory
  if test "$WEBSERVER" = "Y" ; then
     echo 1>>$TARGETLOG 2>>$TARGETLOG
     echo "Copying log to $WEBLOG" 1>>$TARGETLOG 2>>$TARGETLOG
     cp $TARGETLOG $WEBLOG
  fi

  footer 1>>$TARGETLOG 2>>$TARGETLOG

fi

