~ruther/guix-local

55ccc388b73312c9636857bb083f63a968b4255b — Ludovic Courtès 11 years ago 517830c
services: Support per-service activation scripts.

* gnu/services.scm (<service>)[activate]: New field.
* gnu/system.scm (operating-system-activation-script)[service-activations]:
  New procedure.  Use it, and primitive-load each activation.
2 files changed, 15 insertions(+), 1 deletions(-)

M gnu/services.scm
M gnu/system.scm
M gnu/services.scm => gnu/services.scm +4 -1
@@ 26,6 26,7 @@
            service-respawn?
            service-start
            service-stop
            service-activate
            service-user-accounts
            service-user-groups
            service-pam-services))


@@ 54,6 55,8 @@
  (user-groups   service-user-groups              ; list of <user-groups>
                 (default '()))
  (pam-services  service-pam-services             ; list of <pam-service>
                 (default '())))
                 (default '()))
  (activate      service-activate                 ; gexp
                 (default #f)))

;;; services.scm ends here.

M gnu/system.scm => gnu/system.scm +11 -0
@@ 357,7 357,14 @@ etc."
      (guix build utils)
      (guix build linux-initrd)))

  (define (service-activations services)
    ;; Return the activation scripts for SERVICES.
    (let ((gexps (filter-map service-activate services)))
      (sequence %store-monad (map (cut gexp->file "activate-service.scm" <>)
                                  gexps))))

  (mlet* %store-monad ((services (operating-system-services os))
                       (actions  (service-activations services))
                       (etc      (operating-system-etc-directory os))
                       (modules  (imported-modules %modules))
                       (compiled (compiled-modules %modules))


@@ 398,6 405,10 @@ etc."
                    ;; Activate setuid programs.
                    (activate-setuid-programs (list #$@setuid-progs))

                    ;; Run the services' activation snippets.
                    ;; TODO: Use 'load-compiled'.
                    (for-each primitive-load '#$actions)

                    ;; Set up /run/current-system.
                    (activate-current-system)))))