如何在LXC来宾计算机中安装内核模块?


13

我正在尝试在LXC来宾计算机上安装OpenStack DevStack。DevStack的软件包之一需要一个新的内核模块,但是当我尝试在LXC guest虚拟机上运行modprobe时,出现错误:

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来宾计算机安装此模块?

Answers:



1

出于此答案的目的,我们假设您的容器名为““ foo”。

甲部

  1. 在主机上,保存的副本/var/lib/lxc/foo/config,以防我的说明破坏了某些内容。

  2. 您将需要配置容器以保留该SYS_MODULE 功能。

    请注意,这种配置使该容器能够接管内核,从而接管主机

    为此,您将需要更改"lxc.cap.drop""lxc.cap.keep"配置行。

    如果您正在运行使用创建的Ubuntu 19.04 guest虚拟机,"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"从该列表中删除。

B部分

您需要在容器中复制内核模块。

如果您的主机运行的是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/

此后,请关闭guest虚拟机foo(如果正在运行),然后使用类似的命令重新启动它"lxc-start --name foo"

现在,LXC容器应该能够加载和卸载内核模块。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.