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:
Eelco Dolstra 2017-05-05 17:45:22 +02:00
parent 465cb68244
commit bb50c89319
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
4 changed files with 12 additions and 8 deletions

View file

@ -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"). */

View file

@ -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",

View file

@ -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] != "-";
}; };

View file

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