diff --git a/src/build-remote/build-remote.cc b/src/build-remote/build-remote.cc index 8a9d4571f..5cd3c518b 100644 --- a/src/build-remote/build-remote.cc +++ b/src/build-remote/build-remote.cc @@ -45,7 +45,7 @@ int main (int argc, char * * argv) unsetenv("DISPLAY"); unsetenv("SSH_ASKPASS"); - if (argc != 5) + if (argc != 6) throw UsageError("called without required arguments"); auto store = openStore(); @@ -54,6 +54,7 @@ int main (int argc, char * * argv) settings.maxSilentTime = std::stoll(argv[2]); settings.buildTimeout = std::stoll(argv[3]); verbosity = (Verbosity) std::stoll(argv[4]); + settings.builders = argv[5]; /* It would be more appropriate to use $XDG_RUNTIME_DIR, since that gets cleared on reboot, but it wouldn't work on OS X. */ @@ -62,13 +63,7 @@ int main (int argc, char * * argv) std::shared_ptr sshStore; AutoCloseFD bestSlotLock; - Machines machines; - try { - parseMachines(readFile(getEnv("NIX_REMOTE_SYSTEMS", SYSCONFDIR "/nix/machines")), machines); - } catch (const SysError & e) { - if (e.errNo != ENOENT) - throw; - } + auto machines = getMachines(); debug("got %d remote builders", machines.size()); if (machines.empty()) { diff --git a/src/build-remote/local.mk b/src/build-remote/local.mk index 62d5a010c..64368a43f 100644 --- a/src/build-remote/local.mk +++ b/src/build-remote/local.mk @@ -7,5 +7,3 @@ build-remote_INSTALL_DIR := $(libexecdir)/nix build-remote_LIBS = libmain libutil libformat libstore build-remote_SOURCES := $(d)/build-remote.cc - -build-remote_CXXFLAGS = -DSYSCONFDIR="\"$(sysconfdir)\"" diff --git a/src/libstore/build.cc b/src/libstore/build.cc index e756d3377..8c2602a70 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -614,7 +614,8 @@ HookInstance::HookInstance() settings.thisSystem, std::to_string(settings.maxSilentTime), std::to_string(settings.buildTimeout), - std::to_string(verbosity) + std::to_string(verbosity), + settings.builders }; execv(settings.buildHook.get().c_str(), stringsToCharPtrs(args).data()); diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh index 25cc3e068..d7a0b86a0 100644 --- a/src/libstore/globals.hh +++ b/src/libstore/globals.hh @@ -130,6 +130,9 @@ public: PathSetting buildHook{this, true, nixLibexecDir + "/nix/build-remote", "build-hook", "The path of the helper program that executes builds to remote machines."}; + Setting builders{this, "", "builders", + "A semicolon-separated list of build machines, in the format of nix.machines."}; + Setting reservedSize{this, 8 * 1024 * 1024, "gc-reserved-space", "Amount of reserved disk space for the garbage collector."}; diff --git a/src/libstore/machines.cc b/src/libstore/machines.cc index 471ce8efb..479ed1432 100644 --- a/src/libstore/machines.cc +++ b/src/libstore/machines.cc @@ -44,7 +44,7 @@ bool Machine::mandatoryMet(const std::set & features) const { void parseMachines(const std::string & s, Machines & machines) { - for (auto line : tokenizeString>(s, "\n")) { + for (auto line : tokenizeString>(s, "\n;")) { chomp(line); line.erase(std::find(line.begin(), line.end(), '#'), line.end()); if (line.empty()) continue; @@ -62,4 +62,20 @@ void parseMachines(const std::string & s, Machines & machines) } } +Machines getMachines() +{ + Machines machines; + + try { + parseMachines(readFile(getEnv("NIX_REMOTE_SYSTEMS", settings.nixConfDir + "/machines")), machines); + } catch (const SysError & e) { + if (e.errNo != ENOENT) + throw; + } + + parseMachines(settings.builders, machines); + + return machines; +} + } diff --git a/src/libstore/machines.hh b/src/libstore/machines.hh index 96c4bd81a..e04557428 100644 --- a/src/libstore/machines.hh +++ b/src/libstore/machines.hh @@ -32,4 +32,6 @@ typedef std::vector Machines; void parseMachines(const std::string & s, Machines & machines); +Machines getMachines(); + }