2 ################################################
3 ### Managed by someone's ansible provisioner ###
4 ################################################
5 # Part of: https://git.somenet.org/root/pub/somesible.git
6 # 2017-2026 by someone <someone@somenet.org>
13 export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK="yes"
14 export BORG_RELOCATED_REPO_ACCESS_IS_OK="yes"
17 export BKPREPO=${1} # backup repo (should be: "/bkp/storage-local/$host/$path" or for ssh: "user@server:$path")
18 export BKPHOST=${2} # src-host
19 export BKPPATH=${3} # abs-path on src-host
20 export BKPKEEP=${4} # pruning-settings
21 export BORG_PASSPHRASE=${5} # borg key passphrase
23 BKPPATH_ESCAPED=$(echo -n "$BKPPATH"|sed -e 's#/#-#g') # contains first "/"
25 if [[ -z "$BORG_PASSPHRASE" ]]; then
26 borg info "$BKPREPO" >/dev/null 2>&1 || borg init --umask 0077 -e none --make-parent-dirs "$BKPREPO"
28 borg info "$BKPREPO" >/dev/null 2>&1 || borg init --umask 0077 -e repokey-blake2 --make-parent-dirs "$BKPREPO"
31 echo "# Merged on: $(date -Isec)" > "/bkp/local/exclude.conf.d/.merged.$BKPHOST-$BKPPATH_ESCAPED"
32 for file in /bkp/local/exclude.conf.d/$BKPHOST-$BKPPATH_ESCAPED*; do
33 echo -e "\n\n# $file" >> "/bkp/local/exclude.conf.d/.merged.$BKPHOST-$BKPPATH_ESCAPED"
34 cat "$file" >> "/bkp/local/exclude.conf.d/.merged.$BKPHOST-$BKPPATH_ESCAPED"
37 borg create --umask 0077 --info --list --stats --noctime --nobirthtime --exclude-caches --exclude-from "/bkp/local/exclude.conf.d/.merged.$BKPHOST-$BKPPATH_ESCAPED" "$BKPREPO::$BKPHOST-$BKPPATH_ESCAPED--{now}" "$BKPPATH"
39 if [ $exit_status -ne 0 ]; then
40 export ERRCODE="$exit_status";
41 echo "** backup.sh (backup:create): non-zero exitcode: $exit_status"
44 backup_prune "$BKPREPO" "$BKPKEEP" "$BORG_PASSPHRASE"
48 export BKPREPO=${1} # backup repo (should be: "/bkp/storage-local/$host/$path" or for ssh: "user@server:$path")
49 export BKPHOST=${2} # src-host
50 export BKPPATH=${3} # abs-path on src-host
51 export BKPKEEP=${4} # pruning-settings
52 export BORG_PASSPHRASE=${5} # borg key passphrase
54 BKPPATH_ESCAPED=$(echo -n "$BKPPATH"|sed -e 's#/#-#g') # contains first "/"
56 if [[ -z "$BORG_PASSPHRASE" ]]; then
57 borg2 repo-info --repo "$BKPREPO" >/dev/null 2>&1 || borg2 repo-create --umask 0077 -e none --repo "$BKPREPO"
59 borg2 repo-info --repo "$BKPREPO" >/dev/null 2>&1 || borg2 repo-create --umask 0077 -e repokey-blake2-chacha20-poly1305 --repo "$BKPREPO"
62 echo "# Merged on: $(date -Isec)" > "/bkp/local/exclude.conf.d/.merged.$BKPHOST-$BKPPATH_ESCAPED"
63 for file in /bkp/local/exclude.conf.d/$BKPHOST-$BKPPATH_ESCAPED*; do
64 echo -e "\n\n# $file" >> "/bkp/local/exclude.conf.d/.merged.$BKPHOST-$BKPPATH_ESCAPED"
65 cat "$file" >> "/bkp/local/exclude.conf.d/.merged.$BKPHOST-$BKPPATH_ESCAPED"
68 echo "** backup.sh(backup2:create) ********************************************************************************************************************************"
69 borg2 create --umask 0077 --info --list --stats --nobirthtime --compression zstd --exclude-caches --exclude-from "/bkp/local/exclude.conf.d/.merged.$BKPHOST-$BKPPATH_ESCAPED" --repo "$BKPREPO" "$BKPHOST-$BKPPATH_ESCAPED" "$BKPPATH"
71 if [ $exit_status -ne 0 ]; then
72 export ERRCODE="$exit_status";
73 echo "** backup.sh (backup2:create): non-zero exitcode: $exit_status"
76 backup_prune2 "$BKPREPO" "$BKPKEEP" "$BORG_PASSPHRASE"
80 export BKPREPO=${1} # backup repo (should be: "/bkp/storage-local/$host/$path" or for ssh: "user@server:$path")
81 export BKPNAME=${2} # backup name
82 export BKPCMD=${3} # command to run
83 export BKPKEEP=${4} # pruning-settings
84 export BORG_PASSPHRASE=${5} # borg key passphrase
86 if [[ -z "$BORG_PASSPHRASE" ]]; then
87 borg info "$BKPREPO" >/dev/null 2>&1 || borg init --umask 0077 -e none --make-parent-dirs "$BKPREPO"
89 borg info "$BKPREPO" >/dev/null 2>&1 || borg init --umask 0077 -e repokey-blake2 --make-parent-dirs "$BKPREPO"
92 borg create --umask 0077 --info --stats --noctime --nobirthtime --compression zstd --files-cache disabled --content-from-command -- "$BKPREPO::$BKPNAME--{now}" $BKPCMD
94 if [ $exit_status -ne 0 ]; then
95 export ERRCODE="$exit_status";
96 echo "** backup.sh (backup_cmd:create): non-zero exitcode: $exit_status"
99 backup_prune "$BKPREPO" "$BKPKEEP" "$BORG_PASSPHRASE"
102 function backup_cmd2 {
103 export BKPREPO=${1} # backup repo (should be: "/bkp/storage-local/$host/$path" or for ssh: "user@server:$path")
104 export BKPNAME=${2} # backup name
105 export BKPCMD=${3} # command to run
106 export BKPKEEP=${4} # pruning-settings
107 export BORG_PASSPHRASE=${5} # borg key passphrase
109 if [[ -z "$BORG_PASSPHRASE" ]]; then
110 borg2 repo-info --repo "$BKPREPO" >/dev/null 2>&1 || borg2 repo-create --umask 0077 -e none --repo "$BKPREPO"
112 borg2 repo-info --repo "$BKPREPO" >/dev/null 2>&1 || borg2 repo-create --umask 0077 -e repokey-blake2-chacha20-poly1305 --repo "$BKPREPO"
115 echo "** backup.sh(backup_cmd2:create) ********************************************************************************************************************************"
116 borg2 create --umask 0077 --info --stats --nobirthtime --compression zstd --files-cache disabled --content-from-command --repo "$BKPREPO" "$BKPNAME" -- $BKPCMD
118 if [ $exit_status -ne 0 ]; then
119 export ERRCODE="$exit_status";
120 echo "** backup.sh (backup_cmd2:create): non-zero exitcode: $exit_status"
123 backup_prune2 "$BKPREPO" "$BKPKEEP" "$BORG_PASSPHRASE"
126 function backup_prune {
127 export BKPREPO=${1} # backup repo (should be: "/bkp/storage-local/$host/$path" or for ssh: "user@server:$path")
128 export BKPKEEP=${2} # pruning-settings
129 export BORG_PASSPHRASE=${3} # borg key passphrase
131 if [[ -z "$BKPKEEP" ]]; then
132 echo "** backup.sh(backup_prune): No prune settings, skipping"
134 borg prune --umask 0077 --list --stats --save-space --keep-last 1 $BKPKEEP "$BKPREPO"
136 if [ $exit_status -ne 0 ]; then
137 export ERRCODE="$exit_status";
138 echo "** backup.sh (backup_prune:prune): non-zero exitcode: $exit_status"
140 borg compact --umask 0077 -v --cleanup-commits "$BKPREPO"
142 if [ $exit_status -ne 0 ]; then
143 export ERRCODE="$exit_status";
144 echo "** backup.sh (backup_prune:compact): non-zero exitcode: $exit_status"
149 function backup_prune2 {
150 export BKPREPO=${1} # backup repo (should be: "/bkp/storage-local/$host/$path" or for ssh: "user@server:$path")
151 export BKPKEEP=${2} # pruning-settings
152 export BORG_PASSPHRASE=${3} # borg key passphrase
154 if [[ -z "$BKPKEEP" ]]; then
155 echo "** backup.sh(backup_prune2): No prune settings, skipping"
157 echo "** backup.sh(backup_prune2:prune) ********************************************************************************************************************************"
158 time borg2 prune --umask 0077 --list --keep-last 1 $BKPKEEP --repo "$BKPREPO"
160 if [ $exit_status -ne 0 ]; then
161 export ERRCODE="$exit_status";
162 echo "** backup.sh (backup_prune2:prune): non-zero exitcode: $exit_status"
164 echo "** backup.sh(backup_prune2:compact) ********************************************************************************************************************************"
165 time borg2 compact --umask 0077 -v --stats --repo "$BKPREPO"
167 if [ $exit_status -ne 0 ]; then
168 export ERRCODE="$exit_status";
169 echo "** backup.sh (backup_prune2:compact): non-zero exitcode: $exit_status"
175 echo "** backup.sh: running /bkp/local/backup.conf.managed"
176 source /bkp/local/backup.conf.managed
178 # run local additions
179 if [ -e "/bkp/local/backup.conf.local" ]; then
180 echo "** backup.sh: running /bkp/local/backup.conf.local"
181 source /bkp/local/backup.conf.local
184 echo "** backup.sh: DONE"
186 unset BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK
187 unset BORG_RELOCATED_REPO_ACCESS_IS_OK