]> git.ipfire.org Git - people/ms/pakfire.git/commitdiff
build: Connect jail with cgroup
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 Aug 2022 15:35:35 +0000 (15:35 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 Aug 2022 15:35:35 +0000 (15:35 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/build.c
src/libpakfire/include/pakfire/jail.h
src/libpakfire/jail.c

index 3c0d9b76de82bf7450f0a0091c230809de879f43..c2a1349af17176253c722e00cac93ca20651e9d8 100644 (file)
@@ -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;
 }
index 3025c5374444f45600a97c5de83002b541b5a1c0..8ec1da523dc74b3ea63ef5f41fa4e6090b103572 100644 (file)
@@ -61,6 +61,11 @@ char* pakfire_jail_concat_output(struct pakfire_jail* jail,
 
 #ifdef PAKFIRE_PRIVATE
 
+#include <pakfire/cgroup.h>
+
+// 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,
index f03a4f2d0ce5da348c17cfadac9586c30fd14877..414bb6e1874d30198250f73562eb1c407335f87a 100644 (file)
@@ -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