added support for B2 backend

This commit is contained in:
harrim4n 2017-12-23 18:57:10 +01:00
parent e070ca7887
commit 2a77dde6ee
3 changed files with 46 additions and 1 deletions

View file

@ -139,6 +139,9 @@ There are many ways to do so, here are some examples (adapt the path to your act
For the [Amazon S3](https://aws.amazon.com/s3/) storage backend *`optional`*
* [s3cmd](http://s3tools.org/s3cmd) *`optional`*
For the [Backblaze B2](https://www.backblaze.com/b2) storage backend *`optional`*
* [python-b2](https://pypi.python.org/pypi/b2) *`optional`*
For the [Google Cloud Storage](https://cloud.google.com/storage/) storage backend *`optional`*
* [boto](https://github.com/boto/boto) (may already have been installed with duplicity)
* [gsutil](https://cloud.google.com/storage/docs/gsutil) *`optional`*

View file

@ -115,6 +115,7 @@ DEST="s3+http://foobar-backup-bucket/backup-folder/"
#DEST="webdav[s]://user[:password]@other.host[:port]/some_dir"
#DEST="gdocs://foobar_google_account/some_dir"
#DEST="swift://foobar_swift_container/some_dir"
#DEST="b2://some_account_id[:some_application_key]@some_bucket_name/some_dir"
# ------------------------------------------------------------------------------

View file

@ -403,6 +403,9 @@ NO_S3CMD_CFG="WARNING: s3cmd is not configured, run 's3cmd --configure' \
in order to retrieve remote file size information. Remote file \
size information unavailable."
NO_B2CMD="WARNING: b2 not found in PATH, remote file size information \
unavailable. Is the python-b2 package installed?"
README_TXT="In case you've long forgotten, this is a backup script that you used to backup some files (most likely remotely at Amazon S3). In order to restore these files, you first need to import your GPG private(s) key(s) (if you haven't already). The key(s) is/are in this directory and the following command(s) should do the trick:\n\nIf you were using the same key for encryption and signature:\n gpg --allow-secret-key-import --import duplicity-backup-encryption-and-sign-secret.key.txt\nOr if you were using two separate keys for encryption and signature:\n gpg --allow-secret-key-import --import duplicity-backup-encryption-secret.key.txt\n gpg --allow-secret-key-import --import duplicity-backup-sign-secret.key.txt\n\nAfter your key(s) has/have been succesfully imported, you should be able to restore your files.\n\nGood luck!"
if [ "$(echo "${DEST}" | cut -c 1,2)" = "gs" ]; then
@ -445,6 +448,16 @@ else
DEST_IS_S3=false
fi
if [ "$(echo "${DEST}" | cut -c 1,2)" = "b2" ]; then
DEST_IS_B2=true
B2CMD="$(which b2)"
if [ ! -x "${B2CMD}" ]; then
echo "${NO_B2CMD}"; B2CMD_AVAIL=false
fi
else
DEST_IS_B2=false
fi
config_sanity_fail()
{
EXPLANATION=$1
@ -689,6 +702,34 @@ get_remote_file_size()
fi
fi
;;
"b2")
FRIENDLY_TYPE_NAME="Backblaze B2"
if ${B2CMD_AVAIL}; then
if [[ -n ${FTP_PASSWORD} ]]; then
APP_KEY=${FTP_PASSWORD}
else
APP_KEY=$(echo "${DEST}" | cut -d":" -f 3 | cut -d"@" -f 1)
fi
ACC_ID=$(echo "${DEST}" | cut -d"/" -f 3 | cut -d"@" -f 1 | cut -d ":" -f 1)
BUCKET=$(echo "${DEST}" | cut -d"@" -f2 | cut -d"/" -f1)
if [[ -z ${APP_KEY} ]] || [[ -z ${ACC_ID} ]]; then
SIZE="-b2 authentication wrong-"
return
fi
if [[ -z ${BUCKET} ]]; then
SIZE="-b2 bucket wrong-"
return
fi
${B2CMD} authorize-account ${ACC_ID} ${APP_KEY} 2>&1 >/dev/null
if [[ $? -ne 0 ]]; then
SIZE="-b2 authentication wrong-"
return
fi
SIZE=$(${B2CMD} ls --long ${BUCKET} | awk '{ print $5 }' | paste -sd+ | bc | numfmt --to=iec)
else
SIZE="-b2 not found in PATH-"
fi
;;
*)
# not yet available for the other backends
FRIENDLY_TYPE_NAME=""
@ -699,7 +740,7 @@ get_remote_file_size()
echo -e "${SIZE}\t${FRIENDLY_TYPE_NAME} type backend"
else
echo "Destination disk use information is currently only available for the following storage backends:"
echo "File, SSH, Amazon S3 and Google Cloud"
echo "File, SSH, Amazon S3, Google Cloud and Backblaze B2"
fi
echo
}