89 lines
3.2 KiB
Bash
89 lines
3.2 KiB
Bash
#!/bin/bash
|
|
|
|
# Infrastructure
|
|
# Ansible instructions to deploy the infrastructure
|
|
# Copyright (C) 2020 Saibotk
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, version 3 of the License.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
function backup () {(
|
|
set -e
|
|
|
|
echo "Starting data backup:"
|
|
|
|
docker run --name="duplicity-backup-lvm" \
|
|
--security-opt "label=disable" \
|
|
--security-opt "no-new-privileges" \
|
|
--cap-drop=ALL \
|
|
--cap-add=DAC_OVERRIDE \
|
|
--rm \
|
|
-v "$HOME/.cache/duplicity/:/archive" \
|
|
-v "/root/.gnupg/:/root/.gnupg/" \
|
|
-v "/backup_snapshots/:/backup/:ro" \
|
|
-e "PASSPHRASE={{ backup_gpg.passphrase }}" \
|
|
--hostname {{ ansible_fqdn }} \
|
|
{{ backup_duplicity_image }}:{{ backup_duplicity_image_version }} \
|
|
--full-if-older-than 1M \
|
|
--progress \
|
|
--progress-rate 60 \
|
|
--sign-key "{{ backup_gpg.sign_key | default(backup_gpg.id) }}" \
|
|
{% for encryption_key in backup_gpg.encryption_keys | default([backup_gpg.id]) %}
|
|
--encrypt-key "{{ encryption_key }}" \
|
|
{% endfor %}
|
|
/backup/ \
|
|
"{{ backup_target }}"
|
|
|
|
{% if backup_retention.incremental.enabled %}
|
|
echo "Remove old incremental backups"
|
|
docker run --name="duplicity-backup-lvm" \
|
|
--security-opt "label=disable" \
|
|
--security-opt "no-new-privileges" \
|
|
--cap-drop=ALL \
|
|
--cap-add=DAC_OVERRIDE \
|
|
--rm \
|
|
-v "$HOME/.cache/duplicity/:/archive" \
|
|
--hostname {{ ansible_fqdn }} \
|
|
{{ backup_duplicity_image }}:{{ backup_duplicity_image_version }} \
|
|
remove-all-inc-of-but-n-full {{ backup_retention.incremental.count }} --force \
|
|
"{{ backup_target }}"
|
|
{% endif %}
|
|
|
|
{% if backup_retention.full.enabled %}
|
|
echo "Remove old full backups"
|
|
docker run --name="duplicity-backup-lvm" \
|
|
--security-opt "label=disable" \
|
|
--security-opt "no-new-privileges" \
|
|
--cap-drop=ALL \
|
|
--cap-add=DAC_OVERRIDE \
|
|
--rm \
|
|
-v "$HOME/.cache/duplicity/:/archive" \
|
|
--hostname {{ ansible_fqdn }} \
|
|
{{ backup_duplicity_image }}:{{ backup_duplicity_image_version }} \
|
|
remove-all-but-n-full {{ backup_retention.full.count }} --force \
|
|
"{{ backup_target }}"
|
|
{% endif %}
|
|
)}
|
|
|
|
echo "LVM backup started:"
|
|
|
|
backup
|
|
success=$?
|
|
if [ $success -gt 0 ]; then
|
|
echo "ERROR: An error occured during backup! $success"
|
|
fi
|
|
|
|
echo $success > {{ backup_status_directory }}/backup.status
|
|
|
|
chown {{ backup_status_directory_uid }}:{{ backup_status_directory_gid }} {{ backup_status_directory }}/backup.status
|
|
|
|
exit $success
|