#!/bin/sh
#set -x
#
# Run on my old G4 Powerbook to make TimeMachine compatible backups
# But should be usable on almost any Unix machine with minimal tuning.
#
# Note: use quotes throughout as filenames may (do) include spaces on Macs.
# Note: drive (ON OS X) should be mounted with uids enabled..
#       sudo /usr/sbin/vsdbutil -a /Volumes/${VOLUME_NAME}
# Note: entries can also be put in /etc/fstab to affect mounting but
# in OS X 10.5 or later one should use 'vifs'.
#

TARGET_VOLUME="MyBook2-1T"
ROOT_VOLUME="Macintosh HD"
APPDIR="Backups.backupdb"
ORIGINALBASE="/"
EXCLUDEFILE="/Volumes/${TARGET_VOLUME}/exclude-from-backup"

BACKUPBASE="/Volumes/${TARGET_VOLUME}"
BACKUPDIR="${BACKUPBASE}/${APPDIR}"
BACKUPHOSTDIR="${BACKUPDIR}/`hostname -s`"

BACKUPFILENAME=`date +"%Y-%m-%d-%H%M%S"`
LATESTLINK="${BACKUPHOSTDIR}/Latest"
BACKUPNAME="${BACKUPHOSTDIR}/${BACKUPFILENAME}"
TEMPNAME="${BACKUPNAME}.inprogress"
CREATENAME="${TEMPNAME}/${ROOT_VOLUME}"

if [ ! -d "/Volumes/${TARGET_VOLUME}" ]
then
    echo "${TARGET_VOLUME} is not currently attached. aborting run"
    exit 1
fi

if [ -d "${BACKUPNAME}" ]
then
  echo "ERROR: Backup ${BACKUPNAME} already exists. Exiting."
  exit 1
fi

mkdir -p "${CREATENAME}"

if [ -e "${LATESTLINK}" ]
then
  rsync -xaHPR "--exclude-from=${EXCLUDEFILE}" "--link-dest=../../Latest/${ROOT_VOLUME}/" "${ORIGINALBASE}" "${CREATENAME}"
else
  rsync -xaHPR "--exclude-from=${EXCLUDEFILE}" "${ORIGINALBASE}" "${CREATENAME}"
fi

if  [ $? = 0 ]
then
    touch "${TEMPNAME}/.com.apple.TMCheckpoint"
    mv "${TEMPNAME}" "${BACKUPNAME}"
    rm "${LATESTLINK}"
    ln -sf "${BACKUPFILENAME}" "${LATESTLINK}"
else
    echo " Backup  to ${BACKUPNAME} FAILED"
    mv "${TEMPNAME}" "${BACKUPNAME}.FAILED"
    exit 1
fi


