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

मैं अपने एलएक्ससी गेस्ट मशीन के लिए इस मॉड्यूल को कैसे स्थापित कर सकता हूं?

जवाबों:


13

संक्षिप्त उत्तर है, आप नहीं कर सकते। LXC कंटेनर होस्ट के साथ अपना कर्नेल साझा करते हैं और डिफ़ॉल्ट रूप से मॉड्यूल लोड करने की अनुमति नहीं है (क्योंकि यह बहुत खतरनाक होगा)।

मानक सिफारिश कंटेनर को शुरू करने से पहले होस्ट पर लोड किए गए किसी भी मॉड्यूल के लिए है। आप या तो एक अच्छी पुरानी init स्क्रिप्ट के साथ या एक lxc हुक का उपयोग कर सकते हैं (विवरण के लिए मेरी हालिया पोस्ट देखें: https://www.stgraber.org/2013/12/12/23/lxc-1-0-some- अधिक-उन्नत-कंटेनर-उपयोग / )


1

इस उत्तर के प्रयोजनों के लिए, मान लें कि आपके कंटेनर का नाम `'फू' 'है।

पार्ट ए

  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"उस सूची से हटा देना चाहिए ।

पार्ट बी

आपको कंटेनर में अपने कर्नेल मॉड्यूल की एक प्रति चाहिए।

यदि आपका मेजबान उबंटू कर्नेल चला रहा है, तो आप "sudo apt install kernel-image-$(uname -r)"अतिथि की तरह कुछ करने में सक्षम हो सकते हैं।

अन्यथा मेजबान से, ऐसा कुछ करने की आवश्यकता हो सकती है (आपके कंटेनर को "फू" का नाम दिया गया है):

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

उसके बाद, यदि यह चल रहा है, तो अतिथि फ़ू को बंद कर दें, और फिर इसे कुछ इस तरह से पुनरारंभ करें "lxc-start --name foo"

LXC कंटेनर अब कर्नेल मॉड्यूल को लोड और अनलोड करने में सक्षम होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.