Package: guix-patches;
Reported by: Jean-Baptiste Note <jean-baptiste.note <at> m4x.org>
Date: Sun, 10 May 2020 19:21:01 UTC
Severity: normal
Tags: patch
Done: Felix Lechner <felix.lechner <at> lease-up.com>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 41180 in the body.
You can then email your comments to 41180 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
guix-patches <at> gnu.org
:bug#41180
; Package guix-patches
.
(Sun, 10 May 2020 19:21:01 GMT) Full text and rfc822 format available.Jean-Baptiste Note <jean-baptiste.note <at> m4x.org>
:guix-patches <at> gnu.org
.
(Sun, 10 May 2020 19:21:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Jean-Baptiste Note <jean-baptiste.note <at> m4x.org> To: guixpatch <guix-patches <at> gnu.org> Cc: Mathieu Othacehe <m.othacehe <at> gmail.com> Subject: [PATCH] Add cachefilesd service. Date: Sun, 10 May 2020 19:19:36 +0000
[Message part 1 (text/plain, inline)]
Dear guix developers, Mathieu, Please find attached a first version of the cachefilesd service patch. The second patch for documentation will be sent right after. I have a few general newbie scheme questions: - I gathered that #~ / #$ kinds of suspends evaluation / forces it -- is there documentation about this somewhere ? - There's something that looks like a splat operator (only seen in conjuction with forcing evaluation in #$@) -- again i'd be interested in more documentation about this feature -- is this a guix-specific operator? - I don't understand why there are ^L separating services in the scheme files -- is this necessary? A convention? What purpose does it serve? Regarding the patch itself: - i'm not entirely sure the service belongs to services/linux.scm - documentation is hastily written. I have found no way to indent automatically the lisp code in the texi file, which is very painfull -- would there be an emacs solution for this? - there are no automated tests (beyond what I have done by hand locally!), and there's no lint, so I don't really feel confident about it :) Are there tests for services to alleviate my fears? - I've copied some other service for modprobing the required kernel modules before launching the daemon with a one-shot shepherd service. Frankly i'm not happy about this solution, it seems to me that it unnecessarily pollutes the shepherd configuration; maybe some other mechanism (graft?) adjusting the modprobe configuration could be better (better still, autoload the file). Any guidance would be nice (including, that this solution is sufficient for now :)) I had great fun writing this, it reminded me of writing cookbooks during my 'Chef' days. I must confess that the Chef DSL embedded in ruby seemed more concise, and that it provided a way to write a cookbook 'out-of-tree' which was kind of less daunting for newcomers; however it's already amazing that you have this kind of functionality! Kind regards, Jean-Baptiste
[0001-gnu-Add-cachefilesd-service.patch (text/x-patch, attachment)]
[signature.asc (application/pgp-signature, inline)]
guix-patches <at> gnu.org
:bug#41180
; Package guix-patches
.
(Sun, 10 May 2020 19:28:02 GMT) Full text and rfc822 format available.Message #8 received at 41180 <at> debbugs.gnu.org (full text, mbox):
From: Jean-Baptiste Note <jean-baptiste.note <at> m4x.org> To: 41180 <at> debbugs.gnu.org Cc: Mathieu Othacehe <m.othacehe <at> gmail.com> Subject: Re: [PATCH] Add cachefilesd service. Date: Sun, 10 May 2020 19:27:42 +0000
[Message part 1 (text/plain, inline)]
Documentation patch.
[0002-doc-Add-documentation-for-cachefilesd-service.patch (text/x-patch, attachment)]
[signature.asc (application/pgp-signature, inline)]
guix-patches <at> gnu.org
:bug#41180
; Package guix-patches
.
(Mon, 11 May 2020 15:07:01 GMT) Full text and rfc822 format available.Message #11 received at 41180 <at> debbugs.gnu.org (full text, mbox):
From: Mathieu Othacehe <othacehe <at> gnu.org> To: Jean-Baptiste Note <jean-baptiste.note <at> m4x.org> Cc: 41180 <at> debbugs.gnu.org Subject: Re: [bug#41180] [PATCH] Add cachefilesd service. Date: Mon, 11 May 2020 17:06:08 +0200
Hello Jean-Baptiste, Thanks for this service! > - I gathered that #~ / #$ kinds of suspends evaluation / forces it -- is > there documentation about this somewhere ? #~ and #$ are related to the Gexp mechanism. It's documented here: https://guix.gnu.org/manual/en/html_node/G_002dExpressions.html. > - There's something that looks like a splat operator (only seen in > conjuction with forcing evaluation in #$@) -- again i'd be interested > in more documentation about this feature -- is this a guix-specific > operator? #$@ is a shortcut for ungexp-splicing. It's also documented in the link above. It can be a bit puzzling at start, don't hesitate to ask some help on #guix channel. > - I don't understand why there are ^L separating services in the scheme > files -- is this necessary? A convention? What purpose does it serve? Yes, see the "Pagination" section in https://mumble.net/~campbell/scheme/style.txt. You can install "emacs-page-break-lines" to replace it by cleaner lines. > Regarding the patch itself: > > - i'm not entirely sure the service belongs to services/linux.scm I think it's fine. > - there are no automated tests (beyond what I have done by hand > locally!), and there's no lint, so I don't really feel confident about > it :) Are there tests for services to alleviate my fears? It would be nice to implement tests along with the new service definition. You can have a look to (gnu tests cups) module for instance. It tests the cups service by spawning a virtual-machine called a "marionette". You could create a (gnu tests cachefilesd) doing a similar job. See "Running the Test Suite" in the info page for more details on how to run the test suite. > - I've copied some other service for modprobing the required kernel > modules before launching the daemon with a one-shot shepherd > service. Frankly i'm not happy about this solution, it seems to me > that it unnecessarily pollutes the shepherd configuration; maybe some > other mechanism (graft?) adjusting the modprobe configuration could be > better (better still, autoload the file). Any guidance would be nice > (including, that this solution is sufficient for now :)) The ideal would be that cachefilesd loads the appropriated module. If this is not possible, we can discuss extending kernel-module-loader-service-type service. But for now I guess it's ok. I hope it answers your questions, I'll review the rest of the service later on. Thanks, Mathieu
guix-patches <at> gnu.org
:bug#41180
; Package guix-patches
.
(Tue, 19 May 2020 12:13:02 GMT) Full text and rfc822 format available.Message #14 received at 41180 <at> debbugs.gnu.org (full text, mbox):
From: Mathieu Othacehe <othacehe <at> gnu.org> To: Jean-Baptiste Note <jean-baptiste.note <at> m4x.org> Cc: 41180 <at> debbugs.gnu.org Subject: Re: [bug#41180] [PATCH] Add cachefilesd service. Date: Tue, 19 May 2020 14:12:03 +0200
Hello, Overall, this looks nice! A few comments below. Note that you can merge this patch with the documentation patch. It would also be nice to add the associated system tests. > +(define-record-type* <cachefilesd-configuration> > + cachefilesd-configuration make-cachefilesd-configuration > + cachefilesd-configuration? > + > + ;; <package-path> > + (cachefilesd cachefilesd-configuration-cachefilesd > + (default cachefilesd)) > + You could write something more concise here by removing empty lines and adding the 'type' comment on the same line. > + (let ((secctx #$(cachefilesd-configuration-secctx config))) > + (if secctx (format port "secctx ~a" secctx))) You can use 'when' for one arm if conditions. > + > + ;; XXX factor this > + (format port "brun ~a%\n" > + #$(number->string > + (cachefilesd-configuration-brun config))) It would indeed be nice to factor it, maybe by creating an association table with the symbol name as CAR and the matching procedure as CDR. Something like: --8<---------------cut here---------------start------------->8--- '(("frun" . cachefilesd-configuration-frun) ("bcull" . cachefilesd-configuration-bcull)) --8<---------------cut here---------------end--------------->8--- then you could iterate on that list. > + (if #$(cachefilesd-configuration-nocull? config) > + (display "nocull\n" port)) Same as above. You can use 'when' or 'unless' instead of "(if test stmt)". > + ;; Make sure the cache directory and pid dir exists "dir" -> "directory". > + ;; XXX shepherd pid file handling: no idea how shepherd does it > + ;; and if it's going to conflict with cachefilesd's Shepherd documentation says: --8<---------------cut here---------------start------------->8--- When PID-FILE is true, it must be the name of a PID file associated with the process being launched; the return value is the PID once that file has been created. If PID-FILE does not show up in less than PID-FILE-TIMEOUT seconds, the service is considered as failing to start. --8<---------------cut here---------------end--------------->8--- So I think you can remove this comment. Thanks, Mathieu
guix-patches <at> gnu.org
:bug#41180
; Package guix-patches
.
(Wed, 20 May 2020 20:40:02 GMT) Full text and rfc822 format available.Message #17 received at 41180 <at> debbugs.gnu.org (full text, mbox):
From: Jean-Baptiste Note <jean-baptiste.note <at> m4x.org> To: Mathieu Othacehe <othacehe <at> gnu.org> Cc: 41180 <at> debbugs.gnu.org Subject: Re: [bug#41180] [PATCH] Add cachefilesd service. Date: Wed, 20 May 2020 20:39:36 +0000
[Message part 1 (text/plain, inline)]
Hi Mathieu, Thanks a lot for taking so much time to help me out and review this patch. Following your previous mail, I'm currently writing a test. I may follow NFS's tests rather than CUPS -- (some of) NFS' tests just checks from within the marionette that the service has been started, while CUPS verifies from the outside that an external service is correctly running. While I do prefer the CUPS test -- verify at the "user level" that the service is provided -- it seems very complex to me to test cachefilesd at a high level with a binary decision and no false positive. Venues for this could be: - maybe an NFS mount with the fsc option when cachefilesd is not activated will fail -- I need to check that; - or maybe mounting some NFS share with fsc, accessing it, and checking afterwards that the cache has been filled by cached data -- this is getting complex though, and probably not a clear-cut scenario. I don't know how high you will set the bar and if a simple 'check that the daemon is running' would be sufficient to you :) Thanks a lot for the various documentation pointers and style recommendation. I really appreciate all of this! I will provide a comprehensive patch with your changes integrated, and a test, as soon as i am happy with it -- or just give up writing the perfect test. Kind regards, Jean-Baptiste
[signature.asc (application/pgp-signature, inline)]
guix-patches <at> gnu.org
:bug#41180
; Package guix-patches
.
(Sat, 23 May 2020 06:45:01 GMT) Full text and rfc822 format available.Message #20 received at 41180 <at> debbugs.gnu.org (full text, mbox):
From: Mathieu Othacehe <othacehe <at> gnu.org> To: Jean-Baptiste Note <jean-baptiste.note <at> m4x.org> Cc: 41180 <at> debbugs.gnu.org Subject: Re: [bug#41180] [PATCH] Add cachefilesd service. Date: Sat, 23 May 2020 08:44:07 +0200
Hello Jean-Baptiste, > Thanks a lot for the various documentation pointers and style > recommendation. I really appreciate all of this! > > I will provide a comprehensive patch with your changes integrated, and a > test, as soon as i am happy with it -- or just give up writing the > perfect test. Great :) I think that checking that the module is loaded, and the cachefilesd service is running is already a first step. You can also check for some properties in the sysfs, but unless you're already there, maybe you don't need to push much further! Thanks, Mathieu
guix-patches <at> gnu.org
:bug#41180
; Package guix-patches
.
(Wed, 02 Sep 2020 14:59:02 GMT) Full text and rfc822 format available.Message #23 received at 41180 <at> debbugs.gnu.org (full text, mbox):
From: Mathieu Othacehe <othacehe <at> gnu.org> To: Jean-Baptiste Note <jean-baptiste.note <at> m4x.org> Cc: 41180 <at> debbugs.gnu.org Subject: Re: [bug#41180] [PATCH] Add cachefilesd service. Date: Wed, 02 Sep 2020 16:58:19 +0200
Hello Jean-Baptiste, > Thanks a lot for the various documentation pointers and style > recommendation. I really appreciate all of this! > > I will provide a comprehensive patch with your changes integrated, and a > test, as soon as i am happy with it -- or just give up writing the > perfect test. Any progress on that one :)? Do not hesitate to ask some help here or on #guix if needed. Thanks, Mathieu
guix-patches <at> gnu.org
:bug#41180
; Package guix-patches
.
(Thu, 09 Mar 2023 12:25:02 GMT) Full text and rfc822 format available.Message #26 received at 41180 <at> debbugs.gnu.org (full text, mbox):
From: Felix Lechner <felix.lechner <at> lease-up.com> To: 41180 <at> debbugs.gnu.org Cc: Bruno Victal <mirai <at> makinata.eu>, Felix Lechner <felix.lechner <at> lease-up.com> Subject: [PATCH v2] gnu: services: Add cachefilesd service. (Closes: #41180) Date: Thu, 9 Mar 2023 04:24:11 -0800
Thanks to Bruno Victal "mirai" for cooperating on this patch and for generously sharing a wealth of insights about Guix services. Thanks to Jean-Baptiste Note for an early version of this service! Co-authored-by: Bruno Victal <mirai <at> makinata.eu> --- doc/guix.texi | 90 +++++++++++++++++ gnu/local.mk | 1 + gnu/services/linux.scm | 200 +++++++++++++++++++++++++++++++++++++- gnu/tests/cachefilesd.scm | 71 ++++++++++++++ 4 files changed, 361 insertions(+), 1 deletion(-) create mode 100644 gnu/tests/cachefilesd.scm diff --git a/doc/guix.texi b/doc/guix.texi index 6671ba9305..c1a68707d2 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -113,6 +113,7 @@ Copyright @copyright{} 2022–2023 Bruno Victal@* Copyright @copyright{} 2022 Ivan Vilata-i-Balaguer@* Copyright @copyright{} 2023 Giacomo Leidi@* Copyright @copyright{} 2022 Antero Mejr@* +Copyright @copyright{} 2023 Felix Lechner@* Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or @@ -37473,6 +37474,95 @@ parameters, can be done as follow: @end lisp @end defvar +@cindex cachefilesd +@cindex cachefiles +@cindex fscache +@subsubheading Cachefilesd Service + +The Cachefilesd service starts a daemon that caches network filesystem +data locally. It is especially useful for NFS and AFS shares, where it +reduces latencies for repeated access when reading files. + +The daemon can be started as follows: + +@lisp +(service cachefilesd-service-type + (cachefilesd-configuration + (cache-directory "/var/cache/fscache"))) +@end lisp + +@defvar cachefilesd-service-type +The service type for starting @command{cachefilesd}. The value for this +service type is a @code{cachefilesd-configuration}, whose only required +field is @var{cache-directory}. + +@end defvar + +@c %start of fragment +@deftp {Data Type} cachefilesd-configuration +Available @code{cachefilesd-configuration} fields are: + +@table @asis +@item @code{cachefilesd} (default: @code{cachefilesd}) (type: file-like) +The cachefilesd package to use. + +@item @code{debug-output?} (default: @code{#f}) (type: boolean) +Print debugging output to stderr. + +@item @code{use-syslog?} (default: @code{#t}) (type: boolean) +Log to syslog facility instead of stdout. + +@item @code{scan?} (default: @code{#t}) (type: boolean) +Scan for cachable objects. + +@item @code{cache-directory} (type: maybe-string) +Location of the cache directory. + +@item @code{cache-name} (default: @code{"CacheFiles"}) (type: maybe-string) +Name of cache (keep unique). + +@item @code{security-context} (type: maybe-string) +SELinux security context. + +@item @code{pause-culling-for-block-percentage} (default: @code{7}) (type: maybe-non-negative-integer) +Pause culling when available blocks exceed this percentage. + +@item @code{pause-culling-for-file-percentage} (default: @code{7}) (type: maybe-non-negative-integer) +Pause culling when available files exceed this percentage. + +@item @code{resume-culling-for-block-percentage} (default: @code{5}) (type: maybe-non-negative-integer) +Start culling when available blocks drop below this percentage. + +@item @code{resume-culling-for-file-percentage} (default: @code{5}) (type: maybe-non-negative-integer) +Start culling when available files drop below this percentage. + +@item @code{pause-caching-for-block-percentage} (default: @code{1}) (type: maybe-non-negative-integer) +Pause further allocations when available blocks drop below this +percentage. + +@item @code{pause-caching-for-file-percentage} (default: @code{1}) (type: maybe-non-negative-integer) +Pause further allocations when available files drop below this +percentage. + +@item @code{log2-table-size} (default: @code{12}) (type: maybe-non-negative-integer) +Size of tables holding cullable objects in logarithm of base 2. + +@item @code{cull?} (default: @code{#t}) (type: boolean) +Create free space by culling (consumes system load). + +@item @code{trace-function-entry-in-kernel-module?} (default: @code{#f}) (type: boolean) +Trace function entry in the kernel module (for debugging). + +@item @code{trace-function-exit-in-kernel-module?} (default: @code{#f}) (type: boolean) +Trace function exit in the kernel module (for debugging). + +@item @code{trace-internal-checkpoints-in-kernel-module?} (default: @code{#f}) (type: boolean) +Trace internal checkpoints in the kernel module (for debugging). + +@end table +@end deftp +@c %end of fragment + @cindex rasdaemon @cindex Platform Reliability, Availability and Serviceability daemon @subsubheading Rasdaemon Service diff --git a/gnu/local.mk b/gnu/local.mk index 6c5a9ce024..a4e0e4ec55 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -759,6 +759,7 @@ GNU_SYSTEM_MODULES = \ %D%/tests.scm \ %D%/tests/audio.scm \ %D%/tests/base.scm \ + %D%/tests/cachefilesd.scm \ %D%/tests/ci.scm \ %D%/tests/cups.scm \ %D%/tests/databases.scm \ diff --git a/gnu/services/linux.scm b/gnu/services/linux.scm index 60e2093e1d..e581291a7b 100644 --- a/gnu/services/linux.scm +++ b/gnu/services/linux.scm @@ -5,6 +5,7 @@ ;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework <at> protonmail.com> ;;; Copyright © 2021 B. Wilson <elaexuotee <at> wilsonb.com> ;;; Copyright © 2022 Josselin Poiret <dev <at> jpoiret.xyz> +;;; Copyright © 2023 Felix Lechner <felix.lechner <at> lease-up.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -30,12 +31,14 @@ (define-module (gnu services linux) #:use-module (guix ui) #:use-module (gnu services) #:use-module (gnu services base) + #:use-module (gnu services configuration) #:use-module (gnu services shepherd) #:use-module (gnu packages linux) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) #:use-module (srfi srfi-35) + #:use-module (ice-9 format) #:use-module (ice-9 match) #:export (earlyoom-configuration earlyoom-configuration? @@ -52,6 +55,28 @@ (define-module (gnu services linux) kernel-module-loader-service-type + cachefilesd-configuration + cachefilesd-configuration? + cachefilesd-configuration-cachefilesd + cachefilesd-configuration-debug-output? + cachefilesd-configuration-use-syslog? + cachefilesd-configuration-scan? + cachefilesd-configuration-cache-directory + cachefilesd-configuration-cache-name + cachefilesd-configuration-security-context + cachefilesd-configuration-pause-culling-for-block-percentage + cachefilesd-configuration-pause-culling-for-file-percentage + cachefilesd-configuration-resume-culling-for-block-percentage + cachefilesd-configuration-resume-culling-for-file-percentage + cachefilesd-configuration-pause-caching-for-block-percentage + cachefilesd-configuration-pause-caching-for-file-percentage + cachefilesd-configuration-log2-table-size + cachefilesd-configuration-cull? + cachefilesd-configuration-trace-function-entry-in-kernel-module + cachefilesd-configuration-trace-function-exit-in-kernel-module + cachefilesd-configuration-trace-internal-checkpoints-in-kernel-module + cachefilesd-service-type + rasdaemon-configuration rasdaemon-configuration? rasdaemon-configuration-record? @@ -198,6 +223,179 @@ (define kernel-module-loader-service-type (extend append) (default-value '()))) + +;;; +;;; Cachefilesd, an FS-Cache daemon +;;; + +(define (serialize-string variable-symbol value) + #~(format #f "~a ~a~%" #$(symbol->string variable-symbol) #$value)) + +(define-maybe string) + +(define (non-negative-integer? val) + (and (exact-integer? val) (not (negative? val)))) + +(define (serialize-non-negative-integer variable-symbol value) + #~(format #f "~a ~d~%" #$(symbol->string variable-symbol) #$value)) + +(define-maybe non-negative-integer) + +(define (make-option-serializer option-symbol) + (lambda (variable-symbol text) + (if (maybe-value-set? text) + #~(format #f "~a ~a~%" #$(symbol->string option-symbol) #$text) + ""))) + +(define (make-percentage-threshold-serializer threshold-symbol) + (lambda (variable-symbol percentage) + (if (maybe-value-set? percentage) + #~(format #f "~a ~a%~%" #$(symbol->string threshold-symbol) #$percentage) + ""))) + +(define-configuration cachefilesd-configuration + (cachefilesd + (file-like cachefilesd) + "The cachefilesd package to use." + empty-serializer) + + ;; command-line options + (debug-output? + (boolean #f) + "Print debugging output to stderr." + empty-serializer) + + (use-syslog? + (boolean #t) + "Log to syslog facility instead of stdout." + empty-serializer) + + ;; culling is part of the configuration file + ;; despite the name of the command-line option + (scan? + (boolean #t) + "Scan for cachable objects." + empty-serializer) + + ;; sole required field in the configuration file + (cache-directory + maybe-string + "Location of the cache directory." + (make-option-serializer 'dir)) + + (cache-name + (maybe-string "CacheFiles") + "Name of cache (keep unique)." + (make-option-serializer 'tag)) + + (security-context + maybe-string + "SELinux security context." + (make-option-serializer 'secctx)) + + ;; percentage thresholds in the configuration file + (pause-culling-for-block-percentage + (maybe-non-negative-integer 7) + "Pause culling when available blocks exceed this percentage." + (make-percentage-threshold-serializer 'brun)) + + (pause-culling-for-file-percentage + (maybe-non-negative-integer 7) + "Pause culling when available files exceed this percentage." + (make-percentage-threshold-serializer 'frun)) + + (resume-culling-for-block-percentage + (maybe-non-negative-integer 5) + "Start culling when available blocks drop below this percentage." + (make-percentage-threshold-serializer 'bcull)) + + (resume-culling-for-file-percentage + (maybe-non-negative-integer 5) + "Start culling when available files drop below this percentage." + (make-percentage-threshold-serializer 'fcull)) + + (pause-caching-for-block-percentage + (maybe-non-negative-integer 1) + "Pause further allocations when available blocks drop below this percentage." + (make-percentage-threshold-serializer 'bstop)) + + (pause-caching-for-file-percentage + (maybe-non-negative-integer 1) + "Pause further allocations when available files drop below this percentage." + (make-percentage-threshold-serializer 'fstop)) + + ;; run time optimizations in the configuration file + (log2-table-size + (maybe-non-negative-integer 12) + "Size of tables holding cullable objects in logarithm of base 2." + (make-option-serializer 'culltable)) + + (cull? + (boolean #t) + "Create free space by culling (consumes system load)." + (lambda (variable-symbol value) + (if value "" "nocull\n"))) + + ;; kernel module debugging in the configuration file + (trace-function-entry-in-kernel-module? + (boolean #f) + "Trace function entry in the kernel module (for debugging)." + empty-serializer) + + (trace-function-exit-in-kernel-module? + (boolean #f) + "Trace function exit in the kernel module (for debugging)." + empty-serializer) + + (trace-internal-checkpoints-in-kernel-module? + (boolean #f) + "Trace internal checkpoints in the kernel module (for debugging)." + empty-serializer)) + +(define (serialize-cachefilesd-configuration configuration) + (mixed-text-file + "cachefilesd.conf" + (serialize-configuration configuration cachefilesd-configuration-fields))) + +(define (cachefilesd-shepherd-service config) + "Return a list of <shepherd-service> for cachefilesd for CONFIG." + (match-record + config <cachefilesd-configuration> (cachefilesd + debug-output? + use-syslog? + scan? + cache-directory) + (let ((configuration-file (serialize-cachefilesd-configuration config))) + (shepherd-service + (documentation "Run the cachefilesd daemon for FS-Cache.") + (provision '(cachefilesd)) + (requirement (append '(file-systems) + (if use-syslog? '(syslogd) '()))) + (start #~(begin + (and=> #$(maybe-value cache-directory) mkdir-p) + (make-forkexec-constructor + `(#$(file-append cachefilesd "/sbin/cachefilesd") + ;; do not detach + "-n" + #$@(if debug-output? '("-d") '()) + #$@(if use-syslog? '() '("-s")) + #$@(if scan? '() '("-N")) + "-f" #$configuration-file)))) + (stop #~(make-kill-destructor)))))) + +(define cachefilesd-service-type + (service-type + (name 'cachefilesd) + (description + "Run the FS-Cache backend daemon @command{cachefilesd}.") + (extensions + (list + (service-extension kernel-module-loader-service-type + (const '("cachefiles"))) + (service-extension shepherd-root-service-type + (compose list cachefilesd-shepherd-service)))) + (default-value (cachefilesd-configuration)))) + ;;; ;;; Reliability, Availability, and Serviceability (RAS) daemon @@ -243,7 +441,7 @@ (define rasdaemon-service-type ;;; -;;; Kernel module loader. +;;; Zram device ;;; (define-record-type* <zram-device-configuration> diff --git a/gnu/tests/cachefilesd.scm b/gnu/tests/cachefilesd.scm new file mode 100644 index 0000000000..7f5d513067 --- /dev/null +++ b/gnu/tests/cachefilesd.scm @@ -0,0 +1,71 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2017 Peter Mikkelsen <petermikkelsen10 <at> gmail.com> +;;; Copyright © 2022 Bruno Victal <mirai <at> makinata.eu> +;;; Copyright © 2023 Felix Lechner <felix.lechner <at> lease-up.com> +;;; +;;; 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 <http://www.gnu.org/licenses/>. + +(define-module (gnu tests cachefilesd) + #:use-module (gnu tests) + #:use-module (gnu system) + #:use-module (gnu system vm) + #:use-module (gnu services) + #:use-module (gnu services linux) + #:use-module (guix gexp) + #:export (%test-cachefilesd)) + +(define %cachefilesd-os + (simple-operating-system + (service cachefilesd-service-type + (cachefilesd-configuration + (cache-directory "/var/cache/fscache"))))) + +(define (run-cachefilesd-test) + "Run tests in %cachefilesd-os, which has cachefilesd running." + (define os + (marionette-operating-system + %cachefilesd-os + #:imported-modules '((gnu services herd)))) + + (define vm + (virtual-machine os)) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (srfi srfi-64) + (gnu build marionette)) + (define marionette + (make-marionette (list #$vm))) + + (test-runner-current (system-test-runner #$output)) + (test-begin "cachefilesd") + + (test-assert "service is running" + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'cachefilesd)) + marionette)) + + (test-end)))) + (gexp->derivation "cachefilesd-test" test)) + +(define %test-cachefilesd + (system-test + (name "cachefilesd") + (description "Test that the cachefilesd runs when started.") + (value (run-cachefilesd-test)))) -- 2.39.1
Felix Lechner <felix.lechner <at> lease-up.com>
:Jean-Baptiste Note <jean-baptiste.note <at> m4x.org>
:Message #31 received at 41180-done <at> debbugs.gnu.org (full text, mbox):
From: Felix Lechner <felix.lechner <at> lease-up.com> To: 41180-done <at> debbugs.gnu.org Subject: Closing in favor of Bug#63182 Date: Sat, 29 Apr 2023 21:10:20 -0700
Hi, This bug is too old to trigger a CI job. The patch also needed adjustments. Please check Bug#63182 for more progress. Closing this bug. Thanks! Kind regards Felix
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Sun, 28 May 2023 11:24:05 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.