blob: ff03346269cb4718f66c3a8d9a3a295214a3a1d3 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#!/bin/sh
set -eu
usage() {
cat <<-'EOF'
Usage:
backup [-q] [-C COMMENT] [-x] [ARCHIVE_TAG]
backup -h
EOF
}
help() {
cat <<-'EOF'
Options:
-q disable verbose mode, useful for
non-interactive sessions
-C COMMENT the comment text to be attached to the archive
-x disable checking the repository after creating the backup
-h, --help show this message
ARCHIVE_TAG the tag used to create the new
backup (default: "manual")
The repository is expected to have been created with:
$ borg init -e repokey-blake2
The following environment variables are expected to be exported:
$BORG_PASSCOMMAND
$BORG_REPO
$BORG_REMOTE_PATH
Password-less SSH access is required, usually done via adding
~/.ssh/id_rsa.pub to suyin:.ssh/authorized_keys.
Examples:
Run backup manually:
$ backup
Create backup with comment, and verbose mode active, and do not
verify the repository afterwards:
$ backup -qxC 'The backup has a comment' my-backup
EOF
}
for flag in "$@"; do
case "$flag" in
--)
break
;;
--help)
usage
help
exit
;;
*)
;;
esac
done
VERBOSE_FLAGS='--verbose --progress'
COMMENT=''
CHECK=true
while getopts 'qC:xh' flag; do
case "$flag" in
q)
VERBOSE_FLAGS=''
;;
C)
COMMENT="$OPTARG"
;;
x)
CHECK=false
;;
h)
usage
help
exit
;;
*)
usage >&2
exit 2
;;
esac
done
shift $((OPTIND - 1))
ARCHIVE_TAG="${1:-manual}"
run() {
STATUS=0
set -x
# The contents of $VERBOSE_FLAGS doesn't involve user input:
# shellcheck disable=2086
borg create \
$VERBOSE_FLAGS \
--comment "$COMMENT" \
--exclude "$XDG_CACHE_HOME" \
--exclude ~/Downloads/ \
--exclude ~/mnt/ \
--stats \
--compression lzma,9 \
"::{hostname}-{now}-$ARCHIVE_TAG" \
~/ || STATUS=$?
set +x
if [ "$STATUS" = 0 ]; then
return 0
elif [ "$STATUS" = 1 ]; then
printf 'WARNING, but no ERROR.\n' >&2
return 0
else
return "$STATUS"
fi
}
run
if [ "$CHECK" = true ]; then
set -x
# shellcheck disable=2086
borg check $VERBOSE_FLAGS --verify-data
set +x
fi
|