host info updates
[distro-setup] / bk-backup
1 #!/bin/bash
2 # I, Ian Kelling, follow the GNU license recommendations at
3 # https://www.gnu.org/licenses/license-recommendations.en.html. They
4 # recommend that small programs, < 300 lines, be licensed under the
5 # Apache License 2.0. This file contains or is part of one or more small
6 # programs. If a small program grows beyond 300 lines, I plan to switch
7 # its license to GPL.
8
9 # Copyright 2024 Ian Kelling
10
11 # Licensed under the Apache License, Version 2.0 (the "License");
12 # you may not use this file except in compliance with the License.
13 # You may obtain a copy of the License at
14
15 # http://www.apache.org/licenses/LICENSE-2.0
16
17 # Unless required by applicable law or agreed to in writing, software
18 # distributed under the License is distributed on an "AS IS" BASIS,
19 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 # See the License for the specific language governing permissions and
21 # limitations under the License.
22
23
24 # usage: $0 [restore]
25
26 if ! test "$BASH_VERSION"; then echo "error: shell is not bash" >&2; exit 1; fi
27 shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4
28 set -eE -o pipefail
29 trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?. PIPESTATUS: ${PIPESTATUS[*]}" >&2' ERR
30
31 # need root for rsync pull of file ownership/perms
32 [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
33
34 host=bk.b8.nz
35 ret=0
36 source /a/bin/bash_unpublished/source-state
37
38 restore=false
39 case $1 in
40 restore)
41 restore=true
42 ;;
43 esac
44
45 # last checked 2022-03 version 23
46 # https://docs.nextcloud.com/server/latest/admin_manual/maintenance/restore.html
47 if $restore; then
48 set -x
49 for ncdir in /var/www/ncexpertpath /var/www/ncninja; do
50 ncbase=${ncdir##*/}
51 ssh root@$host sudo -u www-data php $ncdir/occ -q maintenance:mode --on ||: # might not be running
52 rsync -ravhi --numeric-ids /p/bkbackup/$ncbase/ root@$host:$ncdir || ret=$?
53 # https://docs.nextcloud.com/server/20/admin_manual/configuration_server/occ_command.html#maintenance-commands-label
54 ssh root@$host sudo -u www-data php $ncdir/occ -q maintenance:data-fingerprint
55 ssh root@$host sudo -u www-data php $ncdir/occ -q maintenance:mode --off
56 done
57 # the dovecot thing is not needed afaik, just a good practice.
58 ssh root@$host systemctl stop dovecot
59 rsync -ravi --numeric-ids /p/bkbackup/m root@$host:/
60 ssh root@$host systemctl start dovecot
61 exit 0
62 fi
63
64 ret=0
65 if [[ $HOSTNAME == "$MAIL_HOST" ]]; then
66 mkdir -p /p/bkbackup
67 for ncdir in /var/www/ncexpertpath /var/www/ncninja; do
68 ncbase=${ncdir##*/}
69 mkdir -p /p/bkbackup/$ncbase
70 ssh root@$host sudo -u www-data php $ncdir/occ -q maintenance:mode --on
71 rsync --numeric-ids -ra --delete root@$host:$ncdir/{config,data,themes} /p/bkbackup/$ncbase || ret=$?
72 ssh root@$host sudo -u www-data php $ncdir/occ -q maintenance:mode --off
73 if (( ret )); then
74 echo "$0: error: failed rsync $ncdir"
75 ret=1
76 fi
77 done
78 rsync --numeric-ids -ra --delete \
79 --exclude md/expertpathologyreview.com/testignore \
80 --exclude md/amnimal.ninja/testignore \
81 root@$host:/m /p/bkbackup
82 fi
83 exit $ret