diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2017-05-05T15·45+0200 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2017-05-05T15·45+0200 |
commit | bb50c8931934d04dbf61bd245b4583f8c1ac4fd9 (patch) | |
tree | 47d4dfef0da6ac7b2bd9cde3336b12f57a6a14aa | |
parent | 465cb6824401541d82489e11b5223dbfd50bb132 (diff) |
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.
-rw-r--r-- | src/libstore/build.cc | 7 | ||||
-rw-r--r-- | src/libstore/globals.hh | 3 | ||||
-rw-r--r-- | src/libstore/machines.cc | 2 | ||||
-rw-r--r-- | tests/build-remote.sh | 8 |
4 files changed, 12 insertions, 8 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc index 6d20512e1f8e..70ecf4bad994 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -1661,9 +1661,6 @@ int childEntry(void * arg) } -const std::string buildDir = "/build"; - - void DerivationGoal::startBuilder() { auto f = format( @@ -1725,7 +1722,7 @@ void DerivationGoal::startBuilder() /* In a sandbox, for determinism, always use the same temporary directory. */ #if __linux__ - tmpDirInSandbox = useChroot ? buildDir : tmpDir; + tmpDirInSandbox = useChroot ? settings.sandboxBuildDir : tmpDir; #elif __APPLE__ // On Darwin, we canonize /tmp because its probably a symlink to /private/tmp. 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" "nixbld:x:%1%:%2%:Nix build user:%3%:/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 view of the system (e.g., "id -gn"). */ diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh index ac6f6a2cfa36..7295b0d30af0 100644 --- a/src/libstore/globals.hh +++ b/src/libstore/globals.hh @@ -224,6 +224,9 @@ public: #if __linux__ Setting<std::string> sandboxShmSize{this, "50%", "sandbox-dev-shm-size", "The size of /dev/shm in the build sandbox."}; + + Setting<Path> sandboxBuildDir{this, "/build", "sandbox-build-dir", + "The build directory inside the sandbox."}; #endif Setting<PathSet> allowedImpureHostPrefixes{this, {}, "allowed-impure-host-deps", diff --git a/src/libstore/machines.cc b/src/libstore/machines.cc index c1d9047537d3..7491037b2d79 100644 --- a/src/libstore/machines.cc +++ b/src/libstore/machines.cc @@ -55,7 +55,7 @@ void parseMachines(const std::string & s, Machines & machines) if (sz < 1) throw FormatError("bad machine specification ‘%s’", line); - auto isSet = [&](int n) { + auto isSet = [&](size_t n) { return tokens.size() > n && tokens[n] != "" && tokens[n] != "-"; }; diff --git a/tests/build-remote.sh b/tests/build-remote.sh index 071011dcb71d..927a217f3761 100644 --- a/tests/build-remote.sh +++ b/tests/build-remote.sh @@ -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. export NIX_CONF_DIR=$TEST_ROOT/etc2 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 |