Bagaimana cara saya menginstal modul kernel di mesin tamu LXC?

13

Saya mencoba untuk menginstal OpenStack DevStack pada mesin tamu LXC. Salah satu paket DevStack membutuhkan modul kernel baru, tetapi ketika saya mencoba menjalankan modprobe pada tamu LXC saya mendapatkan kesalahan:

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

Bagaimana saya bisa menginstal modul ini untuk mesin tamu LXC saya?

Mars
sumber

Jawaban:

13

Jawaban singkatnya adalah, Anda tidak bisa. Kontainer LXC membagikan kernelnya dengan host dan secara default tidak diizinkan memuat modul (karena ini akan sangat berbahaya).

Rekomendasi standar adalah memuat modul apa pun pada host sebelum memulai wadah. Anda dapat melakukannya dengan skrip init lama yang baik atau dengan menggunakan kait lxc (lihat posting terbaru saya di sini untuk detail: https://www.stgraber.org/2013/12/23/lxc-1-0-some- lebih-lanjut-penggunaan wadah / )

stgraber
sumber
1

Untuk keperluan jawaban ini, anggaplah wadah Anda bernama `" foo ".

BAGIAN A

  1. Dari tuan rumah, simpan salinan /var/lib/lxc/foo/config, kalau-kalau instruksi saya merusak sesuatu.

  2. Anda harus mengkonfigurasi wadah Anda untuk menjaga SYS_MODULE kemampuan.

    Sadarilah bahwa konfigurasi seperti itu memberikan wadah itu kemampuan untuk mengambil alih kernel dan dengan demikian tuan rumah .

    Untuk melakukan ini, Anda ingin mengubah "lxc.cap.drop"atau "lxc.cap.keep"garis konfigurasi.

    Jika Anda menjalankan tamu Ubuntu 19.04 yang telah dibuat dengan "lxc-create --name foo --template download -- ..."itu:

    • /var/lib/lxc/foo/config akan berisi garis

      lxc.include = /usr/share/lxc/ubuntu.common.conf
      
    • /usr/share/lxc/ubuntu.common.conf akan berisi garis

      lxc.include = /usr/share/lxc/config/common.conf
      
    • /usr/share/lxc/config/common.conf akan berisi garis seperti ini

      lxc.cap.drop = mac_admin mac_override sys_time sys_module sys_rawio
      

Anda harus menyalin baris terakhir ke akhir /var/lib/lxc/foo/config(atau tempat setelah "include /usr/share/lxc/ubuntu.common.conf") dan kemudian menghapus "sys_module"dari daftar itu.

Bagian B

Anda membutuhkan salinan modul kernel Anda di dalam wadah.

Jika host Anda menjalankan kernel Ubuntu, maka Anda mungkin dapat melakukan sesuatu seperti "sudo apt install kernel-image-$(uname -r)"dari tamu.

Kalau tidak dari host, mungkin perlu melakukan sesuatu seperti ini (dengan anggapan kontainer Anda bernama "foo"):

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

Setelah itu, matikan foo tamu jika sedang berjalan, dan kemudian restart dengan sesuatu seperti "lxc-start --name foo".

Wadah LXC sekarang seharusnya dapat memuat dan menurunkan modul kernel.

Adam Richter
sumber