-# Most everything below here is run in a subshell for which all output is
-# piped through `tee' to the logfile. Doing this, instead of having
-# multiple pipelines all over the place, is cleaner and allows access to
-# the exit value from various commands more easily.
-(
- # Caveat: Some version of `mt' require `-t', not `-f'.
- mt -f "${TAPE_FILE}" rewind
- rm -f "${VOLNO_FILE}"
-
- set - "${BACKUP_DIRS}"
- while [ $# -ne 0 ] ; do
- date="`date`"
- remotehost="`echo \"${1}\" | sed -e 's/:.*$//'`"
- fs="`echo \"${1}\" | sed -e 's/^.*://'`"
- fsname="`echo \"${1}\" | sed -e 's/\//:/g'`"
-
- # This filename must be absolute; it is opened on the machine that runs tar.
- TAR_PART2="--listed=/etc/tar-backup/temp.level-1"
- TAR_PART3="--label='level 1 backup of ${fs} on ${remotehost} at ${date}' -C ${fs} ."
-
- echo "Backing up ${1} at ${date}"
- echo "Last full dump on this filesystem:"
-
- if [ "z${remotehost}" != "z${localhost}" ] ; then
- rsh "${remotehost}" "ls -l /etc/tar-backup/${fsname}.level-0; \
- cp /etc/tar-backup/${fsname}.level-0 /etc/tar-backup/temp.level-1"
- else
- ls -l "/etc/tar-backup/${fsname}.level-0"
- cp "/etc/tar-backup/${fsname}.level-0" /etc/tar-backup/temp.level-1
- fi
-
- # Actually back things up.
-
- if [ "z${remotehost}" != "z${localhost}" ] ; then
- rsh "${remotehost}" ${TAR_PART1} -f "${localhost}:${TAPE_FILE}" ${TAR_PART2} ${TAR_PART3}
- else
- # Using `sh -c exec' causes nested quoting and shell substitution
- # to be handled here in the same way rsh handles it.
- sh -c "exec ${TAR_PART1} -f \"${TAPE_FILE}\" ${TAR_PART2} ${TAR_PART3}"
- fi
-
- # `rsh' doesn't exit with the exit status of the remote command. What
- # stupid lossage. TODO: think of a reliable workaround.
- if [ $? -ne 0 ] ; then
- echo "Backup of ${1} failed."
- # I'm assuming that the tar will have written an empty
- # file to the tape, otherwise I should do a cat here.
- else
- if [ "z${localhost}" != "z${remotehost}" ] ; then
- rsh "${remotehost}" mv -f /etc/tar-backup/temp.level-1 "/etc/tar-backup/${fsname}.level-1"
- else
- mv -f /etc/tar-backup/temp.level-1 "/etc/tar-backup/${fsname}.level-1"
- fi
- fi
- ${TAPE_STATUS}
- sleep 60
- shift
- done
-
- # Dump any individual files requested.
-
- if [ "x${BACKUP_FILES}" != "x" ] ; then
- date="`date`"
- TAR_PART2="--listed=/etc/tar-backup/temp.level-1"
- TAR_PART3="--label='Incremental backup of miscellaneous files at ${date}'"
-
- echo "Backing up miscellaneous files at ${date}"
- echo "Last full dump of these files:"
- ls -l /etc/tar-backup/misc.level-0
-
- rm -f /etc/tar-backup/temp.level-1
- cp /etc/tar-backup/misc.level-0 /etc/tar-backup/temp.level-1
-
- # Using `sh -c exec' causes nested quoting and shell substitution
- # to be handled here in the same way rsh handles it.
- sh -c "exec ${TAR_PART1} -f \"${TAPE_FILE}\" ${TAR_PART2} ${TAR_PART3} ${BACKUP_FILES}"
-
- if [ $? -ne 0 ] ; then
- echo "Backup of miscellaneous files failed." 1>&2
- # I'm assuming that the tar will have written an empty
- # file to the tape, otherwise I should do a cat here.
- else
- mv -f /etc/tar-backup/temp.level-1 /etc/tar-backup/misc.level-1
- fi
- ${TAPE_STATUS}
- else
- echo "No miscellaneous files specified"
- fi