about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-05-05T15·45+0200
committerEelco Dolstra <edolstra@gmail.com>2017-05-05T15·45+0200
commitbb50c8931934d04dbf61bd245b4583f8c1ac4fd9 (patch)
tree47d4dfef0da6ac7b2bd9cde3336b12f57a6a14aa
parent465cb6824401541d82489e11b5223dbfd50bb132 (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.cc7
-rw-r--r--src/libstore/globals.hh3
-rw-r--r--src/libstore/machines.cc2
-rw-r--r--tests/build-remote.sh8
4 files changed, 12 insertions, 8 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index 6d20512e1f..70ecf4bad9 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 ac6f6a2cfa..7295b0d30a 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 c1d9047537..7491037b2d 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 071011dcb7..927a217f37 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