Fix 'Read-only file system' when building a derivation

This commit is contained in:
Eelco Dolstra 2018-11-15 12:59:54 +01:00
parent 32a0a223d5
commit a32ff2573b
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
3 changed files with 5 additions and 1 deletions

View file

@ -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);

View file

@ -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 {

View file

@ -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());