aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/globals.cc1
-rw-r--r--src/libstore/globals.hh13
-rw-r--r--src/libstore/local-store.cc2
3 files changed, 15 insertions, 1 deletions
diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc
index f94d97cc8..c5734852d 100644
--- a/src/libstore/globals.cc
+++ b/src/libstore/globals.cc
@@ -42,6 +42,7 @@ Settings::Settings()
{
buildUsersGroup = getuid() == 0 ? "nixbld" : "";
lockCPU = getEnv("NIX_AFFINITY_HACK") == "1";
+ allowSymlinkedStore = getEnv("NIX_IGNORE_SYMLINK_STORE") == "1";
caFile = getEnv("NIX_SSL_CERT_FILE").value_or(getEnv("SSL_CERT_FILE").value_or(""));
if (caFile == "") {
diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh
index 8a2d3ff75..ebcfa9d80 100644
--- a/src/libstore/globals.hh
+++ b/src/libstore/globals.hh
@@ -880,6 +880,19 @@ public:
Setting<std::string> flakeRegistry{this, "https://github.com/NixOS/flake-registry/raw/master/flake-registry.json", "flake-registry",
"Path or URI of the global flake registry."};
+
+ Setting<bool> allowSymlinkedStore{
+ this, false, "allow-symlinked-store",
+ R"(
+ If set to `true`, Nix will stop complaining if the store directory
+ (typically /nix/store) contains symlink components.
+
+ This risks making some builds "impure" because builders sometimes
+ "canonicalise" paths by resolving all symlink components. Problems
+ occur if those builds are then deployed to machines where /nix/store
+ resolves to a different location from that of the build machine. You
+ can enable this setting if you are sure you're not going to do that.
+ )"};
};
diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc
index 94ff34cb8..c91f3fbf7 100644
--- a/src/libstore/local-store.cc
+++ b/src/libstore/local-store.cc
@@ -110,7 +110,7 @@ LocalStore::LocalStore(const Params & params)
}
/* Ensure that the store and its parents are not symlinks. */
- if (getEnv("NIX_IGNORE_SYMLINK_STORE") != "1") {
+ if (!settings.allowSymlinkedStore) {
Path path = realStoreDir;
struct stat st;
while (path != "/") {