diff --git a/src/libstore/unix/build/derivation-builder.cc b/src/libstore/unix/build/derivation-builder.cc index 9935400b9..232a125e4 100644 --- a/src/libstore/unix/build/derivation-builder.cc +++ b/src/libstore/unix/build/derivation-builder.cc @@ -2157,7 +2157,7 @@ std::unique_ptr makeDerivationBuilder( } if (useSandbox) - return std::make_unique( + return std::make_unique( store, std::move(miscMethods), std::move(params)); @@ -2172,6 +2172,11 @@ std::unique_ptr makeDerivationBuilder( std::move(miscMethods), std::move(params), useSandbox); + #elif defined(__linux__) + return std::make_unique( + store, + std::move(miscMethods), + std::move(params)); #else if (useSandbox) throw Error("sandboxing builds is not supported on this platform"); diff --git a/src/libstore/unix/build/linux-derivation-builder.cc b/src/libstore/unix/build/linux-derivation-builder.cc index fe62314f2..c27b87163 100644 --- a/src/libstore/unix/build/linux-derivation-builder.cc +++ b/src/libstore/unix/build/linux-derivation-builder.cc @@ -154,6 +154,18 @@ static void doBind(const Path & source, const Path & target, bool optional = fal } struct LinuxDerivationBuilder : DerivationBuilderImpl +{ + using DerivationBuilderImpl::DerivationBuilderImpl; + + void enterChroot() override + { + setupSeccomp(); + + linux::setPersonality(drv.platform); + } +}; + +struct ChrootLinuxDerivationBuilder : LinuxDerivationBuilder { /** * Pipe for synchronising updates to the builder namespaces. @@ -190,7 +202,7 @@ struct LinuxDerivationBuilder : DerivationBuilderImpl */ std::optional cgroup; - using DerivationBuilderImpl::DerivationBuilderImpl; + using LinuxDerivationBuilder::LinuxDerivationBuilder; void deleteTmpDir(bool force) override { @@ -772,11 +784,7 @@ struct LinuxDerivationBuilder : DerivationBuilderImpl if (rmdir("real-root") == -1) throw SysError("cannot remove real-root directory"); - // FIXME: move to LinuxDerivationBuilder - setupSeccomp(); - - // FIXME: move to LinuxDerivationBuilder - linux::setPersonality(drv.platform); + LinuxDerivationBuilder::enterChroot(); } void setUser() override