70 [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: nothing is mounted on $MOUNTPOINT" |
70 [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: nothing is mounted on $MOUNTPOINT" |
71 return 0 |
71 return 0 |
72 } |
72 } |
73 |
73 |
74 open_cryptdev() { |
74 open_cryptdev() { |
75 TYPE=$1 |
75 TYPE=$1 |
76 if [ ! $(blkid -U $2) ]; then |
76 if [ ! $(blkid -U $2) ]; then |
77 debug "ERROR: [$ME] can't get device path for UUID: $2" |
77 debug "ERROR: [$ME] can't get device path for UUID: $2" |
78 exit 1 |
78 exit 1 |
79 fi |
79 fi |
80 DEV=$(blkid -U $2) |
80 DEV=$(blkid -U $2) |
81 CRYPTDEV="cbackup.$TYPE.$$" |
81 CRYPTDEV="cbackup.$TYPE.$$" |
82 KEYFILE=$3 |
82 KEYFILE=$3 |
83 cryptsetup luksOpen $DEV $CRYPTDEV --key-file $KEYFILE 2>/dev/null |
83 cryptsetup luksOpen $DEV $CRYPTDEV --key-file $KEYFILE 2>/dev/null |
84 if [ ! -h /dev/mapper/$CRYPTDEV ]; then |
84 if [ ! -h /dev/mapper/$CRYPTDEV ]; then |
85 debug "ERROR: [$ME] can't luksOpen cryptdev '$CRYPTDEV'" |
85 debug "ERROR: [$ME] can't luksOpen cryptdev '$CRYPTDEV'" |
86 [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: can't luksOpen cryptdev '$CRYPTDEV'" |
86 [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: can't luksOpen cryptdev '$CRYPTDEV'" |
87 exit 1 |
87 exit 1 |
91 [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: luksOpen cryptdev $CRYPTDEV" |
91 [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: luksOpen cryptdev $CRYPTDEV" |
92 return 0 |
92 return 0 |
93 } |
93 } |
94 |
94 |
95 mount_cryptdev() { |
95 mount_cryptdev() { |
96 TYPE=$1 |
96 TYPE=$1 |
97 CRYPTDEV="cbackup.$TYPE.$$" |
97 CRYPTDEV="cbackup.$TYPE.$$" |
98 MOUNTPOINT=$2 |
98 MOUNTPOINT=$2 |
99 MOUNTOPT="" |
99 MOUNTOPT="" |
100 test "$TYPE" = "source" && MOUNTOPT="--read-only" |
100 test "$TYPE" = "src" && MOUNTOPT="--read-only" |
101 if mount $MOUNTOPT /dev/mapper/$CRYPTDEV $MOUNTPOINT; then |
101 if mount $MOUNTOPT /dev/mapper/$CRYPTDEV $MOUNTPOINT; then |
102 debug "OK: [$ME] mount $CRYPTDEV to $MOUNTPOINT" |
102 debug "OK: [$ME] mount $CRYPTDEV $MOUNTOPT to $MOUNTPOINT" |
103 [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: mount $CRYPTDEV to $MOUNTPOINT" |
103 [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: mount $CRYPTDEV to $MOUNTPOINT" |
104 else |
104 else |
105 debug "ERROR: [$ME] can't mount $CRYPTDEV to $MOUNTPOINT" |
105 debug "ERROR: [$ME] can't mount $CRYPTDEV to $MOUNTPOINT" |
106 [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: can't mount $CRYPTDEV to $MOUNTPOINT" |
106 [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: can't mount $CRYPTDEV to $MOUNTPOINT" |
107 exit 1 |
107 exit 1 |
108 fi |
108 fi |
109 return 0 |
109 return 0 |
110 } |
110 } |
111 |
111 |
112 umount_cryptdev() { |
112 umount_cryptdev() { |
113 MOUNTPOINT=$1 |
113 MOUNTPOINT=$1 |
114 if umount $MOUNTPOINT 2>/dev/null; then |
114 if umount $MOUNTPOINT 2>/dev/null; then |
115 debug "OK: [$ME] umount $MOUNTPOINT" |
115 debug "OK: [$ME] umount $MOUNTPOINT" |
116 [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: umount $MOUNTPOINT" |
116 [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: umount $MOUNTPOINT" |
117 else |
117 else |
118 debug "ERROR: [$ME] can't umount $MOUNTPOINT" |
118 debug "ERROR: [$ME] can't umount $MOUNTPOINT" |
121 fi |
121 fi |
122 return 0 |
122 return 0 |
123 } |
123 } |
124 |
124 |
125 close_cryptdev() { |
125 close_cryptdev() { |
126 TYPE=$1 |
126 TYPE=$1 |
127 CRYPTDEV="cbackup.$TYPE.$$" |
127 CRYPTDEV="cbackup.$TYPE.$$" |
128 if [ -h /dev/mapper/$CRYPTDEV ]; then |
128 if [ -h /dev/mapper/$CRYPTDEV ]; then |
129 cryptsetup luksClose $CRYPTDEV |
129 cryptsetup luksClose $CRYPTDEV |
130 if [ -h /dev/mapper/$CRYPTDEV ]; then |
130 if [ -h /dev/mapper/$CRYPTDEV ]; then |
131 debug "ERROR: [$ME] can't luksClose cryptdev '$CRYPTDEV'" |
131 debug "ERROR: [$ME] can't luksClose cryptdev '$CRYPTDEV'" |
132 [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: can't luksClose cryptdev '$CRYPTDEV'" |
132 [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: can't luksClose cryptdev '$CRYPTDEV'" |
138 fi |
138 fi |
139 return 0 |
139 return 0 |
140 } |
140 } |
141 |
141 |
142 do_sync() { |
142 do_sync() { |
143 SOURCE=$1 |
143 SOURCE=$1 |
144 DESTINATION=$2 |
144 DESTINATION=$2 |
145 if rsync -Ha --numeric-ids --delete $SOURCE $DESTINATION; then |
145 VERBOSE="" |
146 debug "OK: [$ME] sync is done from '$SOURCE' to '$DESTINATION'" |
146 test $DEBUG -gt 0 && VERBOSE="--verbose --progress" |
|
147 if rsync -Ha $VERBOSE --numeric-ids --delete $SOURCE $DESTINATION; then |
|
148 debug "OK: [$ME] sync is done from '$SOURCE' to '$DESTINATION'" |
147 [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: sync is done from '$SOURCE' to '$DESTINATION'" |
149 [ $LOGGING -eq 1 ] && logger -p local0.notice -t $ME "OK: sync is done from '$SOURCE' to '$DESTINATION'" |
148 else |
150 else |
149 debug "ERROR: [$ME] sync error from '$SOURCE' to '$DESTINATION'" |
151 debug "ERROR: [$ME] sync error from '$SOURCE' to '$DESTINATION'" |
150 [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: sync error from '$SOURCE' to '$DESTINATION'" |
152 [ $LOGGING -eq 1 ] && logger -p local0.err -t $ME "ERROR: sync error from '$SOURCE' to '$DESTINATION'" |
151 exit 1 |
153 exit 1 |
152 fi |
154 fi |
153 return 0 |
155 return 0 |
154 } |
156 } |
155 |
157 |
156 cleanup() { |
158 cleanup() { |
157 check_mountpoint $SPATH || umount_cryptdev $SPATH |
159 check_mountpoint $SPATH || umount_cryptdev $SPATH |
158 check_mountpoint $DPATH || umount_cryptdev $DPATH |
160 check_mountpoint $DPATH || umount_cryptdev $DPATH |
159 close_cryptdev source |
161 close_cryptdev src |
160 close_cryptdev destination |
162 close_cryptdev dst |
161 } |
163 } |
162 |
164 |
163 # MAIN |
165 # MAIN |
164 |
166 |
165 trap cleanup INT EXIT |
167 trap cleanup INT EXIT |
166 |
168 |
167 if [ $# -ne 5 ]; then |
169 if [ $# -ne 5 ]; then |
168 usage |
170 usage |
169 exit 1 |
171 exit 1 |
170 fi |
172 fi |
171 |
173 |
172 check_mountpoint $SPATH |
174 check_mountpoint $SPATH |
173 check_mountpoint $DPATH |
175 check_mountpoint $DPATH |
174 open_cryptdev src $SUUID $KEY |
176 open_cryptdev src $SUUID $KEY |