Як встановити модуль ядра в гостьовій машині LXC?


13

Я намагаюся встановити OpenStack DevStack на гостьовій машині LXC. Один з пакетів DevStack вимагає нового модуля ядра, але коли я намагаюся запустити modprobe на LXC гості, я отримую помилку:

ubuntu@lxc$ sudo modprobe scsi_transport_iscsi
FATAL: Could not load /lib/modules/3.2.0-48-generic/modules.dep: No such file or directory

Як я можу встановити цей модуль для своєї гостьової машини LXC?

Відповіді:


13

Коротка відповідь - ви не можете. Контейнери LXC ділять своє ядро ​​з хостом і за замовчуванням не дозволяється завантажувати модулі (оскільки це було б досить небезпечно).

Стандартна рекомендація - будь-який модуль завантажений на хост перед запуском контейнера. Ви можете це зробити зі старим хорошим сценарієм init або скориставшись гачком lxc (детальну інформацію див. Тут у моєму недавньому дописі: https://www.stgraber.org/2013/12/23/lxc-1-0-some- більш розширене використання контейнерів / )


1

Для цілей цієї відповіді припустимо, що ваш контейнер названий "foo".

ЧАСТИНА А

  1. З хостом збережіть копію /var/lib/lxc/foo/config, якщо мої вказівки щось порушують.

  2. Вам потрібно буде налаштувати контейнер для збереження 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 повинен мати можливість завантажувати та вивантажувати модулі ядра.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.