#!/bin/sh

CLIENT=pcservices
PART="/data / /xen /egg /support /bashful /sleepy /data2"
#PART="/data /data2 / /egg /chicken /bashful /sleepy"
#PART="/data/netlogon /data/apache"
EMAIL="sysadmin@pcservices.co.za"

JLOG=/tmp/backuplog.txt
ELOG=/tmp/backuperr.txt
EMLOG=/tmp/emaillog.txt
STLOG=/tmp/statuslog.txt
EXCODE=/tmp/exitcode.txt

# Start log files
echo -e "Subject: $CLIENT backup result\n" > $EMLOG
echo -e "---Start of tape status--------------------\n" | tee $JLOG > $ELOG

# Check tape status
# Output to JLOG and ELOG
mt -f /dev/nst0 status | tee -a $JLOG > $STLOG
ONLINE=0
DR_OPEN=0
WR_PROT=0
if [ `grep -c ONLINE $STLOG` == 1 ] ; then ONLINE=1 ; fi
if [ `grep -c DR_OPEN $STLOG` == 1 ] ; then DR_OPEN=1 ; fi
if [ `grep -c WR_PROT $STLOG` == 1 ] ; then WR_PROT=1 ; fi
if [ $ONLINE == 1 ] ; then echo -e "Tape drive ready\n" >> $ELOG ; fi
if [ $DR_OPEN == 1 ] ; then echo -e "No tape in drive\n" >> $ELOG ; fi
if [ $WR_PROT == 1 ] ; then echo -e "Tape is write protected\n" >> $ELOG ; fi
echo -e "---End of tape status----------------------\n" | tee -a $JLOG >> $ELOG
sleep 10s

# Rewind tape
# Output to JLOG
mt -f /dev/nst0 rewind >> $JLOG 2>&1
echo -e "---Rewound--------------------------------\n" >> $JLOG
sleep 10s

# Turn on compression
# Output to JLOG
mt -f /dev/nst0 compression 1 >> $JLOG 2>&1
echo -e "---Compression enabled--------------------\n" >> $JLOG
sleep 10s

# Backup all partitions
for CURPART in $PART
do
  echo -e "---$CURPART backup starting--------------`$DATE`\n" | tee -a $JLOG >> $ELOG
  { tar -cvlRf /dev/nst0 --exclude-from=/usr/local/lib/backup-exclude --totals $CURPART ; exitcode=$? ; echo $exitcode > $EXCODE ; } 2>&1 >> $JLOG | tee -a $JLOG >> $ELOG

  # Backup success/failure message
  exitcode=`cat $EXCODE`
  if [ $exitcode != 0 ]
  then
    echo -e "---$CURPART backup fail ($exitcode) ------`/usr/bin/date`\n" | tee -a $JLOG >> $EMLOG
  else
    echo -e "---$CURPART backup success ($exitcode) ---`/usr/bin/date`\n" | tee -a $JLOG >> $EMLOG
  fi

  sleep 20s
  echo -e "---$CURPART backup end------------------\n" | tee -a $JLOG >> $ELOG
done

# Rewind tape again
# Output to JLOG
mt -f /dev/nst0 rewind >> $JLOG 2>&1
echo -e "---Rewound again-------------------------\n" >> $JLOG
sleep 10s

# Verify all partitions
FSF=0
for CURPART in $PART
do
  
  # Forward to next saveset (if not first verify)
  # Output to $JLOG
  if [ $FSF == 1 ]
  then
    mt -f /dev/nst0 fsf 1 >> $JLOG 2>&1
    echo -e "---Forwarded one set--------------------\n" >> $JLOG
    sleep 10s
  fi
  FSF=1

  echo -e "---$CURPART verify starting--------------`/usr/bin/date`\n" | tee -a $JLOG >> $ELOG
  { tar -tvRf /dev/nst0 ; exitcode=$? ; echo $exitcode > $EXCODE ; } 2>&1 >> $JLOG | tee -a $JLOG >> $ELOG

  # Verify success/failure message
  exitcode=`cat $EXCODE`
  if [ $exitcode != 0 ]
  then
    echo -e "---$CURPART verify fail ($exitcode) ------`/usr/bin/date`\n" | tee -a $JLOG >> $EMLOG
  else
    echo -e "---$CURPART verify success ($exitcode) ---`/usr/bin/date`\n" | tee -a $JLOG >> $EMLOG
  fi

  sleep 20s
  echo -e "---$CURPART verify end------------------\n" | tee -a $JLOG >> $ELOG
  
done

# Send error or success mail
echo -e "===Error log (if any)================================" >> $EMLOG
cat $ELOG  | \
    grep -v "Removing leading" | \
    grep -v "different filesystem" >> $EMLOG
for ADDRESS in $EMAIL
do
  cat $EMLOG | sendmail $ADDRESS >> $JLOG 2>&1
done

echo -e "---Mail sent--------------------------------\n" >> $JLOG

# Eject tape
# Output to $JLOG
mt -f /dev/nst0 offline >> $JLOG 2>&1
echo -e "---Ejected tape-----------------------------\n" >> $JLOG
sleep 10s

# Delete old log file and zip this one
rm $JLOG.gz > /dev/null 2>&1
gzip $JLOG

