From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id O7z2J3r6j19QCwAA0tVLHw (envelope-from ) for ; Wed, 21 Oct 2020 09:08:10 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id UOl1I3r6j193IAAA1q6Kng (envelope-from ) for ; Wed, 21 Oct 2020 09:08:10 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 039789401BC for ; Wed, 21 Oct 2020 09:08:09 +0000 (UTC) Received: from localhost ([::1]:39600 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kVA6K-0008D2-GT for larch@yhetil.org; Wed, 21 Oct 2020 05:08:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:54860) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kVA6E-0008Cu-Ru for guix-patches@gnu.org; Wed, 21 Oct 2020 05:08:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:36374) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1kVA6E-0005NH-IQ for guix-patches@gnu.org; Wed, 21 Oct 2020 05:08:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1kVA6E-0004zD-Cl for guix-patches@gnu.org; Wed, 21 Oct 2020 05:08:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#39807] [PATCH] guix: pack: Only wrap executable files. Resent-From: Ludovic =?UTF-8?Q?Court=C3=A8s?= Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Wed, 21 Oct 2020 09:08:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 39807 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Eric Bavier Cc: 39807@debbugs.gnu.org Received: via spool by 39807-submit@debbugs.gnu.org id=B39807.160327124119090 (code B ref 39807); Wed, 21 Oct 2020 09:08:02 +0000 Received: (at 39807) by debbugs.gnu.org; 21 Oct 2020 09:07:21 +0000 Received: from localhost ([127.0.0.1]:47913 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kVA5Z-0004xq-HB for submit@debbugs.gnu.org; Wed, 21 Oct 2020 05:07:21 -0400 Received: from eggs.gnu.org ([209.51.188.92]:47864) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kVA5X-0004xb-4y for 39807@debbugs.gnu.org; Wed, 21 Oct 2020 05:07:19 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44976) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kVA5R-000575-SG; Wed, 21 Oct 2020 05:07:13 -0400 Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=43040 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1kVA5R-0008HL-GG; Wed, 21 Oct 2020 05:07:13 -0400 From: Ludovic =?UTF-8?Q?Court=C3=A8s?= References: <3ace941f920d87da65de6e4fdc16add5b9725434.camel@posteo.net> <83416910901e77b537b64de392ee02598ccd72ff.camel@posteo.net> X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: 30 =?UTF-8?Q?Vend=C3=A9miaire?= an 229 de la =?UTF-8?Q?R=C3=A9volution?= X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-pc-linux-gnu Date: Wed, 21 Oct 2020 11:07:11 +0200 In-Reply-To: <83416910901e77b537b64de392ee02598ccd72ff.camel@posteo.net> (Eric Bavier's message of "Wed, 21 Oct 2020 00:09:58 -0500") Message-ID: <87wnzk7xs0.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Spam-Score: -3.3 (---) X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=pass (policy=none) header.from=gnu.org; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Spam-Score: -1.41 X-TUID: mxIObMjlkm8U --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Eric, Eric Bavier skribis: > In gnu/packages/aux-files/run-in-namespace.c:620-626 we try to calculate = the name of the relocated store directory. So > far this calculation seems to "accidentaly" work: > > /tmp/pack-dir/gnu/store/78xrsg1z...-emacs-no-x-27.1R/bin/emacs > /gnu/store/w9csar3m...-emacs-no-x-27.1/bin//emacs > > The "R" suffix appended to the wrapper store directory name and the doubl= e-slash we get from find-files (c.f. > guix/scripts/pack.scm:881) "cancel out". But we might not be so fortuna= te and can get something like this: > > | > /tmp/pack-dir/gnu/store/80|kbbxnz...-wrapperR/bin/hello (self) > /gnu/store|/zc92ghli...-test/bin//hello (@PROG@) > /gnu/store| (original_store) > | > > Because the manifest entry used in the tests added in this patch enters t= he "else" case of `wrapped-package` (c.f. > guix/scripts/pack.scm:904) the index calculation strays and we get a non-= directory mount point. I can make the test > pass by using a slightly longer name of "testing" for the file-union :) > > I don't think we can enforce a stricter match between the wrapper and tar= get store item names to ensure their lengths > are the same, right? It seems like we maybe want to ignore @WRAPPED_PROG= RAM@ and use only /proc/self/exe and > original_store to find the relocated store directory? A regex search mig= ht be too costly. We could use strstr to > search for the first occurrence of original_store, if we don't mind assum= ing that most people will probably not unpack > into $HOME/.guix/gnu/store/mine/packs/foo e.g. Good catch! This is embarrassing. Instead of searching for an occurrence of ORIGINAL_STORE, can=E2=80=99t we = use the file name of the wrapper (as opposed to WRAPPED_PROGRAM) in the index calculation? Along these lines: --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable diff --git a/gnu/packages/aux-files/run-in-namespace.c b/gnu/packages/aux-f= iles/run-in-namespace.c index 52a16a5362..947ff02dda 100644 --- a/gnu/packages/aux-files/run-in-namespace.c +++ b/gnu/packages/aux-files/run-in-namespace.c @@ -620,7 +620,7 @@ main (int argc, char *argv[]) /* SELF is something like "/home/ludo/.local/gnu/store/=E2=80=A6-foo/bin= /ls" and we want to extract "/home/ludo/.local/gnu/store". */ size_t index =3D strlen (self) - - strlen ("@WRAPPED_PROGRAM@") + strlen (original_store); + - strlen (WRAPPER_PROGRAM) + strlen (original_store); char *store =3D strdup (self); store[index] =3D '\0'; =20 diff --git a/guix/scripts/pack.scm b/guix/scripts/pack.scm index a5a70d5162..c353f50ced 100644 --- a/guix/scripts/pack.scm +++ b/guix/scripts/pack.scm @@ -856,6 +856,7 @@ last resort for relocation." (mkdir-p (dirname result)) (apply invoke #$compiler "-std=3Dgnu99" "-static" "-Os" "-g0= " "-Wall" "run.c" "-o" result + (string-append "-DWRAPPER_PROGRAM=3D\"" result "\"") (append (if proot (list (string-append "-DPROOT_PROGRAM=3D\= "" proot "\"")) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 DQpUaGFua3MsDQpMdWRv4oCZLg0K --=-=-=--