diff options
author | Profpatsch <mail@profpatsch.de> | 2019-12-12T14·15+0100 |
---|---|---|
committer | Eelco Dolstra <edolstra@gmail.com> | 2020-04-10T08·45+0200 |
commit | 7afd8321edbf94d19caa76b668133ae3d0e58eb3 (patch) | |
tree | fef20a6800ce7175fcf2f49a323c9d33097e1eab | |
parent | 2007b4a89beca10326c6d94c7763d607eacc7710 (diff) |
libstore/ssh: Improve error message on failing `execvp`
If the `throw` is reached, this means that execvp into `ssh` wasn’t successful. We can hint at a usual problem, which is a missing `ssh` executable. Test with: ``` env PATH= ./result/bin/nix-copy-closure --builders '' unusedhost ``` and the bash version with ``` env PATH= ./result/bin/nix-copy-closure --builders '' localhost ``` (cherry picked from commit 38b29fb72ca4a07afbec1fd5067f59ca7d7f0fab)
-rw-r--r-- | src/libstore/ssh.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/libstore/ssh.cc b/src/libstore/ssh.cc index 5e0e44935cca..2533e26e8925 100644 --- a/src/libstore/ssh.cc +++ b/src/libstore/ssh.cc @@ -47,10 +47,13 @@ std::unique_ptr<SSHMaster::Connection> SSHMaster::startCommand(const std::string throw SysError("duping over stderr"); Strings args; + const char * execInto; if (fakeSSH) { + execInto = "bash"; args = { "bash", "-c" }; } else { + execInto = "ssh"; args = { "ssh", host.c_str(), "-x", "-a" }; addCommonSSHOpts(args); if (socketPath != "") @@ -62,7 +65,8 @@ std::unique_ptr<SSHMaster::Connection> SSHMaster::startCommand(const std::string args.push_back(command); execvp(args.begin()->c_str(), stringsToCharPtrs(args).data()); - throw SysError("executing '%s' on '%s'", command, host); + // could not exec ssh/bash + throw SysError("Failed to exec into %s. Is it in PATH?", execInto); }); @@ -108,7 +112,7 @@ Path SSHMaster::startMaster() addCommonSSHOpts(args); execvp(args.begin()->c_str(), stringsToCharPtrs(args).data()); - throw SysError("starting SSH master"); + throw SysError("Failed to exec into ssh. Is it in PATH?"); }); out.writeSide = -1; |