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

From: Ludovic Courtès <[email-masked]>
Date: Thu, 11 Jul 2024 17:33:24 +0200

Ludovic Courtès <[email-masked]> skribis:

> The “right” one:
>
> $ setarch -R guix time-machine -q  --commit=0ff72d105 -- build avahi -d
> /gnu/store/fy39r2y8dg2ycdzvnbqyfd1kpandnpxb-avahi-0.8.drv
>
>
> The “wrong” one:
>
> $ setarch -R guix time-machine -q  --commit=0ff72d105 -- build avahi -d
> /gnu/store/vhj8f01bwddshnc75ar5z62ndcij4pgy-avahi-0.8.drv

Turns out the “right” one uses ‘builtin:git-download’, the “wrong” one
doesn’t:

--8<---------------cut here---------------start------------->8---
$ guix time-machine -q  --commit=0ff72d105 -- repl 
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)> ,use(guix)
scheme@(guix-user)> (define set-builders! (record-modifier (@@ (guix store) <store-connection>) 'built-in-builders))
;;; <stdin>:2:0: warning: possibly unused local top-level variable `set-builders!'
scheme@(guix-user)> (define s (open-connection))
;;; <stdin>:3:0: warning: possibly unused local top-level variable `s'
scheme@(guix-user)> (set-builders! s (delay '("download")))
$1 = #<promise #<procedure 19cdf418 at <unknown port>:4:17 ()>>
scheme@(guix-user)> ,use(gnu packages avahi)
scheme@(guix-user)> ,run-in-store (lower-object avahi)
error: #{ %make-platform-procedure/abi-check}#: unbound variable
hint: Did you forget a `use-modules' form?

$2 = #<derivation /gnu/store/fy39r2y8dg2ycdzvnbqyfd1kpandnpxb-avahi-0.8.drv => /gnu/store/4gzpnfm6pw7cwwgrmswrsibbzdxz1j1w-avahi-0.8 7fad68382af0>
scheme@(guix-user)> (run-with-store s (lower-object avahi))
$3 = #<derivation /gnu/store/vhj8f01bwddshnc75ar5z62ndcij4pgy-avahi-0.8.drv => /gnu/store/64f62b0klc3mrncad6x79cwfd3smmf8z-avahi-0.8 7fad68d15230>
--8<---------------cut here---------------end--------------->8---

QED.

Presumably whether ‘builtin:git-download’ is used changes the DAG
traversal order, which could explain this discrepancy.

It does mean that all the users running an old guix-daemon find
themselves having no substitutes for ‘guix pull’.  Ouch.

Ludo’.