Проблема с настройкой LXC-контейнера в пользовательском пространстве

Несколько вечеров я уже пытался заставить установку LXC работать с контейнерами пользовательского пространства. Поскольку это будет новый сервер, меня (пока) не слишком заботит распространение и выпуск, поэтому я попробовал Debian 7 + 8 и Ubuntu 14.04 и 15.04 в качестве хоста, а Ubuntu 15.04 и Debian 8 в качестве гостя. У всех есть свои проблемы. Краткое содержание:

Debian 7.8 : lxc-create: эту команду нужно запускать от имени пользователя root (оба гостя)

Debian 8.0 : lxc -create: операция не разрешена (оба гостя)

Ubuntu 14.04 с гостем Ubuntu 15.04 : lxc-start: сбой вызова cgmanager_create_sync: неверный запрос / не удалось запустить контейнер.

Ubuntu 14.04 с гостем Debian 8 : lxc-create: ОШИБКА: не удалось найти подходящее изображение.

Ubuntu 15.04 : lxc-start: сбой вызова cgmanager_move_pid_sync: недопустимый запрос / Не удалось запустить контейнер. (оба гостя)

Я следовал учебному пособию https://help.ubuntu.com/lts/serverguide/lxc.html и https://linuxcontainers.org/lxc / Getting-Start / , и они не выглядят так сложно.

Я написал скрипт, чтобы сделать тест воспроизводимым (для запуска с правами root на только что загруженном живом компакт-диске). Может кто-нибудь сказать мне, что с ним не так?

#!/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

Я попробовал больше: я установил Ubuntu надежный и яркий на двух виртуальных машинах и установил все обновления на них. Затем я протестировал как один раз с оригинальным пакетом lxc, так и один раз с пакетами из lxc daily ppa. Результат всегда та же самая ошибка, как показано выше.

7
задан 22 May 2015 в 02:55

1 ответ

Эврика! Все еще не законченный, но мне удалось в первый раз запустить контейнер. Существует несколько вещей, которые пошли не так, как надо, и я нашел, что существуют многие люди, там имеющие подобные проблемы. Вот немного проблемы, решая руководство:

Распределение / Репозитории

Из-за большинства позитивных откликов я решил запустить с Ubuntu 14.04 debootstrapped систему. Это означает, исходная система не больше, чем только некоторые 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 

Установка

Во многих учебных руководствах форумах и отчетах об ошибках я нашел списки пакетов, которые должны быть установлены. Я еще не уверен, кто из тех важен, но вот список того, что я наконец установил (начинающий с системы debootstrapped 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: я все еще узнаю о его функции. Btw: lxc PPA в настоящее время обеспечивает оба пакета cgmanager-utils (0.27) и cgmanager (0.30). cgmanager конфликтует с cgmanager-utils (<<0.30-1), что означает, что два пакета от того же repo не совместимы (возможно ошибка). Я выбрал 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. Очевидно, оба su и sudo обходной PAM

И наконец, не забывайте использовать команды lxc-xxx при входе в систему как пользователь. Они перестанут работать, если Вы сделаете это как корень (потому что контейнеры пространства пользователя хранятся в .local/share/lxc/ вместо /var/lib/lxc/

Поиск и устранение неисправностей

Эти команды были самыми полезными для меня:

  • journalctl (на основанных на выскочке выпусках): Это показало проблемы с cgmanager
  • /proc/self/cgroup
  • lxc-start использование опций -l debug --logfile logfilename.txt

Сообщите мне то, что еще важно. Я думаю, что сообществу нужен он.

Кредиты

Благодаря следующим Учебным руководствам:

И к этим потокам форума ответа отчетов об ошибках:

Отказ от ответственности

Я записал этот текст после первого успешного теста. Но я сделал столько вещей, что некоторые из этих шагов вероятны не необходимые. Я перепроверю все в новой системе скоро.

Обновление

Все вышеупомянутое было сделано с надежным человеком Ubuntu 14.04 LTS. Теперь, я просто протестировал коварную Ubuntu. До сих пор я могу сказать:

  • Все необходимо установить сверху системы основы debootstrapped: apt-get install lxc bridge-utils
  • Никакие внешние зеркала не требуются. Используйте lxc, обеспеченный Ubuntu
  • Я не коснулся больше, чем следующие файлы в моей новой системе: /etc/subuid, /etc/subgid, /etc/lxc/lxc-usernet, дополнительно, я создал пользователя и заполнил его дом
  • Заключение: намного легче, намного более стабильный. Для меня это - первый выпуск, который действительно работает.

(Коварный теперь бета и будет выпущена 22-го октября 2015),

7
ответ дан 22 May 2015 в 02:55

Другие вопросы по тегам:

Похожие вопросы: