[PATCH 0/3] Support 'herd configuration SERVICE' to view config file

  • Done
  • quality assurance status badge
Details
2 participants
  • 宋文武
  • Ludovic Courtès
Owner
unassigned
Submitted by
Ludovic Courtès
Severity
normal

Debbugs page

Ludovic Courtès wrote 2 years ago
(address . guix-patches@gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20221111181131.4171-1-ludo@gnu.org
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
Ludovic Courtès wrote 2 years ago
[PATCH 1/3] services: shepherd: Define 'shepherd-configuration-action' helper.
(address . 59197@debbugs.gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20221111181246.4217-1-ludo@gnu.org
* gnu/services/shepherd.scm (shepherd-configuration-action): New
procedure.
---
gnu/services/shepherd.scm | 12 ++++++++++++
1 file changed, 12 insertions(+)

Toggle diff (32 lines)
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
Ludovic Courtès wrote 2 years ago
[PATCH 2/3] services: Add Shepherd 'configuration' action to various services.
(address . 59197@debbugs.gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20221111181246.4217-2-ludo@gnu.org
* 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(-)

Toggle diff (234 lines)
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@gnu.org>
+;;; Copyright © 2014-2020, 2022 Ludovic Courtès <ludo@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@igalia.com>
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2017, 2019-2020, 2022 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 Sou Bunnbu <iyzsong@gmail.com>
;;; Copyright © 2018, 2019 Timothy Sample <samplet@ngyro.com>
;;; Copyright © 2019 Jan (janneke) Nieuwenhuizen <janneke@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
Ludovic Courtès wrote 2 years ago
[PATCH 3/3] home: services: redshift: Add 'configuration' action.
(address . 59197@debbugs.gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20221111181246.4217-3-ludo@gnu.org
* 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(-)

Toggle diff (30 lines)
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
宋文武 wrote 2 years ago
Re: bug#59197: [PATCH 0/3] Support 'herd configuration SERVICE' to view config file
(name . Ludovic Courtès)(address . ludo@gnu.org)(address . 59197@debbugs.gnu.org)
87a64ub7rx.fsf@envs.net
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (21 lines)
> 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!
Ludovic Courtès wrote 2 years ago
(name . 宋文武)(address . iyzsong@envs.net)(address . 59197-done@debbugs.gnu.org)
87zgco9uxt.fsf_-_@gnu.org
Hi,

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

Toggle quote (25 lines)
> Ludovic Courtès <ludo@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’.
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 59197@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 59197
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help