From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxim Cournoyer Subject: bug#32050: invoke (guix build utils) error reporting lacking Date: Sun, 08 Jul 2018 11:59:25 -0400 Message-ID: <87h8l9k9b6.fsf@gmail.com> References: <87fu0zkvv9.fsf@apteryx.i-did-not-set--mail-host-address--so-tickle-me> <878t6rkuuf.fsf_-_@gmail.com> <87efginbcz.fsf@netris.org> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:35284) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fcC6Y-0002Sf-8q for bug-guix@gnu.org; Sun, 08 Jul 2018 12:00:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fcC6V-0004RG-73 for bug-guix@gnu.org; Sun, 08 Jul 2018 12:00:06 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:43372) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fcC6V-0004Qy-2a for bug-guix@gnu.org; Sun, 08 Jul 2018 12:00:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1fcC6U-0001iC-L4 for bug-guix@gnu.org; Sun, 08 Jul 2018 12:00:02 -0400 Sender: "Debbugs-submit" Resent-Message-ID: In-Reply-To: <87efginbcz.fsf@netris.org> (Mark H. Weaver's message of "Wed, 04 Jul 2018 13:45:32 -0400") List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org Sender: "bug-Guix" To: Mark H Weaver Cc: 32050@debbugs.gnu.org Hi Mark, Mark H Weaver writes: [...] > Did you check to see if the extraction actually succeeded? > > In this case, I don't see how it could have. When using 'tar' from > within 'trivial-build-system', you need to add 'bzip2' to PATH, or else > 'tar' will fail because it can't find 'bzip2'. There are many examples > of setting PATH in (gnu packages fonts). OK. I now understand that the trivial-build-system does exactly nothing for us, so it doesn't even sets the "PATH" environment variable. This wasn't obvious to me, thank for pointing it out! > Changing 'system*' to 'invoke' allowed you to see that something went > wrong. Right, my confusion stemmed from the unset PATH variable; tar itself would return exit code 127 (command not found) in the trivial-build-system, but I couldn't reproduce directly in a containerized guix environment because there is a profile generation hook there which does set the PATH. >> The error reported by `invoke' isn't accurate, and mutes important >> output from the program invoked. >> >> Example of a failed tar extraction: >> >> /gnu/store/xlj36j9dw581iah51iyjgi75iikrj55h-module-import/guix/build/utils.scm:616:6: In procedure invoke: >> Throw to key `srfi-34' with args `(#> [program: "tar" arguments: ("xf" >> "/gnu/store/yanfzfi7rdyf5scf5h65xbkn7xg0nnbn-docbook-dsssl-doc-1.79.tar.bz2" >> "--strip-components=1" "-C" >> "/gnu/store/rw7yzjk1wffza65z6l6rnn25qg97jvh1-docbook-dsssl-doc-1.79" >> "docbook-dssl-1.79/doc") exit-status: 127 term-signal: #f >> stop-signal: #f] 68fc80>)'. 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: --8<---------------cut here---------------start------------->8--- 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 `(#)'. Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue. --8<---------------cut here---------------end--------------->8--- Unfortunately, when called from the builder side of Guix, this information seems to be lost: --8<---------------cut here---------------start------------->8--- ./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 `(#)'. 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 --8<---------------cut here---------------end--------------->8--- Could it be preserved? It'd be very useful when debugging :) Maxim