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ゲストマシンにこのモジュールをインストールするにはどうすればよいですか?
簡単な答えは、できません。 LXCコンテナはホストとカーネルを共有し、デフォルトではモジュールをロードできません(これはかなり危険なため)。
標準的な推奨事項は、コンテナを起動する前にホストにモジュールをロードすることです。それは、古き良きinitスクリプトを使用するか、lxcフックを使用して行うことができます(詳細については、最近の私の投稿を参照してください: https://www.stgraber.org/2013/12/23/lxc-1- 0-some-more-advanced-container-usage / )
この答えのために、コンテナの名前が「foo」であると仮定します。
ホストから、/ var/lib/lxc/foo/configのコピーを保存します。これは、私の指示に問題が発生した場合に備えてください。
SYS_MODULE機能を保持するには、コンテナを構成する必要があります。このような構成により、そのコンテナはカーネルを引き継ぐことができ、それによりホストを引き継ぐことができることに注意してください。これを行うには、「lxc.cap.drop」または「lxc.cap.keep」構成行を変更します。 「lxc-create --name foo --template download-...」で作成されたUbuntu 19.04ゲストを実行している場合...
ファイル/ 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"を削除する必要がありますリスト。
mkdir -p/var/lib/lxc/foo/rootfs/lib/modules cp -apr/lib/modules/$(uname -r)/ var/lib/lxc/foo/rootfs/lib/modules /
これで、LXCコンテナはカーネルモジュールをロードおよびアンロードできるはずです。