aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--Makefile1
-rw-r--r--src/download-via-ssh/download-via-ssh.cc142
-rw-r--r--src/download-via-ssh/local.mk11
4 files changed, 0 insertions, 157 deletions
diff --git a/.gitignore b/.gitignore
index 4d0ac32b1..336967d15 100644
--- a/.gitignore
+++ b/.gitignore
@@ -71,9 +71,6 @@ Makefile.config
# /src/nix-channel/
/src/nix-channel/nix-channel
-# /src/download-via-ssh/
-/src/download-via-ssh/download-via-ssh
-
# /src/buildenv/
/src/buildenv/buildenv
diff --git a/Makefile b/Makefile
index 14be271bb..67dc14f8e 100644
--- a/Makefile
+++ b/Makefile
@@ -26,7 +26,6 @@ makefiles = \
misc/emacs/local.mk \
doc/manual/local.mk \
tests/local.mk
- #src/download-via-ssh/local.mk \
GLOBAL_CXXFLAGS += -std=c++14 -g -Wall
diff --git a/src/download-via-ssh/download-via-ssh.cc b/src/download-via-ssh/download-via-ssh.cc
deleted file mode 100644
index 4a1ba9a11..000000000
--- a/src/download-via-ssh/download-via-ssh.cc
+++ /dev/null
@@ -1,142 +0,0 @@
-#include "shared.hh"
-#include "util.hh"
-#include "serialise.hh"
-#include "archive.hh"
-#include "affinity.hh"
-#include "globals.hh"
-#include "serve-protocol.hh"
-#include "worker-protocol.hh"
-#include "store-api.hh"
-
-#include <iostream>
-#include <cstdlib>
-#include <unistd.h>
-
-using namespace nix;
-
-// !!! TODO:
-// * Respect more than the first host
-// * use a database
-// * show progress
-
-
-static std::pair<FdSink, FdSource> connect(const string & conn)
-{
- Pipe to, from;
- to.create();
- from.create();
- startProcess([&]() {
- if (dup2(to.readSide, STDIN_FILENO) == -1)
- throw SysError("dupping stdin");
- if (dup2(from.writeSide, STDOUT_FILENO) == -1)
- throw SysError("dupping stdout");
- restoreSignals();
- execlp("ssh", "ssh", "-x", "-T", conn.c_str(), "nix-store --serve", NULL);
- throw SysError("executing ssh");
- });
- // If child exits unexpectedly, we'll EPIPE or EOF early.
- // If we exit unexpectedly, child will EPIPE or EOF early.
- // So no need to keep track of it.
-
- return std::pair<FdSink, FdSource>(to.writeSide.borrow(), from.readSide.borrow());
-}
-
-
-static void substitute(std::pair<FdSink, FdSource> & pipes, Path storePath, Path destPath)
-{
- pipes.first << cmdDumpStorePath << storePath;
- pipes.first.flush();
- restorePath(destPath, pipes.second);
- std::cout << std::endl;
-}
-
-
-static void query(std::pair<FdSink, FdSource> & pipes)
-{
- for (string line; getline(std::cin, line);) {
- Strings tokenized = tokenizeString<Strings>(line);
- string cmd = tokenized.front();
- tokenized.pop_front();
- if (cmd == "have") {
- pipes.first
- << cmdQueryValidPaths
- << 0 // don't lock
- << 0 // don't substitute
- << tokenized;
- pipes.first.flush();
- PathSet paths = readStrings<PathSet>(pipes.second);
- for (auto & i : paths)
- std::cout << i << std::endl;
- } else if (cmd == "info") {
- pipes.first << cmdQueryPathInfos << tokenized;
- pipes.first.flush();
- while (1) {
- Path path = readString(pipes.second);
- if (path.empty()) break;
- assertStorePath(path);
- std::cout << path << std::endl;
- string deriver = readString(pipes.second);
- if (!deriver.empty()) assertStorePath(deriver);
- std::cout << deriver << std::endl;
- PathSet references = readStorePaths<PathSet>(pipes.second);
- std::cout << references.size() << std::endl;
- for (auto & i : references)
- std::cout << i << std::endl;
- std::cout << readLongLong(pipes.second) << std::endl;
- std::cout << readLongLong(pipes.second) << std::endl;
- }
- } else
- throw Error(format("unknown substituter query ‘%1%’") % cmd);
- std::cout << std::endl;
- }
-}
-
-
-int main(int argc, char * * argv)
-{
- return handleExceptions(argv[0], [&]() {
- if (argc < 2)
- throw UsageError("download-via-ssh requires an argument");
-
- initNix();
-
- settings.update();
-
- if (settings.sshSubstituterHosts.empty())
- return;
-
- std::cout << std::endl;
-
- /* Pass on the location of the daemon client's SSH
- authentication socket. */
- string sshAuthSock = settings.get("ssh-auth-sock", string(""));
- if (sshAuthSock != "") setenv("SSH_AUTH_SOCK", sshAuthSock.c_str(), 1);
-
- string host = settings.sshSubstituterHosts.front();
- std::pair<FdSink, FdSource> pipes = connect(host);
-
- /* Exchange the greeting */
- pipes.first << SERVE_MAGIC_1;
- pipes.first.flush();
- unsigned int magic = readInt(pipes.second);
- if (magic != SERVE_MAGIC_2)
- throw Error("protocol mismatch");
- readInt(pipes.second); // Server version, unused for now
- pipes.first << SERVE_PROTOCOL_VERSION;
- pipes.first.flush();
-
- string arg = argv[1];
- if (arg == "--query")
- query(pipes);
- else if (arg == "--substitute") {
- if (argc != 4)
- throw UsageError("download-via-ssh: --substitute takes exactly two arguments");
- Path storePath = argv[2];
- Path destPath = argv[3];
- printError(format("downloading ‘%1%’ via SSH from ‘%2%’...") % storePath % host);
- substitute(pipes, storePath, destPath);
- }
- else
- throw UsageError(format("download-via-ssh: unknown command ‘%1%’") % arg);
- });
-}
diff --git a/src/download-via-ssh/local.mk b/src/download-via-ssh/local.mk
deleted file mode 100644
index 80f4c385a..000000000
--- a/src/download-via-ssh/local.mk
+++ /dev/null
@@ -1,11 +0,0 @@
-programs += download-via-ssh
-
-download-via-ssh_DIR := $(d)
-
-download-via-ssh_SOURCES := $(d)/download-via-ssh.cc
-
-download-via-ssh_INSTALL_DIR := $(libexecdir)/nix/substituters
-
-download-via-ssh_CXXFLAGS = -Isrc/nix-store
-
-download-via-ssh_LIBS = libmain libstore libutil libformat