Subject: Re: bug#72061: Discrepancy when running ‘guix pull’ from different machines

From: Simon Tournier <[email-masked]>
Date: Mon, 02 Sep 2024 22:04:50 +0200

Hi Konrad,

On Mon, 02 Sep 2024 at 17:31, Konrad Hinsen <[email-masked]> wrote:

> The "channels.scm" attached to my last message describes Guix at the
> time "guix time-machine" was launched. It's not the channels file used
> in the time machine command! That one is quite short:

In your previous message, you wrote:

--8<---------------cut here---------------start------------->8---
He gets an error when running an example from one of our exercises:

   guix time-machine --channels=channels.scm -- shell --container --network --manifest=manifest.scm -- jupyter lab
   guix-science/build-system/node.scm:119:2: error: #{ %make-build-system-procedure/abi-check}#: unbound variable
   hint: Did you forget a `use-modules' form?
--8<---------------cut here---------------end--------------->8---

So IIUC, the channels.scm file you provided is not the same channels.scm
file here.  You provided all the revisions to get this Guix and from
this Guix you tries to reach another revision (named channels.scm in the
above but just reads 7b0863f07a113caef26fea13909bd97d250b629e).

Right?

Again IIUC, the picture looks like:

The hypothetical commit introducing the potential breakage:

        records: Do not inline the constructor.
        c14b8636fbac9826115f4524d500536d54c15625
        CommitDate: Sat May 4 19:14:24 2024 +0200 
        Change-Id: Ifd7b4e884e9fbf21c43fb4c3ad963126ef5cb476

The Guix revision (newer than the record modification):

    guix: 325fed4c1514bffd084355455710fcc3f1c8da2c
    CommitDate: Tue Jul 16 10:28:05 2024 -0500

    guix-science: 12eba5aa0c5cbf357c476ef7872e0d562d054eff
    CommitDate: Wed May 22 17:40:02 2024 +0200

And the revision time-machine going in the past:

    guix: 7b0863f07a113caef26fea13909bd97d250b629e
    CommitDate: Wed Jan 3 16:38:57 2024 -0500

>> Is the current failing Guix running a revision older than May?
>
> It's the one defined in channels.scm, meaning commit
> 325fed4c1514bffd084355455710fcc3f1c8da2c, from July 16th 2024. So, no,
> not older than May.

On my machine, it passes too:

--8<---------------cut here---------------start------------->8---
$ guix time-machine -C channels.scm \
    -- time-machine --commit=7b0863f07a113caef26fea13909bd97d250b629e \
    -- describe
  guix 7b0863f
    repository URL: https://git.savannah.gnu.org/git/guix.git
    commit: 7b0863f07a113caef26fea13909bd97d250b629e
--8<---------------cut here---------------end--------------->8---

Well, I do not know how to debug that. :-) Especially without an access
to the machine and considering the person, from the MOOC, is probably
new to Guix.

Assuming ’guix describe’ returns all the channels as mentioned earlier,
this is how to check that the current Guix contains the variable.

--8<---------------cut here---------------start------------->8---
$ thisguix=$(type -P guix)
$ realguix=$(readlink -f $thisguix)
$ themodules=$(guix gc --references $realguix | grep guix-module-union)

$ find -L $themodules -type f -name "*.scm" -exec grep -l 'procedure/abi-check' {} \;
/gnu/store/ljgzk92h0hd09bli5iccg8yfp3gf1hb4-guix-module-union/share/guile/site/3.0/guix/records.scm
--8<---------------cut here---------------end--------------->8---

If nothing is returned, then it would mean that something had been
twisted when compiling (pulling) this current Guix.  In that case, what
would be the output of:

    $realguix describe
    guix gc --references $realguix
    guix gc --references $themodules

?

Else, if the file is returned, it means the error is from elsewhere,
e.g., how the Guile modules are loaded or other.  In that case, it would
require to investigate the derivations.

Well, the hash ljgzk92h0hd09bli5iccg8yfp3gf1hb4 can be different, I
guess.

Cheers,
simon