From 03e601da49e43ed0235144f32095ce5f58f16275 Mon Sep 17 00:00:00 2001 From: Maxim Cournoyer Date: Tue, 16 May 2023 19:58:18 -0400 Subject: services: rsync: Use make-inetd-constructor. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/services/rsync.scm (rsync-shepherd-service): Use make-inetd-constructor if available in start slot. * gnu/tests/rsync.scm (run-rsync-test): Delete "PID file" test. Reviewed-by: Ludovic Courtès --- gnu/services/rsync.scm | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) (limited to 'gnu/services/rsync.scm') diff --git a/gnu/services/rsync.scm b/gnu/services/rsync.scm index aeb4275031..826b757b1c 100644 --- a/gnu/services/rsync.scm +++ b/gnu/services/rsync.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017 Oleg Pykhalov ;;; Copyright © 2021, 2023 Ludovic Courtès +;;; Copyright © 2023 Maxim Cournoyer ;;; ;;; This file is part of GNU Guix. ;;; @@ -221,23 +222,50 @@ please use 'modules' instead~%"))) (define (rsync-shepherd-service config) "Return a for rsync with CONFIG." + + ;; XXX: Predicates copied from (gnu services ssh). + (define inetd-style? + #~(and (defined? 'make-inetd-constructor) + (not (string=? (@ (shepherd config) Version) "0.9.0")))) + + (define ipv6-support? + #~(catch 'system-error + (lambda () + (let ((sock (socket AF_INET6 SOCK_STREAM 0))) + (close-port sock) + #t)) + (const #f))) + (let* ((rsync (rsync-configuration-package config)) (pid-file (rsync-configuration-pid-file config)) (port-number (rsync-configuration-port-number config)) (user (rsync-configuration-user config)) (group (rsync-configuration-group config)) - (config-file (rsync-config-file config))) + (config-file (rsync-config-file config)) + (rsync-command #~(list (string-append #$rsync "/bin/rsync") + "--config" #$config-file "--daemon"))) (list (shepherd-service (provision '(rsync)) (documentation "Run rsync daemon.") (actions (list (shepherd-configuration-action config-file))) - (start #~(make-forkexec-constructor - (list (string-append #$rsync "/bin/rsync") - "--config" #$config-file - "--daemon") - #:pid-file #$pid-file - #:user #$user - #:group #$group)) + (start #~(if #$inetd-style? + (make-inetd-constructor + #$rsync-command + (cons (endpoint + (make-socket-address AF_INET INADDR_ANY + #$port-number)) + (if #$ipv6-support? + (list + (endpoint + (make-socket-address AF_INET6 IN6ADDR_ANY + #$port-number))) + '())) + #:user #$user + #:group #$group) + (make-forkexec-constructor #$rsync-command + #:pid-file #$pid-file + #:user #$user + #:group #$group))) (stop #~(make-kill-destructor)))))) (define rsync-service-type -- cgit 1.4.1