diff options
author | Ludovic Courtès <ludo@gnu.org> | 2022-04-29 22:53:22 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2022-04-29 22:59:08 +0200 |
commit | b06ecc57515d4e3c8b2228e8142654e9a26ba6e1 (patch) | |
tree | 224b426694b71b2ea268f710700e1372fc503227 /gnu | |
parent | 9eca13094d9bdf091f9096e0f3a8b450dac0e595 (diff) | |
download | guix-b06ecc57515d4e3c8b2228e8142654e9a26ba6e1.tar guix-b06ecc57515d4e3c8b2228e8142654e9a26ba6e1.tar.gz |
services: guix-publish: Use socket activation when possible.
* gnu/services/base.scm (guix-publish-shepherd-service): Use
'make-systemd-constructor' when it's available and ADVERTISE? is false.
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/services/base.scm | 49 |
1 files changed, 31 insertions, 18 deletions
diff --git a/gnu/services/base.scm b/gnu/services/base.scm index 5d7c69a9cd..f1649eb084 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -1877,13 +1877,7 @@ raise a deprecation warning if the 'compression-level' field was used." (match-record config <guix-publish-configuration> (guix port host nar-path cache workers ttl negative-ttl cache-bypass-threshold advertise?) - (list (shepherd-service - (provision '(guix-publish)) - (requirement `(user-processes - guix-daemon - ,@(if advertise? '(avahi-daemon) '()))) - (start #~(make-forkexec-constructor - (list #$(file-append guix "/bin/guix") + (let ((command #~(list #$(file-append guix "/bin/guix") "publish" "-u" "guix-publish" "-p" #$(number->string port) #$@(config->compression-options config) @@ -1913,17 +1907,36 @@ raise a deprecation warning if the 'compression-level' field was used." "--cache-bypass-threshold=" (number->string cache-bypass-threshold))) - #~())) - - ;; Make sure we run in a UTF-8 locale so we can produce - ;; nars for packages that contain UTF-8 file names such - ;; as 'nss-certs'. See <https://bugs.gnu.org/26948>. - #:environment-variables - (list (string-append "GUIX_LOCPATH=" - #$glibc-utf8-locales "/lib/locale") - "LC_ALL=en_US.utf8") - #:log-file "/var/log/guix-publish.log")) - (stop #~(make-kill-destructor)))))) + #~()))) + (options #~(#:environment-variables + ;; Make sure we run in a UTF-8 locale so we can produce + ;; nars for packages that contain UTF-8 file names such + ;; as 'nss-certs'. See <https://bugs.gnu.org/26948>. + (list (string-append "GUIX_LOCPATH=" + #$glibc-utf8-locales "/lib/locale") + "LC_ALL=en_US.utf8") + #:log-file "/var/log/guix-publish.log")) + (endpoints #~(let ((ai (false-if-exception + (getaddrinfo #$host + #$(number->string port) + AI_NUMERICSERV)))) + (if (pair? ai) + (list (endpoint (addrinfo:addr (car ai)))) + '())))) + (list (shepherd-service + (provision '(guix-publish)) + (requirement `(user-processes + guix-daemon + ,@(if advertise? '(avahi-daemon) '()))) + + ;; Use lazy socket activation unless ADVERTISE? is true: in that + ;; case the process should start right away to advertise itself. + (start #~(if (and (defined? 'make-systemd-constructor) ;> 0.9.0? + #$(not advertise?)) + (make-systemd-constructor + #$command #$endpoints #$@options) + (make-forkexec-constructor #$command #$@options))) + (stop #~(make-kill-destructor))))))) (define %guix-publish-accounts (list (user-group (name "guix-publish") (system? #t)) |