xref: /dflybsd-src/bin/cpdup/scripts/do_remote_host (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
1*86d7f5d3SJohn Marino#!/bin/csh
2*86d7f5d3SJohn Marino#
3*86d7f5d3SJohn Marino# $DragonFly: src/bin/cpdup/scripts/do_remote_host,v 1.2 2006/09/21 00:18:13 dillon Exp $
4*86d7f5d3SJohn Marino
5*86d7f5d3SJohn Marinosource params
6*86d7f5d3SJohn Marino
7*86d7f5d3SJohn Marinoif ( "$argv" == "" ) then
8*86d7f5d3SJohn Marino    echo "Specify host mounted in $backup_nfs (e.g. 'apollo'), and level."
9*86d7f5d3SJohn Marino    echo "Level 0 - full backup, do not use hardlink trick"
10*86d7f5d3SJohn Marino    echo "Level 1 - full backup, use hardlink trick but verify each file"
11*86d7f5d3SJohn Marino    echo "Level 2 - full backup, use hardlink trick and stat shortcut"
12*86d7f5d3SJohn Marino    echo "./do_remote_host <host> <level> > $remote_path/mirrors/<host>.log"
13*86d7f5d3SJohn Marino    exit 1
14*86d7f5d3SJohn Marinoendif
15*86d7f5d3SJohn Marino
16*86d7f5d3SJohn Marinoset host = "$argv[1]"
17*86d7f5d3SJohn Marinoset level = "$argv[2]"
18*86d7f5d3SJohn Marino
19*86d7f5d3SJohn Marinoif ( ! -d $backup_nfs/$host ) then
20*86d7f5d3SJohn Marino    echo "Host not found in $backup_nfs"
21*86d7f5d3SJohn Marino    exit 1
22*86d7f5d3SJohn Marinoendif
23*86d7f5d3SJohn Marinoif ( ! -d $backup_path/mirrors/$host ) then
24*86d7f5d3SJohn Marino    echo "No backup found for $host"
25*86d7f5d3SJohn Marino    exit 1
26*86d7f5d3SJohn Marinoendif
27*86d7f5d3SJohn Marino
28*86d7f5d3SJohn Marino# Figure out the source directory
29*86d7f5d3SJohn Marino#
30*86d7f5d3SJohn Marinoset source = `readlink $backup_path/mirrors/$host`
31*86d7f5d3SJohn Marinoif ( "$source" == "" ) then
32*86d7f5d3SJohn Marino    echo "No backup found for $host at $backup_path/mirrors/$host"
33*86d7f5d3SJohn Marino    echo "or it was not a softlink"
34*86d7f5d3SJohn Marino    exit 1
35*86d7f5d3SJohn Marinoendif
36*86d7f5d3SJohn Marino
37*86d7f5d3SJohn Marino# Figure out the hardlink optimized side directory on
38*86d7f5d3SJohn Marino# the target.
39*86d7f5d3SJohn Marino#
40*86d7f5d3SJohn Marino
41*86d7f5d3SJohn Marinoif ( $level != 0 ) then
42*86d7f5d3SJohn Marino    set hlbase = `ssh $remote_host -n "readlink ${remote_path}/mirrors/$host"`
43*86d7f5d3SJohn Marino    if ( "$hlbase" == "" ) then
44*86d7f5d3SJohn Marino	echo "Missing softlink at ${remote_host}:${remote_path}/mirrors/${host}"
45*86d7f5d3SJohn Marino	echo "cannot proceed.  Perhaps you did not run a level 0 with"
46*86d7f5d3SJohn Marino	echo "the do_remote script to create the hardlink base and softlink?"
47*86d7f5d3SJohn Marino	exit 1
48*86d7f5d3SJohn Marino    endif
49*86d7f5d3SJohn Marino
50*86d7f5d3SJohn Marino    if ( "$hlbase" == "$source" ) then
51*86d7f5d3SJohn Marino	echo "SUCCEEDED - NO NEW BACKUP SINCE LAST TIME"
52*86d7f5d3SJohn Marino	exit 0
53*86d7f5d3SJohn Marino    endif
54*86d7f5d3SJohn Marinoendif
55*86d7f5d3SJohn Marino
56*86d7f5d3SJohn Marino# Figure out the target path and add prefixes
57*86d7f5d3SJohn Marino#
58*86d7f5d3SJohn Marinoset basename = $source
59*86d7f5d3SJohn Marinoset target = ${remote_host}:${remote_path}/mirrors/${source}
60*86d7f5d3SJohn Marinoset source = $backup_path/mirrors/${source}
61*86d7f5d3SJohn Marinoset hlbase = ${remote_path}/mirrors/${hlbase}
62*86d7f5d3SJohn Marino
63*86d7f5d3SJohn Marinoecho "---------- OFFSITE BACKUP OF $source ---------"
64*86d7f5d3SJohn Marinoecho "SOURCE $source"
65*86d7f5d3SJohn Marinoecho "HLBASE $hlbase"
66*86d7f5d3SJohn Marinoecho "TARGET $target"
67*86d7f5d3SJohn Marino
68*86d7f5d3SJohn Marino# Do the actual backup
69*86d7f5d3SJohn Marino#
70*86d7f5d3SJohn Marino
71*86d7f5d3SJohn Marinoset failed = 0
72*86d7f5d3SJohn Marino
73*86d7f5d3SJohn Marinoswitch($level)
74*86d7f5d3SJohn Marinocase 0:
75*86d7f5d3SJohn Marino    echo "cpdup -i0 -s0 -I $source $target"
76*86d7f5d3SJohn Marino    cpdup -i0 -s0 -I $source $target
77*86d7f5d3SJohn Marino    if ( $status != 0 ) then
78*86d7f5d3SJohn Marino	set failed = 1
79*86d7f5d3SJohn Marino    endif
80*86d7f5d3SJohn Marino    breaksw
81*86d7f5d3SJohn Marinocase 1:
82*86d7f5d3SJohn Marino    echo "cpdup -f -i0 -s0 -I -H $hlbase $source $target"
83*86d7f5d3SJohn Marino    cpdup -f -i0 -s0 -I -H $hlbase $source $target
84*86d7f5d3SJohn Marino    if ( $status != 0 ) then
85*86d7f5d3SJohn Marino	set failed = 1
86*86d7f5d3SJohn Marino    endif
87*86d7f5d3SJohn Marino    breaksw
88*86d7f5d3SJohn Marinocase 2:
89*86d7f5d3SJohn Marino    echo "cpdup -i0 -s0 -I -H $hlbase $source $target"
90*86d7f5d3SJohn Marino    cpdup -i0 -s0 -I -H $hlbase $source $target
91*86d7f5d3SJohn Marino    if ( $status != 0 ) then
92*86d7f5d3SJohn Marino	set failed = 1
93*86d7f5d3SJohn Marino    endif
94*86d7f5d3SJohn Marino    breaksw
95*86d7f5d3SJohn Marinodefault:
96*86d7f5d3SJohn Marino    echo "UNKNOWN BACKUP LEVEL, USE ONLY 0-2"
97*86d7f5d3SJohn Marino    set failed = 1
98*86d7f5d3SJohn Marino    breaksw
99*86d7f5d3SJohn Marinoendsw
100*86d7f5d3SJohn Marino
101*86d7f5d3SJohn Marinoif ( $failed == 0 ) then
102*86d7f5d3SJohn Marino    ssh $remote_host -n "rm -f ${remote_path}/mirrors/$host; ln -s $basename ${remote_path}/mirrors/$host"
103*86d7f5d3SJohn Marino    sync
104*86d7f5d3SJohn Marino    echo "SUCCEEDED"
105*86d7f5d3SJohn Marino    exit 0
106*86d7f5d3SJohn Marinoelse
107*86d7f5d3SJohn Marino    sync
108*86d7f5d3SJohn Marino    echo "FAILED"
109*86d7f5d3SJohn Marino    exit 1
110*86d7f5d3SJohn Marinoendif
111*86d7f5d3SJohn Marino
112