forked from lix-project/lix
Use the daemon when we don't have write access to the Nix database
This commit is contained in:
parent
4fa08f3edb
commit
9e7c1a4bbd
|
@ -12,6 +12,7 @@
|
||||||
</partintro>
|
</partintro>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
<xi:include href="rl-1.12.xml" />
|
||||||
<xi:include href="rl-1.11.xml" />
|
<xi:include href="rl-1.11.xml" />
|
||||||
<xi:include href="rl-1.10.xml" />
|
<xi:include href="rl-1.10.xml" />
|
||||||
<xi:include href="rl-1.9.xml" />
|
<xi:include href="rl-1.9.xml" />
|
||||||
|
|
24
doc/manual/release-notes/rl-1.12.xml
Normal file
24
doc/manual/release-notes/rl-1.12.xml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<section xmlns="http://docbook.org/ns/docbook"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:xi="http://www.w3.org/2001/XInclude"
|
||||||
|
version="5.0"
|
||||||
|
xml:id="ssec-relnotes-1.12">
|
||||||
|
|
||||||
|
<title>Release 1.12 (TBA)</title>
|
||||||
|
|
||||||
|
<para>This release has the following new features:</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>It is no longer necessary to set the
|
||||||
|
<envar>NIX_REMOTE</envar> environment variable if you need to use
|
||||||
|
the Nix daemon. Nix will use the daemon automatically if you don’t
|
||||||
|
have write access to the Nix database.</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>This release has contributions from TBD.</para>
|
||||||
|
|
||||||
|
</section>
|
|
@ -397,9 +397,15 @@ int LocalStore::getSchema()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool LocalStore::haveWriteAccess()
|
||||||
|
{
|
||||||
|
return access(settings.nixDBPath.c_str(), R_OK | W_OK) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void LocalStore::openDB(bool create)
|
void LocalStore::openDB(bool create)
|
||||||
{
|
{
|
||||||
if (access(settings.nixDBPath.c_str(), R_OK | W_OK))
|
if (!haveWriteAccess())
|
||||||
throw SysError(format("Nix database directory ‘%1%’ is not writable") % settings.nixDBPath);
|
throw SysError(format("Nix database directory ‘%1%’ is not writable") % settings.nixDBPath);
|
||||||
|
|
||||||
/* Open the Nix database. */
|
/* Open the Nix database. */
|
||||||
|
|
|
@ -253,6 +253,12 @@ private:
|
||||||
|
|
||||||
int getSchema();
|
int getSchema();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
static bool haveWriteAccess();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
void openDB(bool create);
|
void openDB(bool create);
|
||||||
|
|
||||||
void makeStoreWritable();
|
void makeStoreWritable();
|
||||||
|
|
|
@ -50,14 +50,8 @@ void RemoteStore::openConnection(bool reserveSpace)
|
||||||
if (initialised) return;
|
if (initialised) return;
|
||||||
initialised = true;
|
initialised = true;
|
||||||
|
|
||||||
string remoteMode = getEnv("NIX_REMOTE");
|
/* Connect to a daemon that does the privileged work for us. */
|
||||||
|
connectToDaemon();
|
||||||
if (remoteMode == "daemon")
|
|
||||||
/* Connect to a daemon that does the privileged work for
|
|
||||||
us. */
|
|
||||||
connectToDaemon();
|
|
||||||
else
|
|
||||||
throw Error(format("invalid setting for NIX_REMOTE, ‘%1%’") % remoteMode);
|
|
||||||
|
|
||||||
from.fd = fdSocket;
|
from.fd = fdSocket;
|
||||||
to.fd = fdSocket;
|
to.fd = fdSocket;
|
||||||
|
|
|
@ -311,10 +311,22 @@ std::shared_ptr<StoreAPI> store;
|
||||||
|
|
||||||
std::shared_ptr<StoreAPI> openStore(bool reserveSpace)
|
std::shared_ptr<StoreAPI> openStore(bool reserveSpace)
|
||||||
{
|
{
|
||||||
if (getEnv("NIX_REMOTE") == "")
|
enum { mDaemon, mLocal, mAuto } mode;
|
||||||
return std::shared_ptr<StoreAPI>(new LocalStore(reserveSpace));
|
|
||||||
else
|
mode = getEnv("NIX_REMOTE") == "daemon" ? mDaemon : mAuto;
|
||||||
return std::shared_ptr<StoreAPI>(new RemoteStore());
|
|
||||||
|
if (mode == mAuto) {
|
||||||
|
if (LocalStore::haveWriteAccess())
|
||||||
|
mode = mLocal;
|
||||||
|
else if (pathExists(settings.nixDaemonSocketFile))
|
||||||
|
mode = mDaemon;
|
||||||
|
else
|
||||||
|
mode = mLocal;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mode == mDaemon
|
||||||
|
? (std::shared_ptr<StoreAPI>) std::make_shared<RemoteStore>()
|
||||||
|
: std::make_shared<LocalStore>(reserveSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ deps="$(nix-store -qR $TEST_ROOT/result)"
|
||||||
nix-store --dump-db > $TEST_ROOT/dump
|
nix-store --dump-db > $TEST_ROOT/dump
|
||||||
|
|
||||||
rm -rf $NIX_DB_DIR
|
rm -rf $NIX_DB_DIR
|
||||||
|
mkdir $NIX_DB_DIR
|
||||||
|
|
||||||
nix-store --load-db < $TEST_ROOT/dump
|
nix-store --load-db < $TEST_ROOT/dump
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue