Subject: Re: bug#32050: invoke (guix build utils) error reporting lacking

From: Maxim Cournoyer <[email-masked]>
Date: Mon, 09 Jul 2018 22:42:08 -0400

Maxim Cournoyer <[email-masked]> writes:

[...]

> It seems that the "system" and "system*" commands of Guile as well as
> our "invoke" do preserve the stdout/stderr, as when testing it manually
> I can see the useful "sh: tar: command not found" message:
>
> scheme@(guile-user)> ,use (guix build utils)
> scheme@(guile-user)> (system "tar xf yanfzfi7rdyf5scf5h65xbkn7xg0nnbn-docbook-dsssl-doc-1.79.tar.bz2")
> sh: tar: command not found
> $1 = 32512
> scheme@(guile-user)> (invoke "tar" "xf" "yanfzfi7rdyf5scf5h65xbkn7xg0nnbn-docbook-dsssl-doc-1.79.tar.bz2")
> In execvp of tar: No such file or directory
> guix/build/utils.scm:616:6: In procedure invoke:
> Throw to key `srfi-34' with args `(#<condition &invoke-error [program: "tar" arguments: ("xf" "yanfzfi7rdyf5scf5h65xbkn7xg0nnbn-docbook-dsssl-doc-1.79.tar.bz2") exit-status: 127 term-signal: #f stop-signal: #f] 1e3dc40>)'.
>
> Entering a new prompt.  Type `,bt' for a backtrace or `,q' to continue.
>
>
> Unfortunately, when called from the builder side of Guix, this
> information seems to be lost:
>
> ./pre-inst-env guix build --no-build-hook --check docbook-dsssl-doc
> @ build-started /gnu/store/4ra70nwni8mcjyd2wfx7fqvsl4fpfs5m-docbook-dsssl-doc-1.79.drv - x86_64-linux /var/log/guix/drvs/4r//a70nwni8mcjyd2wfx7fqvsl4fpfs5m-docbook-dsssl-doc-1.79.drv.bz2
> Backtrace:
>            2 (primitive-load "/gnu/store/kj0nr8i617gjwypalfs065jllhm?")
> In ice-9/eval.scm:
>    191:35  1 (_ #f)
> In /gnu/store/xlj36j9dw581iah51iyjgi75iikrj55h-module-import/guix/build/utils.scm:
>     616:6  0 (invoke _ . _)
>
> /gnu/store/xlj36j9dw581iah51iyjgi75iikrj55h-module-import/guix/build/utils.scm:616:6: In procedure invoke:
> Throw to key `srfi-34' with args `(#<condition &invoke-error [program: "tar" arguments: ("-xf" "/gnu/store/yanfzfi7rdyf5scf5h65xbkn7xg0nnbn-docbook-dsssl-doc-1.79.tar.bz2" "--strip-components=1" "--no-same-owner" "-C" "/gnu/store/ppf9bhzyqphmc9cvwhq8pc3yfir2qd3m-docbook-dsssl-doc-1.79" "docbook-dsssl-1.79/doc") exit-status: 127 term-signal: #f stop-signal: #f] 68fcc0>)'.
> builder for `/gnu/store/4ra70nwni8mcjyd2wfx7fqvsl4fpfs5m-docbook-dsssl-doc-1.79.drv' failed with exit code 1
> @ build-failed /gnu/store/4ra70nwni8mcjyd2wfx7fqvsl4fpfs5m-docbook-dsssl-doc-1.79.drv - 1 builder for `/gnu/store/4ra70nwni8mcjyd2wfx7fqvsl4fpfs5m-docbook-dsssl-doc-1.79.drv' failed with exit code 1
> guix build: error: build failed: build of
> `/gnu/store/4ra70nwni8mcjyd2wfx7fqvsl4fpfs5m-docbook-dsssl-doc-1.79.drv'
> failed
>
> Could it be preserved? It'd be very useful when debugging :)

I've investigated a bit, and as far as I can see by reading guix
sources, the build log output would be displayed and any error reported
by the `process-stderr' procedure in (guix store). This procedure
behavior seems to depend closely on that of the guix daemon (server), so
the problem could lie on the daemon side as well, so that's where I'll
try digging next.

Maxim