LXC कंटेनरों के अंदर लूप माउंटिंग फ़ाइलों को अनुमति दें?


10

मैं एक LXC कंटेनर के अंदर MaaS सर्वर स्थापित करने का प्रयास कर रहा हूं।

जब मैं पीएक्सई फाइलें आयात करता हूं, तो इसे लूप उपकरणों को माउंट करने में सक्षम होना चाहिए।

मैंने लूप माउंटिंग की अनुमति देने के लिए कंटेनर कॉन्फिगर फाइल में निम्नलिखित विकल्प सेट किए हैं, लेकिन मुझे कुछ याद आ रहा है।

lxc.cgroup.devices.allow = b 7:* rwm
lxc.cgroup.devices.allow = c 10:237 rwm

मुझे निम्न त्रुटि मिलती है क्योंकि स्क्रिप्ट किसी फ़ाइल को माउंट नहीं कर सकती है:

mount: cannot mount block device /dev/loop0 read-only
Wed, 13 Nov 2013 07:26:41 +0000: failed to mount /var/lib/maas/ephemeral/precise/ephemeral/i386/20131010/disk.img
Traceback (most recent call last):
  File "/usr/sbin/maas-import-ephemerals", line 26, in <module>
    main(args)
  File "/usr/lib/python2.7/dist-packages/provisioningserver/import_images/ephemerals_script.py", line 428, in main
    target.sync(source, args.path)
  File "/usr/lib/python2.7/dist-packages/simplestreams/mirrors/__init__.py", line 85, in sync
    return self.sync_index(reader, path, data, content)
  File "/usr/lib/python2.7/dist-packages/simplestreams/mirrors/__init__.py", line 237, in sync_index
    self.sync(reader, path=epath)
  File "/usr/lib/python2.7/dist-packages/simplestreams/mirrors/__init__.py", line 83, in sync
    return self.sync_products(reader, path, data, content)
  File "/usr/lib/python2.7/dist-packages/simplestreams/mirrors/__init__.py", line 315, in sync_products
    self.insert_item(item, src, target, pgree, ipath_cs)
  File "/usr/lib/python2.7/dist-packages/provisioningserver/import_images/ephemerals_script.py", line 251, in insert_item
    self.extract_item(path, flat)
  File "/usr/lib/python2.7/dist-packages/provisioningserver/import_images/ephemerals_script.py", line 295, in extract_item
    tarball, target_dir, temp_location=self._simplestreams_path())
  File "/usr/lib/python2.7/dist-packages/provisioningserver/import_images/ephemerals_script.py", line 124, in extract_image_tarball
    call_uec2roottar(image, os.path.join(target_dir, 'dist-root.tar.gz'))
  File "/usr/lib/python2.7/dist-packages/provisioningserver/import_images/ephemerals_script.py", line 97, in call_uec2roottar
    subprocess.check_call(["uec2roottar"] + list(args))
  File "/usr/lib/python2.7/subprocess.py", line 540, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '[u'uec2roottar', u'/var/lib/maas/ephemeral/precise/ephemeral/i386/20131010/disk.img', u'/var/lib/maas/ephemeral/precise/ephemeral/i386/20131010/dist-root.tar.gz']' returned non-zero exit status 1
root@maaslxc2:~# mount /dev/loop0 /mnt
mount: block device /dev/loop0 is write-protected, mounting read-only
mount: cannot mount block device /dev/loop0 read-only

तो, मुझे लूप डिवाइस को माउंट करने की अनुमति देने के लिए कंटेनर के कॉन्फ़िगरेशन में क्या बदलने की आवश्यकता है? ऐसा प्रतीत होता है कि यह सिर्फ एक MaaS समस्या नहीं है, बल्कि एक प्रतिबंध जो किसी भी चीज के लिए परेशानी का कारण होगा (सिर्फ MaaS नहीं) जिसे LXC कंटेनर में एक फ़ाइल को माउंट करने की आवश्यकता है।

जवाबों:


10

आप जिस मुद्दे पर चल रहे थे, वह मूल्यांकनकर्ता के पास है। 'dmesg'शायद आपको कुछ ऐसा दिखाया होगा:

[ 4822.366235] type=1400 audit(1384973058.254:52): apparmor="DENIED" operation="mount" 
info="failed type match" error=-13 parent=1272 profile="lxc-container-default" 
name="/mnt/" pid=1273 comm="mount" fstype="ext4" srcname="/dev/loop0/" flags="ro"

आप अपने lxc कंटेनर को 2 में से एक तरीके से ext2, ext3 या ext4 फाइल सिस्टम के mounts करने की अनुमति दे सकते हैं। सरलता से निम्नलिखित को lxc config में जोड़ना है ( /var/lib/lxc/$NAME/config):

lxc.aa_profile = unconfined
lxc.cgroup.devices.allow = b 7:* rwm
lxc.cgroup.devices.allow = c 10:237 rwm

एक बहुत अधिक प्रतिबंधात्मक समाधान जो अभी भी आवश्यक अनुमति देता है, वह निम्न कार्य करना है:

$ sudo tee /etc/apparmor.d/lxc/lxc-custom-mounts <<EOF
# copied and modified from /etc/apparmor.d/lxc/lxc-default
profile lxc-container-extx-mounts flags=(attach_disconnected,mediate_deleted) {
  #include <abstractions/lxc/container-base>
  mount fstype=ext4 -> /**,
  mount fstype=ext3 -> /**,
  mount fstype=ext2 -> /**,
}
EOF

# reload the lxc-containers profile
$ sudo apparmor_parser --replace /etc/apparmor.d/lxc-containers

$ sudo lxc-create -t ubuntu-cloud -n source-saucy-amd64 -- --release=saucy --arch=amd64

$ name="test1"
$ cfg=/var/lib/lxc/$name/config;
$ sudo lxc-clone -o source-saucy-amd64 -n "$name"

## modify the config to use the profile created above
$ sudo grep "#allow-loop" "$cfg" || sudo tee -a "$cfg" <<EOF
#allow-loop
lxc.aa_profile = lxc-container-extx-mounts
lxc.cgroup.devices.allow = b 7:* rwm
lxc.cgroup.devices.allow = c 10:237 rwm
EOF

फिर आप इसे कंटेनर में काम करने के लिए सत्यापित कर सकते हैं जैसे कि कुछ आसान है:

$ truncate --size 100M my.img
$ mkfs.ext4 -F my.img
$ sudo mount -o loop,ro my.img /mnt
$ ls /mnt
lost+found
$ sudo umount /mnt

मैंने इसे संबोधित करने के लिए अभी 1257389 बग खोले हैं । उम्मीद है कि कुछ समय बाद जल्द ही एमएएस-आयात-पंचांग एक कंटेनर के अंदर काम करेगा

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