Làm cách nào để cài đặt mô-đun hạt nhân trong máy khách LXC?


13

Tôi đang cố gắng cài đặt OpenStack DevStack trên máy khách LXC. Một trong các gói của DevStack yêu cầu mô-đun hạt nhân mới, nhưng khi tôi thử chạy modprobe trên máy khách LXC, tôi gặp lỗi:

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

Làm cách nào tôi có thể cài đặt mô-đun này cho máy khách LXC của mình?

Câu trả lời:


13

Câu trả lời ngắn gọn là, bạn không thể. Các thùng chứa LXC chia sẻ kernel của chúng với máy chủ và theo mặc định không được phép tải các mô-đun (vì điều này sẽ khá nguy hiểm).

Khuyến nghị tiêu chuẩn là có bất kỳ mô-đun nào được tải trên máy chủ trước khi bắt đầu container. Bạn có thể làm điều đó với một tập lệnh init cũ tốt hoặc bằng cách sử dụng hook lxc (xem bài đăng gần đây của tôi ở đây để biết chi tiết: https://www.stgraber.org/2013/12/23/lxc-1-0-some- nâng cao hơn-sử dụng container / )


1

Đối với mục đích của câu trả lời này, giả sử container của bạn được đặt tên là "" foo ".

PHẦN A

  1. Từ máy chủ lưu trữ, lưu một bản sao /var/lib/lxc/foo/config, trong trường hợp hướng dẫn của tôi phá vỡ một cái gì đó.

  2. Bạn sẽ cần phải cấu hình container của bạn để giữ SYS_MODULE khả năng.

    Xin lưu ý rằng cấu hình như vậy cung cấp cho vùng chứa đó khả năng chiếm hạt nhân và do đó máy chủ lưu trữ .

    Để làm điều này, bạn sẽ muốn thay đổi dòng "lxc.cap.drop"hoặc "lxc.cap.keep"cấu hình.

    Nếu bạn đang chạy một khách Ubuntu 19.04 đã được tạo "lxc-create --name foo --template download -- ..."sau đó:

    • /var/lib/lxc/foo/config sẽ chứa một dòng

      lxc.include = /usr/share/lxc/ubuntu.common.conf
      
    • /usr/share/lxc/ubuntu.common.conf sẽ chứa một dòng

      lxc.include = /usr/share/lxc/config/common.conf
      
    • /usr/share/lxc/config/common.conf sẽ chứa một dòng như thế này

      lxc.cap.drop = mac_admin mac_override sys_time sys_module sys_rawio
      

Bạn nên sao chép dòng cuối cùng vào cuối /var/lib/lxc/foo/config(hoặc bất kỳ vị trí nào sau "include /usr/share/lxc/ubuntu.common.conf") và sau đó xóa "sys_module"khỏi danh sách đó.

Phần B

Bạn cần một bản sao của các mô-đun hạt nhân của bạn trong thùng chứa.

Nếu máy chủ của bạn đang chạy kernel Ubuntu, thì bạn có thể làm điều gì đó giống như "sudo apt install kernel-image-$(uname -r)"từ khách.

Mặt khác từ máy chủ lưu trữ, có thể cần phải làm một cái gì đó như thế này (giả sử container của bạn được đặt tên là "foo"):

mkdir -p /var/lib/lxc/foo/rootfs/lib/modules
cp -apr /lib/modules/$(uname -r) /var/lib/lxc/foo/rootfs/lib/modules/

Sau đó, tắt foo khách nếu nó đang chạy, và sau đó khởi động lại nó với một cái gì đó như "lxc-start --name foo".

Bộ chứa LXC bây giờ có thể tải và dỡ bỏ các mô-đun hạt nhân.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.