Debian

無法在 Debian 11 Bullseye 上啟動非特權 LXC 容器

  • June 26, 2021

我已經重新安裝了 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"到核心參數有助於啟動容器。但我仍然從容器內部收到此錯誤:

Arch 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.

Debian Bullseye LXC 軟體包的最後一個版本(2021 年 6 月 11 日星期五的 1:4.0.6-2)最近對使用 cgroup v2 和 LXC 4.x 在 Debian 11 中啟動非特權容器的變化發出了警告:

lxc (1:4.0.6-2) 不穩定;緊急=中等

  • 通過lxc-unpriv-startandlxc-unpriv-attach

命令提供了一種處理非特權容器啟動和連接的新方法。有關/usr/share/doc/lxc/README.Debian.gz更多詳細資訊,請參閱。

– Pierre-Elliott Bécue peb@debian.org 2021 年 6 月 11 日星期五 15:12:15 +0200

自述文件中的第一部分似乎已由 OP 解決。OP 問題的相關部分在7) 啟動容器

  1. 啟動容器

在統一的組層次結構下(從 Debian 11/bullseye 開始的 systemd 中的預設設置),非 root 使用者需要 lxc-start 才能擁有一些額外的權限才能以非 root 使用者身份啟動容器。最簡單的方法是通過 systemd。您可以通過設置Delegate=true 屬性的使用者定義服務啟動容器,也可以使用系統執行顯式執行此操作:

$ 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 …)也是一樣的。

作為旁注且與此 Q/A 無關,**今天(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.

引用自:https://unix.stackexchange.com/questions/655898