#!/bin/sh
# Automated Backup Script For TundraWare Inc. Servers
# Copyright (c) 2004-2013, TundraWare Inc., Des Plaines, IL
# All Rights Reserved.
# For Updates See: http://www.tundraware.com/Software/tbku
# $Id: tbku,v 1.118 2014/10/22 22:17:55 tundra Exp $
#####
# Things User May Want To Change
#####
###
# Program Locations
###
# Try to figure out where things are on this particular
# system. If you can't, default to FreeBSD settings.
DATE=`which date`
HOSTNAME=`which hostname`
LS=`which ls`
SED=`which sed`
TAR=`which tar`
TOUCH=`which touch`
UNAME=`which uname`
DATE=${DATE:-"/bin/date"}
HOSTNAME=${HOSTNAME:-"/bin/hostname"}
LS=${LS:-"/bin/ls"}
SED=${SED:-"/usr/bin/sed"}
TAR=${TAR:-"/usr/bin/tar"}
TOUCH=${TOUCH:-"/usr/bin/touch"}
UNAME=${UNAME:-"/usr/bin/uname"}
###
# Default Directories
###
# You can override with corresponding environment
# variable or change the default value here.
BKUDIR=${TBKUDIR:-"/bku"} # Where to write the backup files
FILESETDIR=${TBKUSETS:-"$HOME/tbku"} # Where to find fileset files
###
# Tape Device
###
TAPEDEV=${TBKUTAPE:-"/dev/sa0"} # Default to FreeBSD SCSI tape
###
# File Naming
###
DATETIME=`${DATE} "+%Y%m%d"` # Datestamp used to uniquely ID backups
MACHINE=`${HOSTNAME} -f`- # FQDN of the machine we're on
OSTYPE=`${UNAME} -s`- # Operating System Type
OSREV=`${UNAME} -r`- # Operating System Revision Level
HWTYPE=`${UNAME} -p` # Processor Type
BKUNAME=${MACHINE}${OSTYPE}${OSREV}${HWTYPE} # Backup base name
BKUNAME=${TBKUNAME:-$BKUNAME} # But the user can override it
####
# Automatic Deletion Of Previous Backups
####
# Use this with caution!
BKUDEL=${TBKUDEL:-"NO"} # Must be "YES" for autodelete
############## Nothing Below Should Need To Be Changed #############
ALLSETS="allsets" # Special name to force every backup set to be done
COMMON="auto" # Common name for automated backups
#####
# Setup
#####
umask 077 # Make sure only owner can read backups
mkdir -p ${BKUDIR} # Make sure the backup directory exists
#####
# Figure Out Which Backup Sets To Do
#####
cd $FILESETDIR
if [ $# -ne 0 ]
then
if [ _$1 = _$ALLSETS ]
then
LIST=`${LS} * 2>/dev/null`
else
for arg in $*
do
a=`${LS} *${arg} 2>/dev/null`
LIST=$LIST" $a"
done
fi
else
LIST=`${LS} $COMMON* 2>/dev/null`
fi
#####
# Do The Actual Backups, And Leave Indication Of Start/Stop Times For Each Backup Set
#####
# If nothing matches / there is nothing to do, tell the user
LST=`echo $LIST | ${SED} "s/\ //"` # Get rid of spaces from concatenation above
if [ "_${LST}" = "_" ]
then
echo "tbku: Nothing to do! Exiting ..."
exit
fi
# Otherwise process each fileset
for x in $LIST
do
s=`echo $x | ${SED} "s/.*\.//"` # Get the suffix
BASENAME=$BKUNAME-$s
STAMPEDNAME=${DATETIME}-${BASENAME}
#####
# Distinguish Between Tape And File Backups
#####
if [ "_${s}" = "_tape" ]
then
FULLNAME=$TAPEDEV
else
FULLNAME=$BKUDIR/$STAMPEDNAME.tar.gz
fi
# Optionally, get rid of previous backups of this fileset
if [ _${TBKUDEL} = "_YES" ]
then
rm $BKUDIR/.$BASENAME* $BKUDIR/$BASENAME*
fi
echo "Now Doing Backup Set: $s"
${TOUCH} $BKUDIR/.$STAMPEDNAME-begin
${TAR} -cvzT $FILESETDIR/$x -f $FULLNAME >$BKUDIR/$STAMPEDNAME.log 2>&1
${TOUCH} $BKUDIR/.$STAMPEDNAME-end
done