Initial pass of backup script
This commit is contained in:
@@ -0,0 +1,96 @@
|
|||||||
|
#!/usr/bin/nu
|
||||||
|
|
||||||
|
# slug pattern:
|
||||||
|
# {thing}-{location}-{kopia|zfs}
|
||||||
|
|
||||||
|
let b2Repo = "/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config"
|
||||||
|
let statusHost = "https://status.roo.lol"
|
||||||
|
let pingKey = "pRybo-Yjebna0KHQCYCpTg"
|
||||||
|
|
||||||
|
let jobs = [{ statusSlug: "photos-content-b2-kopia", type: "kopia", source: "/nas1/photos.roo.lol", target: $b2Repo, }
|
||||||
|
,{ statusSlug: "photos-service-b2-kopia", type: "kopia", source: "/services/photos.roo.lol", target: $b2Repo, }
|
||||||
|
,{ statusSlug: "network-fileshare-b2-kopia", type: "kopia", source: "/nas/files", target: $b2Repo, }
|
||||||
|
,{ statusSlug: "vaultwarden-b2-kopia", type: "kopia", source: "/services/passwords.roo.lol", target: $b2Repo, }
|
||||||
|
,{ statusSlug: "zendo-home-azul-zfs", type: "zfs", source: "backups@zendo.brechtel:rpool/home", target: "dune/backups/zendo/home"}
|
||||||
|
]
|
||||||
|
|
||||||
|
def backup [job] {
|
||||||
|
if job.type == "kopia" {
|
||||||
|
kopiaBackup job
|
||||||
|
} else if job.type == "zfs" {
|
||||||
|
zfsBackup job
|
||||||
|
} else {
|
||||||
|
print $ "Invalid job type: " + job.type
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def zfsBackup [job] {
|
||||||
|
let cmdStart = "zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive"
|
||||||
|
let cmd = $"($cmdStart) ($job.source) ($job.target)"
|
||||||
|
logStartJob $job.statusSlug
|
||||||
|
print $"running command: ($cmd)"
|
||||||
|
logFinishedJob $job.statusSlug
|
||||||
|
}
|
||||||
|
|
||||||
|
def kopiaBackup [job] {
|
||||||
|
#using sudo is annoying but since this is backing up docker containers
|
||||||
|
#the permissions are often wrong. I should be using podman + rootless
|
||||||
|
let cmd = $"sudo kopia --config-file=($job.target) snapshot create ($job.source)"
|
||||||
|
logStartJob $job.statusSlug
|
||||||
|
print $"running command: ($cmd)"
|
||||||
|
logFinishedJob $job.statusSlug
|
||||||
|
}
|
||||||
|
|
||||||
|
def logStartJob [slug] {
|
||||||
|
print $"starting job: ($slug)"
|
||||||
|
curl -s $"($statusHost)/ping/($pingKey)/($slug)/start"
|
||||||
|
}
|
||||||
|
|
||||||
|
def logFinishedJob [slug] {
|
||||||
|
print $"finished job: ($slug)"
|
||||||
|
curl -s $"($statusHost)/ping/($pingKey)/($slug)"
|
||||||
|
}
|
||||||
|
|
||||||
|
def main [jobName] {
|
||||||
|
let job = $jobs | where name == $jobName
|
||||||
|
}
|
||||||
|
|
||||||
|
#sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /nas1/photos.roo.lol
|
||||||
|
#sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/photos.roo.lol
|
||||||
|
#sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /nas/files
|
||||||
|
#sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/passwords.roo.lol
|
||||||
|
#sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/paperless.roo.lol
|
||||||
|
#sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/caddy
|
||||||
|
#sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/kitchen.roo.lol
|
||||||
|
#sudo kopia --config-file=/home/jbrechtel/kopia/leonard-brechtel-backup/repository.config snapshot create /services/ha.roo.lol/config/backups
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#echo "Backing up zendo.brechtel:rpool/home"
|
||||||
|
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@zendo.brechtel:rpool/home dune/backups/zendo/home
|
||||||
|
#
|
||||||
|
#echo "Backing up zendo.brechtel:rpool/work/flipstone"
|
||||||
|
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@zendo.brechtel:rpool/work/flipstone dune/backups/zendo/flipstone
|
||||||
|
#
|
||||||
|
#echo "Backing up zendo.brechtel:rpool/ROOT/archlinux"
|
||||||
|
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@zendo.brechtel:rpool/root dune/backups/zendo/root
|
||||||
|
#
|
||||||
|
##echo "Backing up splendor.brechtel:zpcachyos/ROOT/cos/home"
|
||||||
|
##zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@splendor.brechtel:zpcachyos/ROOT/cos/home dune/backups/splendor/home
|
||||||
|
#
|
||||||
|
##echo "Backing up splendor.brechtel:zpcachyos/ROOT"
|
||||||
|
##zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@splendor.brechtel:zpcachyos/ROOT/cos/root dune/backups/splendor/root
|
||||||
|
#
|
||||||
|
#echo "Backing up pandemic:primary/services"
|
||||||
|
#zfs --no-sync-snap --skip-parent --create-bookmark --no-privilege-elevation --recursive backups@pandemic.brechtel:primary/services dune/backups/pandemic/services
|
||||||
|
#
|
||||||
|
#echo "Backing up nas1/photos.roo.lol"
|
||||||
|
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@pandemic:nas1/photos.roo.lol dune/backups/photos.roo.lol
|
||||||
|
#
|
||||||
|
#echo "Backing up nas1/maggie"
|
||||||
|
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@pandemic:nas1/maggie dune/backups/files/maggie
|
||||||
|
#
|
||||||
|
#echo "Backing up nas1/maggie-kopia"
|
||||||
|
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@pandemic:nas1/maggie-kopia dune/backups/maggie-kopia
|
||||||
|
#
|
||||||
|
#echo "Backing up nas1/files"
|
||||||
|
#zfs --no-sync-snap --create-bookmark --no-privilege-elevation --recursive backups@pandemic:nas1/files dune/backups/files
|
||||||
|
|||||||
Reference in New Issue
Block a user