Subject: bug#48045: guix challenge error

From: Ludovic Courtès <[email-masked]>
Date: Wed, 28 Apr 2021 23:20:02 +0200

Hi,

Bone Baboon <[email-masked]> skribis:

> On an x86_64 computer when I run `guix challenge` I get this error:
>
> ```
> ...
> /gnu/store/5ds5bli4p6gja2yzmzzc0sik1kzrasp9-guix-extra contents differ:
>   local hash: 0aacxb6n0vrki8lb7f02r3m756cpc650hbihj9dpklkpvlgasqad
>   https://ci.guix.gnu.org/nar/lzip/5ds5bli4p6gja2yzmzzc0sik1kzrasp9-guix-extra: 0anncy58048fvbbi40wbfrd1dc6wk3zshx63p6jn2f03ljwakbkj
>  ci.guix.gnu.org  2.2MiB      416KiB/s 00:06 [##################] 101.3%
> Backtrace:                                                             
> In srfi/srfi-1.scm:
>     634:9 19 (for-each #<procedure 7fe80c8c1e40 at guix/scripts/cha…> …)
> In guix/scripts/challenge.scm:
>     299:2 18 (report-differing-files _)
>     279:2 17 (differing-files #<<comparison-report> item: "/gnu/stor…>)
> In srfi/srfi-1.scm:
>    586:17 16 (map1 (#<<narinfo> path: "/gnu/store/5ds5bli4p6gja2yzm…>))
> In guix/scripts/challenge.scm:
>     262:4 15 (call-with-nar _ _)
> In guix/utils.scm:
>     253:8 14 (call-with-decompressed-port _ _ _)
> In guix/serialization.scm:
>     424:4 13 (fold-archive _ _ _ _)
>    468:33 12 (read "" _)
>    468:33 11 (read "/guix" _)
>    442:24 10 (read "/guix/self.go" _)
> In guix/scripts/challenge.scm:
>     200:4  9 (_ "/guix/self.go" regular _ (("/guix/scripts.go" # …) …))
> In guix/serialization.scm:
>    247:20  8 (dump #<input: string 7fe80d3471c0> #<output: string 7…> …)
> In unknown file:
>            7 (get-bytevector-n! #<input: string 7fe80d3471c0> # 0 #)
> In lzlib.scm:
>     501:4  6 (lzread! #<lz-decoder 7fe80dcef540> #<input: string 7f…> …)
> In unknown file:
>            5 (get-bytevector-n #<input: string 7fe80d347230> 65538)
> In guix/progress.scm:
>    362:23  4 (read! _ _ _)
>    178:12  3 (display-download-progress _ _ #:tty? _ #:start-time _ # …)
> In unknown file:
>            2 (make-string -1 #\space)

The bug comes from the fact that it’s gone beyond 100%.  We could solve
it by programming more defensively, but it’d be great to see where the
problem comes from.

Can you reproduce it with:

  ./pre-inst-env guix challenge /gnu/store/5ds5bli4p6gja2yzmzzc0sik1kzrasp9-guix-extra

?

If so, could you apply the patch below and send the output of this
command?  We can discuss it on IRC if anything’s unclear.

Thanks,
Ludo’.

diff --git a/guix/scripts/challenge.scm b/guix/scripts/challenge.scm
index 4ec3be99ca..3cafc478a0 100644
--- a/guix/scripts/challenge.scm
+++ b/guix/scripts/challenge.scm
@@ -252,11 +252,12 @@ taken since we do not import the archives."
   "Call PROC with an input port from which it can read the nar pointed to by
 NARINFO."
   (let*-values (((uri compression size)
-                 (narinfo-best-uri narinfo))
-                ((port response)
+                 (narinfo-best-uri narinfo #:fast-decompression? #t))
+                ((port actual-size)
                  (http-fetch uri)))
     (define reporter
-      (progress-reporter/file (narinfo-path narinfo) size
+      (progress-reporter/file (narinfo-path narinfo)
+                              (max (pk 's size) (pk 'rs actual-size))
                               #:abbreviation (const (uri-host uri))))
 
     (define result