mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-26 09:46:09 +00:00
sysutils/zrepl-dsh2dsh: update to 0.8.5
Changelog: https://github.com/dsh2dsh/zrepl/releases/tag/v0.8.5 New configuration for control and prometheus services. Example: listen: # control socket for zrepl client, like `zrepl signal` or `zrepl status`. - unix: "/var/run/zrepl/control" # unix_mode: 0o660 # write perm for group control: true # Export Prometheus metrics on http://127.0.0.1:8000/metrics - addr: "127.0.0.1:8000" # tls_cert: "/usr/local/etc/zrepl/cert.pem" # tls_key: "/usr/local/etc/zrepl/key.pem" metrics: true One of `addr` or `unix` is required or both of them can be configured. One of `control` or `metrics` is required or both of them can be configured too. Everything else is optional. For backward compatibility old style configuration works too. PR: 282054
This commit is contained in:
parent
b751d1071c
commit
0e71889470
@ -1,6 +1,6 @@
|
||||
PORTNAME= zrepl
|
||||
DISTVERSIONPREFIX= v
|
||||
DISTVERSION= 0.8.4
|
||||
DISTVERSION= 0.8.5
|
||||
CATEGORIES= sysutils
|
||||
PKGNAMESUFFIX= -dsh2dsh
|
||||
|
||||
@ -12,30 +12,42 @@ LICENSE= MIT
|
||||
LICENSE_FILE= ${WRKSRC}/LICENSE
|
||||
|
||||
USES= go:1.23,modules ncurses
|
||||
USE_RC_SUBR= ${PORTNAME}
|
||||
|
||||
GO_MODULE= github.com/dsh2dsh/${PORTNAME}
|
||||
GO_BUILDFLAGS= -ldflags "${STRIP} -w -X github.com/dsh2dsh/${PORTNAME}/version.${PORTNAME}Version=${DISTVERSIONFULL}"
|
||||
|
||||
CONFLICTS_INSTALL= ${PORTNAME}
|
||||
|
||||
SUB_FILES= pkg-message 500.${PORTNAME} ${PORTNAME}.daily
|
||||
SUB_FILES= pkg-message
|
||||
|
||||
OPTIONS_DEFINE= EXAMPLES
|
||||
|
||||
post-patch:
|
||||
@${REINPLACE_CMD} \
|
||||
-e 's|/usr/local/etc/${PORTNAME}|${ETCDIR}|g' \
|
||||
-e 's|/usr/local|${PREFIX}|g' \
|
||||
${WRKSRC}/dist/freebsd/etc/periodic/daily/${PORTNAME} \
|
||||
${WRKSRC}/dist/freebsd/etc/periodic/weekly/500.${PORTNAME} \
|
||||
${WRKSRC}/dist/freebsd/etc/rc.d/${PORTNAME}
|
||||
|
||||
post-install:
|
||||
${MKDIR} ${STAGEDIR}${EXAMPLESDIR} \
|
||||
${STAGEDIR}${ETCDIR} \
|
||||
${STAGEDIR}${PREFIX}/etc/newsyslog.conf.d
|
||||
${INSTALL_DATA} ${FILESDIR}/newsyslog.conf \
|
||||
${STAGEDIR}${EXAMPLESDIR}/newsyslog.conf
|
||||
${INSTALL_DATA} ${FILESDIR}/${PORTNAME}.yml \
|
||||
${STAGEDIR}${ETCDIR}/${PORTNAME}.yml.sample
|
||||
${MKDIR} ${STAGEDIR}${PREFIX}/etc/periodic/daily \
|
||||
${MKDIR} ${STAGEDIR}${ETCDIR} \
|
||||
${STAGEDIR}${EXAMPLESDIR} \
|
||||
${STAGEDIR}${PREFIX}/etc/newsyslog.conf.d \
|
||||
${STAGEDIR}${PREFIX}/etc/periodic/daily \
|
||||
${STAGEDIR}${PREFIX}/etc/periodic/weekly
|
||||
${INSTALL_SCRIPT} ${WRKDIR}/${PORTNAME}.daily \
|
||||
${INSTALL_SCRIPT} ${WRKSRC}/dist/freebsd/etc/rc.d/${PORTNAME} \
|
||||
${STAGEDIR}${PREFIX}/etc/rc.d
|
||||
${INSTALL_DATA} \
|
||||
${WRKSRC}/dist/freebsd/etc/newsyslog.conf.d/${PORTNAME}.conf \
|
||||
${STAGEDIR}${EXAMPLESDIR}/newsyslog.conf
|
||||
${INSTALL_DATA} ${WRKSRC}/dist/freebsd/etc/${PORTNAME}/${PORTNAME}.yml \
|
||||
${STAGEDIR}${ETCDIR}/${PORTNAME}.yml.sample
|
||||
${INSTALL_SCRIPT} \
|
||||
${WRKSRC}/dist/freebsd/etc/periodic/daily/${PORTNAME} \
|
||||
${STAGEDIR}${PREFIX}/etc/periodic/daily/${PORTNAME}
|
||||
${INSTALL_SCRIPT} ${WRKDIR}/500.${PORTNAME} \
|
||||
${INSTALL_SCRIPT} \
|
||||
${WRKSRC}/dist/freebsd/etc/periodic/weekly/500.${PORTNAME} \
|
||||
${STAGEDIR}${PREFIX}/etc/periodic/weekly/500.${PORTNAME}
|
||||
|
||||
post-install-EXAMPLES-on:
|
||||
|
@ -1,5 +1,5 @@
|
||||
TIMESTAMP = 1727718613
|
||||
SHA256 (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.4/v0.8.4.mod) = 6d039a394e4025517e66e4f016d60b5299d1541dca23913e1a8fa96bbedece12
|
||||
SIZE (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.4/v0.8.4.mod) = 3638
|
||||
SHA256 (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.4/v0.8.4.zip) = f4a6f71ae6711e8307f4d1bb2a53e653b11ed3389c879597800a331db674fd39
|
||||
SIZE (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.4/v0.8.4.zip) = 605289
|
||||
TIMESTAMP = 1728757205
|
||||
SHA256 (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.5/v0.8.5.mod) = fa6b007413229b4bcba2c4871c96a3024f0cd52e8a42b0e60ff844bff0a8a2c5
|
||||
SIZE (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.5/v0.8.5.mod) = 3490
|
||||
SHA256 (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.5/v0.8.5.zip) = b209f3417f5c1b5b4dee485eda8e54aec73689f3784333252c1fe001aa42fd62
|
||||
SIZE (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.5/v0.8.5.zip) = 605727
|
||||
|
@ -1,41 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Check zrepl SSL certificates for impending expiration each week
|
||||
#
|
||||
# Add the following lines to /etc/periodic.conf:
|
||||
#
|
||||
# weekly_zrepl_enable (bool): Set to "NO" by default
|
||||
# weekly_zrepl_warntime (int): Set to one month's worth of seconds by default
|
||||
|
||||
# If there is a global system configuration file, suck it in.
|
||||
#
|
||||
if [ -r /etc/defaults/periodic.conf ]
|
||||
then
|
||||
. /etc/defaults/periodic.conf
|
||||
source_periodic_confs
|
||||
fi
|
||||
|
||||
# 30 days in seconds
|
||||
: ${weekly_zrepl_warntime="2592000"}
|
||||
|
||||
rc=0
|
||||
case "$weekly_zrepl_enable" in
|
||||
[Yy][Ee][Ss])
|
||||
echo
|
||||
echo "Check Zrepl certificates for upcoming expiration:"
|
||||
|
||||
for cert in `/usr/bin/find %%ETCDIR%% -maxdepth 1 -name *.crt`; do
|
||||
/usr/bin/openssl x509 --in "${cert}" \
|
||||
-checkend "${weekly_zrepl_warntime}"
|
||||
|
||||
if [ $? -gt 0 ]; then
|
||||
echo "${cert} will expire soon"
|
||||
/usr/bin/openssl x509 --in "${cert}" -noout -enddate
|
||||
rc=3
|
||||
fi
|
||||
done
|
||||
;;
|
||||
*) rc=0;;
|
||||
esac
|
||||
|
||||
exit $rc
|
@ -1,5 +0,0 @@
|
||||
# Newsyslog configuration file for zrepl.
|
||||
# See newsyslog.conf(5) for details.
|
||||
#
|
||||
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
|
||||
/var/log/zrepl.log 644 7 * 24 JNC
|
@ -24,6 +24,11 @@ For any ZFS snapshot that you want to keep, at least one rule must match.
|
||||
This also applies to snapshots taken by means other than zrepl
|
||||
(e.g. snapshots taken manually or via boot environment tools).
|
||||
|
||||
For monitoring zrepl daemon health and snapshots add this line to
|
||||
/etc/periodic.conf:
|
||||
|
||||
daily_zrepl_enable="YES"
|
||||
|
||||
In order to automatically warn the operator of impending certificate
|
||||
expiration, add this line to /etc/periodic.conf:
|
||||
|
||||
|
@ -1,27 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -r /etc/defaults/periodic.conf ]
|
||||
then
|
||||
. /etc/defaults/periodic.conf
|
||||
source_periodic_confs
|
||||
fi
|
||||
|
||||
: "${daily_zrepl_enable=NO}"
|
||||
: "${daily_zrepl_warn=15m}"
|
||||
: "${daily_zrepl_crit=1h}"
|
||||
zrepl="%%PREFIX%%/bin/zrepl"
|
||||
|
||||
case "$daily_zrepl_enable" in
|
||||
[Yy][Ee][Ss])
|
||||
if service zrepl enabled; then
|
||||
echo
|
||||
echo "Check zrepl status:"
|
||||
$zrepl monitor alive -w "$daily_zrepl_warn" -c "$daily_zrepl_crit"
|
||||
$zrepl monitor snapshots
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# assigned in periodic.conf
|
||||
# shellcheck disable=SC2086,SC2154
|
||||
exit $rc
|
@ -1,104 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# PROVIDE: zrepl
|
||||
# REQUIRE: LOGIN
|
||||
# KEYWORD: shutdown
|
||||
#
|
||||
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf to enable this
|
||||
# service:
|
||||
#
|
||||
# zrepl_enable (bool): Set to YES to enable the zrepl service.
|
||||
# Default: NO
|
||||
# zrepl_config (str): File containing zrepl configuration details.
|
||||
# Default: %%PREFIX%%/etc/zrepl/zrepl.yml
|
||||
# zrepl_user (str): The user account used to run the zrepl daemon.
|
||||
# Do not specifically set this to an empty string as this
|
||||
# will cause the daemon to run as root.
|
||||
# Default: root
|
||||
# zrepl_group (str): The group account used to run the zrepl daemon.
|
||||
# Do not specifically set this to an empty string as this
|
||||
# will cause the daemon to run with group wheel.
|
||||
# Default: wheel
|
||||
# zrepl_flags (str): Extra flags passed to zrepl
|
||||
# Default: ""
|
||||
# zrepl_facility (str): Syslog facility to use
|
||||
# Default: local0
|
||||
# zrepl_priority (str): Syslog priority to use
|
||||
# Default: alert
|
||||
#
|
||||
# zrepl_gracefully (bool): Set to YES to always stop the zrepl service
|
||||
# gracefully.
|
||||
# Default: NO
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="zrepl"
|
||||
rcvar="${name}_enable"
|
||||
load_rc_config "$name"
|
||||
|
||||
: ${zrepl_enable:="NO"}
|
||||
: ${zrepl_config:="%%PREFIX%%/etc/zrepl/zrepl.yml"}
|
||||
: ${zrepl_user:="root"}
|
||||
: ${zrepl_group:="wheel"}
|
||||
: ${zrepl_flags:=""}
|
||||
: ${zrepl_facility:="local0"}
|
||||
: ${zrepl_priority:="alert"}
|
||||
: ${zrepl_options:="$zrepl_flags --config $zrepl_config"}
|
||||
: ${zrepl_gracefully:="NO"}
|
||||
|
||||
: ${zrepl_control_group:="$zrepl_group"}
|
||||
: ${zrepl_control_mode:="0700"}
|
||||
|
||||
pidfile="/var/run/zrepl.pid"
|
||||
command="/usr/sbin/daemon"
|
||||
procname="%%PREFIX%%/bin/zrepl"
|
||||
command_args="-p $pidfile -S -l $zrepl_facility -s $zrepl_priority -T $name \
|
||||
$procname $zrepl_options daemon"
|
||||
|
||||
start_precmd="zrepl_precmd"
|
||||
restart_precmd="zrepl_checkconfig"
|
||||
configtest_cmd="zrepl_checkconfig"
|
||||
graceful_cmd="zrepl_graceful"
|
||||
gracefulstop_cmd="zrepl_gracefulstop"
|
||||
extra_commands="configtest graceful gracefulstop"
|
||||
|
||||
zrepl_checkconfig() {
|
||||
echo "Performing sanity check on zrepl configuration:"
|
||||
eval "$procname" $zrepl_options configcheck
|
||||
}
|
||||
|
||||
zrepl_precmd() {
|
||||
if [ ! -d "/var/run/zrepl/stdinserver" ]; then
|
||||
install -d -g "$zrepl_control_group" -o "$zrepl_user" \
|
||||
-m "$zrepl_control_mode" "/var/run/zrepl"
|
||||
install -d -g "$zrepl_control_group" -o "$zrepl_user" \
|
||||
-m "$zrepl_control_mode" "/var/run/zrepl/stdinserver"
|
||||
fi
|
||||
zrepl_checkconfig
|
||||
}
|
||||
|
||||
zrepl_graceful() {
|
||||
local _rc_prefix _return
|
||||
( run_rc_command gracefulstop $rc_extra_args )
|
||||
( run_rc_command start $rc_extra_args )
|
||||
_return=$?
|
||||
[ $_return -ne 0 ] && [ -z "$rc_force" ] && return 1
|
||||
return $_return
|
||||
}
|
||||
|
||||
zrepl_gracefulstop() {
|
||||
if [ -z "$rc_pid" ]; then
|
||||
echo 1>&2 "${name} not running? (check $pidfile)."
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Gracefully stopping ${name}."
|
||||
eval "$procname" signal shutdown
|
||||
wait_for_pids "$rc_pid"
|
||||
}
|
||||
|
||||
if checkyesno zrepl_gracefully; then
|
||||
stop_cmd="zrepl_gracefulstop"
|
||||
fi
|
||||
|
||||
run_rc_command "$1"
|
@ -1,151 +0,0 @@
|
||||
# zrepl main configuration file. For documentation, refer to
|
||||
# https://zrepl.github.io/ and https://github.com/dsh2dsh/zrepl
|
||||
#
|
||||
global:
|
||||
# rpc_timeout: "1m"
|
||||
zfs_bin: "/sbin/zfs"
|
||||
|
||||
logging:
|
||||
- type: "file"
|
||||
format: "text" # or "json"
|
||||
time: false # don't prepend with date and time
|
||||
hide_fields: &hide-log-fields
|
||||
- "span" # don't log "span" field
|
||||
level: "error" # log errors only
|
||||
# without filename logs to stderr
|
||||
- type: "file"
|
||||
format: "text"
|
||||
hide_fields: *hide-log-fields
|
||||
level: "info"
|
||||
filename: "/var/log/zrepl.log"
|
||||
|
||||
# Add "jobs:" section(s) here for your specific use cases.
|
||||
jobs:
|
||||
- name: "hourly-snap"
|
||||
type: "snap"
|
||||
filesystems: &filesystems
|
||||
"zroot/ROOT/default<": true
|
||||
"zroot/usr/home<": true
|
||||
snapshotting:
|
||||
type: "periodic"
|
||||
interval: "1h"
|
||||
prefix: "zrepl_hourly_"
|
||||
pruning: &keep-all
|
||||
|
||||
- name: "daily-snap"
|
||||
type: "snap"
|
||||
filesystems: *filesystems
|
||||
snapshotting:
|
||||
type: "periodic"
|
||||
interval: "1d"
|
||||
prefix: "zrepl_daily_"
|
||||
pruning: *keep-all
|
||||
|
||||
- name: "monthly-snap"
|
||||
type: "snap"
|
||||
filesystems: *filesystems
|
||||
snapshotting:
|
||||
type: "periodic"
|
||||
interval: "30d"
|
||||
prefix: "zrepl_monthly_"
|
||||
pruning: *keep-all
|
||||
|
||||
- name: "zdisk"
|
||||
type: "sink"
|
||||
root_fs: "zdisk/zrepl"
|
||||
serve:
|
||||
type: "local"
|
||||
listener_name: "zdisk"
|
||||
recv:
|
||||
placeholder:
|
||||
encryption: "inherit"
|
||||
monitor: &monitor-snapshots
|
||||
count:
|
||||
- prefix: "zrepl_frequently_"
|
||||
warning: 18
|
||||
critical: 30
|
||||
- prefix: "zrepl_hourly_"
|
||||
warning: 32
|
||||
critical: 50
|
||||
- prefix: "zrepl_daily_"
|
||||
warning: 92
|
||||
critical: 100
|
||||
- prefix: "zrepl_monthly_"
|
||||
warning: 14
|
||||
critical: 15
|
||||
- prefix: "" # everything else
|
||||
warning: 2
|
||||
critical: 10
|
||||
latest:
|
||||
- prefix: "zrepl_frequently_"
|
||||
critical: "48h" # 2d
|
||||
- prefix: "zrepl_hourly_"
|
||||
critical: "48h"
|
||||
- prefix: "zrepl_daily_"
|
||||
critical: "48h"
|
||||
- prefix: "zrepl_monthly_"
|
||||
critical: "768h" # 32d
|
||||
oldest:
|
||||
# see zroot-to-zdisk prunner.keep_receiver
|
||||
- prefix: "zrepl_frequently_"
|
||||
critical: "48h" # 2d
|
||||
- prefix: "zrepl_hourly_"
|
||||
critical: "168h" # 7d
|
||||
- prefix: "zrepl_daily_"
|
||||
critical: "2208h" # 90d + 2d
|
||||
- prefix: "zrepl_monthly_"
|
||||
critical: "8688h" # 30 * 12 = 360d + 2d
|
||||
- prefix: "" # everything else
|
||||
critical: "168h" # 7d
|
||||
|
||||
- name: "zroot-to-zdisk"
|
||||
type: "push"
|
||||
connect:
|
||||
type: "local"
|
||||
listener_name: "zdisk"
|
||||
client_identity: "localhost"
|
||||
filesystems: *filesystems
|
||||
replication: &replication
|
||||
# Send all intermediary snapshots as a stream package, instead of sending
|
||||
# them one by one.
|
||||
#one_step: true
|
||||
concurrency:
|
||||
size_estimates: 8
|
||||
conflict_resolution: &conflict_resolution
|
||||
initial_replication: "all"
|
||||
snapshotting:
|
||||
type: "periodic"
|
||||
cron: "*/15 * * * *"
|
||||
prefix: "zrepl_frequently_"
|
||||
pruning:
|
||||
keep_sender:
|
||||
- type: "not_replicated"
|
||||
- type: "last_n"
|
||||
count: 16
|
||||
regex: "^zrepl_frequently_"
|
||||
- type: "regex"
|
||||
negate: true
|
||||
regex: "^zrepl_"
|
||||
- type: "last_n"
|
||||
count: 8
|
||||
regex: "^zrepl_hourly_"
|
||||
- type: "last_n"
|
||||
count: 4
|
||||
regex: "^zrepl_daily_"
|
||||
- type: "last_n"
|
||||
count: 2
|
||||
regex: "^zrepl_monthly_"
|
||||
keep_receiver: &keep-receiver
|
||||
- type: "last_n"
|
||||
count: 2
|
||||
regex: "^zrepl_frequently_"
|
||||
- type: "last_n"
|
||||
count: 30
|
||||
regex: "^zrepl_hourly_"
|
||||
- type: "last_n"
|
||||
count: 90
|
||||
regex: "^zrepl_daily_"
|
||||
- type: "last_n"
|
||||
count: 12
|
||||
regex: "^zrepl_monthly_"
|
||||
monitor: *monitor-snapshots
|
@ -1,6 +1,7 @@
|
||||
bin/zrepl
|
||||
etc/periodic/daily/zrepl
|
||||
etc/periodic/weekly/500.zrepl
|
||||
etc/rc.d/zrepl
|
||||
@sample %%ETCDIR%%/zrepl.yml.sample
|
||||
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/bandwidth_limit.yml
|
||||
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/grafana-prometheus-zrepl.json
|
||||
|
Loading…
Reference in New Issue
Block a user