====== Unified CGroups ====== Problem introduced with change from systemd 241 to 247. Main change is to drop CGroup V1 support and switch by default to ''unified'' CGroup V2. * Previous v241 was built with ''-Ddefault-hierarchy=hybrid'' * Current v247 is built with ''-Ddefault-hierarchy=unified'' $ systemctl --version systemd 247 (247.3-1~bpo10+1) +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified Lots of issues are reported, and lots of containerization software needs to be upgraded: * Docker (CGroup V2 supported since v20.10) * kubernetes * LXC * libpam_cgfs cannot be used with pure ''unified'' systems Resources: * [[https://lwn.net/Articles/716454/|systemd 233]] * [[https://medium.com/nttlabs/cgroup-v2-596d035be4d7|The current adoption status of cgroup v2 in containers]] * [[https://github.com/lxc/lxc/issues/3221|Unable to start an unprivileged container on fresh install of Fedora 31]] * [[https://github.com/lxc/lxc/issues/3183|Fails to work with cgroupv2 / unified hierarchy #3183]] ===== Workaround ===== ==== Switch systemd to hybrid hierarchy ==== Add kernel boot commandline argument: ''systemd.unified_cgroup_hierarchy=0'' echo 'GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT systemd.unified_cgroup_hierarchy=false"' > /etc/default/grub.d/cgroup.cfg More info: * **systemd.unified_cgroup_hierarchy** * When specified without an argument or with a true argument, enables the usage of unified cgroup hierarchy (a.k.a. cgroups-v2). When specified with a false argument, fall back to hybrid or full legacy cgroup hierarchy. If this option is not specified, the default behaviour is determined during compilation (the -Ddefault-hierarchy= meson option). If the kernel does not support unified cgroup hierarchy, the legacy hierarchy will be used even if this option is specified. ==== Delegate a cgroup in advance ==== From: [[https://linuxcontainers.org/lxc/getting-started/]] Running unprivileged containers as an unprivileged user only works if you delegate a cgroup in advance (the cgroup2 delegation model enforces this restriction, not liblxc). Use the following systemd command to delegate the cgroup: systemd-run --unit=myshell --user --scope -p "Delegate=yes" lxc-start