[PATCH v4 00/24] qemu patches for 64-bit NBD extensions
by Eric Blake
v3 was here:
https://lists.gnu.org/archive/html/qemu-devel/2023-05/msg03607.html
Since then, I've incorporated lots of feedback from Vladimir:
- split several patches into smaller pieces
- use an enum to track various negotiation modes
- reorder a few patches
- several new patches (2, 5, 6)
- other cleanups
001/24:[----] [--] 'nbd/client: Use smarter assert'
002/24:[down] 'nbd: Consistent typedef usage in header'
003/24:[0137] [FC] 'nbd/server: Prepare for alternate-size headers'
004/24:[0093] [FC] 'nbd/server: Refactor to pass full request around'
005/24:[down] 'nbd: s/handle/cookie/ to match NBD spec'
006/24:[down] 'nbd/client: Simplify cookie vs. index computation'
007/24:[----] [-C] 'nbd/client: Add safety check on chunk payload length'
008/24:[down] 'nbd: Use enum for various negotiation modes'
009/24:[down] 'nbd: Replace bool structured_reply with mode enum'
010/24:[down] 'nbd/client: Pass mode through to nbd_send_request'
011/24:[0096] [FC] 'nbd: Add types for extended headers'
012/24:[0118] [FC] 'nbd: Prepare for 64-bit request effect lengths'
013/24:[0071] [FC] 'nbd/server: Refactor handling of request payload'
014/24:[down] 'nbd/server: Prepare to receive extended header requests'
015/24:[down] 'nbd/server: Prepare to send extended header replies'
016/24:[0132] [FC] 'nbd/server: Support 64-bit block status'
017/24:[down] 'nbd/server: Enable initial support for extended headers'
018/24:[down] 'nbd/client: Plumb errp through nbd_receive_replies'
019/24:[0066] [FC] 'nbd/client: Initial support for extended headers'
020/24:[0032] [FC] 'nbd/client: Accept 64-bit block status chunks'
021/24:[0058] [FC] 'nbd/client: Request extended headers during negotiation'
022/24:[down] 'nbd/server: Refactor list of negotiated meta contexts'
023/24:[0132] [FC] 'nbd/server: Prepare for per-request filtering of BLOCK_STATUS'
024/24:[0109] [FC] 'nbd/server: Add FLAG_PAYLOAD support to CMD_BLOCK_STATUS'
Eric Blake (24):
nbd/client: Use smarter assert
nbd: Consistent typedef usage in header
nbd/server: Prepare for alternate-size headers
nbd/server: Refactor to pass full request around
nbd: s/handle/cookie/ to match NBD spec
nbd/client: Simplify cookie vs. index computation
nbd/client: Add safety check on chunk payload length
nbd: Use enum for various negotiation modes
nbd: Replace bool structured_reply with mode enum
nbd/client: Pass mode through to nbd_send_request
nbd: Add types for extended headers
nbd: Prepare for 64-bit request effect lengths
nbd/server: Refactor handling of request payload
nbd/server: Prepare to receive extended header requests
nbd/server: Prepare to send extended header replies
nbd/server: Support 64-bit block status
nbd/server: Enable initial support for extended headers
nbd/client: Plumb errp through nbd_receive_replies
nbd/client: Initial support for extended headers
nbd/client: Accept 64-bit block status chunks
nbd/client: Request extended headers during negotiation
nbd/server: Refactor list of negotiated meta contexts
nbd/server: Prepare for per-request filtering of BLOCK_STATUS
nbd/server: Add FLAG_PAYLOAD support to CMD_BLOCK_STATUS
docs/interop/nbd.txt | 1 +
include/block/nbd.h | 201 ++++--
nbd/nbd-internal.h | 8 +-
block/nbd.c | 189 +++--
nbd/client-connection.c | 4 +-
nbd/client.c | 199 ++++--
nbd/common.c | 29 +-
nbd/server.c | 666 ++++++++++++------
qemu-nbd.c | 8 +-
block/trace-events | 1 +
nbd/trace-events | 29 +-
tests/qemu-iotests/223.out | 18 +-
tests/qemu-iotests/233.out | 4 +
tests/qemu-iotests/241.out | 3 +
tests/qemu-iotests/307.out | 15 +-
.../tests/nbd-qemu-allocation.out | 3 +-
16 files changed, 937 insertions(+), 441 deletions(-)
base-commit: 4f65e89f8cf0e079b4ec3ddfede314bbb4e35c76
--
2.40.1
1 year, 4 months
[libnbd PATCH v3 00/22] NBD 64-bit extensions (libnbd portion)
by Eric Blake
v2 was here:
https://listman.redhat.com/archives/libguestfs/2022-November/030292.html
For v3, there are now approved specs to code to:
https://listman.redhat.com/archives/libguestfs/2023-April/031251.html
visible on an upstream branch at
https://github.com/NetworkBlockDevice/nbd/blob/extension-ext-header/doc/p...
(upstream leaves extensions in a branch state until there are multiple
implementations that comply with that extension)
as well as interoperability with counterpart qemu patches:
https://lists.gnu.org/archive/html/qemu-devel/2023-05/msg03607.html
also available at
https://repo.or.cz/qemu/ericb.git/shortlog/refs/tags/exthdr-v3
I'm still working on adding extended header support into nbdkit, which
will involve adding a v3 protocol for plugins; that work is probably
much further out.
Changes since v2:
001/22:[0002] [FC] 'block_status: Refactor array storage'
002/22:[0016] [FC] 'internal: Refactor layout of replies in sbuf'
003/22:[0002] [FC] 'protocol: Add definitions for extended headers'
004/22:[0006] [FC] 'states: Prepare to send 64-bit requests'
005/22:[0013] [FC] 'states: Prepare to receive 64-bit replies'
006/22:[0007] [FC] 'states: Break deadlock if server goofs on extended replies'
007/22:[0021] [FC] 'generator: Add struct nbd_extent in prep for 64-bit extents'
008/22:[----] [-C] 'block_status: Track 64-bit extents internally'
009/22:[0012] [FC] 'block_status: Accept 64-bit extents during block status'
010/22:[0063] [FC] 'api: Add [aio_]nbd_block_status_64'
011/22:[0006] [FC] 'api: Add several functions for controlling extended headers'
012/22:[----] [--] 'copy: Update nbdcopy to use 64-bit block status'
013/22:[0004] [FC] 'dump: Update nbddump to use 64-bit block status'
014/22:[----] [--] 'info: Expose extended-headers support through nbdinfo'
015/22:[0006] [FC] 'info: Update nbdinfo --map to use 64-bit block status'
016/22:[----] [-C] 'examples: Update copy-libev to use 64-bit block status'
017/22:[0002] [FC] 'ocaml: Add example for 64-bit extents'
018/22:[0004] [FC] 'generator: Actually request extended headers'
019/22:[0008] [FC] 'api: Add nbd_[aio_]opt_extended_headers()'
020/22:[0004] [FC] 'interop: Add test of 64-bit block status'
021/22:[0011] [FC] 'api: Add nbd_can_block_status_payload()'
022/22:[0004] [FC] 'api: Add nbd_[aio_]block_status_filter()'
The changes are mostly fallout from rebasing on top of style cleanups
that Laszlo has been working on, but also deal with some changes with
the spec compared to how it was proposed in v2 (for example, upstream
decided that for NBD_CMD_BLOCK_STATUS, the server should always use
64-bit replies, rather than making the client support both 32- and
64-bit replies).
Eric Blake (22):
block_status: Refactor array storage
internal: Refactor layout of replies in sbuf
protocol: Add definitions for extended headers
states: Prepare to send 64-bit requests
states: Prepare to receive 64-bit replies
states: Break deadlock if server goofs on extended replies
generator: Add struct nbd_extent in prep for 64-bit extents
block_status: Track 64-bit extents internally
block_status: Accept 64-bit extents during block status
api: Add [aio_]nbd_block_status_64
api: Add several functions for controlling extended headers
copy: Update nbdcopy to use 64-bit block status
dump: Update nbddump to use 64-bit block status
info: Expose extended-headers support through nbdinfo
info: Update nbdinfo --map to use 64-bit block status
examples: Update copy-libev to use 64-bit block status
ocaml: Add example for 64-bit extents
generator: Actually request extended headers
api: Add nbd_[aio_]opt_extended_headers()
interop: Add test of 64-bit block status
api: Add nbd_can_block_status_payload()
api: Add nbd_[aio_]block_status_filter()
docs/libnbd.pod | 18 +-
info/nbdinfo.pod | 21 +-
sh/nbdsh.pod | 2 +-
lib/internal.h | 41 +-
lib/nbd-protocol.h | 112 +++-
generator/API.mli | 1 +
generator/API.ml | 534 +++++++++++++++---
generator/C.ml | 24 +-
generator/GoLang.ml | 24 +
generator/Makefile.am | 1 +
generator/OCaml.ml | 23 +-
generator/Python.ml | 20 +-
generator/state_machine.ml | 50 +-
generator/states-issue-command.c | 33 +-
.../states-newstyle-opt-extended-headers.c | 110 ++++
generator/states-newstyle-opt-starttls.c | 7 +-
.../states-newstyle-opt-structured-reply.c | 3 +-
generator/states-newstyle.c | 3 +
generator/states-reply-simple.c | 4 +-
generator/states-reply-structured.c | 253 ++++++---
generator/states-reply.c | 69 ++-
lib/aio.c | 7 +-
lib/flags.c | 12 +
lib/handle.c | 25 +-
lib/opt.c | 44 ++
lib/rw.c | 250 +++++++-
python/t/110-defaults.py | 1 +
python/t/120-set-non-defaults.py | 2 +
python/t/465-block-status-64.py | 56 ++
ocaml/examples/Makefile.am | 1 +
ocaml/examples/extents64.ml | 42 ++
ocaml/helpers.c | 20 +
ocaml/nbd-c.h | 1 +
ocaml/tests/Makefile.am | 1 +
ocaml/tests/test_110_defaults.ml | 2 +
ocaml/tests/test_120_set_non_defaults.ml | 3 +
ocaml/tests/test_465_block_status_64.ml | 58 ++
tests/Makefile.am | 4 +
tests/meta-base-allocation.c | 104 +++-
tests/pwrite-extended.c | 112 ++++
examples/copy-libev.c | 21 +-
examples/server-flags.c | 7 +-
interop/Makefile.am | 18 +
interop/block-status-payload.c | 241 ++++++++
interop/block-status-payload.sh | 80 +++
interop/large-status.c | 186 ++++++
interop/large-status.sh | 49 ++
interop/opt-extended-headers.c | 153 +++++
interop/opt-extended-headers.sh | 29 +
.gitignore | 4 +
copy/nbd-ops.c | 22 +-
dump/dump.c | 27 +-
fuzzing/libnbd-fuzz-wrapper.c | 20 +-
golang/Makefile.am | 1 +
golang/handle.go | 6 +
golang/libnbd_110_defaults_test.go | 8 +
golang/libnbd_120_set_non_defaults_test.go | 12 +
golang/libnbd_465_block_status_64_test.go | 119 ++++
info/can.c | 14 +
info/info-can.sh | 30 +
info/info-packets.sh | 17 +-
info/main.c | 7 +-
info/map.c | 65 ++-
info/show.c | 9 +-
64 files changed, 2892 insertions(+), 351 deletions(-)
create mode 100644 generator/states-newstyle-opt-extended-headers.c
create mode 100644 python/t/465-block-status-64.py
create mode 100644 ocaml/examples/extents64.ml
create mode 100644 ocaml/tests/test_465_block_status_64.ml
create mode 100644 tests/pwrite-extended.c
create mode 100644 interop/block-status-payload.c
create mode 100755 interop/block-status-payload.sh
create mode 100644 interop/large-status.c
create mode 100755 interop/large-status.sh
create mode 100644 interop/opt-extended-headers.c
create mode 100755 interop/opt-extended-headers.sh
create mode 100644 golang/libnbd_465_block_status_64_test.go
base-commit: 17d0bc6a71bbc67f3d7707d129bec4acf7e7a382
--
2.40.1
1 year, 4 months
[PATCH] Add partprobe call in the API
by Philippe Midol-Monnet
Hello
We are using libguestfs with nested partitions: One partition encrypted
with LUKS include a GPT and several partition.
In order to make the nested partition available to the system after the
cryptsetup-open, partprobe need to be run.
I guess it is true for all kind of nested partitions (encrypted or not).
This patch add a partprobe call in the API.
Regards
Philippe
--
*This email and any attachment contains EasyMile’s confidential
information, and must not be modified or circulated without EasyMile’s
prior written consent. It is intended exclusively for their recipient.s. If
you received this message by mistake, please notify us promptly and
immediately delete this email and any of its attachments.*
*As data
controller, EasyMile processes personal data, in compliance with the
European GDPR (EU) 2016/679 of 27 April 2016. To exercise your rights, you
can contact EasyMile at privacy(a)easymile.com, and if necessary, you may
contact the local competent supervisory authority.”*
*Cet e-mail et toute
pièce jointe contiennent des informations confidentielles d'EasyMile et ne
doivent pas être modifiés ou diffusés sans le consentement écrit préalable
d'EasyMile. Ils sont destinés exclusivement à leur destinataire.s. Si vous
avez reçu ce message par erreur, veuillez nous en informer rapidement et
supprimer immédiatement cet e-mail et toutes ses pièces jointes. *
*En
tant que responsable de traitement, EasyMile traite des données
personnelles, conformément au RGPD européen (UE) 2016/679 du 27 avril 2016.
Pour exercer vos droits, vous pouvez contacter EasyMile à
privacy(a)easymile.com <mailto:privacy@easymile.com>, et si nécessaire, vous
pouvez contacter l'autorité de contrôle locale compétente.*
1 year, 5 months
Rust Bindings for Libnbd
by Tage Johansson
This is Tage. I am a Google Summer of Code contributer this summer
working on Rust bindings for Libnbd. So far, I have made a very basic
first draft which is far from complete. But I'll send the patches anyway
so you can take a look.
I have created "generator/Rust.ml" which generates Rust code for
constants, flags, enums and handle calls. The top level "rust/"
directory contains the actual Rust crate. The make script generates
documentation with Rustdoc which can be found in
"rust/target/doc/libnbd/index.html".
To generate low level bindings,
[rust-bindgen](https://github.com/rust-lang/rust-bindgen) is used. This
means that Clang is required to build the bindings. I plan on removing
this dependency in the future though.
Feel free to send any comments and ideas, butI emphasize again that this
is just a first draft, and there is much more work to do.
Best regards,
Tage
1 year, 5 months
[libnbd PATCH v4 0/4] Saner reply header layout
by Eric Blake
This was v3 patch 2/22, reworked to address the confusion about how a
structured reply header is read in two pieces before getting to the
payload portion.
I'm still working on rebasing the rest of my v3 series (patches 1,
3-22) from other comments given, but this seemed independent enough
that it's worth posting now rather than holding it up for the rest of
the series.
Eric Blake (4):
states: Document our reliance on type overlaps
generator: Finish parsing structured header in states-reply.c
generator: Rename states-reply-structured to states-reply-chunk
internal: Refactor layout of replies in sbuf
lib/internal.h | 16 ++-
generator/state_machine.ml | 53 ++++---
generator/states-reply.c | 65 +++++++--
...eply-structured.c => states-reply-chunk.c} | 129 ++++++++----------
generator/states-reply-simple.c | 4 +-
generator/Makefile.am | 2 +-
6 files changed, 143 insertions(+), 126 deletions(-)
rename generator/{states-reply-structured.c => states-reply-chunk.c} (78%)
--
2.40.1
1 year, 5 months
[PATCH guestfs-tools] customize: Implement --chown option
by Richard W.M. Jones
This currently only works with numeric UID.GID. In theory in future
we could look up IDs from the guest password file (eg. using Augeas)
and do the right thing, but that's a bunch more work.
For example:
$ ./builder/virt-builder fedora-36 --chown 1.1:/var/tmp
[ 1.0] Downloading: http://builder.libguestfs.org/fedora-36.xz
[ 1.5] Planning how to build this image
[ 1.5] Uncompressing
[ 3.4] Opening the new disk
[ 7.3] Setting a random seed
[ 7.3] Changing owner of /var/tmp to 1.1
[ 7.3] Setting passwords
virt-builder: Setting random password of root to x8fu6z7QNEdPeZHF
[ 7.8] SELinux relabelling
[ 12.0] Finishing off
Output file: fedora-36.img
Output size: 6.0G
Output format: raw
Total usable space: 6.0G
Free space: 4.7G (79%)
$ guestfish -a fedora-36.img -i ll /var
total 8
drwxr-xr-x. 18 root root 4096 May 12 2022 .
dr-xr-xr-x. 18 root root 235 May 12 2022 ..
drwxr-xr-x. 2 root root 6 Jan 20 2022 adm
drwxr-xr-x. 9 root root 101 May 12 2022 cache
drwxr-xr-x. 3 root root 18 May 12 2022 db
drwxr-xr-x. 2 root root 6 Jan 20 2022 empty
drwxr-xr-x. 2 root root 6 Jan 20 2022 ftp
drwxr-xr-x. 2 root root 6 Jan 20 2022 games
drwxr-xr-x. 3 root root 18 Apr 5 2022 kerberos
drwxr-xr-x. 24 root root 4096 May 12 2022 lib
drwxr-xr-x. 2 root root 6 Jan 20 2022 local
lrwxrwxrwx. 1 root root 11 May 12 2022 lock -> ../run/lock
drwxr-xr-x. 8 root root 105 May 12 2022 log
lrwxrwxrwx. 1 root root 10 Jan 20 2022 mail -> spool/mail
drwxr-xr-x. 2 root root 6 Jan 20 2022 nis
drwxr-xr-x. 2 root root 6 Jan 20 2022 opt
drwxr-xr-x. 2 root root 6 Jan 20 2022 preserve
lrwxrwxrwx. 1 root root 6 May 12 2022 run -> ../run
drwxr-xr-x. 5 root root 45 May 12 2022 spool
drwxrwxrwt. 2 bin bin 6 May 12 2022 tmp
drwxr-xr-x. 2 root root 6 Jan 20 2022 yp
Fixes: https://github.com/rwmjones/guestfs-tools/issues/12
---
common | 2 +-
customize/customize_run.ml | 11 +++++++++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/common b/common
index 420892e660..bbb54714ce 160000
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit 420892e660726c7184c000b9b86b11f491a5a126
+Subproject commit bbb54714ce24c76e5761d96a0227a753896dc4c4
diff --git a/customize/customize_run.ml b/customize/customize_run.ml
index f03774e003..409b46edc6 100644
--- a/customize/customize_run.ml
+++ b/customize/customize_run.ml
@@ -153,6 +153,17 @@ let run (g : G.guestfs) root (ops : ops) =
let mode = if String.is_prefix mode "0" then "0o" ^ mode else mode in
g#chmod (int_of_string mode) path
+ | `Chown (uid_gid, path) ->
+ let uid, gid = String.split "." uid_gid in
+ let uid, gid =
+ try int_of_string uid, int_of_string gid
+ with Failure _ ->
+ error (f_"--chown: could not parse numeric UID.GID from \
+ %s") uid_gid in
+
+ message (f_"Changing owner of %s to %d.%d") path uid gid;
+ g#chown uid gid path
+
| `Command cmd ->
message (f_"Running: %s") cmd;
do_run ~display:cmd cmd
--
2.41.0
1 year, 5 months
[PATCH libguestfs] generator: Add --chown option for virt-customize
by Richard W.M. Jones
Also this updates the common submodule to include the changes.
Fixes: https://github.com/rwmjones/guestfs-tools/issues/12
---
common | 2 +-
generator/customize.ml | 28 ++++++++++++++++++++++++++++
2 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/common b/common
index d61cd820b4..bbb54714ce 160000
--- a/common
+++ b/common
@@ -1 +1 @@
-Subproject commit d61cd820b49e403848d15c5deaccbf8dd7045370
+Subproject commit bbb54714ce24c76e5761d96a0227a753896dc4c4
diff --git a/generator/customize.ml b/generator/customize.ml
index aa7ac8e8af..8d3dec3e24 100644
--- a/generator/customize.ml
+++ b/generator/customize.ml
@@ -95,6 +95,34 @@ I<Note>: C<PERMISSIONS> by default would be decimal, unless you prefix
it with C<0> to get octal, ie. use C<0700> not C<700>.";
};
+ { op_name = "chown";
+ op_type = StringPair "UID.GID:PATH";
+ op_discrim = "`Chown";
+ op_shortdesc = "Change the owner user and group ID of a file or directory";
+ op_pod_longdesc = "\
+Change the owner user and group ID of a file or directory in the guest.
+Note:
+
+=over 4
+
+=item *
+
+Only numeric UIDs and GIDs will work, and these may not be the same
+inside the guest as on the host.
+
+=item *
+
+This will not work with Windows guests.
+
+=back
+
+For example:
+
+ virt-customize --chown '0.0:/var/log/audit.log'
+
+See also: I<--upload>.";
+ };
+
{ op_name = "commands-from-file";
op_type = StringFn ("FILENAME", "customize_read_from_file");
op_discrim = "`CommandsFromFile";
--
2.41.0
1 year, 5 months
[v2v PATCH] docs/virt-v2v: document libvirt system instance startup
by Laszlo Ersek
It has frequently tripped us up that on RHEL / Fedora, installing the
right set of libvirt RPMs (such as the one pulled in by
"libvirt-daemon-kvm") does not result in an immediately running libvirt
system instance. Document the need, and the simplest method, for starting
libvirt up manually.
Thanks: Daniel Berrangé
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2182024
Signed-off-by: Laszlo Ersek <lersek(a)redhat.com>
---
Notes:
context:-U12
docs/virt-v2v.pod | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/docs/virt-v2v.pod b/docs/virt-v2v.pod
index 4d2f241ad723..2bd0b4425d80 100644
--- a/docs/virt-v2v.pod
+++ b/docs/virt-v2v.pod
@@ -250,24 +250,26 @@ metadata. virt-v2v tries to guess the best default metadata. This is
usually adequate but you can get finer control (eg. of memory and
vCPUs) by using I<-i libvirtxml> instead. Only guests that use a single
disk can be imported this way.
=item B<-i> B<libvirt>
Set the input method to I<libvirt>. This is the default.
In this mode you have to specify a libvirt guest name or UUID on the
command line. You may also specify a libvirt connection URI (see
I<-ic>).
+See L</Starting the libvirt system instance> in addition.
+
=item B<-i> B<libvirtxml>
Set the input method to I<libvirtxml>.
In this mode you have to pass a libvirt XML file on the command line.
This file is read in order to get metadata about the source guest
(such as its name, amount of memory), and also to locate the input
disks. See L</Minimal XML for -i libvirtxml option> below.
=item B<-i> B<local>
This is the same as I<-i disk>.
@@ -461,25 +463,26 @@ and guest metadata is created in the associated YAML file:
/dir/name.yaml
where C<name> is the guest name.
=item B<-o> B<libvirt>
Set the output method to I<libvirt>. This is the default.
In this mode, the converted guest is created as a libvirt guest. You
may also specify a libvirt connection URI (see I<-oc>).
-See L<virt-v2v-output-local(1)>.
+See L</Starting the libvirt system instance> and
+L<virt-v2v-output-local(1)> in addition.
=item B<-o> B<local>
Set the output method to I<local>.
In this mode, the converted guest is written to a local directory
specified by I<-os /dir> (the directory must exist). The converted
guest’s disks are written as:
/dir/name-sda
/dir/name-sdb
[etc]
@@ -1373,24 +1376,26 @@ manually change ownership after virt-v2v has finished.
=item Writing to libvirt
When using I<-o libvirt>, you may need to run virt-v2v as root so that
it can write to the libvirt system instance (ie. C<qemu:///system>)
and to the default location for disk images (usually
F</var/lib/libvirt/images>).
You can avoid this by setting up libvirt connection authentication,
see L<http://libvirt.org/auth.html>. Alternatively, use
I<-oc qemu:///session>, which will write to your per-user libvirt
instance.
+See also L</Starting the libvirt system instance>.
+
=item Writing to Openstack
Because of how Cinder volumes are presented as F</dev> block devices,
using I<-o openstack> normally requires that virt-v2v is run as root.
=item Writing to Glance
This does I<not> need root (in fact it probably won’t work), but may
require either a special user and/or for you to source a script that
sets authentication environment variables. Consult the Glance
documentation.
@@ -1521,24 +1526,37 @@ displayed to the user.
The calling program should treat messages sent to stderr as error
messages. In addition, virt-v2v exits with a non-zero status
code if there was a fatal error.
=back
Virt-v2v E<le> 0.9.1 did not support the I<--machine-readable>
option at all. The option was added when virt-v2v was rewritten in 2014.
It is possible to specify a format string for controlling the output;
see L<guestfs(3)/ADVANCED MACHINE READABLE OUTPUT>.
+=head2 Starting the libvirt system instance
+
+If you have just installed the libvirt distribution packages, then
+dependent on your distribution and its vendor presets, the modular
+libvirt daemons providing the various services of the libvirt system
+instance may not be running yet. Therefore, if you intend to connect to
+the libvirt system instance with virt-v2v (see S<I<-i libvirt>> /
+I<-ic>, and/or S<I<-o libvirt>> / I<-oc>), first verify that the libvirt
+services are running, before invoking virt-v2v. For example, on Fedora
+and RHEL, you may have to start the related services individually with
+C<systemctl>, or (recommended) start them all with S<C<systemctl isolate
+multi-user.target>>. See L<https://bugzilla.redhat.com/2182024>.
+
=head1 FILES
=over 4
=item F</usr/share/virtio-win>
(Optional)
If this directory is present, then virtio drivers for Windows guests
will be found from this directory and installed in the guest during
conversion.
base-commit: 4f47d6431cab97c09bd42279e29c378e6e65fc03
1 year, 5 months