'guix substitute' crashes in zstd on transient networking issues

  • Open
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Matthias
Owner
unassigned
Submitted by
Matthias
Severity
important
M
M
Matthias wrote on 16 Jun 2022 06:09
Guix crashes at while downloading an update
(address . bug-guix@gnu.org)
92fd6760-bbdc-b2d3-5364-4b69a7ae3e4d@smartflyer.de
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

PS: The "You found a bug" message is awesome! Instead of getting angry
at a not working program, I got excited to have found something new.
L
L
Ludovic Courtès wrote on 26 Jun 2022 17:28
(name . Matthias)(address . matthias.kaak@smartflyer.de)(address . 56014@debbugs.gnu.org)
8735frsau3.fsf@gnu.org
Hi Matthias,

Matthias <matthias.kaak@smartflyer.de> skribis:

Toggle quote (12 lines)
> 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

[...]

Toggle quote (39 lines)
> 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:

Toggle snippet (5 lines)
scheme@(guile-user)> ,use(zstd)
scheme@(guile-user)> (error-name 18446744073709551544)
$23 = "Src size is incorrect"

Downloading and uncompressing the same thing works like this:

Toggle snippet (4 lines)
$ wget -qO - https://ci.guix.gnu.org/nar/zstd/rbb9h501zyf8mg1hz47plql80gsl99za-apr-1.7.0 | zstd -d |sha256sum
e15bd1d4f4628969c461d99e23d27d76fb0d77b709eb393b9b2b2bcac67a8b19 -

Likewise with Guile + Guile-zstd:

Toggle snippet (4 lines)
$ 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 -

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

Toggle quote (5 lines)
> 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 <bug-guix@gnu.org>.

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’.
L
L
Ludovic Courtès wrote on 26 Jun 2022 17:29
control message for bug #56014
(address . control@debbugs.gnu.org)
871qvbsat0.fsf@gnu.org
retitle 56014 'guix substitute' crashes in zstd on transient networking issues
quit
L
L
Ludovic Courtès wrote on 3 Jul 2022 22:56
(address . control@debbugs.gnu.org)
877d4tzzi3.fsf@gnu.org
severity 56014 important
quit
?