*** empty log message ***

This commit is contained in:
François Pinard
1994-11-16 02:48:46 +00:00
parent 10b4901399
commit 7c1dad98bb
5 changed files with 345 additions and 70 deletions
+1 -1
View File
@@ -86,7 +86,7 @@ LOGFILE="log-`date | sed -ne '
localhost="`hostname | sed -e 's/\..*//'`"
TAR_PART1="${TAR} -c --multi-volume --one-file-system --block=${BLOCKING} --sparse --volno-file=${VOLNO_FILE}"
TAR_PART1="${TAR} -c --multi-volume --one-file-system --block-size=${BLOCKING} --sparse --volno-file=${VOLNO_FILE}"
# Only use --info-script if DUMP_REMIND_SCRIPT was defined in backup-specs
if [ "x${DUMP_REMIND_SCRIPT}" != "x" ]; then
+107 -68
View File
@@ -8,12 +8,13 @@
#
# You must edit the file `backup-specs' to set the parameters for your site.
# Insure `mail' is in PATH.
PATH="/usr/ucb:${PATH}"
export PATH
if [ ! -w / ]; then
echo The backup must be run as root,
echo 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
else
false
fi
# Get the values of BACKUP_DIRS and BACKUP_FILES, and other variables.
@@ -22,64 +23,99 @@ fi
# Maybe sleep until around specified or default hour.
#
if [ "${1}" != "now" ]; then
if [ "${1}"x != x ]; then
spec=${1}
if [ "${1}x" != "x" ]; then
spec="${1}"
else
spec=${BACKUP_HOUR}
spec="${BACKUP_HOUR}"
fi
pausetime=`date | awk '{hr=substr($4,1,2);\\
mn=substr($4,4,2);\\
if((hr+0)<spec+0)\\
print 3600*(spec-hr)-60*mn;\\
else\\
print 3600*(spec+(24-hr))-60*mn; }' spec=$spec`
pausetime="`date | awk '
{
hr = substr($4, 1, 2);
mn = substr($4, 4, 2);
if((hr + 0) < (spec + 0))
print 3600 * (spec - hr) - 60 * mn;
else
print 3600 * (spec + (24 - hr)) - 60 * mn;
}' spec=\"${spec}\"`"
clear
cat ./dont_touch
sleep ${pausetime}
# 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
sleep "${pausetime}"
fi
# start doing things
here=`pwd`
LOGFILE=log-`date | awk '{print $2 "-" $3 "-" $6}'`-level-1
HOST=`hostname | sed 's/\..*//'`
# Put startdate in the subject line of mailed report, since if it happens
# to run longer than 24 hours (as may be the case if someone forgets to put
# in the next volume of the tape in adequate time), the backup date won't
# appear too misleading.
startdate="`date`"
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=log-`date | awk '
BEGIN {
d["Jan"] = "01"; d["Feb"] = "02"; d["Mar"] = "03";
d["Apr"] = "04"; d["May"] = "05"; d["Jun"] = "06";
d["Jul"] = "07"; d["Aug"] = "08"; d["Sep"] = "09";
d["Oct"] = "10"; d["Nov"] = "11"; d["Dec"] = "12";
}
{
if ($3 < 10)
$3 = "0" $3;
print $6 "-" d[$2] "-" $3;
}'`-level-1
HOST="`hostname | sed -e 's/\..*//'`"
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
if [ x != "x${DUMP_REMIND_SCRIPT}" ]; then
if [ "x${DUMP_REMIND_SCRIPT}" != "x" ]; then
TAR_PART1="${TAR_PART1} --info-script=${DUMP_REMIND_SCRIPT}"
fi
# Make sure the log file did not already exist. Create it.
if [ -f ${LOGFILE} ] ; then
echo Log file ${LOGFILE} already exists.
if [ -f "${LOGFILE}" ] ; then
echo "Log file ${LOGFILE} already exists."
exit 1
else
touch ${LOGFILE}
touch "${LOGFILE}"
fi
mt -f ${TAPE_FILE} rewind
rm ${VOLNO_FILE}
# Caveat: Some version of `mt' require `-t', not `-f'.
mt -f "${TAPE_FILE}" rewind
rm -f "${VOLNO_FILE}"
set ${BACKUP_DIRS}
set - "${BACKUP_DIRS}"
while [ $# -ne 0 ] ; do
host=`echo ${1} | sed 's/:.*$//'`
fs=`echo ${1} | sed 's/^.*://'`
date=`date`
fsname=`echo ${1} | sed 's/\//:/g'`
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.
# 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}
echo "Backing up ${1} at ${date}" | tee -a "${LOGFILE}"
echo "Last full dump on this filesystem:" | "tee -a ${LOGFILE}"
if [ ${HOST} != ${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}
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}
@@ -87,74 +123,77 @@ while [ $# -ne 0 ] ; do
# Actually back things up.
if [ ${HOST} != ${host} ] ; then
rsh ${host} ${TAR_PART1} -f ${HOST}:${TAPE_FILE} ${TAR_PART2} ${TAR_PART3} 2>&1 | tee -a ${LOGFILE}
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}
# 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}
echo "Backup of ${1} 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
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}
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}
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}
${TAPE_STATUS} | tee -a "${LOGFILE}"
sleep 60
shift
done
# Dump any individual files requested.
if [ x != "x${BACKUP_FILES}" ] ; then
date=`date`
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}
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}
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}"
echo Backing up miscellaneous files at ${date} | 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}
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}
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}
${TAPE_STATUS} | tee -a "${LOGFILE}"
else
echo No miscellaneous files specified | tee -a ${LOGFILE}
false
echo "No miscellaneous files specified" | tee -a "${LOGFILE}"
fi
mt -f ${TAPE_FILE} rewind
mt -f ${TAPE_FILE} offl
# Caveat: some versions of `mt' use `-t' instead of `-f'.
mt -f "${TAPE_FILE}" rewind
mt -f "${TAPE_FILE}" offl
echo Sending the dump log to ${ADMINISTRATOR}
cat ${LOGFILE} | sed -f logfile.sed > ${LOGFILE}.tmp
/usr/ucb/mail -s "Results of backup on `date`" ${ADMINISTRATOR} < ${LOGFILE}.tmp
rm -f ${LOGFILE}.tmp
echo "Sending the dump log to ${ADMINISTRATOR}"
mail -s "Results of backup started ${startdate}" ${ADMINISTRATOR} < "${LOGFILE}"
# eof
+1 -1
View File
@@ -470,7 +470,7 @@ int device;
for(n=namelist;n;n=n->next) {
if(!strcmp(n->name,p)) {
n->dir_contents = new_buf;
n->dir_contents = new_buf ? new_buf : "\0\0\0\0";
break;
}
}
+169
View File
@@ -0,0 +1,169 @@
/* Portability declarations. Requires sys/types.h.
Copyright (C) 1988 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 2, 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 GNU Tar; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "pathmax.h"
#ifdef _POSIX_VERSION
#include <sys/wait.h>
#else /* !_POSIX_VERSION */
#define WIFSTOPPED(w) (((w) & 0xff) == 0x7f)
#define WIFSIGNALED(w) (((w) & 0xff) != 0x7f && ((w) & 0xff) != 0)
#define WIFEXITED(w) (((w) & 0xff) == 0)
#define WSTOPSIG(w) (((w) >> 8) & 0xff)
#define WTERMSIG(w) ((w) & 0x7f)
#define WEXITSTATUS(w) (((w) >> 8) & 0xff)
#endif /* _POSIX_VERSION */
/* nonstandard */
#ifndef WIFCOREDUMPED
#define WIFCOREDUMPED(w) (((w) & 0x80) != 0)
#endif
#ifdef __MSDOS__
/* missing things from sys/stat.h */
#define S_ISUID 0
#define S_ISGID 0
#define S_ISVTX 0
/* device stuff */
#define makedev(ma, mi) ((ma << 8) | mi)
#define major(dev) (dev)
#define minor(dev) (dev)
typedef long off_t;
#endif /* __MSDOS__ */
#if defined(__STDC__) || defined(__TURBOC__)
#define PTR void *
#else
#define PTR char *
#define const
#endif
/* Since major is a function on SVR4, we can't just use `ifndef major'. */
#ifdef major /* Might be defined in sys/types.h. */
#define HAVE_MAJOR
#endif
#if !defined(HAVE_MAJOR) && defined(MAJOR_IN_MKDEV)
#include <sys/mkdev.h>
#define HAVE_MAJOR
#endif
#if !defined(HAVE_MAJOR) && defined(MAJOR_IN_SYSMACROS)
#include <sys/sysmacros.h>
#define HAVE_MAJOR
#endif
#ifndef HAVE_MAJOR
#define major(dev) (((dev) >> 8) & 0xff)
#define minor(dev) ((dev) & 0xff)
#define makedev(maj, min) (((maj) << 8) | (min))
#endif
#undef HAVE_MAJOR
#if defined(STDC_HEADERS) || defined(USG)
#include <string.h>
#if !defined(__MSDOS__) && !defined(STDC_HEADERS)
#include <memory.h>
#endif
#define index strchr
#define rindex strrchr
#define bcopy(s, d, n) memcpy(d, s, n)
#define bzero(s, n) memset(s, 0, n)
#define bcmp memcmp
#else
#include <strings.h>
#endif
#if defined(STDC_HEADERS)
#include <stdlib.h>
#else
char *malloc(), *realloc();
char *getenv();
#endif
#ifndef _POSIX_VERSION
#ifdef __MSDOS__
#include <io.h>
#else /* !__MSDOS__ */
off_t lseek();
#endif /* !__MSDOS__ */
char *getcwd();
#endif /* !_POSIX_VERSION */
#ifndef NULL
#define NULL 0
#endif
#ifndef O_BINARY
#define O_BINARY 0
#endif
#ifndef O_CREAT
#define O_CREAT 0
#endif
#ifndef O_NDELAY
#define O_NDELAY 0
#endif
#ifndef O_RDONLY
#define O_RDONLY 0
#endif
#ifndef O_RDWR
#define O_RDWR 2
#endif
#include <sys/stat.h>
#ifndef S_ISREG /* Doesn't have POSIX.1 stat stuff. */
#define mode_t unsigned short
#endif
#if !defined(S_ISBLK) && defined(S_IFBLK)
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
#endif
#if !defined(S_ISCHR) && defined(S_IFCHR)
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
#endif
#if !defined(S_ISDIR) && defined(S_IFDIR)
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#endif
#if !defined(S_ISREG) && defined(S_IFREG)
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#endif
#if !defined(S_ISFIFO) && defined(S_IFIFO)
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
#define mkfifo(path, mode) (mknod ((path), (mode) | S_IFIFO, 0))
#endif
#if !defined(S_ISLNK) && defined(S_IFLNK)
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
#endif
#if !defined(S_ISSOCK) && defined(S_IFSOCK)
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
#endif
#if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */
#define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
#define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
#endif
#if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */
#define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
#endif
#if !defined(S_ISCTG) && defined(S_IFCTG) /* contiguous file */
#define S_ISCTG(m) (((m) & S_IFMT) == S_IFCTG)
#endif
#if !defined(S_ISVTX)
#define S_ISVTX 0001000
#endif
+67
View File
@@ -0,0 +1,67 @@
/* Find out if we need the pad field in the header for this machine
Copyright (C) 1991 Free Software Foundation
This program 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 2, or (at
your option) any later version.
This program 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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdio.h>
struct inc
{
char a[20];
char b[20];
};
struct test1
{
char a;
struct inc in[5];
};
struct test2
{
char a;
char b;
struct inc in[5];
};
void
main ()
{
struct test1 t1;
struct test2 t2;
int t1diff, t2diff;
FILE *fp = fopen("testpad.h", "w");
if (fp == 0)
{
fprintf (stderr, "testpad: cannot open ");
fflush (stderr);
perror ("testpad.h");
exit (1);
}
t1diff = (char *)&t1.in[0] - (char *)&t1;
t2diff = (char *)&t2.in[0] - (char *)&t2;
if (t2diff == t1diff + 1)
fprintf (fp, "#define NEEDPAD\n");
else if (t1diff != t2diff)
fprintf (stderr, "Cannot determine padding for tar struct, \n\
will try with none.\n");
fclose (fp);
exit (0);
}