#!/usr/bin/env bash

echo "Available in debian, install with 020_sanoid.sh"
exit 1

#------------------------------------------------------------------------------

apt install -y libconfig-inifiles-perl git

cd /opt
git clone http://github.com/jimsalterjrs/sanoid

ln -s /opt/sanoid/sanoid /usr/sbin/

mkdir -p /etc/sanoid
cp /opt/sanoid/sanoid.conf /etc/sanoid/sanoid.conf
cp /opt/sanoid/sanoid.defaults.conf /etc/sanoid/sanoid.defaults.conf

# ###################################################################################
# # default template - DO NOT EDIT THIS FILE DIRECTLY.                              #
# #                    If you wish to override default values, you can create your  #
# #                    own [template_default] in /etc/sanoid/sanoid.conf.           #
# #                                                                                 #
# #                    you have been warned.                                        #
# ###################################################################################
#
# [template_default]
#
# # these settings don't make sense in a template, but we use the defaults file
# # as our list of allowable settings also, so they need to be present here even if
# # unset.
# path =
# recursive =
# use_template =
# process_children_only =
#
# # If any snapshot type is set to 0, we will not take snapshots for it - and will immediately
# # prune any of those type snapshots already present.
# #
# # Otherwise, if autoprune is set, we will prune any snapshots of that type which are older
# # than (setting * periodicity) - so if daily = 90, we'll prune any dailies older than 90 days.
# autoprune = yes
# hourly = 48
# daily = 90
# monthly = 6
# yearly = 0
# min_percent_free = 10
#
# # We will automatically take snapshots if autosnap is on, at the desired times configured
# # below (or immediately, if we don't have one since the last preferred time for that type).
# #
# # Note that we will not take snapshots for a given type if that type is set to 0 above,
# # regardless of the autosnap setting - for example, if yearly=0 we will not take yearlies
# # even if we've defined a preferred time for yearlies and autosnap is on.
# autosnap = 1;
# # hourly - top of the hour
# hourly_min = 0;
# # daily - at 23:59 (most people expect a daily to contain everything done DURING that day)
# daily_hour = 23;
# daily_min = 59;
# # monthly - immediately at the beginning of the month (ie 00:00 of day 1)
# monthly_mday = 1;
# monthly_hour = 0;
# monthly_min = 0;
# # yearly - immediately at the beginning of the year (ie 00:00 on Jan 1)
# yearly_mon = 1;
# yearly_mday = 1;
# yearly_hour = 0;
# yearly_min = 0;
#
# # monitoring plugin - define warn / crit levels for each snapshot type by age, in units of one period down
# # example hourly_warn = 90 means issue WARNING if most recent hourly snapshot is not less than 90 minutes old,
# # daily_crit = 36 means issue CRITICAL if most recent daily snapshot is not less than 36 hours old,
# # monthly_warn = 36 means issue WARNING if most recent monthly snapshot is not less than 36 days old... etc.
# #
# # monitor_dont_warn = yes will cause the monitoring service to report warnings as text, but with status OK.
# # monitor_dont_crit = yes will cause the monitoring service to report criticals as text, but with status OK.
# #
# # setting any value to 0 will keep the monitoring service from monitoring that snapshot type on that section at all.
# monitor = yes
# monitor_dont_warn = no
# monitor_dont_crit = no
# hourly_warn = 90
# hourly_crit = 360
# daily_warn = 28
# daily_crit = 32
# monthly_warn = 32
# monthly_crit = 35
# yearly_warn = 0
# yearly_crit = 0

## Examples
#
# * * * * * /usr/local/bin/sanoid --cron
#
# Only crontab entry you'll ever need. (You're of course perfectly welcome to do something like
#
# 0 * * * * /usr/local/bin/sanoid --cron
#
# instead if you want to limit number of executions possible.) different number of snapshots per volume
#
# Super easy. You can use templates, write your own templates, or override individual settings within a
# template.
#
# Some example usage, including recursive application (will apply to datasets that are children of the
# dataset being configured) and non-recursive, a custom template, and overriding individual settings in
# a template:

#/etc/sanoid/sanoid.conf:
#
#[pool/dataset1]
#   use_template=production
#   daily=60
#   recursive=yes
#
#[pool/dataset2]
#   use_template=production
#   daily=15
#   hourly=24
#   recursive=yes
#
#[pool/dataset3]
#   use_template=mytemplate
#
#[pool/dataset3/dataset4]
#   use_template=production
#
##########################
#
#[template_production]
#   hourly = 36
#   daily = 30
#   monthly = 3
#   yearly = 0
#   autosnap = yes
#   autoprune = yes
#
#[template_mytemplate]
#   hourly = 5
#   daily = 10
#   monthly = 0
#   yearly = 0
#   autosnap = yes
#   autoprune = yes

cat >/etc/sanoid/sanoid.conf <<'EOF'
######################################
# This is a sample sanoid.conf file. #
# It should go in /etc/sanoid.       #
######################################

# name your backup modules with the path to their ZFS dataset - no leading slash.
[zpoolname/datasetname]
	# pick one or more templates - they're defined (and editable) below. Comma separated, processed in order.
	# in this example, template_demo's daily value overrides template_production's daily value.
	use_template = production,demo

	# if you want to, you can override settings in the template directly inside module definitions like this.
	# in this example, we override the template to only keep 12 hourly and 1 monthly snapshot for this dataset.
	hourly = 12
	monthly = 1

# you can also handle datasets recursively.
[zpoolname/parent]
	use_template = production
	recursive = yes
	# if you want sanoid to manage the child datasets but leave this one alone, set process_children_only.
	process_children_only = yes

# you can selectively override settings for child datasets which already fall under a recursive definition.
[zpoolname/parent/child]
	# child datasets already initialized won't be wiped out, so if you use a new template, it will
	# only override the values already set by the parent template, not replace it completely.
	use_template = demo




#############################
# templates below this line #
#############################

# name your templates template_templatename. you can create your own, and use them in your module definitions above.

[template_demo]
	daily = 60

[template_production]
	hourly = 36
	daily = 30
	monthly = 3
	yearly = 0
	autosnap = yes
	autoprune = yes

[template_backup]
	autoprune = yes
	hourly = 30
	daily = 90
	monthly = 12
	yearly = 0

	### don't take new snapshots - snapshots on backup 
	### datasets are replicated in from source, not
	### generated locally
	autosnap = no

	### monitor hourlies and dailies, but don't warn or 
	### crit until they're over 48h old, since replication 
	### is typically daily only
	hourly_warn = 2880
	hourly_crit = 3600
	daily_warn = 48
	daily_crit = 60
EOF
