[PATCH] guile: allow pre-inst-env inject local paths

OpenSubmitted by Sergei Trofimovich.
Details
3 participants
  • Maxime Devos
  • Sergei Trofimovich
  • Sergei Trofimovich
Owner
unassigned
Severity
normal
S
S
Sergei Trofimovich wrote on 15 May 11:52 +0200
(address . guix-patches@gnu.org)
20210515095227.3245343-1-slyfox@gentoo.org
I observed the problem when tried to run 'guix refresh' from local git checkout:
$ strace -f ./pre-inst-env guix refresh -u re2c |& fgrep re2c.scm ... [pid 3014757] openat(AT_FDCWD, "/usr/share/guile/site/3.0/gnu/packages/re2c.scm.qilB0R", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)
Attempt to /usr/share happens because local directory override is ignored:
$ ./pre-inst-env guile -c '(display (search-path %load-path "gnu/packages/re2c.scm")) (newline) (display %load-path) (newline)' /usr/share/guile/site/3.0/gnu/packages/re2c.scm (/usr/share/guile/3.0 \ /usr/share/guile/site/3.0 \ /usr/share/guile/site \ /usr/share/guile \ /home/slyfox/dev/git/guix \ /home/slyfox/dev/git/guix)
It happens because ./guile ignores GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATHunconditionally.
The change keeps GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH for ./pre-inst-env.
* gnu/packages/aux-files/guile-launcher.c (main): don't ignoreGUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH in GUIX_UNINSTALLED=1 mode.
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>--- gnu/packages/aux-files/guile-launcher.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
Toggle diff (33 lines)diff --git a/gnu/packages/aux-files/guile-launcher.c b/gnu/packages/aux-files/guile-launcher.cindex 47ba069de1..bed63353a9 100644--- a/gnu/packages/aux-files/guile-launcher.c+++ b/gnu/packages/aux-files/guile-launcher.c@@ -73,14 +73,19 @@ main (int argc, char **argv) which is always preferable over the C locale. */ setlocale (LC_ALL, "en_US.utf8"); - const char *str;- str = getenv ("GUILE_LOAD_PATH");- load_path = str != NULL ? strdup (str) : NULL;- str = getenv ("GUILE_LOAD_COMPILED_PATH");- load_compiled_path = str ? strdup (str) : NULL;+ /* Allow ./pre-inst-env to inject local paths. That way local sources+ are preferred for most operations. */+ if (getenv ("GUIX_UNINSTALLED") == NULL)+ {+ const char *str;+ str = getenv ("GUILE_LOAD_PATH");+ load_path = str != NULL ? strdup (str) : NULL;+ str = getenv ("GUILE_LOAD_COMPILED_PATH");+ load_compiled_path = str ? strdup (str) : NULL; - unsetenv ("GUILE_LOAD_PATH");- unsetenv ("GUILE_LOAD_COMPILED_PATH");+ unsetenv ("GUILE_LOAD_PATH");+ unsetenv ("GUILE_LOAD_COMPILED_PATH");+ } /* XXX: Do not let GMP allocate via libgc as this can lead to memory corruption in GnuTLS/Nettle since Nettle also uses GMP:-- 2.31.1
S
S
Sergei Trofimovich wrote on 16 Aug 19:28 +0200
(address . 48434@debbugs.gnu.org)
20210816182822.654d3e1f@zn3
On Sat, 15 May 2021 10:52:27 +0100Sergei Trofimovich <slyfox@gentoo.org> wrote:
Toggle quote (63 lines)> I observed the problem when tried to run 'guix refresh' from local git checkout:> > $ strace -f ./pre-inst-env guix refresh -u re2c |& fgrep re2c.scm> ...> [pid 3014757] openat(AT_FDCWD, "/usr/share/guile/site/3.0/gnu/packages/re2c.scm.qilB0R",> O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)> > Attempt to /usr/share happens because local directory override is ignored:> > $ ./pre-inst-env guile -c '(display (search-path %load-path "gnu/packages/re2c.scm")) (newline) (display %load-path) (newline)'> /usr/share/guile/site/3.0/gnu/packages/re2c.scm> (/usr/share/guile/3.0 \> /usr/share/guile/site/3.0 \> /usr/share/guile/site \> /usr/share/guile \> /home/slyfox/dev/git/guix \> /home/slyfox/dev/git/guix)> > It happens because ./guile ignores GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH> unconditionally.> > The change keeps GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH for ./pre-inst-env.> > * gnu/packages/aux-files/guile-launcher.c (main): don't ignore> GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH in GUIX_UNINSTALLED=1 mode.> > Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>> ---> gnu/packages/aux-files/guile-launcher.c | 19 ++++++++++++-------> 1 file changed, 12 insertions(+), 7 deletions(-)> > diff --git a/gnu/packages/aux-files/guile-launcher.c b/gnu/packages/aux-files/guile-launcher.c> index 47ba069de1..bed63353a9 100644> --- a/gnu/packages/aux-files/guile-launcher.c> +++ b/gnu/packages/aux-files/guile-launcher.c> @@ -73,14 +73,19 @@ main (int argc, char **argv)> which is always preferable over the C locale. */> setlocale (LC_ALL, "en_US.utf8");> > - const char *str;> - str = getenv ("GUILE_LOAD_PATH");> - load_path = str != NULL ? strdup (str) : NULL;> - str = getenv ("GUILE_LOAD_COMPILED_PATH");> - load_compiled_path = str ? strdup (str) : NULL;> + /* Allow ./pre-inst-env to inject local paths. That way local sources> + are preferred for most operations. */> + if (getenv ("GUIX_UNINSTALLED") == NULL)> + {> + const char *str;> + str = getenv ("GUILE_LOAD_PATH");> + load_path = str != NULL ? strdup (str) : NULL;> + str = getenv ("GUILE_LOAD_COMPILED_PATH");> + load_compiled_path = str ? strdup (str) : NULL;> > - unsetenv ("GUILE_LOAD_PATH");> - unsetenv ("GUILE_LOAD_COMPILED_PATH");> + unsetenv ("GUILE_LOAD_PATH");> + unsetenv ("GUILE_LOAD_COMPILED_PATH");> + }> > /* XXX: Do not let GMP allocate via libgc as this can lead to memory> corruption in GnuTLS/Nettle since Nettle also uses GMP:
Stumbled on it again today when cloned fresh guix repo and forgot toapply this patch. Is it a reasonable approach? Or something else isat fault here?
Thanks!
--
Sergei
M
M
Maxime Devos wrote on 16 Aug 20:52 +0200
Re: [bug#48434] [PATCH] guile: allow pre-inst-env inject local paths
430b0e953bf76a13ff2290004d3e7ac1f0bdef7c.camel@telenet.be
Sergei Trofimovich schreef op ma 16-08-2021 om 18:28 [+0100]:
Toggle quote (21 lines)> On Sat, 15 May 2021 10:52:27 +0100> Sergei Trofimovich <slyfox@gentoo.org> wrote:> > > I observed the problem when tried to run 'guix refresh' from local git checkout:> > > > $ strace -f ./pre-inst-env guix refresh -u re2c |& fgrep re2c.scm> > ...> > [pid 3014757] openat(AT_FDCWD, "/usr/share/guile/site/3.0/gnu/packages/re2c.scm.qilB0R",> > O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)> > > > Attempt to /usr/share happens because local directory override is ignored:> > > > $ ./pre-inst-env guile -c '(display (search-path %load-path "gnu/packages/re2c.scm")) (newline) (display %load-path) (newline)'> > /usr/share/guile/site/3.0/gnu/packages/re2c.scm> > (/usr/share/guile/3.0 \> > /usr/share/guile/site/3.0 \> > /usr/share/guile/site \> > /usr/share/guile \> > /home/slyfox/dev/git/guix \> > /home/slyfox/dev/git/guix)
^ here's the checkout in the load path
Toggle quote (4 lines)> > > > It happens because ./guile ignores GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH> > unconditionally.
The local directory isn't ignored, it's at the end (the effect is about the same though).
Toggle quote (5 lines)> > The change keeps GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH for ./pre-inst-env.> > > > * gnu/packages/aux-files/guile-launcher.c (main): don't ignore> > GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH in GUIX_UNINSTALLED=1 mode.
Could you do something like
#define GUIX_UNINSTALLED 1#if GUIX_UNINSTALLEDnew behaviour#elseOLD BEHAVIOUR#endif
and change "Makefile.am" to compile two variants of "guile",one with "DGUIX_UNINSTALLED=1" which goes into libexec, and anotherwith "DGUIX_UNINSTALLED=0" named "$CHECKOUT/guile" which isn't installedanywhere but will be added to PATH by "pre-inst-env", or something like that?
I've a bit of an aversion towards using $..._UNINSTALLED environment variables,as it leads to difficult situations like ‘what should happen if I /gnu/store/.../bin/guixis run with GUIX_UNINSTALLED set to 1’:
(a): Reset "GUILE_LOAD{,_COMPILED}_PATH" because we're running directly from the store (b): Don't reset "GUILE_LOAD_{,_COMPILED}_PATH" because GUIX_UNINSTALLED is set to 1.
As a comparison, GUIX_UNINSTALLED, the preprocessor variable, is like a ‘lexical variable’,and GUIX_UNINSTALLED, the environment variable, is like a‘parameter object’/‘dynamically bound variable’ (see, e.g., 6.11.12 Parameters in the Guilemanual). I tend to prefer the former, except for dynamic things like LC_ALL, $[...]_PATH(when used by "guile", "gcc" -- applications typically shouldn't depend on $GUILE_LOAD_PATH,if they do, they need 'wrap-program' or the like’).
Also, "guile-launcher.c" is used by 'quiet-quile" in (guix self). It should probably beverified that "guix pull" still works well.
Greetings,Maxime.
-----BEGIN PGP SIGNATURE-----
iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYRq0ABccbWF4aW1lZGV2b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7u7dAP9nyeKHaysuBDca+a/M++uXSwnBKuxMRdGln5+HLg/dJgEArmz16fXyIH98bXEO/VAu3uc7l/Mk5c9cdYsIDx9XqAM==ipRd-----END PGP SIGNATURE-----

S
S
Sergei Trofimovich wrote on 17 Aug 10:28 +0200
(name . Maxime Devos)(address . maximedevos@telenet.be)(address . 48434@debbugs.gnu.org)
20210817092830.7a86d795@zn3
On Mon, 16 Aug 2021 20:52:48 +0200Maxime Devos <maximedevos@telenet.be> wrote:
Toggle quote (15 lines)> Sergei Trofimovich schreef op ma 16-08-2021 om 18:28 [+0100]:> > On Sat, 15 May 2021 10:52:27 +0100> > Sergei Trofimovich <slyfox@gentoo.org> wrote:> > > > > I observed the problem when tried to run 'guix refresh' from local git checkout:> > > > > > $ strace -f ./pre-inst-env guix refresh -u re2c |& fgrep re2c.scm> > > ...> > > [pid 3014757] openat(AT_FDCWD, "/usr/share/guile/site/3.0/gnu/packages/re2c.scm.qilB0R",> > > O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)> > > > > > Attempt to /usr/share happens because local directory override is ignored:
> The local directory isn't ignored, it's at the end (the effect is about the same though).
Reworded to: "because local directory override has too low priority".
Toggle quote (19 lines)> > > The change keeps GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH for ./pre-inst-env.> > > > > > * gnu/packages/aux-files/guile-launcher.c (main): don't ignore> > > GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH in GUIX_UNINSTALLED=1 mode. > > Could you do something like> > #define GUIX_UNINSTALLED 1> #if GUIX_UNINSTALLED> new behaviour> #else> OLD BEHAVIOUR> #endif> > and change "Makefile.am" to compile two variants of "guile",> one with "DGUIX_UNINSTALLED=1" which goes into libexec, and another> with "DGUIX_UNINSTALLED=0" named "$CHECKOUT/guile" which isn't installed> anywhere but will be added to PATH by "pre-inst-env", or something like that?
Attached v2 patch that should solve all the above.
Added two 'guile' flavours: inplace/guile (to be used inplace) store/guile (to be installed to libexec)While at it moved 'guix-daemon' to 'inplace/' as well to make it clear thattests use inplace variant sometimes. Installation location did not change.
Also moved scripts/guix to inplace/guix as ./pre-inst-env relies on it tobe injected to PATH.
Toggle quote (3 lines)> Also, "guile-launcher.c" is used by 'quiet-quile" in (guix self). It should probably be> verified that "guix pull" still works well.
It's a bit hard to test right now as guix-master is slightly broken due tomissing installed files when installed as a primary package manager, but atleast fetch part works fine:
$ guix pullUpdating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...Authenticating channel 'guix', commits 9edb3f6 to f7094f5 (29 new commits)...Building from this channel: guix https://git.savannah.gnu.org/git/guix.git f7094f5Backtrace:In ice-9/boot-9.scm: 222:29 19 (map1 (((guix store)) ((guix records)) ((guix #)) (#) …)) 222:29 18 (map1 (((guix records)) ((guix profiles)) ((guix #)) # …)) 222:29 17 (map1 (((guix profiles)) ((guix discovery)) ((guix …)) …)) 222:29 16 (map1 (((guix discovery)) ((guix combinators)) ((# …)) …)) 222:29 15 (map1 (((guix combinators)) ((guix channels)) ((# #)) …)) 222:29 14 (map1 (((guix channels)) ((guix describe)) ((guix #)) …)) 222:29 13 (map1 (((guix describe)) ((guix sets)) ((guix ui)) (#) …)) 222:29 12 (map1 (((guix sets)) ((guix ui)) ((guix diagnostics)) …)) 222:29 11 (map1 (((guix ui)) ((guix diagnostics)) ((guix #)) (#) …)) 222:29 10 (map1 (((guix diagnostics)) ((guix modules)) ((# #)) # …)) 222:29 9 (map1 (((guix modules)) ((guix packages)) ((guix #)) # …)) 222:29 8 (map1 (((guix packages)) ((guix utils)) ((gnu # #)) # …)) 222:29 7 (map1 (((guix utils)) ((gnu packages base)) ((gnu …)) …)) 222:29 6 (map1 (((gnu packages base)) ((gnu packages bash)) (#) …)) 222:29 5 (map1 (((gnu packages bash)) ((gnu packages hurd)) (#) …)) 222:29 4 (map1 (((gnu packages hurd)) ((gnu system setuid)) (#) …)) 222:17 3 (map1 (((gnu system setuid)) ((srfi srfi-1)) ((# #)) # …)) 3329:6 2 (resolve-interface (gnu system setuid) #:select _ #:hide …) 1685:16 1 (raise-exception _ #:continuable? _) 1685:16 0 (raise-exception _ #:continuable? _)
ice-9/boot-9.scm:1685:16: In procedure raise-exception:no code for module (gnu system setuid)
Thanks!
--
Sergei
From 20fea816b93f31f6b079aa752c0a2ec681649cd0 Mon Sep 17 00:00:00 2001From: Sergei Trofimovich <slyich@gmail.com>Date: Sat, 15 May 2021 10:40:12 +0100Subject: [PATCH v2] guile: allow pre-inst-env inject local paths
I observed the problem when tried to run 'guix refresh' from local git checkout:
$ strace -f ./pre-inst-env guix refresh -u re2c |& fgrep re2c.scm ... [pid 3014757] openat(AT_FDCWD, "/usr/share/guile/site/3.0/gnu/packages/re2c.scm.qilB0R", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)
Attempt to /usr/share happens because local directory override has too low priority:
$ ./pre-inst-env guile -c '(display (search-path %load-path "gnu/packages/re2c.scm")) (newline) (display %load-path) (newline)' /usr/share/guile/site/3.0/gnu/packages/re2c.scm (/usr/share/guile/3.0 \ /usr/share/guile/site/3.0 \ /usr/share/guile/site \ /usr/share/guile \ /home/slyfox/dev/git/guix \ /home/slyfox/dev/git/guix)
It happens because ./guile ignores GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATHunconditionally.
The change drops 'GUILE_LOAD_PATH' environment variable handling. Insteadwe bake the constant with into 'guile' binary by distinguishing 'store/guile'and 'inplace/guile'. And we bake '%guix-is-inplace' in 'inplace/guix' andin '/usr/bin/guix'. While at it also move 'guix-daemon' to'inplace/guix-daemon' to make it clear it is used locally by tests.
* .gitignore: Ignore new 'store' and 'inplace' directories, ignore two new 'guile-launcher' object files. * Makefile.am: Move 'scripts/guix' to 'inplace/guix'. Move './guile' to 'inplace/guile'. Add 'store/guile' that differes from 'inplace/guile' by absence of '-DGUIX_INPLACE_GUILE=1' define. * build-aux/pre-inst-env.in: Don't add '$abs_top_builddir' to the 'PATH'. Add only '$abs_top_builddir/inplace' to the 'PATH'. Drop 'GUIX_UNINSTALLED' environment variable. * build-aux/test-env.in: Update to new 'inplace/guix-daemon' location. * doc/local.mk: Update to new 'inplace/guix-daemon' location. * gnu/packages/aux-files/guile-launcher.c (main): Use compile-time * nix/local.mk: Move 'guix-daemon' to 'inplace/guix-daemon'. 'GUIX_INPLACE_GUILE' define to distinguish 'guile' binary used inplace and used from store. * scripts/guix.in: Drop 'GUIX_UNINSTALLED' environment variable handling in favour of new '%guix-is-inplace' constant.--- .gitignore | 5 ++++- Makefile.am | 29 +++++++++++++++++-------- build-aux/pre-inst-env.in | 12 ++++------ build-aux/test-env.in | 4 ++-- doc/local.mk | 2 +- gnu/packages/aux-files/guile-launcher.c | 26 ++++++++++++++++------ nix/local.mk | 14 ++++++------ scripts/guix.in | 6 +++-- 8 files changed, 61 insertions(+), 37 deletions(-)
Toggle diff (261 lines)diff --git a/.gitignore b/.gitignoreindex 88fe24586d..5a7dfa1f31 100644--- a/.gitignore+++ b/.gitignore@@ -78,6 +78,7 @@ /etc/openrc/guix-daemon /guix-* /guix/config.scm+/inplace /libformat.a /libstore.a /libutil.a@@ -132,6 +133,7 @@ /pre-inst-env /release-* /scripts/guix+/store /test-env /test-tmp /tests/*.trs@@ -152,5 +154,6 @@ tmp /.version /doc/stamp-* /gnu/packages/bootstrap-/gnu/packages/aux-files/guile-guile-launcher.o+/gnu/packages/aux-files/inplace_guile-guile-launcher.o+/gnu/packages/aux-files/store_guile-guile-launcher.o /guilediff --git a/Makefile.am b/Makefile.amindex 5542aa1c56..0666c7b7c2 100644--- a/Makefile.am+++ b/Makefile.am@@ -33,33 +33,44 @@ MSGMERGE_UPDATE = @MSGMERGE@ --update -bin_SCRIPTS = scripts/guix+bin_SCRIPTS = inplace/guix # Handle substitution of fully-expanded Autoconf variables. do_subst = $(SED) \ -e 's,[@]GUILE[@],$(GUILE),g' \ -e 's,[@]guilemoduledir[@],$(guilemoduledir),g' \ -e 's,[@]guileobjectdir[@],$(guileobjectdir),g' \+ -e 's,[@]guix_is_inplace[@],t,g' \ -e 's,[@]abs_top_builddir[@],$(abs_top_builddir),g' \ -e 's,[@]localedir[@],$(localedir),g' -scripts/guix: scripts/guix.in Makefile+inplace/guix: scripts/guix.in Makefile $(AM_V_at)rm -f $@ $@-t $(AM_V_at)$(MKDIR_P) "$(@D)"- $(AM_V_GEN)$(do_subst) < "$(srcdir)/$@.in" > "$@-t"+ $(AM_V_GEN)$(do_subst) < "$(srcdir)/$<" > "$@-t" $(AM_V_at)chmod a+x,a-w "$@-t" && mv -f "$@-t" "$@" # This is our variant of the 'guile' executable, one that doesn't complain-# about locales.-pkglibexec_PROGRAMS = guile-guile_SOURCES = gnu/packages/aux-files/guile-launcher.c-guile_LDADD = $(GUILE_LIBS)-guile_CFLAGS = $(GUILE_CFLAGS)+# about locales. Intended to be executed from store.+pkglibexec_PROGRAMS = store/guile+store_guile_SOURCES = gnu/packages/aux-files/guile-launcher.c+store_guile_LDADD = $(GUILE_LIBS)+store_guile_CFLAGS = $(GUILE_CFLAGS)++# This is similar to pkglibexec_PROGRAMS with an exception of honoring local+# modules:+# - GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH to allow './pre-inst-env guix refresh'+# and friends access to inplace sources: http://issues.guix.gnu.org/48434.+noinst_PROGRAMS = inplace/guile+inplace_guile_SOURCES = gnu/packages/aux-files/guile-launcher.c+inplace_guile_LDADD = $(GUILE_LIBS)+inplace_guile_CFLAGS = $(GUILE_CFLAGS) -DGUIX_INPLACE_GUILE=1 # Have the 'guix' command refer to our 'guile'. install-exec-hook: $(SED) -i "$(DESTDIR)$(bindir)/guix" \- -e 's,^#![[:graph:]]\+,#!$(pkglibexecdir)/guile,g'+ -e 's,^#![[:graph:]]\+,#!$(pkglibexecdir)/guile,g' \+ -e 's,define %guix-is-inplace #t,define %guix-is-inplace #f,g' nodist_noinst_SCRIPTS = \ pre-inst-env \diff --git a/build-aux/pre-inst-env.in b/build-aux/pre-inst-env.inindex cd90a06cbc..d4e03a92fb 100644--- a/build-aux/pre-inst-env.in+++ b/build-aux/pre-inst-env.in@@ -39,17 +39,13 @@ export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH # Define $PATH so that `guix' and friends are easily found. -PATH="$abs_top_builddir/scripts:$abs_top_builddir:$PATH"+PATH="$abs_top_builddir/inplace:$PATH" export PATH # The daemon invokes 'guix'; tell it which one to use.-GUIX="$abs_top_builddir/scripts/guix"+# Use inpalce `guix' to honor local GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH:+# http://issues.guix.gnu.org/48434+GUIX="$abs_top_builddir/inplace/guix" export GUIX -# Define $GUIX_UNINSTALLED to prevent `guix' from-# prepending @guilemoduledir@ to the Guile load paths.--GUIX_UNINSTALLED=1-export GUIX_UNINSTALLED- exec "$@"diff --git a/build-aux/test-env.in b/build-aux/test-env.inindex 7efc43206c..b41662393d 100644--- a/build-aux/test-env.in+++ b/build-aux/test-env.in@@ -39,7 +39,7 @@ case "$1" in ;; esac -if [ -x "@abs_top_builddir@/guix-daemon" ]+if [ -x "@abs_top_builddir@/inplace/guix-daemon" ] then NIX_STORE_DIR="@GUIX_TEST_ROOT@/store" @@ -100,7 +100,7 @@ then # Launch the daemon without chroot support because is may be # unavailable, for instance if we're not running as root. "@abs_top_builddir@/pre-inst-env" \- "@abs_top_builddir@/guix-daemon" --disable-chroot \+ "@abs_top_builddir@/inplace/guix-daemon" --disable-chroot \ --substitute-urls="$GUIX_BINARY_SUBSTITUTE_URL" & daemon_pid=$!diff --git a/doc/local.mk b/doc/local.mkindex 8340b75a87..6068a2cd2b 100644--- a/doc/local.mk+++ b/doc/local.mk@@ -251,7 +251,7 @@ if !CROSS_COMPILING dist_man1_MANS += $(srcdir)/%D%/guix-daemon.1 -$(srcdir)/%D%/guix-daemon.1: guix-daemon$(EXEEXT)+$(srcdir)/%D%/guix-daemon.1: inplace/guix-daemon$(EXEEXT) -$(AM_V_HELP2MAN)$(gen_man) --output="$@" `basename "$@" .1` endifdiff --git a/gnu/packages/aux-files/guile-launcher.c b/gnu/packages/aux-files/guile-launcher.cindex 47ba069de1..3dbd738573 100644--- a/gnu/packages/aux-files/guile-launcher.c+++ b/gnu/packages/aux-files/guile-launcher.c@@ -66,6 +66,12 @@ inner_main (void *unused, int argc, char **argv) int main (int argc, char **argv) {+#if defined(GUIX_INPLACE_GUILE)+ int run_guile_from_store = 0;+#else+ int run_guile_from_store = 1;+#endif+ /* Try to install the current locale; remain silent if it fails. */ if (setlocale (LC_ALL, "") == NULL) /* The 'guix pull'-provided 'guix' includes at least en_US.utf8 so use@@ -73,14 +79,20 @@ main (int argc, char **argv) which is always preferable over the C locale. */ setlocale (LC_ALL, "en_US.utf8"); - const char *str;- str = getenv ("GUILE_LOAD_PATH");- load_path = str != NULL ? strdup (str) : NULL;- str = getenv ("GUILE_LOAD_COMPILED_PATH");- load_compiled_path = str ? strdup (str) : NULL; - unsetenv ("GUILE_LOAD_PATH");- unsetenv ("GUILE_LOAD_COMPILED_PATH");+ /* Allow ./pre-inst-env to inject local paths. That way local sources+ are preferred for most operations. */+ if (run_guile_from_store)+ {+ const char *str;+ str = getenv ("GUILE_LOAD_PATH");+ load_path = str != NULL ? strdup (str) : NULL;+ str = getenv ("GUILE_LOAD_COMPILED_PATH");+ load_compiled_path = str ? strdup (str) : NULL;++ unsetenv ("GUILE_LOAD_PATH");+ unsetenv ("GUILE_LOAD_COMPILED_PATH");+ } /* XXX: Do not let GMP allocate via libgc as this can lead to memory corruption in GnuTLS/Nettle since Nettle also uses GMP:diff --git a/nix/local.mk b/nix/local.mkindex 7c438ea78c..1d7705b1e5 100644--- a/nix/local.mk+++ b/nix/local.mk@@ -111,33 +111,33 @@ libstore_a_CPPFLAGS = \ libstore_a_CXXFLAGS = $(AM_CXXFLAGS) \ $(SQLITE3_CFLAGS) $(LIBGCRYPT_CFLAGS) -bin_PROGRAMS = guix-daemon+bin_PROGRAMS = inplace/guix-daemon -guix_daemon_SOURCES = \+inplace_guix_daemon_SOURCES = \ %D%/nix-daemon/nix-daemon.cc \ %D%/nix-daemon/guix-daemon.cc -guix_daemon_CPPFLAGS = \+inplace_guix_daemon_CPPFLAGS = \ -DLOCALEDIR=\"$(localedir)\" \ $(libutil_a_CPPFLAGS) \ -I$(top_srcdir)/%D%/libstore -guix_daemon_LDADD = \+inplace_guix_daemon_LDADD = \ libstore.a libutil.a libformat.a -lz \ $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS) -guix_daemon_headers = \+inplace_guix_daemon_headers = \ %D%/nix-daemon/shared.hh if HAVE_LIBBZ2 -guix_daemon_LDADD += -lbz2+inplace_guix_daemon_LDADD += -lbz2 endif HAVE_LIBBZ2 noinst_HEADERS = \ $(libformat_headers) $(libutil_headers) $(libstore_headers) \- $(guix_daemon_headers)+ $(inplace_guix_daemon_headers) %D%/libstore/schema.sql.hh: guix/store/schema.sql $(AM_V_GEN)$(GUILE) --no-auto-compile -c \diff --git a/scripts/guix.in b/scripts/guix.inindex e0194d6ea2..a9fc29baa4 100644--- a/scripts/guix.in+++ b/scripts/guix.in@@ -1,4 +1,4 @@-#!@abs_top_builddir@/guile \+#!@abs_top_builddir@/inplace/guile \ --no-auto-compile -e main -s !# ;;; GNU Guix --- Functional package management for GNU@@ -31,8 +31,10 @@ (push! "@guilemoduledir@" %load-path) (push! "@guileobjectdir@" %load-compiled-path)) +(define %guix-is-inplace #@guix_is_inplace@)+ (define* (main #:optional (args (command-line)))- (unless (getenv "GUIX_UNINSTALLED")+ (unless %guix-is-inplace (augment-load-paths!)) (let ((guix-main (module-ref (resolve-interface '(guix ui))-- 2.32.0
-----BEGIN PGP SIGNATURE-----Version: GnuPG v2
iQKTBAEBCgB9FiEE+g11JqJ4cL44QkmN7V5F4G8qwpMFAmEbcy5fFIAAAAAALgAoaXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZBMEQ3NTI2QTI3ODcwQkUzODQyNDk4REVENUU0NUUwNkYyQUMyOTMACgkQ7V5F4G8qwpNFdw//XKDejSC5UcZ0uGEqXcpWL8Cz+RjiXFHOqQBZR7grr4EV3cME6GSONBe9jgKXhO44xJa2+uv5IRFGqWNqcwKThFZw4Is4cOfkNxKI2BL5/AMXJOmoYV5aARRfjE/UxkI3DplzB69d5iWbUmRwzFUk0FB88hxchjxmfl0pvmUV1KEdBv75rwaGALlEKbcVJWVhOeoVTDIYNLpLuIHjpE4xIYSOYEaeLBCzlUERYw0ddI3dj/PBGL1QOSlKxoyRctXBzO/LglKJv9AaA++Lbx3+GdxrXTxijRfLPsJFfm/CDVr5Z/l742URZ8MvfLxKGuA5EflTGR37wf192+8kPNgdVBIes2aoQMxmbkBk39u1jWmUvflYSHVKCRvmjde9ctTO/ZdxRFL34VPHXspCSSe7s84ZFz67Pj/BBwG6+1vud45XacHxDpOeCQRDNFRofFF1FOhIm7mJEwxbfTu1mtCPcavhSehXhkha1EghychYJS/65P4THz0qZ9qhDlxjNpBRa73tCuJ12jYpgGr5bU0QInhbM+YRt+cZ5sQQHjs0kMhay9y0WabM+VPyDn1cbxhxqXWNPmjpD2iQNukAeD3bmb/vwCXrw0OGDgus5vtN5yFo5FiJTjsEhWKgPxjclmWVgFD49ww70doX570+0vI/ufnrraFP5Qzbancy2hQKbKw==Pz9u-----END PGP SIGNATURE-----

S
S
Sergei Trofimovich wrote on 17 Aug 11:35 +0200
(name . Maxime Devos)(address . maximedevos@telenet.be)(address . 48434@debbugs.gnu.org)
20210817103539.205800bd@zn3
On Tue, 17 Aug 2021 09:28:30 +0100Sergei Trofimovich <slyich@gmail.com> wrote:
Toggle quote (88 lines)> On Mon, 16 Aug 2021 20:52:48 +0200> Maxime Devos <maximedevos@telenet.be> wrote:> > > Sergei Trofimovich schreef op ma 16-08-2021 om 18:28 [+0100]: > > > On Sat, 15 May 2021 10:52:27 +0100> > > Sergei Trofimovich <slyfox@gentoo.org> wrote:> > > > > > > I observed the problem when tried to run 'guix refresh' from local git checkout:> > > > > > > > $ strace -f ./pre-inst-env guix refresh -u re2c |& fgrep re2c.scm> > > > ...> > > > [pid 3014757] openat(AT_FDCWD, "/usr/share/guile/site/3.0/gnu/packages/re2c.scm.qilB0R",> > > > O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied)> > > > > > > > Attempt to /usr/share happens because local directory override is ignored: > > > The local directory isn't ignored, it's at the end (the effect is about the same though). > > Reworded to: "because local directory override has too low priority".> > > > > The change keeps GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH for ./pre-inst-env.> > > > > > > > * gnu/packages/aux-files/guile-launcher.c (main): don't ignore> > > > GUILE_LOAD_PATH / GUILE_LOAD_COMPILED_PATH in GUIX_UNINSTALLED=1 mode. > > > > Could you do something like> > > > #define GUIX_UNINSTALLED 1> > #if GUIX_UNINSTALLED> > new behaviour> > #else> > OLD BEHAVIOUR> > #endif> > > > and change "Makefile.am" to compile two variants of "guile",> > one with "DGUIX_UNINSTALLED=1" which goes into libexec, and another> > with "DGUIX_UNINSTALLED=0" named "$CHECKOUT/guile" which isn't installed> > anywhere but will be added to PATH by "pre-inst-env", or something like that? > > Attached v2 patch that should solve all the above.> > Added two 'guile' flavours:> inplace/guile (to be used inplace)> store/guile (to be installed to libexec)> While at it moved 'guix-daemon' to 'inplace/' as well to make it clear that> tests use inplace variant sometimes. Installation location did not change.> > Also moved scripts/guix to inplace/guix as ./pre-inst-env relies on it to> be injected to PATH.> > > Also, "guile-launcher.c" is used by 'quiet-quile" in (guix self). It should probably be> > verified that "guix pull" still works well. > > It's a bit hard to test right now as guix-master is slightly broken due to> missing installed files when installed as a primary package manager, but at> least fetch part works fine:> > $ guix pull> Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...> Authenticating channel 'guix', commits 9edb3f6 to f7094f5 (29 new commits)...> Building from this channel:> guix https://git.savannah.gnu.org/git/guix.git f7094f5> Backtrace:> In ice-9/boot-9.scm:> 222:29 19 (map1 (((guix store)) ((guix records)) ((guix #)) (#) …))> 222:29 18 (map1 (((guix records)) ((guix profiles)) ((guix #)) # …))> 222:29 17 (map1 (((guix profiles)) ((guix discovery)) ((guix …)) …))> 222:29 16 (map1 (((guix discovery)) ((guix combinators)) ((# …)) …))> 222:29 15 (map1 (((guix combinators)) ((guix channels)) ((# #)) …))> 222:29 14 (map1 (((guix channels)) ((guix describe)) ((guix #)) …))> 222:29 13 (map1 (((guix describe)) ((guix sets)) ((guix ui)) (#) …))> 222:29 12 (map1 (((guix sets)) ((guix ui)) ((guix diagnostics)) …))> 222:29 11 (map1 (((guix ui)) ((guix diagnostics)) ((guix #)) (#) …))> 222:29 10 (map1 (((guix diagnostics)) ((guix modules)) ((# #)) # …))> 222:29 9 (map1 (((guix modules)) ((guix packages)) ((guix #)) # …))> 222:29 8 (map1 (((guix packages)) ((guix utils)) ((gnu # #)) # …))> 222:29 7 (map1 (((guix utils)) ((gnu packages base)) ((gnu …)) …))> 222:29 6 (map1 (((gnu packages base)) ((gnu packages bash)) (#) …))> 222:29 5 (map1 (((gnu packages bash)) ((gnu packages hurd)) (#) …))> 222:29 4 (map1 (((gnu packages hurd)) ((gnu system setuid)) (#) …))> 222:17 3 (map1 (((gnu system setuid)) ((srfi srfi-1)) ((# #)) # …))> 3329:6 2 (resolve-interface (gnu system setuid) #:select _ #:hide …)> 1685:16 1 (raise-exception _ #:continuable? _)> 1685:16 0 (raise-exception _ #:continuable? _)> > ice-9/boot-9.scm:1685:16: In procedure raise-exception:> no code for module (gnu system setuid)
With https://debbugs.gnu.org/cgi/bugreport.cgi?bug=50090applied 'guix pull'works successfully on a multi-user foreign distribution.
--
Sergei
-----BEGIN PGP SIGNATURE-----Version: GnuPG v2
iQKTBAEBCgB9FiEE+g11JqJ4cL44QkmN7V5F4G8qwpMFAmEbgutfFIAAAAAALgAoaXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZBMEQ3NTI2QTI3ODcwQkUzODQyNDk4REVENUU0NUUwNkYyQUMyOTMACgkQ7V5F4G8qwpPKXw/+OcS0qx0cxflo0VmNqJ4kEUoPtEDLbrkrsZYOTEAaIqkv1Tjp+dZdRb3p0b/Q+dE5jbKXfSgoMnfju8r1UFjInwwe0rtysH/4wm14dYgHuITSCS2QROmkXgyYsmFW52iRfxYdy7q7rsBnoSSaf3BVwB/5FMP8ytxFosqwb3vmaHX7VurjNNXam3zoi7zXtz0VV00xcHxLIvF5uOJGqFwQITGridPtNlLOC7JfaOj7bsJwrFpbhmvMiRAd+YSBVsWXo9Ou57qmbtyd4t5s8EPGt3mzcjXr0xbp2jdWwMXXvSBrQRIMBoMmnVJcvLuWRsEUaXYJcU6j5yMXG5j0D7Q+Q1eP+K/1vDJj5Eh3IAtPWGJOnQ1DP5/sKnFQpf1KmotcmtmUcLn2LBNqUyrmUTvBx4mX3moc5DctNpwCcxV/U/I3Np2+L6TMAOgSnd1Z+uqGnqngbhczfQ4MqoEKSgq/9K3V7SD636Jmq/EdptPIC8XKwLMaqJcbnjPwSwjwwQgNJ9nZEkTGna+pSU0RrPYIsBslI1lvUShdcOPAGa8RwBI5ZbSXla+pT3FP4hd6uO/ryCSUnzGn+riSeW93POkY1MchyNO8f5ahTClJ7FnKsdd8XAzL4/2fw7JVUz0mxtjVfLHAQOIx+0Q/nZ9haXxWPvhobJp/ZuTtRLD1P5Fd0Yc==6d4Q-----END PGP SIGNATURE-----

M
M
Maxime Devos wrote on 17 Aug 12:24 +0200
(name . Sergei Trofimovich)(address . slyich@gmail.com)(address . 48434@debbugs.gnu.org)
1c0ddae642a3ffc341ae8d904c8fc2d5eecfef5f.camel@telenet.be
Sergei Trofimovich schreef op di 17-08-2021 om 09:28 [+0100]:
Toggle quote (10 lines)> It's a bit hard to test right now as guix-master is slightly broken due to> missing installed files when installed as a primary package manager, but at> least fetch part works fine:> > $ guix pull> Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...> Authenticating channel 'guix', commits 9edb3f6 to f7094f5 (29 new commits)...> Building from this channel:> guix https://git.savannah.gnu.org/git/guix.git f7094f5
I meant something like "$ guix pull --url=. --commit=... --root=guix0"or "$ ./pre-inst-env guix pull --url=. --commit=... --root=guix1" or"$ ./pre-inst-env guix pull --root=guix2". Simply running "$guix pull",outside "./pre-inst-env", would simply test the (unpatched) guix you haveinstalled (with "make install" or "apt-get install guix" or "guix pull"),and doesn't test the patched guix.
Greetings,Maxime.
-----BEGIN PGP SIGNATURE-----
iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYRuOchccbWF4aW1lZGV2b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7tw8AQCokkS8Gg1Ix1CIl1Le1GSRfGHsk6d7RXNLeoB11b8JtwEA9VIokkouqtdTpcn5QbrgsFnt1a8jTR85CUPX+1se/QU==5YcE-----END PGP SIGNATURE-----

S
S
Sergei Trofimovich wrote on 17 Aug 14:15 +0200
(name . Maxime Devos)(address . maximedevos@telenet.be)(address . 48434@debbugs.gnu.org)
20210817131551.68222eee@zn3
On Tue, 17 Aug 2021 12:24:50 +0200Maxime Devos <maximedevos@telenet.be> wrote:
Toggle quote (19 lines)> Sergei Trofimovich schreef op di 17-08-2021 om 09:28 [+0100]:> > It's a bit hard to test right now as guix-master is slightly broken due to> > missing installed files when installed as a primary package manager, but at> > least fetch part works fine:> > > > $ guix pull> > Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...> > Authenticating channel 'guix', commits 9edb3f6 to f7094f5 (29 new commits)...> > Building from this channel:> > guix https://git.savannah.gnu.org/git/guix.git f7094f5 > > I meant something like "$ guix pull --url=. --commit=... --root=guix0"> or "$ ./pre-inst-env guix pull --url=. --commit=... --root=guix1" or> "$ ./pre-inst-env guix pull --root=guix2". Simply running "$> guix pull",> outside "./pre-inst-env", would simply test the (unpatched) guix you have> installed (with "make install" or "apt-get install guix" or "guix pull"),> and doesn't test the patched guix.
Ah. I did install patched guix into the system (and that's howhttps://debbugs.gnu.org/cgi/bugreport.cgi?bug=50090).
I still don't quite understand if channel we pull from also should be patched.Let's assume it should:
$ LANG=C ./pre-inst-env guix pull --url=. --commit=e9029ed5eae45ee8f53f055ee66f9bce353cac84 --root=guix0 guix pull: error: root=guix0: unrecognized option
I'm not sure what --root= does. Is it a user name? Or a profile name?
--
Sergei
-----BEGIN PGP SIGNATURE-----Version: GnuPG v2
iQKTBAEBCgB9FiEE+g11JqJ4cL44QkmN7V5F4G8qwpMFAmEbqHdfFIAAAAAALgAoaXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZBMEQ3NTI2QTI3ODcwQkUzODQyNDk4REVENUU0NUUwNkYyQUMyOTMACgkQ7V5F4G8qwpNUOhAApkFGbFmIRphayF0JPO+gPl/p7a9ZxeDnaaviZ7SjFS98Nb3r6wKW2FkjztMnAT8H9ZkFumNXVvCwqv8LGd4eLy1OdcYT0rR1iYJJxvVrlcEh3dN3/8rRY3qEqCDFG7rjnP/QxcNRgRHw2HY8BR5X94Yet68Bvi/d59FZ5104tSvAc0aVUITIZVVhsarjfTLSWhJOtZ83JfbCQ5wnfr2gA3OZi4+J8hQdOqERWXN7te538KYKAfglJy0A5F/EvsSSu1i3jtqyvSAaF2EbEPaj1iJdqO1RyU43cSUVXzQTvouIk3FIiclvCpNwwaonZyKuer3lxBmrh2766tp9HEh4bL036Mu4wgYbXkB7jQWbEd2LoLorZsJHPgVmIFGhQXjfHqkRIW9QlkwLOnY+4ymvSyTXnVdejkx13Y24uSNYs9OFJVl40UmPT7hiFKsgzg5eypv73J/FM28boaYZov7Ck91tiu0EYvULhnUAQC+UjyRwN7SGSdpk9FoWSA8KAeXAhNizmNpNxQAF92umff25PszqJL2lWfeIybvHSl/aQlxQBN8F9nbb73zESj73W4Wka+Sxy6iC8SBDXXSfAYeKKJ/jJ3xDHH/hWIY/xstMLE74P1ygMlUiwhXBZ30effVGFMNqKM+j32ij/+d6MX7nxf6pukqt6Fn6nxiMP0Z+Bhw==hbyi-----END PGP SIGNATURE-----

M
M
Maxime Devos wrote on 17 Aug 15:59 +0200
(name . Sergei Trofimovich)(address . slyich@gmail.com)(address . 48434@debbugs.gnu.org)
83e6e2b24540bdcbd584bd9418b59c952a6baa26.camel@telenet.be
Toggle quote (11 lines)> Ah. I did install patched guix into the system (and that's how> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=50090).> > I still don't quite understand if channel we pull from also should be patched.> Let's assume it should:> > $ LANG=C ./pre-inst-env guix pull --url=. --commit=e9029ed5eae45ee8f53f055ee66f9bce353cac84 --root=guix0> guix pull: error: root=guix0: unrecognized option> > I'm not sure what --root= does. Is it a user name? Or a profile name?
I forgot the exact option, it should have been "--profile=guix0".From (guix)Submitting patches:
15. Make sure your changes do not break Guix and simulate a ‘guix pull’ with: guix pull --url=/path/to/your/checkout --profile=/tmp/guix.master
Greetings,Maxime.
-----BEGIN PGP SIGNATURE-----
iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYRvAqRccbWF4aW1lZGV2b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7kGLAQCEQrHEsSAM4u5KChmrKb4lKls5n5U+T78LR3WQofS92AEAsTabHaYLebAjw7emKIkOn6J/XNbjhCCgZq5p8rGZewI==Wp4T-----END PGP SIGNATURE-----

S
S
Sergei Trofimovich wrote on 17 Aug 19:42 +0200
(name . Maxime Devos)(address . maximedevos@telenet.be)(address . 48434@debbugs.gnu.org)
20210817184205.670d2121@zn3
On Tue, 17 Aug 2021 15:59:05 +0200Maxime Devos <maximedevos@telenet.be> wrote:
Toggle quote (19 lines)> > Ah. I did install patched guix into the system (and that's how> > https://debbugs.gnu.org/cgi/bugreport.cgi?bug=50090).> > > > I still don't quite understand if channel we pull from also should be patched.> > Let's assume it should:> > > > $ LANG=C ./pre-inst-env guix pull --url=. --commit=e9029ed5eae45ee8f53f055ee66f9bce353cac84 --root=guix0> > guix pull: error: root=guix0: unrecognized option> > > > I'm not sure what --root= does. Is it a user name? Or a profile name? > > I forgot the exact option, it should have been "--profile=guix0".> From (guix)Submitting patches:> > 15. Make sure your changes do not break Guix and simulate a ‘guix> pull’ with:> guix pull --url=/path/to/your/checkout --profile=/tmp/guix.master>
Aha, thank you! That works:
$ guix pull --commit=... --url=${PWD} --profile=/tmp/g1.master --disable-authentication$ ./pre-inst-env guix pull --commit=... --url=${PWD} --profile=/tmp/g2.master --disable-authentication
--
Sergei
-----BEGIN PGP SIGNATURE-----Version: GnuPG v2
iQKTBAEBCgB9FiEE+g11JqJ4cL44QkmN7V5F4G8qwpMFAmEb9O5fFIAAAAAALgAoaXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZBMEQ3NTI2QTI3ODcwQkUzODQyNDk4REVENUU0NUUwNkYyQUMyOTMACgkQ7V5F4G8qwpM0JRAAvwwekozFPyqUfMKEouVI6Q0LV+wyiGlEdPJBV53fsADUyUs+b0R68FxfdRxLt0Fh7Hf8NWBeBAzmLNwouv3hZYdEXydR0RrZ+lwhGTh9hJN3oX3e6O/WhifAEh3vz9Y17DvkBQ3sDnZbrOEni9EOay9RTml7PBbrT2C1+hOFNIMiPu5HismEP1MtWhQhuHagYxjBkHyekF/dDyu5PLmEicYLSScPFyz8pExoMIQjXh3z63CsPcfV3uhLo3n4ged/Vwi1rUOU9oeeejzTB4WsSgxV5ynsPheAWL9CtIdA4BR+dpZmRgvNr63SOS9pvQ5cFVbPkgxA8wYCW8hyqJGn1PfoKKVbxZkvZ3FuqF2ioAywpSKToQarLbbutjekRSVo+BuL/JAQ0Ikq1ShPaFguBKKKlE4+JGM/KI1UUUWmh0v84iM45nIS7qSikrSOUkOWMeF3xSFal0wiCeEe7AygJ6xmo6OA3xXTakZOemkPy1nrFPD80P5rK9AOpkz2+y+aeN2omLoTIFQq5UP702U47vX+pVsW2v4Bl3csO0Hi3q0huc1L14uWONFAAJJRv6SNCx9f4ciNRvt4E67rFSc5V7X4rGcjdw2KmqMIseguELB86J7E415yqVMZh+i1m9fKvoHAzRlMQcO+Yhkjvq18Am0hcwqvRom0M5qXe6RuEhc==378X-----END PGP SIGNATURE-----

?
Your comment

Commenting via the web interface is currently disabled.

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