#! /bin/sh
# sender-full - send backup to ssh for remote sshbkp-receiver
# Copyright (C) 2001 Ed Cashin
# changes by Berend de Boer
#

# -------------- put your email address here
backuplackey=berend@pobox.com
me=sender-full
host=`hostname | sed 's/\..*//'`
# -------------- replace "meili" with the hostname of the machine
#                where sshbkp-receiver will run.
rhost=bmach
key=/root/.ssh/sender

# ---------- print a mail header to make it easy to mail this
#            script's output with
#            "sender-full | /usr/lib/sendmail -t"
#
cat <<EOF
To: $backuplackey
Subject: $host $me

EOF

# ----------- save a copy of the standard output in file descriptor six
exec 6>&1

echo ' ------------' $0
echo ' ------------ starting backup on' `date`
echo ' ------------ storage host:' $rhost

# backup of dumpable file systems

# ----------------- these lines are from df -k output for convenience,
#                   and the a b c d variables are dummies.
#
while read dev a b c d mountpt; do
  echo ' ------------ backing up device:' $dev   mount point: $mountpt
  # ------- name this backup after the mount point,
  #         turning slashes to underscores, and removing the initial
  #         slash.
  #
  fs=`echo $mountpt | sed -e 's/^\///' -e 's/\//_/g'`
  if [ "$fs" = "" ]; then
    fs=root
  fi
  title=${host}dump-$fs
  # ----------- send readable output to file descriptor six, where we
  #             copied the standard output, since we're piping the dump
  #             to ssh on standard output
  #
  (echo $title; /sbin/dump -0u -f - $dev) 2>&6 \
    | dd ibs=32k obs=32k \
    | ssh -x -T -o "IdentityFile $key" $rhost || {
    echo $me: Error: dump $dev failed 1>&2
    exit 1
  }
  # ---------- for convenience, we feed the loop with a "here document"
  #            that contains lines from the output of "df -k"
  #
done << EOF
/dev/hda5                14607      8035      5818  59% /boot
EOF

#  /dev/hda6              4033040   2954488    873680  78% /
#  /dev/hda5                14607      8035      5818  59% /boot


# backup of other file systems with cpio
# use a 5120 blocksize

# ----------------- these lines are from df -k output for convenience,
#                   and the a b c d variables are dummies.
#
LEVEL=0
while read dev a b c d mountpt; do
  echo ' ------------ backing up device:' $dev   mount point: $mountpt
  # ------- name this backup after the mount point,
  #         turning slashes to underscores, and removing the initial
  #         slash.
  #
  fs=`echo $mountpt | sed -e 's/^\///' -e 's/\//_/g'`
  if [ "$fs" = "" ]; then
    fs=root
  fi
  title=${host}dump-$fs
  touch $mountpt/DO_NOT_REMOVE.level.$LEVEL.cpio.touchfile
  # ----------- send readable output to file descriptor six, where we
  #             copied the standard output, since we're piping the dump
  #             to ssh on standard output
  #
  (echo $title; find $mountpt -depth | nice /bin/cpio -B --create --reset-access-time -c) 2>&6 \
    | dd ibs=32k obs=32k \
    | ssh -T -o "IdentityFile $key" $rhost || {
    echo $me: Error: dump $dev failed 1>&2
    exit 1
  }
  # ---------- for convenience, we feed the loop with a "here document"
  #            that contains lines from the output of "df -k"
  #
done << EOF
EOF

#  /dev/hda12             3817204   2988540    828664  79% /u1
#  /dev/hda9              4073212   3401076    672136  84% /u2
#  /dev/hda8              5112364   4222812    889552  83% /u3
#  /dev/hda10             3064300   2678056    386244  88% /u4
#  /dev/hda13             4686672   3766020    686296  85% /mnt/vmware

echo ' ------------ finishing backup on ' `date`
