Migrating to Slackware-current - LXC-6 - cgroup2

June 24, 2025 by Roberto Puzzanghera 0 comments

Index


Let's see how to manage unprivileged containers also in Slackware-current (15.1 to be), which -at the time I'm writing- ships kernel 6.15.3, lxc-6.0.4 and libcgroups-3.2.0.

My attempts to use cgroup1 failed, but I managed to use cgroup2, even though limits settings are not working inside containers.

First of all, enable cgroup2 in /etc/default/cgroups

CGROUPS_VERSION=2

Disable the rc.cgconfig and rc.cgred at boot time:

chmod -x /etc/rc.d/rc.cgconfig /etc/rc.d/rc.cgred

I'm not sure that this is mandatory, but let's pass an option to the kernel in order to completely disable cgroup1 by adding the following to lilo.conf, elilo.conf or whatelse

append="cgroup_no_v1=all"

If you want to attempt to handle container's limits you should mount /sys/fs/cgroup properly by patching /etc/rc.d/rc.S at line 96:

- mount -t cgroup2 none /sys/fs/cgroup 
+ mount -t cgroup2 -o rw,nosuid,nodev,noexec,relatime,nsdelegate none /sys/fs/cgroup

Replace the file /etc/lxc/lxc-common.conf in this way (all lxc.cgroup.* options are now lxc.cgroup2.*):

lxc.net.0.type = veth 
lxc.net.0.flags = up 
lxc.net.0.link = lxcbr0 
lxc.net.0.name = eth0 
lxc.net.0.hwaddr = 00:16:3e:xx:xx:xx 

lxc.tty.max = 1 
lxc.pty.max = 1024 

lxc.cgroup2.devices.deny = a 
# /dev/null and zero 
lxc.cgroup2.devices.allow = c 1:3 rwm 
lxc.cgroup2.devices.allow = c 1:5 rwm 
# consoles 
lxc.cgroup2.devices.allow = c 5:1 rwm 
lxc.cgroup2.devices.allow = c 5:0 rwm 
lxc.cgroup2.devices.allow = c 4:0 rwm 
lxc.cgroup2.devices.allow = c 4:1 rwm 
# /dev/{,u}random 
lxc.cgroup2.devices.allow = c 1:9 rwm 
lxc.cgroup2.devices.allow = c 1:8 rwm 
lxc.cgroup2.devices.allow = c 136:* rwm 
lxc.cgroup2.devices.allow = c 5:2 rwm 
# rtc 
lxc.cgroup2.devices.allow = c 254:0 rwm 

# we don't trust even the root user in the container, better safe than sorry. 
# comment out only if you know what you're doing. 
lxc.cap.drop = sys_module mknod mac_override mac_admin sys_time setfcap setpcap

# you can try also this alternative to the line above, whatever suits you better. 
#lxc.cap.drop=sys_admin 

# proc & sys, remove from /etc/fstab 
lxc.mount.auto = proc:mixed sys:ro cgroup:rw

And now you have install LXC from the main branch of the LXC git. In fact, there is a bug in latest lxc-6.0.4 that cause an error like this (you can see it by activating the debug) when trying to start an unprivileged container:

Permission denied - Failed to preserve net namespace

The issue has been discussed here and here. This is the commit that solved the bug. We have also a discussion in the linuxquestions/slackware forum here.

It's better to download the source from their git and use Pat's slackbuild to rebuild the Slackware package.

Last issue (I posted a request here) is an error message in the lxc-ls -f command:

# sudo -u owner lxc-ls --fancy 
lxc-ls: ../src/lxc/utils.c: switch_to_ns: 900 Operation not permitted - Failed to set process 31274 to "net" of 3 
lxc-ls: ../src/lxc/utils.c: switch_to_ns: 900 Operation not permitted - Failed to set process 31274 to "net" of 3 
lxc-ls: ../src/lxc/utils.c: switch_to_ns: 900 Operation not permitted - Failed to set process 31274 to "net" of 3 
NAME      STATE   AUTOSTART GROUPS IPV4     IPV6              UNPRIVILEGED  
container RUNNING 0         -      10.0.0.4 fd00:dead:beef::4 false

The containers works as expected. I suppressed the error messages modyfing the wrapper scripts lxl and lxi in this way (search and replace where lxc-ls or lxc-info are present):

- sudo -u $user lxc-ls --fancy
+ sudo -u $user lxc-ls --fancy 2>/dev/null

Add a comment

Recent comments
Recent posts

RSS feeds