Subject: Re: bug#46871: Service manager "init scripts" missing from current-guix

From: zimoun <[email-masked]>
Date: Thu, 04 Mar 2021 04:27:39 +0100

Hi,

On Tue, 02 Mar 2021 at 01:05, Leo Famulari <[email-masked]> wrote:

> ------
> cp: cannot stat '/root/.config/guix/current/etc/openrc/guix-daemon': No such file or directory
> chmod: cannot access '/etc/init.d/guix-daemon': No such file or directory
>  * rc-update: service `guix-daemon' does not exist
> ------
>
> I downloaded the 1.2.0 release binary and, indeed, there is no directory
> 'etc/openrc' in root's current-guix profile. It's also missing from the
> 'guix-1.2.0' store item that is the current-guix in this context.
>
> There is 'etc/init.d', 'lib/upstart', and 'lib/systemd'.

Neither in the latest binary from CI:

<https://ci.guix.gnu.org/search/latest/archive?query=spec:guix-master+status:success+system:x86_64-linux+guix-binary.tar.xz>

Noting ’guix-profile’ instead of ’current-profile’ in the extracted ’var’:

$ ls -l var/guix/profiles/per-user/root/
total 0
lrwxrwxrwx 1 sitour sitour 19 janv.  1  1970 guix-profile -> guix-profile-1-link
lrwxrwxrwx 1 sitour sitour 51 janv.  1  1970 guix-profile-1-link -> /gnu/store/…-profile

Mathieu, how this ’latest’ tarball is produced?  With “guix pack
--profile-name=current-guix” as in “make release”?

The 2 last commits seems about openrc seem,

  d27dbeb9d8 gnu: guix: Install OpenRC init files to $(prefix)/etc.
  cabac732de guix-install.sh: Support OpenRC.

I miss why in nix/local.mk:

--8<---------------cut here---------------start------------->8---
# The service script for openrc.
openrcservicedir = $(sysconfdir)/init.d
nodist_openrcservice_DATA = etc/openrc/guix-daemon
--8<---------------cut here---------------end--------------->8---

instead of:

  openrcservicedir = $(sysconfdir)/openrc

and then in accordance with the substitutes* replacement.  Well, this
tiny patch does that:

diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 776867eab7..938907eb12 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -212,7 +212,7 @@ $(prefix)/etc/init.d\n")))
                         (substitute* "nix/local.mk"
                           (("^openrcservicedir = .*$")
                            (string-append "openrcservicedir = \
-$(prefix)/etc/init.d\n")))
+$(prefix)/etc/openrc\n")))
 
                         (invoke "sh" "bootstrap")))
                     (add-before 'build 'use-host-compressors
diff --git a/nix/local.mk b/nix/local.mk
index d2ce349d9c..7c438ea78c 100644
--- a/nix/local.mk
+++ b/nix/local.mk
@@ -181,7 +181,7 @@ etc/init.d/guix-daemon: etc/init.d/guix-daemon.in	\
 	mv "$@.tmp" "$@"
 
 # The service script for openrc.
-openrcservicedir = $(sysconfdir)/init.d
+openrcservicedir = $(sysconfdir)/openrc
 nodist_openrcservice_DATA = etc/openrc/guix-daemon
 
 etc/openrc/guix-daemon: etc/openrc/guix-daemon.in	\

It seems to fix…  but not well tested since I am still failing with
“make release”. :-)

I have tried with

  ./pre-inst-env guix build guix \
      --with-git-url=guix=$(pwd) \
      --with-commit=guix=xxxxxxxx

WDYT?

> Weirder: none of these files are available in current-guix on a
> "current" Guix installation, although they do appear in the result of
> `guix build guix`. Minus openrc of course. Is this expected?

Is it not the difference between the package Guix and (guix self)?
Other said, “guix pull” does not install the package Guix in “current”
but compile (guix self).  Maybe I misunderstand something.

Cheers,
simon