[Libguestfs] guestfish Remote Images IPv6 Support

Jonathan Wright jonathan at knownhost.com
Mon Apr 1 14:45:56 UTC 2019


I believe the bug lies in libguestfs.

Taking out the commands being sent to QEMU and using qemu-img info I can 
recreate the error:

# qemu-img info 
"rbd:images/CentOS-7-x86_64-GenericCloud-1901:mon_host=[fd00::cefc:1]\:6789:auth_supported=none"
qemu-img: Could not open 
'rbd:images/CentOS-7-x86_64-GenericCloud-1901:mon_host=[fd00::cefc:1]\:6789:auth_supported=none': 
invalid conf option :cefc:1]:6789:auth_supported: No such file or directory

When escaping the : in the v6 address (just like is done with the port's 
: ) the command works as expected.

# qemu-img info 
"rbd:images/CentOS-7-x86_64-GenericCloud-1901:mon_host=[fd00\:\:cefc\:1]\:6789:auth_supported=none"
image: json:{"driver": "raw", "file": {"pool": "images", "image": 
"CentOS-7-x86_64-GenericCloud-1901", "driver": "rbd", "=keyvalue-pairs": 
"[\"mon_host\", \"[fd00::cefc:1]:6789\", \"auth_supported\", \"none\"]"}}
file format: raw
virtual size: 8.0G (8589934592 bytes)
disk size: unavailable
cluster_size: 4194304
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
snap      snap                   8.0G 1969-12-31 18:00:00 00:00:00.000

I don't really know much about C but I'm going to try to hack together a 
basic fix in the code to escape the colons in v6 addresses and if I can 
get it clean enough I'll submit a PR otherwise a bug report.

On 4/1/19 9:30 AM, Richard W.M. Jones wrote:
> On Mon, Apr 01, 2019 at 08:45:48AM -0500, Jonathan Wright wrote:
>> Unfortunately I do need to use the address explicitly as opposed to
>> hostnames because the source of the data fed here is Ceph's monmap
>> which returns the addresses explicitly.
>>
>> I've tried all the common ways to escape the : in the v6 address to
>> no avail.  I definitely agree that the problem looks to be it
>> parsing the colons as if the port comes next and then everything
>> after that is args.
>>
>> Should I file a bug report?  There doesn't seem to be any way to
>> prevent the : from getting parsed incorrectly.
> Is it a bug in qemu?  Anyway yes if it's a bug please file
> a bug report about it.
>
> Rich.
>
>> On 3/30/19 2:50 AM, Richard W.M. Jones wrote:
>>> On Fri, Mar 29, 2019 at 06:17:17PM -0500, Jonathan Wright wrote:
>>>> I have scoured the web and can't find anything on the topic: Is IPv6
>>>> supported for remote image targets?
>>> It definitely should work, although I don't know if anyone has tried
>>> using the address explicitly (rather than a hostname which resolves to
>>> an AAAA record).
>>>
>>>> For example:
>>>>
>>>> guestfish --format=raw --ro -a
>>>> rbd://[fd00::cefc:1]:6789/images/CentOS-7-x86_64-GenericCloud-1901
>>>>
>>>> Does not work citing the following:
>>> The important lines are these.  Firstly guestfish parses the URL into
>>> an actual libguestfs API call, which looks fine to me:
>>>
>>>> libguestfs: trace: add_drive
>>>> "images/CentOS-7-x86_64-GenericCloud-1901" "readonly:true"
>>>> "format:raw" "protocol:rbd" "server:tcp:[fd00::cefc:1]:6789"
>>> This is probably where it goes wrong:
>>>
>>>> "/tmp/libguestfs3pGMi6/overlay1.qcow2" "qcow2" -1 "backingfile:rbd:images/CentOS-7-x86_64-GenericCloud-1901:mon_host=[fd00::cefc:1]\:6789:auth_supported=none"
>>>> "backingformat:raw"
>>>> libguestfs: command: run: \ -o backing_file=rbd:images/CentOS-7-x86_64-GenericCloud-1901:mon_host=[fd00::cefc:1]\:6789:auth_supported=none,backing_fmt=raw
>>>> libguestfs: command: run: \ /tmp/libguestfs3pGMi6/overlay1.qcow2
>>>> qemu-img: /tmp/libguestfs3pGMi6/overlay1.qcow2: invalid conf option
>>>> :cefc:1]:6789:auth_supported: No such file or directory
>>>> Could not open backing image to determine size.
>>> The code in libguestfs is supposed to turn the guestfs_add_drive
>>> ‘servers’ parameter into a Ceph URL for qemu:
>>>
>>>    https://github.com/libguestfs/libguestfs/blob/f79129b8dc92470e3a5597daf53c84038bd6859e/lib/qemu.c#L905
>>>
>>> and I suppose this is being done wrong somehow (I don't have a Ceph
>>> server to test).
>>>
>>> At a guess I would say that it seems as if ':' characters must be
>>> quoted somehow (backslash?) because they are also used to separate the
>>> address and port number.
>>>
>>> Rich.
>>>
>> -- 
>> Jonathan Wright
>> KnownHost, LLC
>> https://www.knownhost.com

-- 
Jonathan Wright
KnownHost, LLC
https://www.knownhost.com




More information about the Libguestfs mailing list