I will use SSH to set up everything instead of using TrueNAS UI. I wouldn’t say I like it and want to make this guide applicable to every FreeBSD-based system. Make sure that you have a root SSH login in your TrueNAS settings.
In my case, my ZFS pool is named “storage”.
Create ZFS dataset for restic and download it. I will start by creating a “storage/tools” dataset for restic binary, cache (and maybe more tools in future). It will be automatically mounted at /mnt/storage/tools
[email protected][~]# zfs create storage/tools
[email protected][~]# cd /mnt/storage/tools
Now go to https://github.com/restic/restic/releases and get the latest restic release for FreeBSD (0.13.1 in my case)
[email protected][/mnt/storage/tools]# wget https://github.com/restic/restic/releases/download/v0.13.1/restic_0.13.1_freebsd_amd64.bz2
[email protected][/mnt/storage/tools]# bzip2 -d restic_0.13.1_freebsd_amd64.bz2
[email protected][/mnt/storage/tools]# mv restic_0.13.1_freebsd_amd64 restic
[email protected][/mnt/storage/tools]# chmod +x restic
As you see, I unpacked the bz2 file (-d flag deletes source archive after unpacking), renamed the file to “restic” and make it executable.
I also decided to write a simple bash script to make managing multiple “restic repos” easier.
#!/bin/bash
export RESTIC_PASSWORD=
export RESTIC_REPOSITORY=s3://s3.filebase.com/homelab-restic/$1
export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=
export XDG_CACHE_HOME=/mnt/storage/tools/cache/restic
/mnt/storage/tools/restic ${@:2}
As you can see, I use an external S3-compatible service to store my snapshots (https://filebase.com in this case). All files are stored in one bucket named “homelab-restic” (you will have to change that) and have subfolders for each restic repository. This script accepts the first argument as the repository name (in my case “mariadb”), so let’s init the repository first.
[email protected][/mnt/storage/tools]# bash restic.sh mariadb init
Now you can use backup subcommand to make a snapshot of your files
[email protected][/mnt/storage/tools]# bash restic.sh mariadb backup /mnt/storage/apps/mariadb
And snapshots subcommand to list snapshots
[email protected][/mnt/storage/tools]# bash restic.sh mariadb snapshots
repository 5be896f7 opened successfully, password is correct
ID Time Host Tags Paths
--------------------------------------------------------------------------------
c031c4a8 2022-05-17 08:35:59 homelab /mnt/storage/apps/mariadb
--------------------------------------------------------------------------------
1 snapshots
Rest of the commands you can see in the restic manual at https://restic.readthedocs.io/en/latest/manual_rest.html
In the end, add backup command to crontab and forget about it.
[email protected][/mnt/storage/tools]# EDITOR=nano crontab -e
and add
0 3 * * * bash /mnt/storage/tools/restic.sh mariadb backup /mnt/storage/apps/mariadb
It will make a backup at 3:00 local system time every day. Use CTRL+X to exit nano, and type Y to save the file.