taperole 1.6.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +3 -0
- data/CONTRIBUTING.md +8 -0
- data/README.md +33 -4
- data/Rakefile +6 -0
- data/Vagrantfile +6 -7
- data/bin/tape +2 -89
- data/lib/taperole/commands/ansible.rb +56 -0
- data/lib/taperole/commands/installer.rb +19 -0
- data/lib/taperole/commands/tape.rb +32 -0
- data/lib/taperole/core/ansible_runner.rb +86 -0
- data/lib/taperole/core/installer.rb +87 -0
- data/lib/taperole/core/notifier.rb +47 -0
- data/lib/taperole/helpers/files.rb +76 -0
- data/lib/taperole/helpers/logging.rb +37 -0
- data/lib/taperole/notifiers/slack.rb +83 -0
- data/lib/taperole/version.rb +3 -0
- data/lib/taperole.rb +24 -0
- data/requirements.yml +1 -1
- data/roles/backend_checkout/tasks/main.yml +1 -0
- data/roles/delayed_job/tasks/main.yml +0 -15
- data/roles/deployer_user/tasks/keys.yml +6 -6
- data/roles/deployer_user/tasks/main.yml +0 -3
- data/roles/monit_install/tasks/main.yml +6 -0
- data/roles/monit_install/templates/monitrc.j2 +290 -0
- data/roles/nginx/tasks/main.yml +3 -4
- data/roles/nginx/templates/nginx_unicorn.j2 +1 -0
- data/roles/node/tasks/main.yml +2 -1
- data/roles/ruby/tasks/main.yml +3 -11
- data/roles/unicorn_install/tasks/main.yml +0 -3
- data/roles/unicorn_install/templates/unicorn.rb.j2 +1 -1
- data/roles/unicorn_install/templates/unicorn_init.j2 +1 -1
- data/roles/unicorn_install/templates/unicorn_monit.j2 +1 -1
- data/spec/commands/installer_spec.rb +117 -0
- data/spec/spec_helper.rb +24 -0
- data/taperole.gemspec +8 -1
- data/templates/base/deploy.example.yml +1 -0
- data/templates/base/hosts.example +1 -1
- data/templates/base/omnibox.example.yml +15 -0
- data/templates/base/rake.example.yml +18 -0
- data/templates/base/tape_vars.example.yml +9 -8
- data/templates/static_html/omnibox.example.yml +13 -0
- data/test/base_docker_box/Dockerfile +1 -1
- data/test/rails/Dockerfile +3 -3
- data/test/rails/start_rails.sh +1 -0
- data/test/rails/tape_vars.yml +2 -2
- data/vendor/ANXS.postgresql/.travis.yml +27 -12
- data/vendor/ANXS.postgresql/README.md +1 -1
- data/vendor/ANXS.postgresql/Vagrantfile +7 -2
- data/vendor/ANXS.postgresql/meta/.galaxy_install_info +1 -1
- data/vendor/ANXS.postgresql/meta/main.yml +1 -1
- data/vendor/ANXS.postgresql/tasks/configure.yml +10 -10
- data/vendor/ANXS.postgresql/tasks/databases.yml +27 -27
- data/vendor/ANXS.postgresql/tasks/install_yum.yml +2 -2
- data/vendor/ANXS.postgresql/tasks/users.yml +4 -4
- data/vendor/ANXS.postgresql/tasks/users_privileges.yml +3 -3
- data/vendor/ANXS.postgresql/tests/Dockerfile-centos6 +20 -0
- data/vendor/ANXS.postgresql/tests/Dockerfile-ubuntu14.04 +17 -0
- data/vendor/ANXS.postgresql/tests/playbook.yml +1 -1
- data/vendor/ANXS.postgresql/tests/vars.yml +2 -0
- data/vendor/Stouts.backup/.bumpversion.cfg +1 -1
- data/vendor/Stouts.backup/.travis.yml +0 -1
- data/vendor/Stouts.backup/CONTRIBUTORS +2 -0
- data/vendor/Stouts.backup/README.md +1 -0
- data/vendor/Stouts.backup/defaults/main.yml +3 -3
- data/vendor/Stouts.backup/meta/.galaxy_install_info +1 -1
- data/vendor/Stouts.backup/runtests.sh +65 -0
- data/vendor/Stouts.backup/tasks/backup.yml +3 -0
- data/vendor/Stouts.backup/tasks/configure.yml +13 -12
- data/vendor/Stouts.backup/tasks/install.deb.yml +6 -8
- data/vendor/Stouts.backup/tasks/install.red.yml +28 -0
- data/vendor/Stouts.backup/tasks/remove.yml +3 -3
- data/vendor/Stouts.backup/templates/cron.j2 +1 -1
- data/vendor/Stouts.backup/templates/duply.sh.j2 +219 -218
- data/vendor/Stouts.backup/templates/pre.j2 +6 -0
- data/vendor/Stouts.backup/templates/restore.j2 +6 -0
- data/vendor/Stouts.backup/vars/Debian.yml +3 -0
- data/vendor/Stouts.backup/vars/Ubuntu.yml +1 -0
- metadata +67 -10
- data/lib/tape/ansible_runner.rb +0 -130
- data/lib/tape/info.rb +0 -9
- data/lib/tape/installer.rb +0 -160
- data/lib/tape/notifiers/slack.rb +0 -79
- data/lib/tape/overwriter.rb +0 -14
- data/lib/tape/qemu_provisioner.rb +0 -167
- data/lib/tape.rb +0 -127
@@ -17,13 +17,13 @@
|
|
17
17
|
###############################################################################
|
18
18
|
# TODO/IDEAS/KNOWN PROBLEMS:
|
19
19
|
# - possibility to restore time frames (incl. deleted files)
|
20
|
-
# realizable by listing each backup and restore from
|
20
|
+
# realizable by listing each backup and restore from
|
21
21
|
# oldest to the newest, problem: not performant
|
22
22
|
# - search file in all backups function and show available
|
23
23
|
# versions with backups date (list old avail since 0.6.06)
|
24
|
-
# - edit profile opens conf file in vi
|
24
|
+
# - edit profile opens conf file in vi
|
25
25
|
# - implement log-fd interpretation
|
26
|
-
# - add a duplicity option check against the options pending
|
26
|
+
# - add a duplicity option check against the options pending
|
27
27
|
# deprecation since 0.5.10 namely --time-separator
|
28
28
|
# --short-filenames
|
29
29
|
# --old-filenames
|
@@ -40,7 +40,7 @@
|
|
40
40
|
#
|
41
41
|
# 1.9.0 (24.8.2014)
|
42
42
|
# - bugfix: env vars were not exported when external script was executable
|
43
|
-
# - rework GPG_KEY handling, allow virtually anything now (uid, keyid etc.)
|
43
|
+
# - rework GPG_KEY handling, allow virtually anything now (uid, keyid etc.)
|
44
44
|
# see gpg manpage, section "How to specify a user ID"
|
45
45
|
# let gpg complain when the delivered values are invalid for whatever reason
|
46
46
|
# - started to rework tmp space checking, exposed folder & writable check
|
@@ -49,7 +49,7 @@
|
|
49
49
|
# 1.8.0 (13.7.2014)
|
50
50
|
# - add command verifyPath to expose 'verify --file-to-restore' action
|
51
51
|
# - add time parameter support to verify command
|
52
|
-
# - add section time formats to usage output
|
52
|
+
# - add section time formats to usage output
|
53
53
|
#
|
54
54
|
# 1.7.4 (24.6.2014)
|
55
55
|
# - remove ubuntu one support, service is discontinued
|
@@ -59,23 +59,23 @@
|
|
59
59
|
# - bugfix: test routines, gpg2 asked for passphrase although GPG_PW was set
|
60
60
|
#
|
61
61
|
# 1.7.2 (1.4.2014 "April,April")
|
62
|
-
# - bugfix: debian Bug#743190 "duply no longer allows restoration without
|
62
|
+
# - bugfix: debian Bug#743190 "duply no longer allows restoration without
|
63
63
|
# gpg passphrase in conf file"
|
64
64
|
# GPG_AGENT_INFO env var is now needed to trigger --use-agent
|
65
65
|
# - bugfix: gpg keyenc test routines didn't work if GPG_PW was not set
|
66
66
|
#
|
67
67
|
# 1.7.1 (30.3.2014)
|
68
|
-
# - bugfix: purge-* commands renamed to purgeFull, purgeIncr due to
|
69
|
-
# incompatibility with new minus batch separator
|
68
|
+
# - bugfix: purge-* commands renamed to purgeFull, purgeIncr due to
|
69
|
+
# incompatibility with new minus batch separator
|
70
70
|
#
|
71
71
|
# 1.7.0 (20.3.2014)
|
72
72
|
# - disabled gpg key id plausibility check, too many valid possibilities
|
73
73
|
# - featreq 7 "Halt if precondition fails":
|
74
74
|
# added and(+), or(-) batch command(separator) support
|
75
|
-
# - featreq 26 "pre/post script with shebang line":
|
76
|
-
# if a script is flagged executable it's executed in a subshell
|
75
|
+
# - featreq 26 "pre/post script with shebang line":
|
76
|
+
# if a script is flagged executable it's executed in a subshell
|
77
77
|
# now as opposed to sourced to bash, which is the default
|
78
|
-
# - bugfix: do not check if dpbx, swift credentials are set anymore
|
78
|
+
# - bugfix: do not check if dpbx, swift credentials are set anymore
|
79
79
|
# - bugfix: properly escape profile name, archdir if used as arguments
|
80
80
|
# - add DUPL_PRECMD conf setting for use with e.g. trickle
|
81
81
|
#
|
@@ -88,7 +88,7 @@
|
|
88
88
|
# homedir can thus be configured to be located anywhere
|
89
89
|
# - always import both secret and public key if avail from config profile
|
90
90
|
# - new explanatory comments in initial exclude file
|
91
|
-
# - bugfix 7: Duply only imports one key at a time
|
91
|
+
# - bugfix 7: Duply only imports one key at a time
|
92
92
|
#
|
93
93
|
# 1.5.11 (19.07.2013)
|
94
94
|
# - purge-incr command for remove-all-inc-of-but-n-full feature added
|
@@ -103,7 +103,7 @@
|
|
103
103
|
#
|
104
104
|
# 1.5.9 (22.11.2012)
|
105
105
|
# - bugfix 3588926: filter --exclude* params for restore/fetch ate too much
|
106
|
-
# - restore/fetch now also ignores --include* or --exclude='foobar'
|
106
|
+
# - restore/fetch now also ignores --include* or --exclude='foobar'
|
107
107
|
#
|
108
108
|
# 1.5.8 (26.10.2012)
|
109
109
|
# - bugfix 3575487: implement proper cloud files support
|
@@ -112,7 +112,7 @@
|
|
112
112
|
# - bugfix 3531450: Cannot use space in target URL (file:///) anymore
|
113
113
|
#
|
114
114
|
# 1.5.6 (24.5.2012)
|
115
|
-
# - commands purge, purge-full have no default value anymore for security
|
115
|
+
# - commands purge, purge-full have no default value anymore for security
|
116
116
|
# reasons; instead max value can be given via cmd line or must be set
|
117
117
|
# in profile; else an error is shown.
|
118
118
|
# - minor man page modifications
|
@@ -143,33 +143,33 @@
|
|
143
143
|
# - bugfix 3312208: signing detection broke symmetric gpg test routine
|
144
144
|
#
|
145
145
|
# 1.5.5 (2.5.2011)
|
146
|
-
# - bugfix: fetch problem with space char in path, escape all params
|
146
|
+
# - bugfix: fetch problem with space char in path, escape all params
|
147
147
|
# containing non word chars
|
148
148
|
# - list available profiles, if given profile cannot be found
|
149
149
|
# - added --use-agent configuration hint
|
150
|
-
# - bugfix 3174133: --exclude* params in conf DUPL_PARAMS broke
|
150
|
+
# - bugfix 3174133: --exclude* params in conf DUPL_PARAMS broke
|
151
151
|
# fetch/restore
|
152
152
|
# - version command now prints out 'using installed' info
|
153
|
-
# - featreq 3166169: autotrust imported keys, based on code submitted by
|
154
|
-
# Martin Ellis - imported keys are now automagically trusted ultimately
|
153
|
+
# - featreq 3166169: autotrust imported keys, based on code submitted by
|
154
|
+
# Martin Ellis - imported keys are now automagically trusted ultimately
|
155
155
|
# - new txt2man feature to create manpages for package maintainers
|
156
156
|
#
|
157
157
|
# 1.5.4.2 (6.1.2011)
|
158
158
|
# - new command changelog
|
159
159
|
# - bugfix 3109884: freebsd awk segfaulted on printf '%*', use print again
|
160
|
-
# - bugfix: freebsd awk hangs on 'awk -W version'
|
160
|
+
# - bugfix: freebsd awk hangs on 'awk -W version'
|
161
161
|
# - bugfix 3150244: mawk does not know '--version'
|
162
162
|
# - minor help text improvements
|
163
163
|
# - new env vars CMD_PREV,CMD_NEXT replacing CMD env var for scripts
|
164
164
|
#
|
165
165
|
# 1.5.4.1 (4.12.2010)
|
166
166
|
# - output awk, python, bash version now in prolog
|
167
|
-
# - shebang uses /usr/bin/env now for freebsd compatibility,
|
168
|
-
# bash not in /bin/bash
|
169
|
-
# - new --disable-encryption parameter,
|
167
|
+
# - shebang uses /usr/bin/env now for freebsd compatibility,
|
168
|
+
# bash not in /bin/bash
|
169
|
+
# - new --disable-encryption parameter,
|
170
170
|
# to override profile encr settings for one run
|
171
171
|
# - added exclude-if-present setting to conf template
|
172
|
-
# - bug 3126972: GPG_PW only needed for signing/symmetric encryption
|
172
|
+
# - bug 3126972: GPG_PW only needed for signing/symmetric encryption
|
173
173
|
# (even though duplicity still needs it)
|
174
174
|
#
|
175
175
|
# 1.5.4 (15.11.2010)
|
@@ -186,8 +186,8 @@
|
|
186
186
|
# - bugfix 2996459: Duply erroneously escapes '-' symbol in username
|
187
187
|
# - url_encode function is now pythonized
|
188
188
|
# - rsync uses FTP_PASSWORD now if duplicity 0.6.10+ , else issue warning
|
189
|
-
# - feature 3059262: Make pre and post aware of parameters,
|
190
|
-
# internal parameters + CMD of pre or post
|
189
|
+
# - feature 3059262: Make pre and post aware of parameters,
|
190
|
+
# internal parameters + CMD of pre or post
|
191
191
|
#
|
192
192
|
# 1.5.2.3 (16.4.2010)
|
193
193
|
# - bugfix: date again, should now work virtually anywhere
|
@@ -234,15 +234,15 @@
|
|
234
234
|
# aid=2864410&group_id=217745&atid=1041147
|
235
235
|
#
|
236
236
|
# 1.5.1 (21.09.2009) - duply (fka. ftplicity)
|
237
|
-
# - first things first: ftplicity (being able to support all backends since
|
237
|
+
# - first things first: ftplicity (being able to support all backends since
|
238
238
|
# some time) will be called duply (fka. ftplicity) from now on. The addendum
|
239
239
|
# is for the time being to circumvent confusion.
|
240
|
-
# - bugfix: exit code is 1 (error) not 0 (success), if at least on duplicity
|
240
|
+
# - bugfix: exit code is 1 (error) not 0 (success), if at least on duplicity
|
241
241
|
# command failed
|
242
242
|
# - s3[+http] now supported natively by translating user/pass to access_key/
|
243
|
-
# secret_key environment variables needed by duplicity s3 boto backend
|
243
|
+
# secret_key environment variables needed by duplicity s3 boto backend
|
244
244
|
# - bugfix: additional output lines do not confuse version check anymore
|
245
|
-
# - list command supports now age parameter (patch by stefan on feature
|
245
|
+
# - list command supports now age parameter (patch by stefan on feature
|
246
246
|
# request tracker)
|
247
247
|
# - bugfix: option/param pairs are now correctly passed on to duplicity
|
248
248
|
# - bugfix: s3[+http] needs no TARGET_PASS if command is read only
|
@@ -259,7 +259,7 @@
|
|
259
259
|
#
|
260
260
|
# 1.5.0 (01.07.2009)
|
261
261
|
# - removed ftp limitation, all duplicity backends should work now
|
262
|
-
# - bugfix: date for separator failed on openwrt busybox date, added a
|
262
|
+
# - bugfix: date for separator failed on openwrt busybox date, added a
|
263
263
|
# detecting workaround, milliseconds are not available w/ busybox date
|
264
264
|
#
|
265
265
|
# 1.4.2.1 (14.05.2009)
|
@@ -268,29 +268,29 @@
|
|
268
268
|
# 1.4.2 (22.04.2009)
|
269
269
|
# - gpg keys are now exported as gpgkey.[id].asc , the suffix reflects the
|
270
270
|
# armored ascii nature, the id helps if the key is switched for some reason
|
271
|
-
# im/export routines are updated accordingly (import is backward compatible
|
272
|
-
# to the old profile/gpgkey files)
|
273
|
-
# - profile argument is treated as path if it contains slashes
|
271
|
+
# im/export routines are updated accordingly (import is backward compatible
|
272
|
+
# to the old profile/gpgkey files)
|
273
|
+
# - profile argument is treated as path if it contains slashes
|
274
274
|
# (for details see usage)
|
275
|
-
# - non-ftplicity options (all but --preview currently) are now passed
|
276
|
-
# on to duplicity
|
275
|
+
# - non-ftplicity options (all but --preview currently) are now passed
|
276
|
+
# on to duplicity
|
277
277
|
# - removed need for stat in secure_conf, it is ls based now
|
278
278
|
# - added profile folder readable check
|
279
279
|
# - added gpg version & home info output
|
280
280
|
# - awk utility availability is now checked, because it was mandatory already
|
281
281
|
# - tmp space is now checked on writability and space requirement
|
282
|
-
# test fails on less than 25MB or configured $VOLSIZE,
|
283
|
-
# test warns if there is less than two times $VOLSIZE because
|
284
|
-
# that's required for --asynchronous-upload option
|
285
|
-
# - gpg functionality is tested now before executing duplicity
|
282
|
+
# test fails on less than 25MB or configured $VOLSIZE,
|
283
|
+
# test warns if there is less than two times $VOLSIZE because
|
284
|
+
# that's required for --asynchronous-upload option
|
285
|
+
# - gpg functionality is tested now before executing duplicity
|
286
286
|
# test drive contains encryption, decryption, comparison, cleanup
|
287
287
|
# this is meant to detect non trusted or other gpg errors early
|
288
288
|
# - added possibility of doing symmetric encryption with duplicity
|
289
289
|
# set GPG_KEY="" or simply comment it out
|
290
|
-
# - added hints in config template on the depreciation of
|
290
|
+
# - added hints in config template on the depreciation of
|
291
291
|
# --short-filenames, --time-separator duplicity options
|
292
292
|
#
|
293
|
-
# new versioning scheme 1.4.2b => 1.4.2,
|
293
|
+
# new versioning scheme 1.4.2b => 1.4.2,
|
294
294
|
# beta b's are replaced by a patch count number e.g. 1.4.2.1 will be assigned
|
295
295
|
# to the first bug fixing version and 1.4.2.2 to the second and so on
|
296
296
|
# also the releases will now have a release date formatted (Day.Month.Year)
|
@@ -311,26 +311,26 @@
|
|
311
311
|
#
|
312
312
|
# 1.4.0b1 - bugfix: incr forces incremental backups on duplicity,
|
313
313
|
# therefore backup translates to pre_bkp_post now
|
314
|
-
# - bugfix: new command bkp, which represents duplicity's
|
314
|
+
# - bugfix: new command bkp, which represents duplicity's
|
315
315
|
# default action (incr or full if full_if_older matches
|
316
316
|
# or no earlier backup chain is found)
|
317
317
|
#
|
318
318
|
# new versioning scheme 1.4 => 1.4.0, added new minor revision number
|
319
|
-
# this is meant to slow down the rapid version growing but still keep
|
319
|
+
# this is meant to slow down the rapid version growing but still keep
|
320
320
|
# versions cleanly separated.
|
321
|
-
# only additional features will raise the new minor revision number.
|
322
|
-
# all releases start as beta, each bugfix release will raise the beta
|
321
|
+
# only additional features will raise the new minor revision number.
|
322
|
+
# all releases start as beta, each bugfix release will raise the beta
|
323
323
|
# count, usually new features arrive before a version 'ripes' to stable
|
324
|
-
#
|
324
|
+
#
|
325
325
|
# 1.4.0b
|
326
326
|
# 1.4b - added startup info on version, time, selected profile
|
327
327
|
# - added time output to separation lines
|
328
|
-
# - introduced: command purge-full implements duplicity's
|
328
|
+
# - introduced: command purge-full implements duplicity's
|
329
329
|
# remove-all-but-n-full functionality (patch by unknown),
|
330
330
|
# uses config variable $MAX_FULL_BACKUPS (default = 1)
|
331
|
-
# - purge config var $MAX_AGE defaults to 1M (month) now
|
331
|
+
# - purge config var $MAX_AGE defaults to 1M (month) now
|
332
332
|
# - command full does not execute pre/post anymore
|
333
|
-
# use batch command pre_full_post if needed
|
333
|
+
# use batch command pre_full_post if needed
|
334
334
|
# - introduced batch mode cmd1_cmd2_etc
|
335
335
|
# (in turn removed the bvp command)
|
336
336
|
# - unknown/undefined command issues a warning/error now
|
@@ -338,13 +338,13 @@
|
|
338
338
|
# 1.3b3 - introduced pre/post commands to execute/debug scripts
|
339
339
|
# - introduced bvp (backup, verify, purge)
|
340
340
|
# - bugfix: removed need for awk gensub, now mawk compatible
|
341
|
-
# 1.3b2 - removed pre/post need executable bit set
|
341
|
+
# 1.3b2 - removed pre/post need executable bit set
|
342
342
|
# - profiles now under ~/.ftplicity as folders
|
343
343
|
# - root can keep profiles in /etc/ftplicity, folder must be
|
344
344
|
# created by hand, existing profiles must be moved there
|
345
345
|
# - removed ftplicity in path requirement
|
346
346
|
# - bugfix: bash < v.3 did not know '=~'
|
347
|
-
# - bugfix: purge works again
|
347
|
+
# - bugfix: purge works again
|
348
348
|
# 1.3 - introduces multiple profiles support
|
349
349
|
# - modified some script errors/docs
|
350
350
|
# - reordered gpg key check import routine
|
@@ -352,9 +352,9 @@
|
|
352
352
|
# - added error_gpg (adds how to setup gpg key howto)
|
353
353
|
# - bugfix: duplicity 0.4.4RC4+ parameter syntax changed
|
354
354
|
# - duplicity_version_check routine introduced
|
355
|
-
# - added time separator, shortnames, volsize, full_if_older
|
356
|
-
# duplicity options to config file (inspired by stevie
|
357
|
-
# from http://weareroot.de)
|
355
|
+
# - added time separator, shortnames, volsize, full_if_older
|
356
|
+
# duplicity options to config file (inspired by stevie
|
357
|
+
# from http://weareroot.de)
|
358
358
|
# 1.1.1 - bugfix: encryption reactivated
|
359
359
|
# 1.1 - introduced config directory
|
360
360
|
# 1.0 - first release
|
@@ -385,11 +385,11 @@ function set_config { # sets config vars
|
|
385
385
|
local CONFHOME="{{backup_home}}"
|
386
386
|
|
387
387
|
# confdir can be delivered as path (must contain /)
|
388
|
-
if [ `echo $FTPLCFG | grep /` ] ; then
|
388
|
+
if [ `echo $FTPLCFG | grep /` ] ; then
|
389
389
|
CONFDIR=$(readlink -f $FTPLCFG 2>/dev/null || \
|
390
390
|
( echo $FTPLCFG|grep -v '^/' 1>/dev/null 2>&1 \
|
391
391
|
&& echo $(pwd)/${FTPLCFG} ) || \
|
392
|
-
echo ${FTPLCFG})
|
392
|
+
echo ${FTPLCFG})
|
393
393
|
# or DEFAULT in home/.duply folder (NEW)
|
394
394
|
elif [ -d "${CONFHOME}" ]; then
|
395
395
|
CONFDIR="${CONFHOME}/${FTPLCFG}"
|
@@ -417,7 +417,7 @@ function set_config { # sets config vars
|
|
417
417
|
POST="$CONFDIR/post"
|
418
418
|
EXCLUDE="$CONFDIR/exclude"
|
419
419
|
KEYFILE="$CONFDIR/gpgkey.asc"
|
420
|
-
|
420
|
+
|
421
421
|
}
|
422
422
|
|
423
423
|
{% raw %}
|
@@ -429,7 +429,7 @@ function version_info { # print version information
|
|
429
429
|
END
|
430
430
|
}
|
431
431
|
|
432
|
-
function version_info_using {
|
432
|
+
function version_info_using {
|
433
433
|
cat <<END
|
434
434
|
$(version_info)
|
435
435
|
|
@@ -453,8 +453,8 @@ function usage_info { # print usage information
|
|
453
453
|
cat <<USAGE_EOF
|
454
454
|
VERSION:
|
455
455
|
$(version_info)
|
456
|
-
|
457
|
-
DESCRIPTION:
|
456
|
+
|
457
|
+
DESCRIPTION:
|
458
458
|
Duply deals as a wrapper for the mighty duplicity magic.
|
459
459
|
It simplifies running duplicity with cron or on command line by:
|
460
460
|
|
@@ -466,15 +466,15 @@ DESCRIPTION:
|
|
466
466
|
For each backup job one configuration profile must be created.
|
467
467
|
The profile folder will be stored under '~/.${ME_NAME}/<profile>'
|
468
468
|
(where ~ is the current users home directory).
|
469
|
-
Hint:
|
469
|
+
Hint:
|
470
470
|
If the folder '/etc/${ME_NAME}' exists, the profiles for the super
|
471
471
|
user root will be searched & created there.
|
472
472
|
|
473
473
|
USAGE:
|
474
|
-
first time usage (profile creation):
|
474
|
+
first time usage (profile creation):
|
475
475
|
$ME <profile> create
|
476
476
|
|
477
|
-
general usage in single or batch mode (see EXAMPLES):
|
477
|
+
general usage in single or batch mode (see EXAMPLES):
|
478
478
|
$ME <profile> <command>[[_|+|-]<command>[_|+|-]...] [<options> ...]
|
479
479
|
|
480
480
|
For batches the conditional separators can also be written as pseudo commands
|
@@ -484,36 +484,36 @@ USAGE:
|
|
484
484
|
All conf parameters can also be defined in the environment instead.
|
485
485
|
|
486
486
|
PROFILE:
|
487
|
-
Indicated by a path or a profile name (<profile>), which is resolved
|
487
|
+
Indicated by a path or a profile name (<profile>), which is resolved
|
488
488
|
to '~/.${ME_NAME}/<profile>' (~ expands to environment variable \$HOME).
|
489
489
|
|
490
490
|
Superuser root can place profiles under '/etc/${ME_NAME}'. Simply create
|
491
491
|
the folder manually before running $ME as superuser.
|
492
|
-
Note:
|
492
|
+
Note:
|
493
493
|
Already existing profiles in root's profile folder will cease to work
|
494
494
|
unless there are moved to the new location manually.
|
495
495
|
|
496
496
|
example 1: $ME humbug backup
|
497
497
|
|
498
|
-
Alternatively a _path_ might be used e.g. useful for quick testing,
|
498
|
+
Alternatively a _path_ might be used e.g. useful for quick testing,
|
499
499
|
restoring or exotic locations. Shell expansion should work as usual.
|
500
|
-
Hint:
|
501
|
-
The path must contain at least one path separator '/',
|
500
|
+
Hint:
|
501
|
+
The path must contain at least one path separator '/',
|
502
502
|
e.g. './test' instead of only 'test'.
|
503
503
|
|
504
504
|
example 2: $ME ~/.${ME_NAME}/humbug backup
|
505
505
|
|
506
506
|
SEPARATORS:
|
507
|
-
_ (underscore)
|
507
|
+
_ (underscore)
|
508
508
|
neutral separator
|
509
|
-
+ (plus sign), _and_
|
509
|
+
+ (plus sign), _and_
|
510
510
|
conditional AND
|
511
511
|
the next command will only be executed if the previous succeeded
|
512
|
-
- (minus sign), _or_
|
512
|
+
- (minus sign), _or_
|
513
513
|
conditional OR
|
514
514
|
the next command will only be executed if the previous failed
|
515
515
|
|
516
|
-
example:
|
516
|
+
example:
|
517
517
|
'pre+bkp-verify_post' translates to 'pre_and_bkp_or_verify_post'
|
518
518
|
|
519
519
|
COMMANDS:
|
@@ -528,45 +528,45 @@ COMMANDS:
|
|
528
528
|
bkp as above but without executing pre/post scripts
|
529
529
|
full force full backup
|
530
530
|
incr force incremental backup
|
531
|
-
list [<age>]
|
531
|
+
list [<age>]
|
532
532
|
list all files in backup (as it was at <age>, default: now)
|
533
533
|
status prints backup sets and chains currently in repository
|
534
|
-
verify [<age>] [--compare-data]
|
534
|
+
verify [<age>] [--compare-data]
|
535
535
|
list files changed, since age if given
|
536
|
-
verifyPath <rel_path_in_bkp> <local_path> [<age>] [--compare-data]
|
536
|
+
verifyPath <rel_path_in_bkp> <local_path> [<age>] [--compare-data]
|
537
537
|
list changes of a file or folder path in backup compared to a
|
538
538
|
local path, since age if given
|
539
|
-
restore <target_path> [<age>]
|
539
|
+
restore <target_path> [<age>]
|
540
540
|
restore the complete backup to <target_path> [as it was at <age>]
|
541
|
-
fetch <src_path> <target_path> [<age>]
|
541
|
+
fetch <src_path> <target_path> [<age>]
|
542
542
|
fetch single file/folder from backup [as it was at <age>]
|
543
|
-
purge [<max_age>] [--force]
|
543
|
+
purge [<max_age>] [--force]
|
544
544
|
list outdated backup files (older than \$MAX_AGE)
|
545
545
|
[use --force to actually delete these files]
|
546
|
-
purgeFull [<max_full_backups>] [--force]
|
546
|
+
purgeFull [<max_full_backups>] [--force]
|
547
547
|
list outdated backup files (\$MAX_FULL_BACKUPS being the number of
|
548
|
-
full backups and associated incrementals to keep, counting in
|
548
|
+
full backups and associated incrementals to keep, counting in
|
549
549
|
reverse chronological order)
|
550
550
|
[use --force to actually delete these files]
|
551
|
-
purgeIncr [<max_fulls_with_incrs>] [--force]
|
552
|
-
list outdated incremental backups (\$MAX_FULLS_WITH_INCRS being
|
551
|
+
purgeIncr [<max_fulls_with_incrs>] [--force]
|
552
|
+
list outdated incremental backups (\$MAX_FULLS_WITH_INCRS being
|
553
553
|
the number of full backups which associated incrementals will be
|
554
|
-
kept, counting in reverse chronological order)
|
554
|
+
kept, counting in reverse chronological order)
|
555
555
|
[use --force to actually delete these files]
|
556
|
-
cleanup [--force]
|
556
|
+
cleanup [--force]
|
557
557
|
list broken backup chain files archives (e.g. after unfinished run)
|
558
558
|
[use --force to actually delete these files]
|
559
559
|
|
560
560
|
changelog print changelog / todo list
|
561
|
-
txt2man feature for package maintainers - create a manpage based on the
|
562
|
-
usage output. download txt2man from http://mvertes.free.fr/, put
|
561
|
+
txt2man feature for package maintainers - create a manpage based on the
|
562
|
+
usage output. download txt2man from http://mvertes.free.fr/, put
|
563
563
|
it in the PATH and run '$ME txt2man' to create a man page.
|
564
564
|
version show version information of $ME and needed programs
|
565
565
|
|
566
566
|
OPTIONS:
|
567
567
|
--force passed to duplicity (see commands: purge, purge-full, cleanup)
|
568
568
|
--preview do nothing but print out generated duplicity command lines
|
569
|
-
--disable-encryption
|
569
|
+
--disable-encryption
|
570
570
|
disable encryption, overrides profile settings
|
571
571
|
|
572
572
|
TIME FORMATS:
|
@@ -581,30 +581,30 @@ PRE/POST SCRIPTS:
|
|
581
581
|
Useful internal duply variables will be readable in the scripts.
|
582
582
|
Some of interest may be
|
583
583
|
|
584
|
-
CONFDIR, SOURCE, TARGET_URL_<PROT|HOSTPATH|USER|PASS>,
|
584
|
+
CONFDIR, SOURCE, TARGET_URL_<PROT|HOSTPATH|USER|PASS>,
|
585
585
|
GPG_<KEYS_ENC|KEY_SIGN|PW>, CMD_<PREV|NEXT>, CMD_ERR
|
586
586
|
|
587
|
-
The CMD_* variables were introduced to allow different actions according to
|
588
|
-
the command the scripts were attached to e.g. 'pre_bkp_post_pre_verify_post'
|
589
|
-
will call the pre script two times, with CMD_NEXT variable set to 'bkp'
|
587
|
+
The CMD_* variables were introduced to allow different actions according to
|
588
|
+
the command the scripts were attached to e.g. 'pre_bkp_post_pre_verify_post'
|
589
|
+
will call the pre script two times, with CMD_NEXT variable set to 'bkp'
|
590
590
|
on the first and to 'verify' on the second run.
|
591
591
|
CMD_ERR holds the exit code of the CMD_PREV .
|
592
592
|
|
593
593
|
EXAMPLES:
|
594
|
-
create profile 'humbug':
|
594
|
+
create profile 'humbug':
|
595
595
|
$ME humbug create (now edit the resulting conf file)
|
596
|
-
backup 'humbug' now:
|
596
|
+
backup 'humbug' now:
|
597
597
|
$ME humbug backup
|
598
|
-
list available backup sets of profile 'humbug':
|
598
|
+
list available backup sets of profile 'humbug':
|
599
599
|
$ME humbug status
|
600
|
-
list and delete obsolete backup archives of 'humbug':
|
600
|
+
list and delete obsolete backup archives of 'humbug':
|
601
601
|
$ME humbug purge --force
|
602
|
-
restore latest backup of 'humbug' to /mnt/restore:
|
602
|
+
restore latest backup of 'humbug' to /mnt/restore:
|
603
603
|
$ME humbug restore /mnt/restore
|
604
|
-
restore /etc/passwd of 'humbug' from 4 days ago to /root/pw:
|
604
|
+
restore /etc/passwd of 'humbug' from 4 days ago to /root/pw:
|
605
605
|
$ME humbug fetch etc/passwd /root/pw 4D
|
606
606
|
(see "duplicity manpage", section TIME FORMATS)
|
607
|
-
a one line batch job on 'humbug' for cron execution:
|
607
|
+
a one line batch job on 'humbug' for cron execution:
|
608
608
|
$ME humbug backup_verify_purge --force
|
609
609
|
|
610
610
|
FILES:
|
@@ -655,10 +655,10 @@ GPG_PW='${DEFAULT_GPG_PW}'
|
|
655
655
|
# GPG_KEYS_ENC='<keyid1>[,<keyid2>,...]' - list of pubkeys to encrypt to
|
656
656
|
# GPG_KEY_SIGN='<keyid1>|disabled' - a secret key for signing
|
657
657
|
# GPG_PW='<passphrase>' - needed for signing, decryption and symmetric
|
658
|
-
# encryption. If you want to deliver different passphrases for e.g.
|
658
|
+
# encryption. If you want to deliver different passphrases for e.g.
|
659
659
|
# several keys or symmetric encryption plus key signing you can use
|
660
660
|
# gpg-agent. Simply make sure that GPG_AGENT_INFO is set in environment.
|
661
|
-
# also see "A NOTE ON SYMMETRIC ENCRYPTION AND SIGNING" in duplicity manpage
|
661
|
+
# also see "A NOTE ON SYMMETRIC ENCRYPTION AND SIGNING" in duplicity manpage
|
662
662
|
# notes on en/decryption
|
663
663
|
# private key and passphrase will only be needed for decryption or signing.
|
664
664
|
# decryption happens on restore and incrementals (compare archdir contents).
|
@@ -671,7 +671,7 @@ GPG_PW='${DEFAULT_GPG_PW}'
|
|
671
671
|
#GPG_PW_SIGN='<signpass>'
|
672
672
|
|
673
673
|
# gpg options passed from duplicity to gpg process (default='')
|
674
|
-
# e.g. "--trust-model pgp|classic|direct|always"
|
674
|
+
# e.g. "--trust-model pgp|classic|direct|always"
|
675
675
|
# or "--compress-algo=bzip2 --bzip2-compress-level=9"
|
676
676
|
# or "--personal-cipher-preferences AES256,AES192,AES..."
|
677
677
|
# or "--homedir ~/.duply" - keep keyring and gpg settings duply specific
|
@@ -686,7 +686,7 @@ GPG_PW='${DEFAULT_GPG_PW}'
|
|
686
686
|
# for details see duplicity manpage, section URL Format
|
687
687
|
# http://duplicity.nongnu.org/duplicity.1.html#sect8
|
688
688
|
# probably one out of
|
689
|
-
# # for cloudfiles backend user id is CLOUDFILES_USERNAME, password is
|
689
|
+
# # for cloudfiles backend user id is CLOUDFILES_USERNAME, password is
|
690
690
|
# # CLOUDFILES_APIKEY, you might need to set CLOUDFILES_AUTHURL manually
|
691
691
|
# cf+http://[user:password@]container_name
|
692
692
|
# dpbx:///some_dir
|
@@ -695,7 +695,7 @@ GPG_PW='${DEFAULT_GPG_PW}'
|
|
695
695
|
# gdocs://user[:password]@other.host/some_dir
|
696
696
|
# # for the google cloud storage (since duplicity 0.6.22)
|
697
697
|
# # user/password are GS_ACCESS_KEY_ID/GS_SECRET_ACCESS_KEY
|
698
|
-
# gs://bucket[/prefix]
|
698
|
+
# gs://bucket[/prefix]
|
699
699
|
# hsi://user[:password]@other.host/some_dir
|
700
700
|
# imap[s]://user[:password]@host.com[/from_address_prefix]
|
701
701
|
# mega://user[:password]@mega.co.nz/some_dir
|
@@ -708,16 +708,16 @@ GPG_PW='${DEFAULT_GPG_PW}'
|
|
708
708
|
# # scp and sftp are aliases for the ssh backend
|
709
709
|
# ssh://user[:password]@other.host[:port]/[/]some_dir
|
710
710
|
# # for authenticated swift define TARGET_USER or SWIFT_USERNAME,
|
711
|
-
# # TARGET_PASS or SWIFT_PASSWORD, SWIFT_AUTHURL (mandatory, the path to
|
711
|
+
# # TARGET_PASS or SWIFT_PASSWORD, SWIFT_AUTHURL (mandatory, the path to
|
712
712
|
# # your identity service, omitting leads to an error with swift),
|
713
713
|
# # optionally SWIFT_AUTHVERSION (which defaults to "1")
|
714
714
|
# swift://container_name
|
715
715
|
# tahoe://alias/directory
|
716
716
|
# webdav[s]://user[:password]@other.host/some_dir
|
717
|
-
# ATTENTION: characters other than A-Za-z0-9.-_.~ in the URL have
|
717
|
+
# ATTENTION: characters other than A-Za-z0-9.-_.~ in the URL have
|
718
718
|
# to be replaced by their url encoded pendants, see
|
719
|
-
# http://en.wikipedia.org/wiki/Url_encoding
|
720
|
-
# if you define the credentials as TARGET_USER, TARGET_PASS below
|
719
|
+
# http://en.wikipedia.org/wiki/Url_encoding
|
720
|
+
# if you define the credentials as TARGET_USER, TARGET_PASS below
|
721
721
|
# duply will try to url_encode them for you if the need arises
|
722
722
|
TARGET='${DEFAULT_TARGET}'
|
723
723
|
# optionally the username/password can be defined as extra variables
|
@@ -728,7 +728,7 @@ TARGET='${DEFAULT_TARGET}'
|
|
728
728
|
# base directory to backup
|
729
729
|
SOURCE='${DEFAULT_SOURCE}'
|
730
730
|
|
731
|
-
# a command that runs duplicity e.g.
|
731
|
+
# a command that runs duplicity e.g.
|
732
732
|
# shape bandwidth use via trickle
|
733
733
|
# "trickle -s -u 640 -d 5120" # 5Mb up, 40Mb down"
|
734
734
|
#DUPL_PRECMD=""
|
@@ -738,11 +738,11 @@ SOURCE='${DEFAULT_SOURCE}'
|
|
738
738
|
#FILENAME='.duplicity-ignore'
|
739
739
|
#DUPL_PARAMS="\$DUPL_PARAMS --exclude-if-present '\$FILENAME'"
|
740
740
|
|
741
|
-
# Time frame for old backups to keep, Used for the "purge" command.
|
741
|
+
# Time frame for old backups to keep, Used for the "purge" command.
|
742
742
|
# see duplicity man page, chapter TIME_FORMATS)
|
743
743
|
#MAX_AGE=1M
|
744
744
|
|
745
|
-
# Number of full backups to keep. Used for the "purge-full" command.
|
745
|
+
# Number of full backups to keep. Used for the "purge-full" command.
|
746
746
|
# See duplicity man page, action "remove-all-but-n-full".
|
747
747
|
#MAX_FULL_BACKUPS=1
|
748
748
|
|
@@ -751,17 +751,17 @@ SOURCE='${DEFAULT_SOURCE}'
|
|
751
751
|
# See duplicity man page, action "remove-all-inc-of-but-n-full".
|
752
752
|
#MAX_FULLS_WITH_INCRS=1
|
753
753
|
|
754
|
-
# activates duplicity --full-if-older-than option (since duplicity v0.4.4.RC3)
|
755
|
-
# forces a full backup if last full backup reaches a specified age, for the
|
754
|
+
# activates duplicity --full-if-older-than option (since duplicity v0.4.4.RC3)
|
755
|
+
# forces a full backup if last full backup reaches a specified age, for the
|
756
756
|
# format of MAX_FULLBKP_AGE see duplicity man page, chapter TIME_FORMATS
|
757
757
|
# Uncomment the following two lines to enable this setting.
|
758
758
|
#MAX_FULLBKP_AGE=1M
|
759
|
-
#DUPL_PARAMS="\$DUPL_PARAMS --full-if-older-than \$MAX_FULLBKP_AGE "
|
759
|
+
#DUPL_PARAMS="\$DUPL_PARAMS --full-if-older-than \$MAX_FULLBKP_AGE "
|
760
760
|
|
761
761
|
# sets duplicity --volsize option (available since v0.4.3.RC7)
|
762
762
|
# set the size of backup chunks to VOLSIZE MB instead of the default 25MB.
|
763
763
|
# VOLSIZE must be number of MB's to set the volume size to.
|
764
|
-
# Uncomment the following two lines to enable this setting.
|
764
|
+
# Uncomment the following two lines to enable this setting.
|
765
765
|
#VOLSIZE=50
|
766
766
|
#DUPL_PARAMS="\$DUPL_PARAMS --volsize \$VOLSIZE "
|
767
767
|
|
@@ -773,36 +773,36 @@ SOURCE='${DEFAULT_SOURCE}'
|
|
773
773
|
# for a successful restoration process. (default is '/tmp', if not set)
|
774
774
|
#TEMP_DIR=/tmp
|
775
775
|
|
776
|
-
# Modifies archive-dir option (since 0.6.0) Defines a folder that holds
|
777
|
-
# unencrypted meta data of the backup, enabling new incrementals without the
|
778
|
-
# need to decrypt backend metadata first. If empty or deleted somehow, the
|
776
|
+
# Modifies archive-dir option (since 0.6.0) Defines a folder that holds
|
777
|
+
# unencrypted meta data of the backup, enabling new incrementals without the
|
778
|
+
# need to decrypt backend metadata first. If empty or deleted somehow, the
|
779
779
|
# private key and it's password are needed.
|
780
|
-
# NOTE: This is confidential data. Put it somewhere safe. It can grow quite
|
780
|
+
# NOTE: This is confidential data. Put it somewhere safe. It can grow quite
|
781
781
|
# big over time so you might want to put it not in the home dir.
|
782
782
|
# default '~/.cache/duplicity/duply_<profile>/'
|
783
783
|
# if set '\${ARCH_DIR}/<profile>'
|
784
784
|
#ARCH_DIR=/some/space/safe/.duply-cache
|
785
785
|
|
786
786
|
# DEPRECATED setting
|
787
|
-
# sets duplicity --time-separator option (since v0.4.4.RC2) to allow users
|
788
|
-
# to change the time separator from ':' to another character that will work
|
787
|
+
# sets duplicity --time-separator option (since v0.4.4.RC2) to allow users
|
788
|
+
# to change the time separator from ':' to another character that will work
|
789
789
|
# on their system. HINT: For Windows SMB shares, use --time-separator='_'.
|
790
790
|
# NOTE: '-' is not valid as it conflicts with date separator.
|
791
|
-
# ATTENTION: only use this with duplicity < 0.5.10, since then default file
|
792
|
-
# naming is compatible and this option is pending depreciation
|
791
|
+
# ATTENTION: only use this with duplicity < 0.5.10, since then default file
|
792
|
+
# naming is compatible and this option is pending depreciation
|
793
793
|
#DUPL_PARAMS="\$DUPL_PARAMS --time-separator _ "
|
794
794
|
|
795
795
|
# DEPRECATED setting
|
796
796
|
# activates duplicity --short-filenames option, when uploading to a file
|
797
797
|
# system that can't have filenames longer than 30 characters (e.g. Mac OS 8)
|
798
798
|
# or have problems with ':' as part of the filename (e.g. Microsoft Windows)
|
799
|
-
# ATTENTION: only use this with duplicity < 0.5.10, later versions default file
|
799
|
+
# ATTENTION: only use this with duplicity < 0.5.10, later versions default file
|
800
800
|
# naming is compatible and this option is pending depreciation
|
801
801
|
#DUPL_PARAMS="\$DUPL_PARAMS --short-filenames "
|
802
802
|
|
803
803
|
# more duplicity command line options can be added in the following way
|
804
804
|
# don't forget to leave a separating space char at the end
|
805
|
-
#DUPL_PARAMS="\$DUPL_PARAMS --put_your_options_here "
|
805
|
+
#DUPL_PARAMS="\$DUPL_PARAMS --put_your_options_here "
|
806
806
|
|
807
807
|
EOF
|
808
808
|
|
@@ -823,7 +823,7 @@ EOF
|
|
823
823
|
cat <<EOF
|
824
824
|
|
825
825
|
Congratulations. You just created the profile '$FTPLCFG'.
|
826
|
-
The initial config file has been created as
|
826
|
+
The initial config file has been created as
|
827
827
|
'$CONF'.
|
828
828
|
You should now adjust this config file to your needs.
|
829
829
|
|
@@ -839,12 +839,12 @@ function hint_profile {
|
|
839
839
|
cat <<EOF
|
840
840
|
IMPORTANT:
|
841
841
|
Copy the _whole_ profile folder after the first backup to a safe place.
|
842
|
-
It contains everything needed to restore your backups. You will need
|
843
|
-
it if you have to restore the backup from another system (e.g. after a
|
844
|
-
system crash). Keep access to these files restricted as they contain
|
842
|
+
It contains everything needed to restore your backups. You will need
|
843
|
+
it if you have to restore the backup from another system (e.g. after a
|
844
|
+
system crash). Keep access to these files restricted as they contain
|
845
845
|
_all_ informations (gpg data, ftp data) to access and modify your backups.
|
846
846
|
|
847
|
-
Repeat this step after _all_ configuration changes. Some configuration
|
847
|
+
Repeat this step after _all_ configuration changes. Some configuration
|
848
848
|
options are crucial for restoration.
|
849
849
|
|
850
850
|
EOF
|
@@ -884,7 +884,7 @@ function error {
|
|
884
884
|
|
885
885
|
function error_gpg {
|
886
886
|
[ -n "$2" ] && local hint="\n $2\n\n "
|
887
|
-
|
887
|
+
|
888
888
|
error "$1
|
889
889
|
|
890
890
|
Hint${hint:+s}:
|
@@ -892,7 +892,7 @@ Hint${hint:+s}:
|
|
892
892
|
Don't forget the used _password_ as you will need it.
|
893
893
|
When done enter the 8 digit id & the password in the profile conf file.
|
894
894
|
|
895
|
-
The key id can be found doing a 'gpg --list-keys'. In the example output
|
895
|
+
The key id can be found doing a 'gpg --list-keys'. In the example output
|
896
896
|
below the key id would be FFFFFFFF for the public key.
|
897
897
|
|
898
898
|
pub 1024D/FFFFFFFF 2007-12-17
|
@@ -905,7 +905,7 @@ function error_gpg_key {
|
|
905
905
|
local KEY_ID="$1"
|
906
906
|
local KIND="$2"
|
907
907
|
error_gpg "${KIND} gpg key '${KEY_ID}' cannot be found." \
|
908
|
-
"Doublecheck if the above key is listed by 'gpg --list-keys' or available
|
908
|
+
"Doublecheck if the above key is listed by 'gpg --list-keys' or available
|
909
909
|
as gpg key file '$(basename "$(gpg_keyfile "${KEY_ID}")")' in the profile folder.
|
910
910
|
If not you can put it there and $ME will autoimport it on the next run.
|
911
911
|
Alternatively import it manually as the user you plan to run $ME with."
|
@@ -917,9 +917,9 @@ function error_gpg_test {
|
|
917
917
|
error "$1
|
918
918
|
|
919
919
|
Hint${hint:+s}:
|
920
|
-
${hint}This error means that gpg is probably misconfigured or not working
|
920
|
+
${hint}This error means that gpg is probably misconfigured or not working
|
921
921
|
correctly. The error message above should help to solve the problem.
|
922
|
-
However, if for some reason $ME should misinterpret the situation you
|
922
|
+
However, if for some reason $ME should misinterpret the situation you
|
923
923
|
can define GPG_TEST='disabled' in the conf file to bypass the test.
|
924
924
|
Please do not forget to report the bug in order to resolve the problem
|
925
925
|
in future versions of $ME.
|
@@ -957,7 +957,7 @@ function duplicity_version_get {
|
|
957
957
|
|
958
958
|
function duplicity_version_check {
|
959
959
|
if [ $DUPL_VERSION_VALUE -eq 0 ]; then
|
960
|
-
inform "duplicity version check failed (please report, this is a bug)"
|
960
|
+
inform "duplicity version check failed (please report, this is a bug)"
|
961
961
|
elif [ $DUPL_VERSION_VALUE -le 404 ] && [ ${DUPL_VERSION_RC:-4} -lt 4 ]; then
|
962
962
|
error "The installed version $DUPL_VERSION is incompatible with $ME v$ME_VERSION.
|
963
963
|
You should upgrade your version of duplicity to at least v0.4.4RC4 or
|
@@ -976,9 +976,9 @@ function duplicity_version_lt {
|
|
976
976
|
function run_script { # run pre/post scripts
|
977
977
|
local ERR=0
|
978
978
|
local SCRIPT="$1"
|
979
|
-
if [ ! -z "$PREVIEW" ] ; then
|
979
|
+
if [ ! -z "$PREVIEW" ] ; then
|
980
980
|
echo "$([ ! -x "$SCRIPT" ] && echo ". ")$SCRIPT"
|
981
|
-
elif [ -r "$SCRIPT" ] ; then
|
981
|
+
elif [ -r "$SCRIPT" ] ; then
|
982
982
|
echo -n "Running '$SCRIPT' "
|
983
983
|
if [ -x "$SCRIPT" ]; then
|
984
984
|
OUT=$("$SCRIPT" 2>&1)
|
@@ -1077,7 +1077,7 @@ function duplicity_params_conf {
|
|
1077
1077
|
echo "$DUPL_PARAMS" | awk '{gsub(/--(ex|in)clude[a-z-]*(([ \t]+|=)[^-][^ \t]+)?/,"");print}'
|
1078
1078
|
return
|
1079
1079
|
fi
|
1080
|
-
|
1080
|
+
|
1081
1081
|
echo "$DUPL_PARAMS"
|
1082
1082
|
}
|
1083
1083
|
|
@@ -1115,7 +1115,7 @@ function secureconf { # secure the configuration dir
|
|
1115
1115
|
local PERMS="$(ls -la "$CONFDIR/." | awk 'NR==2{print $1}')"
|
1116
1116
|
if [ "${PERMS/#drwx------*/OK}" != 'OK' ] ; then
|
1117
1117
|
chmod u+rwX,go= "$CONFDIR"; local ERR=$?
|
1118
|
-
warning "The profile's folder
|
1118
|
+
warning "The profile's folder
|
1119
1119
|
'$CONFDIR'
|
1120
1120
|
permissions are not safe ($PERMS). Secure them now. - ($(error_to_string $ERR))"
|
1121
1121
|
fi
|
@@ -1129,7 +1129,7 @@ function date_fix {
|
|
1129
1129
|
echo $date && return
|
1130
1130
|
# date bsd,osx with -r epoch
|
1131
1131
|
date=$(date ${2:+-r $2} ${1:++"$1"} 2> /dev/null) && \
|
1132
|
-
echo $date && return
|
1132
|
+
echo $date && return
|
1133
1133
|
# date busybox with -d epoch -D %s
|
1134
1134
|
date=$(date ${2:+-d $2 -D %s} ${1:++"$1"} 2> /dev/null) && \
|
1135
1135
|
echo $date && return
|
@@ -1210,19 +1210,19 @@ function isnumber {
|
|
1210
1210
|
}
|
1211
1211
|
|
1212
1212
|
#function tmp_space {
|
1213
|
-
#
|
1213
|
+
#
|
1214
1214
|
# if ! isnumber $VOLSIZE; then
|
1215
1215
|
# inform "failed to determine free space (please report, this is a bug)"
|
1216
1216
|
# return
|
1217
1217
|
# fi
|
1218
|
-
#
|
1218
|
+
#
|
1219
1219
|
# get free temp space
|
1220
1220
|
# TEMP_FREE="$(df -P -k "$TEMP_DIR" 2>/dev/null | awk 'END{pos=(NF-2);if(pos>0) print $pos;}')"
|
1221
1221
|
# # check for free space or FAIL
|
1222
1222
|
# if [ $((${TEMP_FREE:-0}-${VOLSIZE:-0}*1024)) -lt 0-lt 0 ]; then
|
1223
1223
|
# error "Temporary file space '$TEMP_DIR' free space is smaller ($((TEMP_FREE/1024))MB)
|
1224
1224
|
#than one duplicity volume (${VOLSIZE}MB).
|
1225
|
-
#
|
1225
|
+
#
|
1226
1226
|
# Hint: Free space or change TEMP_DIR setting."
|
1227
1227
|
#fi
|
1228
1228
|
#
|
@@ -1261,17 +1261,17 @@ function gpg_import {
|
|
1261
1261
|
local KEYFILES=( "$CONFDIR/gpgkey" $(gpg_keyfile "$KEY_ID") \
|
1262
1262
|
$(gpg_keyfile "$KEY_ID" PUB) $(gpg_keyfile "$KEY_ID" SEC))
|
1263
1263
|
|
1264
|
-
# Try autoimport from existing old gpgkey files
|
1264
|
+
# Try autoimport from existing old gpgkey files
|
1265
1265
|
# and new gpgkey.XXX.asc files (since v1.4.2)
|
1266
1266
|
# and even newer gpgkey.XXX.[pub|sec].asc
|
1267
1267
|
for (( i = 0 ; i < ${#KEYFILES[@]} ; i++ )); do
|
1268
1268
|
FILE=${KEYFILES[$i]}
|
1269
1269
|
if [ -f "$FILE" ]; then
|
1270
1270
|
FOUND=1
|
1271
|
-
|
1271
|
+
|
1272
1272
|
CMD_MSG="Import keyfile '$FILE' to keyring"
|
1273
1273
|
run_cmd "$GPG" $GPG_OPTS --batch --import "$FILE"
|
1274
|
-
if [ "$?" != "0" ]; then
|
1274
|
+
if [ "$?" != "0" ]; then
|
1275
1275
|
warning "Import failed.${CMD_OUT:+\n$CMD_OUT}"
|
1276
1276
|
ERR=1
|
1277
1277
|
# continue with next
|
@@ -1287,13 +1287,13 @@ function gpg_import {
|
|
1287
1287
|
# try to set trust automagically
|
1288
1288
|
CMD_MSG="Autoset trust of key '$KEY_ID' to ultimate"
|
1289
1289
|
run_cmd echo $(gpg_fingerprint "$KEY_ID"):6: \| "$GPG" $GPG_OPTS --import-ownertrust --batch --logger-fd 1
|
1290
|
-
if [ "$?" = "0" ] && [ -z "$PREVIEW" ]; then
|
1290
|
+
if [ "$?" = "0" ] && [ -z "$PREVIEW" ]; then
|
1291
1291
|
# success on all levels, we're done
|
1292
1292
|
return $ERR
|
1293
1293
|
fi
|
1294
1294
|
|
1295
1295
|
# failover: user has to set trust manually
|
1296
|
-
echo -e "For $ME to work you have to set the trust level
|
1296
|
+
echo -e "For $ME to work you have to set the trust level
|
1297
1297
|
with the command \"trust\" to \"ultimate\" (5) now.
|
1298
1298
|
Exit the edit mode of gpg with \"quit\"."
|
1299
1299
|
CMD_MSG="Running gpg to manually edit key '$KEY_ID'"
|
@@ -1338,7 +1338,7 @@ function gpg_export_if_needed {
|
|
1338
1338
|
fi
|
1339
1339
|
done
|
1340
1340
|
done
|
1341
|
-
|
1341
|
+
|
1342
1342
|
[ -n "$SUCCESS" ] && inform "$ME exported new keys to your profile.
|
1343
1343
|
You should backup your changed profile folder now and store it in a safe place."
|
1344
1344
|
}
|
@@ -1430,7 +1430,7 @@ function gpg_symmetric {
|
|
1430
1430
|
# checks for max two params if they are set, typically GPG_PW & GPG_PW_SIGN
|
1431
1431
|
function gpg_param_passwd {
|
1432
1432
|
var_isset GPG_USEAGENT && exit 1
|
1433
|
-
|
1433
|
+
|
1434
1434
|
if ( [ -n "$1" ] && var_isset "$1" ) || ( [ -n "$2" ] && var_isset "$2" ); then
|
1435
1435
|
echo "--passphrase-fd 0 --batch"
|
1436
1436
|
fi
|
@@ -1439,7 +1439,7 @@ function gpg_param_passwd {
|
|
1439
1439
|
# select the earlist defined and create an "echo <value> |" string
|
1440
1440
|
function gpg_pass_pipein {
|
1441
1441
|
var_isset GPG_USEAGENT && exit 1
|
1442
|
-
|
1442
|
+
|
1443
1443
|
for var in "$@"
|
1444
1444
|
do
|
1445
1445
|
if var_isset "$var"; then
|
@@ -1447,7 +1447,7 @@ function gpg_pass_pipein {
|
|
1447
1447
|
return 0
|
1448
1448
|
fi
|
1449
1449
|
done
|
1450
|
-
|
1450
|
+
|
1451
1451
|
return 1
|
1452
1452
|
}
|
1453
1453
|
|
@@ -1461,7 +1461,7 @@ function gpg_agent_avail {
|
|
1461
1461
|
ps -p $(echo $GPG_AGENT_INFO|awk -F: '{print $2}') > /dev/null 2>&1 &&\
|
1462
1462
|
ERR=0 || ERR=2
|
1463
1463
|
fi
|
1464
|
-
|
1464
|
+
|
1465
1465
|
return $ERR
|
1466
1466
|
}
|
1467
1467
|
|
@@ -1497,7 +1497,7 @@ case "$cmd" in
|
|
1497
1497
|
'$CONFDIR'.
|
1498
1498
|
|
1499
1499
|
Hint:
|
1500
|
-
If you _really_ want to create a new profile by this name you will
|
1500
|
+
If you _really_ want to create a new profile by this name you will
|
1501
1501
|
have to manually delete the existing profile folder first."
|
1502
1502
|
exit 1
|
1503
1503
|
else
|
@@ -1524,8 +1524,8 @@ Hint:
|
|
1524
1524
|
# if we reach here, user either forgot profile or chose wrong profileless command
|
1525
1525
|
if [ ${#@} -le 1 ]; then
|
1526
1526
|
error "\
|
1527
|
-
Missing or wrong parameters.
|
1528
|
-
Only the commands
|
1527
|
+
Missing or wrong parameters.
|
1528
|
+
Only the commands
|
1529
1529
|
changelog, create, usage, txt2man, version
|
1530
1530
|
can be called without selecting an existing profile first.
|
1531
1531
|
Your command was '$cmd'.
|
@@ -1550,7 +1550,7 @@ duplicity_version_check
|
|
1550
1550
|
### read configuration
|
1551
1551
|
set_config
|
1552
1552
|
# check validity
|
1553
|
-
if [ ! -d "$CONFDIR" ]; then
|
1553
|
+
if [ ! -d "$CONFDIR" ]; then
|
1554
1554
|
error "Selected profile '$FTPLCFG' does not resolve to a profile folder in
|
1555
1555
|
'$CONFDIR'.
|
1556
1556
|
|
@@ -1562,7 +1562,7 @@ elif [ ! -x "$CONFDIR" ]; then
|
|
1562
1562
|
error "\
|
1563
1563
|
Profile folder in '$CONFDIR' cannot be accessed.
|
1564
1564
|
|
1565
|
-
Hint:
|
1565
|
+
Hint:
|
1566
1566
|
Check the filesystem permissions and set directory accessible e.g. 'chmod 700'."
|
1567
1567
|
elif [ ! -f "$CONF" ] ; then
|
1568
1568
|
error "'$CONF' not found."
|
@@ -1614,21 +1614,21 @@ eval ${TARGET_SPLIT_URL}
|
|
1614
1614
|
|
1615
1615
|
# check if backend specific software is in path
|
1616
1616
|
[ -n "$(echo ${TARGET_URL_PROT} | grep -i -e '^ftp://$')" ] && \
|
1617
|
-
[ -z "$(which ncftp 2>/dev/null)" ] && error_path "Protocol 'ftp' needs ncftp. Installed und available in path?"
|
1617
|
+
[ -z "$(which ncftp 2>/dev/null)" ] && error_path "Protocol 'ftp' needs ncftp. Installed und available in path?"
|
1618
1618
|
[ -n "$(echo ${TARGET_URL_PROT} | grep -i -e '^ftps://$')" ] && \
|
1619
1619
|
[ -z "$(which lftp 2>/dev/null)" ] && error_path "Protocol 'ftps' needs lftp. Installed und available in path?"
|
1620
1620
|
|
1621
1621
|
# fetch commmand from parameters ########################################################
|
1622
|
-
# Hint: cmds is also used to check if authentification info sufficient in the next step
|
1622
|
+
# Hint: cmds is also used to check if authentification info sufficient in the next step
|
1623
1623
|
cmds="$2"; shift 2
|
1624
1624
|
|
1625
|
-
# translate backup to batch command
|
1625
|
+
# translate backup to batch command
|
1626
1626
|
cmds=${cmds//backup/pre_bkp_post}
|
1627
1627
|
|
1628
1628
|
# complain if command(s) missing
|
1629
1629
|
[ -z $cmds ] && error " No command given.
|
1630
1630
|
|
1631
|
-
Hint:
|
1631
|
+
Hint:
|
1632
1632
|
Use '$ME usage' to get usage help."
|
1633
1633
|
|
1634
1634
|
# process params
|
@@ -1659,31 +1659,31 @@ done
|
|
1659
1659
|
|
1660
1660
|
# plausibility check config - VARS & KEY ################################################
|
1661
1661
|
# check if src, trg, trg pw
|
1662
|
-
# auth info sufficient
|
1662
|
+
# auth info sufficient
|
1663
1663
|
# gpg key, gpg pwd (might be empty) set in config
|
1664
1664
|
# OR key in local gpg db
|
1665
|
-
# OR key can be imported from keyfile
|
1665
|
+
# OR key can be imported from keyfile
|
1666
1666
|
# OR fail
|
1667
1667
|
if [ -z "$SOURCE" ] || [ "$SOURCE" == "${DEFAULT_SOURCE}" ]; then
|
1668
|
-
error " Source Path (setting SOURCE) not set or still default value in conf file
|
1668
|
+
error " Source Path (setting SOURCE) not set or still default value in conf file
|
1669
1669
|
'$CONF'."
|
1670
1670
|
|
1671
1671
|
elif [ -z "$TARGET" ] || [ "$TARGET" == "${DEFAULT_TARGET}" ]; then
|
1672
|
-
error " Backup Target (setting TARGET) not set or still default value in conf file
|
1672
|
+
error " Backup Target (setting TARGET) not set or still default value in conf file
|
1673
1673
|
'$CONF'."
|
1674
1674
|
|
1675
1675
|
elif var_isset 'TARGET_USER' && var_isset 'TARGET_URL_USER' && \
|
1676
1676
|
[ "${TARGET_USER}" != "${TARGET_URL_USER}" ]; then
|
1677
|
-
error " TARGET_USER ('${TARGET_USER}') _and_ user in TARGET url ('${TARGET_URL_USER}')
|
1677
|
+
error " TARGET_USER ('${TARGET_USER}') _and_ user in TARGET url ('${TARGET_URL_USER}')
|
1678
1678
|
are configured with different values. There can be only one.
|
1679
|
-
|
1679
|
+
|
1680
1680
|
Hint: Remove conflicting setting."
|
1681
1681
|
|
1682
1682
|
elif var_isset 'TARGET_PASS' && var_isset 'TARGET_URL_PASS' && \
|
1683
1683
|
[ "${TARGET_PASS}" != "${TARGET_URL_PASS}" ]; then
|
1684
|
-
error " TARGET_PASS ('${TARGET_PASS}') _and_ password in TARGET url ('${TARGET_URL_PASS}')
|
1684
|
+
error " TARGET_PASS ('${TARGET_PASS}') _and_ password in TARGET url ('${TARGET_URL_PASS}')
|
1685
1685
|
are configured with different values. There can be only one.
|
1686
|
-
|
1686
|
+
|
1687
1687
|
Hint: Remove conflicting setting."
|
1688
1688
|
fi
|
1689
1689
|
|
@@ -1699,13 +1699,13 @@ if ( ( ! var_isset 'TARGET_USER' && ! var_isset 'TARGET_URL_USER' ) && \
|
|
1699
1699
|
[ -z "$(echo ${cmds} | grep -e '\(bkp\|incr\|full\|purge\|cleanup\)')" ]; then
|
1700
1700
|
: # still fine, it's possible to read only access configured buckets anonymously
|
1701
1701
|
else
|
1702
|
-
error " Backup target credentials needed but not set in conf file
|
1702
|
+
error " Backup target credentials needed but not set in conf file
|
1703
1703
|
'$CONF'.
|
1704
|
-
Setting TARGET_USER or TARGET_PASS or the corresponding values in TARGET url
|
1705
|
-
are missing. Some protocols only might need it for write access to the backup
|
1704
|
+
Setting TARGET_USER or TARGET_PASS or the corresponding values in TARGET url
|
1705
|
+
are missing. Some protocols only might need it for write access to the backup
|
1706
1706
|
repository (commands: bkp,backup,full,incr,purge) but not for read only access
|
1707
|
-
(e.g. verify,list,restore,fetch).
|
1708
|
-
|
1707
|
+
(e.g. verify,list,restore,fetch).
|
1708
|
+
|
1709
1709
|
Hints:
|
1710
1710
|
Add the credentials (user,password) to the conf file.
|
1711
1711
|
To force an empty password set TARGET_PASS='' or TARGET='prot://user:@host..'.
|
@@ -1717,18 +1717,18 @@ fi
|
|
1717
1717
|
if gpg_disabled; then
|
1718
1718
|
: # encryption disabled, all is well
|
1719
1719
|
elif [ -z "${GPG_KEY}${GPG_KEYS_ENC}${GPG_KEY_SIGN}" ] && ! var_isset 'GPG_PW'; then
|
1720
|
-
warning "GPG_KEY, GPG_KEYS_ENC, GPG_KEY_SIGN and GPG_PW are empty/not set in conf file
|
1720
|
+
warning "GPG_KEY, GPG_KEYS_ENC, GPG_KEY_SIGN and GPG_PW are empty/not set in conf file
|
1721
1721
|
'$CONF'.
|
1722
1722
|
Will disable encryption for duplicity now.
|
1723
1723
|
|
1724
|
-
Hint:
|
1725
|
-
If you really want to use _no_ encryption you can disable this warning by
|
1724
|
+
Hint:
|
1725
|
+
If you really want to use _no_ encryption you can disable this warning by
|
1726
1726
|
setting GPG_KEY='disabled' in conf file."
|
1727
1727
|
GPG_KEY='disabled'
|
1728
1728
|
fi
|
1729
1729
|
|
1730
1730
|
# GPG availability check (now we know if gpg is really needed)#################
|
1731
|
-
if ! gpg_disabled; then
|
1731
|
+
if ! gpg_disabled; then
|
1732
1732
|
GPG="$(which gpg 2>/dev/null)"
|
1733
1733
|
[ -z "$GPG" ] && error_path "gpg missing. installed und available in path?"
|
1734
1734
|
fi
|
@@ -1743,8 +1743,8 @@ if gpg_disabled; then
|
|
1743
1743
|
else
|
1744
1744
|
|
1745
1745
|
# key set?
|
1746
|
-
if [ "$GPG_KEY" == "${DEFAULT_GPG_KEY}" ]; then
|
1747
|
-
error_gpg "Encryption Key GPG_KEY still default in conf file
|
1746
|
+
if [ "$GPG_KEY" == "${DEFAULT_GPG_KEY}" ]; then
|
1747
|
+
error_gpg "Encryption Key GPG_KEY still default in conf file
|
1748
1748
|
'$CONF'."
|
1749
1749
|
fi
|
1750
1750
|
|
@@ -1775,7 +1775,7 @@ elif ! var_isset 'GPG_KEY_SIGN'; then
|
|
1775
1775
|
if [ -z "${KEY_ID}" ]; then
|
1776
1776
|
echo "Signing disabled. Not GPG_KEY entries in config."
|
1777
1777
|
GPG_KEY_SIGN='disabled'
|
1778
|
-
else
|
1778
|
+
else
|
1779
1779
|
# use avail OR try import OR fail
|
1780
1780
|
if gpg_sec_avail "${KEY_ID}"; then
|
1781
1781
|
GPG_KEY_SIGN="${KEY_ID}"
|
@@ -1805,12 +1805,12 @@ else
|
|
1805
1805
|
fi
|
1806
1806
|
fi
|
1807
1807
|
|
1808
|
-
# pw set?
|
1808
|
+
# pw set?
|
1809
1809
|
# symmetric needs one, always
|
1810
1810
|
if gpg_symmetric && ( [ -z "$GPG_PW" ] || [ "$GPG_PW" == "${DEFAULT_GPG_PW}" ] ) \
|
1811
1811
|
; then
|
1812
|
-
error_gpg "Encryption passphrase GPG_PW (needed for symmetric encryption)
|
1813
|
-
is empty/not set or still default value in conf file
|
1812
|
+
error_gpg "Encryption passphrase GPG_PW (needed for symmetric encryption)
|
1813
|
+
is empty/not set or still default value in conf file
|
1814
1814
|
'$CONF'."
|
1815
1815
|
fi
|
1816
1816
|
# this is a technicality, we can only pump one pass via pipe into gpg
|
@@ -1819,7 +1819,7 @@ if gpg_symmetric && var_isset GPG_PW && var_isset GPG_PW_SIGN &&\
|
|
1819
1819
|
[ -n "$GPG_PW_SIGN" ] && [ "$GPG_PW" != "$GPG_PW_SIGN" ]; then
|
1820
1820
|
error_gpg "GPG_PW _and_ GPG_PW_SIGN are defined but not identical in config
|
1821
1821
|
'$CONF'.
|
1822
|
-
This is unfortunately impossible. For details see duplicity manpage,
|
1822
|
+
This is unfortunately impossible. For details see duplicity manpage,
|
1823
1823
|
section 'A Note On Symmetric Encryption And Signing'.
|
1824
1824
|
|
1825
1825
|
Tip: Separate signing keys may have empty passwords e.g. GPG_PW_SIGN=''.
|
@@ -1843,7 +1843,7 @@ if ! gpg_symmetric && \
|
|
1843
1843
|
fi
|
1844
1844
|
fi
|
1845
1845
|
|
1846
|
-
# end GPG config plausibility check2
|
1846
|
+
# end GPG config plausibility check2
|
1847
1847
|
fi
|
1848
1848
|
|
1849
1849
|
# config plausibility check - SPACE ###########################################
|
@@ -1853,7 +1853,7 @@ CMD_MSG="Checking TEMP_DIR '${TEMP_DIR}' is a folder"
|
|
1853
1853
|
run_cmd test -d "$TEMP_DIR"
|
1854
1854
|
if [ "$?" != "0" ]; then
|
1855
1855
|
error "Temporary file space '$TEMP_DIR' is not a directory."
|
1856
|
-
fi
|
1856
|
+
fi
|
1857
1857
|
# is tmp writeable
|
1858
1858
|
CMD_MSG="Checking TEMP_DIR '${TEMP_DIR}' is writable"
|
1859
1859
|
run_cmd test -w "$TEMP_DIR"
|
@@ -1868,7 +1868,7 @@ VOLSIZE=${VOLSIZE:-25}
|
|
1868
1868
|
echo $@ $DUPL_PARAMS | grep -q -e '--asynchronous-upload' && FACTOR=2 || FACTOR=1
|
1869
1869
|
|
1870
1870
|
# TODO: check for enough (async= upload space and WARN only
|
1871
|
-
# use function tmp_space
|
1871
|
+
# use function tmp_space
|
1872
1872
|
echo TODO: reimplent tmp space check
|
1873
1873
|
|
1874
1874
|
|
@@ -1876,12 +1876,12 @@ echo TODO: reimplent tmp space check
|
|
1876
1876
|
# if encryption is disabled, skip this whole section
|
1877
1877
|
if gpg_disabled; then
|
1878
1878
|
echo -e "Test - En/Decryption skipped. (GPG disabled)"
|
1879
|
-
elif [ "$GPG_TEST" = "disabled" ]; then
|
1879
|
+
elif [ "$GPG_TEST" = "disabled" ]; then
|
1880
1880
|
echo -e "Test - En/Decryption skipped. (Testing disabled)"
|
1881
1881
|
else
|
1882
1882
|
|
1883
1883
|
GPG_TEST="$TEMP_DIR/${ME_NAME}.$$.$(date_fix %s)"
|
1884
|
-
function cleanup_gpgtest {
|
1884
|
+
function cleanup_gpgtest {
|
1885
1885
|
echo -en "Cleanup - Delete '${GPG_TEST}_*'"
|
1886
1886
|
rm ${GPG_TEST}_* 2>/dev/null && echo "(OK)" || echo "(FAILED)"
|
1887
1887
|
}
|
@@ -1903,7 +1903,7 @@ if [ ${#GPG_KEYS_ENC_ARRAY[@]} -gt 0 ]; then
|
|
1903
1903
|
run_cmd $(gpg_pass_pipein GPG_PW_SIGN GPG_PW) $GPG $CMD_PARAM_SIGN $(gpg_param_passwd GPG_PW_SIGN GPG_PW) $CMD_PARAMS $GPG_USEAGENT --status-fd 1 $GPG_OPTS -o "${GPG_TEST}_ENC" -e "$ME_LONG"
|
1904
1904
|
CMD_ERR=$?
|
1905
1905
|
|
1906
|
-
if [ "$CMD_ERR" != "0" ]; then
|
1906
|
+
if [ "$CMD_ERR" != "0" ]; then
|
1907
1907
|
KEY_NOTRUST=$(echo "$CMD_OUT"|awk '/^\[GNUPG:\] INV_RECP 10/ { print $4 }')
|
1908
1908
|
[ -n "$KEY_NOTRUST" ] && HINT="Key '${KEY_NOTRUST}' seems to be untrusted. If you really trust this key try to
|
1909
1909
|
'gpg --edit-key "$KEY_NOTRUST"' and raise the trust level to ultimate. If you
|
@@ -1917,7 +1917,7 @@ if [ ${#GPG_KEYS_ENC_ARRAY[@]} -gt 0 ]; then
|
|
1917
1917
|
run_cmd $(gpg_pass_pipein GPG_PW) "$GPG" $(gpg_param_passwd GPG_PW) $GPG_OPTS -o "${GPG_TEST}_DEC" $GPG_USEAGENT -d "${GPG_TEST}_ENC"
|
1918
1918
|
CMD_ERR=$?
|
1919
1919
|
|
1920
|
-
if [ "$CMD_ERR" != "0" ]; then
|
1920
|
+
if [ "$CMD_ERR" != "0" ]; then
|
1921
1921
|
error_gpg_test "Decryption failed.${CMD_OUT:+\n$CMD_OUT}"
|
1922
1922
|
fi
|
1923
1923
|
|
@@ -1927,7 +1927,7 @@ else
|
|
1927
1927
|
CMD_MSG="Test - Encryption with passphrase${CMD_MSG_SIGN:+ & $CMD_MSG_SIGN}"
|
1928
1928
|
run_cmd $(gpg_pass_pipein GPG_PW) "$GPG" $GPG_OPTS $CMD_PARAM_SIGN --passphrase-fd 0 -o "${GPG_TEST}_ENC" --batch -c "$ME_LONG"
|
1929
1929
|
CMD_ERR=$?
|
1930
|
-
if [ "$CMD_ERR" != "0" ]; then
|
1930
|
+
if [ "$CMD_ERR" != "0" ]; then
|
1931
1931
|
error_gpg_test "Encryption failed.${CMD_OUT:+\n$CMD_OUT}"
|
1932
1932
|
fi
|
1933
1933
|
|
@@ -1935,7 +1935,7 @@ else
|
|
1935
1935
|
CMD_MSG="Test - Decryption with passphrase"
|
1936
1936
|
run_cmd $(gpg_pass_pipein GPG_PW) "$GPG" $GPG_OPTS --passphrase-fd 0 -o "${GPG_TEST}_DEC" --batch -d "${GPG_TEST}_ENC"
|
1937
1937
|
CMD_ERR=$?
|
1938
|
-
if [ "$CMD_ERR" != "0" ]; then
|
1938
|
+
if [ "$CMD_ERR" != "0" ]; then
|
1939
1939
|
error_gpg_test "Decryption failed.${CMD_OUT:+\n$CMD_OUT}"
|
1940
1940
|
fi
|
1941
1941
|
fi
|
@@ -1945,7 +1945,7 @@ CMD_MSG="Test - Compare"
|
|
1945
1945
|
[ -r "${GPG_TEST}_DEC" ] || CMD_DISABLED="File not found. Nothing to compare."
|
1946
1946
|
run_cmd "test \"\$(cat '$ME_LONG')\" = \"\$(cat '${GPG_TEST}_DEC')\""
|
1947
1947
|
CMD_ERR=$?
|
1948
|
-
if [ "$CMD_ERR" = "0" ]; then
|
1948
|
+
if [ "$CMD_ERR" = "0" ]; then
|
1949
1949
|
cleanup_gpgtest
|
1950
1950
|
else
|
1951
1951
|
error_gpg_test "Comparision failed.${CMD_OUT:+\n$CMD_OUT}"
|
@@ -1969,7 +1969,7 @@ gpg_export_if_needed "${GPG_KEYS_ENC_ARRAY[@]}" "$(gpg_signing && echo $GPG_KEY_
|
|
1969
1969
|
var_isset 'TARGET_URL_USER' && TARGET_URL_USER="$(url_decode "$TARGET_URL_USER")"
|
1970
1970
|
var_isset 'TARGET_URL_PASS' && TARGET_URL_PASS="$(url_decode "$TARGET_URL_PASS")"
|
1971
1971
|
|
1972
|
-
# defined TARGET_USER&PASS vars replace their URL pendants
|
1972
|
+
# defined TARGET_USER&PASS vars replace their URL pendants
|
1973
1973
|
# (double defs already dealt with)
|
1974
1974
|
var_isset 'TARGET_USER' && TARGET_URL_USER="$TARGET_USER"
|
1975
1975
|
var_isset 'TARGET_PASS' && TARGET_URL_PASS="$TARGET_PASS"
|
@@ -2017,6 +2017,8 @@ case "$(tolower "${TARGET_URL_PROT%%:*}")" in
|
|
2017
2017
|
( var_isset 'TARGET_URL_USER' && ! var_isset 'SWIFT_AUTHURL' ) &&\
|
2018
2018
|
warning "\
|
2019
2019
|
Swift will probably fail because the conf var SWIFT_AUTHURL was not defined!"
|
2020
|
+
var_isset 'SWIFT_TENANTNAME' && \
|
2021
|
+
BACKEND_PARAMS="$BACKEND_PARAMS SWIFT_TENANTNAME=$(qw "${SWIFT_TENANTNAME}")"
|
2020
2022
|
var_isset 'SWIFT_AUTHVERSION' && \
|
2021
2023
|
BACKEND_PARAMS="$BACKEND_PARAMS SWIFT_AUTHVERSION=$(qw "${SWIFT_AUTHVERSION}")"
|
2022
2024
|
var_isset 'TARGET_URL_PASS' && \
|
@@ -2029,8 +2031,8 @@ Swift will probably fail because the conf var SWIFT_AUTHURL was not defined!"
|
|
2029
2031
|
var_isset 'TARGET_URL_USER' && BACKEND_CREDS="$(url_encode "${TARGET_URL_USER}")"
|
2030
2032
|
if duplicity_version_lt 610; then
|
2031
2033
|
warning "\
|
2032
|
-
Duplicity version '$DUPL_VERSION' does not support providing the password as
|
2033
|
-
env var for rsync backend. For security reasons you should consider to
|
2034
|
+
Duplicity version '$DUPL_VERSION' does not support providing the password as
|
2035
|
+
env var for rsync backend. For security reasons you should consider to
|
2034
2036
|
update to a version greater than '0.6.10' of duplicity."
|
2035
2037
|
var_isset 'TARGET_URL_PASS' && BACKEND_CREDS="${BACKEND_CREDS}:$(url_encode "${TARGET_URL_PASS}")"
|
2036
2038
|
else
|
@@ -2040,9 +2042,9 @@ update to a version greater than '0.6.10' of duplicity."
|
|
2040
2042
|
BACKEND_URL="${TARGET_URL_PROT}${BACKEND_CREDS}${TARGET_URL_HOSTPATH}"
|
2041
2043
|
;;
|
2042
2044
|
*)
|
2043
|
-
# for all other protocols we put username in url and pass into env var
|
2045
|
+
# for all other protocols we put username in url and pass into env var
|
2044
2046
|
# for sec˙rity reasons, we url_encode username to protect special chars
|
2045
|
-
var_isset 'TARGET_URL_USER' &&
|
2047
|
+
var_isset 'TARGET_URL_USER' &&
|
2046
2048
|
BACKEND_CREDS="$(url_encode "${TARGET_URL_USER}")@"
|
2047
2049
|
# sortout backends with special ways to handle password
|
2048
2050
|
case "$(tolower "${TARGET_URL_PROT%%:*}")" in
|
@@ -2065,7 +2067,7 @@ update to a version greater than '0.6.10' of duplicity."
|
|
2065
2067
|
;;
|
2066
2068
|
esac
|
2067
2069
|
|
2068
|
-
# protect eval from special chars in url (e.g. open ')' in password,
|
2070
|
+
# protect eval from special chars in url (e.g. open ')' in password,
|
2069
2071
|
# spaces in path, quotes) happens above in duplify() via quotewrap()
|
2070
2072
|
SOURCE="$SOURCE"
|
2071
2073
|
BACKEND_URL="$BACKEND_URL"
|
@@ -2154,10 +2156,10 @@ case "$(tolower $cmd)" in
|
|
2154
2156
|
;;
|
2155
2157
|
'verifypath')
|
2156
2158
|
TIME="${ftpl_pars[2]:+"-t ${ftpl_pars[2]}"}"
|
2157
|
-
IN_PATH="${ftpl_pars[0]}"; OUT_PATH="${ftpl_pars[1]}";
|
2159
|
+
IN_PATH="${ftpl_pars[0]}"; OUT_PATH="${ftpl_pars[1]}";
|
2158
2160
|
( [ -z "$IN_PATH" ] || [ -z "$OUT_PATH" ] ) && error " Missing parameter <rel_bkp_path> or <local_path> for verifyPath.
|
2159
|
-
|
2160
|
-
Hint:
|
2161
|
+
|
2162
|
+
Hint:
|
2161
2163
|
Syntax is -> $ME <profile> verifyPath <rel_bkp_path> <local_path> [<age>]"
|
2162
2164
|
|
2163
2165
|
duplify verify -- $TIME "${dupl_opts[@]}" --exclude-globbing-filelist "$EXCLUDE" \
|
@@ -2174,49 +2176,48 @@ case "$(tolower $cmd)" in
|
|
2174
2176
|
'purge')
|
2175
2177
|
MAX_AGE=${ftpl_pars[0]:-$MAX_AGE}
|
2176
2178
|
[ -z "$MAX_AGE" ] && error " Missing parameter <max_age>. Can be set in profile or as command line parameter."
|
2177
|
-
|
2179
|
+
|
2178
2180
|
duplify remove-older-than "${MAX_AGE}" \
|
2179
2181
|
-- "${dupl_opts[@]}" "$BACKEND_URL"
|
2180
2182
|
;;
|
2181
2183
|
'purgefull')
|
2182
2184
|
MAX_FULL_BACKUPS=${ftpl_pars[0]:-$MAX_FULL_BACKUPS}
|
2183
2185
|
[ -z "$MAX_FULL_BACKUPS" ] && error " Missing parameter <max_full_backups>. Can be set in profile or as command line parameter."
|
2184
|
-
|
2186
|
+
|
2185
2187
|
duplify remove-all-but-n-full "${MAX_FULL_BACKUPS}" \
|
2186
2188
|
-- "${dupl_opts[@]}" "$BACKEND_URL"
|
2187
2189
|
;;
|
2188
2190
|
'purgeincr')
|
2189
2191
|
MAX_FULLS_WITH_INCRS=${ftpl_pars[0]:-$MAX_FULLS_WITH_INCRS}
|
2190
2192
|
[ -z "$MAX_FULLS_WITH_INCRS" ] && error " Missing parameter <max_fulls_with_incrs>. Can be set in profile or as command line parameter."
|
2191
|
-
|
2193
|
+
|
2192
2194
|
duplify remove-all-inc-of-but-n-full "${MAX_FULLS_WITH_INCRS}" \
|
2193
2195
|
-- "${dupl_opts[@]}" "$BACKEND_URL"
|
2194
2196
|
;;
|
2195
2197
|
'restore')
|
2196
2198
|
OUT_PATH="${ftpl_pars[0]:-$SOURCE}"; TIME="${ftpl_pars[1]:-now}";
|
2197
2199
|
[ -z "$OUT_PATH" ] && error " Missing parameter target_path for restore.
|
2198
|
-
|
2199
|
-
Hint:
|
2200
|
+
|
2201
|
+
Hint:
|
2200
2202
|
Syntax is -> $ME <profile> restore <target_path> [<age>]"
|
2201
|
-
|
2202
|
-
duplify -- -t "$TIME" "${dupl_opts[@]}" "$BACKEND_URL" "$OUT_PATH"
|
2203
|
-
run_script $CONFDIR/restore;
|
2203
|
+
|
2204
|
+
duplify -- -t "$TIME" "${dupl_opts[@]}" "$BACKEND_URL" "$OUT_PATH" && run_script $CONFDIR/restore;
|
2204
2205
|
;;
|
2205
2206
|
'fetch')
|
2206
|
-
IN_PATH="${ftpl_pars[0]}"; OUT_PATH="${ftpl_pars[1]}";
|
2207
|
+
IN_PATH="${ftpl_pars[0]}"; OUT_PATH="${ftpl_pars[1]}";
|
2207
2208
|
TIME="${ftpl_pars[2]:-now}";
|
2208
2209
|
( [ -z "$IN_PATH" ] || [ -z "$OUT_PATH" ] ) && error " Missing parameter <src_path> or <target_path> for fetch.
|
2209
|
-
|
2210
|
-
Hint:
|
2210
|
+
|
2211
|
+
Hint:
|
2211
2212
|
Syntax is -> $ME <profile> fetch <src_path> <target_path> [<age>]"
|
2212
|
-
|
2213
|
+
|
2213
2214
|
# duplicity 0.4.7 doesnt like cmd restore in combination with --file-to-restore
|
2214
2215
|
duplify -- --restore-time "$TIME" "${dupl_opts[@]}" \
|
2215
2216
|
--file-to-restore "$IN_PATH" "$BACKEND_URL" "$OUT_PATH"
|
2216
2217
|
;;
|
2217
2218
|
'status')
|
2218
2219
|
duplify collection-status -- "${dupl_opts[@]}" "$BACKEND_URL"
|
2219
|
-
;;
|
2220
|
+
;;
|
2220
2221
|
*)
|
2221
2222
|
warning "Unknown command '$cmd'."
|
2222
2223
|
;;
|