service: Add shepherd discover action.

* gnu/services/base.scm (shepherd-discover-action): New procedure,
(guix-shepherd-service)[<actions>]: add it,
[<start>]: honor it.
* doc/guix.texi (Invoking guix-daemon): Document it.
This commit is contained in:
Mathieu Othacehe 2020-12-04 09:43:17 +01:00
parent 92f7c11af2
commit e461d3b750
No known key found for this signature in database
GPG key ID: 8354763531769CA6
2 changed files with 36 additions and 4 deletions

View file

@ -1606,6 +1606,14 @@ Servers may serve substitute over HTTP, unencrypted, so anyone on the
LAN can see what software youre installing.
@end enumerate
It is also possible to enable or disable substitute server discovery at
run-time by running:
@example
herd discover guix-daemon on
herd discover guix-daemon off
@end example
@item --disable-deduplication
@cindex deduplication
Disable automatic file ``deduplication'' in the store.

View file

@ -1568,6 +1568,27 @@ (define shepherd-set-http-proxy-action
(environ environment)
#t)))))
(define shepherd-discover-action
;; Shepherd action to enable or disable substitute servers discovery.
(shepherd-action
(name 'discover)
(documentation
"Enable or disable substitute servers discovery and restart the
'guix-daemon'.")
(procedure #~(lambda* (_ status)
(let ((environment (environ)))
(if (and status
(string=? status "on"))
(begin
(format #t "enable substitute servers discovery~%")
(setenv "discover" "on"))
(begin
(format #t "disable substitute servers discovery~%")
(unsetenv "discover")))
(action 'guix-daemon 'restart)
(environ environment)
#t)))))
(define (guix-shepherd-service config)
"Return a <shepherd-service> for the Guix daemon service with CONFIG."
(match-record config <guix-configuration>
@ -1579,7 +1600,8 @@ (define (guix-shepherd-service config)
(documentation "Run the Guix daemon.")
(provision '(guix-daemon))
(requirement '(user-processes))
(actions (list shepherd-set-http-proxy-action))
(actions (list shepherd-set-http-proxy-action
shepherd-discover-action))
(modules '((srfi srfi-1)
(ice-9 match)
(gnu build shepherd)))
@ -1594,6 +1616,9 @@ (define proxy
;; the 'set-http-proxy' action.
(or (getenv "http_proxy") #$http-proxy))
(define discover?
(or (getenv "discover") #$discover?))
;; Start the guix-daemon from a container, when supported,
;; to solve an installation issue. See the comment below for
;; more details.
@ -1608,9 +1633,8 @@ (define proxy
#$@(if use-substitutes?
'()
'("--no-substitutes"))
#$@(if discover?
'("--discover=yes")
'())
(string-append "--discover="
(if discover? "yes" "no"))
"--substitute-urls" #$(string-join substitute-urls)
#$@extra-options