forked from lix-project/lix
Automatically use a chroot store if /nix doesn't exist
Specifically, if we're not root and the daemon socket does not exist, then we use ~/.local/share/nix/root as a chroot store. This enables non-root users to download nix-static and have it work out of the box, e.g. ubuntu@ip-10-13-1-146:~$ ~/nix run nixpkgs#hello warning: '/nix' does not exists, so Nix will use '/home/ubuntu/.local/share/nix/root' as a chroot store Hello, world!
This commit is contained in:
parent
3c57db1a0f
commit
2a9fddc0b1
|
@ -1302,7 +1302,8 @@ std::pair<std::string, Store::Params> splitUriAndParams(const std::string & uri_
|
||||||
return {uri, params};
|
return {uri, params};
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool isNonUriPath(const std::string & spec) {
|
static bool isNonUriPath(const std::string & spec)
|
||||||
|
{
|
||||||
return
|
return
|
||||||
// is not a URL
|
// is not a URL
|
||||||
spec.find("://") == std::string::npos
|
spec.find("://") == std::string::npos
|
||||||
|
@ -1319,7 +1320,19 @@ std::shared_ptr<Store> openFromNonUri(const std::string & uri, const Store::Para
|
||||||
return std::make_shared<LocalStore>(params);
|
return std::make_shared<LocalStore>(params);
|
||||||
else if (pathExists(settings.nixDaemonSocketFile))
|
else if (pathExists(settings.nixDaemonSocketFile))
|
||||||
return std::make_shared<UDSRemoteStore>(params);
|
return std::make_shared<UDSRemoteStore>(params);
|
||||||
|
else if (!pathExists(stateDir) && params.empty() && getuid() != 0) {
|
||||||
|
/* If /nix doesn't exist, there is no daemon socket, and
|
||||||
|
we're not root, then automatically set up a chroot
|
||||||
|
store in ~/.local/share/nix/root. */
|
||||||
|
auto chrootStore = getDataDir() + "/nix/root";
|
||||||
|
if (!pathExists(chrootStore))
|
||||||
|
warn("'/nix' does not exists, so Nix will use '%s' as a chroot store", chrootStore);
|
||||||
else
|
else
|
||||||
|
debug("'/nix' does not exists, so Nix will use '%s' as a chroot store", chrootStore);
|
||||||
|
Store::Params params2;
|
||||||
|
params2["root"] = chrootStore;
|
||||||
|
return std::make_shared<LocalStore>(params2);
|
||||||
|
} else
|
||||||
return std::make_shared<LocalStore>(params);
|
return std::make_shared<LocalStore>(params);
|
||||||
} else if (uri == "daemon") {
|
} else if (uri == "daemon") {
|
||||||
return std::make_shared<UDSRemoteStore>(params);
|
return std::make_shared<UDSRemoteStore>(params);
|
||||||
|
|
Loading…
Reference in a new issue