Skip to content

Commit

Permalink
misc_systemd_units: Add udev-settled.target
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
donald committed Mar 14, 2018
1 parent 7d582de commit 49bb117
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
1 change: 1 addition & 0 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
17 changes: 17 additions & 0 deletions misc_systemd_units/udev-settled.target
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 49bb117

Please sign in to comment.