From: Michael Tremer Date: Mon, 8 Aug 2022 15:35:35 +0000 (+0000) Subject: build: Connect jail with cgroup X-Git-Tag: 0.9.28~577 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15503538106fdc85e0d7c4536f4f7652f95f6464;p=pakfire.git build: Connect jail with cgroup Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 3c0d9b76d..c2a1349af 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -855,6 +855,13 @@ static int pakfire_build_setup_jail(struct pakfire_build* build) { return r; } + // Connect the jail to our cgroup + r = pakfire_jail_set_cgroup(build->jail, build->cgroup); + if (r) { + ERROR(build->pakfire, "Could not set cgroup for jail: %m\n"); + return r; + } + // Done return 0; } diff --git a/src/libpakfire/include/pakfire/jail.h b/src/libpakfire/include/pakfire/jail.h index 3025c5374..8ec1da523 100644 --- a/src/libpakfire/include/pakfire/jail.h +++ b/src/libpakfire/include/pakfire/jail.h @@ -61,6 +61,11 @@ char* pakfire_jail_concat_output(struct pakfire_jail* jail, #ifdef PAKFIRE_PRIVATE +#include + +// Resource limits +int pakfire_jail_set_cgroup(struct pakfire_jail* jail, struct pakfire_cgroup* cgroup); + // Convenience functions int pakfire_jail_run(struct pakfire* pakfire, const char* argv[], int flags, char*** output); int pakfire_jail_run_script(struct pakfire* pakfire, diff --git a/src/libpakfire/jail.c b/src/libpakfire/jail.c index f03a4f2d0..414bb6e18 100644 --- a/src/libpakfire/jail.c +++ b/src/libpakfire/jail.c @@ -72,6 +72,9 @@ struct pakfire_jail { // Resource Limits int nice; + // CGroup + struct pakfire_cgroup* cgroup; + // Environment char* env[ENVIRON_SIZE]; @@ -268,6 +271,24 @@ PAKFIRE_EXPORT int pakfire_jail_nice(struct pakfire_jail* jail, int nice) { return 0; } +int pakfire_jail_set_cgroup(struct pakfire_jail* jail, struct pakfire_cgroup* cgroup) { + // Free any previous cgroup + if (jail->cgroup) { + pakfire_cgroup_unref(jail->cgroup); + jail->cgroup = NULL; + } + + // Set any new cgroup + if (cgroup) { + DEBUG(jail->pakfire, "Setting cgroup %p\n", cgroup); + + jail->cgroup = pakfire_cgroup_ref(cgroup); + } + + // Done + return 0; +} + // Environment // Returns the length of the environment