1
0
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:
Denis Shaposhnikov 2024-10-13 17:11:04 +02:00 committed by Robert Clausecker
parent b751d1071c
commit 0e71889470
9 changed files with 36 additions and 346 deletions

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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