Apologies for the late response:

Yes, we have a Ubuntu 22.04 LTS image that we use across a set of
machines, some of which have multiple Ethernet ports, but for which we
only connect a single port.  For this image we use the following Netplan
configuration (/etc/netplan/ethernet.yaml):

network:
  ethernets:
    en:
      match:
        name: en*
      dhcp4: true
  version: 2

Which places _all_ Ethernet interfaces under systemd-networkd
management, allowing us to bring up at least one interface via DHCP
without needing to know the exact interface name (which depends on the
exact hardware) and enables us to use any of the available Ethernet
ports on the machine.

As part of this image we also have a boot-time systemd service that
requires functional network connectivity in order to successfully start.
The unit file for this service depends on the network-online target
("Wants=network-online.target").  For example purposes you could replace
this service with a remote NFS mount specified in /etc/fstab, since
boot-time NFS mounts implicitly depend on the network-online target as
well.

The default behavior of systemd-networkd-wait-online is to wait until
all networkd-managed interfaces are routable before the network-online
target is started, but since we only ever connect a single Ethernet
interface to the network, we override its behavior here in our image
(/etc/systemd/system/systemd-networkd-wait-online.service.d/any.conf):

[Service]
ExecStart=
ExecStart=/usr/local/lib/systemd-networkd-wait-online --any --timeout=0

Now, the problem introduced by the UBUNTU-wait-online-exit-if-no-links-
are-managed patch is that it places us in a race against our DHCP
server.  During a successful boot, where networkd is able to obtain an
address via DHCP _before_ the wait-online service is reached, networkctl
reports this status:

$ sudo networkctl
IDX LINK   TYPE     OPERATIONAL SETUP      
  1 lo     loopback carrier     unmanaged
  2 enp0s1 ether    routable    configured 
  3 enp0s2 ether    no-carrier  configuring

Since the second interface (enp0s1) is in the configured state and is
routable, systemd-networkd-wait-online behaves correctly by exiting
immediately.  However, during an unsuccessful boot, where networkd has
yet to obtain an address via DHCP at the time the wait-online service is
reached, networkctl reports this status:

$ sudo networkctl
IDX LINK   TYPE     OPERATIONAL SETUP      
  1 lo     loopback carrier     unmanaged
  2 enp0s1 ether    degraded    configuring
  3 enp0s2 ether    no-carrier  configuring

Here, both of the managed Ethernet interfaces are still in the
configuring state.  Since UBUNTU-wait-online-exit-if-no-links-are-
managed doesn't check if managed interfaces are in this state, only
configured, it assumes those links are unmanaged and systemd-networkd-
wait-online also exits immediately.  This results in failure of our
network-dependent service to start (or equivalently, failure of the
remote NFS volume to mount).

With the provided patch, systemd-networkd-wait-online identifies two
managed interfaces in the configuring state and waits until at least one
of them becomes routable, and thus waits until the network is functional
before continuing to boot.

I hope this example better illustrates the issue.  Thanks!

** Changed in: systemd (Ubuntu)
       Status: Expired => New

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to systemd in Ubuntu.
https://bugs.launchpad.net/bugs/1982218

Title:
  wait-online does not correctly identify managed links

Status in systemd package in Ubuntu:
  New

Bug description:
  Ubuntu's packaging of systemd-networkd-wait-online includes a patch
  (UBUNTU-wait-online-exit-if-no-links-are-managed) intended to exit if
  none of the present links are managed by systemd-networkd.  However,
  the patch fails to identify links in the "configuring" state, which
  implies they are managed, but not yet fully online.  This undermines
  the purpose of systemd-networkd-wait-online with the --any option,
  since at the time the systemd-networkd-wait-online service is started,
  managed links are _likely_ in a configuring, but-not-yet-configured
  state.

  Please see the attached patch.  Thanks!

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1982218/+subscriptions


-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to