aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2017-05-05 17:45:22 +0200
committerEelco Dolstra <edolstra@gmail.com>2017-05-05 17:45:22 +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 6d20512e1..70ecf4bad 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 ac6f6a2cf..7295b0d30 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 c1d904753..7491037b2 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 071011dcb..927a217f3 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