summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@parabola.nu>2018-07-23 21:38:18 -0400
committerLuke Shumaker <lukeshu@parabola.nu>2018-08-16 21:55:17 -0400
commit43368aa05f59ff87dcaad85c91915706a9b6376b (patch)
tree2548b89ad39a5b67ef7051d2c10789cca793fc52
parent117fe403f15a05282679e370b34cdce25c386cc4 (diff)
nspawn: Also allow the user to force hybrid cgroup mode
-rw-r--r--doc/ENVIRONMENT.md15
-rw-r--r--src/nspawn/nspawn.c26
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;
+ }
}
}