modules from channels is not available to "guix repl"

  • Open
  • quality assurance status badge
Details
5 participants
  • Andrew Tropin
  • Josselin Poiret
  • 宋文武
  • Ludovic Courtès
  • Simon Tournier
Owner
unassigned
Submitted by
宋文武
Severity
normal
Merged with
宋文武 wrote on 7 Feb 09:59 +0100
(address . bug-guix@gnu.org)
87k00tlul8.fsf@envs.net
I have add the rde channel to my guix, and "guix pull".
Toggle snippet (12 lines)
(cons*
(channel
(name 'rde)
(url "https://git.sr.ht/~abcdw/rde")
(introduction
(make-channel-introduction
"257cebd587b66e4d865b3537a9a88cccd7107c95"
(openpgp-fingerprint
"2841 9AC6 5038 7440 C7E9 2FFA 2208 D209 58C1 DEB0"))))
%default-channels)

But then, Run:
echo '(use-modules (rde features))' | guix repl /dev/stdin
Will get error: no code for module (rde features)

Well, Run:
echo '(use-modules (gnu packages) (rde features))' | guix repl /dev/stdin
Will pass!
S
S
Simon Tournier wrote on 14 Feb 20:22 +0100
87zg9gxda2.fsf@gmail.com
Hi,

On mar., 07 févr. 2023 at 16:59, 宋文武 via Bug reports for GNU Guix <bug-guix@gnu.org> wrote:

Toggle quote (21 lines)
> --8<---------------cut here---------------start------------->8---
> (cons*
> (channel
> (name 'rde)
> (url "https://git.sr.ht/~abcdw/rde")
> (introduction
> (make-channel-introduction
> "257cebd587b66e4d865b3537a9a88cccd7107c95"
> (openpgp-fingerprint
> "2841 9AC6 5038 7440 C7E9 2FFA 2208 D209 58C1 DEB0"))))
> %default-channels)
> --8<---------------cut here---------------end--------------->8---
>
> But then, Run:
> echo '(use-modules (rde features))' | guix repl /dev/stdin
> Will get error: no code for module (rde features)
>
> Well, Run:
> echo '(use-modules (gnu packages) (rde features))' | guix repl /dev/stdin
> Will pass!

Yes, somehow a bug with the load path.

Toggle snippet (42 lines)
$ guix time-machine -C /tmp/channels.scm -- repl -q
GNU Guile 3.0.9
Copyright (C) 1995-2023 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guix-user)> ,pp %load-path
$1 = ("/gnu/store/n7h2ggfgljikvy9xlppsihvhgqj6bprd-guix-module-union/share/guile/site/3.0"
"/gnu/store/kphp5d85rrb3q1rdc2lfqc1mdklwh3qp-guile-3.0.9/share/guile/3.0"
"/gnu/store/kphp5d85rrb3q1rdc2lfqc1mdklwh3qp-guile-3.0.9/share/guile/3.0"
"/gnu/store/kphp5d85rrb3q1rdc2lfqc1mdklwh3qp-guile-3.0.9/share/guile/site/3.0"
"/gnu/store/kphp5d85rrb3q1rdc2lfqc1mdklwh3qp-guile-3.0.9/share/guile/site"
"/gnu/store/kphp5d85rrb3q1rdc2lfqc1mdklwh3qp-guile-3.0.9/share/guile"
"/home/simon/.guix-profile/share/guile/site/3.0"
"/home/simon/.config/guix/profiles/emacs/emacs/share/guile/site/3.0"
"/home/simon/.guix-profile/share/guile/site/3.0"
"/home/simon/.config/guix/profiles/emacs/emacs/share/guile/site/3.0")
scheme@(guix-user)> (use-modules (gnu packages))
scheme@(guix-user)> ,pp %load-path
$2 = ("/gnu/store/n7h2ggfgljikvy9xlppsihvhgqj6bprd-guix-module-union/share/guile/site/3.0"
"/gnu/store/kphp5d85rrb3q1rdc2lfqc1mdklwh3qp-guile-3.0.9/share/guile/3.0"
"/gnu/store/kphp5d85rrb3q1rdc2lfqc1mdklwh3qp-guile-3.0.9/share/guile/3.0"
"/gnu/store/kphp5d85rrb3q1rdc2lfqc1mdklwh3qp-guile-3.0.9/share/guile/site/3.0"
"/gnu/store/kphp5d85rrb3q1rdc2lfqc1mdklwh3qp-guile-3.0.9/share/guile/site"
"/gnu/store/kphp5d85rrb3q1rdc2lfqc1mdklwh3qp-guile-3.0.9/share/guile"
"/home/simon/.guix-profile/share/guile/site/3.0"
"/home/simon/.config/guix/profiles/emacs/emacs/share/guile/site/3.0"
"/home/simon/.guix-profile/share/guile/site/3.0"
"/home/simon/.config/guix/profiles/emacs/emacs/share/guile/site/3.0"
"/gnu/store/nf3z5kqjybi687v8li2dcbc5i49zm15s-rde/share/guile/site/3.0")
scheme@(guix-user)> ,use(srfi srfi-1)
scheme@(guix-user)> (lset-difference string=? $2 $1)
$3 = ("/gnu/store/nf3z5kqjybi687v8li2dcbc5i49zm15s-rde/share/guile/site/3.0")
scheme@(guix-user)> ,q

$ ls /gnu/store/nf3z5kqjybi687v8li2dcbc5i49zm15s-rde/share/guile/site/3.0
contrib gnu rde

From my understanding, it is about %package-module-path not activated by
“guix repl“; I do not know if it is a bug or a feature. :-)


Cheers,
simon
J
J
Josselin Poiret wrote on 16 Feb 22:14 +0100
[PATCH] scripts: repl: Load (gnu packages) to set up %load-path.
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
e0ffbcbb07fe41a04688223342461aa4d3310142.1676582046.git.dev@jpoiret.xyz
* guix/scripts/repl.scm: Add (gnu packages) to the used modules so that channel
Scheme files are available straight away.
---
Hi both of you,

I don't think there's a reason for that, other than no one realizing before.
Here's a simple fix, freshly tested.

guix/scripts/repl.scm | 1 +
1 file changed, 1 insertion(+)

Toggle diff (16 lines)
diff --git a/guix/scripts/repl.scm b/guix/scripts/repl.scm
index 787c63d48e..407f5b2b38 100644
--- a/guix/scripts/repl.scm
+++ b/guix/scripts/repl.scm
@@ -22,6 +22,7 @@ (define-module (guix scripts repl)
#:use-module (guix ui)
#:use-module (guix scripts)
#:use-module (guix repl)
+ #:use-module (gnu packages) ;; To extend %load-path with channels
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-37)

base-commit: 312f1f41d3f3f3e5d2c36ff46920c6dce1c21a17
--
2.39.1
宋文武 wrote on 17 Feb 04:09 +0100
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
87cz69ugvy.fsf@envs.net
Josselin Poiret <dev@jpoiret.xyz> writes:

Toggle quote (20 lines)
> * guix/scripts/repl.scm: Add (gnu packages) to the used modules so that channel
> Scheme files are available straight away.
> ---
> Hi both of you,
>
> I don't think there's a reason for that, other than no one realizing before.
> Here's a simple fix, freshly tested.
>
> guix/scripts/repl.scm | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/guix/scripts/repl.scm b/guix/scripts/repl.scm
> index 787c63d48e..407f5b2b38 100644
> --- a/guix/scripts/repl.scm
> +++ b/guix/scripts/repl.scm
> @@ -22,6 +22,7 @@ (define-module (guix scripts repl)
> #:use-module (guix ui)
> #:use-module (guix scripts)
> #:use-module (guix repl)
> + #:use-module (gnu packages) ;; To extend %load-path with channels
It's not clear to me why load (gnu packages) will/should extend
%load-path, a suprise side effect!
S
S
Simon Tournier wrote on 17 Feb 15:56 +0100
[PATCH v2] scripts: repl: Extend REPL %load-path with all channels.
(name . Josselin Poiret)(address . dev@jpoiret.xyz)
20230217145627.85062-1-zimon.toutoune@gmail.com
Reported by 宋文武 <iyzsong@envs.net>.

* guix/scripts/repl.scm (define-command): Before starting the REPL,
run (current-profile) which makes available all channels.
---

Hi,

Instead I am proposing this, it avoids to load all the module.

For testing, once applied to some Guix checkout, just run:

$ ./pre-inst-env guix pull --disable-authentication -C /tmp/channels.scm -p /tmp/new
$ echo '(use-modules (rde features))' | /tmp/new/bin/guix repl /dev/stdin

where /tmp/channels.scm reads,

(list
(channel
(name 'rde)
(introduction
(make-channel-introduction
"257cebd587b66e4d865b3537a9a88cccd7107c95"
(openpgp-fingerprint
"2841 9AC6 5038 7440 C7E9 2FFA 2208 D209 58C1 DEB0"))))
(channel
(name 'guix)
(url "/home/simon/src/guix/guix")))

tweaking the path to your Guix checkout.

Cheers,
simon


guix/scripts/repl.scm | 1 +
1 file changed, 1 insertion(+)

Toggle diff (16 lines)
diff --git a/guix/scripts/repl.scm b/guix/scripts/repl.scm
index 787c63d48e..fc55d79c41 100644
--- a/guix/scripts/repl.scm
+++ b/guix/scripts/repl.scm
@@ -211,6 +211,7 @@ (define script
((guile)
(save-module-excursion
(lambda ()
+ (current-profile) ;Run (%package-module-path) as explained above.
(set-user-module)
;; Do not exit repl on SIGINT.
((@@ (ice-9 top-repl) call-with-sigint)

base-commit: cb45e9d0dc6cbe6f69a858f71252411610b4ce82
--
2.38.1
S
S
Simon Tournier wrote on 17 Feb 16:10 +0100
control message for bug #61574
(address . control@debbugs.gnu.org)
87v8k05nvq.fsf@gmail.com
merge 61574 61343
quit
S
S
Simon Tournier wrote on 17 Feb 16:21 +0100
Re: bug#61343: [PATCH] scripts: repl: Load (gnu packages) to set up %load-path.
87h6vk5ncu.fsf@gmail.com
Hi Josselin,

To send my comment as v2, I did:

git send-email --to="Josselin Poiret via Bug reports for GNU Guix <bug-guix@gnu.org>" \
--to="Simon Tournier <zimon.toutoune@gmail.com>" \
--to="宋文武 <iyzsong@envs.net>" \
--to="61343@debbugs.gnu.org" \
--cc="Josselin Poiret <dev@jpoiret.xyz>" \
--in-reply-to="e0ffbcbb07fe41a04688223342461aa4d3310142.1676582046.git.dev@jpoiret.xyz" \
v2-0001-scripts-repl-Extend-REPL-load-path-with-all-chann.patch

well, the keys ’cG’ from Emacs-Notmuch. ;-)

The issue is that it triggers a new issue number (that I have merged)
because of,

"Josselin Poiret via Bug reports for GNU Guix <bug-guix@gnu.org>"

Well, I am always confused by some Debbugs internals; I thought that
’in-reply-to’ would be enough to avoid the creation of a new issue.
Hum?

Therefore, my questions are: how do you reply?

And if someone could explain me: Why is Debbugs confused with this
remaining <bug-guix@gnu.org>?

Cheers,
simon
L
L
Ludovic Courtès wrote on 27 Feb 15:01 +0100
Re: bug#61574: [PATCH v2] scripts: repl: Extend REPL %load-path with all channels.
(name . Simon Tournier)(address . zimon.toutoune@gmail.com)
87sferky1k.fsf@gnu.org
Hi Simon,

Simon Tournier <zimon.toutoune@gmail.com> skribis:

Toggle quote (6 lines)
> Reported by 宋文武 <iyzsong@envs.net>.
>
> * guix/scripts/repl.scm (define-command): Before starting the REPL,
> run (current-profile) which makes available all channels.

[...]

Toggle quote (7 lines)
> +++ b/guix/scripts/repl.scm
> @@ -211,6 +211,7 @@ (define script
> ((guile)
> (save-module-excursion
> (lambda ()
> + (current-profile) ;Run (%package-module-path) as explained above.

I tweaked the comment :-) and applied.

Thanks!

Ludo’.
Closed
A
A
Andrew Tropin wrote on 2 Mar 14:44 +0100
Re: bug#61343: bug#61574: [PATCH v2] scripts: repl: Extend REPL %load-path with all channels.
87o7pbs1xn.fsf@trop.in
On 2023-02-27 15:01, Ludovic Courtès wrote:

Toggle quote (23 lines)
> Hi Simon,
>
> Simon Tournier <zimon.toutoune@gmail.com> skribis:
>
>> Fixes <https://bugs.gnu.org/61343>.
>> Reported by 宋文武 <iyzsong@envs.net>.
>>
>> * guix/scripts/repl.scm (define-command): Before starting the REPL,
>> run (current-profile) which makes available all channels.
>
> [...]
>
>> +++ b/guix/scripts/repl.scm
>> @@ -211,6 +211,7 @@ (define script
>> ((guile)
>> (save-module-excursion
>> (lambda ()
>> + (current-profile) ;Run (%package-module-path) as explained above.
>
> I tweaked the comment :-) and applied.
>
> Thanks!

Hi Simon and Ludo!

Thank you for the patch, I also faced this problem and it seems this
change doesn't fix it.

echo '(use-modules (rde features))' | guix repl /dev/stdin

still fails on a7763e067d86908210758aab80d33e4f8b815b1c.

--
Best regards,
Andrew Tropin
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEKEGaxlA4dEDH6S/6IgjSCVjB3rAFAmQAqDQACgkQIgjSCVjB
3rDE6A//axSFCBoXmlCd7bxMl8moMOE19oPSgDYEJ7Ms5NuGSwpSuVctJHJy5Xf4
L7gdFMv5LZ8My8lJ3CsaYkpOXU1pl1wSqAp1zm+b5i7ORffqx/QBEknJeRBFv9d/
nElIWkIlgkg1d0CDs34afomcVy85CCpZ0IXq82aiTi3WXRwlftqevClxPScws8/P
/B/HCPe45TCxgkFycdJDckM2WhOHvhCp8oZZmZa5jDzOmamr9vj/ZXA/oySueC3u
fuLfaHKReT9+r4al92KGGjow0ezHZVzxV27ZHIRQD2ZUAomvlwV/yL1BNg590MIM
p/6i/wGvLMlUbugFyJuHU0Xu/ge71JxCsm3kV2qBGzBFJAeaj+/Z47frLsyxWQTx
+cILD5AHwtTXyFoOGK+F9gLeCU8FNEQRBtlbgfLMjkin7aQBUPFDGOgMpXGAVpfI
PYprUfVTyrE49uv68z58DXocnQsJ2Sx5BrSbxMtcXizbx2XBsX9Cr+1KNMZ5jLHy
VWUHJHJETDrOvdQOhHumPVF8EWZ0SnMXtxgeMUaDmQQriHQuhvAxNWhUkHOlHOOl
vLXQVPs+wS7GEZhP3eJX3DUrvvUkeTVtsnswDQUS2wX6rs/ujKaSDhK9c0nCcRkt
hbO8STr6XgKrPxeoRjtMohp198MBsW0aFcLpjhUreswSD3W8z5U=
=BP2f
-----END PGP SIGNATURE-----

Closed
S
S
Simon Tournier wrote on 2 Mar 20:48 +0100
Re: bug#61574: bug#61343: bug#61574: [PATCH v2] scripts: repl: Extend REPL %load-path with all channels.
87cz5rdjew.fsf@gmail.com
Hi,

I reopen the bug.

On jeu., 02 mars 2023 at 17:44, Andrew Tropin <andrew@trop.in> wrote:

Toggle quote (3 lines)
> Thank you for the patch, I also faced this problem and it seems this
> change doesn't fix it.

Indeed. I have no clue what I messed up. Since I removed the Git
worktree, I am not able to investigate the root of my mistake. I
remember running with ’guix repl -q’ for avoiding spurious ~/.guile
configuration and I remember running “./pre-inst-env guix pull -p
/tmp/new” and checking. Hum?! Anyway!

My apologies.

Back to the issue:

1. The patch does not tweak ’guix repl script.scm’ but only the
interactive part – which also has the issue, I guess.

2. The culprit seems (current-profile) which does not correctly load
%package-module-path as the comment is suggesting,

;; This in turn ensures that
;; (%package-module-path) will contain entries for the channels
;; available in the current profile.


Adding (gnu packages) as Josselin suggested but commenting
(current-profile) make channels available both for scripts and
interactive. For instance this patch works, which means something is
buggy somewhere.

Toggle snippet (35 lines)
1 file changed, 5 insertions(+), 2 deletions(-)
guix/scripts/repl.scm | 7 +++++--

modified guix/scripts/repl.scm
@@ -22,6 +22,7 @@ (define-module (guix scripts repl)
#:use-module (guix ui)
#:use-module (guix scripts)
#:use-module (guix repl)
+ #:use-module (gnu packages)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-26)
#:use-module (srfi srfi-37)
@@ -193,7 +194,8 @@ (define script
;; 'set-program-arguments'. This in turn ensures that
;; (%package-module-path) will contain entries for the channels
;; available in the current profile.
- (current-profile)
+ (pk 'script)
+ ;(current-profile)
(set-program-arguments script)
(set-user-module)
@@ -211,7 +213,8 @@ (define script
((guile)
(save-module-excursion
(lambda ()
- (current-profile) ;Run (%package-module-path) as explained above.
+ (pk 'no-script)
+ ;(current-profile) ;Run (%package-module-path) as explained above.
(set-user-module)
;; Do not exit repl on SIGINT.
((@@ (ice-9 top-repl) call-with-sigint)


Well, I have tried to debug by adding ’pk’ around but I often get error
when “Computing Guix derivation”. Well, the test-error is a long
process here. :-)

As discussed in #42688 [1], instead of
1b179d7876f19f04009a2f9e248ac10711f4c660, the plain call to
(%package-module-path) – instead of (current-profile) – fixes the issue.

This patch works and avoids the full load of (gnu packages), I guess
twice. :-)

Toggle snippet (34 lines)
1 file changed, 3 insertions(+), 3 deletions(-)
guix/scripts/repl.scm | 6 +++---

modified guix/scripts/repl.scm
@@ -27,7 +27,7 @@ (define-module (guix scripts repl)
#:use-module (srfi srfi-37)
#:use-module (ice-9 match)
#:use-module (rnrs bytevectors)
- #:autoload (guix describe) (current-profile)
+ #:autoload (gnu packages) (%package-module-path)
#:autoload (system repl repl) (start-repl)
#:autoload (system repl server)
(make-tcp-server-socket make-unix-domain-server-socket)
@@ -193,7 +193,7 @@ (define script
;; 'set-program-arguments'. This in turn ensures that
;; (%package-module-path) will contain entries for the channels
;; available in the current profile.
- (current-profile)
+ (%package-module-path)
(set-program-arguments script)
(set-user-module)
@@ -211,7 +211,7 @@ (define script
((guile)
(save-module-excursion
(lambda ()
- (current-profile) ;Run (%package-module-path) as explained above.
+ (%package-module-path)
(set-user-module)
;; Do not exit repl on SIGINT.
((@@ (ice-9 top-repl) call-with-sigint)


S
S
Simon Tournier wrote on 2 Mar 19:04 +0100
control message for bug #61574
(address . control@debbugs.gnu.org)
871qm7f2s9.fsf@gmail.com
reopen 61574
tags 61574 - fixed patch
quit
L
L
Ludovic Courtès wrote on 3 Mar 12:14 +0100
Re: bug#61574: bug#61343: bug#61574: [PATCH v2] scripts: repl: Extend REPL %load-path with all channels.
(name . Simon Tournier)(address . zimon.toutoune@gmail.com)
875ybixf2f.fsf@gnu.org
Simon Tournier <zimon.toutoune@gmail.com> skribis:

Toggle quote (20 lines)
> 1 file changed, 3 insertions(+), 3 deletions(-)
> guix/scripts/repl.scm | 6 +++---
>
> modified guix/scripts/repl.scm
> @@ -27,7 +27,7 @@ (define-module (guix scripts repl)
> #:use-module (srfi srfi-37)
> #:use-module (ice-9 match)
> #:use-module (rnrs bytevectors)
> - #:autoload (guix describe) (current-profile)
> + #:autoload (gnu packages) (%package-module-path)
> #:autoload (system repl repl) (start-repl)
> #:autoload (system repl server)
> (make-tcp-server-socket make-unix-domain-server-socket)
> @@ -193,7 +193,7 @@ (define script
> ;; 'set-program-arguments'. This in turn ensures that
> ;; (%package-module-path) will contain entries for the channels
> ;; available in the current profile.
> - (current-profile)
> + (%package-module-path)

Per the comment right above, this change would break the program name
memoization, wouldn’t it?

Ludo’.
?