mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-28 00:26:15 +02:00
Merge remote-tracking branch 'upstream/master' into auto-uid-allocation
This commit is contained in:
commit
d3cfc14e3a
22 changed files with 207 additions and 171 deletions
|
@ -18,11 +18,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1591633336,
|
"lastModified": 1602604700,
|
||||||
"narHash": "sha256-oVXv4xAnDJB03LvZGbC72vSVlIbbJr8tpjEW5o/Fdek=",
|
"narHash": "sha256-TSfAZX0czPf1P8xnnGFXcoeoM9I5CaFjAdNP63W9DCY=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "70717a337f7ae4e486ba71a500367cad697e5f09",
|
"rev": "3a10a004bb5802d5f23c58886722e4239705e733",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
|
|
|
@ -1423,12 +1423,6 @@ void DerivationGoal::startBuilder()
|
||||||
if (useUidRange && (!buildUser || buildUser->getUIDCount() < 65536))
|
if (useUidRange && (!buildUser || buildUser->getUIDCount() < 65536))
|
||||||
throw Error("feature 'uid-range' requires '%s' to be enabled", settings.autoAllocateUids.name);
|
throw Error("feature 'uid-range' requires '%s' to be enabled", settings.autoAllocateUids.name);
|
||||||
|
|
||||||
writeFile(chrootRootDir + "/etc/passwd", fmt(
|
|
||||||
"root:x:0:0:Nix build user:%3%:/noshell\n"
|
|
||||||
"nixbld:x:%1%:%2%:Nix build user:%3%:/noshell\n"
|
|
||||||
"nobody:x:65534:65534:Nobody:/:/noshell\n",
|
|
||||||
sandboxUid(), sandboxGid(), settings.sandboxBuildDir));
|
|
||||||
|
|
||||||
/* Declare the build user's group so that programs get a consistent
|
/* Declare the build user's group so that programs get a consistent
|
||||||
view of the system (e.g., "id -gn"). */
|
view of the system (e.g., "id -gn"). */
|
||||||
writeFile(chrootRootDir + "/etc/group",
|
writeFile(chrootRootDir + "/etc/group",
|
||||||
|
@ -1755,6 +1749,14 @@ void DerivationGoal::startBuilder()
|
||||||
throw Error("cannot perform a sandboxed build because user namespaces are not enabled; check /proc/sys/user/max_user_namespaces");
|
throw Error("cannot perform a sandboxed build because user namespaces are not enabled; check /proc/sys/user/max_user_namespaces");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Now that we now the sandbox uid, we can write
|
||||||
|
/etc/passwd. */
|
||||||
|
writeFile(chrootRootDir + "/etc/passwd", fmt(
|
||||||
|
"root:x:0:0:Nix build user:%3%:/noshell\n"
|
||||||
|
"nixbld:x:%1%:%2%:Nix build user:%3%:/noshell\n"
|
||||||
|
"nobody:x:65534:65534:Nobody:/:/noshell\n",
|
||||||
|
sandboxUid(), sandboxGid(), settings.sandboxBuildDir));
|
||||||
|
|
||||||
/* Save the mount namespace of the child. We have to do this
|
/* Save the mount namespace of the child. We have to do this
|
||||||
*before* the child does a chroot. */
|
*before* the child does a chroot. */
|
||||||
sandboxMountNamespace = open(fmt("/proc/%d/ns/mnt", (pid_t) pid).c_str(), O_RDONLY);
|
sandboxMountNamespace = open(fmt("/proc/%d/ns/mnt", (pid_t) pid).c_str(), O_RDONLY);
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "derivations.hh"
|
#include "derivations.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
#include "local-store.hh"
|
#include "local-store.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
#include "finally.hh"
|
#include "finally.hh"
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
@ -682,7 +683,7 @@ void LocalStore::removeUnusedLinks(const GCState & state)
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if (stat(linksDir.c_str(), &st) == -1)
|
if (stat(linksDir.c_str(), &st) == -1)
|
||||||
throw SysError("statting '%1%'", linksDir);
|
throw SysError("statting '%1%'", linksDir);
|
||||||
auto overhead = st.st_blocks * 512ULL;
|
int64_t overhead = st.st_blocks * 512ULL;
|
||||||
|
|
||||||
printInfo("note: currently hard linking saves %.2f MiB",
|
printInfo("note: currently hard linking saves %.2f MiB",
|
||||||
((unsharedSize - actualSize - overhead) / (1024.0 * 1024.0)));
|
((unsharedSize - actualSize - overhead) / (1024.0 * 1024.0)));
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "archive.hh"
|
#include "archive.hh"
|
||||||
#include "fs-accessor.hh"
|
#include "fs-accessor.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
#include "compression.hh"
|
#include "compression.hh"
|
||||||
#include "derivations.hh"
|
#include "derivations.hh"
|
||||||
|
|
48
src/libstore/local-fs-store.hh
Normal file
48
src/libstore/local-fs-store.hh
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "store-api.hh"
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
struct LocalFSStoreConfig : virtual StoreConfig
|
||||||
|
{
|
||||||
|
using StoreConfig::StoreConfig;
|
||||||
|
// FIXME: the (StoreConfig*) cast works around a bug in gcc that causes
|
||||||
|
// it to omit the call to the Setting constructor. Clang works fine
|
||||||
|
// either way.
|
||||||
|
const PathSetting rootDir{(StoreConfig*) this, true, "",
|
||||||
|
"root", "directory prefixed to all other paths"};
|
||||||
|
const PathSetting stateDir{(StoreConfig*) this, false,
|
||||||
|
rootDir != "" ? rootDir + "/nix/var/nix" : settings.nixStateDir,
|
||||||
|
"state", "directory where Nix will store state"};
|
||||||
|
const PathSetting logDir{(StoreConfig*) this, false,
|
||||||
|
rootDir != "" ? rootDir + "/nix/var/log/nix" : settings.nixLogDir,
|
||||||
|
"log", "directory where Nix will store state"};
|
||||||
|
};
|
||||||
|
|
||||||
|
class LocalFSStore : public virtual Store, public virtual LocalFSStoreConfig
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
const static string drvsLogDir;
|
||||||
|
|
||||||
|
LocalFSStore(const Params & params);
|
||||||
|
|
||||||
|
void narFromPath(const StorePath & path, Sink & sink) override;
|
||||||
|
ref<FSAccessor> getFSAccessor() override;
|
||||||
|
|
||||||
|
/* Register a permanent GC root. */
|
||||||
|
Path addPermRoot(const StorePath & storePath, const Path & gcRoot);
|
||||||
|
|
||||||
|
virtual Path getRealStoreDir() { return storeDir; }
|
||||||
|
|
||||||
|
Path toRealPath(const Path & storePath) override
|
||||||
|
{
|
||||||
|
assert(isInStore(storePath));
|
||||||
|
return getRealStoreDir() + "/" + std::string(storePath, storeDir.size() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<std::string> getBuildLog(const StorePath & path) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "pathlocks.hh"
|
#include "pathlocks.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
#include "sync.hh"
|
#include "sync.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "profiles.hh"
|
#include "profiles.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
|
@ -12,16 +12,6 @@
|
||||||
#include "logging.hh"
|
#include "logging.hh"
|
||||||
#include "callback.hh"
|
#include "callback.hh"
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/un.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <cstring>
|
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
namespace worker_proto {
|
namespace worker_proto {
|
||||||
|
@ -125,69 +115,6 @@ ref<RemoteStore::Connection> RemoteStore::openConnectionWrapper()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
UDSRemoteStore::UDSRemoteStore(const Params & params)
|
|
||||||
: StoreConfig(params)
|
|
||||||
, Store(params)
|
|
||||||
, LocalFSStore(params)
|
|
||||||
, RemoteStore(params)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
UDSRemoteStore::UDSRemoteStore(
|
|
||||||
const std::string scheme,
|
|
||||||
std::string socket_path,
|
|
||||||
const Params & params)
|
|
||||||
: UDSRemoteStore(params)
|
|
||||||
{
|
|
||||||
path.emplace(socket_path);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
std::string UDSRemoteStore::getUri()
|
|
||||||
{
|
|
||||||
if (path) {
|
|
||||||
return std::string("unix://") + *path;
|
|
||||||
} else {
|
|
||||||
return "daemon";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
ref<RemoteStore::Connection> UDSRemoteStore::openConnection()
|
|
||||||
{
|
|
||||||
auto conn = make_ref<Connection>();
|
|
||||||
|
|
||||||
/* Connect to a daemon that does the privileged work for us. */
|
|
||||||
conn->fd = socket(PF_UNIX, SOCK_STREAM
|
|
||||||
#ifdef SOCK_CLOEXEC
|
|
||||||
| SOCK_CLOEXEC
|
|
||||||
#endif
|
|
||||||
, 0);
|
|
||||||
if (!conn->fd)
|
|
||||||
throw SysError("cannot create Unix domain socket");
|
|
||||||
closeOnExec(conn->fd.get());
|
|
||||||
|
|
||||||
string socketPath = path ? *path : settings.nixDaemonSocketFile;
|
|
||||||
|
|
||||||
struct sockaddr_un addr;
|
|
||||||
addr.sun_family = AF_UNIX;
|
|
||||||
if (socketPath.size() + 1 >= sizeof(addr.sun_path))
|
|
||||||
throw Error("socket path '%1%' is too long", socketPath);
|
|
||||||
strcpy(addr.sun_path, socketPath.c_str());
|
|
||||||
|
|
||||||
if (::connect(conn->fd.get(), (struct sockaddr *) &addr, sizeof(addr)) == -1)
|
|
||||||
throw SysError("cannot connect to daemon at '%1%'", socketPath);
|
|
||||||
|
|
||||||
conn->from.fd = conn->fd.get();
|
|
||||||
conn->to.fd = conn->fd.get();
|
|
||||||
|
|
||||||
conn->startTime = std::chrono::steady_clock::now();
|
|
||||||
|
|
||||||
return conn;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void RemoteStore::initConnection(Connection & conn)
|
void RemoteStore::initConnection(Connection & conn)
|
||||||
{
|
{
|
||||||
/* Send the magic greeting, check for the reply. */
|
/* Send the magic greeting, check for the reply. */
|
||||||
|
@ -1012,6 +939,4 @@ void ConnectionHandle::withFramedSink(std::function<void(Sink &sink)> fun)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterStoreImplementation<UDSRemoteStore, UDSRemoteStoreConfig> regUDSRemoteStore;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -155,49 +155,5 @@ private:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UDSRemoteStoreConfig : virtual LocalFSStoreConfig, virtual RemoteStoreConfig
|
|
||||||
{
|
|
||||||
UDSRemoteStoreConfig(const Store::Params & params)
|
|
||||||
: StoreConfig(params)
|
|
||||||
, LocalFSStoreConfig(params)
|
|
||||||
, RemoteStoreConfig(params)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
UDSRemoteStoreConfig()
|
|
||||||
: UDSRemoteStoreConfig(Store::Params({}))
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::string name() override { return "Local Daemon Store"; }
|
|
||||||
};
|
|
||||||
|
|
||||||
class UDSRemoteStore : public LocalFSStore, public RemoteStore, public virtual UDSRemoteStoreConfig
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
UDSRemoteStore(const Params & params);
|
|
||||||
UDSRemoteStore(const std::string scheme, std::string path, const Params & params);
|
|
||||||
|
|
||||||
std::string getUri() override;
|
|
||||||
|
|
||||||
static std::set<std::string> uriSchemes()
|
|
||||||
{ return {"unix"}; }
|
|
||||||
|
|
||||||
bool sameMachine() override
|
|
||||||
{ return true; }
|
|
||||||
|
|
||||||
ref<FSAccessor> getFSAccessor() override
|
|
||||||
{ return LocalFSStore::getFSAccessor(); }
|
|
||||||
|
|
||||||
void narFromPath(const StorePath & path, Sink & sink) override
|
|
||||||
{ LocalFSStore::narFromPath(path, sink); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
ref<RemoteStore::Connection> openConnection() override;
|
|
||||||
std::optional<std::string> path;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1011,7 +1011,7 @@ Derivation Store::readDerivation(const StorePath & drvPath)
|
||||||
|
|
||||||
|
|
||||||
#include "local-store.hh"
|
#include "local-store.hh"
|
||||||
#include "remote-store.hh"
|
#include "uds-remote-store.hh"
|
||||||
|
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
|
@ -715,47 +715,6 @@ protected:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct LocalFSStoreConfig : virtual StoreConfig
|
|
||||||
{
|
|
||||||
using StoreConfig::StoreConfig;
|
|
||||||
// FIXME: the (StoreConfig*) cast works around a bug in gcc that causes
|
|
||||||
// it to omit the call to the Setting constructor. Clang works fine
|
|
||||||
// either way.
|
|
||||||
const PathSetting rootDir{(StoreConfig*) this, true, "",
|
|
||||||
"root", "directory prefixed to all other paths"};
|
|
||||||
const PathSetting stateDir{(StoreConfig*) this, false,
|
|
||||||
rootDir != "" ? rootDir + "/nix/var/nix" : settings.nixStateDir,
|
|
||||||
"state", "directory where Nix will store state"};
|
|
||||||
const PathSetting logDir{(StoreConfig*) this, false,
|
|
||||||
rootDir != "" ? rootDir + "/nix/var/log/nix" : settings.nixLogDir,
|
|
||||||
"log", "directory where Nix will store state"};
|
|
||||||
};
|
|
||||||
|
|
||||||
class LocalFSStore : public virtual Store, public virtual LocalFSStoreConfig
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
const static string drvsLogDir;
|
|
||||||
|
|
||||||
LocalFSStore(const Params & params);
|
|
||||||
|
|
||||||
void narFromPath(const StorePath & path, Sink & sink) override;
|
|
||||||
ref<FSAccessor> getFSAccessor() override;
|
|
||||||
|
|
||||||
/* Register a permanent GC root. */
|
|
||||||
Path addPermRoot(const StorePath & storePath, const Path & gcRoot);
|
|
||||||
|
|
||||||
virtual Path getRealStoreDir() { return storeDir; }
|
|
||||||
|
|
||||||
Path toRealPath(const Path & storePath) override
|
|
||||||
{
|
|
||||||
assert(isInStore(storePath));
|
|
||||||
return getRealStoreDir() + "/" + std::string(storePath, storeDir.size() + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::shared_ptr<std::string> getBuildLog(const StorePath & path) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* Copy a path from one store to another. */
|
/* Copy a path from one store to another. */
|
||||||
void copyStorePath(ref<Store> srcStore, ref<Store> dstStore,
|
void copyStorePath(ref<Store> srcStore, ref<Store> dstStore,
|
||||||
|
|
81
src/libstore/uds-remote-store.cc
Normal file
81
src/libstore/uds-remote-store.cc
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
#include "uds-remote-store.hh"
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/un.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
UDSRemoteStore::UDSRemoteStore(const Params & params)
|
||||||
|
: StoreConfig(params)
|
||||||
|
, Store(params)
|
||||||
|
, LocalFSStore(params)
|
||||||
|
, RemoteStore(params)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
UDSRemoteStore::UDSRemoteStore(
|
||||||
|
const std::string scheme,
|
||||||
|
std::string socket_path,
|
||||||
|
const Params & params)
|
||||||
|
: UDSRemoteStore(params)
|
||||||
|
{
|
||||||
|
path.emplace(socket_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string UDSRemoteStore::getUri()
|
||||||
|
{
|
||||||
|
if (path) {
|
||||||
|
return std::string("unix://") + *path;
|
||||||
|
} else {
|
||||||
|
return "daemon";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ref<RemoteStore::Connection> UDSRemoteStore::openConnection()
|
||||||
|
{
|
||||||
|
auto conn = make_ref<Connection>();
|
||||||
|
|
||||||
|
/* Connect to a daemon that does the privileged work for us. */
|
||||||
|
conn->fd = socket(PF_UNIX, SOCK_STREAM
|
||||||
|
#ifdef SOCK_CLOEXEC
|
||||||
|
| SOCK_CLOEXEC
|
||||||
|
#endif
|
||||||
|
, 0);
|
||||||
|
if (!conn->fd)
|
||||||
|
throw SysError("cannot create Unix domain socket");
|
||||||
|
closeOnExec(conn->fd.get());
|
||||||
|
|
||||||
|
string socketPath = path ? *path : settings.nixDaemonSocketFile;
|
||||||
|
|
||||||
|
struct sockaddr_un addr;
|
||||||
|
addr.sun_family = AF_UNIX;
|
||||||
|
if (socketPath.size() + 1 >= sizeof(addr.sun_path))
|
||||||
|
throw Error("socket path '%1%' is too long", socketPath);
|
||||||
|
strcpy(addr.sun_path, socketPath.c_str());
|
||||||
|
|
||||||
|
if (::connect(conn->fd.get(), (struct sockaddr *) &addr, sizeof(addr)) == -1)
|
||||||
|
throw SysError("cannot connect to daemon at '%1%'", socketPath);
|
||||||
|
|
||||||
|
conn->from.fd = conn->fd.get();
|
||||||
|
conn->to.fd = conn->fd.get();
|
||||||
|
|
||||||
|
conn->startTime = std::chrono::steady_clock::now();
|
||||||
|
|
||||||
|
return conn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static RegisterStoreImplementation<UDSRemoteStore, UDSRemoteStoreConfig> regUDSRemoteStore;
|
||||||
|
|
||||||
|
}
|
52
src/libstore/uds-remote-store.hh
Normal file
52
src/libstore/uds-remote-store.hh
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "remote-store.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
|
|
||||||
|
namespace nix {
|
||||||
|
|
||||||
|
struct UDSRemoteStoreConfig : virtual LocalFSStoreConfig, virtual RemoteStoreConfig
|
||||||
|
{
|
||||||
|
UDSRemoteStoreConfig(const Store::Params & params)
|
||||||
|
: StoreConfig(params)
|
||||||
|
, LocalFSStoreConfig(params)
|
||||||
|
, RemoteStoreConfig(params)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
UDSRemoteStoreConfig()
|
||||||
|
: UDSRemoteStoreConfig(Store::Params({}))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string name() override { return "Local Daemon Store"; }
|
||||||
|
};
|
||||||
|
|
||||||
|
class UDSRemoteStore : public LocalFSStore, public RemoteStore, public virtual UDSRemoteStoreConfig
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
UDSRemoteStore(const Params & params);
|
||||||
|
UDSRemoteStore(const std::string scheme, std::string path, const Params & params);
|
||||||
|
|
||||||
|
std::string getUri() override;
|
||||||
|
|
||||||
|
static std::set<std::string> uriSchemes()
|
||||||
|
{ return {"unix"}; }
|
||||||
|
|
||||||
|
bool sameMachine() override
|
||||||
|
{ return true; }
|
||||||
|
|
||||||
|
ref<FSAccessor> getFSAccessor() override
|
||||||
|
{ return LocalFSStore::getFSAccessor(); }
|
||||||
|
|
||||||
|
void narFromPath(const StorePath & path, Sink & sink) override
|
||||||
|
{ LocalFSStore::narFromPath(path, sink); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
ref<RemoteStore::Connection> openConnection() override;
|
||||||
|
std::optional<std::string> path;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -6,6 +6,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
#include "derivations.hh"
|
#include "derivations.hh"
|
||||||
#include "affinity.hh"
|
#include "affinity.hh"
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "profiles.hh"
|
#include "profiles.hh"
|
||||||
#include "shared.hh"
|
#include "shared.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
#include "user-env.hh"
|
#include "user-env.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
#include "json.hh"
|
#include "json.hh"
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
#include "derivations.hh"
|
#include "derivations.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
#include "shared.hh"
|
#include "shared.hh"
|
||||||
#include "eval.hh"
|
#include "eval.hh"
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "value-to-json.hh"
|
#include "value-to-json.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
#include "common-eval-args.hh"
|
#include "common-eval-args.hh"
|
||||||
#include "../nix/legacy.hh"
|
#include "../nix/legacy.hh"
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "common-args.hh"
|
#include "common-args.hh"
|
||||||
#include "shared.hh"
|
#include "shared.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "common-args.hh"
|
#include "common-args.hh"
|
||||||
#include "shared.hh"
|
#include "shared.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
#include "fs-accessor.hh"
|
#include "fs-accessor.hh"
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "command.hh"
|
#include "command.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
#include "derivations.hh"
|
#include "derivations.hh"
|
||||||
#include "nixexpr.hh"
|
#include "nixexpr.hh"
|
||||||
#include "profiles.hh"
|
#include "profiles.hh"
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "serve-protocol.hh"
|
#include "serve-protocol.hh"
|
||||||
#include "shared.hh"
|
#include "shared.hh"
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
|
#include "local-fs-store.hh"
|
||||||
#include "util.hh"
|
#include "util.hh"
|
||||||
#include "worker-protocol.hh"
|
#include "worker-protocol.hh"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue