- #!/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