]> git.ipfire.org Git - pakfire.git/commitdiff
build: Ignore cgroups if they are not fully functional
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 22 Feb 2025 20:28:16 +0000 (20:28 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 22 Feb 2025 20:28:16 +0000 (20:28 +0000)
This is an experimental change to see how this will all turn out on
Jenkins.

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/pakfire/build.c
src/pakfire/cgroup.c
src/pakfire/cgroup.h
src/pakfire/jail.c

index be6e6e45f81eeef06f856a5d82c7d61c2da4cdc2..9caf2d50a2496b36103838cce2ea4b0e2d570bcd 100644 (file)
@@ -1842,9 +1842,16 @@ static int pakfire_build_setup_jail(struct pakfire_build* build) {
 
        // Connect the jail to our cgroup
        r = pakfire_jail_set_cgroup(build->jail, build->cgroup);
-       if (r) {
-               ERROR(build->ctx, "Could not set cgroup for jail: %m\n");
-               return r;
+       if (r < 0) {
+               switch (-r) {
+                       case EINVAL:
+                               ERROR(build->ctx, "cgroup cannot be used. Ignoring.\n");
+                               break;
+
+                       default:
+                               ERROR(build->ctx, "Could not set cgroup for jail: %m\n");
+                               return r;
+               }
        }
 
        // Build everything with a slightly lower priority
index 5531bd98a833479e89112efd3091f38badffdbcb..8f9d61cabd8dc9121db18da5fc3bce49ab1eaa3c 100644 (file)
@@ -522,6 +522,13 @@ struct pakfire_cgroup* pakfire_cgroup_unref(struct pakfire_cgroup* cgroup) {
        return NULL;
 }
 
+int pakfire_cgroup_is_valid(struct pakfire_cgroup* self) {
+       if (self->controllers)
+               return 1;
+
+       return 0;
+}
+
 int pakfire_cgroup_child(struct pakfire_cgroup** child,
                struct pakfire_cgroup* cgroup, const char* path, int flags) {
        return pakfire_cgroup_open(child, cgroup->ctx, cgroup, path, flags);
index 3d7f067a714d43fc4c1be6525a3185796d141c49..37c8863bdcf94e67c06af0d88d825949baeb041d 100644 (file)
@@ -206,6 +206,8 @@ int pakfire_cgroup_create(struct pakfire_cgroup** cgroup,
 struct pakfire_cgroup* pakfire_cgroup_ref(struct pakfire_cgroup* cgroup);
 struct pakfire_cgroup* pakfire_cgroup_unref(struct pakfire_cgroup* cgroup);
 
+int pakfire_cgroup_is_valid(struct pakfire_cgroup* self);
+
 int pakfire_cgroup_child(struct pakfire_cgroup** child,
        struct pakfire_cgroup* cgroup, const char* path, int flags);
 
index 07603e204bd185b0d32ae7f1bfb572571a1c8adf..c39512490af14fe46e9f2c8fd49bde2f0e6eb7f0 100644 (file)
@@ -289,6 +289,10 @@ int pakfire_jail_set_cgroup(struct pakfire_jail* jail, struct pakfire_cgroup* cg
        if (cgroup) {
                DEBUG(jail->ctx, "Setting cgroup %p\n", cgroup);
 
+               // Don't accept the cgroup if it is in an invalid state
+               if (!pakfire_cgroup_is_valid(cgroup))
+                       return -EINVAL;
+
                jail->cgroup = pakfire_cgroup_ref(cgroup);
        }