~ruther/guix-local

6f9d844d2ece7b369d17bbe678978462425f869c — Ludovic Courtès 2 years ago 2b052fe
services: shepherd: Load each service file in a fresh module.

Fixes <https://issues.guix.gnu.org/67649>.

* gnu/home/services/shepherd.scm (home-shepherd-configuration-file)[config]:
Define ‘make-user-module’.  Call ‘load’ in ‘save-module-excursion’.
* gnu/services/shepherd.scm (shepherd-configuration-file): Likewise.

Reported-by: Attila Lendvai <attila@lendvai.name>
Change-Id: I7df11c81b5bbbf2b24a8daa02502a000e0826fe0
2 files changed, 25 insertions(+), 2 deletions(-)

M gnu/home/services/shepherd.scm
M gnu/services/shepherd.scm
M gnu/home/services/shepherd.scm => gnu/home/services/shepherd.scm +13 -1
@@ 77,7 77,19 @@ as shepherd package."
          (use-modules (srfi srfi-34)
                       (system repl error-handling))

          (register-services (map load '#$files))
          (define (make-user-module)
            ;; Copied from (shepherd support), where it's private.
            (let ((m (make-fresh-user-module)))
              (module-use! m (resolve-interface '(shepherd service)))
              m))

          (register-services
           (map (lambda (file)
                  (save-module-excursion
                   (lambda ()
                     (set-current-module (make-user-module))
                     (load file))))
                '#$files))

          #$@(if daemonize?
                 `((action 'root 'daemonize))

M gnu/services/shepherd.scm => gnu/services/shepherd.scm +12 -1
@@ 383,6 383,12 @@ as shepherd package."
          (use-modules (srfi srfi-34)
                       (system repl error-handling))

          (define (make-user-module)
            ;; Copied from (shepherd support), where it's private.
            (let ((m (make-fresh-user-module)))
              (module-use! m (resolve-interface '(shepherd service)))
              m))

          ;; There's code run from shepherd that uses 'call-with-input-file' &
          ;; co.--e.g., the 'urandom-seed' service.  Starting from Shepherd
          ;; 0.9.2, users need to make sure not to leak non-close-on-exec file


@@ 416,7 422,12 @@ as shepherd package."
              (register-services
               (parameterize ((current-warning-port
                               (%make-void-port "w")))
                 (map load-compiled '#$(map scm->go files))))))
                 (map (lambda (file)
                        (save-module-excursion
                         (lambda ()
                           (set-current-module (make-user-module))
                           (load-compiled file))))
                      '#$(map scm->go files))))))

          (format #t "starting services...~%")
          (let ((services-to-start