From debbugs-submit-bounces@debbugs.gnu.org Wed Oct 23 11:10:06 2024 Received: (at submit) by debbugs.gnu.org; 23 Oct 2024 15:10:06 +0000 Received: from localhost ([127.0.0.1]:60405 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t3czt-0000Kg-9L for submit@debbugs.gnu.org; Wed, 23 Oct 2024 11:10:06 -0400 Received: from lists.gnu.org ([209.51.188.17]:43816) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1t3czo-0000K9-Os for submit@debbugs.gnu.org; Wed, 23 Oct 2024 11:10:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t3czD-0006tE-Md for guix-patches@gnu.org; Wed, 23 Oct 2024 11:09:25 -0400 Received: from mail.wmeyer.eu ([95.216.196.112]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t3cz8-0002cK-UE for guix-patches@gnu.org; Wed, 23 Oct 2024 11:09:21 -0400 From: Wilko Meyer DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wmeyer.eu; s=mail; t=1729696150; bh=4Eoj3vka6nzPtp+4nWhS7hEq4jiOucGyMIwSQHQYwho=; h=From:To:Cc:Subject:Date; b=mNQczn6z1P7ZdTdj0GNddVmEyPow64vatxHaeGcq3KwMbMVBDuj0c+KUVVGqJMnyl pg9rLzI/RpuESC6e3F0bIy0/whKK8RC/zoRte6NazWkbLBD7eUYTEv3GJaQsGb1L6I minLPHw36BCPtV+Yw+zDYdkuKyY1pqueJ9ET7xl4= To: guix-patches@gnu.org Subject: [PATCH] gnu: services: Add xandikos-service-type. Date: Wed, 23 Oct 2024 17:02:57 +0200 Message-ID: <7838fd665abc5fd0812ac1cb5f632cec24073d41.1729695775.git.w@wmeyer.eu> MIME-Version: 1.0 X-Debbugs-Cc: Ludovic Courtès , Maxim Cournoyer Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=95.216.196.112; envelope-from=w@wmeyer.eu; helo=mail.wmeyer.eu X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.4 (-) X-Debbugs-Envelope-To: submit Cc: Wilko Meyer X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.4 (--) * gnu/services/dav.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add file. * doc/guix.texi (DAV Services): Document the service. Change-Id: I5345efd579f9e527eb8798397b52bf1b9b4cab56 --- Hi Guix, I noticed that we already had a xandikos[0] package in Guix, but not a corresponding service, so I decided to create one. I took the liberty to add gnu/services/dav.scm as well as a DAV Services section in our documentation. We do have another CardDAV/CalDAV server available in guix, radicale, which currently resides in (gnu services mail) and should probably be moved into (gnu services dav) as well in the near future? Kind regards, Wilko [0]: https://www.xandikos.org/ doc/guix.texi | 56 ++++++++++++++++++++++++ gnu/local.mk | 2 + gnu/services/dav.scm | 101 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 159 insertions(+) create mode 100644 gnu/services/dav.scm diff --git a/doc/guix.texi b/doc/guix.texi index ac3a7adef0..c423329dbf 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -132,6 +132,7 @@ Copyright @copyright{} 2024 Fabio Natali@* Copyright @copyright{} 2024 Arnaud Daby-Seesaram@* Copyright @copyright{} 2024 Nigko Yerden@* +Copyright @copyright{} 2024 Wilko Meyer@* Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -413,6 +414,7 @@ Top * DNS Services:: DNS daemons. * VNC Services:: VNC daemons. * VPN Services:: VPN daemons. +* DAV Services:: DAV daemons. * Network File System:: NFS related services. * Samba Services:: Samba services. * Continuous Integration:: Cuirass and Laminar services. @@ -19045,6 +19047,7 @@ Services * DNS Services:: DNS daemons. * VNC Services:: VNC daemons. * VPN Services:: VPN daemons. +* DAV Services:: DAV daemons. * Network File System:: NFS related services. * Samba Services:: Samba services. * Continuous Integration:: Cuirass and Laminar services. @@ -34511,6 +34514,59 @@ VPN Services @end table @end deftp +@node DAV Services +@subsection DAV Services + +@defvar xandikos-service-type +This service starts @code{xandikos}, a a lightweight CardDAV/CalDAV +server that backs onto a Git repository. + +The service's value is a @code{xandikos-configuration} record. +@end defvar + +@deftp {Data Type} xandikos-configuration +This is the data type representing the configuration for the +xandikos-shepherd-service. + +It has the following parameters: + +@table @asis +@item @code{package} (default: @code{xandikos}) +The @code{xandikos} package to use. + +@item @code{directory} (default: @code{"/var/xandikos/dav"}) +Directory to serve from. + +@item @code{listen-address} (default: @code{127.0.0.1}) +The address @code{xandikos} listens on. + +@item @code{port} (default: @code{8080}) +The port to run @code{xandikos} on. + +@item @code{current-user-principal} (default: @code{"/user/"}) +Path to current user principal. + +@item @code{route-prefix} (default: @code{"/"}) +Path to @code{xandikos} (useful when Xandikos is behind a reverse proxy). + +@item @code{defaults?} (default: @code{#t}) +Create initial calendar and address book. Implies --autocreate. + +@item @code{dump?} (default: @code{#f}) +Print DAV XML request/responses. + +@item @code{avahi?} (default: @code{#f}) +Announce services with avahi. + +@item @code{autocreate?} (default: @code{#f}) +Automatically create necessary directories. + +@item @code{no-strict?} (default: @code{#f}) +Enable workarounds for buggy CalDAV/CardDAV client implementations. +@end table +@end deftp + + @node Network File System @subsection Network File System @cindex NFS diff --git a/gnu/local.mk b/gnu/local.mk index 89a795bfbd..806e4a9a41 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -67,6 +67,7 @@ # Copyright © 2024 David Elsing # Copyright © 2024 Ashish SHUKLA # Copyright © 2024 Fabio Natali +# Copyright © 2024 Wilko Meyer # # This file is part of GNU Guix. # @@ -716,6 +717,7 @@ GNU_SYSTEM_MODULES = \ %D%/services/cuirass.scm \ %D%/services/cups.scm \ %D%/services/databases.scm \ + %D%/services/dav.scm \ %D%/services/dbus.scm \ %D%/services/desktop.scm \ %D%/services/dict.scm \ diff --git a/gnu/services/dav.scm b/gnu/services/dav.scm new file mode 100644 index 0000000000..ae6c2ce969 --- /dev/null +++ b/gnu/services/dav.scm @@ -0,0 +1,101 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2024 Wilko Meyer +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (gnu services dav) + #:use-module (gnu services) + #:use-module (gnu services shepherd) + #:use-module (gnu services configuration) + #:use-module (gnu packages dav) + #:use-module (guix deprecation) + #:use-module (guix gexp) + #:use-module (guix records) + #:use-module (ice-9 match) + #:export (xandikos-configuration + xandikos-configuration? + xandikos-service-type)) + +;;; +;;; Xandikos +;;; + +(define-configuration/no-serialization xandikos-configuration + (package + (file-like xandikos) + "Xandikos package to use.") + (directory + (string "/var/xandikos/dav") + "Directory to serve from.") + (listen-address + (string "127.0.0.1") + "The address Xandikos listens on.") + (port + (integer 8080) + "The port to run Xandikos on.") + (current-user-principal + (string "/user/") + "Path to current user principal.") + (route-prefix + (string "/") + "Path to Xandikos. (useful when Xandikos is behind a reverse proxy)") + (defaults? + (boolean #t) + "Create initial calendar and address book.") + (dump? + (boolean #f) + "Print DAV XML request/responses.") + (avahi? + (boolean #f) + "Announce services with avahi.") + (autocreate? + (boolean #f) + "Automatically create necessary directories.") + (no-strict? + (boolean #f) + "Enable workarounds for buggy CalDAV/CardDAV client implementations.")) + +(define (xandikos-shepherd-service config) + (match-record config + (package directory listen-address port current-user-principal route-prefix defaults? dump? avahi? autocreate? no-strict?) + (list + (shepherd-service + (provision '(xandikos)) + (documentation "Caldav/CardDAV server") + (requirement '(networking)) + (start #~(make-forkexec-constructor + (list #$(file-append xandikos "/bin/xandikos") + "--listen-address" #$listen-address + "--port" #$(number->string port) + "-d" #$directory + "--route-prefix" #$route-prefix + "--current-user-principal" #$current-user-principal + #$@(if dump? '("--dump-dav-xml") '()) + #$@(if avahi? '("--avahi") '()) + #$@(if autocreate? '("--autocreate") '()) + #$@(if defaults? '("--defaults") '()) + #$@(if no-strict? '("--no-strict") '())))) + (stop #~(make-kill-destructor)) + (respawn? #t))))) + +(define xandikos-service-type + (service-type + (name 'xandikos) + (extensions + (list (service-extension shepherd-root-service-type + xandikos-shepherd-service))) + (default-value (xandikos-configuration)) + (description "Service to run the @code{Xandikos} CalDAV/CardDAV server."))) base-commit: 2b2b6a7675d43ff82487718c729cfaf5edf98c8d -- 2.46.0 From debbugs-submit-bounces@debbugs.gnu.org Fri May 02 08:01:29 2025 Received: (at 73967) by debbugs.gnu.org; 2 May 2025 12:01:29 +0000 Received: from localhost ([127.0.0.1]:57109 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1uAp56-0006NQ-6X for submit@debbugs.gnu.org; Fri, 02 May 2025 08:01:28 -0400 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]:48602) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1uAp51-0006N4-Co for 73967@debbugs.gnu.org; Fri, 02 May 2025 08:01:25 -0400 Received: by mail-pg1-x52d.google.com with SMTP id 41be03b00d2f7-b041afe0ee1so1862219a12.1 for <73967@debbugs.gnu.org>; Fri, 02 May 2025 05:01:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746187277; x=1746792077; darn=debbugs.gnu.org; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to; bh=FeeNZQoFle4qhmvPq46Ze6zkoWOztTHnLviNtyHqo4c=; b=BUaQ2Sxw6MCaSJpx7zW0e18N9s9uZMTqhggFhPTHwH27sZeAHD0pUQ4CsjC6z5ixuw 7IqwBYF0noy4P3ppAfqRS5v0nABQxHLSoK0JpSSTkOzAAHUqhq6F24SPahT0C7nShDke Ggu9Ds+M8tHHtcekiCBhJkeVf28ATwR16ZCQW45aUyQY8Z4DPpe3FS4IqzmxPbySaimA xvkzjMtEbCpa9tAQxuar1Xblms/6EZh9WoZUbkROCBcDFlmneGh3mqXKWQ79nreVAjtg DlH6nL/LdKl8EBtPUFBH8rQRtJMsAcZ2esnQqCDFI9cg3JHG9xRG2xIEyfuBq2ZwZH3I bysA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746187277; x=1746792077; h=mime-version:user-agent:message-id:date:references:in-reply-to :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=FeeNZQoFle4qhmvPq46Ze6zkoWOztTHnLviNtyHqo4c=; b=OaiAlzNmMUhRhNs8LjFddtKP1urPXSUoyjHWUPqIjOiZs8fhV6Zna6n860K4itSXkm 1domuH/eAumfc8tiL1kVTqwIptytVNjvdLls2+Pwl09+qjhKEJUQJO0PvnvqETjupWFd DvwXFS4fOCFGHEa2VQvus0dH7EQZYmpSGfVLc6jadzJ6OBbQokAEP65qr/XWkufIYGs2 80482appKEHa6tReG3MhSl6mEGSsbCSXzmxY+/buUb1k4wFMvL5vQDOdRSiNVxYU4fvA hrf/xxjbvfQNv8PKMWFhAtdzh4FwK3gVWj1crsapWUFaId+A1Av59t6F6j/OWTThy3mE zOug== X-Gm-Message-State: AOJu0Ywy2ISFc+Hk9ExM+Bn9/BdZsvvPrXFh43IwGghFW5jqj+IASlaG 4x8zRo6UAkYw1ao1UCii0L1pWBTIcAQAw5GHrcaRZYWU/EvNsa7d X-Gm-Gg: ASbGnctcZ/1XFYFful0Kp/dNHn4BjOdGS32pzTsJhlYeCyyOXAWnnvUtrlxtES1PSad nVYPTMSVE4Rslkz3hEFWd4EQHkbw21yb9Q0uF37VAKKzTONzns854XwFzT3zN5sdOmRxmD0ITPS ClJJiicw68WBfPVJ5VSmgmzX9zPLHUi02/kLwzmPC4todxVNt+iIsXUtIUmtxiDnmPtHLga0+Sg y+2ml48y8jwmWH5J9JLRW9juS7YG2R87bxo/iDSmxBYXfKwSJI9bp3PA4oDtgkdp9rr/lkTJvks HBfIirt2c8110pRuvvo2V+KyCVg1cTS3+oaKAuc= X-Google-Smtp-Source: AGHT+IGaLRBHq2sQqYPdSksFKrZKDaoIneecei1Y4oCm3DcqM+Cz8nW0QDDMHleyrUJgigkF38PBAA== X-Received: by 2002:a05:6a21:338e:b0:1ee:dded:e5b with SMTP id adf61e73a8af0-20cdec4b5bdmr3454345637.24.1746187275132; Fri, 02 May 2025 05:01:15 -0700 (PDT) Received: from terra ([2405:6586:be0:0:83c8:d31d:2cec:f542]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b1fb3b5c199sm479441a12.29.2025.05.02.05.01.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 02 May 2025 05:01:14 -0700 (PDT) From: Maxim Cournoyer To: Wilko Meyer Subject: Re: [bug#73967] [PATCH] gnu: services: Add xandikos-service-type. In-Reply-To: <7838fd665abc5fd0812ac1cb5f632cec24073d41.1729695775.git.w@wmeyer.eu> (Wilko Meyer's message of "Wed, 23 Oct 2024 17:02:57 +0200") References: <7838fd665abc5fd0812ac1cb5f632cec24073d41.1729695775.git.w@wmeyer.eu> Date: Fri, 02 May 2025 21:01:11 +0900 Message-ID: <87tt6343y0.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 73967 Cc: Ludovic =?utf-8?Q?Court=C3=A8s?= , 73967@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hi! Wilko Meyer writes: > * gnu/services/dav.scm: New file. > * gnu/local.mk (GNU_SYSTEM_MODULES): Add file. > * doc/guix.texi (DAV Services): Document the service. > [...] > I noticed that we already had a xandikos[0] package in Guix, but not a > corresponding service, so I decided to create one. Neat, although I've never heard of Xandikos until now :-). > I took the liberty to add gnu/services/dav.scm as well as a DAV > Services section in our documentation. We do have another > CardDAV/CalDAV server available in guix, radicale, which currently > resides in (gnu services mail) and should probably be moved into (gnu > services dav) as well in the near future? Since we already have a caldav server in (gnu services mail), and that these things are often used together, it seems it'd have been simpler to keep this one in (gnu services mail). In general I prefer to have more grouping of services, that's less imports in an operating system config. I guess it depends on the number of caldav server implementations we're planning to add. I don't feel too strongly about it! If you prefer the new, more accurate home, please do keep it (and move the other caldav thing there in a later commit). [...] > Permission is granted to copy, distribute and/or modify this document > under the terms of the GNU Free Documentation License, Version 1.3 or > @@ -413,6 +414,7 @@ Top > * DNS Services:: DNS daemons. > * VNC Services:: VNC daemons. > * VPN Services:: VPN daemons. > +* DAV Services:: DAV daemons. > * Network File System:: NFS related services. > * Samba Services:: Samba services. > * Continuous Integration:: Cuirass and Laminar services. > @@ -19045,6 +19047,7 @@ Services > * DNS Services:: DNS daemons. > * VNC Services:: VNC daemons. > * VPN Services:: VPN daemons. > +* DAV Services:: DAV daemons. > * Network File System:: NFS related services. > * Samba Services:: Samba services. > * Continuous Integration:: Cuirass and Laminar services. > @@ -34511,6 +34514,59 @@ VPN Services > @end table > @end deftp > > +@node DAV Services > +@subsection DAV Services > + > +@defvar xandikos-service-type > +This service starts @code{xandikos}, a a lightweight CardDAV/CalDAV s/a a/a/ > +server that backs onto a Git repository. 'backed by a Git repository', perhaps? > +The service's value is a @code{xandikos-configuration} record. > +@end defvar > + > +@deftp {Data Type} xandikos-configuration > +This is the data type representing the configuration for the > +xandikos-shepherd-service. @code{xandikos-shepherd-service} > + > +It has the following parameters: > + > +@table @asis Since each table element is using @code, it'd be better to simply use @table @code to declare the table and drop the usages of @code on each item. > +@item @code{package} (default: @code{xandikos}) > +The @code{xandikos} package to use. > + > +@item @code{directory} (default: @code{"/var/xandikos/dav"}) > +Directory to serve from. The directory [...] > +@item @code{listen-address} (default: @code{127.0.0.1}) > +The address @code{xandikos} listens on. s/@code/@command/ > + > +@item @code{port} (default: @code{8080}) > +The port to run @code{xandikos} on. Ditto. > +@item @code{current-user-principal} (default: @code{"/user/"}) > +Path to current user principal. In GNU the convention is to use 'file name' for files, not path (path is used for search paths like $PATH). > +@item @code{route-prefix} (default: @code{"/"}) > +Path to @code{xandikos} (useful when Xandikos is behind a reverse proxy). 'File name', and s/@code/@command/. > +@item @code{defaults?} (default: @code{#t}) > +Create initial calendar and address book. Implies --autocreate. Use two spaces between sentences. @option{--autocreate} > + > +@item @code{dump?} (default: @code{#f}) > +Print DAV XML request/responses. > + > +@item @code{avahi?} (default: @code{#f}) > +Announce services with avahi. > + > +@item @code{autocreate?} (default: @code{#f}) > +Automatically create necessary directories. > + > +@item @code{no-strict?} (default: @code{#f}) > +Enable workarounds for buggy CalDAV/CardDAV client implementations. > +@end table > +@end deftp [...] > diff --git a/gnu/services/dav.scm b/gnu/services/dav.scm [...] > +(define-module (gnu services dav) > + #:use-module (gnu services) > + #:use-module (gnu services shepherd) > + #:use-module (gnu services configuration) > + #:use-module (gnu packages dav) > + #:use-module (guix deprecation) > + #:use-module (guix gexp) > + #:use-module (guix records) > + #:use-module (ice-9 match) Please keep imports lexicographically sorted. > + #:export (xandikos-configuration > + xandikos-configuration? > + xandikos-service-type)) > + > +;;; > +;;; Xandikos Add a '.' after Xandikos. That's conventional. > +;;; > + > +(define-configuration/no-serialization xandikos-configuration > + (package > + (file-like xandikos) > + "Xandikos package to use.") > + (directory > + (string "/var/xandikos/dav") > + "Directory to serve from.") > + (listen-address > + (string "127.0.0.1") > + "The address Xandikos listens on.") > + (port > + (integer 8080) You con steal a the 'port?' definition used in the pounce-configuration and elsewhere to validate a correct range. > + "The port to run Xandikos on.") > + (current-user-principal > + (string "/user/") > + "Path to current user principal.") > + (route-prefix > + (string "/") > + "Path to Xandikos. (useful when Xandikos is behind a reverse proxy)") The period should be moved after the closing parens. > + (defaults? > + (boolean #t) > + "Create initial calendar and address book.") > + (dump? > + (boolean #f) > + "Print DAV XML request/responses.") > + (avahi? > + (boolean #f) > + "Announce services with avahi.") > + (autocreate? > + (boolean #f) > + "Automatically create necessary directories.") > + (no-strict? > + (boolean #f) > + "Enable workarounds for buggy CalDAV/CardDAV client implementations.")) Make sure to mirror any comments I made against the generated Texinfo earlier in the actual source above. > +(define (xandikos-shepherd-service config) > + (match-record config > + (package directory listen-address port current-user-principal route-prefix defaults? dump? avahi? autocreate? no-strict?) Our maximum column width guideline is 80 :-). > + (list > + (shepherd-service > + (provision '(xandikos)) > + (documentation "Caldav/CardDAV server") > + (requirement '(networking)) This should be updated to include user-processes. If the services starts happily before networking is set up, it's best to not explicitly depend on 'networking', though I see the example systemd unit requires networking explicitly, so maybe it's needed [0]. [0] https://github.com/jelmer/xandikos/blob/master/examples/xandikos.service#L3 > + (start #~(make-forkexec-constructor It looks like xandikos supports the socket activation (on a unix socket) scheme of systemd, which Shepherd supports too, via its make-systemd-constructor constructor. That'd be nicer to use that, for faster boot and synchronization. Could you adapt your service to use it? It could also be hardened via the least-authority wrapper, to containerized the process, which usually suites network services well. > + (list #$(file-append xandikos "/bin/xandikos") > + "--listen-address" #$listen-address > + "--port" #$(number->string port) > + "-d" #$directory > + "--route-prefix" #$route-prefix > + "--current-user-principal" #$current-user-principal > + #$@(if dump? '("--dump-dav-xml") '()) > + #$@(if avahi? '("--avahi") '()) > + #$@(if autocreate? '("--autocreate") '()) > + #$@(if defaults? '("--defaults") '()) > + #$@(if no-strict? '("--no-strict") '())))) > + (stop #~(make-kill-destructor)) > + (respawn? #t))))) Unrelated, but I'm surprised that respawn?'s defaults is #f in Shepherd. Shouldn't the service manager tries its utmost by defgault to keep things running? Does that mean that if any process crashes on my machine, and the service hasn't been defined with respawn? #t, it will remain in a stopped, failed state? Thank you! If you could prepare a v2, I'll try to review it faster than I did here, which shouldn't be too difficult, ah! -- Thanks, Maxim