#include <uuid/uuid.h>
#include <pakfire/build.h>
+#include <pakfire/cgroup.h>
#include <pakfire/dist.h>
#include <pakfire/file.h>
#include <pakfire/jail.h>
// Build ID
uuid_t id;
+ char _id[UUID_STR_LEN];
+
+ // cgroup
+ struct pakfire_cgroup* cgroup;
};
static const char* stages[] = {
}
static void pakfire_build_free(struct pakfire_build* build) {
+ if (build->cgroup)
+ pakfire_cgroup_unref(build->cgroup);
+
pakfire_unref(build->pakfire);
free(build);
}
uuid_generate_random(build->id);
}
+ // Store the ID as string, too
+ uuid_unparse_lower(build->id, build->_id);
+
+ return 0;
+}
+
+/*
+ Sets up a new cgroup for this build
+*/
+static int pakfire_build_setup_cgroup(struct pakfire_build* build) {
+ char path[PATH_MAX];
+ int r;
+
+ // Compose path
+ r = pakfire_string_format(path, "pakfire/build-%s", build->_id);
+ if (r < 0) {
+ ERROR(build->pakfire, "Could not compose path for cgroup: %m\n");
+ return 1;
+ }
+
+ // Create a new cgroup
+ r = pakfire_cgroup_open(&build->cgroup, build->pakfire, path,
+ PAKFIRE_CGROUP_ENABLE_ACCOUNTING);
+ if (r) {
+ ERROR(build->pakfire, "Could not create cgroup for build %s: %m\n", build->_id);
+ return r;
+ }
+
+ // Done
return 0;
}
if (r)
goto ERROR;
+ // Create cgroup
+ r = pakfire_build_setup_cgroup(b);
+ if (r)
+ goto ERROR;
+
*build = b;
return 0;