LXCゲストマシンにカーネルモジュールをインストールするにはどうすればよいですか?


13

LXCゲストマシンにOpenStack DevStackをインストールしようとしています。DevStackのパッケージの1つには新しいカーネルモジュールが必要ですが、LXCゲストで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ゲストマシンにこのモジュールをインストールするにはどうすればよいですか?

回答:


13

簡単に言えば、できません。LXCコンテナーはカーネルをホストと共有し、デフォルトではモジュールをロードすることは許可されていません(これはかなり危険なためです)。

標準的な推奨事項は、コンテナを起動する前にホストにモジュールをロードすることです。それは、古き良きinitスクリプトを使用するか、lxcフックを使用して行うことができます(詳細については、最近の私の投稿を参照してください:https ://www.stgraber.org/2013/12/23/lxc-1-0-some- より高度なコンテナ使用法/


1

この回答の目的のために、コンテナの名前が「foo」であると仮定しましょう。

パートA

  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"から、そのリストから削除する必要があります。

パート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/

その後、ゲストfooが実行されている場合はシャットダウンし、のようなもので再起動し"lxc-start --name foo"ます。

これで、LXCコンテナはカーネルモジュールをロードおよびアンロードできるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.