git.lirion.de

Of git, get, and gud

summaryrefslogtreecommitdiffstats
path: root/bin/nextcloud-backup
diff options
context:
space:
mode:
Diffstat (limited to 'bin/nextcloud-backup')
-rwxr-xr-xbin/nextcloud-backup72
1 files changed, 72 insertions, 0 deletions
diff --git a/bin/nextcloud-backup b/bin/nextcloud-backup
new file mode 100755
index 0000000..b64175c
--- /dev/null
+++ b/bin/nextcloud-backup
@@ -0,0 +1,72 @@
+#!/usr/bin/env bash
+#
+# This script is mostly included "as is", I did this quite a while ago and (also see todo remarks)
+# I'm not happy yet, but it works fine and the core mechanisms are swell.
+#
+# shellcheck disable=SC1091
+source /etc/lirion/nextcloud.conf || exit 1
+# shellcheck disable=SC1091
+source /usr/lib/lirion/ln-initfunctions || exit 2
+
+# TODO: Parametrise file directory and pw acquisition - better design and more secure
+BDBDIR="${NCDBBKPDIR}/files"
+PWFL="${NCDBBKPDIR}/pw"
+TIME="$(date +"%Y-%m-%dT%H:%M:%S%z")"
+
+#########
+# MYSQL #
+#########
+DUMPOPTS=( "--add-drop-table" "--add-locks" )
+DUMPOPTS+=( "--complete-insert" "--create-options" "--lock-tables" )
+
+printf "File timestamp: %s\n" "$TIME"
+DBARR=( "$NCDBNAME" )
+for i in "${DBARR[@]}";do
+ lnbegin "DB backup: $i"
+ sleep 0.1337
+ lnprog "dump"
+ if ! mysqldump "${DUMPOPTS[@]}" -u root --password="$(cat "$PWFL")" --databases \
+ "$i" > "$BDBDIR/$i-$TIME.sql" 2>/dev/null; then
+ lnfail
+ exit 120
+ fi
+ sleep 0.1337
+ lnprog "compression"
+ if ! xz -T4 "$BDBDIR/$i-$TIME.sql" > /dev/null 2>&1 && chmod 0600 \
+ "$BDBDIR/$i-$TIME.sql.xz" 2>/dev/null; then
+ lnfail
+ exit 121
+ fi
+ sleep 0.1337
+ lnok
+done
+
+NCVER="$(/usr/bin/sudo -u "$NCUSER" "$NCPHPBIN" "${NCAPPLDIR}/occ" 'status')" || exit 122
+NCVER="$(/usr/bin/printf '%b' "$NCVER" | /usr/bin/grep 'version:' | /usr/bin/awk '{print $NF}')" || exit 123
+/usr/bin/printf 'Current version: %b\n' "$NCVER"
+if [ "$(printf '%b' "$NCVER" | wc -l)" -gt 0 ]; then
+ printf 'Not a single line: %b\n' "$NCVER" >&2
+ exit 124
+elif [ "$(printf '%b' "$NCVER" | wc -w)" -ne 1 ]; then
+ printf 'Not a single word: %b\n' "$NCVER" >&2
+ exit 125
+fi
+lnbegin "File backup: Nextcloud"
+sudo rm -f "${NCAPPLDIR}/../nextcloud-$(date -I)-${NCVER}.tar" \
+ "${NCAPPLDIR}/../nextcloud-$(date -I)-${NCVER}.tar.xz" || exit 126
+sleep 0.1337
+lnprog 'dump'
+if ! tar -C "${NCAPPLDIR}/.." --checkpoint=32768 --checkpoint-action='.' -cf \
+ "${NCAPPLDIR}/../nextcloud-$(date -I)-${NCVER}.tar" "$NCAPPLDIR" 2>/dev/null
+then
+ lnfail
+ exit 127
+fi
+lnprog 'compression'
+if ! xz -T4 "${NCAPPLDIR}/../nextcloud-$(date -I)-${NCVER}.tar" > /dev/null 2>&1 && \
+ chmod 0600 "${NCAPPLDIR}/../nextcloud-$(date -I)-${NCVER}.tar.xz" 2>/dev/null
+then
+ lnfail
+ exit 128
+fi
+lnok