Я пытаюсь настроить свой компьютер Linux для работы с несколькими гостевыми ОС, одна из которых - виртуальная машина Windows, а другая - контейнер Linux. Цель здесь состоит в том, чтобы не дать мне испортить хост-систему, при этом я могу свободно работать с базовой операционной системой и играть с аппаратным обеспечением хоста. В конце концов, в дополнение к запуску моего рабочего стола в контейнере, я надеюсь запустить графическое ускорение и т. Д. Так как в Docker встроены такие приятные git-подобные версии встроенных контейнеров, было бы неплохо использовать его. Возможно, libvirt будет хорошо работать с LXC, но привилегированный режим докера упрощает настройку устройств в контейнере.
Я провел небольшое исследование и уже нашел несколько ответов, но у меня не получается собрать все это вместе.
Фон в LXC
Запуск X из LXC помог мне увидеть, как я могу настроить контейнер с (то есть):
lxc.cgroup.devices.allow = c 226:0 rwm
и используя
mknod -m 666 dri/card0 c 226 0
внутри контейнера для подключения к хост-устройству.
докер
От cuda - Используя графический процессор из контейнера Docker, я увидел, что могу получить ту же настройку для работы в Docker с бэкэндом LXC.
Мне показалось, что если докер-контейнер запущен в привилегированном режиме, то он может нормально обращаться к графическому процессору без этой дополнительной настройки. Итак, я запустил базовую систему, установил графические драйверы, xorg-server, xorg-xinit и оконный менеджер, чтобы проверить это.
Первая попытка
# startx
Cannot run from a console (or some message like that)
Хорошо, я думал, что я был на tty2.
# tty
/dev/console
Это не то, что я ожидал.
# chvt 2
# tty
/dev/tty2
Ну, похоже, это сработало. Давайте попробуем еще # startx
раз. Запустился диспетчер окон, с курсором в центре. Нет ответа мыши. Нет ответа клавиатуры. Давайте попробуем изменить tty с Ctrl-Alt+F3
. Нет ответа Ну, похоже, мне придется перезагрузиться.
Вторая попытка
# tty
/dev/console
# chvt 2
# tty
/dev/console
Какие? Я не могу изменить это сейчас?
продолжение
Попробовав еще раз, я заставил его сменить tty, и startx снова заморозил компьютер.
Что теперь?
Итак, я сейчас в тупике. Я действительно хочу иметь возможность использовать контейнер - предпочтительнее Docker, также приемлем LXC с libvirt - чтобы он работал как моя ежедневная операционная система, сохраняя при этом компактную хост-ОС.
Лучше ли здесь использовать Docker с привилегированным режимом или использовать явный бэкэнд LXC и попробовать варианты, перечисленные выше?
Я уже планирую использовать libvirt (возможно, под vagrant-libvirt) для управления моей Windows vm, так что будет ли для меня примерно так же использовать libvirt или vagrant-LXC в этом случае?
Редактировать: читая LXC против Docker , у меня возникает ощущение, что, поскольку контейнеры Docker и Docker предназначены для сред с одним приложением, возможно, было бы лучше использовать LXC вместо Docker для работы в качестве моей повседневной операционной системы. Мысли?
Изменить: Я обнаружил, что, как и Docker, есть команда lxc-device, которая позволяет мне обходить шаги cgroups и mknod. Если раньше я мог заставить x запустить и заморозить свою систему, то теперь это просто ошибки. Возможно, я смогу со временем это выяснить, поскольку, похоже, там никого нет.
Обновление: у меня работает мышь. На гостевой я установил xf86-input-mouse и xf86-input-keyboard. На хосте я запустил следующее:
# lxc-device -n g1 add /dev/input/mice
# lxc-device -n g1 add /dev/dri/card0
# lxc-device -n g1 add /dev/dri/controlD64
# lxc-device -n g1 add /dev/dri/renderD128
# lxc-device -n g1 add /dev/fb0
# lxc-device -n g1 add /dev/tty2
Работает!
startx
с exec twm
, но все это было заморожено с моей точки зрения. Нет ответа на клавиатуру или мышь.