无法在 Debian 11 Bullseye 上启动非特权 LXC 容器

无法在 Debian 11 Bullseye 上启动非特权 LXC 容器

我已经重新安装了 Debian 11。关于 LXC,我复制了 Debian 10 计算机的工作设置。我使用一个单独的用户,lxcusersu要,到lxc-start

配置,~/.config/lxc/default.conf

lxc.idmap = u 0 165536 65536
lxc.idmap = g 0 165536 65536
lxc.apparmor.profile = unconfined
lxc.mount.auto = proc:mixed sys:ro cgroup:mixed
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.hwaddr = 00:FF:xx:xx:xx:xx
#lxc.include = /etc/lxc/default.conf

文件系统权限是使用 ACL 设置的,就像我在之前的设置中所做的那样。

lxc-checkconfig

LXC version 4.0.6
Kernel configuration not found at /proc/config.gz; searching...
Kernel configuration found at /boot/config-5.10.0-7-amd64
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled

--- Control groups ---
Cgroups: enabled

Cgroup v1 mount points:


Cgroup v2 mount points:
/sys/fs/cgroup

Cgroup v1 systemd controller: missing
Cgroup v1 freezer controller: missing
Cgroup namespace: required
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

--- Misc ---
Veth pair device: enabled, not loaded
Macvlan: enabled, not loaded
Vlan: enabled, not loaded
Bridges: enabled, loaded
Advanced netfilter: enabled, loaded
CONFIG_NF_NAT_IPV4: missing
CONFIG_NF_NAT_IPV6: missing
CONFIG_IP_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled, not loaded
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled, not loaded
CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled, not loaded
FUSE (for use with lxcfs): enabled, loaded

--- Checkpoint/Restore ---
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities:

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

使用调试选项运行后,我想我已经确定了这些行上的错误:

DEBUG    cgfsng - cgroups/cgfsng.c:cgfsng_monitor_create:1355 - Failed to create cgroup "(null)"
WARN     cgfsng - cgroups/cgfsng.c:mkdir_eexist_on_last:1152 - Permission denied - Failed to create directory "/sys/fs/cgroup/user.slice/user-1000.slice/session-1.scope/lxc.monitor.arch"

更改/sys/fs/cgroup/user.slice/user-1000.slice/session-1.scope目录的权限没有效果; usingsudo也不能在那里写。

我相信这个问题的出现是由于cgroupv2Debian 11 上默认启用了该功能。我尝试了在网上找到的各种解决方法,但到目前为止没有任何效果。

有任何想法吗?要么让非特权 LXC 与 cgroupv2 一起工作,要么以正确的方式在 Debian 11 上禁用 cgroupv2 并启用 cgroupv1(或模仿 Debian 10 的 cgroup 设置)。当然欢迎其他解决方案!

一些链接:
同样的问题,无解
我的博客介绍了如何在 Debian 10 上设置非特权 LXC,复制了设置


更新:添加systemd.unified_cgroup_hierarchy=false systemd.legacy_systemd_cgroup_controller=false"到内核参数有助于启动容器。但我仍然从容器内部收到此错误:

拱门Linux:

Welcome to Arch Linux!

Failed to create /init.scope control group: Permission denied
Failed to allocate manager object: Permission denied
[!!!!!!] Failed to allocate manager object.
Exiting PID 1...

森托斯 8:

Welcome to CentOS Linux 8!

Failed to read AF_UNIX datagram queue length, ignoring: No such file or directory
Failed to install release agent, ignoring: No such file or directory
Failed to create /init.scope control group: Permission denied
Failed to allocate manager object: Permission denied
[!!!!!!] Failed to allocate manager object, freezing.
Freezing execution.

答案1

Debian bullseye LXC 软件包的最新版本(2021 年 6 月 11 日星期五发布的 1:4.0.6-2)最近发布有关更改的警告使用 cgroup v2 和 LXC 4.x 在 Debian 11 中启动非特权容器:

lxc (1:4.0.6-2) 不稳定;紧急程度=中

——皮埃尔·埃利奥特·贝库[电子邮件受保护] 2021 年 6 月 11 日星期五 15:12:15 +0200

自述文件中的第一部分似乎已经由 OP 解决。 OP问题的相关部分位于7) 启动容器:

  1. 启动容器

在统一组层次结构下(从 Debian 11/bullseye 开始的 systemd 中默认),非 root 用户需要 lxc-start 才能拥有一些额外的权限才能以非 root 用户身份启动容器。最简单的方法是通过 systemd。您可以通过设置属性的用户定义服务启动容器Delegate=true ,也可以使用 system-run 显式执行此操作:

$ systemd-run --scope --quiet --user --property=Delegate=yes \
  lxc-start -n mycontainer

或者,最后,您可以使用 Debian 提供的帮助程序脚本: lxc-unpriv-start。它会关心systemd-run正确使用命令,并确保正确设置所需的环境变量。

“3)权限检查”部分也值得一提(具有要适应的正确值):

$ setfacl --modify user:100000:x . .local .local/share

使用 systemd 或 Debian 包装器的示例:

$ lxc-create -n busybox-amd64 -t busybox

$ lxc-start -n busybox-amd64
lxc-start: busybox-amd64: lxccontainer.c: wait_on_daemonized_start: 859 Received container state "ABORTING" instead of "RUNNING"
lxc-start: busybox-amd64: tools/lxc_start.c: main: 308 The container failed to start
lxc-start: busybox-amd64: tools/lxc_start.c: main: 311 To get more details, run the container in foreground mode
lxc-start: busybox-amd64: tools/lxc_start.c: main: 313 Additional information can be obtained by setting the --logfile and --logpriority options

$ systemd-run --scope --quiet --user --property=Delegate=yes lxc-start -n busybox-amd64
$ lxc-ls --active
busybox-amd64 
$ lxc-stop -n busybox-amd64

$ lxc-unpriv-start -n busybox-amd64
Running scope as unit: run-r1c8a4b4fd0294f688f9f63069414fbf0.scope
$ lxc-ls --active
busybox-amd64 

这些信息以前只是隐藏在一些错误报告中,而且很难放在一起:


笔记:

当然,这同样可以成功启动真正的操作系统(Debian、CentOS ...)。

作为旁注,与本问答无关,今天 (2021-06-26)使用下载模板,它出现hkp://pool.sks-keyservers.net已停止服务。要创建模板,我必须首先执行此操作以覆盖以下位置中的默认密钥服务器 URL /usr/share/lxc/templates/lxc-download

$ export DOWNLOAD_KEYSERVER=hkp://keys.openpgp.org
$ lxc-create -n centos8-amd64 -t download -- --d centos -r 8 -a amd64
[...]
You just created a Centos 8 x86_64 (20210626_07:08) container.

相关内容