This commit is contained in:
Tomislav Kopić 2024-02-07 20:03:23 +01:00
commit a85701eee2
4 changed files with 162 additions and 0 deletions

53
borg-database-backup.sh Normal file
View File

@ -0,0 +1,53 @@
#!/bin/sh
# Borg repo location
REPOSITORY=/var/backup/database.borg/
# Example of remote repo
# REPOSITORY=ssh://backuper@192.168.1.100/var/backup/database.borg/
borgDoBackup() {
sudo -u postgres pg_dumpall > /var/backups/posgresql.sql
borg create -v --stats --compression zlib,6 $REPOSITORY::`date +%Y-%m-%d-%H:%M` /var/backups/posgresql.sql
rm /var/backups/posgresql.sql
borg prune -v $REPOSITORY --keep-daily=3 --keep-weekly=2 --keep-monthly=12
echo "`date +[%F/%T]` Done!"
}
repoid=$(grep "id" $REPOSITORY/config | awk '{print $3}')
procid=$(pgrep borg | tail -1)
if [ -d $REPOSITORY/lock.exclusive ] || [ -d /root/.cache/borg/$repoid/lock.exclusive ]; then
if [ ! -z $procid ]; then
echo "`date +[%F/%T]` Seems like the borg repo is busy at the moment, I will try again in 30 min"
at now + 30 minutes -f $0
exit
else
if [ -d $REPOSITORY/lock.exclusive ]; then
rm -r $REPOSITORY/lock.*
fi
if [ -d /root/.cache/borg/$repoid/lock.exclusive ]; then
rm -r /root/.cache/borg/$repoid/lock.*
fi
borgDoBackup
fi
else
borgDoBackup
fi
exit

53
borg-file-backup.sh Normal file
View File

@ -0,0 +1,53 @@
#!/bin/sh
# Borg repo location
REPOSITORY=/var/backup/files.borg/
# Example of remote repo
# REPOSITORY=ssh://backuper@192.168.1.100/var/backup/files.borg/
borgDoBackup() {
echo "`date +[%F/%T]` Starting the backup"
borg create -v --compression lzma,6 --stats $REPOSITORY::`date +%Y-%m-%d-%H:%M` /etc/ /var/www/ /var/spool/ --exclude=*.log
borg prune -v $REPOSITORY --keep-daily=3 --keep-weekly=2 --keep-monthly=12
echo "`date +[%F/%T]` Done!"
}
repoid=$(grep "id" $REPOSITORY/config | awk '{print $3}')
procid=$(pgrep borg | tail -1)
if [ -d $REPOSITORY/lock.exclusive ] || [ -d /root/.cache/borg/$repoid/lock.exclusive ]; then
if [ ! -z $procid ]; then
echo "`date +[%F/%T]` Seems like the borg repo is busy at the moment, I will try again in 30 min"
at now + 30 minutes -f $0
exit
else
if [ -d $REPOSITORY/lock.exclusive ]; then
rm -r $REPOSITORY/lock.*
fi
if [ -d /root/.cache/borg/$repoid/lock.exclusive ]; then
rm -r /root/.cache/borg/$repoid/lock.*
fi
borgDoBackup
fi
else
borgDoBackup
fi
exit

View File

@ -0,0 +1,10 @@
#!/bin/bash
borgRepos=$(find ~/path/to/backups/ -type d -name "*.borg")
for REPOSITORY in ${borgRepos}; do
borg prune -v $REPOSITORY --keep-daily=3 --keep-weekly=2 --keep-monthly=12
done
exit

46
cloudflare-ddns.sh Normal file
View File

@ -0,0 +1,46 @@
#!/bin/bash
# Cloudflare zone is the zone which holds the record
zone=example.com
# dnsrecord is the A record which will be updated
dnsrecord=ddns.example.com
## Cloudflare authentication details
## keep these private
cloudflare_auth_email=mail@example.com
cloudflare_auth_key=s3rys3cr3tcl0udfl4ret0ken
# Get the current external IP address
ip=$(curl -s -X GET https://ifconfig.me)
echo "Current IP is $ip"
if host $dnsrecord 1.1.1.1 | grep "has address" | grep "$ip"; then
echo "$dnsrecord is currently set to $ip; no changes needed"
exit
fi
# if here, the dns record needs updating
# get the zone id for the requested zone
zoneid=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone&status=active" \
-H "X-Auth-Email: $cloudflare_auth_email" \
-H "X-Auth-Key: $cloudflare_auth_key" \
-H "Content-Type: application/json" | jq -r '{"result"}[] | .[0] | .id')
echo "Zoneid for $zone is $zoneid"
# get the dns record id
dnsrecordid=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zoneid/dns_records?type=A&name=$dnsrecord" \
-H "X-Auth-Email: $cloudflare_auth_email" \
-H "X-Auth-Key: $cloudflare_auth_key" \
-H "Content-Type: application/json" | jq -r '{"result"}[] | .[0] | .id')
echo "DNSrecordid for $dnsrecord is $dnsrecordid"
# update the record
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zoneid/dns_records/$dnsrecordid" \
-H "X-Auth-Email: $cloudflare_auth_email" \
-H "X-Auth-Key: $cloudflare_auth_key" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"$dnsrecord\",\"content\":\"$ip\",\"ttl\":1,\"proxied\":false}" | jq