[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#41189] [PATCH v2 2/4] pack: Factorize store references in wrapper.
From: |
Ludovic Courtès |
Subject: |
[bug#41189] [PATCH v2 2/4] pack: Factorize store references in wrapper. |
Date: |
Wed, 13 May 2020 14:52:13 +0200 |
* gnu/packages/aux-files/run-in-namespace.c (original_store): New variable.
(exec_in_user_namespace, exec_with_proot, main): Use it instead of the
literal "@STORE_DIRECTORY@".
---
gnu/packages/aux-files/run-in-namespace.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/gnu/packages/aux-files/run-in-namespace.c
b/gnu/packages/aux-files/run-in-namespace.c
index 6beac7fd53..6e97359078 100644
--- a/gnu/packages/aux-files/run-in-namespace.c
+++ b/gnu/packages/aux-files/run-in-namespace.c
@@ -42,6 +42,10 @@
#include <dirent.h>
#include <sys/syscall.h>
+/* The original store, "/gnu/store" by default. */
+static const char original_store[] = "@STORE_DIRECTORY@";
+
+
/* Like 'malloc', but abort if 'malloc' returns NULL. */
static void *
xmalloc (size_t size)
@@ -228,7 +232,7 @@ exec_in_user_namespace (const char *store, int argc, char
*argv[])
bind-mounted in the right place. */
int err;
char *new_root = mkdtemp (strdup ("/tmp/guix-exec-XXXXXX"));
- char *new_store = concat (new_root, "@STORE_DIRECTORY@");
+ char *new_store = concat (new_root, original_store);
char *cwd = get_current_dir_name ();
/* Create a child with separate namespaces and set up bind-mounts from
@@ -307,11 +311,11 @@ exec_with_proot (const char *store, int argc, char
*argv[])
int proot_specific_argc = 4;
int proot_argc = argc + proot_specific_argc;
char *proot_argv[proot_argc + 1], *proot;
- char bind_spec[strlen (store) + 1 + sizeof "@STORE_DIRECTORY@"];
+ char bind_spec[strlen (store) + 1 + sizeof original_store];
strcpy (bind_spec, store);
strcat (bind_spec, ":");
- strcat (bind_spec, "@STORE_DIRECTORY@");
+ strcat (bind_spec, original_store);
proot = concat (store, PROOT_PROGRAM);
@@ -413,8 +417,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 ("@STORE_DIRECTORY@");
+ - strlen ("@WRAPPED_PROGRAM@") + strlen (original_store);
char *store = strdup (self);
store[index] = '\0';
@@ -424,7 +427,7 @@ main (int argc, char *argv[])
@WRAPPED_PROGRAM@ right away. This is not just an optimization: it's
needed when running one of these wrappers from within an unshare'd
namespace, because 'unshare' fails with EPERM in that context. */
- if (strcmp (store, "@STORE_DIRECTORY@") != 0
+ if (strcmp (store, original_store) != 0
&& lstat ("@WRAPPED_PROGRAM@", &statbuf) != 0)
{
const struct engine *engine = execution_engine ();
--
2.26.2
- [bug#41189] [PATCH 2/3] gnu: Add fakechroot., (continued)
- [bug#41189] [PATCH 0/3] Add Fakechroot engine for 'guix pack -RR', Carlos O'Donell, 2020/05/12
- [bug#41189] [PATCH 0/3] Add Fakechroot engine for 'guix pack -RR', Ludovic Courtès, 2020/05/12
- [bug#41189] [PATCH 0/3] Add Fakechroot engine for 'guix pack -RR', Carlos O'Donell, 2020/05/12
- [bug#41189] [PATCH 0/3] Add Fakechroot engine for 'guix pack -RR', Ludovic Courtès, 2020/05/12
- [bug#41189] [PATCH v2 0/4] Add Fakechroot engine for 'guix pack -RR', Ludovic Courtès, 2020/05/13
- [bug#41189] [PATCH v2 1/4] pack: Wrapper honors 'GUIX_EXECUTION_ENGINE' environment variable., Ludovic Courtès, 2020/05/13
- [bug#41189] [PATCH v2 3/4] gnu: Add fakechroot., Ludovic Courtès, 2020/05/13
- [bug#41189] [PATCH v2 4/4] pack: Add relocation via ld.so and fakechroot., Ludovic Courtès, 2020/05/13
- [bug#41189] [PATCH v2 2/4] pack: Factorize store references in wrapper.,
Ludovic Courtès <=
- bug#41189: [PATCH v2 0/4] Add Fakechroot engine for 'guix pack -RR', Ludovic Courtès, 2020/05/14