aboutsummaryrefslogtreecommitdiff
path: root/readme.md
blob: 2df285fcc717f96b8c7d6c2591ef8d7c2ef1acae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Backup scripts

Annoyed by complicated backup solutions, I've written my own simple scripts
to back up only what I care about in a format that's easily unpacked on a fresh
install of the system, that is, a tarball. There's no reason you couldn't
use `dump`, `btrfs send`, `zfs send` or similar, though and this script
supports handling that as long as you can pipe it over stdout and save to a file.

Not for everyone, and I don't even use it for backups of my largest files, for
instance photos, videos, etc I use rclone and rsync instead of these scripts.

## HOW TO

Clone this repo down to the system that'll run the backups, set up a
ssh key in `ssh/id_ed25519` ( `ssh-keygen -t ed25519 -f ssh/id_ed25519` or so )
and then set up your SSH config ( jump boxes, etc ) in `ssh/config`

From there create a directory for each server that you're backing up, for
instance if I want to back up a server called `example.com`, `mkdir example.com`.

From there, we need a script that will generate a tarball, examples can be
found in `openbsd.sh`, and `alpine.sh`, copy it to `example.com/backup.sh`,
and then `chmod +x` the file. This will be copied and then executed as root
on the remote machine. 

Another example worth calling out directly since it utilizes a slightly
different method, `alpine-diskless.sh` can be used to back up the config
using alpine's built in `lbu`, though it's worth passing in `-suffix tar.gz`
to the backup script.


Example crontab:

```
@monthly sh -c 'set -e;cd /home/backupdir;./backup.sh -type monthly -svr example.com'
@weekly sh -c 'set -e;cd /home/backupdir;./backup.sh -type weekly -svr example.com'
@daily sh -c 'set -e;cd /home/backupdir;./backup.sh -type daily -svr example.com'

# Clean up the old backups daily, see the clean.sh for an example
@daily sh -c 'set -e;cd /home/backupdir;./clean.sh
```