diff --git a/src/libstore/build/derivation-building-goal.cc b/src/libstore/build/derivation-building-goal.cc index 24a53c27b..50c1d5055 100644 --- a/src/libstore/build/derivation-building-goal.cc +++ b/src/libstore/build/derivation-building-goal.cc @@ -766,6 +766,7 @@ Goal::Co DerivationBuildingGoal::tryToBuild() .initialOutputs = initialOutputs, .buildMode = buildMode, .defaultPathsInChroot = std::move(defaultPathsInChroot), + .systemFeatures = worker.store.config.systemFeatures.get(), .finalEnv = std::move(finalEnv), .extraFiles = std::move(extraFiles), }); diff --git a/src/libstore/include/nix/store/build/derivation-builder.hh b/src/libstore/include/nix/store/build/derivation-builder.hh index 48ad06e17..f00d4db25 100644 --- a/src/libstore/include/nix/store/build/derivation-builder.hh +++ b/src/libstore/include/nix/store/build/derivation-builder.hh @@ -65,6 +65,14 @@ struct DerivationBuilderParams */ PathsInChroot defaultPathsInChroot; + /** + * May be used to control various platform-specific functionality. + * + * For example, on Linux, the `kvm` system feature controls whether + * `/dev/kvm` should be exposed to the builder within the sandbox. + */ + StringSet systemFeatures; + struct EnvEntry { /** diff --git a/src/libstore/unix/build/linux-derivation-builder.cc b/src/libstore/unix/build/linux-derivation-builder.cc index 0d9dc4a85..b92d05607 100644 --- a/src/libstore/unix/build/linux-derivation-builder.cc +++ b/src/libstore/unix/build/linux-derivation-builder.cc @@ -492,7 +492,7 @@ struct ChrootLinuxDerivationBuilder : ChrootDerivationBuilder, LinuxDerivationBu createDirs(chrootRootDir + "/dev/shm"); createDirs(chrootRootDir + "/dev/pts"); ss.push_back("/dev/full"); - if (store.Store::config.systemFeatures.get().count("kvm") && pathExists("/dev/kvm")) + if (systemFeatures.count("kvm") && pathExists("/dev/kvm")) ss.push_back("/dev/kvm"); ss.push_back("/dev/null"); ss.push_back("/dev/random");