Subject: bug#54545: [Guix Home] ‘shepherd’ started twice?

From: Andrew Tropin <[email-masked]>
Date: Mon, 04 Apr 2022 09:41:06 +0300

On 2022-03-24 15:21, Ludovic Courtès wrote:

> Hi,
>
> From what can be seen in ‘guix home container’, it would seem that
> ‘shepherd’ is started twice, leading to this error while attempting to
> bind(2) the second time (thus it’s actually harmless, but suboptimal):
>
> --8<---------------cut here---------------start------------->8---
> $ ./pre-inst-env  guix home container /tmp/t.scm
> WARNING: (guile-user): imported module (guix build utils) overrides core binding `delete'
> Symlinking /home/ludo/.bash_profile -> /gnu/store/flqaxzvgfv2g3415mhmq6c0zbzdzv2k4-bash_profile... done
> Symlinking /home/ludo/.profile -> /gnu/store/dann7r1095xll0kji5yl0ql07096rc8j-shell-profile... done
> Symlinking /home/ludo/.bashrc -> /gnu/store/g78w0adqg25z3jl8jq71n0n0z32f7dbx-bashrc... done
> Symlinking /home/ludo/.config/fontconfig/fonts.conf -> /gnu/store/4261pxafny0g2myhh9yj1771ry7k05lc-fonts.conf... done
>  done
> Finished updating symlinks.
>
> Comparing /gnu/store/non-existing-generation/profile/share/fonts and
>           /gnu/store/vvfrdbvmb0g41k00xxmd9qpgzavkvd32-home/profile/share/fonts... done (same)
> Evaluating on-change gexps.
>
> On-change gexps evaluation finished.
>
> Service root has been started.
> WARNING: Use of `load' in declarative module (#{ g56}#).  Add #:declarative? #f to your define-module invocation.
> Starting services...
> Service mcron has been started.
>
> Service root has been started.
> WARNING: Use of `load' in declarative module (#{ g56}#).  Add #:declarative? #f to your define-module invocation.
> Starting services...
> Service mcron has been started.
>
> Backtrace:
>            4 (primitive-load "/gnu/store/vza48khbaq0fdmcsrn27xj5y5yy?")
> In shepherd.scm:
> ~$    316:10  3 (main "--logfile" "/home/ludo/.local/var/log/shepherd.?" ?)
>     56:14  2 (call-with-server-socket "/run/user/1000/shepherd/sock?" ?)
>      49:6  1 (open-server-socket "/run/user/1000/shepherd/socket")
> In unknown file:
>            0 (bind #<input-output: socket 12> #(1 "/run/user/1000?") #)
>
> ERROR: In procedure bind:
> In procedure bind: Address already in use
> --8<---------------cut here---------------end--------------->8---
>
> I suspect the problem is in activation snippets, but I’m open to other
> hypotheses.  :-)
>
> Thoughts?
>
> Ludo’.
>
>

Can confirm.

Activation script tries to load latest shepherd configuration with `herd
load root ./path/to/config.scm` and it starts a shepherd process.  Login
shell starts the shepherd process as well.  Probably we need to do
config reload using on-change service and also not trigger on-change
stuff if user isn't logged in.  I can think on the proper solution and
make a patch with a fix later this week or beginning of the next week.

-- 
Best regards,
Andrew Tropin