Fix command line arguments for duplicity 2.1 (#2301)

This commit is contained in:
Joshua Tauberer 2023-09-02 15:54:16 -04:00 committed by GitHub
commit a966913963
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 36 additions and 14 deletions

View File

@ -57,10 +57,11 @@ def backup_status(env):
"/usr/bin/duplicity", "/usr/bin/duplicity",
"collection-status", "collection-status",
"--archive-dir", backup_cache_dir, "--archive-dir", backup_cache_dir,
"--gpg-options", "--cipher-algo=AES256", "--gpg-options", "'--cipher-algo=AES256'",
"--log-fd", "1", "--log-fd", "1",
get_duplicity_target_url(config), ] + get_duplicity_additional_args(env) + [
] + get_duplicity_additional_args(env), get_duplicity_target_url(config)
],
get_duplicity_env_vars(env), get_duplicity_env_vars(env),
trap=True) trap=True)
if code != 0: if code != 0:
@ -227,8 +228,8 @@ def get_duplicity_additional_args(env):
port = 22 port = 22
return [ return [
f"--ssh-options= -i /root/.ssh/id_rsa_miab -p {port}", f"--ssh-options='-i /root/.ssh/id_rsa_miab -p {port}'",
f"--rsync-options= -e \"/usr/bin/ssh -oStrictHostKeyChecking=no -oBatchMode=yes -p {port} -i /root/.ssh/id_rsa_miab\"", f"--rsync-options='-e \"/usr/bin/ssh -oStrictHostKeyChecking=no -oBatchMode=yes -p {port} -i /root/.ssh/id_rsa_miab\"'",
] ]
elif get_target_type(config) == 's3': elif get_target_type(config) == 's3':
# See note about hostname in get_duplicity_target_url. # See note about hostname in get_duplicity_target_url.
@ -321,11 +322,12 @@ def perform_backup(full_backup):
"--archive-dir", backup_cache_dir, "--archive-dir", backup_cache_dir,
"--exclude", backup_root, "--exclude", backup_root,
"--volsize", "250", "--volsize", "250",
"--gpg-options", "--cipher-algo=AES256", "--gpg-options", "'--cipher-algo=AES256'",
"--allow-source-mismatch"
] + get_duplicity_additional_args(env) + [
env["STORAGE_ROOT"], env["STORAGE_ROOT"],
get_duplicity_target_url(config), get_duplicity_target_url(config),
"--allow-source-mismatch" ],
] + get_duplicity_additional_args(env),
get_duplicity_env_vars(env)) get_duplicity_env_vars(env))
finally: finally:
# Start services again. # Start services again.
@ -343,8 +345,9 @@ def perform_backup(full_backup):
"--verbosity", "error", "--verbosity", "error",
"--archive-dir", backup_cache_dir, "--archive-dir", backup_cache_dir,
"--force", "--force",
] + get_duplicity_additional_args(env) + [
get_duplicity_target_url(config) get_duplicity_target_url(config)
] + get_duplicity_additional_args(env), ],
get_duplicity_env_vars(env)) get_duplicity_env_vars(env))
# From duplicity's manual: # From duplicity's manual:
@ -358,8 +361,9 @@ def perform_backup(full_backup):
"--verbosity", "error", "--verbosity", "error",
"--archive-dir", backup_cache_dir, "--archive-dir", backup_cache_dir,
"--force", "--force",
] + get_duplicity_additional_args(env) + [
get_duplicity_target_url(config) get_duplicity_target_url(config)
] + get_duplicity_additional_args(env), ],
get_duplicity_env_vars(env)) get_duplicity_env_vars(env))
# Change ownership of backups to the user-data user, so that the after-bcakup # Change ownership of backups to the user-data user, so that the after-bcakup
@ -396,9 +400,10 @@ def run_duplicity_verification():
"--compare-data", "--compare-data",
"--archive-dir", backup_cache_dir, "--archive-dir", backup_cache_dir,
"--exclude", backup_root, "--exclude", backup_root,
] + get_duplicity_additional_args(env) + [
get_duplicity_target_url(config), get_duplicity_target_url(config),
env["STORAGE_ROOT"], env["STORAGE_ROOT"],
] + get_duplicity_additional_args(env), get_duplicity_env_vars(env)) ], get_duplicity_env_vars(env))
def run_duplicity_restore(args): def run_duplicity_restore(args):
env = load_environment() env = load_environment()
@ -408,10 +413,24 @@ def run_duplicity_restore(args):
"/usr/bin/duplicity", "/usr/bin/duplicity",
"restore", "restore",
"--archive-dir", backup_cache_dir, "--archive-dir", backup_cache_dir,
get_duplicity_target_url(config), ] + get_duplicity_additional_args(env) + [
] + get_duplicity_additional_args(env) + args, get_duplicity_target_url(config)
] + args,
get_duplicity_env_vars(env)) get_duplicity_env_vars(env))
def print_duplicity_command():
import shlex
env = load_environment()
config = get_backup_config(env)
backup_cache_dir = os.path.join(env["STORAGE_ROOT"], 'backup', 'cache')
for k, v in get_duplicity_env_vars(env).items():
print(f"export {k}={shlex.quote(v)}")
print("duplicity", "{command}", shlex.join([
"--archive-dir", backup_cache_dir,
] + get_duplicity_additional_args(env) + [
get_duplicity_target_url(config)
]))
def list_target_files(config): def list_target_files(config):
import urllib.parse import urllib.parse
try: try:
@ -618,6 +637,9 @@ if __name__ == "__main__":
# to duplicity. The restore path should be specified. # to duplicity. The restore path should be specified.
run_duplicity_restore(sys.argv[2:]) run_duplicity_restore(sys.argv[2:])
elif sys.argv[-1] == "--duplicity-command":
print_duplicity_command()
else: else:
# Perform a backup. Add --full to force a full backup rather than # Perform a backup. Add --full to force a full backup rather than
# possibly performing an incremental backup. # possibly performing an incremental backup.