#! /bin/sh # Make backups. # Copyright 2004-2006, 2013, 2019 Free Software Foundation # This file is part of GNU tar. # GNU tar is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # GNU tar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Load library routines SYSCONFDIR=${SYSCONFDIR-@sysconfdir@} . ${LIBDIR-@libexecdir@}/backup.sh DUMP_LEVEL=0 TIME= NOW=`now` usage() { cat - <&2 "$0: tape initialization failed" exit 1 fi rm -f "${VOLNO_FILE}" message 1 "processing backup directories" set - ${BACKUP_DIRS} while [ $# -ne 0 ] ; do date="`date`" fs="`echo \"${1}\" | sed -e 's/^.*://'`" fs=`root_fs $fs` fsname="`echo \"${1}\" | sed -e 's/\//:/g'`" remotehost="`expr \"${1}\" : '\([^/][^/]*\):.*'`" if [ -z "$remotehost" ]; then remotehost=$localhost fi echo "Backing up ${1} at ${date}" message 10 "fs=$fs" message 10 "fsname=$fsname" message 10 "remotehost=$remotehost" if [ $DUMP_LEVEL -eq 0 ]; then make_level_log ${remotehost} else echo "Last `prev_level` dump on this filesystem was on $PREV_DATE" remote_run "${remotehost}" cp "`level_log_name ${fsname} $PREV_LEVEL`" "`level_log_name temp`" fi ${DUMP_BEGIN-:} $DUMP_LEVEL $remotehost $fs $fsname backup_host ${remotehost} \ "--listed=`level_log_name temp`" \ "--label='`print_level` backup of ${fs} on ${remotehost} at ${NOW}'" \ -C ${fs} . # '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 "$0: backup of ${1} 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 flush_level_log ${remotehost} ${fsname} fi ${MT_STATUS} "$TAPE_FILE" ${DUMP_END-:} $DUMP_LEVEL $remotehost $fs $fsname echo "sleeping ${SLEEP_TIME} seconds" sleep ${SLEEP_TIME} shift done # Dump any individual files requested. if [ "x${BACKUP_FILES}" != "x" ] ; then message 1 "processing individual files" date="`date`" if [ $DUMP_LEVEL -eq 0 ]; then make_level_log $localhost else echo "Last `prev_level` dump on this filesystem was on $PREV_DATE" remote_run "${localhost}" cp "`level_log_name MISC $PREV_LEVEL`" "`level_log_name temp`" fi echo "Backing up miscellaneous files at ${date}" ${DUMP_BEGIN-:} $DUMP_LEVEL $localhost MISC MISC backup_host $localhost \ "--listed=`level_log_name temp`"\ "--label='`print_level` backup of miscellaneous files at ${NOW}'" \ ${BACKUP_FILES} if [ $? -ne 0 ] ; then echo "Backup of miscellaneous files failed." # I'm assuming that the tar will have written an empty # file to the tape, otherwise I should do a cat here. else flush_level_log $localhost MISC fi ${MT_STATUS} "$TAPE_FILE" ${DUMP_END-:} $DUMP_LEVEL $localhost MISC MISC else echo "No miscellaneous files specified" fi message 1 "final cleanup" $MT_REWIND "${TAPE_FILE}" $MT_OFFLINE "${TAPE_FILE}" echo "." ) 2>&1 | tee -a "${LOGFILE}" RC=$? if test "${ADMINISTRATOR}" != NONE; then echo "Sending the dump log to ${ADMINISTRATOR}" mail -s "Results of backup started ${startdate}" ${ADMINISTRATOR} < "${LOGFILE}" fi exit $RC # EOF