lxc: запуск virtualbox внутри контейнера

9

Я установил virtualbox внутри контейнера lxc. Однако, когда я пытаюсь запустить ВМ, я получаю сообщение:

Драйвер ядра недоступен (rc = 1909) .... проблема с разрешением / dev / vboxdrv.

Это очевидно выглядит как предсказуемая проблема безопасности.

Кто-нибудь знает, как я могу предоставить разрешение контейнеру для доступа к этому драйверу устройства: '/ dev / vboxdrv'?

Любая помощь или указатели с благодарностью.

user108168
источник

Ответы:

9

На вашем хосте LXC (я предполагаю, что Ubuntu здесь):

  1. Установить virtualbox-dkms, linux-headers-generic, build-essentialпакеты и проверить модули ядра загружаются:

    myhost$ sudo /etc/init.d/virtualbox status
    VirtualBox kernel modules are loaded.
    
  2. Получите номера устройств VirtualBox (10, 55/56/57 в моем случае):

    myhost$ ls -la /dev | grep vbox
    crw-------  1 root root     10,  57 Feb 25 08:22 vboxdrv
    crw-------  1 root root     10,  56 Feb 25 08:22 vboxdrvu
    crw-------  1 root root     10,  55 Feb 25 08:22 vboxnetctl
    
  3. Возьмите номера узлов и добавьте к вашей гостевой конфигурации LXC ( /var/lib/lxc/myguest/config):

    ## VirtualBox
    lxc.cgroup.devices.allow = c 10:57 rwm
    lxc.cgroup.devices.allow = c 10:56 rwm
    lxc.cgroup.devices.allow = c 10:55 rwm
    
  4. Перезапустите гостевой компьютер LXC, установите virtualboxпакет и создайте узлы устройства:

    myguest$ sudo mknod -m 600 /dev/vboxdrv c 10 57
    myguest$ sudo mknod -m 600 /dev/vboxdrvu c 10 56
    myguest$ sudo mknod -m 600 /dev/vboxnetctl c 10 55
    
  5. Убедитесь, что VirtualBox на гостевой системе может видеть модули ядра:

    myguest$ sudo /etc/init.d/virtualbox status
    VirtualBox kernel modules are loaded.
    
rcoup
источник
Это должен быть правильный ответ. Наиболее важными шагами, которых нет во всех остальных ответах, являются шаги 3 и 4.
Лео Лам
1

Драйвер ядра VirtualBox Linux (vboxdrv) либо не загружен, либо существует проблема с правами доступа к / dev / vboxdrv. Переустановите модуль ядра, выполнив

 '/etc/init.d/vboxdrv setup'

как корень. Пользователи Ubuntu или Fedora должны сначала установить пакет DKMS. Этот пакет отслеживает изменения ядра Linux и при необходимости перекомпилирует модуль ядра vboxdrv.

Абхишек Ананд Амралкар
источник
Это просто цитата из сообщения об ошибке. Драйвер загружен, но контейнер не имеет разрешения на доступ к нему. Согласно ответу об ошибке. У меня был вопрос: как разрешить процессам внутри контейнера доступ к устройствам ядра? Как решить проблему с разрешениями?
user108168
0

Вы должны /dev/vboxdrvпринадлежать группе «vboxuser» и пользователю, запускающему контейнер в этой группе. Добавьте пользователя в группу, затем убедитесь, что есть права доступа группы (то есть chmod 660 /dev/vboxdrv).

Натан С
источник
Привет Натан С. Спасибо за ваш ответ. Где я это делаю; в среде хоста или контейнера?
user108168
Хост, предполагая, что драйверы ядра установлены там (что они должны делать, так как LXC зависит от ядра хоста).
Привет Натан С Спасибо за разъяснения. Устройство / dev / vboxdrv принадлежит пользователю root, и я запускаю контейнер как root. Я запускал virtualbox от имени другого пользователя в контейнере, но пытался запустить его как root. Я также настроил устройство для установки группы на vboxusers и разрешения на 660. Я все еще получаю ошибку. На хосте все отлично работает как для root, так и для не-root пользователей. Разве мне не нужно помещать параметр в файл конфигурации lxc, чтобы предоставить разрешения для контейнера? Это то, что я предположил, но не знаю, кто они. Спасибо за вашу помощь.
user108168
-1

Нет необходимости устанавливать virtualbox на вашем хост-компьютере, если ваш контейнер компилирует модуль ядра, вы можете просто загрузить его во время сценария предварительного запуска в контейнере LXC. Для большей безопасности вы можете скопировать модули ядра VBox на свой хост перед загрузкой.

user190601
источник