aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/build/local-derivation-goal.cc2
-rw-r--r--src/libstore/globals.hh26
-rw-r--r--src/libstore/lock.cc10
-rw-r--r--src/libstore/lock.hh2
4 files changed, 28 insertions, 12 deletions
diff --git a/src/libstore/build/local-derivation-goal.cc b/src/libstore/build/local-derivation-goal.cc
index 09da87476..45ea9968f 100644
--- a/src/libstore/build/local-derivation-goal.cc
+++ b/src/libstore/build/local-derivation-goal.cc
@@ -659,7 +659,7 @@ void LocalDerivationGoal::startBuilder()
}
#else
- if (useUidRange)
+ if (parsedDrv->useUidRange())
throw Error("feature 'uid-range' is not supported on this platform");
if (useSystemdCgroup)
throw Error("feature 'systemd-cgroup' is not supported on this platform");
diff --git a/src/libstore/globals.hh b/src/libstore/globals.hh
index be741a830..88fe72202 100644
--- a/src/libstore/globals.hh
+++ b/src/libstore/globals.hh
@@ -46,7 +46,13 @@ struct PluginFilesSetting : public BaseSetting<Paths>
void set(const std::string & str, bool append = false) override;
};
-const uint32_t maxIdsPerBuild = 1 << 16;
+const uint32_t maxIdsPerBuild =
+ #if __linux__
+ 1 << 16
+ #else
+ 1
+ #endif
+ ;
class Settings : public Config {
@@ -277,16 +283,26 @@ public:
multi-user settings with untrusted users.
)"};
- #if __linux__
Setting<bool> autoAllocateUids{this, false, "auto-allocate-uids",
"Whether to allocate UIDs for builders automatically."};
- Setting<uint32_t> startId{this, 872415232, "start-id",
+ Setting<uint32_t> startId{this,
+ #if __linux__
+ 872415232,
+ #else
+ 56930,
+ #endif
+ "start-id",
"The first UID and GID to use for dynamic ID allocation."};
- Setting<uint32_t> uidCount{this, maxIdsPerBuild * 128, "id-count",
+ Setting<uint32_t> uidCount{this,
+ #if __linux__
+ maxIdsPerBuild * 128,
+ #else
+ 128,
+ #endif
+ "id-count",
"The number of UIDs/GIDs to use for dynamic ID allocation."};
- #endif
Setting<bool> impersonateLinux26{this, false, "impersonate-linux-26",
"Whether to impersonate a Linux 2.6 machine on newer kernels.",
diff --git a/src/libstore/lock.cc b/src/libstore/lock.cc
index ecc51cebe..f9892bb91 100644
--- a/src/libstore/lock.cc
+++ b/src/libstore/lock.cc
@@ -122,15 +122,16 @@ struct AutoUserLock : UserLock
~AutoUserLock()
{
+ #if __linux__
// Get rid of our cgroup, ignoring errors.
if (cgroup) rmdir(cgroup->c_str());
+ #endif
}
void kill() override
{
#if __linux__
if (cgroup) {
- printError("KILL CGROUP %s", *cgroup);
destroyCgroup(*cgroup);
if (mkdir(cgroup->c_str(), 0755) == -1)
throw SysError("creating cgroup '%s'", *cgroup);
@@ -138,7 +139,6 @@ struct AutoUserLock : UserLock
#endif
{
assert(firstUid);
- printError("KILL USER %d", firstUid);
killUser(firstUid);
}
}
@@ -201,6 +201,7 @@ struct AutoUserLock : UserLock
lock->firstUid = settings.startId + i * maxIdsPerBuild;
lock->nrIds = nrIds;
+ #if __linux__
if (nrIds > 1) {
auto ourCgroups = getCgroups("/proc/self/cgroup");
auto ourCgroup = ourCgroups[""];
@@ -209,20 +210,17 @@ struct AutoUserLock : UserLock
auto ourCgroupPath = canonPath("/sys/fs/cgroup/" + ourCgroup);
- printError("PARENT CGROUP = %s", ourCgroupPath);
-
if (!pathExists(ourCgroupPath))
throw Error("expected cgroup directory '%s'", ourCgroupPath);
lock->cgroup = fmt("%s/nix-build-%d", ourCgroupPath, lock->firstUid);
- printError("CHILD CGROUP = %s", *lock->cgroup);
-
/* Record the cgroup in the lock file. This ensures that
if we subsequently get executed under a different parent
cgroup, we kill the previous cgroup first. */
writeFull(lock->fdUserLock.get(), *lock->cgroup);
}
+ #endif
return lock;
}
diff --git a/src/libstore/lock.hh b/src/libstore/lock.hh
index 62676a523..b5536408c 100644
--- a/src/libstore/lock.hh
+++ b/src/libstore/lock.hh
@@ -4,6 +4,8 @@
#include <optional>
+#include <sys/types.h>
+
namespace nix {
struct UserLock