Hello again everyone! I'm having a great time learning about Guix, but am struggling with defining a custom service for Caddy. The 'caddy' package below works as expected -- installing it puts the "caddy" binary in $PATH and it works fine when I run it from a shell.
#+begin_src (define caddy (package (name "caddy") (version "2.2.1") (source (origin (method url-fetch/tarbomb) (uri (string-append "https://github.com/caddyserver/caddy/releases/download/v" version "/caddy_" version "_linux_amd64.tar.gz")) (sha256 (base32 "1va2h8hpxcby9rny7px1y2xks79rxb4svnf9mrdrlc5xn0s04dsx")))) (build-system copy-build-system) (arguments '(#:install-plan '(("caddy" "bin/caddy")))) (synopsis "This is a *BAD* Caddy package. It just pulls the already-built binary from Github, rather than building from source.") (description "See https://caddyserver.com/") (home-page "https://caddyserver.com/") (license licenses:asl2.0))) #+end_src What doesn't work as expected is this service definition: #+begin_src (define-record-type* <caddy-configuration> caddy-configuration make-caddy-configuration caddy-configuration? (config-file caddy-configuration-config-file (default "/etc/Caddyfile"))) (define caddy-service-type (shepherd-service-type 'caddy (lambda (config) (shepherd-service (documentation "Run the caddy daemon (caddy).") (provision '(caddy)) (requirement '(user-processes)) (start #~(make-forkexec-constructor (list "caddy" "run" "-config" "/etc/Caddyfile") #:log-file "/var/log/caddy.log")) (stop #~(make-kill-destructor)))))) #+end_src ...which I then add to my services list in config.scm like this: #+begin_src (service caddy-service-type (caddy-configuration (config-file "/etc/Caddyfile"))) #+end_src With this setup, 'herd start caddy' hangs for 30 seconds, during which time the server is active and taking traffic according to the config in /etc/Caddyfile but then something (presumably Shepherd) sends it a SIGTERM and it dutifully shuts down. The 'herd start caddy' then exits with an error: #+begin_src root@tindall ~# START=$(date +%s); herd start caddy; END=$(date +%s); echo $(($END - START)) Service caddy could not be started. herd: failed to start service caddy 30 root@tindall ~# tail -n 1 /var/log/caddy.log {"level":"info","ts":1611680035.1811087,"msg":"shutdown done","signal":"SIGTERM"} root@tindall ~# #+end_src 'caddy run' will keep caddy in the foreground, but I see the same behavior when I use 'caddy start' (which forks another process for the daemon and exits immediately) in the service definition instead. I suspect something is wrong with the 'start' procedure I've defined, but I'm struggling to figure out what it is. What am I missing? -Cameron