LXC 게스트 머신에 커널 모듈을 어떻게 설치합니까?


13

LXC 게스트 컴퓨터에 OpenStack DevStack을 설치하려고합니다. DevStack 패키지 중 하나에는 새로운 커널 모듈이 필요하지만 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"구성 줄 을 변경해야 합니다.

    "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"해당 목록에서 삭제 해야합니다.

파트 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.