70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Django/Jinja
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| # Setting this, so the repo does not need to be given on the commandline:
 | |
| PUSH_KEY={{ backup.pushkey }}
 | |
| 
 | |
| # See the section "Passphrase notes" for more infos.
 | |
| export BORG_PASSPHRASE='{{ backup.password }}'
 | |
| export BORG_REPO=ssh://{{ backup.remote.user }}@{{ backup.remote.url }}
 | |
| export BORG_RSH='ssh -i /root/.ssh/storagebox'
 | |
| 
 | |
| # some helpers and error handling:
 | |
| info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
 | |
| trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
 | |
| 
 | |
| info "Initialize Repo"
 | |
| borg init -e repokey
 | |
| 
 | |
| info "Starting backup"
 | |
| 
 | |
| 
 | |
| # Backup the most important directories into an archive named after
 | |
| # the machine this script is currently running on:
 | |
| 
 | |
| borg create                         \
 | |
|     --verbose                       \
 | |
|     --filter AME                    \
 | |
|     --list                          \
 | |
|     --stats                         \
 | |
|     --show-rc                       \
 | |
|     --compression lz4               \
 | |
|     --exclude-caches                \
 | |
|     --one-file-system		        \
 | |
|     --exclude "re:^/var/lib/docker/volumes/nobackup_.*"   \
 | |
|     ::'{hostname}-{now}'            \
 | |
|     /var/lib/docker
 | |
| 
 | |
| backup_exit=$?
 | |
| 
 | |
| info "Pruning repository"
 | |
| 
 | |
| # Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
 | |
| # archives of THIS machine. The '{hostname}-' prefix is very important to
 | |
| # limit prune's operation to this machine's archives and not apply to
 | |
| # other machines' archives also:
 | |
| 
 | |
| borg prune                          \
 | |
|     --list                          \
 | |
|     --glob-archives '{hostname}-*'  \
 | |
|     --show-rc                       \
 | |
|     --keep-daily    7               \
 | |
|     --keep-weekly   4               \
 | |
|     --keep-monthly  6
 | |
| 
 | |
| prune_exit=$?
 | |
| 
 | |
| # use highest exit code as global exit code
 | |
| global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
 | |
| 
 | |
| if [ ${global_exit} -eq 0 ]; then
 | |
|     info "Backup and Prune finished successfully"
 | |
|     /usr/bin/curl -fsS -m 10 --retry 5 -o /dev/null "https://monitor.chaoswg.org/api/push/${PUSH_KEY}?msg=OK&ping="
 | |
| elif [ ${global_exit} -eq 1 ]; then
 | |
|     info "Backup and/or Prune finished with warnings"
 | |
|     /usr/bin/curl -fsS -m 10 --retry 5 -o /dev/null "https://monitor.chaoswg.org/api/push/${PUSH_KEY}?msg=OK&ping="
 | |
|     exit 0 # We dont want to get notified about warnings as this would make the systemd unit fail.
 | |
| else
 | |
|     info "Backup and/or Prune finished with errors"
 | |
| fi
 | |
| 
 | |
| exit ${global_exit}
 |