diff --git a/examples/example.borg b/examples/example.borg index b49598d0ab7f9a7bf3dc96cd36eb708412642eb6..4988e9cb61ea3faa97616c09502d44fed2a5a894 100644 --- a/examples/example.borg +++ b/examples/example.borg @@ -180,3 +180,9 @@ exclude = /var/lib/mysql ## ## Default: # passphrase = + +## Path to the directory that will hold borg's cache files. By default this is +## empty, which will let borg use its default path of "~/.cache/borg". +## +## Default: +# cache_directory = diff --git a/handlers/borg.in b/handlers/borg.in index df500a80bacb6daf26c61625d01eca6d558e27db..0ca5cb0c5fab20d16a07e78e6d43f7b0ed806f93 100644 --- a/handlers/borg.in +++ b/handlers/borg.in @@ -31,6 +31,7 @@ getconf create_options getconf prune yes getconf keep 30d getconf prune_options +getconf cache_directory setsection dest getconf user @@ -56,6 +57,20 @@ else fi execstr_archive="$archive" +if [ -n "$cache_directory" ]; then + cache_parent_dir=$(dirname "$(readlink -f "$cache_directory")") + [ -d "$cache_parent_dir" ] || fatal "Cache directory parent dir '$cache_parent_dir' is absent or is not a directory." + BORG_CACHE_DIR=$cache_directory + export BORG_CACHE_DIR +else + # Cache dir not set, let's clear out the environment variable to avoid + # having this directory be pointed to a random destination. + # Also apparently if we set the variable to an empty string, borg uses the + # empty string as though it was some path we specified and backup runs + # error out, so we need to unset the variable completely. + unset BORG_CACHE_DIR +fi + # check the connection at the source and destination [ -n "$test" ] || test=0 if [ "$host" != "localhost" ] && ([ "$testconnect" = "yes" ] || [ "${test}" -eq 1 ]); then