From 55ccc388b73312c9636857bb083f63a968b4255b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sat, 24 May 2014 18:03:27 +0200 Subject: [PATCH] services: Support per-service activation scripts. * gnu/services.scm ()[activate]: New field. * gnu/system.scm (operating-system-activation-script)[service-activations]: New procedure. Use it, and primitive-load each activation. --- gnu/services.scm | 5 ++++- gnu/system.scm | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gnu/services.scm b/gnu/services.scm index 8b89b11b8f..6bb21722b6 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -26,6 +26,7 @@ (define-module (gnu services) service-respawn? service-start service-stop + service-activate service-user-accounts service-user-groups service-pam-services)) @@ -54,6 +55,8 @@ (define-record-type* (user-groups service-user-groups ; list of (default '())) (pam-services service-pam-services ; list of - (default '()))) + (default '())) + (activate service-activate ; gexp + (default #f))) ;;; services.scm ends here. diff --git a/gnu/system.scm b/gnu/system.scm index 1d708179bd..06bec40cef 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -357,7 +357,14 @@ (define %modules (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 @@ (define group-specs ;; 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)))))