init: add support for cgroupv2
@@ -227,6 +227,9 @@ func doMounts() {
// misc /proc mounted fs
mountSilent("binfmt_misc", "/proc/sys/fs/binfmt_misc", "binfmt_misc", noexec|nosuid|nodev, "")
+ if isCgroupV2() {
+ mount("cgroup2", "/sys/fs/cgroup", "cgroup2", noexec|nosuid|nodev, "")
+ } else {
// mount cgroup root tmpfs
mount("cgroup_root", "/sys/fs/cgroup", "tmpfs", nodev|noexec|nosuid, "mode=755,size=10m")
// mount cgroups filesystems for all enabled cgroups
@@ -242,6 +245,7 @@ func doMounts() {
// many things assume systemd
mkdir("/sys/fs/cgroup/systemd", 0555)
mount("cgroup", "/sys/fs/cgroup/systemd", "cgroup", 0, "none,name=systemd")
+ }
// make / rshared
mount("", "/", "", rec|shared, "")
@@ -421,6 +425,20 @@ func doShutdown(action string) {
os.Exit(0)
}
+func isCgroupV2() bool {
+ dt, err := os.ReadFile("/proc/cmdline")
+ if err != nil {
+ log.Printf("error reading /proc/cmdline: %v", err)
+ return false
+ }
+ for _, s := range strings.Split(string(dt), " ") {
+ if s == "linuxkit.unified_cgroup_hierarchy=1" {
+ return true
+ }
+ }
+ return false
+}
+
func main() {
if filepath.Base(os.Args[0]) == "rc.shutdown" {
action := "poweroff"
