diff --git a/glicid/services/rc-local.scm b/glicid/services/rc-local.scm new file mode 100644 index 0000000..e6f9d83 --- /dev/null +++ b/glicid/services/rc-local.scm @@ -0,0 +1,65 @@ +(define-module (glicid services rc-local) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + #:use-module (guix) + #:use-module (guix records) + #:use-module (ice-9 match) + #:use-module (gnu packages bash) + #:export ( + %default-rc-local-conf + rc-local-configuration + rc-local-configuration? + rc-local-service + rc-local-service-type + ) +) + +(define %default-rc-local-conf + (plain-file "rc-local" " + # Empty file as we do nothing by default + ") +) + +(define-record-type* + rc-local-configuration make-rc-local-configuration + rc-local-configuration? + (config-file rc-local-configuration-config-file ; string + (default %default-slapd.conf) + ) +) + +(define rc-local-service + (match-lambda + (($ rc-local arguments logflags log-file pid-file config-file schema-dir) + (list + (shepherd-service + (provision '(rc-local) ) + (documentation "Run rc-local.") + (requirement '(user-processes)) + (respawn? #f) + (start #~(make-forkexec-constructor + (list + #$(file-append bash "/bin/bash") + #$config-file + ) + )) + (stop #~(make-kill-destructor)) + ) + ) + ) + ) +) + +(define rc-local-service-type + (service-type (name 'rc-local) + (extensions + (list ( + service-extension + shepherd-root-service-type + rc-local-service + )) + ) + (description "Run a script in a rc-local like form") + ) +) +