mirror of
https://github.com/NixOS/nix
synced 2025-06-25 10:41:16 +02:00
Get rid of tmpDirInSandbox variable
This commit is contained in:
parent
c9b55fa3f0
commit
774678b87f
2 changed files with 24 additions and 19 deletions
|
@ -105,11 +105,6 @@ protected:
|
||||||
*/
|
*/
|
||||||
Path topTmpDir;
|
Path topTmpDir;
|
||||||
|
|
||||||
/**
|
|
||||||
* The path of the temporary directory in the sandbox.
|
|
||||||
*/
|
|
||||||
Path tmpDirInSandbox;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The sort of derivation we are building.
|
* The sort of derivation we are building.
|
||||||
*
|
*
|
||||||
|
@ -230,7 +225,15 @@ protected:
|
||||||
virtual void setBuildTmpDir()
|
virtual void setBuildTmpDir()
|
||||||
{
|
{
|
||||||
tmpDir = topTmpDir;
|
tmpDir = topTmpDir;
|
||||||
tmpDirInSandbox = topTmpDir;
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the path of the temporary directory in the sandbox.
|
||||||
|
*/
|
||||||
|
virtual Path tmpDirInSandbox()
|
||||||
|
{
|
||||||
|
assert(!topTmpDir.empty());
|
||||||
|
return topTmpDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -770,7 +773,6 @@ void DerivationBuilderImpl::startBuilder()
|
||||||
topTmpDir = createTempDir(settings.buildDir.get().value_or(""), "nix-build-" + std::string(drvPath.name()), 0700);
|
topTmpDir = createTempDir(settings.buildDir.get().value_or(""), "nix-build-" + std::string(drvPath.name()), 0700);
|
||||||
setBuildTmpDir();
|
setBuildTmpDir();
|
||||||
assert(!tmpDir.empty());
|
assert(!tmpDir.empty());
|
||||||
assert(!tmpDirInSandbox.empty());
|
|
||||||
chownToBuilder(tmpDir);
|
chownToBuilder(tmpDir);
|
||||||
|
|
||||||
for (auto & [outputName, status] : initialOutputs) {
|
for (auto & [outputName, status] : initialOutputs) {
|
||||||
|
@ -923,11 +925,11 @@ DerivationBuilderImpl::PathsInChroot DerivationBuilderImpl::getPathsInSandbox()
|
||||||
else
|
else
|
||||||
pathsInChroot[i.substr(0, p)] = {i.substr(p + 1), optional};
|
pathsInChroot[i.substr(0, p)] = {i.substr(p + 1), optional};
|
||||||
}
|
}
|
||||||
if (hasPrefix(store.storeDir, tmpDirInSandbox))
|
if (hasPrefix(store.storeDir, tmpDirInSandbox()))
|
||||||
{
|
{
|
||||||
throw Error("`sandbox-build-dir` must not contain the storeDir");
|
throw Error("`sandbox-build-dir` must not contain the storeDir");
|
||||||
}
|
}
|
||||||
pathsInChroot[tmpDirInSandbox] = tmpDir;
|
pathsInChroot[tmpDirInSandbox()] = tmpDir;
|
||||||
|
|
||||||
/* Add the closure of store paths to the chroot. */
|
/* Add the closure of store paths to the chroot. */
|
||||||
StorePathSet closure;
|
StorePathSet closure;
|
||||||
|
@ -1090,7 +1092,7 @@ void DerivationBuilderImpl::initTmpDir()
|
||||||
Path p = tmpDir + "/" + fn;
|
Path p = tmpDir + "/" + fn;
|
||||||
writeFile(p, rewriteStrings(i.second, inputRewrites));
|
writeFile(p, rewriteStrings(i.second, inputRewrites));
|
||||||
chownToBuilder(p);
|
chownToBuilder(p);
|
||||||
env[i.first + "Path"] = tmpDirInSandbox + "/" + fn;
|
env[i.first + "Path"] = tmpDirInSandbox() + "/" + fn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1098,16 +1100,16 @@ void DerivationBuilderImpl::initTmpDir()
|
||||||
|
|
||||||
/* For convenience, set an environment pointing to the top build
|
/* For convenience, set an environment pointing to the top build
|
||||||
directory. */
|
directory. */
|
||||||
env["NIX_BUILD_TOP"] = tmpDirInSandbox;
|
env["NIX_BUILD_TOP"] = tmpDirInSandbox();
|
||||||
|
|
||||||
/* Also set TMPDIR and variants to point to this directory. */
|
/* Also set TMPDIR and variants to point to this directory. */
|
||||||
env["TMPDIR"] = env["TEMPDIR"] = env["TMP"] = env["TEMP"] = tmpDirInSandbox;
|
env["TMPDIR"] = env["TEMPDIR"] = env["TMP"] = env["TEMP"] = tmpDirInSandbox();
|
||||||
|
|
||||||
/* Explicitly set PWD to prevent problems with chroot builds. In
|
/* Explicitly set PWD to prevent problems with chroot builds. In
|
||||||
particular, dietlibc cannot figure out the cwd because the
|
particular, dietlibc cannot figure out the cwd because the
|
||||||
inode of the current directory doesn't appear in .. (because
|
inode of the current directory doesn't appear in .. (because
|
||||||
getdents returns the inode of the mount point). */
|
getdents returns the inode of the mount point). */
|
||||||
env["PWD"] = tmpDirInSandbox;
|
env["PWD"] = tmpDirInSandbox();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1200,10 +1202,10 @@ void DerivationBuilderImpl::writeStructuredAttrs()
|
||||||
|
|
||||||
writeFile(tmpDir + "/.attrs.sh", rewriteStrings(jsonSh, inputRewrites));
|
writeFile(tmpDir + "/.attrs.sh", rewriteStrings(jsonSh, inputRewrites));
|
||||||
chownToBuilder(tmpDir + "/.attrs.sh");
|
chownToBuilder(tmpDir + "/.attrs.sh");
|
||||||
env["NIX_ATTRS_SH_FILE"] = tmpDirInSandbox + "/.attrs.sh";
|
env["NIX_ATTRS_SH_FILE"] = tmpDirInSandbox() + "/.attrs.sh";
|
||||||
writeFile(tmpDir + "/.attrs.json", rewriteStrings(json.dump(), inputRewrites));
|
writeFile(tmpDir + "/.attrs.json", rewriteStrings(json.dump(), inputRewrites));
|
||||||
chownToBuilder(tmpDir + "/.attrs.json");
|
chownToBuilder(tmpDir + "/.attrs.json");
|
||||||
env["NIX_ATTRS_JSON_FILE"] = tmpDirInSandbox + "/.attrs.json";
|
env["NIX_ATTRS_JSON_FILE"] = tmpDirInSandbox() + "/.attrs.json";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1227,7 +1229,7 @@ void DerivationBuilderImpl::startDaemon()
|
||||||
|
|
||||||
auto socketName = ".nix-socket";
|
auto socketName = ".nix-socket";
|
||||||
Path socketPath = tmpDir + "/" + socketName;
|
Path socketPath = tmpDir + "/" + socketName;
|
||||||
env["NIX_REMOTE"] = "unix://" + tmpDirInSandbox + "/" + socketName;
|
env["NIX_REMOTE"] = "unix://" + tmpDirInSandbox() + "/" + socketName;
|
||||||
|
|
||||||
daemonSocket = createUnixDomainSocket(socketPath, 0600);
|
daemonSocket = createUnixDomainSocket(socketPath, 0600);
|
||||||
|
|
||||||
|
@ -1339,7 +1341,7 @@ void DerivationBuilderImpl::runChild()
|
||||||
different uid and/or in a sandbox). */
|
different uid and/or in a sandbox). */
|
||||||
BuiltinBuilderContext ctx{
|
BuiltinBuilderContext ctx{
|
||||||
.drv = drv,
|
.drv = drv,
|
||||||
.tmpDirInSandbox = tmpDirInSandbox,
|
.tmpDirInSandbox = tmpDirInSandbox(),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (drv.isBuiltin() && drv.builder == "builtin:fetchurl") {
|
if (drv.isBuiltin() && drv.builder == "builtin:fetchurl") {
|
||||||
|
@ -1354,7 +1356,7 @@ void DerivationBuilderImpl::runChild()
|
||||||
|
|
||||||
enterChroot();
|
enterChroot();
|
||||||
|
|
||||||
if (chdir(tmpDirInSandbox.c_str()) == -1)
|
if (chdir(tmpDirInSandbox().c_str()) == -1)
|
||||||
throw SysError("changing into '%1%'", tmpDir);
|
throw SysError("changing into '%1%'", tmpDir);
|
||||||
|
|
||||||
/* Close all other file descriptors. */
|
/* Close all other file descriptors. */
|
||||||
|
|
|
@ -226,10 +226,13 @@ struct LinuxDerivationBuilder : DerivationBuilderImpl
|
||||||
done directly in the sandbox profile. */
|
done directly in the sandbox profile. */
|
||||||
tmpDir = topTmpDir + "/build";
|
tmpDir = topTmpDir + "/build";
|
||||||
createDir(tmpDir, 0700);
|
createDir(tmpDir, 0700);
|
||||||
|
}
|
||||||
|
|
||||||
|
Path tmpDirInSandbox() override
|
||||||
|
{
|
||||||
/* In a sandbox, for determinism, always use the same temporary
|
/* In a sandbox, for determinism, always use the same temporary
|
||||||
directory. */
|
directory. */
|
||||||
tmpDirInSandbox = settings.sandboxBuildDir;
|
return settings.sandboxBuildDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
void prepareSandbox() override
|
void prepareSandbox() override
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue