1
0
mirror of https://git.savannah.gnu.org/git/guix.git synced 2026-04-24 11:11:12 +02:00

Revert "services: Add ddclient service."

ddclient is unmaintained as of 2023-07-04 [1] and this service has been broken
for a while [2]. Remove it rather than shipping a broken service for an
unmaintained program that's unlikely to be fixed.

[1]: <https://github.com/ddclient/ddclient>
[2]: <https://issues.guix.gnu.org/52770>

This reverts commit 8490a8346b.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Bruno Victal
2023-07-16 19:47:47 +01:00
committed by Ludovic Courtès
parent 63cf5a2a4e
commit 2b031ca4b2
2 changed files with 1 additions and 274 deletions

View File

@@ -1,6 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2017 Julien Lepiller <julien@lepiller.eu>
;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2020 Pierre Langlois <pierre.langlois@gmx.com>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2022 Remco van 't Veer <remco@remworks.net>
@@ -53,10 +52,7 @@
knot-resolver-configuration
dnsmasq-service-type
dnsmasq-configuration
ddclient-service-type
ddclient-configuration))
dnsmasq-configuration))
;;;
;;; Knot DNS.
@@ -901,165 +897,3 @@ cache.size = 100 * MB
dnsmasq-activation)))
(default-value (dnsmasq-configuration))
(description "Run the dnsmasq DNS server.")))
;;;
;;; ddclient
;;;
(define (uglify-field-name field-name)
(string-delete #\? (symbol->string field-name)))
(define (serialize-field field-name val)
(when (not (member field-name '(group secret-file user)))
(format #t "~a=~a\n" (uglify-field-name field-name) val)))
(define (serialize-boolean field-name val)
(serialize-field field-name (if val "yes" "no")))
(define (serialize-integer field-name val)
(serialize-field field-name (number->string val)))
(define (serialize-string field-name val)
(if (and (string? val) (string=? val ""))
""
(serialize-field field-name val)))
(define (serialize-list field-name val)
(if (null? val) "" (serialize-field field-name (string-join val))))
(define (serialize-extra-options extra-options)
(string-join extra-options "\n" 'suffix))
(define-configuration ddclient-configuration
(ddclient
(file-like ddclient)
"The ddclient package.")
(daemon
(integer 300)
"The period after which ddclient will retry to check IP and domain name.")
(syslog
(boolean #t)
"Use syslog for the output.")
(mail
(string "root")
"Mail to user.")
(mail-failure
(string "root")
"Mail failed update to user.")
(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 @file{ddclient.conf} file. This
file contains credentials for use by ddclient. You are expected to create it
manually.")
(extra-options
(list '())
"Extra options will be appended to @file{ddclient.conf} file."))
(define (ddclient-account config)
"Return the user accounts and user groups for CONFIG."
(let ((ddclient-user (ddclient-configuration-user config))
(ddclient-group (ddclient-configuration-group config)))
(list (user-group
(name ddclient-group)
(system? #t))
(user-account
(name ddclient-user)
(system? #t)
(group ddclient-group)
(comment "ddclientd privilege separation user")
(home-directory (string-append "/var/run/" ddclient-user))))))
(define (ddclient-activation config)
"Return the activation GEXP for CONFIG."
(with-imported-modules '((guix build utils))
#~(begin
(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 ddclient-user ddclient-group))
'("/var/cache/ddclient" "/var/run/ddclient"
"/etc/ddclient"))
(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)))
(if (string-null? ddclient-secret-file)
""
(format #f "\n\n# Appended from '~a'.\n\n~a"
ddclient-secret-file
(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 ((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.")
(start #~(make-forkexec-constructor
(list #$(file-append ddclient "/bin/ddclient")
"-foreground"
"-file" "/etc/ddclient/ddclient.conf")
#: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-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)))
(default-value (ddclient-configuration))
(description "Configure address updating utility for dynamic DNS services,
ddclient.")))
(define (generate-ddclient-documentation)
(generate-documentation
`((ddclient-configuration ,ddclient-configuration-fields))
'ddclient-configuration))