我试图将我的Linux机器设置为运行多个来宾OS,其中一个是Windows VM,另一个是Linux容器。这里的目标是防止我弄乱主机系统,同时可以自由操作基本操作系统并使用主机硬件。最终,我希望在容器中运行我的桌面,然后希望运行图形加速的模拟等。由于Docker具有如此好的git内置容器版本,因此使用它似乎是一个好主意。也许libvirt与LXC一样好,但是docker的特权模式使不必为容器配置设备变得更加容易。
我已经做了一些研究,并已经提出了一些答案,但是我很难将所有内容放在一起。
LXC中的背景
从LXC运行X有助于我了解如何使用以下方式配置容器:
lxc.cgroup.devices.allow = c 226:0 rwm
和使用
mknod -m 666 dri/card0 c 226 0
在容器内部以连接到主机设备。
码头工人
从cuda中-使用来自docker容器的GPU,我看到我可以使用LXC后端在Docker中使用相同的设置。
在我看来,如果docker容器在特权模式下运行,那么它可以正常访问GPU,而无需进行额外配置。因此,我启动了一个基本系统,安装了图形驱动程序,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,也可以使用带有libvirt的LXC)作为我的日常操作系统,同时保持精简的主机OS。
最好在这里以特权模式使用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
,但是从我的角度来看,整个过程都冻结了。对键盘或鼠标无响应。