GNU bug report logs - #59197
[PATCH 0/3] Support 'herd configuration SERVICE' to view config file

Previous Next

Package: guix-patches;

Reported by: Ludovic Courtès <ludo <at> gnu.org>

Date: Fri, 11 Nov 2022 18:12:02 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

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 59197 in the body.
You can then email your comments to 59197 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


Report forwarded to guix-patches <at> gnu.org:
bug#59197; Package guix-patches. (Fri, 11 Nov 2022 18:12:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ludovic Courtès <ludo <at> gnu.org>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Fri, 11 Nov 2022 18:12:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: guix-patches <at> gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 0/3] Support 'herd configuration SERVICE' to view config file
Date: Fri, 11 Nov 2022 19:11:31 +0100
Hi!

So far, to view the config file of sshd, elogind, etc., you'd have to do:

  cat /proc/PID/cmdline | xargs -0

or sometimes:

  cat /proc/PID/environ | xargs -0

and extract the config file name from there.

With this change, you can do:

  cat $(herd configuration elogind)

or similar.  Simple but convenient.

This patch series adds it to a few core services.  Adding it elsewhere
is left as an exercise to the reader.  :-)

Thoughts?

Ludo’.

Ludovic Courtès (3):
  services: shepherd: Define 'shepherd-configuration-action' helper.
  services: Add Shepherd 'configuration' action to various services.
  home: services: redshift: Add 'configuration' action.

 doc/guix.texi                  | 11 +++++++++++
 gnu/home/services/desktop.scm  |  3 ++-
 gnu/home/services/shepherd.scm |  3 ++-
 gnu/services/avahi.scm         |  5 +++--
 gnu/services/base.scm          |  5 +++--
 gnu/services/desktop.scm       | 12 ++++++++----
 gnu/services/networking.scm    |  4 +++-
 gnu/services/shepherd.scm      | 12 ++++++++++++
 gnu/services/ssh.scm           |  6 +++++-
 gnu/services/web.scm           |  7 +++----
 gnu/services/xorg.scm          | 10 ++++++----
 gnu/tests/base.scm             |  6 ++++++
 12 files changed, 64 insertions(+), 20 deletions(-)


base-commit: 1f5e8ef14ffa385907fc94a754cfff7a45fee50c
prerequisite-patch-id: ee11d213a4ee466dff6379eeaeea292b6ba93fb0
prerequisite-patch-id: 857e9a0f3d1bc9ad5584c44bc767683a53e44972
prerequisite-patch-id: b87a0615ac48fe8950281f797cd2d096a98f4a2c
prerequisite-patch-id: c554e46d5d315cd349df21ba153ef6ed580f0b3c
-- 
2.38.0





Information forwarded to guix-patches <at> gnu.org:
bug#59197; Package guix-patches. (Fri, 11 Nov 2022 18:14:02 GMT) Full text and rfc822 format available.

Message #8 received at 59197 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 59197 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 1/3] services: shepherd: Define
 'shepherd-configuration-action' helper.
Date: Fri, 11 Nov 2022 19:12:44 +0100
* gnu/services/shepherd.scm (shepherd-configuration-action): New
procedure.
---
 gnu/services/shepherd.scm | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm
index 7110e5aa89..b2601c0128 100644
--- a/gnu/services/shepherd.scm
+++ b/gnu/services/shepherd.scm
@@ -66,6 +66,8 @@ (define-module (gnu services shepherd)
             shepherd-action-documentation
             shepherd-action-procedure
 
+            shepherd-configuration-action
+
             %default-modules
 
             shepherd-service-file
@@ -333,6 +335,16 @@ (define shepherd&co
                      #:options '(#:local-build? #t
                                  #:substitutable? #f)))))
 
+(define (shepherd-configuration-action file)
+  "Return a 'configuration' action to display FILE, which should be the name
+of the service's configuration file."
+  (shepherd-action
+   (name 'configuration)
+   (documentation "Display the name of this service's configuration file.")
+   (procedure #~(lambda (_)
+                  (format #t "~a~%" #$file)
+                  #$file))))
+
 (define (shepherd-configuration-file services shepherd)
   "Return the shepherd configuration file for SERVICES.  SHEPHERD is used
 as shepherd package."
-- 
2.38.0





Information forwarded to guix-patches <at> gnu.org:
bug#59197; Package guix-patches. (Fri, 11 Nov 2022 18:14:02 GMT) Full text and rfc822 format available.

Message #11 received at 59197 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 59197 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 2/3] services: Add Shepherd 'configuration' action to various
 services.
Date: Fri, 11 Nov 2022 19:12:45 +0100
* gnu/services/avahi.scm (avahi-shepherd-service): Add 'actions' field.
* gnu/services/base.scm (nscd-actions): Add call to
'shepherd-configuration-action'.
* gnu/services/desktop.scm (upower-shepherd-service): Add 'actions'
field.
(elogind-shepherd-service): Likewise.
* gnu/services/networking.scm (openntpd-shepherd-service): Likewise.
(tor-shepherd-service): Likewise.
* gnu/services/ssh.scm (openssh-shepherd-service): Likewise.
* gnu/services/web.scm (nginx-shepherd-service): Likewise.
* gnu/services/xorg.scm (gdm-shepherd-service): Likewise.
* gnu/tests/base.scm (run-basic-test)["nscd configuration action"]: New
test.
* doc/guix.texi (Services): Document it.
---
 doc/guix.texi               | 11 +++++++++++
 gnu/services/avahi.scm      |  5 +++--
 gnu/services/base.scm       |  5 +++--
 gnu/services/desktop.scm    | 12 ++++++++----
 gnu/services/networking.scm |  4 +++-
 gnu/services/ssh.scm        |  6 +++++-
 gnu/services/web.scm        |  7 +++----
 gnu/services/xorg.scm       | 10 ++++++----
 gnu/tests/base.scm          |  6 ++++++
 9 files changed, 48 insertions(+), 18 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 3f76184495..6955108eed 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -17643,6 +17643,17 @@ Service xorg-server has been stopped.
 Service xorg-server has been started.
 @end example
 
+@cindex configuration, action for shepherd services
+@cindex configuration file, of a shepherd service
+For some services, @command{herd configuration} returns the name of the
+service's configuration file, which can be handy to inspect its
+configuration:
+
+@example
+# herd configuration sshd
+/gnu/store/@dots{}-sshd_config
+@end example
+
 The following sections document the available services, starting with
 the core services, that may be used in an @code{operating-system}
 declaration.
diff --git a/gnu/services/avahi.scm b/gnu/services/avahi.scm
index 3b8d0512c7..1c4220e490 100644
--- a/gnu/services/avahi.scm
+++ b/gnu/services/avahi.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo <at> gnu.org>
+;;; Copyright © 2014-2020, 2022 Ludovic Courtès <ludo <at> gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -137,7 +137,8 @@ (define (avahi-shepherd-service config)
                            #$@(if debug? #~("--debug") #~())
                            "-f" #$config)
                      #:pid-file "/run/avahi-daemon/pid"))
-           (stop #~(make-kill-destructor))))))
+           (stop #~(make-kill-destructor))
+           (actions (list (shepherd-configuration-action config)))))))
 
 (define avahi-service-type
   (let ((avahi-package (compose list avahi-configuration-avahi)))
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 3bf924b8f1..d99548573d 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -1327,10 +1327,11 @@ (define (nscd-action-procedure nscd config option)
              (loop)))))))
 
 (define (nscd-actions nscd config)
-  "Return Shepherd actions for NSCD."
+  "Return Shepherd actions for NSCD using CONFIG its config file."
   ;; Make this functionality available as actions because that's a simple way
   ;; to run the right 'nscd' binary with the right config file.
-  (list (shepherd-action
+  (list (shepherd-configuration-action config)
+        (shepherd-action
          (name 'statistics)
          (documentation "Display statistics about nscd usage.")
          (procedure (nscd-action-procedure nscd config "--statistics")))
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 1b087635d1..ac29e8d38a 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -273,7 +273,8 @@ (define (upower-shepherd-service config)
                      #:environment-variables
                      (list (string-append "UPOWER_CONF_FILE_NAME="
                                           #$config))))
-           (stop #~(make-kill-destructor))))))
+           (stop #~(make-kill-destructor))
+           (actions (list (shepherd-configuration-action config)))))))
 
 (define upower-service-type
   (let ((upower-package (compose list upower-configuration-upower)))
@@ -1168,6 +1169,9 @@ (module (file-append (elogind-package config)
 
 (define (elogind-shepherd-service config)
   "Return a Shepherd service to start elogind according to @var{config}."
+  (define config-file
+    (elogind-configuration-file config))
+
   (list (shepherd-service
          (requirement '(dbus-system))
          (provision '(elogind))
@@ -1176,9 +1180,9 @@ (define (elogind-shepherd-service config)
                                         "/libexec/elogind/elogind"))
                    #:environment-variables
                    (list (string-append "ELOGIND_CONF_FILE="
-                                        #$(elogind-configuration-file
-                                           config)))))
-         (stop #~(make-kill-destructor)))))
+                                        #$config-file))))
+         (stop #~(make-kill-destructor))
+         (actions (list (shepherd-configuration-action config-file))))))
 
 (define elogind-service-type
   (service-type (name 'elogind)
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 19aba8c266..18d1eb5b8c 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -652,7 +652,8 @@ (define ntpd.conf
                      ;; while running, leading shepherd to disable it.  To
                      ;; prevent spamming stderr, redirect output to logfile.
                      #:log-file "/var/log/ntpd.log"))
-           (stop #~(make-kill-destructor))))))
+           (stop #~(make-kill-destructor))
+           (actions (list (shepherd-configuration-action ntpd.conf)))))))
 
 (define (openntpd-service-activation config)
   "Return the activation gexp for CONFIG."
@@ -1032,6 +1033,7 @@ (define (tor-shepherd-service config)
                           (list #$tor "-f" #$torrc)
                           #:user "tor" #:group "tor"))
                 (stop #~(make-kill-destructor))
+                (actions (list (shepherd-configuration-action torrc)))
                 (documentation "Run the Tor anonymous network overlay."))))))))
 
 (define (tor-activation config)
diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm
index 72e7183590..7b038e6ac6 100644
--- a/gnu/services/ssh.scm
+++ b/gnu/services/ssh.scm
@@ -524,9 +524,12 @@ (define port-number
   (define max-connections
     (openssh-configuration-max-connections config))
 
+  (define config-file
+    (openssh-config-file config))
+
   (define openssh-command
     #~(list (string-append #$(openssh-configuration-openssh config) "/sbin/sshd")
-            "-D" "-f" #$(openssh-config-file config)))
+            "-D" "-f" #$config-file))
 
   (define inetd-style?
     ;; Whether to use 'make-inetd-constructor'.  That procedure appeared in
@@ -568,6 +571,7 @@ (define ipv6-support?
          (stop #~(if #$inetd-style?
                      (make-inetd-destructor)
                      (make-kill-destructor)))
+         (actions (list (shepherd-configuration-action config-file)))
          (auto-start? (openssh-auto-start? config)))))
 
 (define (openssh-pam-services config)
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 2023119037..bf321f8f1b 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -790,13 +790,11 @@ (define (nginx-shepherd-service config)
                 (nginx file run-directory shepherd-requirement)
    (let* ((nginx-binary (file-append nginx "/sbin/nginx"))
           (pid-file (in-vicinity run-directory "pid"))
+          (config-file (or file (default-nginx-config config)))
           (nginx-action
            (lambda args
              #~(lambda _
-                 (invoke #$nginx-binary "-c"
-                         #$(or file
-                               (default-nginx-config config))
-                         #$@args)
+                 (invoke #$nginx-binary "-c" #$config-file #$@args)
                  (match '#$args
                    (("-s" . _) #f)
                    (_
@@ -817,6 +815,7 @@ (define (nginx-shepherd-service config)
             (stop (nginx-action "-s" "stop"))
             (actions
               (list
+               (shepherd-configuration-action config-file)
                (shepherd-action
                  (name 'reload)
                  (documentation "Reload nginx configuration file and restart worker processes.
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 7f1f0bb581..5f073d05d3 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2017 Andy Wingo <wingo <at> igalia.com>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019, 2020 Ludovic Courtès <ludo <at> gnu.org>
+;;; Copyright © 2013-2017, 2019-2020, 2022 Ludovic Courtès <ludo <at> gnu.org>
 ;;; Copyright © 2015 Sou Bunnbu <iyzsong <at> gmail.com>
 ;;; Copyright © 2018, 2019 Timothy Sample <samplet <at> ngyro.com>
 ;;; Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke <at> gnu.org>
@@ -1083,6 +1083,9 @@ (module "pam_permit.so")))))
                      (gdm-configuration-allow-empty-passwords? config))))
 
 (define (gdm-shepherd-service config)
+  (define config-file
+    (gdm-configuration-file config))
+
   (list (shepherd-service
          (documentation "Xorg display server (GDM)")
          (provision '(xorg-server))
@@ -1095,9 +1098,7 @@ (define (gdm-shepherd-service config)
                      (list #$@(if (gdm-configuration-auto-suspend? config)
                                   #~()
                                   #~("DCONF_PROFILE=/etc/dconf/profile/gdm"))
-                           (string-append
-                            "GDM_CUSTOM_CONF="
-                            #$(gdm-configuration-file config))
+                           (string-append "GDM_CUSTOM_CONF=" #$config-file)
                            (string-append
                             "GDM_DBUS_DAEMON="
                             #$(gdm-configuration-dbus-daemon config))
@@ -1129,6 +1130,7 @@ (define (gdm-shepherd-service config)
                             "GDM_WAYLAND_SESSION="
                             #$(gdm-configuration-wayland-session config))))))
          (stop #~(make-kill-destructor))
+         (actions (list (shepherd-configuration-action config-file)))
          (respawn? #t))))
 
 (define gdm-polkit-rules
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index 64cd6a911a..7200a28606 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -424,6 +424,12 @@ (define (entry->list entry)
               (x
                (pk 'failure x #f))))
 
+          (test-assert "nscd configuration action"
+            (marionette-eval '(with-shepherd-action 'nscd ('configuration)
+                                                    results
+                                (file-exists? (car results)))
+                             marionette))
+
           (test-equal "nscd invalidate action"
             '(#t)                                 ;one value, #t
             (marionette-eval '(with-shepherd-action 'nscd ('invalidate "hosts")
-- 
2.38.0





Information forwarded to guix-patches <at> gnu.org:
bug#59197; Package guix-patches. (Fri, 11 Nov 2022 18:14:03 GMT) Full text and rfc822 format available.

Message #14 received at 59197 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 59197 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 3/3] home: services: redshift: Add 'configuration' action.
Date: Fri, 11 Nov 2022 19:12:46 +0100
* gnu/home/services/shepherd.scm: Re-export
'shepherd-configuration-action'.
* gnu/home/services/desktop.scm (redshift-shepherd-service): Add
'actions' field.
---
 gnu/home/services/desktop.scm  | 3 ++-
 gnu/home/services/shepherd.scm | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/gnu/home/services/desktop.scm b/gnu/home/services/desktop.scm
index 1ebfb14f3c..cb25b03b64 100644
--- a/gnu/home/services/desktop.scm
+++ b/gnu/home/services/desktop.scm
@@ -165,7 +165,8 @@ (define config-file
          (start #~(make-forkexec-constructor
                    (list #$(file-append redshift "/bin/redshift")
                          "-c" #$config-file)))
-         (stop #~(make-kill-destructor)))))
+         (stop #~(make-kill-destructor))
+         (actions (list (shepherd-configuration-action config-file))))))
 
 (define home-redshift-service-type
   (service-type
diff --git a/gnu/home/services/shepherd.scm b/gnu/home/services/shepherd.scm
index d2a803279f..1a70a220f0 100644
--- a/gnu/home/services/shepherd.scm
+++ b/gnu/home/services/shepherd.scm
@@ -45,7 +45,8 @@ (define-module (gnu home services shepherd)
                shepherd-service-auto-start?
                shepherd-service-modules
 
-               shepherd-action))
+               shepherd-action
+               shepherd-configuration-action))
 
 (define-record-type* <home-shepherd-configuration>
   home-shepherd-configuration make-home-shepherd-configuration
-- 
2.38.0





Information forwarded to guix-patches <at> gnu.org:
bug#59197; Package guix-patches. (Mon, 14 Nov 2022 02:17:02 GMT) Full text and rfc822 format available.

Message #17 received at 59197 <at> debbugs.gnu.org (full text, mbox):

From: 宋文武 <iyzsong <at> envs.net>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: 59197 <at> debbugs.gnu.org
Subject: Re: bug#59197: [PATCH 0/3] Support 'herd configuration SERVICE' to
 view config file
Date: Mon, 14 Nov 2022 10:16:02 +0800
Ludovic Courtès <ludo <at> gnu.org> writes:

> Hi!
>
> So far, to view the config file of sshd, elogind, etc., you'd have to do:
>
>   cat /proc/PID/cmdline | xargs -0
>
> or sometimes:
>
>   cat /proc/PID/environ | xargs -0
>
> and extract the config file name from there.
>
> With this change, you can do:
>
>   cat $(herd configuration elogind)
>
> or similar.  Simple but convenient.
>
> This patch series adds it to a few core services.  Adding it elsewhere
> is left as an exercise to the reader.  :-)

Look great to me, thank you!




Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Fri, 18 Nov 2022 14:53:02 GMT) Full text and rfc822 format available.

Notification sent to Ludovic Courtès <ludo <at> gnu.org>:
bug acknowledged by developer. (Fri, 18 Nov 2022 14:53:02 GMT) Full text and rfc822 format available.

Message #22 received at 59197-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 宋文武 <iyzsong <at> envs.net>
Cc: 59197-done <at> debbugs.gnu.org
Subject: Re: bug#59197: [PATCH 0/3] Support 'herd configuration SERVICE' to
 view config file
Date: Fri, 18 Nov 2022 15:52:14 +0100
Hi,

宋文武 <iyzsong <at> envs.net> skribis:

> Ludovic Courtès <ludo <at> gnu.org> writes:
>
>> Hi!
>>
>> So far, to view the config file of sshd, elogind, etc., you'd have to do:
>>
>>   cat /proc/PID/cmdline | xargs -0
>>
>> or sometimes:
>>
>>   cat /proc/PID/environ | xargs -0
>>
>> and extract the config file name from there.
>>
>> With this change, you can do:
>>
>>   cat $(herd configuration elogind)
>>
>> or similar.  Simple but convenient.
>>
>> This patch series adds it to a few core services.  Adding it elsewhere
>> is left as an exercise to the reader.  :-)
>
> Look great to me, thank you!

Thanks for taking a look!

I pushed these patches with two minor changes: added the ‘configuration’
action to dicod, and documented ‘shepherd-configuration-action’.

  8b56983999 home: services: redshift: Add 'configuration' action.
  8d9647d8a7 services: Add Shepherd 'configuration' action to various services.
  ebc7de6a1e services: shepherd: Define 'shepherd-configuration-action' helper.

Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 17 Dec 2022 12:24:13 GMT) Full text and rfc822 format available.

This bug report was last modified 2 years and 184 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.