diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2018-11-15T11·59+0100 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2018-11-15T12·20+0100 |
commit | a32ff2573ba4d0df4e3360c5a96398738da953f6 (patch) | |
tree | 831ef2cb312018a77abc42a9e701eae93914f526 /src | |
parent | 32a0a223d589085ad43d77f4f36266a74e2822a8 (diff) |
Fix 'Read-only file system' when building a derivation
Diffstat (limited to 'src')
-rw-r--r-- | src/libstore/build.cc | 2 | ||||
-rw-r--r-- | src/libutil/util.cc | 3 | ||||
-rw-r--r-- | src/libutil/util.hh | 1 |
3 files changed, 5 insertions, 1 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 676ad5856b13..9c408e29c06c 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -2193,6 +2193,7 @@ void DerivationGoal::startBuilder() userNamespaceSync.create(); options.allowVfork = false; + options.restoreMountNamespace = false; Pid helper = startProcess([&]() { @@ -2259,6 +2260,7 @@ void DerivationGoal::startBuilder() #endif { options.allowVfork = !buildUser && !drv->isBuiltin(); + options.restoreMountNamespace = false; pid = startProcess([&]() { runChild(); }, options); diff --git a/src/libutil/util.cc b/src/libutil/util.cc index 6e4536e6e4ea..e12c4b258c25 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -936,7 +936,8 @@ pid_t startProcess(std::function<void()> fun, const ProcessOptions & options) throw SysError("setting death signal"); #endif restoreAffinity(); - restoreMountNamespace(); + if (options.restoreMountNamespace) + restoreMountNamespace(); fun(); } catch (std::exception & e) { try { diff --git a/src/libutil/util.hh b/src/libutil/util.hh index 2689cbd8b412..d67bddc138c8 100644 --- a/src/libutil/util.hh +++ b/src/libutil/util.hh @@ -250,6 +250,7 @@ struct ProcessOptions bool dieWithParent = true; bool runExitHandlers = false; bool allowVfork = true; + bool restoreMountNamespace = true; }; pid_t startProcess(std::function<void()> fun, const ProcessOptions & options = ProcessOptions()); |