Для целей этого ответа предположим, что ваш контейнер называется `" foo ".
ЧАСТЬ А
С хоста сохраните копию /var/lib/lxc/foo/config
, на случай, если мои инструкции что-то сломают.
Вам нужно будет настроить свой контейнер, чтобы сохранить SYS_MODULE
возможность.
Имейте в виду, что такая конфигурация дает этому контейнеру возможность захватывать ядро и, следовательно, хост .
Для этого вам нужно изменить строку конфигурации "lxc.cap.drop"
или "lxc.cap.keep"
.
Если вы работаете с гостем Ubuntu 19.04, который был создан с помощью "lxc-create --name foo --template download -- ..."
:
/var/lib/lxc/foo/config
будет содержать строку
lxc.include = /usr/share/lxc/ubuntu.common.conf
/usr/share/lxc/ubuntu.common.conf
будет содержать строку
lxc.include = /usr/share/lxc/config/common.conf
/usr/share/lxc/config/common.conf
будет содержать такую строку
lxc.cap.drop = mac_admin mac_override sys_time sys_module sys_rawio
Вы должны скопировать эту последнюю строку в конец /var/lib/lxc/foo/config
(или в любое место после "include /usr/share/lxc/ubuntu.common.conf"
), а затем удалить "sys_module"
из этого списка.
Часть Б
Вам нужна копия ваших модулей ядра в контейнере.
Если на вашем хосте работает ядро Ubuntu, вы можете сделать что-то вроде "sudo apt install kernel-image-$(uname -r)"
гостя.
В противном случае от хоста может потребоваться сделать что-то вроде этого (при условии, что ваш контейнер называется «foo»):
mkdir -p /var/lib/lxc/foo/rootfs/lib/modules
cp -apr /lib/modules/$(uname -r) /var/lib/lxc/foo/rootfs/lib/modules/
После этого закройте гостевой фу, если он запущен, а затем перезапустите его как-нибудь так "lxc-start --name foo"
.
Теперь контейнер LXC должен загружать и выгружать модули ядра.