From: "Ludovic Courtès" <ludo@gnu.org>
To: Eric Bavier <bavier@posteo.net>
Cc: 39807@debbugs.gnu.org
Subject: [bug#39807] [PATCH] guix: pack: Only wrap executable files.
Date: Wed, 21 Oct 2020 11:07:11 +0200 [thread overview]
Message-ID: <87wnzk7xs0.fsf@gnu.org> (raw)
In-Reply-To: <83416910901e77b537b64de392ee02598ccd72ff.camel@posteo.net> (Eric Bavier's message of "Wed, 21 Oct 2020 00:09:58 -0500")
[-- Attachment #1: Type: text/plain, Size: 1930 bytes --]
Hi Eric,
Eric Bavier <bavier@posteo.net> 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 double-slash we get from find-files (c.f.
> guix/scripts/pack.scm:881) "cancel out". But we might not be so fortunate 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 the "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 target store item names to ensure their lengths
> are the same, right? It seems like we maybe want to ignore @WRAPPED_PROGRAM@ and use only /proc/self/exe and
> original_store to find the relocated store directory? A regex search might be too costly. We could use strstr to
> search for the first occurrence of original_store, if we don't mind assuming 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’t we use
the file name of the wrapper (as opposed to WRAPPED_PROGRAM) in the
index calculation? Along these lines:
[-- Attachment #2: Type: text/x-patch, Size: 1280 bytes --]
diff --git a/gnu/packages/aux-files/run-in-namespace.c b/gnu/packages/aux-files/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/…-foo/bin/ls" and we
want to extract "/home/ludo/.local/gnu/store". */
size_t index = strlen (self)
- - strlen ("@WRAPPED_PROGRAM@") + strlen (original_store);
+ - strlen (WRAPPER_PROGRAM) + strlen (original_store);
char *store = strdup (self);
store[index] = '\0';
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=gnu99" "-static" "-Os" "-g0" "-Wall"
"run.c" "-o" result
+ (string-append "-DWRAPPER_PROGRAM=\"" result "\"")
(append (if proot
(list (string-append "-DPROOT_PROGRAM=\""
proot "\""))
[-- Attachment #3: Type: text/plain, Size: 21 bytes --]
Thanks,
Ludo’.
next prev parent reply other threads:[~2020-10-21 9:08 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-27 4:36 [bug#39807] [PATCH] guix: pack: Only wrap executable files Eric Bavier
2020-03-06 11:16 ` Ludovic Courtès
2020-03-24 17:51 ` Ludovic Courtès
2020-03-27 2:53 ` Eric Bavier
2020-03-27 2:29 ` Eric Bavier
[not found] ` <8d8a2e1209d82e136d36222683967956@posteo.net>
2020-03-29 14:39 ` Ludovic Courtès
2020-07-27 21:42 ` Eric Bavier
2020-10-21 5:09 ` Eric Bavier
2020-10-21 9:07 ` Ludovic Courtès [this message]
2020-10-21 15:12 ` Eric Bavier
2020-10-21 15:35 ` Ludovic Courtès
2020-10-21 16:21 ` Eric Bavier
2020-10-21 21:31 ` Ludovic Courtès
2020-10-21 23:51 ` Eric Bavier
2020-10-23 10:48 ` Ludovic Courtès
2020-10-30 15:13 ` bug#39807: " Eric Bavier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87wnzk7xs0.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=39807@debbugs.gnu.org \
--cc=bavier@posteo.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).