Browse Source

*** empty log message ***

François Pinard 30 years ago
parent
commit
b673b3f794
4 changed files with 122 additions and 118 deletions
  1. 2 1
      scripts/level-0
  2. 115 116
      scripts/level-1
  3. 1 1
      src/gnu.c
  4. 4 0
      src/port.h

+ 2 - 1
scripts/level-0

@@ -66,9 +66,10 @@ startdate="`date`"
 here="`pwd`"
 here="`pwd`"
 
 
 # Logfile name should be in the form  ``log-1993-03-18-level-0''
 # Logfile name should be in the form  ``log-1993-03-18-level-0''
+# They go in the subdirectory `log' of the current directory. 
 # i.e. year-month-date.  This format is useful for sorting by name, since
 # i.e. year-month-date.  This format is useful for sorting by name, since
 # logfiles are intentionally kept online for future reference.
 # logfiles are intentionally kept online for future reference.
-LOGFILE="log-`date | sed -ne '
+LOGFILE="log/log-`date | sed -ne '
    s/[^ ]*  *\([^ ]*\)  *\([^ ]*\).* \([^ ]*\)$/\3-\1-\2/
    s/[^ ]*  *\([^ ]*\)  *\([^ ]*\).* \([^ ]*\)$/\3-\1-\2/
    /-[0-9]$/s/\([0-9]\)$/0\1/
    /-[0-9]$/s/\([0-9]\)$/0\1/
    /Jan/{s/Jan/01/p;q;}
    /Jan/{s/Jan/01/p;q;}

+ 115 - 116
scripts/level-1

@@ -8,21 +8,31 @@
 #
 #
 # You must edit the file `backup-specs' to set the parameters for your site.
 # You must edit the file `backup-specs' to set the parameters for your site.
 
 
+# Useful for backup-specs, in case things have to be done slightly
+# differently for different dump levels. 
+DUMP_LEVEL=1
+
 # Insure `mail' is in PATH. 
 # Insure `mail' is in PATH. 
 PATH="/usr/ucb:${PATH}"
 PATH="/usr/ucb:${PATH}"
 export PATH
 export PATH
 
 
+# This is not the most reliable test in the world.  The following might be
+# more predictable:
+#
+# whoami="`whoami`"
+# euid="`sed -ne '/^'\"${whoami}\"':/{s/^[^:]*:[^:]*://;s/:.*//p;q;}' /etc/passwd`"
+# if [ "${euid}" != 0 ]; then ...
+#
 if [ ! -w / ]; then
 if [ ! -w / ]; then
    echo "The backup must be run as root or else some files will fail to be dumped."
    echo "The backup must be run as root or else some files will fail to be dumped."
    exit 1
    exit 1
 fi
 fi
 
 
-# Get the values of BACKUP_DIRS and BACKUP_FILES, and other variables.
+# Get the values of BACKUP_DIRS, BACKUP_FILES, and other variables.
 . ./backup-specs
 . ./backup-specs
 
 
 # Maybe sleep until around specified or default hour.
 # Maybe sleep until around specified or default hour.
-#
-if [ "${1}" != "now" ]; then
+if [ "z${1}" != "znow" ]; then
    if [ "${1}x" != "x" ]; then
    if [ "${1}x" != "x" ]; then
       spec="${1}"
       spec="${1}"
    else
    else
@@ -40,14 +50,7 @@ if [ "${1}" != "now" ]; then
      }' spec=\"${spec}\"`"
      }' spec=\"${spec}\"`"
 
 
    clear
    clear
-
-   # Put your favorite message here.  We just want a screenful of obnoxious
-   # caps warning people from messing with the dedicated terminal. 
-   awk 'BEGIN { 
-           for (i = 0; i < 30; i++)
-              print "           D O    N O T   T O U C H   T H I S   T E R M I N A L !!!!!"
-        }' /dev/null
-
+   echo "${SLEEP_MESSAGE}"
    sleep "${pausetime}"
    sleep "${pausetime}"
 fi
 fi
 
 
@@ -61,8 +64,9 @@ startdate="`date`"
 
 
 here="`pwd`"
 here="`pwd`"
 
 
-# Logfile name should be in the form  ``log-1993-03-18-full''
-# i.e. year-month-date.  This format is useful for sorting by name. 
+# Logfile name should be in the form  ``log-1993-03-18-level-1''
+# i.e. year-month-date.  This format is useful for sorting by name, since
+# logfiles are intentionally kept online for future reference.
 LOGFILE=log-`date | awk '
 LOGFILE=log-`date | awk '
    BEGIN {
    BEGIN {
       d["Jan"] = "01";  d["Feb"] = "02"; d["Mar"] = "03";
       d["Jan"] = "01";  d["Feb"] = "02"; d["Mar"] = "03";
@@ -71,127 +75,122 @@ LOGFILE=log-`date | awk '
       d["Oct"] = "10";  d["Nov"] = "11"; d["Dec"] = "12";
       d["Oct"] = "10";  d["Nov"] = "11"; d["Dec"] = "12";
    }
    }
    {
    {
-      if ($3 < 10)
-         $3 = "0" $3;
-      print $6 "-" d[$2] "-" $3;
-   }'`-level-1
+    if ($3 < 10) $3 = "0" $3;
+    print $6 "-" d[$2] "-" $3;
+   }'`-level-${DUMP_LEVEL}
 
 
-HOST="`hostname | sed -e 's/\..*//'`"
+localhost="`hostname | sed -e 's/\..*//'`"
 
 
 TAR_PART1="/usr/local/bin/tar -c --multi-volume --one-file-system --block=${BLOCKING} --sparse --volno-file=${VOLNO_FILE}"
 TAR_PART1="/usr/local/bin/tar -c --multi-volume --one-file-system --block=${BLOCKING} --sparse --volno-file=${VOLNO_FILE}"
 
 
 # Only use --info-script if DUMP_REMIND_SCRIPT was defined in backup-specs
 # Only use --info-script if DUMP_REMIND_SCRIPT was defined in backup-specs
 if [ "x${DUMP_REMIND_SCRIPT}" != "x" ]; then
 if [ "x${DUMP_REMIND_SCRIPT}" != "x" ]; then
-   TAR_PART1="${TAR_PART1} --info-script=${DUMP_REMIND_SCRIPT}"
+   TAR_PART1="${TAR_PART1} --info-script='${DUMP_REMIND_SCRIPT}'"
 fi
 fi
 
 
 # Make sure the log file did not already exist.  Create it.
 # Make sure the log file did not already exist.  Create it.
 
 
 if [ -f "${LOGFILE}" ] ; then
 if [ -f "${LOGFILE}" ] ; then
-   echo "Log file ${LOGFILE} already exists."
+   echo "Log file ${LOGFILE} already exists." 1>&2
    exit 1
    exit 1
 else
 else
    touch "${LOGFILE}"
    touch "${LOGFILE}"
 fi
 fi
 
 
-# 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
-   host="`echo \"${1}\" | sed -e 's/:.*$//'`"
-   fs="`echo \"${1}\" | sed -e 's/^.*://'`"
-   date="`date`"
-   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 ${host} at ${date}' -C ${fs} ."
-
-   echo "Backing up ${1} at ${date}" | tee -a "${LOGFILE}"
-   echo "Last full dump on this filesystem:" | "tee -a ${LOGFILE}"
-
-   if [ "z${host}" != "z${HOST}" ] ; then
-     rsh "${host}" "ls -l /etc/tar-backup/${fsname}.level-0; \
-                    cp /etc/tar-backup/${fsname}.level-0 /etc/tar-backup/temp.level-1" 2>&1 \
-      | tee -a "${LOGFILE}"
-   else
-     ls -l /etc/tar-backup/${fsname}.level-0 2>&1 | tee -a ${LOGFILE}
-     cp /etc/tar-backup/${fsname}.level-0 /etc/tar-backup/temp.level-1 2>&1 | tee -a ${LOGFILE}
-   fi
-
-   # Actually back things up.
-
-   if [ "z${host}" != "z${HOST}" ] ; then
-      rsh "${host}" ${TAR_PART1} -f ${HOST}:${TAPE_FILE} ${TAR_PART2} ${TAR_PART3} 2>&1 \
-       | tee -a "${LOGFILE}"
-   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}" 2>&1 | tee -a "${LOGFILE}"
-   fi
-
-   # This doesn't presently work, of course, because $? is set to the exit
-   # status of the last thing in the pipeline of the previous command,
-   # namely `tee'.  We really want the exit status of the sh command
-   # running tar, but getting this seems to be nontrivial.  --friedman
-   if [ $? -ne 0 ] ; then
-      echo "Backup of ${1} failed." | tee -a "${LOGFILE}"
+# 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
       # I'm assuming that the tar will have written an empty
       # file to the tape, otherwise I should do a cat here.
       # file to the tape, otherwise I should do a cat here.
-   else
-      if [ ${HOST} != ${host} ] ; then
-	rsh ${host} mv -f /etc/tar-backup/temp.level-1 /etc/tar-backup/${fsname}.level-1 2>&1 \
-         | tee -a ${LOGFILE}
-      else
-        mv -f /etc/tar-backup/temp.level-1 /etc/tar-backup/${fsname}.level-1 2>&1 \
-         | tee -a ${LOGFILE}
-      fi
-   fi
-   ${TAPE_STATUS} | tee -a "${LOGFILE}"
-   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}" | tee -a "${LOGFILE}"
-   echo "Last full dump of these files:" | tee -a "${LOGFILE}"
-   ls -l /etc/tar-backup/misc.level-0 2>&1 | tee -a "${LOGFILE}"
-
-   rm -f /etc/tar-backup/temp.level-1 2>&1 | tee -a "${LOGFILE}"
-   cp /etc/tar-backup/misc.level-0 /etc/tar-backup/temp.level-1 2>&1 | tee -a "${LOGFILE}"
-
-   # 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}" 2>&1 \
-    | tee -a "${LOGFILE}"
-
-   # This doesn't presently work, of course, because $? is set to the exit
-   # status of the last thing in the pipeline of the previous command,
-   # namely `tee'.  We really want the exit status of the sh command
-   # running tar, but getting this seems to be nontrivial.  --friedman
-   if [ $? -ne 0 ] ; then
-     echo "Backup of miscellaneous files failed." | tee -a "${LOGFILE}"
-     # 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 2>&1 | tee -a "${LOGFILE}"
-   fi
-   ${TAPE_STATUS} | tee -a "${LOGFILE}"
-else
-   echo "No miscellaneous files specified" | tee -a "${LOGFILE}"
-fi
-
-# Caveat: some versions of `mt' use `-t' instead of `-f'.
-mt -f "${TAPE_FILE}" rewind
-mt -f "${TAPE_FILE}" offl
+    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
+
+ # Caveat: some versions of `mt' use `-t' instead of `-f'.
+ mt -f "${TAPE_FILE}" rewind
+ mt -f "${TAPE_FILE}" offl
+
+) 2>&1 | tee -a "${LOGFILE}"
 
 
 echo "Sending the dump log to ${ADMINISTRATOR}"
 echo "Sending the dump log to ${ADMINISTRATOR}"
 mail -s "Results of backup started ${startdate}" ${ADMINISTRATOR} < "${LOGFILE}"
 mail -s "Results of backup started ${startdate}" ${ADMINISTRATOR} < "${LOGFILE}"

+ 1 - 1
src/gnu.c

@@ -266,7 +266,7 @@ collect_and_sort_names()
 		n->found=0;
 		n->found=0;
 	}
 	}
 	if(gnu_dumpfile)
 	if(gnu_dumpfile)
-		write_dir_file(gnu_dumpfile);
+		write_dir_file();
 }
 }
 
 
 int
 int

+ 4 - 0
src/port.h

@@ -19,6 +19,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 
 #include "pathmax.h"
 #include "pathmax.h"
 
 
+#ifdef __GNUC__
+#define alloca __builtin_alloca
+#endif
+
 #ifdef _POSIX_VERSION
 #ifdef _POSIX_VERSION
 #include <sys/wait.h>
 #include <sys/wait.h>
 #else /* !_POSIX_VERSION */
 #else /* !_POSIX_VERSION */