diff options
author | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2023-05-16 19:58:18 -0400 |
---|---|---|
committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2023-05-18 23:10:56 -0400 |
commit | 03e601da49e43ed0235144f32095ce5f58f16275 (patch) | |
tree | 903889ff724c4e1998f5f946d961d114a4d7194b | |
parent | deda3cc9057f20b1e3d34d63a64da0bdd6ca1998 (diff) |
services: rsync: Use make-inetd-constructor.
* 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 <ludo@gnu.org>
-rw-r--r-- | gnu/services/rsync.scm | 44 | ||||
-rw-r--r-- | gnu/tests/rsync.scm | 6 |
2 files changed, 36 insertions, 14 deletions
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 <go.wigust@gmail.com> ;;; Copyright © 2021, 2023 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -221,23 +222,50 @@ please use 'modules' instead~%"))) (define (rsync-shepherd-service config) "Return a <shepherd-service> 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 diff --git a/gnu/tests/rsync.scm b/gnu/tests/rsync.scm index ea53a157bb..182e5f76ff 100644 --- a/gnu/tests/rsync.scm +++ b/gnu/tests/rsync.scm @@ -70,12 +70,6 @@ PORT." (start-service 'rsync)) marionette)) - ;; Make sure the PID file is created. - (test-assert "PID file" - (marionette-eval - '(file-exists? "/var/run/rsyncd/rsyncd.pid") - marionette)) - (test-assert "Test file copied to share" (marionette-eval '(begin |