diff options
| author | Oleg Pykhalov <go.wigust@gmail.com> | 2018-07-28 01:37:56 +0300 |
|---|---|---|
| committer | Oleg Pykhalov <go.wigust@gmail.com> | 2018-08-01 03:24:43 +0300 |
| commit | 2c6b63a2f7e26099a1924aa4b9a3906aa0513694 (patch) | |
| tree | c73b4dfc429e4655e734038e0e759b151753c675 | |
| parent | wigust: services: Update ddclient service. (diff) | |
| download | guix-wigust-2c6b63a2f7e26099a1924aa4b9a3906aa0513694.tar.gz | |
wigust: services: Update ddclient service.
* wigust/services/dns.scm: Update ddclient service.
| -rw-r--r-- | wigust/services/dns.scm | 105 |
1 files changed, 55 insertions, 50 deletions
diff --git a/wigust/services/dns.scm b/wigust/services/dns.scm index 18c7614..db4584c 100644 --- a/wigust/services/dns.scm +++ b/wigust/services/dns.scm @@ -32,6 +32,7 @@ #:use-module (srfi srfi-35) #:use-module (ice-9 match) #:use-module (ice-9 regex) + #:use-module (ice-9 rdelim) #:export (ddclient-service-type ddclient-configuration opaque-ddclient-configuration)) @@ -81,31 +82,29 @@ (string "root") "Mail failed update to user.") (pid - (string "/var/run/ddclient.pid") + (string "/var/run/ddclient/ddclient.pid") "The ddclient PID file.") (ssl (boolean #t) "Enable SSL support.") + (user + (string "ddclient") + "Specifies the user name or ID that is used when running ddclient +program.") + (group + (string "ddclient") + "Group of the user who will run the ddclient program.") + (secret-file + (string "/etc/ddclient/secrets.conf") + "Secret file which will be appended to ddclient.conf file.") (extra-options (list '()) "Extra options will be appended to ddclient configuration file.")) -(define-configuration opaque-ddclient-configuration - (ddclient - (package ddclient) - "The ddclient package.") - (ddclient-conf - (string (configuration-missing-field 'opaque-ddclient-configuration - 'ddclient-conf)) - "The contents of the @file{ddclient.conf} to use.") - (pid - (string "/var/run/ddclient/ddclient.pid") - "The ddclient PID file.")) - (define (ddclient-account config) "Return the user accounts and user groups for CONFIG." - (let ((ddclient-user "ddclient") - (ddclient-group "ddclient")) + (let ((ddclient-user (ddclient-configuration-user config)) + (ddclient-group (ddclient-configuration-group config))) (list (user-group (name ddclient-group) (system? #t)) @@ -118,39 +117,47 @@ (define (ddclient-activation config) "Return the activation GEXP for CONFIG." - (let ((config-str - (if (opaque-ddclient-configuration? config) - (opaque-ddclient-configuration-ddclient-conf config) - (with-output-to-string - (lambda () - (serialize-configuration config - ddclient-configuration-fields)))))) + (with-imported-modules '((guix build utils) + (ice-9 rdelim)) #~(begin - (use-modules (guix build utils)) - ;; 'ddclient' complains about ddclient.conf file permissions, which - ;; rules out /gnu/store. Thus we copy the ddclient.conf to /etc. - (let ((user (getpw "ddclient")) - (group (getpw "ddclient"))) + (use-modules (guix build utils) + (ice-9 rdelim)) + (let ((ddclient-user + #$(passwd:uid (getpw (ddclient-configuration-user config)))) + (ddclient-group + #$(passwd:gid (getpw (ddclient-configuration-group config)))) + (ddclient-secret-file + #$(ddclient-configuration-secret-file config))) + ;; 'ddclient' complains about ddclient.conf file permissions, which + ;; rules out /gnu/store. Thus we copy the ddclient.conf to /etc. (for-each (lambda (dir) (mkdir-p dir) (chmod dir #o700) - (chown dir (passwd:uid user) (group:gid group))) + (chown dir ddclient-user ddclient-group)) '("/var/cache/ddclient" "/var/run/ddclient" "/etc/ddclient")) - (let ((file "/etc/ddclient/ddclient.conf")) - (copy-file #$(plain-file "ddclient.conf" config-str) file) - (chmod file #o600) - (chown file (passwd:uid user) (group:gid group))))))) + (with-output-to-file "/etc/ddclient/ddclient.conf" + (lambda () + (display + (string-append + "# Generated by 'ddclient-service'.\n\n" + #$(with-output-to-string + (lambda () + (serialize-configuration config + ddclient-configuration-fields))) + "\n\n# Appended from '" ddclient-secret-file "'.\n\n" + (with-input-from-file ddclient-secret-file + read-string))))) + (chmod "/etc/ddclient/ddclient.conf" #o600) + (chown "/etc/ddclient/ddclient.conf" + ddclient-user ddclient-group))))) (define (ddclient-shepherd-service config) "Return a <shepherd-service> for ddclient with CONFIG." - (let* ((opaque-config? (opaque-ddclient-configuration? config)) - (pid (if opaque-config? - (opaque-ddclient-configuration-pid config) - (ddclient-configuration-pid config))) - (ddclient (if opaque-config? - (opaque-ddclient-configuration-ddclient config) - (ddclient-configuration-ddclient config)))) + (let ((ddclient (ddclient-configuration-ddclient config)) + (ddclient-pid (ddclient-configuration-pid config)) + (ddclient-user (ddclient-configuration-user config)) + (ddclient-group (ddclient-configuration-group config))) (list (shepherd-service (provision '(ddclient)) (documentation "Run ddclient daemon.") @@ -158,23 +165,26 @@ (list #$(file-append ddclient "/bin/ddclient") "-foreground" "-file" "/etc/ddclient/ddclient.conf" "-debug" "-verbose") - #:pid-file #$pid + #:pid-file #$ddclient-pid #:environment-variables (list "SSL_CERT_DIR=/run/current-system/profile\ /etc/ssl/certs" "SSL_CERT_FILE=/run/current-system/profile\ /etc/ssl/certs/ca-certificates.crt") - #:user "ddclient" - #:group "ddclient")) + #:user ddclient-user + #:group ddclient-group)) (stop #~(make-kill-destructor)))))) (define ddclient-service-type (service-type (name 'ddclient) (extensions - (list (service-extension account-service-type ddclient-account) - (service-extension shepherd-root-service-type ddclient-shepherd-service) - (service-extension activation-service-type ddclient-activation))) + (list (service-extension account-service-type + ddclient-account) + (service-extension shepherd-root-service-type + ddclient-shepherd-service) + (service-extension activation-service-type + ddclient-activation))) (default-value (ddclient-configuration)) (description "Configure address updating utility for dynamic DNS services, ddclient."))) @@ -183,8 +193,3 @@ ddclient."))) (generate-documentation `((ddclient-configuration ,ddclient-configuration-fields)) 'ddclient-configuration)) - -(define (generate-opaque-ddclient-documentation) - (generate-documentation - `((opaque-ddclient-configuration ,opaque-ddclient-configuration-fields)) - 'opaque-ddclient-configuration)) |
