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

6

Несколько вечеров, я уже пытаюсь установить 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 w / Ubuntu 15.04 гость : lxc-start: вызов cgmanager_create_sync завершился неудачно: неверный запрос / Не удалось запустить контейнер.

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

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

Я следил за учебником Ссылка и Ссылка , и они не выглядят так сложно.

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

#!/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 я отправил консольный вывод из всех этих машин:

Update

Я пробовал дальше с Ubuntu 15.04 в качестве хоста. Я нашел отчет об ошибке Ссылка , у которого есть аналогичная, но не такая же проблема. Но 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. Результат всегда та же самая ошибка, как показано выше.

    
задан Daniel Alder 14.05.2015 в 22:35
источник

1 ответ

6

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

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

Из-за самой положительной обратной связи, я решил начать с системы debootstrapped Ubuntu 14.04. Это означает, что исходная система не больше, чем всего несколько 100 М и не содержит много пакетов. Я использовал обновления и источники пакета безопасности и ежедневный pp lxc. Вот мой /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 с debootstrapped):

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
  • fuse: я читал, что это важно для lxcfs (я бы сказал, что это ошибка , что пакет lxcfs не зависит от него)
  • lxc: самый важный пакет и достаточно, если вы используете только непривилегированные контейнеры.
  • cgmanager: Я все еще узнаю о его функции. Btw: lxc PPA в настоящее время предоставляет как пакеты cgmanager-utils (0.27), так и cgmanager (0.30). cgmanager конфликтует с cgmanager-utils (& lt; 0,30-1), что означает, что два пакета из одного и того же репо не совместимы (возможно, ошибка ). Я выбрал cgmanager.

Конфигурация

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

  • / и т.д. / subuid
  • / и т.д. / subgid
  • / и т.д. / LXC / LXC-usernet
  • ~ / .config / LXC / default.conf

Единственное, что я сделал, это следующее: я нашел строку во многих потоках:

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

Войти как пользователь

Теперь самое важное, что я до сих пор не понимаю, но который разрушил все мои эксперименты на основе скриптов: Не входите в систему с помощью su или sudo!

Я демонстрирую:

[email protected]:~# tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# this is expected. I am root.

[email protected]:~# sudo -u testuser -i tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# here I used sudo to switch user

[email protected]:~# su - testuser
[email protected]:~$ tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# at least here I expected the correct settings

[email protected]:~$ exit
[email protected]:~# exit

$ ssh [email protected]
[email protected]'s password: 
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-53-generic x86_64)

[email protected]:~$ tail -1 /proc/self/cgroup
2:blkio:/user/1000.user/2.session
# now it's correct

Я все еще не знаю причину, но она должна быть связана с libpam-systemd. Очевидно, что оба su и sudo обходят PAM

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

Устранение неполадок

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

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

Позвольте мне знать, что еще важно. Я думаю, что сообщество нуждается в этом.

Кредиты

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

И к этим сообщениям об ошибках добавляются темы форума:

Отказ

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

Update

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

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

(Wily теперь бета-версия и выйдет 22 октября 2015 года)

    
ответ дан Daniel Alder 01.09.2015 в 22:30
источник