Compare commits
11 Commits
bce1d63c9b
...
02a27f55a1
Author | SHA1 | Date |
---|---|---|
Asif Bacchus | 02a27f55a1 | |
Asif Bacchus | 581f69f429 | |
Asif Bacchus | 4d1b3a2a65 | |
Asif Bacchus | 13bb16bfda | |
Asif Bacchus | 3a0423ad49 | |
Asif Bacchus | 7838b0c6e0 | |
Asif Bacchus | 3fc67f9fe3 | |
Asif Bacchus | 5836cbd7e7 | |
Asif Bacchus | 65bfe96b68 | |
Asif Bacchus | 702e4e6d10 | |
Asif Bacchus | cb303a58a5 |
|
@ -0,0 +1,81 @@
|
|||
# Common settings that generally should always be used with your language specific settings
|
||||
|
||||
# Auto detect text files and perform LF normalization
|
||||
# https://www.davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/
|
||||
* text=auto
|
||||
|
||||
#
|
||||
# The above will handle all files NOT found below
|
||||
#
|
||||
|
||||
# Documents
|
||||
*.bibtex text diff=bibtex
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
*.docx diff=astextplain
|
||||
*.DOCX diff=astextplain
|
||||
*.dot diff=astextplain
|
||||
*.DOT diff=astextplain
|
||||
*.pdf diff=astextplain
|
||||
*.PDF diff=astextplain
|
||||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
||||
*.md text
|
||||
*.tex text diff=tex
|
||||
*.adoc text
|
||||
*.textile text
|
||||
*.mustache text
|
||||
*.csv text
|
||||
*.tab text
|
||||
*.tsv text
|
||||
*.txt text
|
||||
*.sql text
|
||||
|
||||
# Graphics
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.gif binary
|
||||
*.tif binary
|
||||
*.tiff binary
|
||||
*.ico binary
|
||||
# SVG treated as an asset (binary) by default.
|
||||
*.svg text
|
||||
# If you want to treat it as binary,
|
||||
# use the following line instead.
|
||||
# *.svg binary
|
||||
*.eps binary
|
||||
|
||||
# Scripts
|
||||
*.bash text eol=lf
|
||||
*.fish text eol=lf
|
||||
*.sh text eol=lf
|
||||
# These are explicitly windows files and should use crlf
|
||||
*.bat text eol=crlf
|
||||
*.cmd text eol=crlf
|
||||
*.ps1 text eol=crlf
|
||||
|
||||
# Serialisation
|
||||
*.json text
|
||||
*.toml text
|
||||
*.xml text
|
||||
*.yaml text
|
||||
*.yml text
|
||||
|
||||
# Archives
|
||||
*.7z binary
|
||||
*.gz binary
|
||||
*.tar binary
|
||||
*.tgz binary
|
||||
*.zip binary
|
||||
|
||||
# Text files where line endings should be preserved
|
||||
*.patch -text
|
||||
|
||||
#
|
||||
# Exclude files from exporting
|
||||
#
|
||||
|
||||
.gitattributes export-ignore
|
||||
.gitignore export-ignore
|
||||
.vscode export-ignore
|
|
@ -0,0 +1,10 @@
|
|||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
*.code-workspace
|
||||
!.vscode/numbered-bookmarks.json
|
||||
|
||||
# don't track testing version of .vars file
|
||||
*.borgvars
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"bookmarks": []
|
||||
}
|
|
@ -1,3 +1,3 @@
|
|||
# borgScripts
|
||||
|
||||
semi-automate viewing and restoring data from borg repos
|
||||
Pull various environment variables from a central file and save the typing associated with viewing and restoring borg archives.
|
||||
|
|
|
@ -0,0 +1,191 @@
|
|||
#!/bin/sh
|
||||
|
||||
#
|
||||
## borg helper script for viewing and restoring backups
|
||||
#
|
||||
|
||||
### trap
|
||||
trap trapExit 1 2 3 6
|
||||
|
||||
### functions
|
||||
consoleError() {
|
||||
printf "%s\n%s\n" "$err" "$2"
|
||||
printf "Exiting.\n\n%s" "$norm"
|
||||
exit "$1"
|
||||
}
|
||||
|
||||
textblock() {
|
||||
printf "%s\n" "$1" | fold -w "$width" -s
|
||||
}
|
||||
|
||||
trapExit () {
|
||||
printf "%s\nScript execution terminated via signal.\n\n%s" "$err" "$norm"
|
||||
exit 99
|
||||
}
|
||||
|
||||
|
||||
### text formatting presets
|
||||
err=$(tput bold)$(tput setaf 1)
|
||||
norm=$(tput sgr0)
|
||||
width=$(tput cols)
|
||||
|
||||
|
||||
### pre-requisites
|
||||
|
||||
# is user root?
|
||||
if [ ! "$( id -u )" -eq 0 ]; then
|
||||
consoleError 1 'You must be root to run this script.'
|
||||
fi
|
||||
|
||||
# has a parameter been passed to this script?
|
||||
if [ -z "$1" ]; then
|
||||
consoleError 1 "No operation requested. Please run this script with '--help' for valid parameters."
|
||||
fi
|
||||
|
||||
# process startup parameters
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
-a|--archive)
|
||||
# name of backup archive
|
||||
if [ -z "$2" ]; then
|
||||
consoleError 1 "Please provide the name of the backup archive you want to work with or use '--list-all' to get a full list."
|
||||
fi
|
||||
archiveName="$2"
|
||||
shift
|
||||
;;
|
||||
-f|--file)
|
||||
# specific file to restore
|
||||
if [ -z "$2" ]; then
|
||||
consoleError 1 'Please provide the name of the specific file you want to restore.'
|
||||
fi
|
||||
fileName="$2"
|
||||
shift
|
||||
;;
|
||||
-h|-\?|--help)
|
||||
# display help
|
||||
printf "\nStill working on the help text :-)\n\n"
|
||||
exit 0
|
||||
;;
|
||||
-l|--list)
|
||||
# list contents of specific backup
|
||||
operation='viewarchive'
|
||||
;;
|
||||
|
||||
-la|--list-all)
|
||||
# list all backup archives
|
||||
operation='listall'
|
||||
;;
|
||||
-p|--path)
|
||||
# path to restore files
|
||||
if [ -z "$2" ]; then
|
||||
consoleError 1 'Please specify a path where you want files restored.'
|
||||
fi
|
||||
restorePath="${2%/}"
|
||||
shift
|
||||
;;
|
||||
-r|--restore)
|
||||
# restore archive/file
|
||||
operation='restore'
|
||||
;;
|
||||
-v|--vars)
|
||||
# location of borgvars file
|
||||
if [ -z "$2" ]; then
|
||||
consoleError 1 'Please provide the path to the file with your borg connection information.'
|
||||
elif [ ! -f "$2" ]; then
|
||||
consoleError 1 'The specified borg connection information file does not exist.'
|
||||
exit 1
|
||||
fi
|
||||
varsFile="$2"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
# invalid option
|
||||
printf "%s\nUnknown option: %s\n" "$err" "$1"
|
||||
printf "Use '--help' for valid options.\n\n%s" "$norm"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
|
||||
### check parameter validity
|
||||
|
||||
# no operation
|
||||
if [ -z "$operation" ]; then
|
||||
consoleError 1 'Nothing to do!'
|
||||
fi
|
||||
|
||||
# no borg information file
|
||||
if [ -z "$varsFile" ]; then
|
||||
consoleError 1 'You must provide a valid .borgvars file with information about your borg repo.'
|
||||
fi
|
||||
|
||||
# list without archive
|
||||
if [ "$operation" = 'list' ] && [ -z "$archiveName" ]; then
|
||||
consoleError 1 "List operation requested but no archive name provided. Please use '--list-all' for a list of all available archives."
|
||||
fi
|
||||
|
||||
# restore with no path
|
||||
if [ "$operation" = 'restore' ] && [ -z "$restorePath" ]; then
|
||||
consoleError 1 "Restore operation requested but no restore path provided."
|
||||
# restore with no archive
|
||||
elif [ "$operation" = 'restore' ] && [ -z "$archiveName" ]; then
|
||||
consoleError 1 "Restore operation requested but no archive name provided."
|
||||
fi
|
||||
|
||||
# file provided but no archive
|
||||
if [ "$fileName" ] && [ -z "$archiveName" ]; then
|
||||
consoleError 1 "Filename specified without an associated archive name."
|
||||
fi
|
||||
|
||||
|
||||
### read borg information file
|
||||
|
||||
# check if file was provided as a relative or absolute path
|
||||
case "${varsFile}" in
|
||||
/*)
|
||||
# absolute path, no need to rewrite variable
|
||||
. "${varsFile}"
|
||||
;;
|
||||
*)
|
||||
# relative path, prepend './' to create absolute path
|
||||
. "./${varsFile}"
|
||||
;;
|
||||
esac
|
||||
|
||||
# verify borg base directory
|
||||
if [ -z "${borgBaseDir}" ]; then
|
||||
consoleError 2 "$varsFile: 'borgBaseDir' is not specified."
|
||||
elif [ ! -d "${borgBaseDir}" ]; then
|
||||
consoleError 2 "$varsFile: 'borgBaseDir' does not exist."
|
||||
fi
|
||||
export BORG_BASE_DIR="${borgBaseDir%/}"
|
||||
|
||||
## check path to SSH keyfile
|
||||
if [ -z "${sshKeyFile}" ]; then
|
||||
consoleError 2 "$varsFile: 'sshKeyFile' is not specified."
|
||||
elif [ ! -f "${sshKeyFile}" ]; then
|
||||
consoleError 2 "$varsFile: 'sshKeyFile' does not exist."
|
||||
fi
|
||||
export BORG_RSH="ssh -i ${sshKeyFile}"
|
||||
|
||||
# check borg repo connect string
|
||||
if [ -z "${borgRepo}" ]; then
|
||||
consoleError 2 "$varsFile: 'borgRepo' is not specified."
|
||||
fi
|
||||
export BORG_REPO="${borgRepo}"
|
||||
|
||||
# check borg repo password
|
||||
if [ -n "${borgRepoPassword}" ]; then
|
||||
export BORG_PASSPHRASE="${borgRepoPassword}"
|
||||
elif [ "${borgRepoPassword}" = '<none>' ]; then
|
||||
export BORG_PASSPHRASE=""
|
||||
else
|
||||
consoleError 2 "$varsFile: 'borgRepoPassword' must be specified or must be '<none>' if no password has been set (VERY INSECURE!)."
|
||||
fi
|
||||
|
||||
# export borg remote path, if specified
|
||||
if [ -n "${borgRemote}" ]; then export BORG_REMOTE_PATH="${borgRemote}"; fi
|
||||
|
||||
|
Loading…
Reference in New Issue