diff --git a/doc/manual/command-ref/conf-file.xml b/doc/manual/command-ref/conf-file.xml index 053f4d43c..4bd73b2fc 100644 --- a/doc/manual/command-ref/conf-file.xml +++ b/doc/manual/command-ref/conf-file.xml @@ -243,7 +243,8 @@ flag, e.g. --option gc-keep-outputs false. users” feature to perform the actual builds under different users than root). Currently, chroot builds only work on Linux because Nix uses “bind mounts” to make the Nix store and other - directories available inside the chroot. + directories available inside the chroot. Kernel version 3.13 or later + is needed due to a PID namespace fix nix depends on. diff --git a/src/libstore/build.cc b/src/libstore/build.cc index e0398e2fb..259324734 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -1970,7 +1970,12 @@ void DerivationGoal::startBuilder() char stack[32 * 1024]; pid_t child = clone(childEntry, stack + sizeof(stack) - 8, CLONE_NEWPID | CLONE_NEWNS | CLONE_NEWNET | CLONE_NEWIPC | CLONE_NEWUTS | CLONE_PARENT | SIGCHLD, this); - if (child == -1) throw SysError("cloning builder process"); + if (child == -1) { + if (errno == EINVAL) + throw SysError("cloning builder process (Linux chroot builds require 3.13 or later)"); + else + throw SysError("cloning builder process"); + } writeFull(builderOut.writeSide, int2String(child) + "\n"); _exit(0); });