3 # usage: snaprsync <setting>... <positionals>
4 # <setting> is ---<name>=<value>
5 # <positionals> are assigned to unused mandatory values in order
7 # rhost device mountpoint localarea
11 rsharedir=/usr/share/chiark-backup
12 retcdir=/etc/chiark-backup
13 rvardir=/var/lib/chiark-backup
18 badusage () { echo >&2 "snaprsync: bad usage: $1"; exit 12; }
19 x () { echo "+ $@"; "$@"; }
24 name=${1#--}; name=${name%%=*}
27 rhost|device|mountpoint|localarea);;
28 localprevious|rsharedir|retcdir|rvardir|bwlimit);;
29 *) badusage "unknown setting $name";;
34 -*) badusage "unknown option $1" ;;
40 for name in rhost device mountpoint localarea; do
42 if [ "x$value" != x ]; then continue; fi
43 if [ $# = 0 ]; then badusage "no value for setting $name"; fi
48 datefmt='%Y-%m-%d %H:%M:%S Z'
49 rsync="rsync ${bwlimit:+--bwlimit} $bwlimit"
50 export RSYNC_RSH='ssh -o compression=no'
52 ssh $rhost "date -u '+$rhost $datefmt start'"
54 ssh $rhost ls -d $rsharedir
55 ssh $rhost ls -d $rvardir
57 test -d $localarea || x mkdir $localarea
59 rsumsfile=for-$ournode.sums
63 trap 'rm -rf $td; exit $rc' 0
66 mkfifo -m 600 $td/sentinel
69 x ssh $rhost "$rsharedir/snap-drop"
70 x ssh $rhost "$retcdir/snap/$snapkind snap $rvardir $device $mountpoint"
71 ssh $rhost <$td/sentinel 4<&- "
73 date -u '+$rhost $datefmt main'
75 (set +e; read x <&3; kill 0) &
80 summer -Ctqf . | sort -t' ' -k2 >&3
81 test x"${PIPESTATUS[*]}" = 'x0 0'
82 date -u '+$rhost $datefmt sumsdone'
86 x $rsync -aHSxz --numeric-ids --delete \
87 ${localprevious:+--link-dest} $localprevious \
88 $rhost:$rvardir/snap-mount/. $localarea/.
90 x ssh $rhost "$rsharedir/snap-drop"
92 if [ "x${localprevious}" != x ]; then
93 cp "$localprevious,rsums" "$localarea,rsums"
96 $rhost:$rvardir/$rsumsfile \