Для цілей цієї відповіді припустимо, що ваш контейнер названий "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 повинен мати можливість завантажувати та вивантажувати модулі ядра.