Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

eBlockerVM-2.9.1-amd64.ova / virt-v2v: error: libguestfs error: you must call guestfs_add_drive before guestfs_launch #26

Open
minger0 opened this issue Apr 23, 2023 · 3 comments

Comments

@minger0
Copy link

minger0 commented Apr 23, 2023

rwmjones 17c6d52 reported the eBlockerVM-2.9.1-amd64.ova working on the latest after his commit, so I followed the install steps and installed virtv2v latest to /usr/local/bin/virt-v2v, hoping that it would work for me just like for rwmjones. It did not, because I get a
virt-v2v: error: libguestfs error: you must call guestfs_add_drive before
error instead. See details below. Question: how to get the eBlockerVM-2.9.1-amd64.ova conversion working?

which virt-v2v

/usr/local/bin/virt-v2v

/usr/bin/virt-v2v --version

virt-v2v 1.44.2

/usr/local/bin/virt-v2v --version

virt-v2v 2.3.3

export LIBGUESTFS_DEBUG=1 LIBGUESTFS_TRACE=1
/usr/local/bin/virt-v2v -v -x -i ova eBlockerVM-2.9.1-amd64.ova -of qcow2

libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
libguestfs: trace: get_cachedir
libguestfs: trace: get_cachedir = "/var/tmp"
virt-v2v: virt-v2v 2.3.3 (x86_64)
libvirt version: 8.0.0
check_host_free_space: large_tmpdir=/var/tmp free_space=813592858624
[ 0.0] Setting up the source: -i ova eBlockerVM-2.9.1-amd64.ova
qemu-img info json:'{ "file": { "driver": "raw", "offset": 512, "size": 512, "file": { "filename": "/tmp/v2vqemuimgtstb82e23.img" } } }' >/dev/null
qemu-img supports "offset" and "size" in json URLs: true
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
libguestfs: trace: set_trace true
libguestfs: trace: set_trace = 0
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
libguestfs: trace: get_backend
libguestfs: trace: get_backend = "direct"
tar -tf 'eBlockerVM-2.9.1-amd64.ova'
tar -xf 'eBlockerVM-2.9.1-amd64.ova' -C '/var/tmp/ova.CdLB6P' 'eBlockerVM-2.9.1-amd64.ovf' 'eBlockerVM-2.9.1-amd64.mf'
ova: orig_ova = eBlockerVM-2.9.1-amd64.ova, top_dir = /var/tmp/ova.CdLB6P, ova_type = TarOptimized eBlockerVM-2.9.1-amd64.ova
ova: processing manifest file /var/tmp/ova.CdLB6P/eBlockerVM-2.9.1-amd64.mf
libguestfs: trace: close
libguestfs: closing guestfs handle 0x5567bd9367a0 (state 0)
libguestfs: trace: close
libguestfs: closing guestfs handle 0x5567bd948a40 (state 0)
tar xOf 'eBlockerVM-2.9.1-amd64.ova' 'eBlocker VM-disk001.vmdk' | sha256sum
tar xOf 'eBlockerVM-2.9.1-amd64.ova' 'eBlockerVM-2.9.1-amd64.ovf' | sha256sum
virt-v2v: warning: could not parse ovf:Name from OVF document
[ 7.0] Opening the source
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
libguestfs: trace: set_trace true
libguestfs: trace: set_trace = 0
libguestfs: trace: set_verbose true
libguestfs: trace: set_verbose = 0
libguestfs: trace: set_identifier "v2v"
libguestfs: trace: v2v: set_identifier = 0
libguestfs: trace: v2v: get_memsize
libguestfs: trace: v2v: get_memsize = 1280
libguestfs: trace: v2v: set_memsize 2560
libguestfs: trace: v2v: set_memsize = 0
libguestfs: trace: v2v: set_smp 8
libguestfs: trace: v2v: set_smp = 0
libguestfs: trace: v2v: set_network true
libguestfs: trace: v2v: set_network = 0
libguestfs: trace: v2v: launch
libguestfs: trace: v2v: max_disks
libguestfs: trace: v2v: max_disks = 255
libguestfs: trace: v2v: get_tmpdir
libguestfs: trace: v2v: get_tmpdir = "/tmp"
libguestfs: trace: v2v: version
libguestfs: trace: v2v: version = <struct guestfs_version = major: 1, minor: 46, release: 2, extra: , >
libguestfs: trace: v2v: get_backend
libguestfs: trace: v2v: get_backend = "direct"
libguestfs: launch: program=virt-v2v
libguestfs: launch: identifier=v2v
libguestfs: launch: version=1.46.2
libguestfs: launch: backend registered: unix
libguestfs: launch: backend registered: uml
libguestfs: launch: backend registered: libvirt
libguestfs: launch: backend registered: direct
libguestfs: launch: backend=direct
libguestfs: launch: tmpdir=/tmp/libguestfs7y9SCY
libguestfs: launch: umask=0002
libguestfs: launch: euid=1000
libguestfs: trace: v2v: launch = -1 (error)
virt-v2v: error: libguestfs error: you must call guestfs_add_drive before

guestfs_launch
rm -rf -- '/var/tmp/ova.CdLB6P'
rm -rf -- '/tmp/v2v.OLYbVO'
libguestfs: trace: v2v: close
libguestfs: closing guestfs handle 0x5567bd95acc0 (state 0)
libguestfs: command: run: rm
libguestfs: command: run: \ -rf /tmp/libguestfs7y9SCY

@rwmjones
Copy link
Member

About eBlockerVM in general: The OVA uses an unusual, newer OVF variant than we currently support, and as a result virt-v2v cannot right now be used to import it.

There is a bug about this: https://bugzilla.redhat.com/show_bug.cgi?id=2183999

@minger0
Copy link
Author

minger0 commented May 1, 2023

Do you expect a solution coming in a few weeks?
If not, is there a temporary one-off bootstrapping for the issues you mentioned?
(1) The xmlns changed to: xmlns="http://schemas.dmtf.org/ovf/envelope/2"
(2) ovf:version="2.0" in the <Envelope>
(3) Uses <StorageItem> instead of <Item>

@rwmjones
Copy link
Member

rwmjones commented May 2, 2023

It's a volunteer project and everyone is welcome to contribute. That said, this particular new format is hard to implement and apparently not used by VMware.

It may well be possible to modify the OVF to turn it into a v1 format. You might want to start by looking at some other example OVFs to get the idea, such as the ones we use for testing here: https://github.com/libguestfs/virt-v2v/tree/master/tests

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants