Subject: bug#56014: Guix crashes at while downloading an update

From: Ludovic Courtès <[email-masked]>
Date: Sun, 26 Jun 2022 17:28:36 +0200

Hi Matthias,

Matthias <[email-masked]> skribis:

> I just downloaded the QEMU image for the Guix distribution and wanted
> to try it out.  I use QEMU and AQEMU from the current Debian Testing.
>
> To try out the package manager I installed the Lynx terminal
> browser. That worked without any problems (lynx is working), but guix
> said I should update the system with the commands "guix pull" and
> "guix package -u".  Excited to be able to explore more features I
> typed in the first command, but while downloading the package "apr" it
> crashed.  See the attachment for guix' output.
>
> Guix version ("guix --version"): 1.3.0-1.771b866

[...]

>  xz-5.2.5  308KiB                                                                 568.9MiB/s 00:00 [##################] 100.0%
>  glib-2.70.2  2.7MiB                                                               4.68GiB/s 00:00 [##################] 100.0%
>  apr-1.7.0  314KiB                                                                581.4MiB/s 00:00 [#######           ]  40.7%Backtrace:
> In guix/serialization.scm:
>    468:33 19 (read "/gnu/store/rbb9h501zyf8mg1hz47plql80gsl99za-apr?" ?)
>    468:33 18 (read "/gnu/store/rbb9h501zyf8mg1hz47plql80gsl99za-apr?" ?)
>    442:24 17 (read "/gnu/store/rbb9h501zyf8mg1hz47plql80gsl99za-apr?" ?)
>    525:24 16 (_ "/gnu/store/rbb9h501zyf8mg1hz47plql80gsl99za-apr-1.?" ?)
> In guix/store/deduplication.scm:
>     227:2 15 (dump-file/deduplicate "/gnu/store/rbb9h501zyf8mg1hz47?" ?)
> In ice-9/ports.scm:
>    463:17 14 (call-with-output-file _ _ #:binary _ #:encoding _)
> In guix/store/deduplication.scm:
>    232:10 13 (_ _)
> In guix/serialization.scm:
>     261:6 12 (dump _)
>    247:20 11 (dump #<input: string 7fd40c2b5af0> #<output: string 7?> ?)
> In unknown file:
>           10 (get-bytevector-n! #<input: string 7fd40c2b5af0> # 0 #)
> In guix/store/deduplication.scm:
>    203:22  9 (read! #vu8(47 42 32 76 105 99 101 110 115 101 100 32 ?) ?)
> In unknown file:
>            8 (get-bytevector-n! #<input: string 7fd409cdcd20> # 0 #)
> In gcrypt/hash.scm:
>    223:13  7 (read! #vu8(47 42 32 76 105 99 101 110 115 101 100 32 ?) ?)
> In unknown file:
>            6 (get-bytevector-n! #<input: string 7fd409cdce70> # 0 #)
> In zstd.scm:
>    256:12  5 (read! _ _ _)
> In ice-9/boot-9.scm:
>   1669:16  4 (raise-exception _ #:continuable? _)
>   1669:16  3 (raise-exception _ #:continuable? _)
>   1764:13  2 (_ #<&compound-exception components: (#<&error> #<&irri?>)
>   1669:16  1 (raise-exception _ #:continuable? _)
>   1669:16  0 (raise-exception _ #:continuable? _)
>
> ice-9/boot-9.scm:1669:16: In procedure raise-exception:
> Throw to key `zstd-error' with args `(decompress! 18446744073709551544)'.

This is the root cause; its meaning:

--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> ,use(zstd)
scheme@(guile-user)> (error-name 18446744073709551544)
$23 = "Src size is incorrect"
--8<---------------cut here---------------end--------------->8---

Downloading and uncompressing the same thing works like this:

--8<---------------cut here---------------start------------->8---
$ wget -qO - https://ci.guix.gnu.org/nar/zstd/rbb9h501zyf8mg1hz47plql80gsl99za-apr-1.7.0 | zstd -d |sha256sum 
e15bd1d4f4628969c461d99e23d27d76fb0d77b709eb393b9b2b2bcac67a8b19  -
--8<---------------cut here---------------end--------------->8---

Likewise with Guile + Guile-zstd:

--8<---------------cut here---------------start------------->8---
$ wget -qO - https://ci.guix.gnu.org/nar/zstd/rbb9h501zyf8mg1hz47plql80gsl99za-apr-1.7.0 | guile -c '(use-modules (zstd) (guix build utils)) (call-with-zstd-input-port (current-input-port) (lambda (port) (dump-port port (current-output-port))))' | sha256sum 
e15bd1d4f4628969c461d99e23d27d76fb0d77b709eb393b9b2b2bcac67a8b19  -
--8<---------------cut here---------------end--------------->8---

So my guess is that the connection was closed early for some reason,
leading to a decompression error down the road.

> guix pull: error: You found a bug: the program '/gnu/store/aaik6090bx4vdp9rn2g6w89296my5445-compute-guix-derivation'
> failed to compute the derivation for Guix (version: "128697d43c21eb229ff5413f1c4cf79ae1a9dcd4"; system: "x86_64-linux";
> host version: "1.3.0-1.771b866"; pull-version: 1).
> Please report the COMPLETE output above by email to <[email-masked]>.

The bug here is that Guix should (1) handle transient networking issues
gracefully, and (2) retry downloads instead of aborting.

To be continued…

Thanks for reporting the issue!

Ludo’.