From 49bb117ea4fcd79b022efdb5f69cfa767ee3ea98 Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Tue, 13 Mar 2018 17:07:27 +0100 Subject: [PATCH] misc_systemd_units: Add udev-settled.target After the upgrade of systemd from version 27 to version 238, we had the problem, that `mxnetctl start` from network.service ("Network Connectivity") was run before all network interfaces were available and thus didn't rename them. network.service is configured with `DefaultDependencies=no` to prevent problems with nfs umounts during shutdown. But even when network.services was returned to `DefaultDependencies=yes` and waited for basic.target ("Basic System") the problem persisted: root@nsa:/etc/systemd/system (master)# journalctl --system --boot=-0|egrep 'mxnetctl|Gigabit|renamed|Basic System|Network Connectivity' Mar 14 08:36:19 nsa.molgen.mpg.de kernel: bnx2x: QLogic 5771x/578xx 10/20-Gigabit Ethernet Driver bnx2x 1.712.30-0 (2014/02/10) Mar 14 08:36:19 nsa.molgen.mpg.de kernel: igb: Intel(R) Gigabit Ethernet Network Driver - version 5.4.0-k Mar 14 08:36:19 nsa.molgen.mpg.de kernel: igb 0000:05:00.0: Intel(R) Gigabit Ethernet Network Connection Mar 14 08:36:19 nsa.molgen.mpg.de kernel: igb 0000:06:00.0: Intel(R) Gigabit Ethernet Network Connection Mar 14 08:36:19 nsa.molgen.mpg.de kernel: igbvf: Intel(R) Gigabit Virtual Function Network Driver - version 2.4.0-k Mar 14 08:36:19 nsa.molgen.mpg.de kernel: ixgbe: Intel(R) 10 Gigabit PCI Express Network Driver - version 5.1.0-k Mar 14 08:36:19 nsa.molgen.mpg.de kernel: ixgbe 0000:02:00.0: Intel(R) 10 Gigabit Network Connection Mar 14 08:36:19 nsa.molgen.mpg.de systemd[1]: Reached target Basic System. Mar 14 08:36:19 nsa.molgen.mpg.de systemd[1]: Starting Network Connectivity... Mar 14 08:36:20 nsa.molgen.mpg.de kernel: ixgbe 0000:02:00.1: Intel(R) 10 Gigabit Network Connection Mar 14 08:36:20 nsa.molgen.mpg.de mxnetctl[412]: rename eth0 to net00 Mar 14 08:36:20 nsa.molgen.mpg.de kernel: igb 0000:05:00.0 net00: renamed from eth0 Mar 14 08:36:20 nsa.molgen.mpg.de mxnetctl[412]: rename eth1 to net01 Mar 14 08:36:20 nsa.molgen.mpg.de kernel: igb 0000:06:00.0 net01: renamed from eth1 Mar 14 08:36:20 nsa.molgen.mpg.de mxnetctl[412]: rename eth2 to net02 Mar 14 08:36:20 nsa.molgen.mpg.de kernel: ixgbe 0000:02:00.0 net02: renamed from eth2 Mar 14 08:36:20 nsa.molgen.mpg.de mxnetctl[412]: rename eth3 to net03 Mar 14 08:36:20 nsa.molgen.mpg.de kernel: ixgbe 0000:02:00.1 net03: renamed from eth3 Mar 14 08:36:20 nsa.molgen.mpg.de systemd[1]: Started Network Connectivity. Mar 14 08:36:20 nsa.molgen.mpg.de kernel: ixgbe 0000:03:00.0: Intel(R) 10 Gigabit Network Connection Mar 14 08:36:20 nsa.molgen.mpg.de kernel: ixgbe 0000:03:00.1: Intel(R) 10 Gigabit Network Connection Mar 14 08:36:20 nsa.molgen.mpg.de kernel: ixgbe 0000:81:00.0: Intel(R) 10 Gigabit Network Connection Mar 14 08:36:20 nsa.molgen.mpg.de kernel: ixgbe 0000:81:00.1: Intel(R) 10 Gigabit Network Connection Mar 14 08:36:20 nsa.molgen.mpg.de kernel: ixgbe 0000:84:00.0: Intel(R) 10 Gigabit Network Connection Mar 14 08:36:21 nsa.molgen.mpg.de kernel: ixgbe 0000:84:00.1: Intel(R) 10 Gigabit Network Connection Similar problems are possible with other startup services (e.g. mxmount) as they are expecting the local devices to be available. So we want to start and wait for systemd-udev-settle.service ("udev Wait for Complete Device Initialization") before our services. We do this by adding our own target with `Before=basic.target` and `After=systemd-udev-settle.service`. The normal services will wait for basic.target per default. Because network.service has `DefaultDependencies=no`, we add the order dependency explicitly. Because the unit file of network.service is system specific and not distributed by the distmaster, we add this order dependency in the unit file of the new target. Add new target unit udev-settled.target. --- install.sh | 1 + misc_systemd_units/udev-settled.target | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 misc_systemd_units/udev-settled.target diff --git a/install.sh b/install.sh index dc9fb73..f5596ed 100755 --- a/install.sh +++ b/install.sh @@ -107,5 +107,6 @@ install_data mxraid/mxraid.startup.service "$DESTDIR$systemdunitdir/mxrai install_data mxraid/mxraid.shutdown.service "$DESTDIR$systemdunitdir/mxraid.shutdown.service" install_exec kvm_monitor/kvm_monitor.pl "$DESTDIR$udev_helperdir/kvm_monitor.pl" install_data kvm_monitor/51-raritan-kvm.rules "$DESTDIR$udev_rulesdir/51-raritan-kvm.rules" +install_data misc_systemd_units/udev-settled.target "$DESTDIR$systemdunitdir/udev-settled.target" exit diff --git a/misc_systemd_units/udev-settled.target b/misc_systemd_units/udev-settled.target new file mode 100644 index 0000000..1f0ce5d --- /dev/null +++ b/misc_systemd_units/udev-settled.target @@ -0,0 +1,17 @@ +# Our services assume local devices are available +# Request and wait for systemd-udev-settle.service before basic.target +# +# Order behind network.service, because our network.service currently +# has DefaultDependencies=no. Other services are behind basic.target +# per DefaultDependencies=yes. + +[Unit] +Description=udev Settled +DefaultDependencies=no +Wants=systemd-udev-settle.service +After=systemd-udev-settle.service +Before=basic.target +Before=network.service + +[Install] +WantedBy=basic.target