unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* bug#22039: 'guix system reconfigure' must start/restart/stop services
@ 2015-11-28 16:35 Ludovic Courtès
  2016-01-08 10:04 ` Ludovic Courtès
                   ` (3 more replies)
  0 siblings, 4 replies; 25+ messages in thread
From: Ludovic Courtès @ 2015-11-28 16:35 UTC (permalink / raw)
  To: 22039

Hello!

Currently ‘guix system reconfigure’ doesn’t try to dynamically update
the set of running services, which is a shame.

A simple strategy would be to have it:

  1. Stop and unregister services currently known to dmd that are
     missing in the new configuration.

  2. Load and start (if they have ‘auto-start?’) services that are in
     the new configuration and currently unknown to dmd.

  3. The rest is the most difficult part: dealing with services that
     already exist but that have changed (see below.)

One step towards this has been the fact that each service has its code
in a module of its own (commit fae685b), making it easy to have dmd load
it.

For #3, the difficulty is that we cannot do deco stop/load/start for
core services like udev or file-system-root because stopping these would
effectively halt the system.

However, we can safely restart services that are leaves of the dmd graph
(unless the user explicitly asks not to do it.)  Here’s what it would
mean on my system, which uses ‘%desktop-services’ and a few more:

--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> ,use(guix)
scheme@(guile-user)> ,use(gnu)
scheme@(guile-user)> ,use(gnu services dmd)
scheme@(guile-user)> (define os (load "/home/ludo/src/configuration/pluto-configuration.scm"))
scheme@(guile-user)> ,use(gnu services)
scheme@(guile-user)> (define dmds (fold-services (operating-system-services os)
						 #:target-type dmd-root-service-type))
scheme@(guile-user)> ,use(gnu services)
scheme@(guile-user)> (length (service-parameters dmds))
$2 = 49
scheme@(guile-user)> (define back-edges (dmd-service-back-edges (service-parameters dmds)))
scheme@(guile-user)> ,use(srfi srfi-1)
scheme@(guile-user)> (map dmd-service-provision
			  (filter (lambda (s)
				    (null? (back-edges s)))
				(service-parameters dmds)))
$3 = ((swap-/dev/sda4) (nscd) (guix-daemon) (console-font-tty6) (console-font-tty5) (console-font-tty4) (console-font-tty3) (console-font-tty2) (console-font-tty1) (ntpd) (elogind) (upower-daemon) (avahi-daemon) (xorg-server) (tor) (ssh-daemon) (bitlbee))
scheme@(guile-user)> (length $3)
$4 = 17
--8<---------------cut here---------------end--------------->8---

17 out of 49 services could be restarted.

As a first step, we could ignore the other services.

As a second step, we could maybe have an ‘upgrade’ action that would
mutate their <service> instance in place, but without actually
restarting them, such that the changes would only take effect on the
next restart.

Roughly, we’d be doing, say:

  deco upgrade udev /gnu/store/…-dmd-udev.scm

where …-dmd-udev.scm is the service file that contains:

  (make <service> #:provides '(udev) …)

The ‘upgrade’ action would ‘set!’ all the fields of the old service
instance to those of the new instance, such that they are ‘equal?’ (but
not ‘eq?’.)  The caveat is that this is not atomic.

Thoughts?

The prerequisite to all this work is to make the dmd RPCs
machine-processable, which is not too much work.

Thanks,
Ludo’.

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

* bug#22039: 'guix system reconfigure' must start/restart/stop services
  2015-11-28 16:35 bug#22039: 'guix system reconfigure' must start/restart/stop services Ludovic Courtès
@ 2016-01-08 10:04 ` Ludovic Courtès
  2016-02-03 21:32 ` Ludovic Courtès
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 25+ messages in thread
From: Ludovic Courtès @ 2016-01-08 10:04 UTC (permalink / raw)
  To: 22039

ludo@gnu.org (Ludovic Courtès) skribis:

> The prerequisite to all this work is to make the dmd RPCs
> machine-processable, which is not too much work.

Commit 841b009 in dmd does one step in that direction: it’s now possible
to get the status of services as an sexp.

Ludo’.

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

* bug#22039: 'guix system reconfigure' must start/restart/stop services
  2015-11-28 16:35 bug#22039: 'guix system reconfigure' must start/restart/stop services Ludovic Courtès
  2016-01-08 10:04 ` Ludovic Courtès
@ 2016-02-03 21:32 ` Ludovic Courtès
  2016-02-03 21:34   ` Thompson, David
  2018-01-16 11:17 ` bug#22039: ‘guix system reconfigure’ does not always load new services Ludovic Courtès
  2018-08-26 12:15 ` bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services Carlo Zancanaro
  3 siblings, 1 reply; 25+ messages in thread
From: Ludovic Courtès @ 2016-02-03 21:32 UTC (permalink / raw)
  To: 22039

ludo@gnu.org (Ludovic Courtès) skribis:

> Currently ‘guix system reconfigure’ doesn’t try to dynamically update
> the set of running services, which is a shame.
>
> A simple strategy would be to have it:
>
>   1. Stop and unregister services currently known to dmd that are
>      missing in the new configuration.
>
>   2. Load and start (if they have ‘auto-start?’) services that are in
>      the new configuration and currently unknown to dmd.
>
>   3. The rest is the most difficult part: dealing with services that
>      already exist but that have changed (see below.)

Commit 240b57f implements #1 and #2.

Ludo’.

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

* bug#22039: 'guix system reconfigure' must start/restart/stop services
  2016-02-03 21:32 ` Ludovic Courtès
@ 2016-02-03 21:34   ` Thompson, David
  0 siblings, 0 replies; 25+ messages in thread
From: Thompson, David @ 2016-02-03 21:34 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 22039

On Wed, Feb 3, 2016 at 4:32 PM, Ludovic Courtès <ludo@gnu.org> wrote:
> ludo@gnu.org (Ludovic Courtès) skribis:
>
>> Currently ‘guix system reconfigure’ doesn’t try to dynamically update
>> the set of running services, which is a shame.
>>
>> A simple strategy would be to have it:
>>
>>   1. Stop and unregister services currently known to dmd that are
>>      missing in the new configuration.
>>
>>   2. Load and start (if they have ‘auto-start?’) services that are in
>>      the new configuration and currently unknown to dmd.
>>
>>   3. The rest is the most difficult part: dealing with services that
>>      already exist but that have changed (see below.)
>
> Commit 240b57f implements #1 and #2.

Awesome!  This is very good progress.

- Dave

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

* bug#22039: ‘guix system reconfigure’ does not always load new services
  2015-11-28 16:35 bug#22039: 'guix system reconfigure' must start/restart/stop services Ludovic Courtès
  2016-01-08 10:04 ` Ludovic Courtès
  2016-02-03 21:32 ` Ludovic Courtès
@ 2018-01-16 11:17 ` Ludovic Courtès
  2018-08-26 12:15 ` bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services Carlo Zancanaro
  3 siblings, 0 replies; 25+ messages in thread
From: Ludovic Courtès @ 2018-01-16 11:17 UTC (permalink / raw)
  To: 22039

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

Forwarded from
<https://lists.gnu.org/archive/html/guix-devel/2018-01/msg00187.html>.


[-- Attachment #2: Type: message/rfc822, Size: 6740 bytes --]

From: ludo@gnu.org (Ludovic Courtès)
To: guix-devel@gnu.org
Subject: ‘guix system reconfigure’ does not always load new services
Date: Sat, 13 Jan 2018 22:05:07 +0100
Message-ID: <87inc5mpvg.fsf_-_@gnu.org>

Hello,

ng0 <ng0@n0.is> skribis:

> I noticed a `herd restart guix-daemon` after reconfigure wasn't
> enough, I had to reboot to make use of the new guix. Could this
> be improved?

Yes, that’s a problem (Andreas also reported it to me a couple of days
ago.)

The problem is that ‘guix system reconfigure’ reloads and restarts
services that were not currently running.  For other services, such as
guix-daemon, it does nothing—it does not even load the new version.

This is because the Shepherd currently doesn’t offer a way to “hot-swap”
services without stopping them.  Instead it first unloads the service,
loads the new one, and (optionally) starts it.  See (gnu services herd).

So what we would need is to somehow overwrite the current service.  The
problem is that it may be incorrect, for instance because we’d like to
use the ‘stop’ action of the previous service when we eventually stop
it, rather than the new ‘stop’ action.  So perhaps we should register
the new service so that it replaces the old one only when the old one is
stopped.

Thoughts?

Ludo’.


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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2015-11-28 16:35 bug#22039: 'guix system reconfigure' must start/restart/stop services Ludovic Courtès
                   ` (2 preceding siblings ...)
  2018-01-16 11:17 ` bug#22039: ‘guix system reconfigure’ does not always load new services Ludovic Courtès
@ 2018-08-26 12:15 ` Carlo Zancanaro
  2018-09-01 10:49   ` Ludovic Courtès
  3 siblings, 1 reply; 25+ messages in thread
From: Carlo Zancanaro @ 2018-08-26 12:15 UTC (permalink / raw)
  To: 22039


[-- Attachment #1.1: Type: text/plain, Size: 775 bytes --]

When the next release of the Shepherd is made (including commit 
9ec5c0000e9a45441417a6ee4138cdcbf1b1f2b2) we should have the 
capability to resolve this ticket.

Attached is my proposed patch from the Guix side. I have tested it 
on my machine by grafting the Shepherd with the appropriate patch 
and it seems to work as expected.

I tested it by changing the substitute-urls in my guix-daemon 
configuration. The output of `ps aux | grep guix-daemon` after 
`guix system reconfigure` showed the substitute-urls were 
unchanged. After `herd restart guix-daemon` the updated 
substitute-urls appeared in `ps aux | grep guix-daemon`. I did not 
need to reboot my system.

One possible improvement would be to print out the services that 
need to be restarted to be upgraded.


[-- Attachment #1.2: 0001-gnu-services-Load-all-services-on-reconfigure-not-ju.patch --]
[-- Type: text/x-patch, Size: 2391 bytes --]

From 162bd298563201ebf6eda87d46ae1b64671397da Mon Sep 17 00:00:00 2001
From: Carlo Zancanaro <carlo@zancanaro.id.au>
Date: Sun, 26 Aug 2018 21:54:14 +1000
Subject: [PATCH] gnu: services: Load all services on reconfigure, not just
 stopped ones

* gnu/services/shepherd.scm (shepherd-service-upgrade): Remove checks for
running services.
---
 gnu/services/shepherd.scm | 25 +++++--------------------
 1 file changed, 5 insertions(+), 20 deletions(-)

diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm
index 4cd224984..efeb82c86 100644
--- a/gnu/services/shepherd.scm
+++ b/gnu/services/shepherd.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2018 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -338,20 +339,6 @@ needs to be loaded."
     (shepherd-service-lookup-procedure target
                                        shepherd-service-provision))
 
-  (define lookup-live
-    (shepherd-service-lookup-procedure live
-                                       live-service-provision))
-
-  (define (running? service)
-    (and=> (lookup-live (shepherd-service-canonical-name service))
-           live-service-running))
-
-  (define (stopped service)
-    (match (lookup-live (shepherd-service-canonical-name service))
-      (#f #f)
-      (service (and (not (live-service-running service))
-                    service))))
-
   (define live-service-dependents
     (shepherd-service-back-edges live
                                  #:provision live-service-provision
@@ -363,14 +350,12 @@ needs to be loaded."
       (_  #f)))
 
   (define to-load
-    ;; Only load services that are either new or currently stopped.
-    (remove running? target))
+    ;; Load all of the new services.
+    target)
 
   (define to-unload
-    ;; Unload services that are (1) no longer required, or (2) are in TO-LOAD.
-    (remove essential?
-            (append (filter obsolete? live)
-                    (filter-map stopped to-load))))
+    ;; Unload services that are no longer required.
+    (remove essential? (filter obsolete? live)))
 
   (values to-unload to-load))
 
-- 
2.18.0


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-08-26 12:15 ` bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services Carlo Zancanaro
@ 2018-09-01 10:49   ` Ludovic Courtès
  2018-09-01 12:15     ` Carlo Zancanaro
  0 siblings, 1 reply; 25+ messages in thread
From: Ludovic Courtès @ 2018-09-01 10:49 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: 22039

Hi Carlo,

Carlo Zancanaro <carlo@zancanaro.id.au> skribis:

> When the next release of the Shepherd is made (including commit
> 9ec5c0000e9a45441417a6ee4138cdcbf1b1f2b2) we should have the
> capability to resolve this ticket.

Woohoo!

I’d like to make sure we understand the story with ‘EINTR-safe’, but
after that I’m happy to push a release.

> Attached is my proposed patch from the Guix side. I have tested it on
> my machine by grafting the Shepherd with the appropriate patch and it
> seems to work as expected.
>
> I tested it by changing the substitute-urls in my guix-daemon
> configuration. The output of `ps aux | grep guix-daemon` after `guix
> system reconfigure` showed the substitute-urls were unchanged. After
> `herd restart guix-daemon` the updated substitute-urls appeared in `ps
> aux | grep guix-daemon`. I did not need to reboot my system.

Perfect.

> One possible improvement would be to print out the services that need
> to be restarted to be upgraded.

Yes, that’d be nice.

> From 162bd298563201ebf6eda87d46ae1b64671397da Mon Sep 17 00:00:00 2001
> From: Carlo Zancanaro <carlo@zancanaro.id.au>
> Date: Sun, 26 Aug 2018 21:54:14 +1000
> Subject: [PATCH] gnu: services: Load all services on reconfigure, not just
>  stopped ones
>
> * gnu/services/shepherd.scm (shepherd-service-upgrade): Remove checks for
> running services.

Could you adjust the manual, where it currently says “if a service is
currently running, it does not attempt to upgrade it”?

Other than that LGTM!

Ludo’.

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-01 10:49   ` Ludovic Courtès
@ 2018-09-01 12:15     ` Carlo Zancanaro
  2018-09-01 12:33       ` Carlo Zancanaro
  2018-09-01 17:12       ` Ludovic Courtès
  0 siblings, 2 replies; 25+ messages in thread
From: Carlo Zancanaro @ 2018-09-01 12:15 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 22039

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

Hey Ludo’,

On Sat, Sep 01 2018, Ludovic Courtès wrote:
> I’d like to make sure we understand the story with ‘EINTR-safe’, 
> but after that I’m happy to push a release.

Do you have any thoughts about why it could be failing, or things 
I could investigate? I don't know where to start.

>> One possible improvement would be to print out the services 
>> that need to be restarted to be upgraded.
>
> Yes, that’d be nice.

I have done this, but now it seems a bit overwhelming how many 
services would need to be manually restarted. My modified code 
writes a message like this:

To complete the upgrade, restart the following services:
    file-systems
    user-file-systems
    file-system-/boot/efi
    file-system-/dev/pts
    file-system-/dev/shm
    file-system-/gnu/store
    file-system-/run/systemd
    file-system-/run/user
    file-system-/sys/fs/cgroup/elogind
    file-system-/sys/fs/cgroup
    file-system-/sys/fs/cgroup/cpuset
    file-system-/sys/fs/cgroup/cpu
    file-system-/sys/fs/cgroup/cpuacct
    file-system-/sys/fs/cgroup/memory
    file-system-/sys/fs/cgroup/devices
    file-system-/sys/fs/cgroup/freezer
    file-system-/sys/fs/cgroup/blkio
    file-system-/sys/fs/cgroup/perf_event
    root-file-system
    user-processes
    host-name
    udev
    nscd
    guix-daemon
    urandom-seed
    syslogd
    loopback
    term-tty6
    term-tty5
    term-tty4
    term-tty3
    term-tty2
    term-tty1
    console-font-tty1
    console-font-tty2
    console-font-tty3
    console-font-tty4
    console-font-tty5
    console-font-tty6
    virtual-terminal
    ntpd
    dbus-system
    elogind
    upower-daemon
    avahi-daemon
    wpa-supplicant
    networking
    xorg-server
    cups

The same list is printed every time on my system, because the 
diffing is only on the level of the canonical-name. Most of these 
services are being "replaced" by services that are exactly the 
same, so they don't really need to be restarted. I don't really 
know what to do about this, Even if it were fixed, on an actual 
upgrade I assume many of these services would be different, and 
thus would be printed legitimately.

I'm also confused why some of these things are services (like 
host-name).

I'll send through an updated patch once I've cleaned it up a bit, 
but I'm not as positive about it as I was initially.

Carlo

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-01 12:15     ` Carlo Zancanaro
@ 2018-09-01 12:33       ` Carlo Zancanaro
  2018-09-01 17:12       ` Ludovic Courtès
  1 sibling, 0 replies; 25+ messages in thread
From: Carlo Zancanaro @ 2018-09-01 12:33 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 22039


[-- Attachment #1.1: Type: text/plain, Size: 149 bytes --]

On Sat, Sep 01 2018, Carlo Zancanaro wrote:
> I'll send through an updated patch once I've cleaned it up a 
> bit, [ ... ]

Updated patch attached.


[-- Attachment #1.2: 0001-gnu-services-Load-all-services-on-reconfigure-not-ju.patch --]
[-- Type: text/x-patch, Size: 7125 bytes --]

From 47647b767930d16ab5a3b855993daf6ddf98f230 Mon Sep 17 00:00:00 2001
From: Carlo Zancanaro <carlo@zancanaro.id.au>
Date: Sun, 26 Aug 2018 21:54:14 +1000
Subject: [PATCH] gnu: services: Load all services on reconfigure, not just
 stopped ones

* doc/guix.texi (Invoking guix system): Document the new behaviour.
* gnu/services/shepherd.scm (shepherd-service-upgrade): Return a list of
  services that need to be restarted to complete their upgrade.
* guix/scripts/system.scm (call-with-service-upgrade-info): Rename an internal
  variable to reflect the change to shepherd-service-upgrade.
  (upgrade-shepherd-services): Print the names of services that need to be
  restarted in order to be upgraded.
---
 doc/guix.texi             |  8 ++++----
 gnu/services/shepherd.scm | 23 ++++++++---------------
 guix/scripts/system.scm   | 20 ++++++++++++--------
 3 files changed, 24 insertions(+), 27 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index d2d278df4..421762122 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -33,7 +33,7 @@ Copyright @copyright{} 2016 Alex ter Weele@*
 Copyright @copyright{} 2017, 2018 Clément Lassieur@*
 Copyright @copyright{} 2017 Mathieu Othacehe@*
 Copyright @copyright{} 2017 Federico Beffa@*
-Copyright @copyright{} 2017 Carlo Zancanaro@*
+Copyright @copyright{} 2017, 2018 Carlo Zancanaro@*
 Copyright @copyright{} 2017 Thomas Danckaert@*
 Copyright @copyright{} 2017 humanitiesNerd@*
 Copyright @copyright{} 2017 Christopher Allan Webber@*
@@ -21143,9 +21143,9 @@ systems already running GuixSD.}.
 This effects all the configuration specified in @var{file}: user
 accounts, system services, global package list, setuid programs, etc.
 The command starts system services specified in @var{file} that are not
-currently running; if a service is currently running, it does not
-attempt to upgrade it since this would not be possible without stopping it
-first.
+currently running; if a service is currently running this command will
+arrange for it to be upgraded the next time it is stopped (eg. by
+@code{herd stop X} or @code{herd restart X}).
 
 This command creates a new generation whose number is one greater than
 the current generation (as reported by @command{guix system
diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm
index 4cd224984..4c7e72049 100644
--- a/gnu/services/shepherd.scm
+++ b/gnu/services/shepherd.scm
@@ -1,6 +1,7 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
+;;; Copyright © 2018 Carlo Zancanaro <carlo@zancanaro.id.au>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -329,7 +330,7 @@ symbols provided/required by a service."
 (define (shepherd-service-upgrade live target)
   "Return two values: the subset of LIVE (a list of <live-service>) that needs
 to be unloaded, and the subset of TARGET (a list of <shepherd-service>) that
-needs to be loaded."
+need to be restarted to complete their upgrade."
   (define (essential? service)
     (memq (first (live-service-provision service))
           '(root shepherd)))
@@ -346,12 +347,6 @@ needs to be loaded."
     (and=> (lookup-live (shepherd-service-canonical-name service))
            live-service-running))
 
-  (define (stopped service)
-    (match (lookup-live (shepherd-service-canonical-name service))
-      (#f #f)
-      (service (and (not (live-service-running service))
-                    service))))
-
   (define live-service-dependents
     (shepherd-service-back-edges live
                                  #:provision live-service-provision
@@ -362,16 +357,14 @@ needs to be loaded."
       (#f (every obsolete? (live-service-dependents service)))
       (_  #f)))
 
-  (define to-load
-    ;; Only load services that are either new or currently stopped.
-    (remove running? target))
+  (define to-restart
+    ;; Restart services that are currently running.
+    (filter running? target))
 
   (define to-unload
-    ;; Unload services that are (1) no longer required, or (2) are in TO-LOAD.
-    (remove essential?
-            (append (filter obsolete? live)
-                    (filter-map stopped to-load))))
+    ;; Unload services that are no longer required.
+    (remove essential? (filter obsolete? live)))
 
-  (values to-unload to-load))
+  (values to-unload to-restart))
 
 ;;; shepherd.scm ends here
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 69bd05b51..41a348a5b 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -310,9 +310,9 @@ names of services to load (upgrade), and the list of names of services to
 unload."
   (match (current-services)
     ((services ...)
-     (let-values (((to-unload to-load)
+     (let-values (((to-unload to-restart)
                    (shepherd-service-upgrade services new-services)))
-       (mproc to-load
+       (mproc to-restart
               (map (compose first live-service-provision)
                    to-unload))))
     (#f
@@ -335,21 +335,25 @@ bring the system down."
   ;; Arrange to simply emit a warning if the service upgrade fails.
   (with-shepherd-error-handling
    (call-with-service-upgrade-info new-services
-     (lambda (to-load to-unload)
+     (lambda (to-restart to-unload)
         (for-each (lambda (unload)
                     (info (G_ "unloading service '~a'...~%") unload)
                     (unload-service unload))
                   to-unload)
 
         (with-monad %store-monad
-          (munless (null? to-load)
-            (let ((to-load-names  (map shepherd-service-canonical-name to-load))
-                  (to-start       (filter shepherd-service-auto-start? to-load)))
-              (info (G_ "loading new services:~{ ~a~}...~%") to-load-names)
+          (munless (null? new-services)
+            (let ((new-service-names  (map shepherd-service-canonical-name new-services))
+                  (to-restart-names   (map shepherd-service-canonical-name to-restart))
+                  (to-start           (filter shepherd-service-auto-start? new-services)))
+              (info (G_ "loading new services:~{ ~a~}...~%") new-service-names)
+              (unless (null? to-restart-names)
+                (format #t (G_ "To complete the upgrade, restart the following services:~%"))
+                (for-each (cut format #t "~4t~a~%" <>) to-restart-names))
               (mlet %store-monad ((files (mapm %store-monad
                                                (compose lower-object
                                                         shepherd-service-file)
-                                               to-load)))
+                                               new-services)))
                 ;; Here we assume that FILES are exactly those that were computed
                 ;; as part of the derivation that built OS, which is normally the
                 ;; case.
-- 
2.18.0


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-01 12:15     ` Carlo Zancanaro
  2018-09-01 12:33       ` Carlo Zancanaro
@ 2018-09-01 17:12       ` Ludovic Courtès
  2018-09-02  3:43         ` Carlo Zancanaro
  1 sibling, 1 reply; 25+ messages in thread
From: Ludovic Courtès @ 2018-09-01 17:12 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: 22039

Heya,

Carlo Zancanaro <carlo@zancanaro.id.au> skribis:

> On Sat, Sep 01 2018, Ludovic Courtès wrote:
>> I’d like to make sure we understand the story with ‘EINTR-safe’, but
>> after that I’m happy to push a release.
>
> Do you have any thoughts about why it could be failing, or things I
> could investigate? I don't know where to start.

First, could you check (in a VM) whether the boot failure is
reproducible when that patch that removes ‘EINTR-safe’ is applied?

If it’s 100% reproducible, could you share the VM’s output?

I don’t know what the problem might be but hopefully that’ll give us a
starting point.

> I have done this, but now it seems a bit overwhelming how many
> services would need to be manually restarted. My modified code writes
> a message like this:

[...]

> The same list is printed every time on my system, because the diffing
> is only on the level of the canonical-name. Most of these services are
> being "replaced" by services that are exactly the same, so they don't
> really need to be restarted. I don't really know what to do about
> this, Even if it were fixed, on an actual upgrade I assume many of
> these services would be different, and thus would be printed
> legitimately.

Indeed.  In addition, some low-level services such as file system mounts
cannot be restarted without rebooting, so it’s not useful to mention
them.  Perhaps we should simply print (1) the list of services that were
restarted, and (2) a message saying that users should explicitly run
“herd restart SERVICE” to upgrade other services.

WDYT?

> I'm also confused why some of these things are services (like
> host-name).

‘host-name’ could (should?) be an activation snippet.

Thank you!

Ludo’.

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-01 17:12       ` Ludovic Courtès
@ 2018-09-02  3:43         ` Carlo Zancanaro
  2018-09-02 20:39           ` Ludovic Courtès
  2018-09-19 15:47           ` Ludovic Courtès
  0 siblings, 2 replies; 25+ messages in thread
From: Carlo Zancanaro @ 2018-09-02  3:43 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 22039


[-- Attachment #1.1: Type: text/plain, Size: 340 bytes --]


On Sun, Sep 02 2018, Ludovic Courtès wrote:
> First, could you check (in a VM) whether the boot failure is 
> reproducible when that patch that removes ‘EINTR-safe’ is 
> applied?

As far as I can tell it's completely reproducible.

> If it’s 100% reproducible, could you share the VM’s output?

Sure. It's attached.


[-- Attachment #1.2: vm-output --]
[-- Type: application/octet-stream, Size: 42762 bytes --]

[-- Attachment #1.3: Type: text/plain, Size: 802 bytes --]


> Indeed.  In addition, some low-level services such as file 
> system mounts cannot be restarted without rebooting, so it’s not 
> useful to mention them.  Perhaps we should simply print (1) the 
> list of services that were restarted, and (2) a message saying 
> that users should explicitly run “herd restart SERVICE” to 
> upgrade other services.
>
> WDYT?

If there are services that must never be restarted, then maybe we 
don't want to indiscriminately print out a message to restart 
everything. We need some way to mark services that must not be 
restarted. If that's the case, then we might as well just 
automatically restart the services that we can rather than 
printing a message saying to do so. What do we gain by adding an 
extra step to that process?

Carlo

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-02  3:43         ` Carlo Zancanaro
@ 2018-09-02 20:39           ` Ludovic Courtès
  2018-09-19 15:47           ` Ludovic Courtès
  1 sibling, 0 replies; 25+ messages in thread
From: Ludovic Courtès @ 2018-09-02 20:39 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: 22039

Hi Carlo,

Carlo Zancanaro <carlo@zancanaro.id.au> skribis:

> [   18.924085] shepherd[1]: Service root-file-system has been started.
> [   18.932361] shepherd[1]: 
> [   18.939972] shepherd[1]: Service user-file-systems has been started.
> [   18.947889] shepherd[1]: 
> [   18.989611] shepherd[1]: waiting for udevd...
> [   19.001396] shepherd[1]: 
> [   19.229174] udevd[267]: starting version 3.2.5
> failed to start service 'file-systems'
> could not create '/dev/autofs': File exists
> could not create '/dev/fuse': File exists
> could not create '/dev/cuse': File exists
> [   19.525763] udevd[267]: starting eudev-3.2.5

[...]

> [   19.553794] udevd[267]: no sender credentials received, message ignored
> failed to start service 'file-system-/dev/pts'

[...]

> [   19.633995] udevd[267]: no sender credentials received, message ignored
> failed to start service 'file-system-/dev/shm'

[...]

> [   19.741025] udevd[267]: no sender credentials received, message ignored
> failed to start service 'user-processes'
> [   19.773968] shepherd[1]: Service host-name has been started.
> [   19.784495] udevd[268]: starting version 3.2.5
> [   19.797674] shepherd[1]: 
> could not create '/dev/autofs': File exists
> could not create '/dev/fuse': File exists
> [   19.846310] udevd[269]: starting version 3.2.5

It looks as if udev failed to start initially, hence the subsequent
“failed to start 'file-system-*'” messages, but then we appear to have
several competing udevd processes, as if (exec-command (list udevd)) had
been executed multiple times.  Hmm not sure what’s going on…

Ludo’.

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-02  3:43         ` Carlo Zancanaro
  2018-09-02 20:39           ` Ludovic Courtès
@ 2018-09-19 15:47           ` Ludovic Courtès
  2018-09-19 20:56             ` Carlo Zancanaro
  1 sibling, 1 reply; 25+ messages in thread
From: Ludovic Courtès @ 2018-09-19 15:47 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: 22039

Hi Carlo,

Carlo Zancanaro <carlo@zancanaro.id.au> skribis:

> On Sun, Sep 02 2018, Ludovic Courtès wrote:
>> First, could you check (in a VM) whether the boot failure is
>> reproducible when that patch that removes ‘EINTR-safe’ is applied?
>
> As far as I can tell it's completely reproducible.

Commit c4ba8c79db0aa4ba3517acc82ebafe16105fbb97 reinstates the commit
and removes the leftover #:replace, which was responsible for the
problem: in the context of the ‘start’ method of udev, ‘system*’ was
unbound, to ‘start’ would throw an exception and shepherd would call it
again (thinking udev had failed to start), indefinitely.

If there’s nothing left to add to Shepherd, we can release 0.5.0 within
a few days and then commit the Guix side of this change.

WDYT?

Thanks,
Ludo’.

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-19 15:47           ` Ludovic Courtès
@ 2018-09-19 20:56             ` Carlo Zancanaro
  2018-09-20  9:47               ` Ludovic Courtès
  0 siblings, 1 reply; 25+ messages in thread
From: Carlo Zancanaro @ 2018-09-19 20:56 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 22039

Hey Ludo’,

On Thu, Sep 20 2018, Ludovic Courtès wrote:
> Commit c4ba8c79db0aa4ba3517acc82ebafe16105fbb97 reinstates the 
> commit and removes the leftover #:replace, which was responsible 
> for the problem: ...

That's great! I didn't even know about the #:replace option, so 
I'm glad you were able to find it.

> If there’s nothing left to add to Shepherd, we can release 0.5.0 
> within a few days and then commit the Guix side of this change.

This seems like the sort of thing that shouldn't have been this 
tricky. Is the exception printed somewhere? If not, then I think 
we should print the exception, or at least some information, when 
a service fails to load.

Carlo

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-19 20:56             ` Carlo Zancanaro
@ 2018-09-20  9:47               ` Ludovic Courtès
  2018-09-20 10:24                 ` Carlo Zancanaro
  0 siblings, 1 reply; 25+ messages in thread
From: Ludovic Courtès @ 2018-09-20  9:47 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: 22039

Hi,

Carlo Zancanaro <carlo@zancanaro.id.au> skribis:

> On Thu, Sep 20 2018, Ludovic Courtès wrote:
>> Commit c4ba8c79db0aa4ba3517acc82ebafe16105fbb97 reinstates the
>> commit and removes the leftover #:replace, which was responsible for
>> the problem: ...
>
> That's great! I didn't even know about the #:replace option, so I'm
> glad you were able to find it.
>
>> If there’s nothing left to add to Shepherd, we can release 0.5.0
>> within a few days and then commit the Guix side of this change.
>
> This seems like the sort of thing that shouldn't have been this
> tricky. Is the exception printed somewhere? If not, then I think we
> should print the exception, or at least some information, when a
> service fails to load.

I agree.  Note that ‘herd start foo’ prints at least a one-line message
showing the exception when that happens.  The problem here is that
failure happens when ‘start’ is called from the shepherd config file.
At that point there’s no client connected and syslogd either around
either, so presumably messages go to /dev/kmsg and/or the console.

I wouldn’t consider it a blocker for 0.5.0 though.  WDYT?

Thanks,
Ludo’.

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-20  9:47               ` Ludovic Courtès
@ 2018-09-20 10:24                 ` Carlo Zancanaro
  2018-09-20 11:08                   ` Ludovic Courtès
  0 siblings, 1 reply; 25+ messages in thread
From: Carlo Zancanaro @ 2018-09-20 10:24 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 22039

> [...] so presumably messages go to /dev/kmsg and/or the console.

I don't remember seeing anything about the exception in any of the 
output that I looked at. I'm a bit confused about where different 
bits of output go, so I'll take a look at how output is handled in 
a few weeks, when the rest of life settles down a bit.

> I wouldn’t consider it a blocker for 0.5.0 though.  WDYT?

Yeah, I agree. We should try to improve it, but as long as we 
haven't made things worse (which we haven't) then it shouldn't 
block a release.

We still need to work out what we want to do on the Guix side once 
the Shepherd is released. Do we want to restart services that we 
can, or print a message telling users how to do so? Maybe 
individual services should be able to specify their preference?

Carlo

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-20 10:24                 ` Carlo Zancanaro
@ 2018-09-20 11:08                   ` Ludovic Courtès
  2018-09-20 11:50                     ` Carlo Zancanaro
  0 siblings, 1 reply; 25+ messages in thread
From: Ludovic Courtès @ 2018-09-20 11:08 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: 22039

Carlo Zancanaro <carlo@zancanaro.id.au> skribis:

> We still need to work out what we want to do on the Guix side once the
> Shepherd is released. Do we want to restart services that we can, or
> print a message telling users how to do so? Maybe individual services
> should be able to specify their preference?

I would reload and restart services currently stopped (what ‘guix system
reconfigure’ currently does), and replace all the other services.  This
is what the patch you sent at <https://issues.guix.info/issue/22039#24>
does.

AIUI the only remaining issue is whether/how to print hints about
services that need to be manually restarted.  In
<https://issues.guix.info/issue/22039#36> I wrote:

> Perhaps we should simply print (1) the list of services that were
> restarted, and (2) a message saying that users should explicitly run
> “herd restart SERVICE” to upgrade other services.

To which you replied:

> If there are services that must never be restarted, then maybe we 
> don't want to indiscriminately print out a message to restart 
> everything. We need some way to mark services that must not be 
> restarted. If that's the case, then we might as well just 
> automatically restart the services that we can rather than 
> printing a message saying to do so. What do we gain by adding an 
> extra step to that process?

From the POV of the Shepherd, services carry no semantics.  The Shepherd
cannot guess that restarting ‘udev’ or ‘file-system-xyz’ is impractical
(try it :-)).  Leaf services like ‘ssh-daemon’ can generally be
restarted, but whether or not now is a good time to do it is something
only the user can decide.  That’s why the only services which are safe
to restart right away are those currently stopped (and those that can be
hot-swapped like nginx.)

Thus I think it’s reasonable to print a message along the lines of:

  The following services were upgraded: …
  Please run “herd restart SERVICE” to stop, upgrade, and restart
  services that were not automatically upgraded.

WDYT?

Thanks,
Ludo’.

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-20 11:08                   ` Ludovic Courtès
@ 2018-09-20 11:50                     ` Carlo Zancanaro
  2018-09-21 11:58                       ` Ludovic Courtès
  0 siblings, 1 reply; 25+ messages in thread
From: Carlo Zancanaro @ 2018-09-20 11:50 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 22039

Hey Ludo’,

> From the POV of the Shepherd, services carry no semantics.

In Guix we have as much information as possible about the 
services. We should be know which services should be upgraded 
automatically, which ones we should prompt the user to upgrade, 
and which ones are never safe to upgrade. Maybe we could add a 
"restart-strategy" to the shepherd-service object?

> Thus I think it’s reasonable to print a message along the lines 
> of:
>
>   The following services were upgraded: …
>   Please run “herd restart SERVICE” to stop, upgrade, and 
>   restart services that were not automatically upgraded.
>
> WDYT?

The main reasons I'm not super happy with this are that it's not 
discoverable (which is bad for new users), and it requires 
interaction (so cannot be an unattended upgrade). In particular 
for discoverability, some of our services don't take advantage of 
the Shepherd's ability to have multiple "provision" values. For 
instance, I just have to know that to restart wicd I have to run 
"herd restart networking".

Maybe this should be a separate ticket. Replacing the services and 
printing a generic message will still be an improvement on what 
Guix currently does, and I don't want to hold that up just because 
I think we can do better.

Carlo

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-20 11:50                     ` Carlo Zancanaro
@ 2018-09-21 11:58                       ` Ludovic Courtès
  2018-09-23  8:26                         ` Efraim Flashner
  2018-09-23 23:06                         ` Carlo Zancanaro
  0 siblings, 2 replies; 25+ messages in thread
From: Ludovic Courtès @ 2018-09-21 11:58 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: 22039

Hello,

Carlo Zancanaro <carlo@zancanaro.id.au> skribis:

>> From the POV of the Shepherd, services carry no semantics.
>
> In Guix we have as much information as possible about the services. We
> should be know which services should be upgraded automatically, which
> ones we should prompt the user to upgrade, and which ones are never
> safe to upgrade. Maybe we could add a "restart-strategy" to the
> shepherd-service object?

What would you put there?  Do you have concrete examples?

Note that FHS distros don’t do better: either the service is
hot-replaceable (nginx; I don’t know of any other) or can at least
reload its config (sshd, etc.), and then it’s dynamically upgraded, or
it’ll be upgraded next time you restart it.

That’s because fundamentally only the user can tell whether now is a
good time to restart, say, sshd.

In Debian, “apt-get dist-upgrade” opens a dialog box asking the user
whether services can be restarted right away, IIRC.

>> Thus I think it’s reasonable to print a message along the lines of:
>>
>>   The following services were upgraded: …
>>   Please run “herd restart SERVICE” to stop, upgrade, and   restart
>> services that were not automatically upgraded.
>>
>> WDYT?
>
> The main reasons I'm not super happy with this are that it's not
> discoverable (which is bad for new users), and it requires interaction
> (so cannot be an unattended upgrade).

I agree, but I don’t think full unattended upgrades exist out there.
I’m not saying this is good, but rather that this is hard and beyond
the scope of this patch.

> In particular for discoverability, some of our services don't take
> advantage of the Shepherd's ability to have multiple "provision"
> values. For instance, I just have to know that to restart wicd I have
> to run "herd restart networking".

There’s ‘guix system search’ that provides this kind of info (see
<https://issues.guix.info/issue/29707>), but I agree we could do better.

> Maybe this should be a separate ticket. Replacing the services and
> printing a generic message will still be an improvement on what Guix
> currently does, and I don't want to hold that up just because I think
> we can do better.

Yes, I think this should be a separate ticket.  We can go with your
patch and a message along the lines of what we discussed above, and then
work on the improvements you mentioned, one at a time.  That way we’ll
have the warm feeling of having achieved something, even if there’s more
to come.  :-)

Thank you!

Ludo’.

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-21 11:58                       ` Ludovic Courtès
@ 2018-09-23  8:26                         ` Efraim Flashner
  2018-09-23 19:53                           ` Ludovic Courtès
  2018-09-23 23:06                         ` Carlo Zancanaro
  1 sibling, 1 reply; 25+ messages in thread
From: Efraim Flashner @ 2018-09-23  8:26 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 22039

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

On Fri, Sep 21, 2018 at 01:58:03PM +0200, Ludovic Courtès wrote:
> Hello,
> 
> Carlo Zancanaro <carlo@zancanaro.id.au> skribis:
> 
> >> From the POV of the Shepherd, services carry no semantics.
> >
> > In Guix we have as much information as possible about the services. We
> > should be know which services should be upgraded automatically, which
> > ones we should prompt the user to upgrade, and which ones are never
> > safe to upgrade. Maybe we could add a "restart-strategy" to the
> > shepherd-service object?
> 
> What would you put there?  Do you have concrete examples?

Restart/reload/whatever unless explicitly disabled?

> 
> Note that FHS distros don’t do better: either the service is
> hot-replaceable (nginx; I don’t know of any other) or can at least
> reload its config (sshd, etc.), and then it’s dynamically upgraded, or
> it’ll be upgraded next time you restart it.
> 
> That’s because fundamentally only the user can tell whether now is a
> good time to restart, say, sshd.

Not exactly the point, but Debian regularly restarts sshd for me on a
remote box (somehow) without me losing the connection.

> 
> In Debian, “apt-get dist-upgrade” opens a dialog box asking the user
> whether services can be restarted right away, IIRC.
> 
> >> Thus I think it’s reasonable to print a message along the lines of:
> >>
> >>   The following services were upgraded: …
> >>   Please run “herd restart SERVICE” to stop, upgrade, and   restart
> >> services that were not automatically upgraded.
> >>
> >> WDYT?
> 

This sounds like a really good idea, especially if we limit to ones that
are less likely to cause problems if restarted (like filesystems). We
still have to figure out something for databases and upgrading them from
one version to another.


-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-23  8:26                         ` Efraim Flashner
@ 2018-09-23 19:53                           ` Ludovic Courtès
  0 siblings, 0 replies; 25+ messages in thread
From: Ludovic Courtès @ 2018-09-23 19:53 UTC (permalink / raw)
  To: Efraim Flashner; +Cc: 22039

Hi,

Efraim Flashner <efraim@flashner.co.il> skribis:

> On Fri, Sep 21, 2018 at 01:58:03PM +0200, Ludovic Courtès wrote:

[...]

>> Note that FHS distros don’t do better: either the service is
>> hot-replaceable (nginx; I don’t know of any other) or can at least
>> reload its config (sshd, etc.), and then it’s dynamically upgraded, or
>> it’ll be upgraded next time you restart it.
>> 
>> That’s because fundamentally only the user can tell whether now is a
>> good time to restart, say, sshd.
>
> Not exactly the point, but Debian regularly restarts sshd for me on a
> remote box (somehow) without me losing the connection.

Good point!  I think sshd opens child processes for new sessions, and
thanks to that it falls into the category of service that can be
hot-replaced.

For hot-swappable daemons, I think we should provide a specific ‘reload’
or ‘upgrade’ action as was discussed at
<https://issues.guix.info/issue/26830>.  That way, to figure out the
right strategy, we would just check whether the service supports that
action.

Thanks,
Ludo’.

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-21 11:58                       ` Ludovic Courtès
  2018-09-23  8:26                         ` Efraim Flashner
@ 2018-09-23 23:06                         ` Carlo Zancanaro
  2018-09-24  8:58                           ` Ludovic Courtès
  1 sibling, 1 reply; 25+ messages in thread
From: Carlo Zancanaro @ 2018-09-23 23:06 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 22039

Hey Ludo’,

On Fri, Sep 21 2018, Ludovic Courtès wrote:
> What would you put there?  Do you have concrete examples?

I would have three possible values: 'never, 'always, 'manual.

'never would mean that the service should never be restarted. This 
is for things like udev, or the filesystems, which should never be 
restarted on a running system.

'always would mean that the service is always safe to restart. I 
don't immediately know what services would fit in this category 
(maybe sshd, given Efraim's comment; maybe ntpd? I'm sure there 
are others). Things like nginx will probably not fall into this 
category, because they involve some downtime when restarting. 
Reloading their configuration (via a "reload" action, or similar) 
is not enough because the binary and/or libraries might have 
changed (and, in the worst case, might have an incompatible 
configuration format, although I would expect that to be 
exceedingly rare).

'manual would mean that the service should be restarted, but it 
need to be done at an appropriate time. This should prompt the 
user with the names of the services, and we should provide an 
option to guix system reconfigure to restart these services as 
part of the reconfigure. We could call the option 
"--restart-services".

>> [ ... ] I just have to know that to restart wicd I have to run 
>> "herd restart networking".
>
> There’s ‘guix system search’ that provides this kind of info 
> (see <https://issues.guix.info/issue/29707>), but I agree we 
> could do better.

I actually checked this before sending my previous message, but I 
didn't see that it includes "shepherdnames". I tested with "guix 
system search wicd" which didn't show any, but I see now that 
searching "guix system search xmpp" does helpfully show how to 
restart the service.

> We can go with your patch and a message along the lines of what 
> we discussed above, and then work on the improvements you 
> mentioned, one at a time.  That way we’ll have the warm feeling 
> of having achieved something, even if there’s more to come.  :-)

I won't be able to look at writing the code for this for a few 
weeks, but hopefully I'll get to it around mid- to late-October.

Carlo

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-23 23:06                         ` Carlo Zancanaro
@ 2018-09-24  8:58                           ` Ludovic Courtès
  2018-09-24 10:18                             ` Carlo Zancanaro
  0 siblings, 1 reply; 25+ messages in thread
From: Ludovic Courtès @ 2018-09-24  8:58 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: 22039

Hi Carlo,

Carlo Zancanaro <carlo@zancanaro.id.au> skribis:

> On Fri, Sep 21 2018, Ludovic Courtès wrote:
>> What would you put there?  Do you have concrete examples?
>
> I would have three possible values: 'never, 'always, 'manual.
>
> 'never would mean that the service should never be restarted. This is
> for things like udev, or the filesystems, which should never be
> restarted on a running system.
>
> 'always would mean that the service is always safe to restart. I don't
> immediately know what services would fit in this category (maybe sshd,
> given Efraim's comment; maybe ntpd? I'm sure there are others). Things
> like nginx will probably not fall into this category, because they
> involve some downtime when restarting. Reloading their configuration
> (via a "reload" action, or similar) is not enough because the binary
> and/or libraries might have changed (and, in the worst case, might
> have an incompatible configuration format, although I would expect
> that to be exceedingly rare).
>
> 'manual would mean that the service should be restarted, but it need
> to be done at an appropriate time. This should prompt the user with
> the names of the services, and we should provide an option to guix
> system reconfigure to restart these services as part of the
> reconfigure. We could call the option "--restart-services".

OK, I see.

>> We can go with your patch and a message along the lines of what we
>> discussed above, and then work on the improvements you mentioned,
>> one at a time.  That way we’ll have the warm feeling of having
>> achieved something, even if there’s more to come.  :-)
>
> I won't be able to look at writing the code for this for a few weeks,
> but hopefully I'll get to it around mid- to late-October.

If that’s fine with you, I can apply the patch you initially posted so
we can start taking advantage of it (I’d like to push a Guix release by
the end of October.)  WDYT?

Thanks!

Ludo’.

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-24  8:58                           ` Ludovic Courtès
@ 2018-09-24 10:18                             ` Carlo Zancanaro
  2018-09-26 21:46                               ` Ludovic Courtès
  0 siblings, 1 reply; 25+ messages in thread
From: Carlo Zancanaro @ 2018-09-24 10:18 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 22039

Hey Ludo’,

On Mon, Sep 24 2018, Ludovic Courtès wrote:
> If that’s fine with you, I can apply the patch you initially 
> posted so we can start taking advantage of it (I’d like to push 
> a Guix release by the end of October.)  WDYT?

That sounds good to me!

Thanks for your patience through this. It's taken a bit of time 
for my ideas to fully form, but I think it's coming together.

Carlo

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

* bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services
  2018-09-24 10:18                             ` Carlo Zancanaro
@ 2018-09-26 21:46                               ` Ludovic Courtès
  0 siblings, 0 replies; 25+ messages in thread
From: Ludovic Courtès @ 2018-09-26 21:46 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: 22039-done

Hello!

I went ahead and pushed the patch as
4245ddcbc9f935804c17c97872b90ec1050c2d75.

One modification I had to make and which I hadn’t though of before is
the new ‘load-services/safe’ procedure I added: it makes sure it DTRT
when talking to shepherd < 0.15.0.

I’ve reconfigured from master, and so far so good!  :-)

I’m closing this issue.  I suggest opening new ones for specific
improvements we discussed.

Thank you!

Ludo’.

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

end of thread, other threads:[~2018-09-26 21:47 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-28 16:35 bug#22039: 'guix system reconfigure' must start/restart/stop services Ludovic Courtès
2016-01-08 10:04 ` Ludovic Courtès
2016-02-03 21:32 ` Ludovic Courtès
2016-02-03 21:34   ` Thompson, David
2018-01-16 11:17 ` bug#22039: ‘guix system reconfigure’ does not always load new services Ludovic Courtès
2018-08-26 12:15 ` bug#22039: [PATCH] 'guix system reconfigure' must start/restart/stop services Carlo Zancanaro
2018-09-01 10:49   ` Ludovic Courtès
2018-09-01 12:15     ` Carlo Zancanaro
2018-09-01 12:33       ` Carlo Zancanaro
2018-09-01 17:12       ` Ludovic Courtès
2018-09-02  3:43         ` Carlo Zancanaro
2018-09-02 20:39           ` Ludovic Courtès
2018-09-19 15:47           ` Ludovic Courtès
2018-09-19 20:56             ` Carlo Zancanaro
2018-09-20  9:47               ` Ludovic Courtès
2018-09-20 10:24                 ` Carlo Zancanaro
2018-09-20 11:08                   ` Ludovic Courtès
2018-09-20 11:50                     ` Carlo Zancanaro
2018-09-21 11:58                       ` Ludovic Courtès
2018-09-23  8:26                         ` Efraim Flashner
2018-09-23 19:53                           ` Ludovic Courtès
2018-09-23 23:06                         ` Carlo Zancanaro
2018-09-24  8:58                           ` Ludovic Courtès
2018-09-24 10:18                             ` Carlo Zancanaro
2018-09-26 21:46                               ` Ludovic Courtès

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).