mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-30 09:36:15 +02:00
Add an option for specifying remote builders
This is useful for one-off situations where you want to specify a builder on the command line instead of having to mess with nix.machines. E.g. $ nix-build -A hello --argstr system x86_64-darwin \ --option builders 'root@macstadium1 x86_64-darwin' will perform the specified build on "macstadium1". It also removes the need for a separate nix.machines file since you can specify builders in nix.conf directly. (In fact nix.machines is yet another hack that predates the general nix.conf configuration file, IIRC.) Note: this option is supported by the daemon for trusted users. The fact that this allows trusted users to specify paths to SSH keys to which they don't normally have access is maybe a bit too much trust...
This commit is contained in:
parent
ebc9f36a81
commit
1a68710d4d
6 changed files with 27 additions and 12 deletions
|
@ -45,7 +45,7 @@ int main (int argc, char * * argv)
|
||||||
unsetenv("DISPLAY");
|
unsetenv("DISPLAY");
|
||||||
unsetenv("SSH_ASKPASS");
|
unsetenv("SSH_ASKPASS");
|
||||||
|
|
||||||
if (argc != 5)
|
if (argc != 6)
|
||||||
throw UsageError("called without required arguments");
|
throw UsageError("called without required arguments");
|
||||||
|
|
||||||
auto store = openStore();
|
auto store = openStore();
|
||||||
|
@ -54,6 +54,7 @@ int main (int argc, char * * argv)
|
||||||
settings.maxSilentTime = std::stoll(argv[2]);
|
settings.maxSilentTime = std::stoll(argv[2]);
|
||||||
settings.buildTimeout = std::stoll(argv[3]);
|
settings.buildTimeout = std::stoll(argv[3]);
|
||||||
verbosity = (Verbosity) std::stoll(argv[4]);
|
verbosity = (Verbosity) std::stoll(argv[4]);
|
||||||
|
settings.builders = argv[5];
|
||||||
|
|
||||||
/* It would be more appropriate to use $XDG_RUNTIME_DIR, since
|
/* It would be more appropriate to use $XDG_RUNTIME_DIR, since
|
||||||
that gets cleared on reboot, but it wouldn't work on OS X. */
|
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<Store> sshStore;
|
std::shared_ptr<Store> sshStore;
|
||||||
AutoCloseFD bestSlotLock;
|
AutoCloseFD bestSlotLock;
|
||||||
|
|
||||||
Machines machines;
|
auto machines = getMachines();
|
||||||
try {
|
|
||||||
parseMachines(readFile(getEnv("NIX_REMOTE_SYSTEMS", SYSCONFDIR "/nix/machines")), machines);
|
|
||||||
} catch (const SysError & e) {
|
|
||||||
if (e.errNo != ENOENT)
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
debug("got %d remote builders", machines.size());
|
debug("got %d remote builders", machines.size());
|
||||||
|
|
||||||
if (machines.empty()) {
|
if (machines.empty()) {
|
||||||
|
|
|
@ -7,5 +7,3 @@ build-remote_INSTALL_DIR := $(libexecdir)/nix
|
||||||
build-remote_LIBS = libmain libutil libformat libstore
|
build-remote_LIBS = libmain libutil libformat libstore
|
||||||
|
|
||||||
build-remote_SOURCES := $(d)/build-remote.cc
|
build-remote_SOURCES := $(d)/build-remote.cc
|
||||||
|
|
||||||
build-remote_CXXFLAGS = -DSYSCONFDIR="\"$(sysconfdir)\""
|
|
||||||
|
|
|
@ -614,7 +614,8 @@ HookInstance::HookInstance()
|
||||||
settings.thisSystem,
|
settings.thisSystem,
|
||||||
std::to_string(settings.maxSilentTime),
|
std::to_string(settings.maxSilentTime),
|
||||||
std::to_string(settings.buildTimeout),
|
std::to_string(settings.buildTimeout),
|
||||||
std::to_string(verbosity)
|
std::to_string(verbosity),
|
||||||
|
settings.builders
|
||||||
};
|
};
|
||||||
|
|
||||||
execv(settings.buildHook.get().c_str(), stringsToCharPtrs(args).data());
|
execv(settings.buildHook.get().c_str(), stringsToCharPtrs(args).data());
|
||||||
|
|
|
@ -130,6 +130,9 @@ public:
|
||||||
PathSetting buildHook{this, true, nixLibexecDir + "/nix/build-remote", "build-hook",
|
PathSetting buildHook{this, true, nixLibexecDir + "/nix/build-remote", "build-hook",
|
||||||
"The path of the helper program that executes builds to remote machines."};
|
"The path of the helper program that executes builds to remote machines."};
|
||||||
|
|
||||||
|
Setting<std::string> builders{this, "", "builders",
|
||||||
|
"A semicolon-separated list of build machines, in the format of nix.machines."};
|
||||||
|
|
||||||
Setting<off_t> reservedSize{this, 8 * 1024 * 1024, "gc-reserved-space",
|
Setting<off_t> reservedSize{this, 8 * 1024 * 1024, "gc-reserved-space",
|
||||||
"Amount of reserved disk space for the garbage collector."};
|
"Amount of reserved disk space for the garbage collector."};
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ bool Machine::mandatoryMet(const std::set<string> & features) const {
|
||||||
|
|
||||||
void parseMachines(const std::string & s, Machines & machines)
|
void parseMachines(const std::string & s, Machines & machines)
|
||||||
{
|
{
|
||||||
for (auto line : tokenizeString<std::vector<string>>(s, "\n")) {
|
for (auto line : tokenizeString<std::vector<string>>(s, "\n;")) {
|
||||||
chomp(line);
|
chomp(line);
|
||||||
line.erase(std::find(line.begin(), line.end(), '#'), line.end());
|
line.erase(std::find(line.begin(), line.end(), '#'), line.end());
|
||||||
if (line.empty()) continue;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,4 +32,6 @@ typedef std::vector<Machine> Machines;
|
||||||
|
|
||||||
void parseMachines(const std::string & s, Machines & machines);
|
void parseMachines(const std::string & s, Machines & machines);
|
||||||
|
|
||||||
|
Machines getMachines();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue