when use dib in docker, loopdev attach -- losetup ... failed

Bug #1924967 reported by peihp2009
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
diskimage-builder
New
Undecided
Unassigned

Bug Description

Using a centos:7 docker image, i run a container and do the following operations.

In my host machine:
#docker pull centos:7
#docker run -it --privileged=true --name hp-dib centos:7 bash

Enter the container:
#git clone https://opendev.org/openstack/diskimage-builder.git
#yum -y install bzip2 util-linux dosfstools gdisk kpartx sudo curl git squashfs-tools qemu-img policycoreutils-python procps-ng
#cd /diskimage-builder
#git checkout 2.9.0 (i use the 2.9.0 tag to support python2)
#pip install -r requirements.txt
#python setup.py install
#diskimage-builder -o /opt/centos7.qcow2 vm centos7

------------------------------------------------------------------>
the error happend :

...
...
...
Calculating image size (this may take a minute)...
2021-04-19 03:56:19.552 INFO diskimage_builder.block_device.blockdevice [-] Wrote final block device config to [/tmp/dib_build.HXVBq69a/states/block-device/config.json]
2021-04-19 03:56:20.186 INFO diskimage_builder.block_device.blockdevice [-] create() called
2021-04-19 03:56:20.188 INFO diskimage_builder.block_device.level0.localloop [-] Create image file [/tmp/dib_image.27AEiozV/image0.raw]
2021-04-19 03:56:20.189 INFO diskimage_builder.block_device.level0.localloop [-] loopdev attach
losetup: /tmp/dib_image.27AEiozV/image0.raw: failed to set up loop device: No such file or directory
2021-04-19 03:56:20.221 ERROR diskimage_builder.block_device.level0.localloop [-] losetup failed
2021-04-19 03:56:20.222 ERROR diskimage_builder.block_device.blockdevice [-] Create failed; rollback initiated
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/diskimage_builder/block_device/blockdevice.py", line 385, in cmd_create
    node.create()
  File "/usr/lib/python2.7/site-packages/diskimage_builder/block_device/level0/localloop.py", line 110, in create
    block_device = loopdev_attach(self.filename)
  File "/usr/lib/python2.7/site-packages/diskimage_builder/block_device/level0/localloop.py", line 54, in loopdev_attach
    raise BlockDeviceSetupException("losetup failed")
BlockDeviceSetupException: losetup failed
2021-04-19 03:56:20.223 INFO diskimage_builder.block_device.level0.localloop [-] Remove image file [/tmp/dib_image.27AEiozV/image0.raw]
2021-04-19 03:56:20.224 ERROR diskimage_builder.block_device.blockdevice [-] Rollback complete, exiting
Traceback (most recent call last):
  File "/usr/bin/dib-block-device", line 10, in <module>
    sys.exit(main())
  File "/usr/lib/python2.7/site-packages/diskimage_builder/block_device/cmd.py", line 120, in main
    return bdc.main()
  File "/usr/lib/python2.7/site-packages/diskimage_builder/block_device/cmd.py", line 115, in main
    self.args.func()
  File "/usr/lib/python2.7/site-packages/diskimage_builder/block_device/cmd.py", line 36, in cmd_create
    self.bd.cmd_create()
  File "/usr/lib/python2.7/site-packages/diskimage_builder/block_device/blockdevice.py", line 385, in cmd_create
    node.create()
  File "/usr/lib/python2.7/site-packages/diskimage_builder/block_device/level0/localloop.py", line 110, in create
    block_device = loopdev_attach(self.filename)
  File "/usr/lib/python2.7/site-packages/diskimage_builder/block_device/level0/localloop.py", line 54, in loopdev_attach
    raise BlockDeviceSetupException("losetup failed")
diskimage_builder.block_device.exception.BlockDeviceSetupException: losetup failed
2021-04-19 03:56:20.881 INFO diskimage_builder.block_device.blockdevice [-] State already cleaned - no way to do anything here
*** /tmp/dib_build.HXVBq69a/mnt is not a directory
<-----------------------------------------------------------------------------------------

the error codes in/usr/lib/python2.7/site-packages/diskimage_builder/block_device/level0/localloop.py :

def loopdev_attach(filename):
    logger.info("loopdev attach")
    logger.debug("Calling [sudo losetup --show -f %s]", filename)
    subp = subprocess.Popen(["sudo", "losetup", "--show", "-f",
                             filename], stdout=subprocess.PIPE)
    rval = subp.wait()
    if rval == 0:
        # [:-1]: Cut of the newline
        block_device = subp.stdout.read()[:-1].decode("utf-8")
        logger.info("New block device [%s]", block_device)
        return block_device
    else:
        logger.error("losetup failed")
        raise BlockDeviceSetupException("losetup failed")
<---------------------------------------------------------------------------------------->

What should i do to resolve this problem ? thanks~

Revision history for this message
Ian Wienand (iwienand) wrote :

We use dib in docker for all the nodepool-builders, so it should work. Are you running this as a privileged container?

I'm not aware of anything that would stop 2.9.0 working, but honestly it's so far behind I wouldn't be surprised if things aren't work.

Revision history for this message
peihp2009 (peihp2009) wrote :
Download full text (4.2 KiB)

when i use the latest code, the same problem still exists.

the latest code support python3,so i installed python3.

this is a privileged container,becasue i use "docekr run --privileged=true".

---------------------------------------------------->
2021-04-19 09:15:40.563 | Calculating image size (this may take a minute)...
2021-04-19 09:15:41.850 | INFO diskimage_builder.block_device.blockdevice [-] Wrote final block device config to [/tmp/dib_build.RComQZ3I/states/block-device/config.json]
2021-04-19 09:15:42.631 | INFO diskimage_builder.block_device.blockdevice [-] create() called
2021-04-19 09:15:42.633 | INFO diskimage_builder.block_device.level0.localloop [-] Create image file [/tmp/dib_image.uF2GpEg8/image0.raw]
2021-04-19 09:15:42.634 | INFO diskimage_builder.block_device.level0.localloop [-] loopdev attach
2021-04-19 09:15:42.634 | INFO diskimage_builder.block_device.utils [-] Calling [sudo losetup --show -f /tmp/dib_image.uF2GpEg8/image0.raw]
2021-04-19 09:15:42.659 | ERROR diskimage_builder.block_device.blockdevice [-] Create failed; rollback initiated
2021-04-19 09:15:42.659 | Traceback (most recent call last):
2021-04-19 09:15:42.659 | File "/usr/local/lib/python3.6/site-packages/diskimage_builder/block_device/blockdevice.py", line 407, in cmd_create
2021-04-19 09:15:42.659 | node.create()
2021-04-19 09:15:42.659 | File "/usr/local/lib/python3.6/site-packages/diskimage_builder/block_device/level0/localloop.py", line 101, in create
2021-04-19 09:15:42.659 | block_device = loopdev_attach(self.filename)
2021-04-19 09:15:42.659 | File "/usr/local/lib/python3.6/site-packages/diskimage_builder/block_device/level0/localloop.py", line 44, in loopdev_attach
2021-04-19 09:15:42.659 | block_device = exec_sudo(["losetup", "--show", "-f", filename])
2021-04-19 09:15:42.659 | File "/usr/local/lib/python3.6/site-packages/diskimage_builder/block_device/utils.py", line 143, in exec_sudo
2021-04-19 09:15:42.659 | raise e
2021-04-19 09:15:42.659 | diskimage_builder.block_device.exception.BlockDeviceSetupException: exec_sudo failed
2021-04-19 09:15:42.659 | INFO diskimage_builder.block_device.level0.localloop [-] Remove image file [/tmp/dib_image.uF2GpEg8/image0.raw]
2021-04-19 09:15:42.663 | ERROR diskimage_builder.block_device.blockdevice [-] Rollback complete, exiting
2021-04-19 09:15:42.664 | Traceback (most recent call last):
2021-04-19 09:15:42.664 | File "/usr/local/lib/python3.6/site-packages/diskimage_builder/lib/dib-block-device.py", line 7, in <module>
2021-04-19 09:15:42.664 | sys.exit(main())
2021-04-19 09:15:42.664 | File "/usr/local/lib/python3.6/site-packages/diskimage_builder/block_device/cmd.py", line 120, in main
2021-04-19 09:15:42.664 | return bdc.main()
2021-04-19 09:15:42.664 | File "/usr/local/lib/python3.6/site-packages/diskimage_builder/block_device/cmd.py", line 115, in main
2021-04-19 09:15:42.665 | self.args.func()
2021-04-19 09:15:42.665 | File "/usr/local/lib/python3.6/site-packages/diskimage_builder/block_device/cmd.py", line 36, in cmd_create
2021-04-19 09:15:42.665 | self.bd.cmd_create()
2021-04-19 09:15:42.665 | File "/usr/local/lib/python3.6/site-packages/diskimag...

Read more...

Revision history for this message
Ian Wienand (iwienand) wrote :

> 2021-04-19 09:15:42.633 | INFO diskimage_builder.block_device.level0.localloop [-] Create image file [/tmp/dib_image.uF2GpEg8/image0.raw]

This simply does an open() to a specified size, I don't see how that could fail really.

> 2021-04-19 09:15:42.634 | INFO diskimage_builder.block_device.utils [-] Calling [sudo losetup --show -f /tmp/dib_image.uF2GpEg8/image0.raw]

it seems like this can't find the file "image0.raw"?

What happens if you do something like

 dd if=/dev/zero of=/tmp/disk.img bs=1M count=10
 sudo losetup --show -f /tmp/disk.img

?

Revision history for this message
peihp2009 (peihp2009) wrote :

sorry, I try the #3 resolution way, but it not working.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.