Make the location of the build directory in the sandbox configurable
This is mostly for use in the sandbox tests, since if the Nix store is under /build, then we can't use /build as the build directory.
This commit is contained in:
parent
465cb68244
commit
bb50c89319
4 changed files with 12 additions and 8 deletions
|
@ -1661,9 +1661,6 @@ int childEntry(void * arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const std::string buildDir = "/build";
|
|
||||||
|
|
||||||
|
|
||||||
void DerivationGoal::startBuilder()
|
void DerivationGoal::startBuilder()
|
||||||
{
|
{
|
||||||
auto f = format(
|
auto f = format(
|
||||||
|
@ -1725,7 +1722,7 @@ void DerivationGoal::startBuilder()
|
||||||
/* In a sandbox, for determinism, always use the same temporary
|
/* In a sandbox, for determinism, always use the same temporary
|
||||||
directory. */
|
directory. */
|
||||||
#if __linux__
|
#if __linux__
|
||||||
tmpDirInSandbox = useChroot ? buildDir : tmpDir;
|
tmpDirInSandbox = useChroot ? settings.sandboxBuildDir : tmpDir;
|
||||||
#elif __APPLE__
|
#elif __APPLE__
|
||||||
// On Darwin, we canonize /tmp because its probably a symlink to /private/tmp.
|
// On Darwin, we canonize /tmp because its probably a symlink to /private/tmp.
|
||||||
tmpDirInSandbox = useChroot ? canonPath("/tmp", true) + "/nix-build-" + drvName + "-0" : tmpDir;
|
tmpDirInSandbox = useChroot ? canonPath("/tmp", true) + "/nix-build-" + drvName + "-0" : tmpDir;
|
||||||
|
@ -1843,7 +1840,7 @@ void DerivationGoal::startBuilder()
|
||||||
"root:x:0:0:Nix build user:%3%:/noshell\n"
|
"root:x:0:0:Nix build user:%3%:/noshell\n"
|
||||||
"nixbld:x:%1%:%2%:Nix build user:%3%:/noshell\n"
|
"nixbld:x:%1%:%2%:Nix build user:%3%:/noshell\n"
|
||||||
"nobody:x:65534:65534:Nobody:/:/noshell\n",
|
"nobody:x:65534:65534:Nobody:/:/noshell\n",
|
||||||
sandboxUid, sandboxGid, buildDir));
|
sandboxUid, sandboxGid, settings.sandboxBuildDir));
|
||||||
|
|
||||||
/* Declare the build user's group so that programs get a consistent
|
/* Declare the build user's group so that programs get a consistent
|
||||||
view of the system (e.g., "id -gn"). */
|
view of the system (e.g., "id -gn"). */
|
||||||
|
|
|
@ -224,6 +224,9 @@ public:
|
||||||
#if __linux__
|
#if __linux__
|
||||||
Setting<std::string> sandboxShmSize{this, "50%", "sandbox-dev-shm-size",
|
Setting<std::string> sandboxShmSize{this, "50%", "sandbox-dev-shm-size",
|
||||||
"The size of /dev/shm in the build sandbox."};
|
"The size of /dev/shm in the build sandbox."};
|
||||||
|
|
||||||
|
Setting<Path> sandboxBuildDir{this, "/build", "sandbox-build-dir",
|
||||||
|
"The build directory inside the sandbox."};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Setting<PathSet> allowedImpureHostPrefixes{this, {}, "allowed-impure-host-deps",
|
Setting<PathSet> allowedImpureHostPrefixes{this, {}, "allowed-impure-host-deps",
|
||||||
|
|
|
@ -55,7 +55,7 @@ void parseMachines(const std::string & s, Machines & machines)
|
||||||
if (sz < 1)
|
if (sz < 1)
|
||||||
throw FormatError("bad machine specification ‘%s’", line);
|
throw FormatError("bad machine specification ‘%s’", line);
|
||||||
|
|
||||||
auto isSet = [&](int n) {
|
auto isSet = [&](size_t n) {
|
||||||
return tokens.size() > n && tokens[n] != "" && tokens[n] != "-";
|
return tokens.size() > n && tokens[n] != "" && tokens[n] != "-";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -12,9 +12,13 @@ rm -rf $TEST_ROOT/store0 $TEST_ROOT/store1
|
||||||
# FIXME: --option is not passed to build-remote, so have to create a config file.
|
# FIXME: --option is not passed to build-remote, so have to create a config file.
|
||||||
export NIX_CONF_DIR=$TEST_ROOT/etc2
|
export NIX_CONF_DIR=$TEST_ROOT/etc2
|
||||||
mkdir -p $NIX_CONF_DIR
|
mkdir -p $NIX_CONF_DIR
|
||||||
echo "build-sandbox-paths = /nix/store" > $NIX_CONF_DIR/nix.conf
|
echo "
|
||||||
|
build-sandbox-paths = /nix/store
|
||||||
|
sandbox-build-dir = /build-tmp
|
||||||
|
" > $NIX_CONF_DIR/nix.conf
|
||||||
|
|
||||||
outPath=$(nix-build build-hook.nix --no-out-link -j0 --option builders "local?root=$TEST_ROOT/store0; local?root=$TEST_ROOT/store1 - - 1 1 foo" --option build-sandbox-paths /nix/store)
|
outPath=$(nix-build build-hook.nix --no-out-link -j0 \
|
||||||
|
--option builders "local?root=$TEST_ROOT/store0; local?root=$TEST_ROOT/store1 - - 1 1 foo")
|
||||||
|
|
||||||
cat $outPath/foobar | grep FOOBAR
|
cat $outPath/foobar | grep FOOBAR
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue