unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* bug#23376: Bootstrap failure on'binutils-cross-boot0-2.25.1: cannot find -lstdc++
       [not found] <87r3dte4kx.fsf@gnu.org>
@ 2016-05-03 20:21 ` Ludovic Courtès
  2016-05-04  8:07   ` Roel Janssen
  0 siblings, 1 reply; 3+ messages in thread
From: Ludovic Courtès @ 2016-05-03 20:21 UTC (permalink / raw)
  To: Roel Janssen; +Cc: 23376

Roel Janssen <roel@gnu.org> skribis:

> In an attempt to bootstrap Guix, I repeatedly encounter the same error.
> I attached the last 5000 lines of the build output of the command:
>   guix build bootstrap-tarballs
>
> When running the daemon, I used the following environment variables:
> NIX_STORE_DIR=/hpc/store
> NIX_CONF_DIR=/hpc/etc/guix
> NIX_STATE_DIR=/hpc/var/guix
> NIX_LOG_DIR=/hpc/log

And TMPDIR?

(For recent versions of guix-daemon, TMPDIR has no effect on the build
chroot.  I assume this uses a recent guix-daemon.)

Note that these environment variables are undocumented; use at your own
risks.  :-)

> The same environment variables (and values) were set when running the
> guix build command.
>
> What am I doing that causes the build to fail?

Did you pass the --disable-chroot or --chroot-directory options of
guix-daemon?

The log you sent suggests a failure to build (@@ (gnu packages
commencement) gcc-final) because the directory is called “gcc-4.9.3”,
not “gcc-cross-boot0-4.9.3”.  However, it also shows that
binutils-cross-boot0 is used, which is not the case for ‘gcc-final’.

What Guix commit are you using?  Could you identify more precisely
what’s failing to build?  For instance, you can run:

  guix build -e '(@@ (gnu packages commencement) gcc-boot0)'
  guix build -e '(@@ (gnu packages commencement) gcc-final)'

Thanks in advance,
Ludo’.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#23376: Bootstrap failure on'binutils-cross-boot0-2.25.1: cannot find -lstdc++
  2016-05-03 20:21 ` bug#23376: Bootstrap failure on'binutils-cross-boot0-2.25.1: cannot find -lstdc++ Ludovic Courtès
@ 2016-05-04  8:07   ` Roel Janssen
  2016-05-05 15:40     ` Ludovic Courtès
  0 siblings, 1 reply; 3+ messages in thread
From: Roel Janssen @ 2016-05-04  8:07 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 23376

[-- Attachment #1: build-gcc-boot0.log --]
[-- Type: text/plain, Size: 208 bytes --]

/hpc/store/fh67pcp88zm2d7aqrvb5xr6iyh9dgjbh-gcc-cross-boot0-4.9.3
/hpc/store/xy1pzgmhfk2v0rb2yfyl4v91bsyxwf4h-gcc-cross-boot0-4.9.3-lib
/hpc/store/5h2ihlfjcdxpq6w59kf3ldbralxd3k2h-gcc-cross-boot0-4.9.3-debug

[-- Attachment #2: build-gcc-final.log.gz --]
[-- Type: application/gzip, Size: 532830 bytes --]

[-- Attachment #3: guix-userspace.patch --]
[-- Type: text/x-patch, Size: 3547 bytes --]

diff -crB guix-master/nix/libstore/build.cc guix-userspace/nix/libstore/build.cc
*** guix-master/nix/libstore/build.cc	Wed May  4 09:56:21 2016
--- guix-userspace/nix/libstore/build.cc	Mon Apr 25 16:39:29 2016
***************
*** 1811,1818 ****
          buildUser.kill();
  
          /* Change ownership of the temporary build directory. */
!         if (chown(tmpDir.c_str(), buildUser.getUID(), buildUser.getGID()) == -1)
!             throw SysError(format("cannot change ownership of '%1%'") % tmpDir);
      }
  
      if (useChroot) {
--- 1811,1818 ----
          buildUser.kill();
  
          /* Change ownership of the temporary build directory. */
!         //if (chown(tmpDir.c_str(), buildUser.getUID(), buildUser.getGID()) == -1)
!         //    throw SysError(format("cannot change ownership of '%1%'") % tmpDir);
      }
  
      if (useChroot) {
***************
*** 1832,1839 ****
          if (mkdir(chrootRootDir.c_str(), 0750) == -1)
              throw SysError(format("cannot create ‘%1%’") % chrootRootDir);
  
!         if (chown(chrootRootDir.c_str(), 0, buildUser.getGID()) == -1)
!             throw SysError(format("cannot change ownership of ‘%1%’") % chrootRootDir);
  
          /* Create a writable /tmp in the chroot.  Many builders need
             this.  (Of course they should really respect $TMPDIR
--- 1832,1839 ----
          if (mkdir(chrootRootDir.c_str(), 0750) == -1)
              throw SysError(format("cannot create ‘%1%’") % chrootRootDir);
  
!         //if (chown(chrootRootDir.c_str(), 0, buildUser.getGID()) == -1)
!         //    throw SysError(format("cannot change ownership of ‘%1%’") % chrootRootDir);
  
          /* Create a writable /tmp in the chroot.  Many builders need
             this.  (Of course they should really respect $TMPDIR
***************
*** 1889,1896 ****
          createDirs(chrootStoreDir);
          chmod_(chrootStoreDir, 01775);
  
!         if (chown(chrootStoreDir.c_str(), 0, buildUser.getGID()) == -1)
!             throw SysError(format("cannot change ownership of ‘%1%’") % chrootStoreDir);
  
          foreach (PathSet::iterator, i, inputPaths) {
              struct stat st;
--- 1889,1896 ----
          createDirs(chrootStoreDir);
          chmod_(chrootStoreDir, 01775);
  
!         //if (chown(chrootStoreDir.c_str(), 0, buildUser.getGID()) == -1)
!         //    throw SysError(format("cannot change ownership of ‘%1%’") % chrootStoreDir);
  
          foreach (PathSet::iterator, i, inputPaths) {
              struct stat st;
***************
*** 1999,2010 ****
--- 1999,2014 ----
      */
  #if CHROOT_ENABLED
      if (useChroot) {
+         pid = fork();
+         if (pid == 0) runChild();
+ 	/*
  	char stack[32 * 1024];
  	int flags = CLONE_NEWPID | CLONE_NEWNS | CLONE_NEWIPC | CLONE_NEWUTS | SIGCHLD;
  	if (!fixedOutput) flags |= CLONE_NEWNET;
  	pid = clone(childEntry, stack + sizeof(stack) - 8, flags, this);
  	if (pid == -1)
  	    throw SysError("cloning builder process");
+ 	*/
      } else
  #endif
      {
***************
*** 2045,2051 ****
  
          commonChildInit(builderOut);
  
! #if CHROOT_ENABLED
          if (useChroot) {
              /* Initialise the loopback interface. */
              AutoCloseFD fd(socket(PF_INET, SOCK_DGRAM, IPPROTO_IP));
--- 2049,2055 ----
  
          commonChildInit(builderOut);
  
! #if CHROOT_ENABLED && 0
          if (useChroot) {
              /* Initialise the loopback interface. */
              AutoCloseFD fd(socket(PF_INET, SOCK_DGRAM, IPPROTO_IP));

[-- Attachment #4: Type: text/plain, Size: 2289 bytes --]


Ludovic Courtès writes:

> Roel Janssen <roel@gnu.org> skribis:
>
>> In an attempt to bootstrap Guix, I repeatedly encounter the same error.
>> I attached the last 5000 lines of the build output of the command:
>>   guix build bootstrap-tarballs
>>
>> When running the daemon, I used the following environment variables:
>> NIX_STORE_DIR=/hpc/store
>> NIX_CONF_DIR=/hpc/etc/guix
>> NIX_STATE_DIR=/hpc/var/guix
>> NIX_LOG_DIR=/hpc/log
>
> And TMPDIR?

I didn't set TMPDIR.  Should I do that?

> (For recent versions of guix-daemon, TMPDIR has no effect on the build
> chroot.  I assume this uses a recent guix-daemon.)

Checkout out and compiled at the day I submitted the bug report.

> Note that these environment variables are undocumented; use at your own
> risks.  :-)

Ha!  I found them in the code for the guix-daemon.  Unrelated to this
bugreport, but don't you think we should rename these to GUIX_*
equivalent environment variables?

>> The same environment variables (and values) were set when running the
>> guix build command.
>>
>> What am I doing that causes the build to fail?
>
> Did you pass the --disable-chroot or --chroot-directory options of
> guix-daemon?

No, but I have made some modifications to the code to make it run
completely in userspace.  The code should effectively disable chrooting
(unfortunately).

I attached a patch displaying the differences between the version I used
and commit 85f0945.

> The log you sent suggests a failure to build (@@ (gnu packages
> commencement) gcc-final) because the directory is called “gcc-4.9.3”,
> not “gcc-cross-boot0-4.9.3”.  However, it also shows that
> binutils-cross-boot0 is used, which is not the case for ‘gcc-final’.
>
> What Guix commit are you using?

I'm using commit 85f09459162d12e7ce7874995ae2837164ed17ee (with the
modifications in my patch).

> Could you identify more precisely what’s failing to build?  For
> instance, you can run:
>
>   guix build -e '(@@ (gnu packages commencement) gcc-boot0)'
>   guix build -e '(@@ (gnu packages commencement) gcc-final)'

It seems the problem arises when building gcc-final.  I attached the
complete output of both commands.  Because the output for gcc-final is
rather large, I compressed it.

Thanks for your time!

Kind regards,
Roel Janssen

^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#23376: Bootstrap failure on'binutils-cross-boot0-2.25.1: cannot find -lstdc++
  2016-05-04  8:07   ` Roel Janssen
@ 2016-05-05 15:40     ` Ludovic Courtès
  0 siblings, 0 replies; 3+ messages in thread
From: Ludovic Courtès @ 2016-05-05 15:40 UTC (permalink / raw)
  To: Roel Janssen; +Cc: 23376

Roel Janssen <roel@gnu.org> skribis:

> Ludovic Courtès writes:
>
>> Roel Janssen <roel@gnu.org> skribis:
>>
>>> In an attempt to bootstrap Guix, I repeatedly encounter the same error.
>>> I attached the last 5000 lines of the build output of the command:
>>>   guix build bootstrap-tarballs
>>>
>>> When running the daemon, I used the following environment variables:
>>> NIX_STORE_DIR=/hpc/store
>>> NIX_CONF_DIR=/hpc/etc/guix
>>> NIX_STATE_DIR=/hpc/var/guix
>>> NIX_LOG_DIR=/hpc/log
>>
>> And TMPDIR?
>
> I didn't set TMPDIR.  Should I do that?

No, just wanted to make sure.

>> Note that these environment variables are undocumented; use at your own
>> risks.  :-)
>
> Ha!  I found them in the code for the guix-daemon.  Unrelated to this
> bugreport, but don't you think we should rename these to GUIX_*
> equivalent environment variables?

Yes we should: <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22459>.

>>> The same environment variables (and values) were set when running the
>>> guix build command.
>>>
>>> What am I doing that causes the build to fail?
>>
>> Did you pass the --disable-chroot or --chroot-directory options of
>> guix-daemon?
>
> No, but I have made some modifications to the code to make it run
> completely in userspace.

“User space” is usually taken to mean something else:
<https://en.wikipedia.org/wiki/User-space>.  I think you mean running
guix-daemon as an unprivileged user, right?

> The code should effectively disable chrooting (unfortunately).

The patch is roughly equivalent to --disable-chroot, right?

Then I’m afraid this voids your warranty.  :-)
This “Build Environment Setup” section mentions it.

Most likely something somewhere stealthily picks up /usr/bin/ld,
/usr/bin/libstdc++.so, or something along these lines.  It’s very hard
to tell what.  One way to search for the culprit would be “grep -r /usr”
in the GCC source tree.

But it could be something else; for instance our bootstrap libc might
honor /etc/ld.so.{conf,cache}, which can break everything (this can be
checked with ‘strace’.)

It would be interesting to know.  It wouldn’t be enough to fix this use
case though; that would require Linux user name spaces (what ‘guix
environment --container’ uses.)

Ludo’.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-05-05 15:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <87r3dte4kx.fsf@gnu.org>
2016-05-03 20:21 ` bug#23376: Bootstrap failure on'binutils-cross-boot0-2.25.1: cannot find -lstdc++ Ludovic Courtès
2016-05-04  8:07   ` Roel Janssen
2016-05-05 15:40     ` Ludovic Courtès

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).