[Libguestfs] [v2v PATCH 4/4] convert_linux: install the QEMU guest agent with a firstboot script

Laszlo Ersek lersek at redhat.com
Thu Jun 9 13:10:28 UTC 2022


On 06/07/22 14:59, Richard W.M. Jones wrote:

> virt-p2v uses:
> 
>   nm-online -t 30
> 
> Apparently systemd-networkd (which I've never knowingly used) has
> another command:
> 
>   /usr/lib/systemd/systemd-networkd-wait-online
> 
> which ought to do the same thing.  (It defaults to 120 second timeout.)
> Can we not do something like:
> 
>   nm-online -t 30 ||:
>   /usr/lib/systemd/systemd-networkd-wait-online ||:
> 
> as a best effort?  Seems a lot better idea than sleeping.

After some investigation:

- NetworkManager and systemd-networkd-wait-online seem mutually
exclusive, and switching from the former to the latter (which is
obviously only possible on a systemd-based system) takes (mostly) one
"systemctl disable" and another "systemctl enable" command:

https://fedoraproject.org/wiki/Cloud/Network-Requirements#Switching_from_NetworkManager_to_systemd-networkd

- When one of { NetworkManager, systemd-networkd-wait-online } is
*disabled* (not running), and we invoke the "wait online" utility for
that (disabled) service, the utility will wait (uselessly) for the
timeout, and then report failure / timeout. I've tested this with
"systemd-networkd-wait-online" on my F35 workstation (where
NetworkManager is enabled -- the default), and with "nm-online" in a
RHEL9 guest, where I could disable NetworkManager without risks.

- This useless waiting (for NetworkManager that's not running) can be
disabled with the "-x" switch for nm-online, but I found no
corresponding switch for "systemd-networkd-wait-online". What works is
"systemctl is-active systemd-networkd", which is reasonable, because
"systemd-networkd" already depends on systemd.

Additionally the default timeout for nm-online seems to be 30 seconds
already.

So ultimately I believe we should do:

nm-online -x -q ||
(
  systemctl -q is-active systemd-networkd &&
  /usr/lib/systemd/systemd-networkd-wait-online -q --timeout=30
)

If the final exit status is nonzero, I think that's not a problem for
the firstboot script.

The whole command seems to make sense also when nm-online, systemctl, or
both, are missing (a missing command results in exit status 127).

Thanks
Laszlo


More information about the Libguestfs mailing list