Prepare support for provider specific backup scripts

This commit is contained in:
Johannes Zellner
2016-09-15 15:30:41 +02:00
parent 73df6a8dd7
commit 6c23bce8e8
3 changed files with 136 additions and 68 deletions

View File

@@ -12,22 +12,39 @@ if [[ $# == 1 && "$1" == "--check" ]]; then
exit 0
fi
if [ $# -lt 5 ]; then
echo "Usage: backupbox.sh <s3 url> <access key id> <access key> <region> <password> [session token]"
# verify argument count
if [[ "$1" === "s3" && $# -lt 6 ]]; then
echo "Usage: backupbox.sh s3 <s3 url> <access key id> <access key> <region> <password> [session token]"
exit 1
fi
# env vars used by the awscli
s3_url="$1"
export AWS_ACCESS_KEY_ID="$2"
export AWS_SECRET_ACCESS_KEY="$3"
export AWS_DEFAULT_REGION="$4"
password="$5"
if [ $# -gt 5 ]; then
export AWS_SESSION_TOKEN="$6"
if [[ "$1" === "filesystem" && $# -lt 4 ]]; then
echo "Usage: backupbox.sh filesystem <backupFolder> <fileName> <password>"
exit 1
fi
# extract arguments
if [[ "$1" == "s3" ]]; then
# env vars used by the awscli
readonly s3_url="$2"
export AWS_ACCESS_KEY_ID="$3"
export AWS_SECRET_ACCESS_KEY="$4"
export AWS_DEFAULT_REGION="$5"
readonly password="$6"
if [ $# -gt 6 ]; then
export AWS_SESSION_TOKEN="$7"
fi
fi
if [[ "$1" == "filesystem" ]]; then
readonly backup_folder="$2"
readonly backup_fileName="$3"
readonly password="$4"
fi
# perform backup
now=$(date "+%Y-%m-%dT%H:%M:%S")
BOX_DATA_DIR="${HOME}/data/box"
box_snapshot_dir="${HOME}/data/snapshots/box-${now}"
@@ -38,19 +55,29 @@ mysqldump -u root -ppassword --single-transaction --routines --triggers box > "$
echo "Snapshoting backup as backup-${now}"
btrfs subvolume snapshot -r "${BOX_DATA_DIR}" "${box_snapshot_dir}"
for try in `seq 1 5`; do
echo "Uploading backup to ${s3_url} (try ${try})"
error_log=$(mktemp)
if [[ "$1" == "s3" ]]; then
for try in `seq 1 5`; do
echo "Uploading backup to ${s3_url} (try ${try})"
error_log=$(mktemp)
# use aws instead of curl because curl will always read entire stream memory to set Content-Length
# aws will do multipart upload
if tar -czf - -C "${box_snapshot_dir}" . \
| openssl aes-256-cbc -e -pass "pass:${password}" \
| aws s3 cp - "${s3_url}" 2>"${error_log}"; then
break
fi
cat "${error_log}" && rm "${error_log}"
done
# use aws instead of curl because curl will always read entire stream memory to set Content-Length
# aws will do multipart upload
if tar -czf - -C "${box_snapshot_dir}" . \
| openssl aes-256-cbc -e -pass "pass:${password}" \
| aws s3 cp - "${s3_url}" 2>"${error_log}"; then
break
fi
cat "${error_log}" && rm "${error_log}"
done
fi
if [[ "$1" == "filesystem" ]]; then
echo "Storing backup to ${backup_folder}/${backup_fileName}"
mkdir -p "${backup_folder}"
tar -czf - -C "${box_snapshot_dir}" . | openssl aes-256-cbc -e -pass "pass:${password}" > "${backup_folder}/${backup_fileName}"
fi
echo "Deleting backup snapshot"
btrfs subvolume delete "${box_snapshot_dir}"
@@ -61,4 +88,3 @@ if [[ ${try} -eq 5 ]]; then
else
echo "Backup successful"
fi