Intereting Posts
Как я могу принудительно использовать конкретный двоичный файл при запуске скрипта Настройка беспроводной сети Atheros AR9285 в Gentoo Есть ли шанс запустить ClearCase Remote клиент в Fedora 14? Создание области кучи / сегмента в Linux Что такое строка «+++ / tmp / security»? Каковы преимущества создания инструментов / libs из исходного кода? Программное обеспечение Face Tool in Photo Management Linux Gentoo: пакет `glib-2.0` не найден Используйте curl для загрузки списка файлов в csv Какая часть подсистемы TTY управляет активным / dev / ttyN (драйвер устройства TTY N)? поврежденные архивы пакетов debian на самодельных пакетах баз данных Команда dd: поиск скорости чтения / записи для вспышки / SD? Настройка шлюза между двумя подсетями в одной физической сети Как uniq не является уникальным, что существует также uniq -unique? Как обстоят дела с «процессом, работающим с дополнительными привилегиями, на который может опираться»?

контейнер userns не запускается, как отслеживать причину?

При создании контейнера LXC (непривилегированного) для Linux на Ubuntu 14.04 со следующей командной строкой:

lxc-create -n test1 -t download -- -d $(lsb_release -si|tr 'AZ' 'a-z') -r $(lsb_release -sc) -a $(dpkg --print-architecture) 

и (не касаясь созданного файла конфигурации), затем попытайтесь запустить его с помощью:

 lxc-start -n test1 -l DEBUG 

он не работает. Файл журнала показывает мне:

 lxc-start 1420149317.700 INFO lxc_start_ui - using rcfile /home/user/.local/share/lxc/test1/config lxc-start 1420149317.700 INFO lxc_utils - XDG_RUNTIME_DIR isn't set in the environment. lxc-start 1420149317.701 INFO lxc_confile - read uid map: type u nsid 0 hostid 100000 range 65536 lxc-start 1420149317.701 INFO lxc_confile - read uid map: type g nsid 0 hostid 100000 range 65536 lxc-start 1420149317.701 WARN lxc_log - lxc_log_init called with log already initialized lxc-start 1420149317.701 INFO lxc_lsm - LSM security driver AppArmor lxc-start 1420149317.701 INFO lxc_utils - XDG_RUNTIME_DIR isn't set in the environment. lxc-start 1420149317.702 DEBUG lxc_conf - allocated pty '/dev/pts/2' (5/6) lxc-start 1420149317.702 DEBUG lxc_conf - allocated pty '/dev/pts/7' (7/8) lxc-start 1420149317.702 DEBUG lxc_conf - allocated pty '/dev/pts/8' (9/10) lxc-start 1420149317.702 DEBUG lxc_conf - allocated pty '/dev/pts/10' (11/12) lxc-start 1420149317.702 INFO lxc_conf - tty's configured lxc-start 1420149317.702 DEBUG lxc_start - sigchild handler set lxc-start 1420149317.702 DEBUG lxc_console - opening /dev/tty for console peer lxc-start 1420149317.702 DEBUG lxc_console - using '/dev/tty' as console lxc-start 1420149317.702 DEBUG lxc_console - 14946 got SIGWINCH fd 17 lxc-start 1420149317.702 DEBUG lxc_console - set winsz dstfd:14 cols:118 rows:61 lxc-start 1420149317.905 INFO lxc_start - 'test1' is initialized lxc-start 1420149317.906 DEBUG lxc_start - Not dropping cap_sys_boot or watching utmp lxc-start 1420149317.906 INFO lxc_start - Cloning a new user namespace lxc-start 1420149317.906 INFO lxc_cgroup - cgroup driver cgmanager initing for test1 lxc-start 1420149317.907 ERROR lxc_cgmanager - call to cgmanager_create_sync failed: invalid request lxc-start 1420149317.907 ERROR lxc_cgmanager - Failed to create hugetlb:test1 lxc-start 1420149317.907 ERROR lxc_cgmanager - Error creating cgroup hugetlb:test1 lxc-start 1420149317.907 INFO lxc_cgmanager - cgroup removal attempt: hugetlb:test1 did not exist lxc-start 1420149317.908 INFO lxc_cgmanager - cgroup removal attempt: perf_event:test1 did not exist lxc-start 1420149317.908 INFO lxc_cgmanager - cgroup removal attempt: blkio:test1 did not exist lxc-start 1420149317.908 INFO lxc_cgmanager - cgroup removal attempt: freezer:test1 did not exist lxc-start 1420149317.909 INFO lxc_cgmanager - cgroup removal attempt: devices:test1 did not exist lxc-start 1420149317.909 INFO lxc_cgmanager - cgroup removal attempt: memory:test1 did not exist lxc-start 1420149317.909 INFO lxc_cgmanager - cgroup removal attempt: cpuacct:test1 did not exist lxc-start 1420149317.909 INFO lxc_cgmanager - cgroup removal attempt: cpu:test1 did not exist lxc-start 1420149317.910 INFO lxc_cgmanager - cgroup removal attempt: cpuset:test1 did not exist lxc-start 1420149317.910 INFO lxc_cgmanager - cgroup removal attempt: name=systemd:test1 did not exist lxc-start 1420149317.910 ERROR lxc_start - failed creating cgroups lxc-start 1420149317.910 INFO lxc_utils - XDG_RUNTIME_DIR isn't set in the environment. lxc-start 1420149317.910 ERROR lxc_start - failed to spawn 'test1' lxc-start 1420149317.910 INFO lxc_utils - XDG_RUNTIME_DIR isn't set in the environment. lxc-start 1420149317.910 INFO lxc_utils - XDG_RUNTIME_DIR isn't set in the environment. lxc-start 1420149317.910 ERROR lxc_start_ui - The container failed to start. lxc-start 1420149317.910 ERROR lxc_start_ui - Additional information can be obtained by setting the --logfile and --logpriority options. 

Теперь я вижу здесь две ошибки, которые, вероятно, являются результатом первого, а именно:

lxc_start – не удалось создать группы

Однако я вижу /sys/fs/cgroup смонтирован:

 $ mount|grep cgr none on /sys/fs/cgroup type tmpfs (rw) 

и cgmanager установлен:

 $ dpkg -l|awk '$1 ~ /^ii$/ && /cgmanager/ {print $2 " " $3 " " $4}' cgmanager 0.24-0ubuntu7 amd64 libcgmanager0:amd64 0.24-0ubuntu7 amd64 

Примечание. Настройки моего хоста по-прежнему upstart за upstart .

В случае каких-либо сомнений, группы поддержки ядра:

 $ grep CGROUP /boot/config-$(uname -r) CONFIG_CGROUPS=y # CONFIG_CGROUP_DEBUG is not set CONFIG_CGROUP_FREEZER=y CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_HUGETLB=y CONFIG_CGROUP_PERF=y CONFIG_CGROUP_SCHED=y CONFIG_BLK_CGROUP=y # CONFIG_DEBUG_BLK_CGROUP is not set CONFIG_NET_CLS_CGROUP=m CONFIG_NETPRIO_CGROUP=m 

Примечание. Настройки моего хоста по-прежнему upstart за upstart .

Оказывается, неожиданное удивление, это особая вещь, характерная для Ubuntu.


Причина

Проблема: хотя в ядре есть активированные группы (проверьте с помощью grep CGROUP /boot/config-$(uname -r) ), и cgmanager запущен, для моего пользователя нет какой-либо cgmanager . Вы можете проверить это с помощью:

 $ cat / proc / self / cgroup
 11: hugetlb: /
 10: perf_event: /
 9: blkio: /
 8: морозильник: /
 7: устройства: /
 6: память: /
 5: cpuacct: /
 4: процессор: /
 3: Имя = Systemd: /
 2: cpuset: /

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

Моя проблема была связана с запуском непривилегированного контейнера. Я мог бы начать пользоваться привилегированными контейнерами.

Оказалось, что моя проблема была тесно связана с этим потоком в lxc-users рассылки lxc-users .

средство

На Ubuntu 14.04 upstart по умолчанию, в отличие от systemd . Следовательно, определенные компоненты, которые будут установлены в дистрибутиве systemd , не будут установлены по умолчанию.

В дополнение к cgmanager было добавлено два пакета, которые мне пришлось установить, чтобы выйти за пределы ошибки, указанной в моем вопросе: cgroup-bin и libpam-systemd . Честно говоря, я не уверен на 100%, что первая строго необходима, поэтому вы можете попытаться оставить ее и прокомментировать здесь.

После установки пакетов и перезагрузки вы должны увидеть свой UID ( id -u , здесь 1000) в выходном файле:

 $ cat / proc / self / cgroup
 11: hugetlb: /user/1000.user/1.session
 10: perf_event: /user/1000.user/1.session
 9: blkio: /user/1000.user/1.session
 8: морозильник: /user/1000.user/1.session
 7: устройства: /user/1000.user/1.session
 6: память: /user/1000.user/1.session
 5: cpuacct: /user/1000.user/1.session
 4: процессор: /user/1000.user/1.session
 3: Имя = Systemd: /user/1000.user/1.session
 2: cpuset: /user/1000.user/1.session

После этого ошибка при попытке запустить гостевой контейнер становится (обрезается для краткости):

 lxc-start 1420160065.383 INFO lxc_cgroup - драйвер cgroup cgmanager для тестирования1
 lxc-start 1420160065.419 ОШИБКА lxc_start - не удалось создать настроенную сеть
 lxc-start 1420160065.446 ОШИБКА lxc_start - не удалось запустить 'test1'
 lxc-start 1420160065.451 ERROR lxc_start_ui - контейнер не запускался.

Так что до сих пор нет успеха, но мы на один шаг ближе.

Вышеупомянутый связанный lxc-users указывает на /etc/systemd/logind.conf не говоря уже о трех контроллерах: net_cls , net_prio и debug . Для меня остался только последний. После изменения вам придется повторно зарегистрироваться, хотя изменения вступят в силу после создания вашего сеанса входа в систему.

Это сообщение блога, сделанное одним из авторов LXC, дает следующий шаг:

Ваш пользователь, хотя он может создавать новые пространства имен пользователей, в которых он будет uid 0, и будет иметь некоторые привилегии root от ресурсов, привязанных к этому пространству имен, очевидно, не получит каких-либо дополнительных привилегий на хосте.

Одной из таких вещей является создание новых сетевых устройств на хосте или изменение конфигурации моста. Чтобы обойти это, мы написали инструмент «lxc-user-nic», который является единственной двоичной частью SETUID LXC 1.0 и выполняет одну простую задачу. Он анализирует конфигурационный файл и на основе его содержимого создаст сетевые устройства для пользователя и соединит их. Чтобы предотвратить злоупотребление, вы можете ограничить количество устройств, которые пользователь может запросить, и на какой мост они могут быть добавлены.

Примером может служить мой собственный файл / etc / lxc / lxc-usernet:

 stgraber veth lxcbr0 10 

Это объявляет, что пользователю «stgraber» разрешено создавать до 10 устройств типа veth и добавляться к мосту с именем lxcbr0.

Между тем, что предлагается пространством имен пользователей в ядре и средством setuid, у нас есть все, что необходимо для того, чтобы большинство дистрибутивов было непривилегировано.

Если у пользователя есть права sudo и вы используете Bash, используйте это:

 echo "$(whoami) veth lxcbr0 10"|sudo tee -a /etc/lxc/lxc-usernet 

и убедитесь, что тип ( veth ) совпадает с типом в конфигурации контейнера, а мост ( lxcbr0 ) настроен и вверх.

И теперь мы получаем еще один набор ошибок:

 lxc-start 1420192192.775 INFO lxc_start - клонирование нового пространства имен пользователей
 lxc-start 1420192192.775 INFO lxc_cgroup - драйвер cgroup cgmanager initing для test1
 lxc-start 1420192192.923 УВЕДОМЛЕНИЕ lxc_start - переход на gid / uid 0 в новое пространство имен пользователей
 lxc-start 1420192192.923 ОШИБКА lxc_start - Разрешение запрещено - не удалось получить доступ / home / user.  Предоставьте ему доступ «x» или добавьте ACL для корня контейнера.
 lxc-start 1420192192.923 ОШИБКА lxc_sync - неверный номер последовательности 1. ожидается 2
 lxc-start 1420192192.954 ОШИБКА lxc_start - не удалось запустить 'test1'
 lxc-start 1420192192.959 ERROR lxc_start_ui - контейнер не запускался.

Блестящий, который может быть исправлен. Еще один lxc-users теми же главными героями, что и в первом потоке, прокладывает путь.

На данный момент быстрый тест sudo chmod -R o+X $HOME придется делать, но ACL также являются жизнеспособным вариантом. YMMV.