git: 664fa9b2fe89 - main - sysutils/zrepl-dsh2dsh: update to 0.8.3

From: Robert Clausecker <fuz_at_FreeBSD.org>
Date: Wed, 25 Sep 2024 06:30:08 UTC
The branch main has been updated by fuz:

URL: https://cgit.FreeBSD.org/ports/commit/?id=664fa9b2fe89d886243f58a81f6109063bf208ea

commit 664fa9b2fe89d886243f58a81f6109063bf208ea
Author:     Denis Shaposhnikov <dsh@bamus.cz>
AuthorDate: 2024-09-21 13:38:04 +0000
Commit:     Robert Clausecker <fuz@FreeBSD.org>
CommitDate: 2024-09-25 06:28:04 +0000

    sysutils/zrepl-dsh2dsh: update to 0.8.3
    
    Changelog: https://github.com/dsh2dsh/zrepl/releases/tag/v0.8.3
    
    PR:             281591
    Event:          EuroBSDcon 2024
---
 sysutils/zrepl-dsh2dsh/Makefile        |  11 ++--
 sysutils/zrepl-dsh2dsh/distinfo        |  10 +--
 sysutils/zrepl-dsh2dsh/files/zrepl.in  | 116 ++++++++++++++++++++-------------
 sysutils/zrepl-dsh2dsh/files/zrepl.yml |  12 ----
 sysutils/zrepl-dsh2dsh/pkg-descr       |   8 ++-
 sysutils/zrepl-dsh2dsh/pkg-plist       |   1 -
 6 files changed, 85 insertions(+), 73 deletions(-)

diff --git a/sysutils/zrepl-dsh2dsh/Makefile b/sysutils/zrepl-dsh2dsh/Makefile
index c17df694bca6..c238886cd900 100644
--- a/sysutils/zrepl-dsh2dsh/Makefile
+++ b/sysutils/zrepl-dsh2dsh/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=	zrepl
 DISTVERSIONPREFIX=	v
-DISTVERSION=	0.7.8
+DISTVERSION=	0.8.3
 CATEGORIES=	sysutils
 PKGNAMESUFFIX=	-dsh2dsh
 
@@ -11,7 +11,7 @@ WWW=		https://github.com/dsh2dsh/${PORTNAME}
 LICENSE=	MIT
 LICENSE_FILE=	${WRKSRC}/LICENSE
 
-USES=		go:1.22,modules ncurses
+USES=		go:1.23,modules ncurses
 USE_RC_SUBR=	${PORTNAME}
 
 GO_MODULE=	github.com/dsh2dsh/${PORTNAME}
@@ -24,10 +24,9 @@ SUB_FILES=	pkg-message 500.${PORTNAME}
 OPTIONS_DEFINE=	EXAMPLES
 
 post-install:
-	@${MKDIR} ${STAGEDIR}${EXAMPLESDIR} \
+	${MKDIR} ${STAGEDIR}${EXAMPLESDIR} \
 		${STAGEDIR}${ETCDIR} \
-		${STAGEDIR}${PREFIX}/etc/newsyslog.conf.d \
-		${STAGEDIR}/var/run/${PORTNAME}
+		${STAGEDIR}${PREFIX}/etc/newsyslog.conf.d
 	${INSTALL_DATA} ${FILESDIR}/newsyslog.conf \
 		${STAGEDIR}${EXAMPLESDIR}/newsyslog.conf
 	${INSTALL_DATA} ${FILESDIR}/${PORTNAME}.yml \
@@ -37,7 +36,7 @@ post-install:
 		${STAGEDIR}${PREFIX}/etc/periodic/weekly/500.${PORTNAME}
 
 post-install-EXAMPLES-on:
-	@${MKDIR} ${STAGEDIR}${EXAMPLESDIR}/hooks
+	${MKDIR} ${STAGEDIR}${EXAMPLESDIR}/hooks
 	(cd ${WRKSRC}/config/samples && \
 		${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR})
 	${INSTALL_DATA} \
diff --git a/sysutils/zrepl-dsh2dsh/distinfo b/sysutils/zrepl-dsh2dsh/distinfo
index 77e2b6aa4cb4..ed630c91e26f 100644
--- a/sysutils/zrepl-dsh2dsh/distinfo
+++ b/sysutils/zrepl-dsh2dsh/distinfo
@@ -1,5 +1,5 @@
-TIMESTAMP = 1718809873
-SHA256 (go/sysutils_zrepl-dsh2dsh/zrepl-v0.7.8/v0.7.8.mod) = 6de73508b106ec921d08bc908dd74e461a0f3b37040791d3945ce48c11a2acbd
-SIZE (go/sysutils_zrepl-dsh2dsh/zrepl-v0.7.8/v0.7.8.mod) = 2984
-SHA256 (go/sysutils_zrepl-dsh2dsh/zrepl-v0.7.8/v0.7.8.zip) = 742801772c8511d8d7f03284520437128a70f8536b9722c9e9990335b6f14d17
-SIZE (go/sysutils_zrepl-dsh2dsh/zrepl-v0.7.8/v0.7.8.zip) = 589396
+TIMESTAMP = 1726766984
+SHA256 (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.3/v0.8.3.mod) = 6d039a394e4025517e66e4f016d60b5299d1541dca23913e1a8fa96bbedece12
+SIZE (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.3/v0.8.3.mod) = 3638
+SHA256 (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.3/v0.8.3.zip) = ba1ec6e71bb449d6e01b477387cbb003c55cb66f7820f141ce4135f862a9776c
+SIZE (go/sysutils_zrepl-dsh2dsh/zrepl-v0.8.3/v0.8.3.zip) = 602193
diff --git a/sysutils/zrepl-dsh2dsh/files/zrepl.in b/sysutils/zrepl-dsh2dsh/files/zrepl.in
index 6a2510f80572..2db852dd2a49 100644
--- a/sysutils/zrepl-dsh2dsh/files/zrepl.in
+++ b/sysutils/zrepl-dsh2dsh/files/zrepl.in
@@ -4,32 +4,37 @@
 # REQUIRE: LOGIN
 # KEYWORD: shutdown
 #
-# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
-# to enable this service:
+# 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_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
+
+name="zrepl"
+rcvar="${name}_enable"
+load_rc_config "$name"
 
 : ${zrepl_enable:="NO"}
 : ${zrepl_config:="%%PREFIX%%/etc/zrepl/zrepl.yml"}
@@ -38,43 +43,62 @@ load_rc_config $name
 : ${zrepl_flags:=""}
 : ${zrepl_facility:="local0"}
 : ${zrepl_priority:="alert"}
-: ${zrepl_options:="${zrepl_flags} --config ${zrepl_config}"}
+: ${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"
+command_args="-p $pidfile -S -l $zrepl_facility -s $zrepl_priority -T $name \
+  $procname $zrepl_options daemon"
 
 start_precmd="zrepl_precmd"
-stop_postcmd="zrepl_postcmd"
 restart_precmd="zrepl_checkconfig"
 configtest_cmd="zrepl_checkconfig"
-extra_commands="configtest"
-
-zrepl_precmd()
-{
-	if [ ! -d "/var/run/zrepl/stdinserver" ]; then
-		install -d -g ${zrepl_group} -o ${zrepl_user} -m 0700 -- "/var/run/zrepl";
-		install -d -g ${zrepl_group} -o ${zrepl_user} -m 0700 -- "/var/run/zrepl/stdinserver";
-	fi
+graceful_cmd="zrepl_graceful"
+gracefulstop_cmd="zrepl_gracefulstop"
+extra_commands="configtest graceful gracefulstop"
 
-	if [ ! -e "${pidfile}" ]; then
-		install -g ${zrepl_group} -o ${zrepl_user} -- /dev/null "${pidfile}";
-	fi
+zrepl_checkconfig() {
+    echo "Performing sanity check on zrepl configuration:"
+    eval "$procname" $zrepl_options configcheck
+}
 
-	zrepl_checkconfig
+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_postcmd()
-{
-	rm -f -- "${pidfile}"
+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_checkconfig()
-{
-	echo "Performing sanity check on zrepl configuration:"
-	eval ${procname} ${zrepl_options} configcheck
+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"
diff --git a/sysutils/zrepl-dsh2dsh/files/zrepl.yml b/sysutils/zrepl-dsh2dsh/files/zrepl.yml
index 3f9278c345bc..048f5d58b1a5 100644
--- a/sysutils/zrepl-dsh2dsh/files/zrepl.yml
+++ b/sysutils/zrepl-dsh2dsh/files/zrepl.yml
@@ -30,8 +30,6 @@ jobs:
       type: "periodic"
       interval: "1h"
       prefix: "zrepl_hourly_"
-      timestamp_format: "20060102_150405_MST"
-      timestamp_local: true
     pruning: &keep-all
 
   - name: "daily-snap"
@@ -41,8 +39,6 @@ jobs:
       type: "periodic"
       interval: "1d"
       prefix: "zrepl_daily_"
-      timestamp_format: "20060102_150405_MST"
-      timestamp_local: true
     pruning: *keep-all
 
   - name: "monthly-snap"
@@ -52,8 +48,6 @@ jobs:
       type: "periodic"
       interval: "30d"
       prefix: "zrepl_monthly_"
-      timestamp_format: "20060102_150405_MST"
-      timestamp_local: true
     pruning: *keep-all
 
   - name: "zdisk"
@@ -95,10 +89,6 @@ jobs:
       listener_name: "zdisk"
       client_identity: "localhost"
     filesystems: *filesystems
-    # send:
-    #   execpipe:
-    #     # zfs send | mbuffer
-    #     - [ "/usr/local/bin/mbuffer", "-q", "-s", "128k", "-m", "1G" ]
     replication: &replication
       # Send all intermediary snapshots as a stream package, instead of sending
       # them one by one.
@@ -112,8 +102,6 @@ jobs:
       type: "periodic"
       cron: "*/15 * * * *"
       prefix: "zrepl_frequently_"
-      timestamp_format: "20060102_150405_MST"
-      timestamp_local: true
     pruning:
       keep_sender:
         - type: "not_replicated"
diff --git a/sysutils/zrepl-dsh2dsh/pkg-descr b/sysutils/zrepl-dsh2dsh/pkg-descr
index b75b34c591f5..2a89cb5c62d7 100644
--- a/sysutils/zrepl-dsh2dsh/pkg-descr
+++ b/sysutils/zrepl-dsh2dsh/pkg-descr
@@ -1,5 +1,5 @@
-Cross-platform ZFS replication tool written in Go that supports
-feature detection, bookmarks, and other new features.
+Cross-platform ZFS replication tool written in Go that supports feature
+detection, bookmarks, and other new features.
 
 This is a fork with more features like
 
@@ -9,9 +9,11 @@ This is a fork with more features like
   * ability to configure command piplines between `zfs send` and `zfs recv`
   * Icinga/Nagios checks
   * fast skip "keep all" pruning
-  * snapshots can be named using local time in timestamps
+  * snapshots named using local time in timestamps
   * configurable RPC timeout
   * configurable path to zfs binary
   * faster replication
+  * graceful shutdown
+  * redesigned `zrepl status` TUI
 
 and so on.
diff --git a/sysutils/zrepl-dsh2dsh/pkg-plist b/sysutils/zrepl-dsh2dsh/pkg-plist
index fc11dec8cfb3..7f2c52e6e5f6 100644
--- a/sysutils/zrepl-dsh2dsh/pkg-plist
+++ b/sysutils/zrepl-dsh2dsh/pkg-plist
@@ -20,4 +20,3 @@ etc/periodic/weekly/500.zrepl
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/source.yml
 %%PORTEXAMPLES%%%%EXAMPLESDIR%%/source_ssh.yml
 @dir etc/newsyslog.conf.d
-@dir(root,wheel,0750) /var/run/zrepl