Compare commits

..

1 Commits

Author SHA1 Message Date
5753b425d6 Sanitized for CV
Some checks failed
Configure Kumonoboru / deploy (push) Has been cancelled
2023-11-21 23:01:20 +02:00
3 changed files with 38 additions and 64 deletions

View File

@@ -1,3 +0,0 @@
Gerbil-TK /var/Red-Vol/Media/Pictures
Pukeko-XYZ-Containers /var/Red-Vol/Media/Containers
Pukeko-XYZ-Cloud /var/Red-Vol/Media/Could

5
inventory.yaml Normal file
View File

@@ -0,0 +1,5 @@
all:
hosts:
takahe:
ansible_host: 192.168.0.66
ansible_user: shmick

View File

@@ -1,5 +1,6 @@
#!/bin/bash #!/bin/bash
##Simple script to run Restic backups ## Script to run Restic backups to a B2 backend.
## It makes sure each of the preconfigured repositories can be safely backed up.
show_help() show_help()
{ {
@@ -10,9 +11,9 @@ show_help()
echo " {-v|--verbose} -- Print debug messages" echo " {-v|--verbose} -- Print debug messages"
echo " {-h|--show_help} -- Print this show_help message and exit" echo " {-h|--show_help} -- Print this show_help message and exit"
echo "Available repositories:" echo "Available repositories:"
echo "Gerbil-TK Photos (path: /var/Red-Vol/Media/Pictures)" echo "REPO-1 stuff (path: /stuff/stuff1)"
echo "Pukeko-XYZ-Containers Containers (path: /var/Red-Vol/Media/Containers)" echo "REPO-2 other stuff (path: /stuff/stuff2)"
echo "Pukeko-XYZ-Cloud Data from all devices (path: /var/Red-Vol/Media/Cloud)" echo "REPO-3 more stuff (path: /stuff/stuff3)"
exit 0 exit 0
} }
#Pass arguments to the script #Pass arguments to the script
@@ -44,23 +45,7 @@ flags()
} }
flags "$@" flags "$@"
#File to write results to; picked up by Prometheus and yells about changes ## Defaults
PROM_FILE="$CONTAINER_DIR/prometheus/data/kumonoboru.prom"
#Remove log from last runs, if present
if [[ -f $PROM_FILE ]]; then
rm $PROM_FILE
fi
## Monitoring codes:
#+ -3 - failed pruning
#+ -2 - failed integrity check
#+ -1 - failed to unlock
#+ 0 - succesfully backed up
#+ 1 - failed backup
#+ 2 - passed integrity check
#+ 3- succesfully pruned
#Defaults
if [[ -z $BWLIMIT ]]; then if [[ -z $BWLIMIT ]]; then
export BWLIMIT="0" export BWLIMIT="0"
else else
@@ -73,10 +58,6 @@ if [[ -n $REPOSITORY ]]; then
echo -e "Will only process repository" "$1" echo -e "Will only process repository" "$1"
fi fi
export B2_ACCOUNT_ID=8582a42a3b99 #Master Key
export B2_ACCOUNT_KEY=00041845e8dd29d7e3d091d77bb8a631ee71332be7 #Master Application ID
RESTIC_PASSWORD='f$774$#je4%U8vp8ov*UsZMHqL$m3Smh#fEbbt7hyULQxfnnWmSiS5MEndzVWT$$n^@s$P*o4vV*^rgv3jvvrv@y35VppU$$y*vnG5V@botU&4$39Y6t9HSb3Z548M!4'
#Safety function; accepts repository to check #Safety function; accepts repository to check
safety(){ safety(){
@@ -85,8 +66,7 @@ safety(){
#Check no other Restic process is using this repository; Free unnecessary locks, if present #Check no other Restic process is using this repository; Free unnecessary locks, if present
if [[ -n $(ps aux | grep restic | grep "$REPOSITORY") ]]; then if [[ -n $(ps aux | grep restic | grep "$REPOSITORY") ]]; then
echo -e "Repository is in use - ignoring" echo -e "Repository is in use - ignoring"
echo "system_backup{name=\"$REPOSITORY\"} -1" >> $PROM_FILE return 1
return 1 # code for ^ failed to unlock
# ^ If there's a restic process holding the repository, leave it alone. # ^ If there's a restic process holding the repository, leave it alone.
else else
echo -e "Repository is not in use - unlocking" echo -e "Repository is not in use - unlocking"
@@ -104,10 +84,8 @@ backup(){
echo -e "Backing up repository" "$REPOSITORY" echo -e "Backing up repository" "$REPOSITORY"
if restic --cache-dir="$RESTIC_CACHE_DIR" -r b2:"$REPOSITORY" backup "$REPOSITORY_PATH" --limit-upload="$BWLIMIT" --limit-download="$BWLIMIT"; then if restic --cache-dir="$RESTIC_CACHE_DIR" -r b2:"$REPOSITORY" backup "$REPOSITORY_PATH" --limit-upload="$BWLIMIT" --limit-download="$BWLIMIT"; then
echo -e "$REPOSITORY_PATH" "completed upload to $REPOSITORY." echo -e "$REPOSITORY_PATH" "completed upload to $REPOSITORY."
echo "system_backup{name=\"$REPOSITORY\"} 0" >> $PROM_FILE
else else
echo -e "$REPOSITORY failed to upload path" "$REPOSITORY_PATH" echo -e "$REPOSITORY failed to upload path" "$REPOSITORY_PATH"
echo "system_backup{name=\"$REPOSITORY\"} 1" >> $PROM_FILE
fi fi
fi fi
} }
@@ -129,9 +107,6 @@ check(){
restic -r b2:"$REPOSITORY" snapshots | tee -a $LOG restic -r b2:"$REPOSITORY" snapshots | tee -a $LOG
else else
echo -e "Repository failed integrity check - " "$REPOSITORY" echo -e "Repository failed integrity check - " "$REPOSITORY"
echo "system_backup{name=\"$REPOSITORY\"} -2" >> $PROM_FILE
# code for ^ failed integrity check
fi fi
fi fi
} }
@@ -147,33 +122,30 @@ clean(){
# Marks repository as cleaned already ^ so it won't passed to this function again. # Marks repository as cleaned already ^ so it won't passed to this function again.
else else
echo -e "Failed to prune repository" "$REPOSITORY" echo -e "Failed to prune repository" "$REPOSITORY"
echo "system_backup{name=\"$REPOSITORY\"} -3" >> $PROM_FILE
# code for ^ failed pruning
fi fi
fi fi
} }
#If cleaning was forced, or if it's the first of this month - clean. #If cleaning was forced, or if it's the first of this month - clean.
if [[ -n $CLEAN ]] || [[ $(date +%d) == "1" ]]; then if [[ -n $CLEAN ]] || [[ $(date +%d) == "1" ]]; then
check Gerbil-TK check REPO-1
clean Gerbil-TK clean REPO-1
check Pukeko-XYZ-Containers check REPO-2
clean Pukeko-XYZ-Containers clean REPO-2
check Pukeko-XYZ-Cloud check REPO-3
clean Pukeko-XYZ-Cloud clean REPO-3
#If a specific repository was requested, back it up; otherwise, back them all up. #If a specific repository was requested, back it up; otherwise, back them all up.
elif [[ -n $REPOSITORY ]] && [[ -z $CLEAN ]]; then elif [[ -n $REPOSITORY ]] && [[ -z $CLEAN ]]; then
case "$REPOSITORY" in case "$REPOSITORY" in
(Gerbil-TK) (REPO-1)
backup Gerbil-TK /var/Red-Vol/Media/Pictures/ backup REPO-1 /stuff/stuff1/
;; ;;
(Pukeko-XYZ-Containers) (REPO-2)
backup Pukeko-XYZ-Containers /var/Red-Vol/Media/Containers/ backup REPO-2 /stuff/stuff2/
;; ;;
(Pukeko-XYZ-Cloud) (REPO-3)
backup Pukeko-XYZ-Cloud /var/Red-Vol/Media/Cloud/ backup REPO-3 /stuff/stuff3/
;; ;;
(*) (*)
show_help;; show_help;;
@@ -181,24 +153,24 @@ elif [[ -n $REPOSITORY ]] && [[ -z $CLEAN ]]; then
#If cleaning was not forced, backup the repositories #If cleaning was not forced, backup the repositories
elif [[ -z $CLEAN ]]; then elif [[ -z $CLEAN ]]; then
backup Gerbil-TK /var/Red-Vol/Media/Pictures/ backup REPO-1 /stuff/stuff1/
backup Pukeko-XYZ-Containers /var/Red-Vol/Media/Containers/ backup REPO-2 /stuff/stuff2/
backup Pukeko-XYZ-Cloud /var/Red-Vol/Media/Cloud/ backup REPO-3 /stuff/stuff3/
#If a specific repository was requested to be cleaned, clean it #If a specific repository was requested to be cleaned, clean it
elif [[ -n $REPOSITORY ]] && [[ -n $CLEAN ]]; then elif [[ -n $REPOSITORY ]] && [[ -n $CLEAN ]]; then
case "$REPOSITORY" in case "$REPOSITORY" in
(Gerbil-TK) (REPO-1)
check Gerbil-TK check REPO-1
clean Gerbil-TK clean REPO-1
;; ;;
(Pukeko-XYZ-Containers) (REPO-2)
check Pukeko-XYZ-Containers check REPO-2
clean Pukeko-XYZ-Containers clean REPO-2
;; ;;
(Pukeko-XYZ-Cloud) (REPO-3)
check Pukeko-XYZ-Cloud check REPO-3
clean Pukeko-XYZ-Cloud clean REPO-3
;; ;;
(*) (*)
show_help;; show_help;;