diff options
author | Luke Shumaker <lukeshu@parabola.nu> | 2018-07-23 21:38:18 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@parabola.nu> | 2018-08-16 21:55:17 -0400 |
commit | 43368aa05f59ff87dcaad85c91915706a9b6376b (patch) | |
tree | 2548b89ad39a5b67ef7051d2c10789cca793fc52 | |
parent | 117fe403f15a05282679e370b34cdce25c386cc4 (diff) |
nspawn: Also allow the user to force hybrid cgroup mode
-rw-r--r-- | doc/ENVIRONMENT.md | 15 | ||||
-rw-r--r-- | src/nspawn/nspawn.c | 26 |
2 files changed, 31 insertions, 10 deletions
diff --git a/doc/ENVIRONMENT.md b/doc/ENVIRONMENT.md index 85d26fe28c..7afd8127a2 100644 --- a/doc/ENVIRONMENT.md +++ b/doc/ENVIRONMENT.md @@ -49,8 +49,19 @@ systemctl: systemd-nspawn: -* `$UNIFIED_CGROUP_HIERARCHY=1` — if set, force nspawn into unified cgroup - hierarchy mode. +* `$UNIFIED_CGROUP_HIERARCHY=…` — if set, force nspawn into the + specified cgroup hierarchy mode: + + - "legacy", "legacy-sd", or falsey values sets it to systemd's + cgroup-v1 mode, + - "hybrid-sd232" sets it to systemd-v232's cgroup-v1/v2 hybrid + mode, + - "hybrid" or "hybrid-sd233" sets it to systemd-v233+'s + cgroup-v1/v2 hybrid mode, + - "unified" or truthy values sets it to cgroup-v2 mode, + + Leaving it unset causes it to try to magically sniff the appropriate + cgroup mode from the container's image. * `$SYSTEMD_NSPAWN_API_VFS_WRITABLE=1` — if set, make /sys and /proc/sys and friends writable in the container. If set to "network", leave only diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index c831b4e3f3..d4001e5070 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -329,15 +329,25 @@ static void parse_inner_cgver_env(void) { e = getenv("UNIFIED_CGROUP_HIERARCHY"); if (e) { - r = parse_boolean(e); - if (r < 0) { - log_warning_errno(r, "Failed to parse UNIFIED_CGROUP_HIERARCHY from environment, ignoring."); - arg_inner_cgver = CGROUP_UNIFIED_UNKNOWN; - return; - } else if (r > 0) - arg_inner_cgver = CGROUP_UNIFIED_ALL; - else + if (streq(e, "legacy") || streq(e, "legacy-sd")) arg_inner_cgver = CGROUP_UNIFIED_NONE; + else if (streq(e, "hybrid-sd232")) + arg_inner_cgver = CGROUP_UNIFIED_SYSTEMD232; + else if (streq(e, "hybrid") || streq(e, "hybrid-sd233")) + arg_inner_cgver = CGROUP_UNIFIED_SYSTEMD233; + else if (streq(e, "unified")) + arg_inner_cgver = CGROUP_UNIFIED_ALL; + else { + r = parse_boolean(e); + if (r < 0) { + log_warning_errno(r, "Failed to parse UNIFIED_CGROUP_HIERARCHY from environment, ignoring."); + arg_inner_cgver = CGROUP_UNIFIED_UNKNOWN; + return; + } else if (r > 0) + arg_inner_cgver = CGROUP_UNIFIED_ALL; + else + arg_inner_cgver = CGROUP_UNIFIED_NONE; + } } } |