From d5a076c36f6588366fd9766c1054807bbbfd8559 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 4 Aug 2014 18:00:00 +0200 Subject: [PATCH] =?UTF-8?q?Add=20option=20=E2=80=98build-extra-chroot-dirs?= =?UTF-8?q?=E2=80=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is useful for extending (rather than overriding) the default set of chroot paths. --- release.nix | 2 +- src/libstore/build.cc | 11 +++++++---- src/libstore/globals.cc | 4 ---- src/libstore/globals.hh | 4 ---- src/libstore/local.mk | 3 ++- 5 files changed, 10 insertions(+), 14 deletions(-) diff --git a/release.nix b/release.nix index c43925792..bc4c06a0b 100644 --- a/release.nix +++ b/release.nix @@ -98,7 +98,7 @@ let preHook = lib.optionalString stdenv.isLinux ( let sh = stdenv.shell; in '' - NIX_CFLAGS_COMPILE+=" -DDEFAULT_CHROOT_DIRS=\"/bin/sh=${sh}:$(tr '\n' ':' < ${writeReferencesToFile sh})\"" + export DEFAULT_CHROOT_DIRS="/bin/sh=${sh} $(tr '\n' ' ' < ${writeReferencesToFile sh})" ''); enableParallelBuilding = true; diff --git a/src/libstore/build.cc b/src/libstore/build.cc index e3d96d931..5c672227b 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -1792,12 +1792,15 @@ void DerivationGoal::startBuilder() /* Bind-mount a user-configurable set of directories from the host file system. */ - foreach (StringSet::iterator, i, settings.dirsInChroot) { - size_t p = i->find('='); + PathSet dirs = tokenizeString(settings.get(string("build-chroot-dirs"), DEFAULT_CHROOT_DIRS)); + PathSet dirs2 = tokenizeString(settings.get(string("build-extra-chroot-dirs"), "")); + dirs.insert(dirs2.begin(), dirs2.end()); + for (auto & i : dirs) { + size_t p = i.find('='); if (p == string::npos) - dirsInChroot[*i] = *i; + dirsInChroot[i] = i; else - dirsInChroot[string(*i, 0, p)] = string(*i, p + 1); + dirsInChroot[string(i, 0, p)] = string(i, p + 1); } dirsInChroot[tmpDir] = tmpDir; diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc index 77f25005b..3e8c2c636 100644 --- a/src/libstore/globals.cc +++ b/src/libstore/globals.cc @@ -48,9 +48,6 @@ Settings::Settings() useSubstitutes = true; buildUsersGroup = getuid() == 0 ? "nixbld" : ""; useChroot = false; -#ifdef DEFAULT_CHROOT_DIRS - dirsInChroot = tokenizeString(DEFAULT_CHROOT_DIRS, ":"); -#endif useSshSubstituter = true; impersonateLinux26 = false; keepLog = true; @@ -148,7 +145,6 @@ void Settings::update() get(useSubstitutes, "build-use-substitutes"); get(buildUsersGroup, "build-users-group"); get(useChroot, "build-use-chroot"); - get(dirsInChroot, "build-chroot-dirs"); get(impersonateLinux26, "build-impersonate-linux-26"); get(keepLog, "build-keep-log"); get(compressLog, "build-compress-log"); diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh index d16969c9e..c3baca204 100644 --- a/src/libstore/globals.hh +++ b/src/libstore/globals.hh @@ -144,10 +144,6 @@ struct Settings { /* Whether to build in chroot. */ bool useChroot; - /* The directories from the host filesystem to be included in the - chroot. */ - StringSet dirsInChroot; - /* Set of ssh connection strings for the ssh substituter */ Strings sshSubstituterHosts; diff --git a/src/libstore/local.mk b/src/libstore/local.mk index 64dbfa3c5..180088d3d 100644 --- a/src/libstore/local.mk +++ b/src/libstore/local.mk @@ -21,7 +21,8 @@ libstore_CXXFLAGS = \ -DNIX_LOG_DIR=\"$(localstatedir)/log/nix\" \ -DNIX_CONF_DIR=\"$(sysconfdir)/nix\" \ -DNIX_LIBEXEC_DIR=\"$(libexecdir)\" \ - -DNIX_BIN_DIR=\"$(bindir)\" + -DNIX_BIN_DIR=\"$(bindir)\" \ + -DDEFAULT_CHROOT_DIRS="\"$(DEFAULT_CHROOT_DIRS)\"" $(d)/local-store.cc: $(d)/schema.sql.hh