Enable recursive Nix using a feature

Derivations that want to use recursion should now set

  requiredSystemFeatures = [ "recursive-nix" ];

to make the daemon socket appear.

Also, Nix should be configured with "experimental-features =
recursive-nix".
This commit is contained in:
Eelco Dolstra 2019-11-04 13:48:58 +01:00
parent 2af9561316
commit c119ab9db0
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE
3 changed files with 8 additions and 3 deletions

View file

@ -2248,6 +2248,7 @@ void DerivationGoal::startBuilder()
/* Fire up a Nix daemon to process recursive Nix calls from the
builder. */
if (parsedDrv->getRequiredSystemFeatures().count("recursive-nix"))
startDaemon();
/* Run the builder. */
@ -2832,6 +2833,8 @@ struct RestrictedStore : public LocalFSStore
void DerivationGoal::startDaemon()
{
settings.requireExperimentalFeature("recursive-nix");
Store::Params params;
params["path-info-cache-size"] = "0";
params["store"] = worker.store.storeDir;

View file

@ -95,7 +95,7 @@ StringSet Settings::getDefaultSystemFeatures()
/* For backwards compatibility, accept some "features" that are
used in Nixpkgs to route builds to certain machines but don't
actually require anything special on the machines. */
StringSet features{"nixos-test", "benchmark", "big-parallel"};
StringSet features{"nixos-test", "benchmark", "big-parallel", "recursive-nix"};
#if __linux__
if (access("/dev/kvm", R_OK | W_OK) == 0)

View file

@ -4,7 +4,7 @@ clearStore
export unreachable=$(nix add-to-store ./recursive.sh)
nix build -o $TEST_ROOT/result -L '(
nix --experimental-features 'nix-command recursive-nix' build -o $TEST_ROOT/result -L '(
with import ./config.nix;
with import <nix/config.nix>;
mkDerivation {
@ -15,6 +15,8 @@ nix build -o $TEST_ROOT/result -L '(
# Note: this is a string without context.
unreachable = builtins.getEnv "unreachable";
requiredSystemFeatures = [ "recursive-nix" ];
buildCommand = '\'\''
mkdir $out
PATH=${nixBinDir}:$PATH