all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [PATCH] gnu: Add rpc-daemon service
@ 2016-09-03  6:39 John Darrington
  2016-09-03 14:11 ` Ludovic Courtès
  0 siblings, 1 reply; 8+ messages in thread
From: John Darrington @ 2016-09-03  6:39 UTC (permalink / raw)
  To: guix-devel; +Cc: John Darrington

* gnu/services/nfs: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
 gnu/local.mk         |  1 +
 gnu/services/nfs.scm | 25 +++++++++++++++++++++++++
 2 files changed, 26 insertions(+)
 create mode 100644 gnu/services/nfs.scm

diff --git a/gnu/local.mk b/gnu/local.mk
index efb00b9..8d2de1d 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -388,6 +388,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/mail.scm				\
   %D%/services/mcron.scm			\
   %D%/services/networking.scm			\
+  %D%/services/nfs.scm			\
   %D%/services/shepherd.scm			\
   %D%/services/herd.scm				\
   %D%/services/spice.scm				\
diff --git a/gnu/services/nfs.scm b/gnu/services/nfs.scm
new file mode 100644
index 0000000..2ff5a36
--- /dev/null
+++ b/gnu/services/nfs.scm
@@ -0,0 +1,25 @@
+(define-module (gnu services nfs)
+  #:use-module (gnu)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu packages onc-rpc)
+  #:use-module (guix)
+  #:export (rpc-service))
+
+(define (rpc-shepherd-service config) ; Config is ignored
+  (list (shepherd-service
+         (provision '(rpc-daemon))
+         (requirement '(networking))
+         (start #~(make-forkexec-constructor
+                   (list (string-append #$rpcbind "/bin/rpcbind") "-d" "-f")))
+         (stop #~(make-kill-destructor)))))
+
+(define rpc-service-type
+  (service-type
+   (name 'rpc)
+   (extensions (list (service-extension shepherd-root-service-type
+                                        rpc-shepherd-service)))))
+
+(define* (rpc-service config)
+  "Run the rpc daemon. Config is ignored."
+  (service rpc-service-type config))
+
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] gnu: Add rpc-daemon service
  2016-09-03  6:39 [PATCH] gnu: Add rpc-daemon service John Darrington
@ 2016-09-03 14:11 ` Ludovic Courtès
  2016-09-03 14:54   ` John Darrington
  2016-09-05 19:22   ` John Darrington
  0 siblings, 2 replies; 8+ messages in thread
From: Ludovic Courtès @ 2016-09-03 14:11 UTC (permalink / raw)
  To: John Darrington; +Cc: guix-devel

John Darrington <jmd@gnu.org> skribis:

> * gnu/services/nfs: New file.
                   ^^
> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.

For the final patch, please make sure to mention it in guix.texi.

> --- /dev/null
> +++ b/gnu/services/nfs.scm

Missing license.

> @@ -0,0 +1,25 @@
> +(define-module (gnu services nfs)
> +  #:use-module (gnu)
> +  #:use-module (gnu services shepherd)
> +  #:use-module (gnu packages onc-rpc)
> +  #:use-module (guix)
> +  #:export (rpc-service))
> +
> +(define (rpc-shepherd-service config) ; Config is ignored
> +  (list (shepherd-service
> +         (provision '(rpc-daemon))
> +         (requirement '(networking))
> +         (start #~(make-forkexec-constructor
> +                   (list (string-append #$rpcbind "/bin/rpcbind") "-d" "-f")))
> +         (stop #~(make-kill-destructor)))))
> +
> +(define rpc-service-type
> +  (service-type
> +   (name 'rpc)
> +   (extensions (list (service-extension shepherd-root-service-type
> +                                        rpc-shepherd-service)))))

In this case, you can simply write:

  (define rpcbind-service-type
    (shepherd-service-type
     'rpcbind
     (lambda (config)
       (shepherd-service …))))

I think the service should be called “rpcbind”, and not “rpc” (there are
other ONC RPC and NFS daemons, such as mountd and statd, so we need to
use clear names.)

> +(define* (rpc-service config)
> +  "Run the rpc daemon. Config is ignored."
> +  (service rpc-service-type config))

There’s at least one bit of config needed: the ‘rpcbind’ package to
use.  So I would write it as:

  (service rpcbind-service-type rpcbind)

and then honor this argument.

Also, the preferred way now is to expose service-type objects and not
provide procedures like the one above.  So you can omit this procedure
and instead make sure to #:export (rpcbind-service-type).

Could you send an updated patch?

If you’re willing to play a bit, it would be nice to have a system test
that spawns a GuixSD with this service, and then makes sure that, say,
the ‘rpcinfo’ program is able to connect to the daemon.  But that’s
bonus.  :-)

Thanks!

Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gnu: Add rpc-daemon service
  2016-09-03 14:11 ` Ludovic Courtès
@ 2016-09-03 14:54   ` John Darrington
  2016-09-05 20:38     ` Ludovic Courtès
  2016-09-05 19:22   ` John Darrington
  1 sibling, 1 reply; 8+ messages in thread
From: John Darrington @ 2016-09-03 14:54 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel, John Darrington

[-- Attachment #1: Type: text/plain, Size: 1340 bytes --]

On Sat, Sep 03, 2016 at 04:11:53PM +0200, Ludovic Courtès wrote:

will do.
     
     > --- /dev/null
     > +++ b/gnu/services/nfs.scm
     
     Missing license.

ok.

     
     Also, the preferred way now is to expose service-type objects and not
     provide procedures like the one above.  So you can omit this procedure
     and instead make sure to #:export (rpcbind-service-type).

So what do I then put in /etc/config.scm ?
When I make your suggested change, I get this error:

 ./pre-inst-env guix system reconfigure /etc/config.scm
guix system: error: failed to load '/etc/config.scm':
/etc/config.scm:60:24: In procedure #<procedure 4a4df00 ()>:
/etc/config.scm:60:24: In procedure module-lookup: Unbound variable: rpcbind-service

     
     
     If you’re willing to play a bit, it would be nice to have a system test
     that spawns a GuixSD with this service, and then makes sure that, say,
     the ‘rpcinfo’ program is able to connect to the daemon.  But that’s
     bonus.  :-)
     
Are there some examples of existing system tests?

J'
     

-- 
Avoid eavesdropping.  Send strong encryted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.


[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 181 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] gnu: Add rpc-daemon service
  2016-09-03 14:11 ` Ludovic Courtès
  2016-09-03 14:54   ` John Darrington
@ 2016-09-05 19:22   ` John Darrington
  2016-09-05 20:44     ` Ludovic Courtès
  1 sibling, 1 reply; 8+ messages in thread
From: John Darrington @ 2016-09-05 19:22 UTC (permalink / raw)
  To: guix-devel; +Cc: John Darrington

Try this patch


* gnu/services/nfs.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
 doc/guix.texi        | 16 +++++++++++++++
 gnu/local.mk         |  1 +
 gnu/services/nfs.scm | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 72 insertions(+)
 create mode 100644 gnu/services/nfs.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index b6ca34a..7e3fbfc 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -9975,6 +9975,22 @@ directories are created when the service is activated.
 @node Various Services
 @subsubsection Various Services
 
+@cindex rpcbind
+@subsubheading Rpcbind Service
+
+The @code{(gnu services rpcbind)} module provides the following service.
+
+@deffn {Scheme Procedure} rpcbind-service [#:rpcbind rpcbind] @
+       [#:warm-start? #t]
+Return a service that runs @command{rpcbind}, a server which converts RPC
+program numbers to universal addresses.
+
+Optionally, the package where the daemon is to be found, @var{rpcbind}, may be
+specified.
+If @var{warm-start?} is true (the default), then it will read a state file on
+startup and thus reload state information saved saved by the previous instance.
+@end deffn
+
 @cindex lirc
 @subsubheading Lirc Service
 
diff --git a/gnu/local.mk b/gnu/local.mk
index 50363ef..9d284da 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -389,6 +389,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/mail.scm				\
   %D%/services/mcron.scm			\
   %D%/services/networking.scm			\
+  %D%/services/nfs.scm			\
   %D%/services/shepherd.scm			\
   %D%/services/herd.scm				\
   %D%/services/spice.scm				\
diff --git a/gnu/services/nfs.scm b/gnu/services/nfs.scm
new file mode 100644
index 0000000..6084f69
--- /dev/null
+++ b/gnu/services/nfs.scm
@@ -0,0 +1,55 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 John Darrington <jmd@gnu.org>
+;;;
+;;; 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 services nfs)
+  #:use-module (gnu)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu packages onc-rpc)
+  #:use-module (guix)
+  #:use-module (guix records)
+  #:export (rpcbind-service-type
+            rpcbind-configuration
+            rpcbind-configuration?))
+
+(define-record-type* <rpcbind-configuration>
+  rpcbind-configuration make-rpcbind-configuration
+  rpcbind-configuration?
+  (rpcbind             rpcbind-configuration-rpcbind
+                       (default rpcbind))
+  (warm-start?         rpcbind-configuration-warm-start?
+                       (default #t)))
+
+(define (rpcbind-shepherd-service config)
+  (define pkg
+    (rpcbind-configuration-rpcbind config))
+
+  (define rpcbind-command
+    #~(list (string-append #$pkg "/bin/rpcbind") "-f"
+            #$@(if (rpcbind-configuration-warm-start? config) '("-w") '())))
+  
+  (list (shepherd-service
+         (provision '(rpcbind-daemon))
+         (requirement '(networking))
+         (start #~(make-forkexec-constructor #$rpcbind-command))
+         (stop #~(make-kill-destructor)))))
+
+(define rpcbind-service-type
+  (service-type
+   (name 'rpcbind)
+   (extensions (list (service-extension shepherd-root-service-type
+                                        rpcbind-shepherd-service)))))
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] gnu: Add rpc-daemon service
  2016-09-03 14:54   ` John Darrington
@ 2016-09-05 20:38     ` Ludovic Courtès
  0 siblings, 0 replies; 8+ messages in thread
From: Ludovic Courtès @ 2016-09-05 20:38 UTC (permalink / raw)
  To: John Darrington; +Cc: guix-devel, John Darrington

John Darrington <john@darrington.wattle.id.au> skribis:

>      Also, the preferred way now is to expose service-type objects and not
>      provide procedures like the one above.  So you can omit this procedure
>      and instead make sure to #:export (rpcbind-service-type).
>
> So what do I then put in /etc/config.scm ?

(operating-system
  ;; …
  (services (cons (service rpcbind-service-type
                           (rpcbind-configuration …))
                  %base-services)))

>      If you’re willing to play a bit, it would be nice to have a system test
>      that spawns a GuixSD with this service, and then makes sure that, say,
>      the ‘rpcinfo’ program is able to connect to the daemon.  But that’s
>      bonus.  :-)
>      
> Are there some examples of existing system tests?

Yes, in gnu/tests/*.scm.

See also <https://savannah.gnu.org/forum/forum.php?forum_id=8605> and
<https://www.gnu.org/software/guix/manual/html_node/Running-the-Test-Suite.html>.

HTH!
Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] gnu: Add rpc-daemon service
  2016-09-05 19:22   ` John Darrington
@ 2016-09-05 20:44     ` Ludovic Courtès
  2016-09-06 16:50       ` John Darrington
  0 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2016-09-05 20:44 UTC (permalink / raw)
  To: John Darrington; +Cc: guix-devel

John Darrington <jmd@gnu.org> skribis:

> * gnu/services/nfs.scm: New file.
> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.

[...]

> +@cindex rpcbind
> +@subsubheading Rpcbind Service

s/Rpcbind/RPC Bind/
Also move the @cindex line after @subsubheading.

> +The @code{(gnu services rpcbind)} module provides the following service.
> +
> +@deffn {Scheme Procedure} rpcbind-service [#:rpcbind rpcbind] @
> +       [#:warm-start? #t]

This procedure no longer exists.  :-)

So instead, you need to add an @defvr for ‘rpcbind-service-type’ and an
@deftp for ‘rpcbind-configuration’, and a couple of sentences to glues
them together (see “Scheduled Job Execution” for an example.)

> +(define (rpcbind-shepherd-service config)
> +  (define pkg
> +    (rpcbind-configuration-rpcbind config))
> +
> +  (define rpcbind-command
> +    #~(list (string-append #$pkg "/bin/rpcbind") "-f"
> +            #$@(if (rpcbind-configuration-warm-start? config) '("-w") '())))
> +  
> +  (list (shepherd-service
> +         (provision '(rpcbind-daemon))
> +         (requirement '(networking))
> +         (start #~(make-forkexec-constructor #$rpcbind-command))
> +         (stop #~(make-kill-destructor)))))
> +
> +(define rpcbind-service-type
> +  (service-type
> +   (name 'rpcbind)
> +   (extensions (list (service-extension shepherd-root-service-type
> +                                        rpcbind-shepherd-service)))))

Better use ‘shepherd-service-type’ here, as noted at
<https://lists.gnu.org/archive/html/guix-devel/2016-09/msg00271.html>.

And then we’re done.  Could you send an updated patch?

Thank you for your patience!

Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH] gnu: Add rpc-daemon service
  2016-09-05 20:44     ` Ludovic Courtès
@ 2016-09-06 16:50       ` John Darrington
  2016-09-07 12:17         ` Ludovic Courtès
  0 siblings, 1 reply; 8+ messages in thread
From: John Darrington @ 2016-09-06 16:50 UTC (permalink / raw)
  To: guix-devel; +Cc: John Darrington

I think this patch does what you want.  Perhaps you can take another look before I push.

If I might be allowed to give my opinion though ...   I think this way of documenting 
things is of limited help to potential users.  It does nothing more than repeat what
is written in the code.  If that is what we want, then we could use some kind of
literate programming tool to do it.  That would be less maintenence and avoids
the possibility of code and documentation becoming out of sync.

However, what is really needed from documentation IMO, is not only a API reference,
but also a tutorial on how to use the thing.  I think this form of documentation will only
leave the newcommer scratching his head.



* gnu/services/nfs.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
---
 doc/guix.texi        | 26 +++++++++++++++++++++++++
 gnu/local.mk         |  1 +
 gnu/services/nfs.scm | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 81 insertions(+)
 create mode 100644 gnu/services/nfs.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index 59bc5d8..cff61d0 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -25,6 +25,7 @@ Copyright @copyright{} 2015, 2016 Ricardo Wurmus@*
 Copyright @copyright{} 2016 Ben Woodcroft@*
 Copyright @copyright{} 2016 Chris Marusich@*
 Copyright @copyright{} 2016 Efraim Flashner@*
+Copyright @copyright{} 2016 John Darrington@*
 Copyright @copyright{} 2016 ng0
 
 Permission is granted to copy, distribute and/or modify this document
@@ -10089,6 +10090,31 @@ directories are created when the service is activated.
 @node Various Services
 @subsubsection Various Services
 
+
+@subsubheading RPC Bind Service
+@cindex rpcbind
+
+The @code{(gnu services nfs)} module provides the following:
+
+@defvr {Scheme Variable} rpcbind-service-type
+A service type  for the RPC portmapper daemon.
+@end defvr
+
+
+@deftp {Data Type} rpcbind-configuration
+Data type representing the configuration of the RPC Bind Service.
+This type has the following parameters:
+@table @asis
+@item @code{rpcbind} (default: @code{rpcbind})
+The rpcbind package to use.
+
+@item @code{warm-start?}
+If this parameter is @code{#t} (the default), then the daemon will read a
+state file on startup thus reloading state information saved by a previous
+instance.
+@end table
+@end deftp
+
 @cindex lirc
 @subsubheading Lirc Service
 
diff --git a/gnu/local.mk b/gnu/local.mk
index 0a9b831..f337a2a 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -389,6 +389,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/mail.scm				\
   %D%/services/mcron.scm			\
   %D%/services/networking.scm			\
+  %D%/services/nfs.scm			\
   %D%/services/shepherd.scm			\
   %D%/services/herd.scm				\
   %D%/services/sddm.scm				\
diff --git a/gnu/services/nfs.scm b/gnu/services/nfs.scm
new file mode 100644
index 0000000..82713d8
--- /dev/null
+++ b/gnu/services/nfs.scm
@@ -0,0 +1,54 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 John Darrington <jmd@gnu.org>
+;;;
+;;; 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 services nfs)
+  #:use-module (gnu)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu packages onc-rpc)
+  #:use-module (guix)
+  #:use-module (guix records)
+  #:export (rpcbind-service-type
+            rpcbind-configuration
+            rpcbind-configuration?))
+
+(define-record-type* <rpcbind-configuration>
+  rpcbind-configuration make-rpcbind-configuration
+  rpcbind-configuration?
+  (rpcbind             rpcbind-configuration-rpcbind
+                       (default rpcbind))
+  (warm-start?         rpcbind-configuration-warm-start?
+                       (default #t)))
+
+(define rpcbind-service-type
+  (shepherd-service-type
+   'rpcbind
+   (lambda (config)
+     (define pkg
+       (rpcbind-configuration-rpcbind config))
+
+     (define rpcbind-command
+       #~(list (string-append #$pkg "/bin/rpcbind") "-f"
+               #$@(if (rpcbind-configuration-warm-start? config) '("-w") '())))
+
+     (shepherd-service
+      (documentation "Start the RPC bind daemon.")
+      (requirement '(networking))
+      (provision '(rpcbind-daemon))
+
+      (start #~(make-forkexec-constructor #$rpcbind-command))
+      (stop #~(make-kill-destructor))))))
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] gnu: Add rpc-daemon service
  2016-09-06 16:50       ` John Darrington
@ 2016-09-07 12:17         ` Ludovic Courtès
  0 siblings, 0 replies; 8+ messages in thread
From: Ludovic Courtès @ 2016-09-07 12:17 UTC (permalink / raw)
  To: John Darrington; +Cc: guix-devel

Hi!

John Darrington <jmd@gnu.org> skribis:

> If I might be allowed to give my opinion though ...   I think this way of documenting 
> things is of limited help to potential users.  It does nothing more than repeat what
> is written in the code.  If that is what we want, then we could use some kind of
> literate programming tool to do it.  That would be less maintenence and avoids
> the possibility of code and documentation becoming out of sync.

I don’t see anything in nfs.scm explaining, for instance, the
‘warm-start?’ knob; nor is anything (and rightfully so) hinting at what
NFS is and how rpcbind relates to it.

> However, what is really needed from documentation IMO, is not only a API reference,
> but also a tutorial on how to use the thing.  I think this form of documentation will only
> leave the newcommer scratching his head.

I agree.  It’s often a good idea to (1) give context and relevant
cross-references in the doc, and (2) include an example for non-trivial
services.  For instance, I think the “Desktop Services” and “Scheduled
Job Execution” sections are doing pretty good in this regard.

> * gnu/services/nfs.scm: New file.
> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.

[...]

> +@subsubheading RPC Bind Service
> +@cindex rpcbind
> +
> +The @code{(gnu services nfs)} module provides the following:
> +
> +@defvr {Scheme Variable} rpcbind-service-type
> +A service type  for the RPC portmapper daemon.
> +@end defvr
> +
> +
> +@deftp {Data Type} rpcbind-configuration
> +Data type representing the configuration of the RPC Bind Service.
> +This type has the following parameters:
> +@table @asis
> +@item @code{rpcbind} (default: @code{rpcbind})
> +The rpcbind package to use.
> +
> +@item @code{warm-start?}
                           ^
Mention the default value here…

> +If this parameter is @code{#t} (the default), then the daemon will read a
                                  ^
… and not here.

Other than that, LGTM!

Regarding documentation, since you asked ;-), what could work well here
is to have a complete “Network File System” @subsection.  It would start
with a short intro of what NFS is, provide an example showing how to
export a directory over NFS, give an overview of the services involved
(rpcbind, mountd, statd), and then give the API reference.

Thoughts for future work.  :-)

Thank you!

Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-09-07 12:17 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-03  6:39 [PATCH] gnu: Add rpc-daemon service John Darrington
2016-09-03 14:11 ` Ludovic Courtès
2016-09-03 14:54   ` John Darrington
2016-09-05 20:38     ` Ludovic Courtès
2016-09-05 19:22   ` John Darrington
2016-09-05 20:44     ` Ludovic Courtès
2016-09-06 16:50       ` John Darrington
2016-09-07 12:17         ` Ludovic Courtès

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.