设置用户空间LXC容器时出现问题

丹尼尔·奥尔德(Daniel Alder)

几个晚上,我已经尝试使用用户空间容器安装LXC。由于它将是一台新服务器,因此我还不太在乎发行和发布,因此我尝试将Debian 7 + 8和Ubuntu 14.04和15.04用作主机,并尝试将Ubuntu 15.04和Debian 8作为来宾。他们都有问题。摘要:

Debian 7.8:lxc-create:该命令必须以超级用户(两个来宾)身份运行

Debian 8.0:lxc-create:不允许操作(两个来宾)

具有Ubuntu 15.04来宾的Ubuntu 14.04来宾:lxc-start:调用cgmanager_create_sync失败:无效的请求/容器无法启动。

带有Debian 8 guest虚拟机的Ubuntu 14.04:lxc-create:错误:找不到匹配的映像。

Ubuntu 15.04:lxc-start:对cgmanager_move_pid_sync的调用失败:无效的请求/容器无法启动。(两位客人)

我按照教程https://help.ubuntu.com/lts/serverguide/lxc.htmlhttps://linuxcontainers.org/lxc/getting-started/进行操作,它们看起来并不那么复杂。

我编写了一个脚本来使测试可重现(以root身份在新启动的Live CD上运行)。谁能告诉我这是怎么回事?

#!/bin/sh


# need to be run as root

set -x

echo "==== SYSTEM INFO & INSTALL ===="

lsb_release -a

uname -a

apt-get update
apt-get install -y lxc
apt-get clean

lxc-checkconfig
ifconfig
brctl show

adduser testuser

cat /etc/subuid /etc/subgid

cat >/etc/lxc/lxc-usernet <<.e
# USERNAME TYPE BRIDGE COUNT
testuser veth lxcbr0 2
.e

sudo -u testuser -i mkdir -p .config/lxc

sudo -u testuser -i tee .config/lxc/default.conf <<.e
lxc.id_map = u 0 $(grep testuser /etc/subuid | cut -d: -f2) 65536
lxc.id_map = g 0 $(grep testuser /etc/subgid | cut -d: -f2) 65536

lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:xx:xx:xx
.e
cat /home/testuser/.config/lxc/default.conf

echo "==== TEST UBUNTU VIVID GUEST ===="

sudo -u testuser -i lxc-create -t download -n vivid1 -- -d ubuntu -r utopic -a amd64
#You just created an Ubuntu container (release=trusty, arch=amd64, variant=default)

#sudo -u testuser -i lxc-start -n vivid1 -d
#read press_enter_key_when_quit

if [ $? -eq 0 ]; then
  rm /tmp/log
  sudo -u testuser -i lxc-start -n vivid1 -l debug --logfile /tmp/log
  cat /tmp/log
fi

echo "==== TEST DEBIAN JESSIE GUEST ===="

sudo -u testuser -i lxc-create -t download -n jessie1 -- -d debian -r jessie -a amd64
#You just created an Ubuntu container (release=trusty, arch=amd64, variant=default)

#sudo -u testuser -i lxc-start -n jessie1 -d
#read press_enter_key_when_quit

if [ $? -eq 0 ]; then
  rm /tmp/log
  sudo -u testuser -i lxc-start -n jessie1 -l debug --logfile /tmp/log
  cat /tmp/log
fi

echo "==== END OF SCRIPT ===="

在pastebin上,我发布了所有这些计算机的控制台输出:

更新

我将Ubuntu 15.04作为主机进行了进一步尝试。我发现了错误报告https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1413927,它具有类似但不相同的问题。但是journalctl揭示了cgmanager的问题:

May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/blkio/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/cpu/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/cpuset/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/devices/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/freezer/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/hugetlb/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/memory/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/net_cls/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/perf_event/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:do_create_main: pid 17417 (uid 1000 gid 1000) may not create under /run/cgmanager/fs/none,name=systemd/user.slice/user-999.slice/session-c1.scope
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/blkio/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/blkio/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/cpu/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/cpu/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/cpuset/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/cpuset/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/devices/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/devices/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/freezer/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/freezer/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/hugetlb/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/hugetlb/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/memory/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/memory/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/net_cls/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/net_cls/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/perf_event/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/perf_event/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager: Invalid path /run/cgmanager/fs/none,name=systemd/user.slice/user-999.slice/session-c1.scope/lxc/jessie1
May 20 16:06:10 xubuntu cgmanager[4736]: cgmanager:per_ctrl_move_pid_main: Invalid path /run/cgmanager/fs/none,name=systemd/user.slice/user-999.slice/session-c1.scope/lxc/jessie1

更新2

我尝试了更多:我在两个虚拟机上安装了trusty andvivid的Ubuntu,并在它们上安装了所有更新。然后,我用原始的lxc软件包测试了一次,并使用了lxc daily ppa的软件包测试了一次。结果始终是与上述相同的错误。

丹尼尔·奥尔德(Daniel Alder)

尤里卡!仍然没有完成,但是我设法第一次启动了一个容器。有几件事情出了问题,我发现外面有很多人也有类似的问题。这是一些解决问题的指南:

发行/存储库

由于得到了最积极的反馈,我决定从Ubuntu 14.04引导系统开始。这意味着原始系统不仅仅只有几个100M,并且不包含许多软件包。我使用了更新和安全软件包资源以及lxc每日PPA。这是我的/etc/apt/sources.list:

deb http://de.archive.ubuntu.com/ubuntu trusty main
deb http://de.archive.ubuntu.com/ubuntu trusty-updates main
deb http://security.ubuntu.com/ubuntu trusty-security main

deb http://ppa.launchpad.net/ubuntu-lxc/daily/ubuntu trusty main 

安装

在许多教程,论坛和错误报告中,我找到了必须安装的软件包列表。我不确定哪一个重要,但是这是我最终安装的列表(从已重启的14.04系统开始):

apt-get install bridge-utils cgmanager cloud-image-utils debootstrap distro-info \
  distro-info-data euca2ools fuse libaio1 libapparmor1 libcap2 liblxc1 \
  libpam-systemd librados2 libseccomp2 libselinux1 libselinux1 lxc python3-lxc \
  python-distro-info

再说一遍:这个清单可能比必要的更长。这才是真正重要的:

  • libpam-systemd:此库对于正确的cgroup权限很重要。我没有看到任何错误消息,但是没有它,文件/proc/self/cgroup看起来像8:blkio:/等,而不是8:hugetlb:/user/1000.user/1.session
  • 保险丝:我读到它对于lxcfs很重要(我会说这是lxcfs软件包不依赖它的错误
  • lxc:最重要的软件包,如果您仅使用无特权的容器就足够了
  • cgmanager:我仍在学习它的功能。顺便说一句:lxc PPA当前提供软件包cgmanager-utils(0.27)和cgmanager(0.30)。cgmanager与cgmanager-utils(<< 0.30-1)冲突,这意味着来自同一存储库的两个软件包不兼容(可能是一个错误)。我选择了cgmanager。

配置

我从任何地方尝试了很多提示,所以我还不知道什么是重要的。但是我大概只是​​从问题中运行了脚本。大概是关于这些文件的:

  • / etc / subuid
  • / etc / subgid
  • / etc / lxc / lxc-usernet
  • 〜/ .config / lxc / default.conf

我唯一要做的另一件事是以下操作,因为我在许多线程中找到了该行:

chmod +x /home/testuser/.local/share

以用户身份登录

现在,最重要的事情我仍然不了解,但是却毁了我所有基于脚本的实验:不要使用su或sudo登录!

我演示:

root@1404-lxc-test:~# tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# this is expected. I am root.

root@1404-lxc-test:~# sudo -u testuser -i tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# here I used sudo to switch user

root@1404-lxc-test:~# su - testuser
testuser@1404-lxc-test:~$ tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# at least here I expected the correct settings

testuser@1404-lxc-test:~$ exit
root@1404-lxc-test:~# exit

$ ssh testuser@1404-lxc-test
testuser@1404-lxc-test's password: 
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-53-generic x86_64)

testuser@1404-lxc-test:~$ tail -1 /proc/self/cgroup
2:blkio:/user/1000.user/2.session
# now it's correct

我仍然不知道原因,但是它必须与libpam-systemd连接。显然,无论是susudo旁路PAM

最后,不要忘了以用户身份登录时使用lxc-xxx命令。如果您以root用户身份执行操作,它们将失败(因为用户空间容器存储在.local/share/lxc/而不是/var/lib/lxc/

故障排除

这些命令对我来说最有用:

  • journalctl (基于新贵版本):它揭示了cgmanager的问题
  • /proc/self/cgroup
  • lxc-start 使用选项 -l debug --logfile logfilename.txt

让我知道还有什么重要的。我认为社区需要它。

学分

由于以下教程:

并针对这些错误报告和论坛线程:

免责声明

第一次成功测试后,我写了这段文字。但是我做了很多事情,以至于其中某些步骤可能是不必要的。我将很快重新检查新系统上的所有内容。

更新

以上所有操作都是通过Ubuntu Trusty 14.04 LTS完成的。现在,我刚刚测试了Ubuntu。到目前为止,我可以告诉:

  • 您需要安装在已解除引导的基本系统之上的所有内容: apt-get install lxc bridge-utils
  • 不需要外部镜子。使用Ubuntu提供的lxc
  • 我没有碰超过下列文件我的新系统:/etc/subuid/etc/subgid/etc/lxc/lxc-usernet,另外,我创建了一个用户,并充满了家庭
  • 结论:更容易,更稳定。对我来说,这是真正有效的第一个发行版。

(Wily现在是测试版,将于2015年10月22日发布)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

设置用户空间LXC容器时出现问题

来自分类Dev

LXC配置:在创建用于将网络共享到容器的网桥时出现问题

来自分类Dev

在BQ M10上创建lxc容器时出现问题

来自分类Dev

实现容器视图时出现问题

来自分类Dev

实施容器视图时出现问题

来自分类Dev

删除用户时出现问题

来自分类Dev

删除用户时出现问题

来自分类Dev

删除用户时出现问题

来自分类Dev

当容器设置为display:flex时,display:none出现问题

来自分类Dev

设置DNS地址时出现问题

来自分类Dev

设置Shopizer时出现问题

来自分类Dev

启动Sikuli设置时出现问题

来自分类Dev

xPages:用户更改操作系统区域设置时,NotesDateTime对象出现问题

来自分类Dev

通过Jquery用视频填充容器时出现问题

来自分类Dev

将容器内部的元素居中时出现问题

来自分类Dev

在Docker容器中运行Celery任务时出现问题

来自分类Dev

在Flexbox容器CSS内滚动时出现问题

来自分类Dev

远程访问多个Docker容器时出现问题

来自分类Dev

AKS 从 ACR 中提取容器映像时出现问题

来自分类Dev

将用户插入Liferay时出现问题

来自分类Dev

验证用户身份时出现问题:laravel 5.1

来自分类Dev

执行用户定义外壳命令时出现问题

来自分类Dev

以sudo用户身份登录时出现问题

来自分类Dev

向新用户添加外壳时出现问题

来自分类Dev

向新用户添加外壳时出现问题

来自分类Dev

在Makefile中设置PATH时出现问题

来自分类Dev

设置Pubnub Nodejs服务器时出现问题

来自分类Dev

在JFrame中设置布局时出现问题

来自分类Dev

在iTunesConnect中设置“税收信息”时出现问题