#define CCACHE_DIR "/var/cache/ccache"
// We guarantee 2 GiB of memory to every build container
-#define PAKFIRE_BUILD_GUARANTEED_MEMORY (size_t)2 * 1024 * 1024 * 1024
+#define PAKFIRE_BUILD_MEMORY_GUARANTEED (size_t)2 * 1024 * 1024 * 1024
// We allow only up to 2048 processes/threads for every build container
#define PAKFIRE_BUILD_PID_LIMIT (size_t)2048
Sets up a new cgroup for this build
*/
static int pakfire_build_setup_cgroup(struct pakfire_build* build) {
+ struct pakfire_config* config = NULL;
char path[PATH_MAX];
int r;
r = pakfire_string_format(path, "pakfire/build-%s", build->_id);
if (r) {
ERROR(build->pakfire, "Could not compose path for cgroup: %m\n");
- return 1;
+ goto ERROR;
}
// Create a new cgroup
PAKFIRE_CGROUP_ENABLE_ACCOUNTING);
if (r) {
ERROR(build->pakfire, "Could not create cgroup for build %s: %m\n", build->_id);
- return r;
+ goto ERROR;
}
+ // Fetch config
+ config = pakfire_get_config(build->pakfire);
+ if (!config)
+ goto ERROR;
+
// Guarantee some minimum memory
- r = pakfire_cgroup_set_guaranteed_memory(build->cgroup, PAKFIRE_BUILD_GUARANTEED_MEMORY);
- if (r)
- return r;
+ size_t memory_guaranteed = pakfire_config_get_bytes(config, "build",
+ "memory_guaranteed", PAKFIRE_BUILD_MEMORY_GUARANTEED);
+ if (memory_guaranteed) {
+ r = pakfire_cgroup_set_guaranteed_memory(build->cgroup, memory_guaranteed);
+ if (r)
+ goto ERROR;
+ }
// Set PID limit
- r = pakfire_cgroup_set_pid_limit(build->cgroup, PAKFIRE_BUILD_PID_LIMIT);
- if (r)
- return r;
+ size_t pid_limit = pakfire_config_get_int(config, "build",
+ "pid_limit", PAKFIRE_BUILD_PID_LIMIT);
+ if (pid_limit) {
+ r = pakfire_cgroup_set_pid_limit(build->cgroup, pid_limit);
+ if (r)
+ goto ERROR;
+ }
- // Done
- return 0;
+ERROR:
+ if (config)
+ pakfire_config_unref(config);
+
+ return r;
}
/*