Subject: Re: [bug#42816] [PATCH] guix-install.sh: Add support for openrc

From: Tobias Geerinckx-Rice <[email-masked]>
Date: Tue, 11 Aug 2020 23:26:55 +0200

Morgan,

[email-masked] 写道：
> * etc/guix-install.sh: Add support for openrc

\o/ thanks!

> I also removed the --warning=no-timestamp tar flag

My understanding was that this silenced a scary but harmless 
warning from older (GNU?) tar versions.  I'm happy to see it go if 
it actually breaks others.

> and changed grep to use
> extended regex instead of perl regex since these flags where not 
> supported on
> the alpine linux image I was using to test (3.12.0-x86_64).

Both Alpine compatibility changes are very welcome but should be 
in a separate commit.  Keep commits confined to one logical change 
whenever possible.

> --- a/etc/guix-install.sh
> +++ b/etc/guix-install.sh
> @@ -150,6 +150,9 @@ chk_init_sys()
>          _msg "${INF}init system is: sysv-init"
>          INIT_SYS="sysv-init"
>          return 0
> +    elif [[ $(openrc --version 2>/dev/null) =~ \(OpenRC\) ]]; 
> then

OK.  I didn't realise the script still had severe bashism.

> +        _msg "${INF}init system is: OpenRC"
> +        INIT_SYS="openrc"

Add a ‘return 0’ line here for consistency with the rest of the 
code.

>      latest_ver="$(echo "$bin_ver_ls" \
> -                       | grep -oP "([0-9]{1,2}\.){2}[0-9]{1,2}" 
> \
> +                       | grep -oE 
> "([[:digit:]]{1,2}\.){2}[[:digit:]]{1,2}" \

[[:digit:]] wasn't strictly required here, right?  I understand 
that it's more ‘correct’ but can't imagine any locale actually 
breaking either one.

Is there a practical chance that some ancient-but-supported grep 
out there supports [0-9] but *not* [[:digit:]]?

If not: OK!

> @@ -384,6 +386,16 @@ sys_enable_guix_daemon()
>                    service guix-daemon start; } &&
>                  _msg "${PAS}enabled Guix daemon via sysv"
>              ;;
> +        openrc)
> +            { mkdir -p /etc/init.d;
> +              cp 
> "${ROOT_HOME}/.config/guix/current/etc/openrc/guix-daemon" \
> +                 /etc/init.d/guix-daemon;
> +              chmod 775 /etc/init.d/guix-daemon;
> +
> +              rc-update add guix-daemon default &&
> +                  rc-service guix-daemon start;} &&
> +                _msg "${PAS}enabled Guix daemon via OpenRC"
> +            ;;

I'll defer to your expertise on the OpenRC incantations :-)

Minor nitpick: ‘; }’.

> diff --git a/etc/openrc/guix-daemon b/etc/openrc/guix-daemon

I like the subdirectory.

> new file mode 100644
> index 0000000000..436673f169
> --- /dev/null
> +++ b/etc/openrc/guix-daemon
> @@ -0,0 +1,11 @@
> +#!/sbin/openrc-run
> +
> +export 
> GUIX_LOCPATH=/var/guix/profiles/per-user/root/guix-profile/lib/locale
> +export LC_ALL=en_US.utf8
> +command="/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon"
> +command_args="--build-users-group=guixbuild"
> +command_background="yes"
> +pidfile="/var/run/guix-daemon.pid"
> +
> +output_log="/var/log/guix-daemon-stdout.log"
> +error_log="/var/log/guix-daemon-stderr.log"

Please rename this to guix-daemon.in & add it to nix/local.mk so 
we can use @localstatedir@ here.

If you could send a revised patch series it would be much 
appreciated; otherwise I'll make the above changes when I get 
around to it (...).

Thanks!

T G-R