aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-11-26 20:51:52 +0100
committerGitHub <noreply@github.com>2019-11-26 20:51:52 +0100
commit7c8d7c17f8078f89bdfe4f86a4f0beee1a54be9a (patch)
treeef7f1e6cbbd7f829b7261ef10178ff47449fefac /src
parent0be8d7784ffad0131c2e69fe25350fe5d2132e34 (diff)
parent96c84937c49435525d0733437aa88902b2c8caf6 (diff)
Merge pull request #3144 from matthewbauer/fix-sandbox-fallback
Fix sandbox fallback settings
Diffstat (limited to 'src')
-rw-r--r--src/libstore/build.cc74
1 files changed, 41 insertions, 33 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index 67ccfcee0..51a9fa35b 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -939,6 +939,9 @@ private:
/* Fill in the environment for the builder. */
void initEnv();
+ /* Setup tmp dir location. */
+ void initTmpDir();
+
/* Write a JSON file containing the derivation attributes. */
void writeStructuredAttrs();
@@ -1956,13 +1959,6 @@ void DerivationGoal::startBuilder()
auto drvName = storePathToName(drvPath);
tmpDir = createTempDir("", "nix-build-" + drvName, false, false, 0700);
- /* In a sandbox, for determinism, always use the same temporary
- directory. */
-#if __linux__
- tmpDirInSandbox = useChroot ? settings.sandboxBuildDir : tmpDir;
-#else
- tmpDirInSandbox = tmpDir;
-#endif
chownToBuilder(tmpDir);
/* Substitute output placeholders with the actual output paths. */
@@ -2366,7 +2362,7 @@ void DerivationGoal::startBuilder()
int res = helper.wait();
if (res != 0 && settings.sandboxFallback) {
useChroot = false;
- tmpDirInSandbox = tmpDir;
+ initTmpDir();
goto fallback;
} else if (res != 0)
throw Error("unable to start build process");
@@ -2422,31 +2418,14 @@ void DerivationGoal::startBuilder()
}
-void DerivationGoal::initEnv()
-{
- env.clear();
-
- /* Most shells initialise PATH to some default (/bin:/usr/bin:...) when
- PATH is not set. We don't want this, so we fill it in with some dummy
- value. */
- env["PATH"] = "/path-not-set";
-
- /* Set HOME to a non-existing path to prevent certain programs from using
- /etc/passwd (or NIS, or whatever) to locate the home directory (for
- example, wget looks for ~/.wgetrc). I.e., these tools use /etc/passwd
- if HOME is not set, but they will just assume that the settings file
- they are looking for does not exist if HOME is set but points to some
- non-existing path. */
- env["HOME"] = homeDir;
-
- /* Tell the builder where the Nix store is. Usually they
- shouldn't care, but this is useful for purity checking (e.g.,
- the compiler or linker might only want to accept paths to files
- in the store or in the build directory). */
- env["NIX_STORE"] = worker.store.storeDir;
-
- /* The maximum number of cores to utilize for parallel building. */
- env["NIX_BUILD_CORES"] = (format("%d") % settings.buildCores).str();
+void DerivationGoal::initTmpDir() {
+ /* In a sandbox, for determinism, always use the same temporary
+ directory. */
+#if __linux__
+ tmpDirInSandbox = useChroot ? settings.sandboxBuildDir : tmpDir;
+#else
+ tmpDirInSandbox = tmpDir;
+#endif
/* In non-structured mode, add all bindings specified in the
derivation via the environment, except those listed in the
@@ -2485,6 +2464,35 @@ void DerivationGoal::initEnv()
inode of the current directory doesn't appear in .. (because
getdents returns the inode of the mount point). */
env["PWD"] = tmpDirInSandbox;
+}
+
+void DerivationGoal::initEnv()
+{
+ env.clear();
+
+ /* Most shells initialise PATH to some default (/bin:/usr/bin:...) when
+ PATH is not set. We don't want this, so we fill it in with some dummy
+ value. */
+ env["PATH"] = "/path-not-set";
+
+ /* Set HOME to a non-existing path to prevent certain programs from using
+ /etc/passwd (or NIS, or whatever) to locate the home directory (for
+ example, wget looks for ~/.wgetrc). I.e., these tools use /etc/passwd
+ if HOME is not set, but they will just assume that the settings file
+ they are looking for does not exist if HOME is set but points to some
+ non-existing path. */
+ env["HOME"] = homeDir;
+
+ /* Tell the builder where the Nix store is. Usually they
+ shouldn't care, but this is useful for purity checking (e.g.,
+ the compiler or linker might only want to accept paths to files
+ in the store or in the build directory). */
+ env["NIX_STORE"] = worker.store.storeDir;
+
+ /* The maximum number of cores to utilize for parallel building. */
+ env["NIX_BUILD_CORES"] = (format("%d") % settings.buildCores).str();
+
+ initTmpDir();
/* Compatibility hack with Nix <= 0.7: if this is a fixed-output
derivation, tell the builder, so that for instance `fetchurl'