GNU bug report logs - #50441
Wrong build directory number shown in environment-variables file

Previous Next

Package: guix;

Reported by: Christine Lemmer-Webber <cwebber <at> dustycloud.org>

Date: Mon, 6 Sep 2021 21:25:02 UTC

Severity: normal

To reply to this bug, email your comments to 50441 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guix <at> gnu.org:
bug#50441; Package guix. (Mon, 06 Sep 2021 21:25:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Christine Lemmer-Webber <cwebber <at> dustycloud.org>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Mon, 06 Sep 2021 21:25:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Christine Lemmer-Webber <cwebber <at> dustycloud.org>
To: bug-guix <at> gnu.org
Subject: Wrong build directory number shown in environment-variables file
Date: Mon, 06 Sep 2021 17:22:55 -0400
I was doing guix build with "--keep-missing" and looking around in a few
of the output directories.  I was peeking in:

  /tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-4

But wait... the "environment-variables" file says:

#+BEGIN_SRC sh
export TEMP=\
"/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
export TEMPDIR=\
"/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
export TMP=\
"/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
export TMPDIR=\
"/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
#+END_SRC

Now wait a minute.  Look at that last number.  What the hell is going on
here?  Is this a bug in Guix?  Why is it pointing at -0 in the -4 build
directory?

Does this point at a more serious issue?  What's going on?




Information forwarded to bug-guix <at> gnu.org:
bug#50441; Package guix. (Tue, 07 Sep 2021 04:39:02 GMT) Full text and rfc822 format available.

Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Tobias Geerinckx-Rice <me <at> tobias.gr>
To: Christine Lemmer-Webber <cwebber <at> dustycloud.org>
Cc: 50441 <at> debbugs.gnu.org, bug-guix <at> gnu.org
Subject: Re: bug#50441: Wrong build directory number shown in
 environment-variables file
Date: Tue, 07 Sep 2021 06:34:43 +0200
[Message part 1 (text/plain, inline)]
Christine,

Christine Lemmer-Webber 写道:
> I was doing guix build with "--keep-missing" and looking around 
> in a few
> of the output directories.  I was peeking in:
>
>   /tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-4
>
> But wait... the "environment-variables" file says:
>
> #+BEGIN_SRC sh
> export TEMP=\
> "/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"

Part of the build environment isolation/reproducibility is that 
processes inside it always see a build directory ending in ‘-0’, 
regardless of the file name on the host system.

Kind regards,

T G-R
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#50441; Package guix. (Tue, 07 Sep 2021 04:39:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-guix <at> gnu.org:
bug#50441; Package guix. (Tue, 07 Sep 2021 04:46:01 GMT) Full text and rfc822 format available.

Message #14 received at 50441 <at> debbugs.gnu.org (full text, mbox):

From: Sarah Morgensen <iskarian <at> mgsn.dev>
To: Christine Lemmer-Webber <cwebber <at> dustycloud.org>
Cc: 50441 <at> debbugs.gnu.org
Subject: Re: bug#50441: Wrong build directory number shown in
 environment-variables file
Date: Mon, 06 Sep 2021 21:44:59 -0700
Hello Christine,

Christine Lemmer-Webber <cwebber <at> dustycloud.org> writes:

> I was doing guix build with "--keep-missing" and looking around in a few
> of the output directories.  I was peeking in:
>
>   /tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-4
>
> But wait... the "environment-variables" file says:
>
> #+BEGIN_SRC sh
> export TEMP=\
> "/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
> export TEMPDIR=\
> "/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
> export TMP=\
> "/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
> export TMPDIR=\
> "/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
> #+END_SRC
>
> Now wait a minute.  Look at that last number.  What the hell is going on
> here?  Is this a bug in Guix?  Why is it pointing at -0 in the -4 build
> directory?
>
> Does this point at a more serious issue?  What's going on?

I've definitely noticed this before as well, and had to work around it
(I needed to inspect temp caches).  Thanks for actually sending a bug
report :)

I'm not at all familiar with the nix code, but it looks like this might
be related:

nix/libstore/build.cc:1654
--8<---------------cut here---------------start------------->8---
    /* In a sandbox, for determinism, always use the same temporary
       directory. */
    tmpDirInSandbox = useChroot ? canonPath("/tmp", true) + "/guix-build-" + drvName + "-0" : tmpDir;

    /* For convenience, set an environment pointing to the top build
       directory. */
    env["NIX_BUILD_TOP"] = tmpDirInSandbox;

    /* Also set TMPDIR and variants to point to this directory. */
    env["TMPDIR"] = env["TEMPDIR"] = env["TMP"] = env["TEMP"] = tmpDirInSandbox;

    /* Explicitly set PWD to prevent problems with chroot builds.  In
       particular, dietlibc cannot figure out the cwd because the
       inode of the current directory doesn't appear in .. (because
       getdents returns the inode of the mount point). */
    env["PWD"] = tmpDirInSandbox;
--8<---------------cut here---------------end--------------->8---

I'm not entirely sure what's going on.  I think we build in chroot by
default, which would explain why the temp vars get set to "-0" even
though everything else seems to work okay.

--
Sarah




Information forwarded to bug-guix <at> gnu.org:
bug#50441; Package guix. (Tue, 07 Sep 2021 14:27:02 GMT) Full text and rfc822 format available.

Message #17 received at 50441 <at> debbugs.gnu.org (full text, mbox):

From: Christine Lemmer-Webber <cwebber <at> dustycloud.org>
To: Sarah Morgensen <iskarian <at> mgsn.dev>
Cc: 50441 <at> debbugs.gnu.org
Subject: Re: bug#50441: Wrong build directory number shown in
 environment-variables file
Date: Tue, 07 Sep 2021 10:25:59 -0400
Loops like Tobias gave the explanation in their reply:

> Part of the build environment isolation/reproducibility is that
> processes inside it always see a build directory ending in ‘-0’, 
> regardless of the file name on the host system.

Sarah Morgensen <iskarian <at> mgsn.dev> writes:

> Hello Christine,
>
> Christine Lemmer-Webber <cwebber <at> dustycloud.org> writes:
>
>> I was doing guix build with "--keep-missing" and looking around in a few
>> of the output directories.  I was peeking in:
>>
>>   /tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-4
>>
>> But wait... the "environment-variables" file says:
>>
>> #+BEGIN_SRC sh
>> export TEMP=\
>> "/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
>> export TEMPDIR=\
>> "/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
>> export TMP=\
>> "/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
>> export TMPDIR=\
>> "/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
>> #+END_SRC
>>
>> Now wait a minute.  Look at that last number.  What the hell is going on
>> here?  Is this a bug in Guix?  Why is it pointing at -0 in the -4 build
>> directory?
>>
>> Does this point at a more serious issue?  What's going on?
>
> I've definitely noticed this before as well, and had to work around it
> (I needed to inspect temp caches).  Thanks for actually sending a bug
> report :)
>
> I'm not at all familiar with the nix code, but it looks like this might
> be related:
>
> nix/libstore/build.cc:1654
>
>     /* In a sandbox, for determinism, always use the same temporary
>        directory. */
>     tmpDirInSandbox = useChroot ? canonPath("/tmp", true) + "/guix-build-" + drvName + "-0" : tmpDir;
>
>     /* For convenience, set an environment pointing to the top build
>        directory. */
>     env["NIX_BUILD_TOP"] = tmpDirInSandbox;
>
>     /* Also set TMPDIR and variants to point to this directory. */
>     env["TMPDIR"] = env["TEMPDIR"] = env["TMP"] = env["TEMP"] = tmpDirInSandbox;
>
>     /* Explicitly set PWD to prevent problems with chroot builds.  In
>        particular, dietlibc cannot figure out the cwd because the
>        inode of the current directory doesn't appear in .. (because
>        getdents returns the inode of the mount point). */
>     env["PWD"] = tmpDirInSandbox;
>
> I'm not entirely sure what's going on.  I think we build in chroot by
> default, which would explain why the temp vars get set to "-0" even
> though everything else seems to work okay.





Information forwarded to bug-guix <at> gnu.org:
bug#50441; Package guix. (Tue, 07 Sep 2021 14:29:01 GMT) Full text and rfc822 format available.

Message #20 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Christine Lemmer-Webber <cwebber <at> dustycloud.org>
To: Tobias Geerinckx-Rice <me <at> tobias.gr>
Cc: 50441 <at> debbugs.gnu.org, bug-guix <at> gnu.org
Subject: Re: bug#50441: Wrong build directory number shown in
 environment-variables file
Date: Tue, 07 Sep 2021 10:26:48 -0400
Hi Tobias!

Tobias Geerinckx-Rice <me <at> tobias.gr> writes:

> [[PGP Signed Part:Undecided]]
> Christine,
>
> Christine Lemmer-Webber 写道:
>> I was doing guix build with "--keep-missing" and looking around in a
>> few
>> of the output directories.  I was peeking in:
>>
>>   /tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-4
>>
>> But wait... the "environment-variables" file says:
>>
>> #+BEGIN_SRC sh
>> export TEMP=\
>> "/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
>
> Part of the build environment isolation/reproducibility is that
> processes inside it always see a build directory ending in ‘-0’, 
> regardless of the file name on the host system.
>
> Kind regards,
>
> T G-R
>
> [[End of PGP Signed Part]]

This makes sense in general, though I wonder if when using --keep-failed
if environment-variables should dump out something different, since
that file is around for debugging, and sourcing it might set up the
wrong paths I guess?  What do you think?




Information forwarded to bug-guix <at> gnu.org:
bug#50441; Package guix. (Tue, 07 Sep 2021 14:29:01 GMT) Full text and rfc822 format available.

Information forwarded to bug-guix <at> gnu.org:
bug#50441; Package guix. (Tue, 14 Sep 2021 07:48:02 GMT) Full text and rfc822 format available.

Message #26 received at 50441 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Christine Lemmer-Webber <cwebber <at> dustycloud.org>
Cc: 50441 <at> debbugs.gnu.org, Tobias Geerinckx-Rice <me <at> tobias.gr>
Subject: Re: bug#50441: Wrong build directory number shown in
 environment-variables file
Date: Tue, 14 Sep 2021 09:47:01 +0200
Hi,

Christine Lemmer-Webber <cwebber <at> dustycloud.org> skribis:

> Tobias Geerinckx-Rice <me <at> tobias.gr> writes:

[...]

>>> #+BEGIN_SRC sh
>>> export TEMP=\
>>> "/tmp/guix-build-u-boot-mnt-reform2-2021.06.drv-0"
>>
>> Part of the build environment isolation/reproducibility is that
>> processes inside it always see a build directory ending in ‘-0’, 
>> regardless of the file name on the host system.
>>
>> Kind regards,
>>
>> T G-R
>>
>> [[End of PGP Signed Part]]
>
> This makes sense in general, though I wonder if when using --keep-failed
> if environment-variables should dump out something different, since
> that file is around for debugging, and sourcing it might set up the
> wrong paths I guess?  What do you think?

There’s no good solution I’m afraid.  Directory names within the build
environment must be fixed to ensure reproducibility, as Tobias writes;
yet, the daemon shouldn’t overwrite directories that happen to already
exist in the “real” /tmp.

Thanks,
Ludo’.




This bug report was last modified 2 years and 217 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.