From mboxrd@z Thu Jan 1 00:00:00 1970 From: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) Subject: Re: Assertion failure while building libtool Date: Sat, 08 Jun 2013 16:35:26 +0200 Message-ID: <8761xou0up.fsf@gnu.org> References: <8761xpzvbt.fsf@tines.lan> <87mwr1tzme.fsf@gnu.org> <87vc5pxqu1.fsf@tines.lan> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:39956) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UlKJj-0007Ej-3B for bug-guix@gnu.org; Sat, 08 Jun 2013 10:40:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UlKJh-0005rb-QK for bug-guix@gnu.org; Sat, 08 Jun 2013 10:40:31 -0400 Received: from hera.aquilenet.fr ([141.255.128.1]:54357) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UlKJh-0005rR-Jw for bug-guix@gnu.org; Sat, 08 Jun 2013 10:40:29 -0400 In-Reply-To: <87vc5pxqu1.fsf@tines.lan> (Mark H. Weaver's message of "Fri, 07 Jun 2013 22:45:58 -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-bounces+gcggb-bug-guix=m.gmane.org@gnu.org To: Mark H Weaver Cc: bug-guix@gnu.org --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Mark, Mark H Weaver skribis: > ludo@gnu.org (Ludovic Court=C3=A8s) writes: > >> Mark H Weaver skribis: >> >>> I did a clean rebuild of guix from git master (make clean; ./bootstrap; >>> make), and then attempted to upgrade all packages. After several >>> successful builds, the daemon printed this: >>> >>> guix-daemon: nix/libstore/local-store.cc:526: void >>> nix::canonicalisePathMetaData_(const Path&, uid_t, >>> nix::InodesSeen&): Assertion `!((((st.st_mode)) & 0170000) =3D=3D >>> (0040000))' failed. >> >> Yes, this is a daemon bug pending a fix: >> . >> >> In the meantime, you can hopefully work around it by deleting the >> already-present output=E2=80=93i.e., by running either: >> >> guix gc --delete /nix/store/wbsypglflcy7fi08h4finffjy9mqzh12-libtool-2= .4.2 > > This command fails because there are still references: OK. I believe this (untested) patch fixes the underlying problem: --=-=-= Content-Type: text/x-patch Content-Disposition: inline diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 3f595e3..37b839a 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -2288,8 +2288,15 @@ void DerivationGoal::computeClosure() % path % i->second.hashAlgo % printHash16or32(h) % printHash16or32(h2)); } - /* Get rid of all weird permissions. */ - canonicalisePathMetaData(path, buildUser.enabled() ? buildUser.getUID() : -1); + /* Get rid of all weird permissions. If `path' already existed (as + can happen with multiple-output derivations), it is already owned + by `root' and not by the build user. In that case, skip + canonicalisation altogether. + See for details. */ + canonicalisePathMetaData(path, + (buildUser.enabled() && st.st_uid == buildUser.getUID()) + ? buildUser.getUID() + : -1); /* For this output path, find the references to other paths contained in it. Compute the SHA-256 NAR hash at the same --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Could you rebuild the daemon with that patch, relaunch the libtool build, and check if it fixes the problem? TIA, Ludo=E2=80=99. --=-=-=--